使用双方括号的R中的子集列表



在阅读了几个关于R中的子集列表的线程后,我试图通过在Rstudio中闲逛来完全理解这个概念。我以为我理解了这个概念,直到我遇到了以下内容:

x <- list(list(list(1), 2), list(list(list(3), 4), 5), 6)

为什么x[[1]]返回一个包含两个元素的列表,而x[[1]][[1]]也返回一个列表?

好吧,如果你只写这样的列表定义-

x <- list(
list(
list(1),
2
),
list(
list(
list(3),
4
),
5
),
6
)

那么很容易看出CCD_ 3是

[[1]]
[[1]][[1]]
[1] 1

[[2]]
[1] 2

因此x[[1]]包括两个元素——一个元素1的列表和向量2。CCD_ 5提取一个元素的列表。

查看带有两个额外空格的代码,以帮助使结构更加清晰:

x <- list(  list( list(1), 2), list(list(list(3), 4), 5), 6)

x的第一个元素是:list( list(1), 2)#显然是一个包含两个元素的列表

该列表的第一个元素是:list(1)#也是一个列表,但有一个元素

单括号进行子集设置。双括号用于提取。

因此x[1]是单个元素列表(x简化为仅其第一个元素(。

但是您执行了x[[1]],它从x中提取了第一个元素,正如其他人所解释的,它是一个两个元素的列表。

CCD_ 12从CCD_ 13的第一元素中提取第一元素。

最新更新