Bei der Arbeit habe ich einen Windows 7 Computer mit R 3.1.2.
Ich habe eine Datei namens packages.R. In meiner Datei habe ich folgenden Code:
%Vor%My .Rprofile enthält eine Funktion namens .First.
%Vor%Wenn ich R lade, bekomme ich folgende Ausgabe:
%Vor%Wenn du dir das genau ansiehst, wirst du sehen, dass der Filter von stats nicht maskiert ist.
Wenn ich jedoch genau dasselbe Setup anwähle und die Bibliotheksanweisung (dplyr) in packages.R auskommentiere, speichere die Datei und starte R und dann manuell neu. . . . wie in Typ von Hand. . . .
%Vor%Jetzt 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. Danke.
Wenn Sie Bibliotheken in .RProfile
laden, werden sie sehr früh im R-Startprozess angehängt, bevor das Paket stats angehängt wird. Auf die andere Weise fügen Sie dplyr an, nachdem stats bereits geladen wurde. Sie können sich über den Startvorgang von R informieren, indem Sie ?Startup
eingeben. Da heißt es:
Beachten Sie, dass, wenn die Site- und Benutzerprofildateien bereitgestellt werden, nur das Basispaket geladen wird , sodass auf Objekte in anderen Paketen z. utils :: dump.frames oder nach dem expliziten Laden des betreffenden Pakets.
Ich habe gesehen, dass Hadley aus diesem Grund empfohlen hat, Pakete in .RProfile
zu laden, d. h. die Diskrepanzen in der Ladereihenfolge von Paketen, obwohl ich persönlich keine starken Gefühle dazu habe.
Eine mögliche Lösung ist, einfach library(stats)
als ersten Bibliotheksaufruf in Ihrem Skript hinzuzufügen, bevor Sie dplyr laden.
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.
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.