2013-04-11 12 views
6

Ich habe kürzlich herausgefunden, dass Fehler aufgrund von Konflikten zwischen Paketen verursacht werden können, das heißt, zwei (oder mehr) Pakete können Funktionen ähnlich benannt haben. Ich weiß, dass der Code search() die Liste der bestellten Pakete in der Weise erzeugt, wie R sie liest. Es gibt auch den Code args, der die von R gelesene Funktion angibt. Was ich zuerst wissen möchte, ist, wie man erkennt, ob ein Fehler aufgrund von Konflikten zwischen Paketen erzeugt wird, und zweitens, wie man herausfindet, welche Pakete in Konflikt stehen. Wie können wir schließlich, nachdem die Konflikte entdeckt wurden, R zwingen, die Funktion aus einem der Pakete zu verwenden?Erkennen von Konflikten zwischen Paketen in R

+3

d. h. versuche 'Konflikte (Detail = TRUE)' –

Antwort

7

Wie @ Paul sagt, beim Anbringen (zB über library Funktion) ein Paket können Sie erhalten:

> 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 

Wenn Sie erhalten "Die folgenden Objekte sind maskiert" bedeuten, dass Aufrufe an diese Funktion von R als Aufrufe an die Funktionen in dem neuen Paket, in meinem Beispiel gdata gedacht werden.

Sie können dies über vermeiden:

> nobs 
function (object, ...) 
UseMethod("nobs") 
<environment: namespace:gdata> 
> stats::nobs 
function (object, ...) 
UseMethod("nobs") 
<bytecode: 0x0000000008a92790> 
<environment: namespace:stats 

Hoffnung, die

+0

Vielen Dank Michele. Genau das, was ich brauchte. – Vara

6

Wenn R ein neues Paket lädt, wird eine Warnung ausgegeben, wenn das neue Paket Funktionen enthält, die bereits in der Arbeitsumgebung vorhanden sind. Wenn Sie also beim Laden des Pakets aufpassen, können Sie sehen, ob es Konflikte gibt. Wenn es Konflikte gibt, können Sie R zwingen die Funktion von einem bestimmten Paket wie folgt zu verwenden:

package_name::function_name 
6

hilft ich glaube, du bist für getAnywhere suchen, die Sie alle Orte, ihr Argument existiert erzählen. Z.B. (in meinem aktuellen Belastungssatz):

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

Danke für die Antwort Carl, ich wusste nichts über diesen Code. Ich denke jedoch, dass es hilfreich ist, wenn Sie vorher genau wissen, welches Argument Konflikte verursacht. – Vara

Verwandte Themen