Стандартная оценка и нестандартная оценка в R
Я запутался в аргументах функций dplyr и не совсем ясно о стандартной оценке (SE) или нестандартной оценке (NSE). Я просто хочу передать переменную в dplyr::range (), но это не удалось. Тем не менее, переход к dplyr:: select () работает.
> library(dplyr)
> library(magrittr)
> var_name <- "mpg"
> mtcars %>% as_tibble() %>% dplyr::select(var_name)
# A tibble: 32 x 1
mpg
* <dbl>
1 21.0
2 21.0
3 22.8
4 21.4
5 18.7
6 18.1
7 14.3
8 24.4
9 22.8
10 19.2
# ... with 22 more rows
> mtcars %>% as_tibble() %>% dplyr::arrange(var_name)
Error in arrange_impl(.data, dots) :
incorrect size (1) at position 1, expecting : 32
Я искал решение, используя версию SE, и она работает:
> mtcars %>% as_tibble() %>% dplyr::arrange_(var_name)
Почему dplyr:: select () отличается от dplyr::range () в NSE?
Как исправить ошибку ниже в глобальной среде?
> as_tibble(mtcars) %>% dplyr::mutate(paste0(var_name,"_Minus1") = mtcars$mpg - 1)
Error: unexpected '=' in "as_tibble(mtcars) %>% dplyr::mutate(paste0(var_name,"_Minus1") ="
Спасибо!
1 ответ
Решение
Мы можем использовать arrange_at
который берет объекты
mtcars %>%
as_tibble() %>%
dplyr::arrange_at(var_name)
Или другой вариант, чтобы преобразовать в символ с sym
от rlang
и оценить с !!
mtcars %>%
as_tibble() %>%
dplyr::arrange(!! rlang::sym(var_name))