【发布时间】:2013-08-28 02:51:56
【问题描述】:
我想创建一个嵌套列表,例如,
> 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 长,这就是我的代码看似有效但有时奇怪地失败的原因。我想知道是否有任何方法可以解决这种意外行为,谢谢。
【问题讨论】:
-
看起来像一个错误,或者至少在分配函数中有些奇怪。注意它们之间的区别:
L <- list(); L$a$b <- 1; is(L$a)和M <- list(); M[["a"]][["b"]] <- 1; is(M$a)。 -
最奇怪的是设置
L[[a]][[b]] <- 1后,获取L[[a]][[b]]会报错。 -
@flodel,你使用
a还是"a"?我使用字符串没有错误。
标签: r list vector nested named