2014-09-22 35 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