如果我有:
mylist <- lapply(1:10, function(x) matrix(NA, nrow=2, ncol=2))
我想用例如:
替换列表中的第一,第二和第五个元素mymatrix=cbind(c(1,1),c(1,1))
我该怎么办?我尝试过:
mylist[c(1,2,5)]=mymatrix
但我无法替换新矩阵,因为它是另一个列表,而[[]]
我只能访问一个元素。
我想我必须使用lapply
功能但我无法弄清楚。
答案 0 :(得分:4)
这对你有用吗?
mylist[c(1, 2, 5)] <- lapply(mylist[c(1, 2, 5)], function(x) x <- mymatrix)
答案 1 :(得分:3)
与@jaSf类似,但更快,更清洁&#34;:
idx <- c(1, 2, 3)
mylist[idx] <- list(mymatrix)
微基准:
Unit: nanoseconds
expr min lq mean median uq max neval cld
this 687 828 1135.152 959 1127 2787458 1e+05 a
jaSf 2982 3575 4482.867 4034 4535 2979424 1e+05 b
否则会建议使用modifyList()
更新命名列表,如:
foo <- list(a = 1, b = list(c = "a", d = FALSE))
bar <- modifyList(foo, list(e = 2, b = list(d = TRUE)))
str(foo)
str(bar)
答案 2 :(得分:1)
另一种选择可能只使用far-loop
:
for(i in c(1,2,5)){
mylist[[i]] <- mymatrix
}