В dplyr 0.8.0
оболочка funs()
(используется в mutate_at()
или summarise_at()
) мягко осуждается.
Новый рекомендуемый синтаксис - использовать ~sum(.)
вместо funs(sum(.))
Это "старый стиль", который я бы использовал ранее.Моя цель состоит в том, чтобы перевести старый синтаксис в новый синтаксис, однако у меня возникли проблемы, когда вызов функции в funs()
использует (!!sym()
) для преобразования ввода символов для имени столбца всимвол, который может быть распознан внутри функции.
Вот пример того, как я мог бы написать функцию в старом стиле dplyr
.
var
- это строка символов, которая относится к имени столбца, а при funs()
она умножается на Sepal.Length
.
multiply_by <- function(var){
iris %>%
mutate_at("Sepal.Length",funs(.*!!sym(var)))
}
multiply_by("Sepal.Width") # This works
Мой вопрос заключается в том, что я не могу понять,как перевести это в новый синтаксис ~
, не обнаружив ошибки.Если я запускаю следующее, это вызывает ошибку «неверный тип аргумента»:
multiply_by2 <- function(var){
iris %>%
mutate_at("Sepal.Length",~.*!!sym(var))
}
multiply_by2("Sepal.Width")
# Error in !sym(var) : invalid argument type
Может кто-нибудь помочь?В настоящее время я могу обойтись с помощью funs()
, но, поскольку он мягко осуждается, я хотел бы перенести мой код в стабильный формат, если / когда он станет полностью устарелым.Спасибо!