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