防止R嵌套列表转换为命名向量

时间:2013-08-25 14:46:00

标签: r list vector nested named

我想创建一个嵌套列表,例如

> 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,这就是我的代码似乎有效但但有时失败的原因。我想知道是否有任何方法可以解决这种意外行为,谢谢。

2 个答案:

答案 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首先被强制为值类型的零长度向量。