Я новичок в 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)

summarise / group работает исключительно в Tidyverse функциями для маскировки данных . {{X1}} и {{x2}} не такие функции.

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, mpg, cyl)

Я стараюсь избегать использования !!, enquo, quo_name, поскольку они очень сбивают с толку.

Нет ли способа работать с этим, просто используя {{x0}}, и они ограничиваются только для суммирования функций?

0
ViSa 12 Окт 2020 в 16:54

1 ответ

Лучший ответ

{{ работает исключительно в функциях tidyverse маскирования данных . print() и glue() не являются такими функциями.

Вы можете сделать print(enquo(var)). Это (1) разряжает var и предотвращает его оценку; (2) печатает обезвоженное выражение.

Вы также можете создать свою собственную функцию для печати переменной, упаковывая этот шаблон:

print_arg <- function(arg) print(enquo(arg))

Поскольку он использует аккуратный оператор eval enquo(), он автоматически поддерживает {{. Вы можете назвать это так:

print_arg({{ some_arg }})
1
Lionel Henry 12 Окт 2020 в 16:29