2016-06-06 12 views
2

Ich habe Probleme mit meinem Workflow, weil ich mehrere Skripts in Rmarkdown, einige davon das Paket dplyr und einige davon plyr verwenden.Überprüfen, ob ein R-Paket derzeit angehängt ist

Das Problem ist, dass die rename Funktion in beiden Paketen vorhanden ist, und wenn dplyr ist derzeit die rename Funktion in plyr wird nicht funktionieren angebracht.

Wie schließe ich in meine Skripte eine Funktion ein, die prüft, ob dplyr angehängt ist, und wenn ja, trennen Sie sie?

Ich weiß, wie Pakete über detach("package:dplyr", unload = TRUE) gelöst werden. Was ich nicht weiß ist, wie man überprüft, ob ein Paket angehängt ist oder nicht.

+4

wahrscheinlich einfacher, explizite im Funktionsaufruf zu sein ... 'plyr :: rename' – user20650

+2

Anstatt die angebundene Pakete (die nicht das sein können, was der Benutzer möchte!) sollten Sie spezifisch sein und 'dplyr :: rename' oder' plyr :: rename' verwenden. – Gregor

+0

Oder noch besser: Refaktorieren Sie Ihren Code so, dass er einheitlich eine Version von Rename verwendet. –

Antwort

6

Ich stimme zu, dass die beste Vorgehensweise ist, dplyr::rename und plyr::rename zu verwenden, um die gewünschte Funktion explizit aufzurufen.

Wenn Sie jedoch, wenn ein Paket überprüfen wollten angebracht ist, und es dann detatch ich

if("plyr" %in% (.packages())){ 
    detach("package:plyr", unload=TRUE) 
} 
1

Worth hier erwähnen ist, dass die Pakete selbst warnen Sie sie in einer bestimmten Reihenfolge zu laden. Wenn Sie dplyr laden, dann erhalten Sie eine Warnung:

Sie haben plyr nach dplyr geladen - das ist wahrscheinlich zu Problemen führen. Wenn Sie Funktionen von plyr und dplyr benötigen, laden Sie zuerst plyr, dann dplyr: library (plyr); Bibliothek (dplyr)

Mein Verständnis ist, dass dplyr nicht gut funktioniert, wenn seine Funktionen durch plyr veraltet, aber da die Funktionen, die deprecates von plyr dplyr effektiv Updates sind, sollten sie gut spielen. Also nur sicherstellen, dass Sie sie in der richtigen Reihenfolge laden:

library(plyr) 
library(dplyr) 

EDIT: Ich liest Ihre Frage, und Ihr Problem ist ein deprecation von plyr Funktion von dplyr, so mein Punkt nicht sehr relevant für Sie , Es tut uns leid. Ich lasse es hier für den Fall, dass jemand anderes die Information benötigt, da es mir vor einiger Zeit Probleme verursacht hat: P

+0

Danke @rosscova. Das Problem ist, dass ich ein Rmarkdown-Dokument habe, das viele verschiedene Skripte mit viel Code enthält, die über einen längeren Zeitraum geschrieben wurden, so dass es schwierig ist, mich daran zu erinnern, wo dplyr in diesen Skripten aufgetaucht ist (und welche Skripte) diese * Skripte haben Quelltext). Ich denke, das sind nur Dinge, die du mit Erfahrung lernst. – llewmills