具有三个以上嵌套的列表的列表分配

Nic*_*ish 6 nested r list

我无法找到此错误的修复程序.我之前已经实施了解决方法,但我想知道这里是否有人知道它为什么会发生.

以下不会按预期返回错误

q <- list()
q[["a"]][["b"]] <- 3
q[["a"]][["c"]] <- 4
Run Code Online (Sandbox Code Playgroud)

但是,当我添加另一个嵌套级别时,我得到:

q <- list()
q[["a"]][["b"]][["c"]]<- 3
q[["a"]][["b"]][["d"]] <- 4
Run Code Online (Sandbox Code Playgroud)

q [["a"]]中的错误[["b"]] [["d"]] < - 4:提供的元素多于要替换的元素

如果我添加第四个嵌套列表,这会让我更加困惑:

q <- list()
q[["a"]][["b"]][["c"]][["d"]] <- 3
q[["a"]][["b"]][["c"]][["e"]] <- 4
Run Code Online (Sandbox Code Playgroud)

*tmp*[["c"]]中的错误:下标越界

我原本期望R为三重嵌套列表返回与四重嵌套列表相同的错误消息.

几个月前我第一次遇到这个问题.我正在运行R 3.4.3.

akr*_*run 6

如果我们str(q)从第一个赋值中检查它,它是一个list带有单个元素'a'的.在后续分配中,它正在创建命名向量而不是列表.

q <- list()
q[["a"]][["b"]] <- 3
q[["a"]][["c"]] <- 4
str(q)
#List of 1
# $ a: Named num [1:2] 3 4
#  ..- attr(*, "names")= chr [1:2] "b" "c"

is.vector(q$a)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如果我们尝试在下一级别进行分配,那就像基于索引名称的赋值,即'b'是空的并在'c'上赋值.选项是list通过包装值来创建元素list

q <- list()
q[["a"]][["b"]][["c"]]<- list(3)
q[["a"]][["b"]][["d"]] <- list(4)
Run Code Online (Sandbox Code Playgroud)

它返回结构,其中'q'为list1个元素,即'a',它又是list长度为1('b'),因为我们为'c'和'd分配了两个值'3'和'4' ',它是list2个元素中的一个

str(q)
#List of 1
# $ a:List of 1
#  ..$ b:List of 2
#  .. ..$ c:List of 1
#  .. .. ..$ : num 3
#  .. ..$ d:List of 1
#  .. .. ..$ : num 4
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我们可以嵌套"N"数字list小号

q <- list()
q[["a"]][["b"]][["c"]][["d"]] <- list(3)
q[["a"]][["b"]][["c"]][["e"]] <- list(4)
Run Code Online (Sandbox Code Playgroud)

注意:目前尚不清楚预期的输出结构