do.call强制在rlang'之前进行参数求值;s整洁的评估

do.call强制在rlang'之前进行参数求值;s整洁的评估,r,tidyverse,rlang,do.call,tidyeval,R,Tidyverse,Rlang,Do.call,Tidyeval,我正在尝试使用Quosure来存储对我正在操作的对象的引用do.call打破了这一想法,提前评估了参数,因此生成的quosure存储了在empty_env()中评估的对象的新副本,而不是对对象的实际调用 rlang::exec()给出了相同的结果,因为它依赖于do.callrlang::eval_tidy(call2(..)方法似乎是一种解决方案,并且基于它rlang::invoke() 问题是: 在R中,存储对对象/对象调用的引用而不是显式地将其存储在列表中的理想方式是什么 混合使用do.ca

我正在尝试使用Quosure来存储对我正在操作的对象的引用
do.call
打破了这一想法,提前评估了参数,因此生成的
quosure
存储了在
empty_env()
中评估的对象的新副本,而不是对对象的实际调用

rlang::exec()
给出了相同的结果,因为它依赖于
do.call
rlang::eval_tidy(call2(..)
方法似乎是一种解决方案,并且基于它
rlang::invoke()

问题是:

在R中,存储对对象/对象调用的引用而不是显式地将其存储在列表中的理想方式是什么

混合使用
do.call
rlang
可以吗,因为这会导致不必要的计算和复制

为什么
invoke
被软性弃用,同时比
exec
更符合rlang的理念

require(rlang)
#>加载所需包:rlang
引述"欢乐环境:全球
do.call(引用“u fun,list(obj))#不好
#> 
#>表达式:^
#>环境:空
执行官(引用“UFun,obj”)
#> 
#>表达式:^
#>环境:空
rlang::invoke(引用“fun,list(obj))
#> 
#>表达式:^1
#>环境:00000000 1C8DDFD8
评估(电话2(引用“乐趣,现状(obj)))
#> 
#>表达式:^obj
#>环境:全球
由(v0.2.0)于2019-02-08创建。

引用参数:

do.call(quoting_fun, list(quote(obj)))
#<quosure>
#expr: ^obj
#env:  global
do.call(引用乐趣,列表(引用(obj)))
#
#表达式:^obj
#环境:全球

评估在
列表中进行,而不是在
do中进行。调用

否,因为
quosure
,而不是
int
,将传递给
quoting_fun()
。我已经引用了一个传递给
call2()
的参数,但这是有效的,因为它已经使用
list2()
来引用参数。多部分问题被认为过于宽泛。一次只关注一个问题。这样你就可以展示你做了什么,以及为什么以前的答案不够充分。