考虑以下代码创建的二级列表:
a = list()
s = seq(1,5)
for (i in s) {
a[[i]] = list(field1 = i, field2 = letters[i])
}
说我想在每个子列表中添加第三个元素“ field3”,并使用以下sapply(..)和父代赋值运算符的组合来实现:
sapply(s, function(x) a[[x]]$field3 <<- 5 - x)
这种对父代作业运算符的危险或认为是滥用吗? 推荐的替代方法是什么?通过使用此sapply语句而不是for循环,是否可以潜在地提高速度?
答案 0 :(得分:1)
在这种情况下,我倾向于使用for-loop
。这很清楚,sapply
并不会加快AFAIK的速度,因为sapply
只是for-loop
背后的特殊情况。有关详细信息,请参见here。
例如:
for (i in s) a[[i]]$field3 <- 5 - i