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

时间:2018-07-11 20:34:28

标签: r list subset

在阅读了有关R中子集列表的多个线程之后,我试图通过在Rstudio中四处闲逛来完全理解这一概念。我以为我理解了这个概念,直到遇到以下问题:

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

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

3 个答案:

答案 0 :(得分:1)

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

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

那么很容易看到x[[1]]

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


[[2]]
[1] 2

因此x[[1]]包含两个元素-一个元素1的列表和向量2。x[[1]][[1]]提取一个元素的列表。

答案 1 :(得分:1)

使用两个额外的空格查看代码,以使结构更清晰:

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

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

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

答案 2 :(得分:0)

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

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

但是您做了x[[1]],它从x中提取了第一个元素,这是一个由两个元素组成的列表,如其他人所述。

x[[1]][[1]]x的第一个元素中提取第一个元素。