【问题标题】:Subsetting list in R using double square bracketsR中使用方括号的子集列表
【发布时间】:2018-07-11 20:34:28
【问题描述】:

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

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

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

【问题讨论】:

  • 您正在设置第一个列表元素,它也是一个嵌套列表
  • 我不明白你在期待什么。 x[[1]] 返回一个包含两个元素的列表,因为您有一个包含两个元素的列表存储在x 的第一个槽中。但是每次嵌套列表的总深度都在减少。该列表在第一个插槽中存储了一个列表,因此x[[1]][[1]] 返回一个列表。 (您的命令以三个嵌套的 list() 调用开始)。你期望得到什么?或者你想退回什么?

标签: r list subset


【解决方案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]] 提取一个元素的列表。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      单括号做子集。双括号进行提取。

      所以x[1] 是一个单元素列表(x 减少到只有它的第一个元素)。

      但是您做了x[[1]],它从x 中提取了第一个元素,并且正如其他人所解释的那样,它是一个包含两个元素的列表。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多