这看起来很简单(也许可能是这样),但是因为我是脑力衰退,所以我准备好羞辱墙。
如何复制列表对象n
次,之后将其包装在列表中?像这样:
list(foo = "", bar = 0)
为了获得:
list(
list(foo = "", bar = 0),
list(foo = "", bar = 0)
)
<小时/> 注意: for循环被视为作弊
答案 0 :(得分:41)
好吧,如果您只是将列表包装在另一个列表中,rep
可以工作(并且是“矢量化的”)...
x <- list(foo = "", bar = 0)
rep(list(x), 2)
该技巧还可用于将NULL
分配给列表中的元素:
x[2] <- list(NULL)
答案 1 :(得分:11)
这是一个完成你想要的双线脚本:
el <- list(foo = "", bar = 0)
dups <- list(el)[rep(1,N)]
请注意,这适用于任何对象“el”,而不仅仅是列表。它使用像向量索引列表的技巧,使用单括号[]表示法(和重复索引)。
答案 2 :(得分:4)
有时循环是最简单的:
x <- list(foo = "", bar = 0)
lx <- vector("list", 2)
for (i in 1:length(lx)) lx[[i]] <- x
如果您需要单独的名称,您可以使用names(lx) <- ...
一次性分配它们,或者从空的列表构建列表并为每次添加lx[[i]]
索引它 - 这比前一个更低效-分配。
一种稍微复杂的方法是对长度为n
的矢量进行补贴:
lapply(1:2, function(j) x)
为每个元素添加一个虚拟j
并轻松返回您的变量(使用有关范围的可疑假设)。
答案 3 :(得分:2)
也许replicate
?类似的东西:
L <- list(foo = "", bar = 0)
W <- replicate(10, L, FALSE)