2011-12-06 35 views
23

這似乎是一個容易的(可能是),但由於我是braindead,我已準備好登上恥辱牆。重複列表對象n次

如何複製一個列表對象n次,然後將其包裝在列表中?事情是這樣的:

list(foo = "", bar = 0) 

爲了得到:

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


注: for循環被認爲是作弊

回答

32

好,rep作品(而且是「矢量」),如果你只是在另一個列表包裹列表...

x <- list(foo = "", bar = 0) 
rep(list(x), 2) 

這招也可以用於分配給NULL列表中的一個元素:

x[2] <- list(NULL) 
4

有時一個循環是最簡單的:

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

如果您需要單個名稱,您可以使用names(lx) <- ...一次性分配這些名稱,或者以其他方式從空白名單中構建列表併爲其添加索引lx[[i]] - 效率低於預先分配。

稍微棘手的方式是lapply的長度n的載體:

lapply(1:2, function(j) x) 

只要把虛擬j每個元素,並返回平凡你的變量(使用約範圍問題的假設)。

2

也許replicate?喜歡的東西:

L <- list(foo = "", bar = 0) 
W <- replicate(10, L, FALSE) 
8

這裏有一個兩行腳本,你想要做什麼:

el <- list(foo = "", bar = 0) 
dups <- list(el)[rep(1,N)] 

注意,這將會對任何目標「厄爾尼諾」,不只是一個清單的工作。它使用像向量一樣對列表建立索引的技巧,使用單括號[]符號(和重複索引)。