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

foe*_*ehn 4 nested r list vector named

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

> L <- NULL
> L$a$b <- 1
> L
$a
$a$b
[1] 1
Run Code Online (Sandbox Code Playgroud)

因为我需要在循环中进行赋值,所以我必须使用括号而不是美元,例如,

> 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
Run Code Online (Sandbox Code Playgroud)

这超出了我的预期: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
Run Code Online (Sandbox Code Playgroud)

我的大多数作业都超过1,这就是我的代码看似有效但有时失败的原因.我想知道是否有任何方法可以解决这种意外行为,谢谢.

Das*_*son 5

你可以明确地说每件事都应该是它自己的清单

> L <- list()
> L[[a]] <- list()
> L[[a]][[b]] <- 1
> L
$a
$a$b
[1] 1
Run Code Online (Sandbox Code Playgroud)

但听起来如果你解释你的实际目标,可能有更好的方法来做你想要的.