2015-02-05 48 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(...)为了清晰的输出,而不是实际的结果。