Аккуратная оценка при переименовании столбцов в dplyr

Я пытаюсь динамически переименовать один столбец в кадре данных, используя rename() с аккуратным синтаксисом оценки, выпущенным в dplyr v0.7.0.

От ?rename На странице справки я нашел следующий пример для переименования 2 столбцов.

library(dplyr)

vars <- c(var1 = "cyl", var2 ="am")
rename(mtcars, !!vars) %>% head(1)

>           mpg var1 disp  hp drat   wt  qsec vs var2 gear carb
> Mazda RX4  21    6  160 110  3.9 2.62 16.46  0    1    4    4

Однако я заметил, что не могу использовать этот же синтаксис для переименования одного столбца.

vars <- c(var1 = "cyl")
rename(mtcars, !!vars) %>% head(1)

> Error: All arguments must be named

Тем не менее, когда я переименовываю один и тот же столбец дважды, это работает.

vars <- c(var1 = "cyl", var1 = "cyl")
rename(mtcars, !!vars) %>% head(1)

>           mpg var1 disp  hp drat   wt  qsec vs am gear carb
> Mazda RX4  21    6  160 110  3.9 2.62 16.46  0  1    4    4

Почему это происходит? Какой правильный синтаксис?

1 ответ

Использовать !!! для оценки

rename(mtcars, !!!vars) %>% 
     head(1)
#          mpg var1 disp  hp drat   wt  qsec vs am gear carb
#Mazda RX4  21    6  160 110  3.9 2.62 16.46  0  1    4    4
Другие вопросы по тегам