Dplyr rename - Ошибка: `new_name` = old_name должно быть символом или строкой, а не формулой

Я пытаюсь переименовать столбец с dplyr::rename(), и R возвращает эту ошибку, что я не могу найти нигде в сети.

Error: `new_name` = old_name must be a symbol or a string, not formula

Воспроизводимый пример с 2-х столбчатым фреймом данных:

library(dplyr)
df <- data.frame(old_name = seq(1:10), x = seq(1:10))
df %>% dplyr::rename(new_name = old_name)

Информация о сеансе:

> sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-apple-darwin17.2.0 (64-bit)
Running under: macOS High Sierra 10.13.1

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] dplyr_0.7.4

loaded via a namespace (and not attached):
 [1] compiler_3.4.3   magrittr_1.5     assertthat_0.2.0 R6_2.2.2
 [5] bindrcpp_0.2     glue_1.2.0       tibble_1.3.4     Rcpp_0.12.14.3
 [9] pkgconfig_2.0.1  rlang_0.1.4.9000 bindr_0.1
>

Я ожидаю, что этот новый простой фрейм данных будет иметь первый столбец, переименованный в new_name. Это также не работает с rename_().

Текущая версия R - 3.4.3, а версия dplyr - 0.7.4. Я не смог воспроизвести это в версии 3.3.3 R, но смог воспроизвести его на R версии 3.4.0. Это было протестировано на полностью чистой сессии R.

Мое текущее решение состоит в том, чтобы переписать часть моего кода с plyr::rename, поскольку это все еще работает, но это не идеально, потому что для этого требуется переписать много кода.
Рабочий пример с plyr():

library(plyr)
df <- data.frame(old_name = seq(1:10), x = seq(1:10))
df %>% plyr::rename(replace = c('old_name' = 'new_name'))

Ответ 1

Как заметил @aosmith, это результат использования dev-версии пакета rlang (из GitHub) с выпущенной версией dplyr (из CRAN). Полное обсуждение здесь: https://github.com/tidyverse/dplyr/issues/3252

Оба пакета должны быть из CRAN или обоих из GitHub; проблема несоответствия. Чтобы исправить это, вы можете обновить dplyr до версии dev с помощью devtools::install_github("tidyverse/dplyr") или вернуть свою установку rlang обратно в текущую версию CRAN.

Ответ 2

У меня была та же проблема. После обновления всех пакетов на всякий случай, он работает (см. sessionInfo() ниже.

Fix

Переключить rename в select (который работал по какой-то причине)

df <- data.frame(old_name = seq(1:10), x = seq(1:10))
## df %>% dplyr::rename(new_name = old_name) # error
df %>% dplyr::select(new_name = old_name, everything())

Это может быть проще, чем plyr strat, и если обновление не исправляет его.

> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS  10.13.2

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] rlang_0.1.6 dplyr_0.7.4

loaded via a namespace (and not attached):
 [1] compiler_3.4.0   magrittr_1.5     assertthat_0.2.0 R6_2.2.2        
 [5] tools_3.4.0      bindrcpp_0.2     glue_1.2.0       tibble_1.3.4    
 [9] yaml_2.1.16      Rcpp_0.12.14     pkgconfig_2.0.1  bindr_0.1