R:嵌套列表中的默认值

R: Default values in nested lists

我目前正在 R 中构建一个递归循环,我必须在其中跟踪我在嵌套列表中的深度。但是,我在嵌套列表中计数时遇到了 运行 问题。

问题如下:

我有一个列表

myList <- list()

我测试列表中随机索引的值

myList[["test1"]]

NULL

我可以对这个值求和并得到零

sum(myList[["test1"]])

0

现在我给这个索引赋值

myList[["test1"]] <- sum(myList[["test1"]]) + 1

接下来我想在列表的更深处做同样的事情

myList[["test1"]][["test2"]]

Error in myList[["test1"]][["test2"]] : subscript out of bounds

为什么会这样?

我不确定你想做什么,但这是你所做的一个更简单的版本:

> x<-1
> x[["test2"]]
Error in x[["test2"]] : subscript out of bounds

这里x是一个数值向量。它仍然可以使用 [[ 进行下标,但是 x 中没有名为 test2 的元素,因此当您尝试访问该元素时会出现 "out of bounds" 错误。

即使是包含多个元素的向量也会出现此错误:

> c(1,2)[["test2"]]
Error in c(1, 2)[["test2"]] : subscript out of bounds

但是,如果我们将其中之一命名为 test2 那么下标 returns 就是:

> c(1,2,test2=3)[["test2"]]
[1] 3

当您将 myList[["test1"]] 的值设置为...

myList[["test1"]] <- sum(myList[["test1"]]) + 1

myList[["test1"]] 成为 1 元素数值向量,而不是列表

如果你想制作 test1 一个列表,其中一个元素是另一个名为 test2 的(子)列表,你可以这样做...

myList <- list()
myList[["test1"]] <- list(sum(myList[["test1"]]) + 1)
myList[["test1"]]["test2"] <- list(sum(myList[["test1"]][[1]]) + 1)

myList
myList$test1
myList$test1$test2