作者:夏欣晴 | 来源:互联网 | 2022-12-08 15:42
是否可以使用purrr返回一个quosures列表?
foo <- c(1:3)
purrr::map(foo, rlang::quo(. + 2))
返回已评估的quosures(即包含3到5的列表).
有没有办法返回包含quo(1 + 2),quo(2 + 2)等的列表?
(包版本如果重要或未来访问过:purrr 0.2.5,rlang 0.2.1).
1> Mikko Martti..:
您可以使用!!
以将输入取消引入quosure:
foo <- c(1:3)
purrr::map(foo, ~ rlang::quo(!!.x + 2))
#> [[1]]
#>
#> expr: ^1L + 2
#> env: 0000000015213C98
#>
#> [[2]]
#>
#> expr: ^2L + 2
#> env: 0000000015217758
#>
#> [[3]]
#>
#> expr: ^3L + 2
#> env: 00000000157B9FD0
请注意,这里我们还使用匿名函数的公式简写map()
来返回未评估的quosure.Quosures本身可以通过map()
(使用purrr::as_mapper()
)强制转换为函数,因此您首先得到的是评估答案的原因,因为您实际上是在编写map(foo, ~ . + 2)
.
由reprex包创建于2018-08-06 (v0.2.0.9000).