替换R中列表中的多个值

时间:2018-02-25 10:51:37

标签: r list matrix

如果我有:

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功能但我无法弄清楚。

3 个答案:

答案 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
}