我想创建一个嵌套列表,例如
> L <- NULL
> L$a$b <- 1
> L
$a
$a$b
[1] 1
因为我需要在循环中进行赋值,所以我必须使用括号而不是美元,例如,
> L <- NULL
> a <- "a"
> b <- "b"
> L[[a]][[b]] <- 1
> L
a
1
> b <- "b1"
> L[[a]][[b]] <- 1
Error in L[[a]][[b]] <- 1 :
more elements supplied than there are to replace
这超出了我的预期:L成为命名向量而不是嵌套列表。但是,如果指定的值是长度超过1的向量,则问题将消失,
> L <- NULL
> L[[a]][[b]] <- 1:2
> L
$a
$a$b
[1] 1 2
> b <- "b1"
> L[[a]][[b]] <- 1
> L
$a
$a$b
[1] 1 2
$a$b1
[1] 1
我的大多数作业都超过1,这就是我的代码似乎有效但但有时失败的原因。我想知道是否有任何方法可以解决这种意外行为,谢谢。
答案 0 :(得分:5)
你可以明确地说每件事都应该是它自己的清单
> L <- list()
> L[[a]] <- list()
> L[[a]][[b]] <- 1
> L
$a
$a$b
[1] 1
但听起来,如果你解释一下你的实际目标,可能会有更好的方法来做你想做的事。
答案 1 :(得分:2)
见帮助(“[[”)
当$&lt; - 应用于NULL x时,它首先将x强制转换为list()。这也是[[&lt; - 如果替换值的长度大于1:如果值的长度为1或0,则x首先被强制为值类型的零长度向量。