r语言 - 具有大于三个嵌套的列表的列表分配



我无法找到此错误的修复方法。我以前实施过变通方法,但我想知道这里是否有人知道为什么会发生这种情况。

以下内容未按预期返回错误

q <- list()
q[["a"]][["b"]] <- 3
q[["a"]][["c"]] <- 4

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

q <- list()
q[["a"]][["b"]][["c"]]<- 3
q[["a"]][["b"]][["d"]] <- 4
q[["a"]][["b"]][

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

如果我添加第四个嵌套列表,我会更加混乱:

q <- list()
q[["a"]][["b"]][["c"]][["d"]] <- 3
q[["a"]][["b"]][["c"]][["e"]] <- 4

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

我本来希望 R 为三重嵌套列表返回与四重嵌套列表相同的错误消息。

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

如果我们检查第一个赋值的str(q),它是一个具有单个元素"a"的list。在随后的赋值中,它正在创建一个命名向量而不是一个列表。

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

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

q <- list()
q[["a"]][["b"]][["c"]]<- list(3)
q[["a"]][["b"]][["d"]] <- list(4)

它返回带有"q"的结构,作为 1 个元素的list,即"a",它又是长度为 1 ('b'( 的list,当我们为"c"和"d"分配两个值"3"和"4"时,它是 2 个元素的list

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

通过这种方式,我们可以嵌套"n"个list

q <- list()
q[["a"]][["b"]][["c"]][["d"]] <- list(3)
q[["a"]][["b"]][["c"]][["e"]] <- list(4)

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

相关内容

最新更新