重复列表对象n次

时间:2011-12-06 20:22:21

标签: r

这看起来很简单(也许可能是这样),但是因为我是脑力衰退,所以我准备好羞辱墙。

如何复制列表对象n次,之后将其包装在列表中?像这样:

list(foo = "", bar = 0)

为了获得:

list(
    list(foo = "", bar = 0),
    list(foo = "", bar = 0)
    )

<小时/> 注意: for循环被视为作弊

4 个答案:

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