gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:54:30 24 4
gpt4 key购买 nike

我一直无法找到解决此错误的方法。我之前已经实现了变通办法,但我想知道这里是否有人知道它为什么会发生。

以下未按预期返回错误

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

但是,当我添加另一层嵌套时,我得到:
q <- list()
q[["a"]][["b"]][["c"]]<- 3
q[["a"]][["b"]][["d"]] <- 4

Error in q[["a"]][["b"]][["d"]] <- 4 : more elements supplied than there are to replace



如果我添加第四个嵌套列表,我会得到:
q <- list()
q[["a"]][["b"]][["c"]][["d"]] <- 3
q[["a"]][["b"]][["c"]][["e"]] <- 4

Error in *tmp*[["c"]] : subscript out of bounds



我希望 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

如果我们尝试在下一级进行赋值,就像基于索引名称的赋值,即为空的 'b' 并在 'c' 上赋值。选项是创建一个 list元素通过用 list 包裹值
q <- list()
q[["a"]][["b"]][["c"]]<- list(3)
q[["a"]][["b"]][["d"]] <- list(4)

它返回带有 '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

通过这种方式,我们可以嵌套 'n' 个 list
q <- list()
q[["a"]][["b"]][["c"]][["d"]] <- list(3)
q[["a"]][["b"]][["c"]][["e"]] <- list(4)

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

关于r - 具有大于三个嵌套的列表的列表分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49062426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com