我无法找到此错误的修复程序.我之前已经实施了解决方法,但我想知道这里是否有人知道它为什么会发生.
以下不会按预期返回错误
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.
如果我们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'为list
1个元素,即'a',它又是list
长度为1('b'),因为我们为'c'和'd分配了两个值'3'和'4' ',它是list
2个元素中的一个
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)
注意:目前尚不清楚预期的输出结构