2013-04-11 23 views
6

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

+3

tj. spróbuj 'konflikty (szczegóły = PRAWDA)' –

Odpowiedz

7

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

+0

Wielkie dzięki Michele. To dokładnie to, czego potrzebowałem. – Vara

6

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 
6

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

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

Powiązane problemy