dplyr rename - 错误:`new_name` = old_name必须是符号或字符串,而不是公式

Ras*_*try 19 r rename plyr dplyr rlang

我正在尝试重命名列,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)
Run Code Online (Sandbox Code Playgroud)

会话信息:

> 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
>
Run Code Online (Sandbox Code Playgroud)

我希望这个新的简单数据框能够将第一列重命名为new_name.这也不起作用rename_().

当前R版本为3.4.3,dplyr版本为0.7.4.我无法在R版本3.3.3上复制它,但能够在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'))
Run Code Online (Sandbox Code Playgroud)

Sam*_*rke 16

正如@aosmith评论的那样,这是使用rlang软件包(来自GitHub)的dev版本和dplyr(来自CRAN)的发布版本的结果.完整的讨论在这里:https://github.com/tidyverse/dplyr/issues/3252

两个软件包都应该来自CRAN,或者来自GitHub; 不匹配是问题所在.要解决此问题,您可以将dplyr更新为dev版本,devtools::install_github("tidyverse/dplyr")或者将rlang安装恢复为当前的CRAN版本.

  • FWIW 我通过一次更新所有 `tidyverse` 包以及 `magrittr` 和 `rlang` 解决了这个问题。 (2认同)

Jes*_*dle 3

我有同样的问题。以防万一,更新所有软件包后,它就可以工作了(见sessionInfo()下文。

使固定

切换renameselect(由于某种原因正在工作)

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())
Run Code Online (Sandbox Code Playgroud)

plyr如果更新不能解决问题,这可能比策略更容易。

> 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       
Run Code Online (Sandbox Code Playgroud)