在使用非标准求值的自定义dplyr函数中使用字符串作为参数

在使用非标准求值的自定义dplyr函数中使用字符串作为参数,r,dplyr,nse,R,Dplyr,Nse,我正在尝试编写一个函数,它使用dplyr函数和非标准求值来计算度量的第一个值的相对差值。根据这些说明(),我想出了一个很好的方法: testFun <- function(data, metric) { metric <- enquo(metric) metric_name <- quo_name(metric) data %>% mutate(!!metric_name := `-`(!!metric, first(!!metric)) / firs

我正在尝试编写一个函数,它使用dplyr函数和非标准求值来计算度量的第一个值的相对差值。根据这些说明(),我想出了一个很好的方法:

testFun <- function(data, metric) {
  metric <- enquo(metric)
  metric_name <- quo_name(metric)
  data %>%
    mutate(!!metric_name := `-`(!!metric, first(!!metric)) / first(!!metric) * 
100)
}

testFun(data.frame(x = c("a", "b", "c"), y = 1:3), y)

通过改变函数中的某些内容或以某种方式调整调用中的输入。后者更可取。我尝试过各种myVar的引用、取消引用、评估等,但我对所有这些都不是很了解,也没有找到有效的解决方案。按照我的理解,我需要从myVar获得~y。可以这样做吗?

您可以使用
sym
将“y”转换为符号,或者使用
解析表达式将其解析为表达式,然后使用
将其解压缩

library(rlang)

testFun(data.frame(x = c("a", "b", "c"), y = 1:3), !!sym(myVar))

testFun(data.frame(x = c("a", "b", "c"), y = 1:3), !!parse_expr(myVar))
结果:

  x   y
1 a   0
2 b 100
3 c 200

查看我的答案,了解
sym
parse_expr
之间差异的解释。太棒了,这就完成了!非常感谢!:)
library(rlang)

testFun(data.frame(x = c("a", "b", "c"), y = 1:3), !!sym(myVar))

testFun(data.frame(x = c("a", "b", "c"), y = 1:3), !!parse_expr(myVar))
  x   y
1 a   0
2 b 100
3 c 200