【发布时间】:2018-05-25 03:07:11
【问题描述】:
我正在尝试使用 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'))
【问题讨论】:
-
可能与在
dplyr和'new_name'中使用new_name和old_name以及在plyr中使用'old_name'和'old_name'(作为文本)有关。您能否也发布不适用于dplyr的rename_()版本?当它抛出该错误时,您只运行new_name和old_name会得到什么? -
如果您再次收到错误,请在看到错误弹出后立即运行
sessionInfo()并在此处发布输出。 -
rename_()版本:df %>% dplyr::rename_('new_name' = 'old_name') -
安装rlang的开发版后才能重现错误。在 R 3.4.2 上使用 CRAN 版本的 rlang 可以找到工作。