我有一个嵌套列表,看起来像这样:
characlist<-list(list(c(1,2,3,4)),c(1,3,2,NA))
接下来,我想用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'
有人可以告诉我代码有什么问题吗?
最佳答案
使用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
最初方法的问题在于,第一个列表元素本身就是一个列表。因此,您不能像在原子矢量上那样直接应用
ifelse
逻辑。通过使用?rapply
,您可以避免该问题(rapply
是lapply
的递归版本)。
关于替换列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292757/