重复列表对象n次

aL3*_*3xa 29 r

这似乎是一个简单的(它可能是),但由于我是脑力衰退,我已准备好羞辱墙.

如何复制列表对象n次数,然后将其包装在列表中?像这样的东西:

list(foo = "", bar = 0)
Run Code Online (Sandbox Code Playgroud)

为了得到:

list(
    list(foo = "", bar = 0),
    list(foo = "", bar = 0)
    )
Run Code Online (Sandbox Code Playgroud)


注意: for循环被认为是作弊

Tom*_*mmy 44

好吧,rep如果您只是将列表包装在另一个列表中,则可以工作(并且是"矢量化的")...

x <- list(foo = "", bar = 0)
rep(list(x), 2)
Run Code Online (Sandbox Code Playgroud)

该技巧还可用于分配NULL列表中的元素:

x[2] <- list(NULL)
Run Code Online (Sandbox Code Playgroud)


Dav*_*ith 11

这是一个双线脚本,可以满足您的需求:

el <- list(foo = "", bar = 0)
dups <- list(el)[rep(1,N)]
Run Code Online (Sandbox Code Playgroud)

请注意,这适用于任何对象"el",而不仅仅是列表.它使用像向量索引列表的技巧,使用单括号[]表示法(和重复索引).


mds*_*ner 5

有时循环是最简单的:

x <- list(foo = "", bar = 0)
lx <- vector("list", 2)
for (i in 1:length(lx)) lx[[i]] <- x
Run Code Online (Sandbox Code Playgroud)

如果您需要单独的名称,您可以使用 一次性分配它们names(lx) <- ...,或者以其他方式从空列表构建列表并为每次添加建立索引lx[[i]]- 这比预分配效率低。

一个稍微棘手的方法是应用长度为 的向量n

 lapply(1:2, function(j) x)
Run Code Online (Sandbox Code Playgroud)

只需为每个元素放入一个虚拟变量j并简单地返回变量(使用有关范围的可疑假设)。


Jos*_*ich 5

也许replicate?就像是:

L <- list(foo = "", bar = 0)
W <- replicate(10, L, FALSE)
Run Code Online (Sandbox Code Playgroud)