这似乎是一个简单的(它可能是),但由于我是脑力衰退,我已准备好羞辱墙.
如何复制列表对象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)
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",而不仅仅是列表.它使用像向量索引列表的技巧,使用单括号[]表示法(和重复索引).
有时循环是最简单的:
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并简单地返回变量(使用有关范围的可疑假设)。
也许replicate?就像是:
L <- list(foo = "", bar = 0)
W <- replicate(10, L, FALSE)
Run Code Online (Sandbox Code Playgroud)