传递一个函数作为dbplyr中的函数参数应用
假设我想创建一个函数,它可以使用用户传递的任何函数来改变列。我需要知道如何在函数到达dbplyr解析器之前引用和解压缩该函数。让我们来看一个例子,比如说我有这样的函数:传递一个函数作为dbplyr中的函数参数应用,r,dplyr,dbplyr,R,Dplyr,Dbplyr,假设我想创建一个函数,它可以使用用户传递的任何函数来改变列。我需要知道如何在函数到达dbplyr解析器之前引用和解压缩该函数。让我们来看一个例子,比如说我有这样的函数: testFun为了让它起作用,我们必须引用并取消引用fun参数。我们还构建了我们实际上想要传递到调用mutate()中的表达式。有关解决方案,请参见下文 testFun解决方案应该解决什么问题?是否要避免使用rlang::parse_expr解析字符串?输入是否应该是一个空名称(例如,mean)而不是字符串(“mean”)?是的
testFun为了让它起作用,我们必须引用并取消引用fun
参数。我们还构建了我们实际上想要传递到调用mutate()
中的表达式。有关解决方案,请参见下文
testFun解决方案应该解决什么问题?是否要避免使用rlang::parse_expr
解析字符串?输入是否应该是一个空名称(例如,mean
)而不是字符串(“mean”
)?是的,就是这样。我想通过mean
而不是“mean”
。我没有Spark和SparkyR,因此无法测试它。我会尝试rlang::call2
并用取消报价代码>因为bang-bang操作符更早地计算其对象。但我不知道这是否有效<代码>测试乐趣这几乎奏效了,我做了一个小小的调整,现在它确实奏效了。我将发布我的答案,谢谢。很高兴看到我使用了{rlang}的call2
和fun的双引号和双引号来搜索正确的树。我有点惊讶,我们不需要eval
计算call2
的输出。还在想这是怎么回事。我还感到惊讶的是,这在tbl_spark
上有效,但在data.frame
上无效(这里我得到一个错误)。
Error: org.apache.spark.sql.AnalysisException: Undefined function: 'fun'.
This function is neither a registered temporary function nor a permanent function
registered in the database 'default'.; line 1 pos 85
...