我知道这是一个新手问题,但我试图了解[[]]和$访问列表中元素之间的区别。是否有特殊情况我有优势使用一个而不是另一个?
我想要理解你可以使用[[选择任何单个元素,返回的对象将由元素的类型决定,而[返回所选元素的列表对象甚至是包含多个元素的列表]。另一方面,当使用$引用列表中的元素时,返回的类型不是列表而是实际值。
这是否正确?有什么场合我必须使用[[]]或$?
感谢您的帮助。
答案 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