提取运算符 `$( )` 和非句法名称
Extract operator `$( )` and non-syntactic names
假设我有以下列表(注意 non-syntactic names 的用法)
list <- list(A = c(1,2,3),
`2` = c(7,8,9))
所以下面两种解析列表的方法有效:
`$`(list,A)
## [1] 1 2 3
`$`(list,`2`)
## [1] 7 8 9
但是,这种方法无法继续。
id <- 2
`$`(list,id)
## NULL
谁能解释一下为什么最后一种方法不起作用,我该如何解决?谢谢。
我也在努力更好地掌握 non-syntactic 个名字。不幸的是,很难找到更复杂的使用模式。首先,阅读 ?Quotes
和 .
为了学习的目的,这里有一些代码:
list <- list(A = c(1,2,3),
`2` = c(7,8,9))
id <- 2
id_backtics <- paste0("`", id,"`")
text <- paste0("`$`(list, ", id_backtics, ")")
text
#> [1] "`$`(list, `2`)"
eval(parse(text = text))
#> [1] 7 8 9
由 reprex package (v2.0.1)
于 2022-01-24 创建
您的 id
是一个“计算索引”,$
运算符不支持它。来自 ?Extract
:
Both [[
and $
select a single element of the list. The main difference is that $
does not allow computed indices, whereas [[
does. x$name
is equivalent to 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
如果你坚持使用$
运算符,那么你需要在$
调用中替换id
的值,像这样:
eval(bquote(`$`(l, .(id))))
## [1] 1 2 3
id
是否是non-syntactic并不重要:
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
假设我有以下列表(注意 non-syntactic names 的用法)
list <- list(A = c(1,2,3),
`2` = c(7,8,9))
所以下面两种解析列表的方法有效:
`$`(list,A)
## [1] 1 2 3
`$`(list,`2`)
## [1] 7 8 9
但是,这种方法无法继续。
id <- 2
`$`(list,id)
## NULL
谁能解释一下为什么最后一种方法不起作用,我该如何解决?谢谢。
我也在努力更好地掌握 non-syntactic 个名字。不幸的是,很难找到更复杂的使用模式。首先,阅读 ?Quotes
和
为了学习的目的,这里有一些代码:
list <- list(A = c(1,2,3),
`2` = c(7,8,9))
id <- 2
id_backtics <- paste0("`", id,"`")
text <- paste0("`$`(list, ", id_backtics, ")")
text
#> [1] "`$`(list, `2`)"
eval(parse(text = text))
#> [1] 7 8 9
由 reprex package (v2.0.1)
于 2022-01-24 创建您的 id
是一个“计算索引”,$
运算符不支持它。来自 ?Extract
:
Both
[[
and$
select a single element of the list. The main difference is that$
does not allow computed indices, whereas[[
does.x$name
is equivalent tox[["name", exact = FALSE]]
.
如果您有计算索引,则使用[[
提取。
l <- list(a = 1:3)
id <- "a"
l[[id]]
## [1] 1 2 3
`[[`(l, id) # the same
## [1] 1 2 3
如果你坚持使用$
运算符,那么你需要在$
调用中替换id
的值,像这样:
eval(bquote(`$`(l, .(id))))
## [1] 1 2 3
id
是否是non-syntactic并不重要:
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