我是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"
答案 0 :(得分:4)
您似乎正在使用找到here的确切示例,尽管这可能是一个常见的列表示例。
本质上,x[2]
是"切片",它是长度为1的list
,包含x的第二项。 x[[2]]
是 x的第二项。您可以使用class(x[2])
和class(x[[2]])
对此进行验证。
在编程中,我发现在处理列表时避免单一括号是有帮助的,并为矢量,数组和data.frames保留它们。
答案 1 :(得分:-1)
X
已成为列表清单。如果你只是运行x
,你应该得到它的所有元素,那么x[[2]]
结果应该是有意义的。
要获取第二个列表的第一个元素,请尝试x[[2]][1]
,它是“第二个对象x列表中的第一个对象。”
R中另一个有用的技巧是使用str(x)
来显示对象的结构,在这种情况下是列表的类型及其内容。