2017-12-11 124 views
12

Próbuję zmienić nazwę kolumny za pomocą dplyr::rename(), a R zwraca błąd, którego nie mogę znaleźć w Internecie.zmiana nazwy dplyr - Błąd: `nowa_nazwa` = stara nazwa musi być symbolem lub łańcuchem, a nie formułą

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

Powtarzalne przykład z danych ramie 2 kolumny: Informacje

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

Sesja:

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

Spodziewam ta nowa rama proste dane, aby pierwsza kolumna zmieniona na new_name . To również nie działa z rename_().

Aktualna wersja R to 3.4.3, a wersja dplyr to 0.7.4. Nie mogłem replikować tego w wersji R 3.3.3, ale udało mi się powielić to na wersji R 3.4.0. Zostało to przetestowane na całkowicie czystej sesji R.

Moje obecne rozwiązanie polega na przepisaniu części kodu z plyr::rename, ponieważ to nadal działa, ale nie jest to idealne rozwiązanie, ponieważ wymaga przepisania dużej ilości kodu.
przykład Praca z 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

Może to wynikać z użycia 'nowa_nazwa' i' stara_nazwa' w 'dplyr' i' 'nowa_nazwa'' i '' stara_nazwa'' (jako tekst) w' plyr'. Czy możesz również opublikować wersję 'rename _()', która nie działała z 'dplyr'? Kiedy rzuca ten błąd, co otrzymujesz, gdy uruchamiasz 'new_name' i' old_name'? – AntoniosK

+0

Jeśli pojawi się błąd ponownie, uruchom 'sessionInfo()' natychmiast po pojawieniu się błędu i wyślij tutaj dane wyjściowe. – Clarinetist

+0

'zmień nazwę _()' wersja: '' 'df%>% dplyr :: zmień nazwę _ ('nowa_nazwa' = 'stara_nazwa')' '' –

Odpowiedz

1

miałem ten sam problem. Po aktualizacji wszystkie pakiety na wszelki wypadek, to działa (patrz sessionInfo() poniżej.

Fix

Przełącznik rename do select (który pracował dla jakiegoś powodu)

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

To może być łatwiejsze niż plyr i jeśli aktualizacja go nie naprawi.

> 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

Jak skomentował @aosmith, jest to esult korzystania z wersji dev pakietu rlang (z GitHub) z wydaną wersją dplyr (z CRAN). Pełna dyskusja tutaj: https://github.com/tidyverse/dplyr/issues/3252

Oba pakiety powinny pochodzić z CRAN lub obydwu z GitHub; niedopasowanie jest problemem. Aby to naprawić, możesz zaktualizować dplyr do wersji deweloperskiej pod numerem devtools::install_github("tidyverse/dplyr") lub przywrócić swoją instalację rlang z powrotem do bieżącej wersji CRAN.