我正在尝试使用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。 我无法在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'))
答案 0 :(得分:14)
正如@aosmith评论的那样,这是使用rlang软件包(来自GitHub)的dev版本和dplyr(来自CRAN)的发布版本的结果。完整的讨论在这里:https://github.com/tidyverse/dplyr/issues/3252
两个软件包都应该来自CRAN,或者来自GitHub;不匹配是问题所在。要解决此问题,您可以使用devtools::install_github("tidyverse/dplyr")
将dplyr更新为开发版本,或者将您的rlang安装恢复为当前的CRAN版本。
答案 1 :(得分:3)
我遇到了同样的问题。更新所有软件包以防万一,它可以正常工作(请参阅下面的sessionInfo()
。
将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
策略更容易,如果更新没有解决它。
> 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