使用lapply来操作列表列表

时间:2016-04-26 09:08:13

标签: r

我有一个名为pval的20个子列表的列表,每个子列表pval[[i]]包含多个列。我想添加一个新列pval[[i]]$class来标记向量causal_snp的元素是否出现在每个子列表的X4列中,如果是,则在新列中标记1,否则0.

for (i in 1:20){
  pval[[i]]$class = ifelse(pval[[i]]$X4 %in% causal_snp, 1, 0)
  pval[[i]]$class = as.factor(pval[[i]]$classe)
}

上面的循环运行良好,但是我喜欢使用lapply函数而不是for循环,这是我尝试过的,但输出只包含每个子列表的新列: / p>

pval_bis <- lapply(pval, function(x) x$classe=ifelse(x$X4 %in% causal_snp, 1, 0))

我可以在lapply函数中修改什么来将所有列保留在子列表中并在每个子列表中添加新列?感谢。

1 个答案:

答案 0 :(得分:1)

如果我们使用lapply,请使用transform

创建列
lapply(pval, transform, classe = as.integer(X4 %in% causal_snp))

在OP的代码中,在分配后,我们需要返回x

 lapply(pval, function(x) {x$classe=ifelse(x$X4 %in% causal_snp, 1, 0);x})