2015-02-05 47 views
2

說,我們有重複進行嵌套列表

a <- list(letters[1:4],letters[5:6]) 

我們如何在每個單元內重複獲得類似

b <- list(list(letters[1:4],letters[1:4]),list(letters[5:6],letters[5:6])) 

列表我可以做一個空列表,對於[ 1]和a [2]用複製的矢量填充它,然後將其全部添加到一個大列表中。

但我認爲應該有一個快速的方式,我失蹤了?

我做

lapply(a, function(x){replicate(2,x, simplify=FALSE)}) 

但索引似乎有些奇怪 例如

[[1]] 
[[1]][[1]] 
[[1]][[1]][[1]] 
[1] "a" "b" "c" "d" 

[[1]][[1]][[2]] 
[1] "a" "b" "c" "d" 

回答

2

這裏有一個選項:

lapply(a, function(X) rep(list(X), 2)) 
# [[1]] 
# [[1]][[1]] 
# [1] "a" "b" "c" "d" 
# 
# [[1]][[2]] 
# [1] "a" "b" "c" "d" 
# 
# 
# [[2]] 
# [[2]][[1]] 
# [1] "e" "f" 
# 
# [[2]][[2]] 
# [1] "e" "f" 
1

您可以將replicate應用於列表中的每個元素。在這裏,我們lapply這樣做:

lapply(a, replicate, n=2, simplify=F) 

nsimplify是由lapply轉發到replicate參數(參見?replicate)。這將產生:

List of 2 
$ :List of 2 
    ..$ : chr [1:4] "a" "b" "c" "d" 
    ..$ : chr [1:4] "a" "b" "c" "d" 
$ :List of 2 
    ..$ : chr [1:2] "e" "f" 
    ..$ : chr [1:2] "e" "f" 

注意,我們展示的str(...)爲了清晰的輸出,而不是實際的結果。