2017-12-11 103 views
12

Tôi đang cố đổi tên cột bằng dplyr::rename() và R đang trả lại lỗi này mà tôi không thể tìm thấy ở bất kỳ nơi nào trực tuyến.đổi tên dplyr - Lỗi: `new_name` = old_name phải là một biểu tượng hoặc một chuỗi, chứ không phải công thức

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

dụ tái sản xuất với một khung dữ liệu 2 cột: info

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

Session:

> 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 
> 

tôi mong đợi khung dữ liệu đơn giản mới này để có cột đầu tiên đổi tên thành new_name . Điều này cũng không hoạt động với rename_().

Phiên bản R hiện tại là 3.4.3 và phiên bản dplyr là 0.7.4. Tôi không thể sao chép điều này trên phiên bản R 3.3.3, nhưng đã có thể sao chép nó trên phiên bản R 3.4.0. Điều này đã được thử nghiệm trên một phiên R hoàn toàn sạch sẽ.

Giải pháp hiện tại của tôi là viết lại một phần mã của tôi bằng plyr::rename vì vẫn hoạt động, nhưng điều này không lý tưởng vì nó yêu cầu tôi viết lại nhiều mã.
dụ Làm việc với 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

Có thể phải thực hiện bằng cách sử dụng 'new_name' và' old_name' trong 'dplyr' và' 'new_name'' và '' old_name'' (dưới dạng văn bản) trong' plyr'. Bạn cũng có thể đăng phiên bản 'rename _()' không hoạt động với 'dplyr' không? Khi nó ném lỗi đó, bạn sẽ nhận được gì khi chạy 'new_name' và' old_name'? – AntoniosK

+0

Nếu bạn gặp lại lỗi, hãy chạy 'sessionInfo()' ngay lập tức sau khi bạn thấy lỗi xuất hiện và đăng đầu ra ở đây. – Clarinetist

+0

'đổi tên _()' phiên bản: '' 'df%>% dplyr :: đổi tên _ ('new_name' = 'old_name')' '' –

Trả lời

1

tôi đã cùng một vấn đề. Sau khi cập nhật tất cả các gói chỉ trong trường hợp, nó hoạt động (xem sessionInfo() dưới đây.

Fix

Chuyển rename-select (được làm việc cho một số lý do)

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()) 

Điều đó có thể được dễ dàng hơn so với plyr chiến thuật, và nếu cập nhật không sửa chữa nó.

> 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  
10

Như @aosmith nhận xét, đây là ar esult sử dụng phiên bản dev của gói rlang (từ GitHub) với phiên bản phát hành của dplyr (từ CRAN). Toàn bộ cuộc thảo luận ở đây: https://github.com/tidyverse/dplyr/issues/3252

Cả hai gói phải từ CRAN hoặc cả hai từ GitHub; sự không phù hợp là vấn đề. Để khắc phục điều này, bạn có thể cập nhật dplyr của mình lên phiên bản dev với devtools::install_github("tidyverse/dplyr") hoặc hoàn nguyên cài đặt rlang của bạn về phiên bản CRAN hiện tại.

Các vấn đề liên quan