Я бы хотел определить функцию, которая принимает data.frame и имя столбца и возвращает data.frame с преобразованным столбцом (например, в нижний регистр).
Когда имя столбца известно заранее, это просто:
diamonds %>% mutate(cut = tolower(cut))
Как определить функцию foo
, такую, что:
col <- "cut"
foo(diamonds, col)
это поведение такое же? (Не ищу базового ответа R или data.table
, поскольку я хочу сохранить возможность dplyr
перевести это в SQL-вызов с ленивой оценкой).
Если бы я просто хотел, чтобы моя функция работала с использованием: foo(diamonds, cut)
, мне просто нужны enquo
и !!
foo <- function(df, col){
x <- enquo(col)
mutate(df, !!x := tolower(!!x))
}
Если я хочу взять имя столбца в кавычках, foo(diamonds, "cut")
, достаточно добавить ensym
:
foo <- function(df, col){
col <- ensym(col)
x <- enquo(col)
mutate(df, !!x := tolower(!!x))
}
но происходит сбой, когда передается переменная для аргумента:
col <- "cut"
foo(diamonds, col)
Error in ~col : object 'col' not found
Чего мне не хватает, чтобы оценить переменную?