【问题标题】:Lists and brackets [duplicate]列表和括号[重复]
【发布时间】:2016-11-01 21:13:58
【问题描述】:

我是 R 新手,想了解一些关于列表的知识。假设我有以下内容:

n = c(2, 3, 5) 
s = c("aa", "bb", "cc", "dd", "ee")
b = c(TRUE, FALSE, TRUE, FALSE, FALSE)
x = list(n, s, b, 3)

我理解以下内容(我认为),因为我要求 R 返回第二个值列表(因为我使用的是单括号)。

x[2]
# [[1]]
# [1] "aa" "bb" "cc" "dd" "ee"

我不明白,因为我使用的是应该返回单个值的双括号。实际上,我不是我所期望的 R 应该回到这里。我要求一个值,但第二组对象是另一个列表。

x[[2]]
# [1] "aa" "bb" "cc" "dd" "ee"

【问题讨论】:

  • @ZheyuanLi - 我确实看过。 "[[" 选择单个元素。那么为什么它会返回五个元素呢?
  • @RandyMinder 这个列表由向量组成——“列表元素”是向量。 [[ 返回一个向量。 [ 返回另一个向量列表。

标签: r


【解决方案1】:

看起来您正在使用找到的确切示例 here,尽管这可能是一个常见的列表示例。

本质上,x[2] 是一个“切片”,它是一个长度为 1 的 list,其中包含 x 的第二项。 x[[2]] x 的第二项。您可以使用class(x[2])class(x[[2]]) 验证这一点。

在编程中,我发现在处理列表时避免使用单括号很有帮助,并将它们保留给向量、数组和 data.frames。

【讨论】:

    【解决方案2】:

    X 已成为列表列表。如果你只是运行x,你应该得到它的所有元素,那么x[[2]] 结果应该是有意义的。

    要获取第二个列表的第一个元素,请尝试x[[2]][1],即“对象 x 的第二个列表中的第一个对象”。

    R 中另一个有用的技巧是使用str(x),它向您显示对象的结构,在本例中是列表的类型及其内容。

    【讨论】:

    • 我想我的主要困惑是为什么 x[2] 和 x[[2]] 返回完全相同的东西。它们执行不同的操作。
    • @RandyMinder - x list 你有 4 个单独的子结构,它们也是 lists。 x[[2]]选择了一个单个子结构,相当于x中存储的第二个list
    • 但是@RandyMinder、x[2]x[[2]] 不返回相同的东西:一个是五个字符的向量,一个是一个包含一个元素的列表,该元素是一个包含五个字符的向量字符。访问此列表类似于Inceptionx[2]x[2][1] 相同与x[2][1][1][1][1] 相同,等等,了解为什么会像列表一样发生这种情况非常重要。
    • @r2evans - 你的解释真的很有帮助。如果你输入这个作为答案,我会接受。
    猜你喜欢
    • 2018-10-10
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2018-09-09
    • 2023-02-06
    • 2014-11-26
    相关资源
    最近更新 更多