如何在R中使用{{}}从函数参数打印变量名?

问题描述

我是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 }})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...