Dzieje się tak do mnie częściej niż powinienem przyznać. dplyr zderza się z MASS::select
, plyr::summarise
i stats::filter
między innymi, szczególnie przy ładowaniu pakietów, które ładują jedną z tych bibliotek przez bibliotekę (nie powinny, ale niektóre nadal robią) lub gdy ładujesz dplyr do swojego .Rprofile
(nie!). Może to prowadzić do dość niejasnych problemów, nie zawsze jest to komunikat o błędzie, zwłaszcza konflikty z plyr
.
Niedawno dowiedziałem się o funkcji conflicts()
. Jest to użyteczne, ale konflikty "over-reports", gdy dwa pakiety mają identyczne funkcje, np. tidyr :: %>%
i dplyr :: %>%
.
Napisałem więc a function, aby powiedzieć mi, czy oszalałem, czy też jest to konflikt powodujący obecny błąd. Sprawdza nie tylko konflikty, sprawdza, czy pewne pożądane opakowanie jest "na wierzchu" i czy jego funkcje rzeczywiście różnią się.
Robi to domyślnie dla dplyr, ale można podać inny pakiet, używając parametru want_package
. Na przykład często się potknąłem o recode
i alpha
, które są ponownie wykorzystywane w wielu pakietach.
Użycie jest po prostu: amigoingmad()
.
Domyślnie będzie to również automatycznie „naprawić” rzeczy jeśli dplyr nie jest „na wierzchu”, stosując następujące polecenia:
detach("package:dplyr", character.only = TRUE)
library("dplyr", character.only = TRUE)
pamiętać, że funkcja będzie raport, jeżeli funkcja określony przez użytkownika jest blokowanie dplyr, ale nie naprawia tego automatycznie dla bezpieczeństwa (po prostu usuń funkcję w tym przypadku).
Na razie to rozwiązanie nie sprawiło mi żadnych problemów. Oczywiście nie zalecałbym używania tego w kodzie produkcyjnym, ale kiedy debugujesz plik .Rmd
i mógł przypadkowo zepsuć kolejność ładunków, jest to szybki sposób, aby się tego dowiedzieć.
Jeśli chcesz to w opakowaniu:
devtools::install_github("rubenarslan/formr")
Można używać go jako po prostu napisał: 'dplyr :: select (mpg)' –