Quosures в R, как использовать!оператор (приборка-оценка) - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь понять аккуратность оценки в R.

grouped_mean <- function(data, group_var, summary_var) {
    group_var <- enquo(group_var)
    summary_var <- enquo(summary_var)

    data %>%
        group_by(!!group_var) %>%
        summarise(mean = mean(!!summary_var))
}

Я понимаю, почему и как ее использовать, но не то, что на самом деле происходит, я думаю.

var <- "test"
var <- enquo(var)
!!var 

Error in is_quosure(e2) : argument "e2" is missing, with no default

Это даетошибка, пока я ожидал, что она будет работать и за пределами dplyr.Почему не работает и как это исправить?

1 Ответ

0 голосов
/ 13 февраля 2019

!! - это оператор без кавычек, который работает только в контексте цитирования , то есть в аргументах для глаголов dplyr.Сообщение об ошибке, которое вы видите с !!quo(foo), является ошибкой в ​​текущей версии CRAN.Что касается версии для разработчиков, то теперь она выглядит так:

Error: Quosures can only be unquoted within a quasiquotation context.

  # Bad:
  list(!!myquosure)

  # Good:
  dplyr::mutate(data, !!myquosure)

Наконец, обратите внимание, что enquo() следует использовать только для цитирования аргументов функции.По техническим причинам, связанным с компилятором R, он все еще работает с другими объектами, но не будет делать то, что вы ожидаете.Вы должны использовать его только внутри функции и только с именами аргументов этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...