我几乎了解 R 中的列表索引,但我有一些挥之不去的问题。具体来说,我试图了解使用多个索引来获取列表中的不同数据层,以及在每个数据类型的每个级别使用的括号类型。首先,我将展示一个简单的示例列表和我到目前为止的理解。
#Make an example list "L" containing different types of data
x<- matrix(1:12,3,4)
y<- seq(2,17,3)
z<- list(letters[1:5],LETTERS[1:5],letters[6:10],LETTERS[6:10])
L<- list(x,y,z)
顶级索引:
L 是包含 3 个元素 x、y 和 z 的列表。要查看列表中的元素,请使用双括号。
#see matrix x, the first element of list L
x
L[[1]]
第二级索引:
只需在指定该元素的双括号后面添加该元素的任何数据类型的索引即可。
#List L's first element is matrix x, see x's row 2 column 3 value:
x[2,3]
L[[1]][2,3]
#List L's second element is vector y, see y's 4th value:
y[4]
L[[2]][4]
#List L's third element is list z, see z's first element:
z[[1]]
L[[3]][[1]]
第三级索引:只需继续为每个级别添加括号即可。
#List L's third element is list z, list z's first element is vector letters[1:5],
#see list z's first element's fifth value:
letters[1:5][5]
z[[1]][5]
L[[3]][[1]][5]
好的。所以这一切都很简单。您可以使用 [[element]] 表示列表,使用 [row,column] 表示矩阵,使用 [index] 表示向量。我的问题是关于你什么时候不这样做。
问题:
如果您对矩阵和向量使用双括号,它仍然有效。那么矩阵和向量的单括号和双括号有什么区别吗?
如果您在列表中使用单个括号,它仍然有效。但 [1] 返回一个包含元素 1 的列表,而不是返回(与 [[1]] 一样)第一个元素作为该元素。因此,您可以使用 list[c(elements)] 来获取包含以下子集的列表元素。还有其他原因让您在列表中使用单括号吗?
我在这里并没有真正涉及数据框,它是一种列表。但它们的形状像矩阵,您也可以像矩阵一样使用 [row,column] 查看值。使用数据帧的 [行,列] 索引是否有任何“危险”?
注意:之前的讨论非常有帮助,但没有回答这些具体问题:如何正确使用R中的列表? https://stackoverflow.com/questions/2050790/how-to-correctly-use-lists-in-r
用于访问列表或数据帧元素的 [] 和 [[]] 表示法之间的区别 https://stackoverflow.com/questions/1169456/in-r-what-is-the-difference-between-the-and-notations-for-accessing-the/1169973#1169973