Программирование с помощью dplyr с использованием строки в качестве входного
Я хотел бы написать функцию, которая использует dplyr внутри, и я предоставляю имена переменных в виде строк. К сожалению, использование NSE для dplyr делает его довольно сложным. Из программирования с dplyr я получаю следующий пример
my_summarise <- function(df, var) {
var <- enquo(var)
df %>%
group_by(!!var) %>%
summarise(a = mean(a))
}
my_summarise(df, g1)
Тем не менее, я хотел бы написать функцию, где вместо g1
я мог бы предоставить "g1"
и я не могу обернуться, как это сделать.
Ответы
Ответ 1
Насколько я знаю, вы можете использовать as.name
или sym
(из пакета rlang
- я не знаю, будет ли dplyr
импортировать его в конце концов):
library(dplyr)
my_summarise <- function(df, var) {
var <- rlang::sym(var)
df %>%
group_by(!!var) %>%
summarise(mpg = mean(mpg))
}
или же
my_summarise <- function(df, var) {
var <- as.name(var)
df %>%
group_by(!!var) %>%
summarise(mpg = mean(mpg))
}
my_summarise(mtcars, "cyl")
# # A tibble: 3 × 2
# cyl mpg
# <dbl> <dbl>
# 1 4 26.66364
# 2 6 19.74286
# 3 8 15.10000
Ответ 2
Использование местоимения .data
из rlang - это еще один вариант, который работает непосредственно с именами столбцов, хранящимися в виде строк.
Функция с .data
будет выглядеть как
my_summarise <- function(df, var) {
df %>%
group_by(.data[[var]]) %>%
summarise(mpg = mean(mpg))
}
my_summarise(mtcars, "cyl")
# A tibble: 3 x 2
cyl mpg
<dbl> <dbl>
1 4 26.7
2 6 19.7
3 8 15.1