我有一个列表(g
),如下所示。要从其中一个嵌入列表(例如第一个列表)中删除元素k
,我可以执行以下操作:g[[1]]$k <- NULL
。
但是,当我尝试从所有嵌入列表中删除元素时k
,我的lapply
代码失败了吗?是否有Base R修复程序?
g <- list(b1 = list(data.frame(a = 1:3), k = 4:6), b2 = list(data.frame(a = 8:9), k = 7:9))
lapply(1:length(g), function(i) g[[i]]$k <- NULL) ## FAILS to delete `k` from all embedded lists
R是一种功能语言,因此传递了参数的副本,而不是传递给它们的指针。函数不应在参数的“原始”上进行修改。因此,除非对原名称(或此处所做的替代名称)进行了分配,否则您不应假定对该函数内部访问的值的修改在该函数的环境之外是“可见的” :
> g2 <- lapply(g, function(i){ i$k <- NULL; i})
> g2
$b1
$b1[[1]]
a
1 1
2 2
3 3
$b2
$b2[[1]]
a
1 8
2 9
另请注意:在将“ k”值归零后,需要返回修改后的元素。似乎更直接地传递实际元素而不是使用索引。<-
和<<-
函数不允许使用“不修改参数”规则。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句