替换列表中的值

标签 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' 

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

最佳答案

使用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的递归版本)。

关于替换列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292757/

相关文章:

r - 如何修改 R 包以创建用于重新加权核密度估计的新包?

r - 将所有列合并为一列而不保留列名

r - 如何合并大的稀疏矩阵

r - 以编程方式通过 glm() 将 family= 传递给 step()

r - 如何让 R 停止接受列名的部分匹配?

r - 在 R 中使用 cowplot 对齐 image() 图

r - 在没有科学记数法的情况下将具有大量数字的 .csv 导入 R

mysql - RMySQL - dbWriteTable() - 此 MySQL 版本不允许使用命令

r - 评估并引用data.table

r - 安装特定版本的bioconductor包