Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将NA追加到列表中_R_List_Append - Fatal编程技术网

R 将NA追加到列表中

R 将NA追加到列表中,r,list,append,R,List,Append,我有以下清单: list<-list(c(0.295017919325516, 0.280103991013988, 0.240898624596022, 0.199677069304782, 0.173637393108632, 0.222134859203746, 0.39823944169409, 0.391882741855366, 0.21577600728402), c(0.28121757181295, 0.277422184992648, 0.230017887789

我有以下清单:

list<-list(c(0.295017919325516, 0.280103991013988, 0.240898624596022, 
0.199677069304782, 0.173637393108632, 0.222134859203746, 0.39823944169409, 
0.391882741855366, 0.21577600728402), c(0.28121757181295, 0.277422184992648, 
0.230017887789819, 0.191847488360009, 0.17455140669152, 0.205591186569629, 
0.4063428966179, 0.429863712702859, 0.248064462722642), c(0.271557391953248, 
0.294647273450576, 0.259500615962201, 0.248402892690127, 0.178084892253651, 
0.215066463654523, 0.40516205719907, 0.27382824544534), c(0.260821771231842, 
0.260253867737171, 0.264572075610469, 0.175500821018062, 0.181187522322482, 
0.197811527945056, 0.393032174562975, 0.336606928254994), c(0.274566347073192, 
0.271933284859567, 0.267972728722684, 0.211355730670407, 0.180921784930061, 
0.185393876280435, 0.384058108716521, 0.374405949140189, 0.312466672989218
), c(0.282151980564761, 0.28721079361022, 0.31787138268144, 0.24739190298477, 
0.186615966111228, 0.158811690362167, 0.395599896385276, 0.386374201627084, 
0.297715499076704))
但它给出了错误的结果

核心问题是

append(list[[1]],NA,after=list[[1]][7])
给予

虽然我希望是这样

 [1] 0.2950179 0.2950179 0.2801040 0.2408986 0.1996771 0.1736374 0.2221349        NA
 [9] 0.3982394 0.3918827

我不明白为什么。

如果我理解正确,您希望替换第7个元素。。。如果是,则替换列表中每个向量的第7个元素的代码为:

for (i in length(list){
  if (length(list[[i]]) < 9){
    list[[i]][7]<-NA
  }
}
for(长度为i)(列表){
如果(长度(列表[[i]])<9){
列表[[i]][7]这里是一个基本的R方法

list[lengths(list) < 9] <- lapply(list[lengths(list) < 9], function(x){
  n <- length(x)
  y <- c(x[seq_len(min(n, 7))], NA)
  if(n > 7) c(y, x[(7 + 1):n]) else y
})

list[3:4]
#[[1]]
#[1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
#[8]        NA 0.2738282
#
#[[2]]
#[1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
#[8]        NA 0.3366069

list[length(list)<9]只需使用
which
查找太短的列表项,并在
lappy
中使用
append
插入您的
NA
值:

ind <- which(lengths(L) < 9)
if (any(ind)) L[ind] <- lapply(L[ind], append, NA, after = 7)
L
# [[1]]
# [1] 0.2950179 0.2801040 0.2408986 0.1996771 0.1736374 0.2221349 0.3982394
# [8] 0.3918827 0.2157760
# 
# [[2]]
# [1] 0.2812176 0.2774222 0.2300179 0.1918475 0.1745514 0.2055912 0.4063429
# [8] 0.4298637 0.2480645
# 
# [[3]]
# [1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
# [8]        NA 0.2738282
# 
# [[4]]
# [1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
# [8]        NA 0.3366069
# ...

ind在您的示例预期输出中,您显示的是一个长度为10的向量,但您的描述说您希望它们都是9。此外,您是否需要替换多个值?谢谢,但我想在第7个元素之后添加一个元素,而不是替换它。谢谢!它可以工作,顺便问一句,您知道
append()的位置吗
问题来自于?@grouah它来自于对
之后的
的错误使用,它是
x
的索引,不是要追加的值。请查看
之后的=list[[1]][7]
的值是
0.3…
。然后在
帮助('append')中运行该示例
。巧合的是,
after=3
。如果更改为
after=0.3
,您将看到相同的行为,它将转到
1
(在R中,索引是基于1的)然后追加向量
0:1
,然后从
1
开始追加
x
的其余部分。这是一种奇怪但预期的行为。非常好的解决方案!谢谢。你知道为什么
append()
在我的情况下不起作用吗?@grouah,你应该使用
after=7
。你的循环也应该从
改为
(i长度(列表))
for(i顺序(列表))
。例如:
for(i顺序(列表)){if(长度(列表[[i]])<9{list[[i]]
list[lengths(list) < 9] <- lapply(list[lengths(list) < 9], function(x){
  n <- length(x)
  y <- c(x[seq_len(min(n, 7))], NA)
  if(n > 7) c(y, x[(7 + 1):n]) else y
})

list[3:4]
#[[1]]
#[1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
#[8]        NA 0.2738282
#
#[[2]]
#[1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
#[8]        NA 0.3366069
list[lengths(list) < 9] <- lapply(list[lengths(list) < 9], function(x){
  n <- length(x)
  i <- seq_len(min(n, 7))
  j <- seq_len(n)[-i]
  c(x[i], NA, x[j])
})
ind <- which(lengths(L) < 9)
if (any(ind)) L[ind] <- lapply(L[ind], append, NA, after = 7)
L
# [[1]]
# [1] 0.2950179 0.2801040 0.2408986 0.1996771 0.1736374 0.2221349 0.3982394
# [8] 0.3918827 0.2157760
# 
# [[2]]
# [1] 0.2812176 0.2774222 0.2300179 0.1918475 0.1745514 0.2055912 0.4063429
# [8] 0.4298637 0.2480645
# 
# [[3]]
# [1] 0.2715574 0.2946473 0.2595006 0.2484029 0.1780849 0.2150665 0.4051621
# [8]        NA 0.2738282
# 
# [[4]]
# [1] 0.2608218 0.2602539 0.2645721 0.1755008 0.1811875 0.1978115 0.3930322
# [8]        NA 0.3366069
# ...