Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
传递一个函数作为dbplyr中的函数参数应用_R_Dplyr_Dbplyr - Fatal编程技术网

传递一个函数作为dbplyr中的函数参数应用

传递一个函数作为dbplyr中的函数参数应用,r,dplyr,dbplyr,R,Dplyr,Dbplyr,假设我想创建一个函数,它可以使用用户传递的任何函数来改变列。我需要知道如何在函数到达dbplyr解析器之前引用和解压缩该函数。让我们来看一个例子,比如说我有这样的函数: testFun为了让它起作用,我们必须引用并取消引用fun参数。我们还构建了我们实际上想要传递到调用mutate()中的表达式。有关解决方案,请参见下文 testFun解决方案应该解决什么问题?是否要避免使用rlang::parse_expr解析字符串?输入是否应该是一个空名称(例如,mean)而不是字符串(“mean”)?是的

假设我想创建一个函数,它可以使用用户传递的任何函数来改变列。我需要知道如何在函数到达dbplyr解析器之前引用和解压缩该函数。让我们来看一个例子,比如说我有这样的函数:


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
...