Присвоение к заданию в R / dplyr / rlang - PullRequest
0 голосов
/ 26 апреля 2018

Внутри функции я хочу обновить на месте значения столбцов, указанных пользователем, где указанные пользователем имена столбцов записываются с помощью enquo (). Итак, вот упрощенный пример:

f1 <- function(df, x, y) {
    x <- enquo(x)
    y <- enquo(y)

    df %>%
        mutate((!! x) := (!! x)^2,
               (!! y) := (!! y)+1)
}

dat <- data.frame(a=1:10, b=10:1)
f1(dat, x=a, y=b)

Сбой из-за ошибки: «LHS := должен быть строкой или символом».

Я также пытался заменить, например, (!! x) на quo_get_expr(x) и f_text(x), но получаю ту же ошибку. Например:

f1 <- function(df, x, y) {
    x <- enquo(x)
    y <- enquo(y)

    df %>%
        mutate(quo_get_expr(x) := (!! x)^2,
               quo_get_expr(y) := (!! y)+1)
}

Кто-нибудь может указать, что я делаю неправильно?

Я использую R 4.1, dplyr 0.7.4 и rlang 0.2.0

Заранее спасибо.

1 Ответ

0 голосов
/ 26 апреля 2018

Вам нужно использовать quo_name. Это работает:

f1 <- function(df, x, y) {
  x <- enquo(x)
  y <- enquo(y)

  df %>%
    mutate(
     !!quo_name(x) := (!!x)^2,
     !!quo_name(y) := (!!y)+1)
}

dat <- data.frame(a=1:10, b=10:1)
f1(dat, x=a, y=b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...