2
list(list(NULL,NULL),list(NULL,NULL))

结果是:

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

[[1]][[2]]
NULL

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

[[2]][[2]]
NULL

假设我想对大于 2 的数字执行此操作,有没有办法通过复制获得相同的列表结构?

4

3 回答 3

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
于 2014-09-22T06:52:34.317 回答
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

或者更简单(感谢@RichardScriven)

replicate(3, list(replicate(3, list(NULL))))
于 2014-09-22T05:25:33.973 回答
3

也许编写一个小函数,以便您可以调整复制和每个列表的长度,并且还可以选择返回数组或列表。

nest <- function(len = 1L, n = 1L, ...) {
    replicate(n, vector("list", len), ...)
}
nest()
nest(2)
nest(2, simplify = FALSE)
nest(3, 2, simplify = FALSE)
于 2014-09-22T05:43:55.323 回答