替换列表中的值

时间:2016-02-09 13:00:07

标签: r

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

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' 

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

2 个答案:

答案 0 :(得分:10)

改为使用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可以避免此问题(rapplylapply的递归版本。)

答案 1 :(得分:3)

另一个选项是在我们replace unlist ed向量中1到NA的元素之后使用skeleton。我们将list指定为原始 v1 <- unlist(characlist) relist(replace(v1, v1==1, NA), skeleton=characlist) #[[1]] #[[1]][[1]] #[1] NA 2 3 4 #[[2]] #[1] NA 3 2 NA 以获得相同的结构。

{{1}}