Niedawno odkryłem, że błędy mogą być spowodowane z powodu konfliktów między pakietami, to znaczy dwa (lub więcej) pakiety mogą mieć funkcje o nazwie podobnie. Wiem, że kod search()
tworzy listę pakietów zamówionych w taki sposób, w jaki odczytuje je R. Istnieje również kod args
, który daje funkcję odczytaną przez R.
Co chciałbym wiedzieć, po pierwsze, jest to, jak wykryć, jeśli błąd jest tworzony ze względu na konflikty między pakietami i po drugie, jak dowiedzieć się, które pakiety są sprzeczne? Wreszcie, po wykryciu konfliktów, w jaki sposób możemy zmusić R do używania konkretnej funkcji z jednego z pakietów?Wykryj konflikty między pakietami w R
Odpowiedz
Jak mówi @Paul, podczas mocowania (np poprzez library
funkcja) pakiet można uzyskać:
> library("gdata", lib.loc="C:/Program Files/R/R-2.15.3/library")
gdata: read.xls support for 'XLS' (Excel 97-2004) files ENABLED.
gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.
Attaching package: ‘gdata’
The following object(s) are masked from ‘package:stats’:
nobs
The following object(s) are masked from ‘package:utils’:
object.size
Gdy otrzymasz komunikat "Następujące obiekty są zamaskowane" oznacza, że wywołania do tych funkcji będą traktowane przez R jako wywołania funkcji w nowym pakiecie, w moim przykładzie gdata
.
Można tego uniknąć poprzez:
> nobs
function (object, ...)
UseMethod("nobs")
<environment: namespace:gdata>
> stats::nobs
function (object, ...)
UseMethod("nobs")
<bytecode: 0x0000000008a92790>
<environment: namespace:stats
nadzieję, że pomoże
Wielkie dzięki Michele. To dokładnie to, czego potrzebowałem. – Vara
Jeśli R wczyta nowy pakiet, wyświetli ostrzeżenie, jeśli nowe opakowanie zawiera jakiekolwiek funkcje, które są już obecne w środowisku pracy. Więc jeśli zwracasz uwagę podczas ładowania pakietu, możesz zobaczyć, czy są jakieś konflikty. Gdy istnieją konflikty, można wymusić R, aby korzystać z funkcji z danego pakietu tak:
package_name::function_name
myślę szukasz getAnywhere
który będzie Ci wszystkich miejsc jej argument istnieje powiedzieć. Na przykład. (w moim bieżącym zestawie obciążenia):
Rgames> getAnywhere(logit)
2 differing objects matching ‘logit’ were found
in the following places
package:boot
package:pracma
namespace:boot
namespace:pracma
Use [] to view one of them
Dzięki za odpowiedź Carl, nie wiedziałem o tym kodzie. Uważam jednak, że pomocne jest, gdy z góry wiadomo, który argument jest w konflikcie. – Vara
tj. spróbuj 'konflikty (szczegóły = PRAWDA)' –