2014-09-22 30 views
2
list(list(NULL,NULL),list(NULL,NULL)) 

结果是:[R如何复制空值在列表

[[1]] 
[[1]][[1]] 
NULL 

[[1]][[2]] 
NULL 

[[2]] 
[[2]][[1]] 
NULL 

[[2]][[2]] 
NULL 

假如我想为更大的数字做比2,有没有办法让与复制相同的目录结构?

回答

4

使用replicate

replicate(n=3, {replicate(n=3,NULL,simplify=FALSE)},simplify=FALSE) 


[[1]] 
[[1]][[1]] 
NULL 

[[1]][[2]] 
NULL 

[[1]][[3]] 
NULL 


[[2]] 
[[2]][[1]] 
NULL 

[[2]][[2]] 
NULL 

[[2]][[3]] 
NULL 


[[3]] 
[[3]][[1]] 
NULL 

[[3]][[2]] 
NULL 

[[3]][[3]] 
NULL 

或者更simplly(感谢@RichardScriven)

replicate(3, list(replicate(3, list(NULL)))) 
3

也许写一个小功能,让你可以调整重复,每个列表的长度,也有返回数组或列表的选项。

nest <- function(len = 1L, n = 1L, ...) { 
    replicate(n, vector("list", len), ...) 
} 
nest() 
nest(2) 
nest(2, simplify = FALSE) 
nest(3, 2, simplify = FALSE) 
4

可以使用rep用更少的字母做到这一点:

rep(list(rep(list(NULL), 3)), 3) 


[[1]] 
[[1]][[1]] 
NULL 

[[1]][[2]] 
NULL 

[[1]][[3]] 
NULL 


[[2]] 
[[2]][[1]] 
NULL 

[[2]][[2]] 
NULL 

[[2]][[3]] 
NULL 


[[3]] 
[[3]][[1]] 
NULL 

[[3]][[2]] 
NULL 

[[3]][[3]] 
NULL