2014-11-14 15 views
8

Bei der Arbeit habe ich einen Windows 7-Computer mit R 3.1.2.R dplyr-Filter maskiert den Basisfilter nicht?

Ich habe eine Datei namens packages.R. In meiner Datei habe ich folgenden Code:

library(dplyr) 
library(sqlutils) 
library(RODBC) 

Meine .Rprofile enthält eine Funktion namens .First.

.First <- function() { 
    source("R/packages.R") 
} 

Wenn ich R laden, erhalte ich die folgende Ausgabe:

Loading required package: roxygen2 
Loading required package: stringr 
Loading required package: DBI 

Attaching package: 'dplyr' 

The following objects are masked from 'package:base': 

    intersect, setdiff, setequal, union 

Wenn man sich diese genau hinschauen, werden Sie den Filter aus Statistiken sehen, ist nicht maskiert.

Aber, wenn ich mein genaues Setup nehme, und die Bibliothek (dplyr) Anweisung in packages.R auskommentieren, speichern Sie die Datei, und starten Sie R und dann manuell neu. . . . wie in Typ von Hand. . . .

library(dplyr) 

Attaching package: 'dplyr' 

The following object is masked from 'package:stats': 

    filter 

The following objects are masked from 'package:base': 

    intersect, setdiff, setequal, union 

Nun maskiert es package :: stats.

Ich verstehe es nicht. Ich muss den Filterbefehl von dplyr sehr für dieses Projekt verwenden und ich möchte dplyr :: filter nicht eingeben, um es zu verwenden. Könnte jemand bitte meinem schwachen Verstand helfen zu verstehen, warum sich das so verhält? Ich habe versucht, R in RStudio und ESS zu starten, und ich bekomme das gleiche Verhalten in beiden. Ich habe auch versucht, dplyr an das Ende der packages.R-Datei zu verschieben, ohne Unterschied zu den Ergebnissen. Ich möchte nur stats :: filter maskieren. Vielen Dank.

+1

Wenn Sie Bibliotheken in .RProfile laden, werden sie sehr früh im R-Startprozess angehängt, bevor das Statistikpaket angehängt wird. Die andere Möglichkeit ist das Hinzufügen von dplyr, nachdem die Statistiken bereits geladen wurden. Ich habe gesehen, dass Hadley aus diesem Grund empfohlen hat, Pakete in .RProfile zu laden (Diskrepanzen in der Ladereihenfolge des Pakets). – joran

+2

... Ich nehme an, Sie könnten versuchen, am Anfang des Skripts, das Sie in .RProfile erstellen, 'library (stats)' hinzuzufügen. – joran

+0

Für grins und kichern, fügte ich Bibliothek (stats) zu meiner packages.R-Datei. Aber das scheint unnötig kompliziert zu sein. Ich schätze, ich werde diese beiden Befehle aus meiner .First() ziehen und sie an die Vorderseite aller meiner Analysedateien verschieben. Ich hasse Vorlagen, die immer und immer wieder mit der gleichen Sache gefüllt sind, aber ich denke, in diesem Fall ist es die bessere Option. – Choens

Antwort

10

Wenn Sie Bibliotheken in .RProfile laden, werden sie sehr früh im R-Startprozess angehängt, bevor das Statistik--Paket beigefügt wird. Die andere Weise, Sie befestigen dplyr nach stats wurde bereits geladen. Ich habe gesehen, dass Hadley aus diesem Grund empfohlen hat, Pakete in .RProfile zu laden (Diskrepanzen in der Paket-Lade-Reihenfolge), obwohl ich persönlich keine starken Gefühle dazu habe. (Die Einzelheiten R Startvorgang werden in ?Startup beschrieben.)

Eine mögliche Lösung ist library(stats) als erste Bibliothek Anruf in Ihrem Skript einfach hinzufügen, bevor dplyr geladen.

Eine weitere (langfristige) Option, um diese Art von Problemen globaler zu vermeiden, wäre, Ihre Workflows von "einer großen Sammlung von Skripten" in ein oder mehrere Pakete zu überführen.

0

Ich hatte genau das gleiche Problem und es ist so nervig. Wenn Sie die Warnmeldungen wie ich unterdrücken möchten :-), können Sie mit library(dplyr, warn.conflicts = FALSE) laden.

Verwandte Themen