访问列表中元素的不同方法

时间:2017-03-22 21:54:04

标签: r list

我知道这是一个新手问题,但我试图了解[[]]和$访问列表中元素之间的区别。是否有特殊情况我有优势使用一个而不是另一个?

我想要理解你可以使用[[选择任何单个元素,返回的对象将由元素的类型决定,而[返回所选元素的列表对象甚至是包含多个元素的列表]。另一方面,当使用$引用列表中的元素时,返回的类型不是列表而是实际值。

这是否正确?有什么场合我必须使用[[]]或$?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以阅读“R for Data Science”的the list chapter

基本上,当列表元素具有名称时,您可以使用$

mylist <- list(x = 1:3, y = 4:6)
names(mylist)
[1] "x" "y"

mylist$x
[1] 1 2 3

如果您愿意,可以使用[[]]作为命名列表以及未命名的列表:

mylist[[1]]
[1] 1 2 3

但如果列表元素未命名,则无法使用$

mylist <- list(1:3, 4:6)
names(mylist)
NULL

mylist$x
NULL

mylist[[1]]
[1] 1 2 3

答案 1 :(得分:1)

来自R语言定义(https://cran.r-project.org/doc/manuals/r-release/R-lang.html#Indexing):

  

使用$的表单适用于递归对象,例如列表和   成对列表。它只允许文字字符串或符号   指数。也就是说,索引是不可计算的:对于你的情况   需要评估表达式以找到索引,使用x [[expr]]。

例如:

my.list = list("a"=1 , "b"=2)
my.index = "b"
#this works
my.list[[my.index]]    
# this doesn't    
my.list$my.index