Álv*_*gas 7 scope r function list
假设我有以下列表(注意非语法名称的用法)
list <- list(A = c(1,2,3),
`2` = c(7,8,9))
Run Code Online (Sandbox Code Playgroud)
因此,以下两种解析列表的方法有效:
`$`(list,A)
## [1] 1 2 3
`$`(list,`2`)
## [1] 7 8 9
Run Code Online (Sandbox Code Playgroud)
然而,这种方式继续失败。
id <- 2
`$`(list,id)
## NULL
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么最后一种方法不起作用以及我该如何解决它吗?谢谢。
您的id
是“计算索引”,运算符不支持该$
索引。从?Extract
:
和
[[
选择$
列表中的单个元素。主要区别在于$
不允许计算索引,而[[
允许。x$name
相当于x[["name", exact = FALSE]]
.
如果您有计算索引,请使用[[
提取。
l <- list(a = 1:3)
id <- "a"
l[[id]]
## [1] 1 2 3
`[[`(l, id) # the same
## [1] 1 2 3
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用$
运算符,则需要替换id
调用中的值$
,如下所示:
eval(bquote(`$`(l, .(id))))
## [1] 1 2 3
Run Code Online (Sandbox Code Playgroud)
id
是否非语法并不重要:
l <- list(`!@#$%^` = 1:3)
id <- "!@#$%^"
l[[id]]
## [1] 1 2 3
`[[`(l, id)
## [1] 1 2 3
eval(bquote(`$`(l, .(id))))
## [1] 1 2 3
Run Code Online (Sandbox Code Playgroud)