问题描述
我是R的新手,并试图了解功能编程和{{}}
的使用。
我无法从没有print
的参数中找出如何仅variable_name
的名称!!,enquos
我尝试了下面的代码,但是没有按预期工作:
summarise_min <- function(data,var_min,var_group) {
print({{var_min}})
print(glue("test_{{var_min}}"))
}
summarise_min(mtcars,mpg,cyl)
已经查看了来自https://dplyr.tidyverse.org/articles/programming.html的一些示例,但是其实现主要是在summarise / group
函数中进行的:
my_summarise5 <- function(data,mean_var,sd_var) {
data %>%
summarise(
"mean_{{mean_var}}" := mean({{ mean_var }}),"sd_{{sd_var}}" := mean({{ sd_var }})
)
}
my_summarise5(mtcars,cyl)
我试图避免使用!!,enquo,quo_name
,因为它们非常令人困惑。
是否仅通过使用{{}}
就无法解决问题,而且它们仅限于汇总功能吗?
解决方法
{{
仅在整洁的数据屏蔽函数中起作用。 print()
和glue()
不是这样的功能。
您可以执行print(enquo(var))
。这(1)简化了var
并阻止对其进行求值; (2)打印不正确的表达式。
您还可以通过包装以下模式来创建自己的函数以打印变量:
print_arg <- function(arg) print(enquo(arg))
由于它使用整洁的eval运算符enquo()
,因此它自动支持{{
。您可以这样称呼它:
print_arg({{ some_arg }})