为什么在R中使用list [n]而不是list [[n]]索引到列表中,却不能达到您的期望?

时间:2019-04-26 00:52:58

标签: r list indexing sublist

在R列表中,为什么用[n]而不是[[n]]进行索引时不会像非R程序员所期望的那样返回第n个元素?

lfile <- list('fileA.xls', 'file2.xls', 'fileY.xls')
ll <- list(list(1,2), list(3), list(4,5,6), list(7,8))
lv <- list(c(1,2), c(3), c(4,5,6), c(7,8))

> lfile[2]
[[1]]
[1] "file2.xls" # returns SUBLIST, not n'th ELEMENT

> lfile[[2]]
[1] "file2.xls" # returns ELEMENT

1 个答案:

答案 0 :(得分:0)

一般来说,l[n]返回一个子列表(长度可能是一个),而l[[n]]返回一个元素

> lfile[2]
[[1]]
[1] "file2.xls" # returns SUBLIST of length one, not n'th ELEMENT

> lfile[[2]]
[1] "file2.xls" # returns ELEMENT

来自R intro manual: 6.1 Lists

  

将Lst [[1]]与Lst [1] 区分开来非常重要。

     

“ [[…]]”是用于选择单个元素的运算符,

     

“ […]”是一般的下标运算符。

     

因此,前者是列表Lst中的第一个对象,如果它是命名列表,则不包括名称。后者是列表Lst的子列表,仅由第一个条目组成。如果它是一个命名列表,则名称将转移到子列表中。

这是一个R陷阱(R以一种非显而易见的方式和未充分记录的方式不同于其他语言),尽管一些R用户一如既往地坚持说,它正在按照自己所说的去做(在某些地方是深层的并且没有索引)。 doc。但是, list的帮助页面仅向您显示如何创建列表,而没有显示如何对其进行索引(!)。仅?[或{{3} }手册页实际上告诉您如何索引到列表(!)