替换列表中的值

STA*_*tar 6 r

我有一个嵌套列表,看起来像这样:

characlist<-list(list(c(1,2,3,4)),c(1,3,2,NA))
Run Code Online (Sandbox Code Playgroud)

接下来,我想用NA替换所有等于1的值.我尝试了以下,但它产生了一个错误:

lapply(characlist,function(x) ifelse(x==1,NA,x))

Error in ifelse(x == 1, NA, x) : 
  (list) object cannot be coerced to type 'double' 
Run Code Online (Sandbox Code Playgroud)

有人能告诉我代码有什么问题吗?

tal*_*lat 13

rapply改为使用:

> rapply(characlist,function(x) ifelse(x==1,NA,x), how = "replace")
#[[1]]
#[[1]][[1]]
#[1] NA  2  3  4
#
#
#[[2]]
#[1] NA  3  2 NA
Run Code Online (Sandbox Code Playgroud)

您最初的方法中的问题是您的第一个列表元素本身就是一个列表.因此,您不能ifelse像在原子矢量上那样直接应用逻辑.通过使用?rapply你可以避免这个问题(rapply是一个递归版本lapply).