most - r packages installieren



Funktionsbenennung für R-Pakete (1)

Namenskonflikte treten auf, wenn zwei Pakete geladen werden, die Funktionen mit demselben Namen enthalten. So können Namenskonflikte an zwei Stellen vermieden werden:

  • beim Definieren von Funktionsnamen in einem Paket
  • beim Aufruf von Funktionen aus einem Paket

Erstellen von Funktionen mit eindeutigen Namen

Zum Zeitpunkt des Schreibens (23. August 2017) war die unglaubliche Anzahl von 11272 Paketen auf CRAN verfügbar (die neueste Zahl kann hier gefunden werden ) und neue Pakete werden jeden Tag hinzugefügt .

Das Erstellen von Funktionsnamen, die heute eindeutig sind, kann in der Zukunft zu Namenskonflikten führen, wenn andere Pakete hinzugefügt werden.

Alistaire hat bereits die Option erwähnt, alle Ihre Funktionen voranzustellen. Neben stringi und stringr sind die forcats Pakete ein weiteres Beispiel, das die Präfixe fct_ und lvls_ .

Dieser Ansatz kann die Wahrscheinlichkeit von Namenskonflikten erheblich reduzieren.

(Es ist jedoch nicht garantiert, dass kein anderer Paketverwalter das gleiche Präfix wählt.)

Funktionen mit dem Doppelpunktoperator eindeutig aufrufen

IMHO, die ultimative Verantwortung für die Vermeidung von Namenskonflikten ist der Benutzer.

Ich habe Fragen zu SO mit mehr als einem halben Dutzend geladener Pakete gesehen. Oder es wird aus praktischen library(tidyverse) aufgerufen, die 19 andere Pakete dplyr denen dplyr und tidyr ausreichend tidyr wären.

Wenn der Namespace mit vielen geladenen Paketen überfüllt wird, erhöht sich das Risiko von Namenskonflikten. Und selbst wenn nur zwei Pakete geladen sind, können Namenskonflikte auftreten. Zum Beispiel haben das lubridate und das data.table Paket beide definiert

hour, isoweek, mday, minute, month, quarter, second, wday, week, yday, year

Welche Funktion aufgerufen wird, hängt von der Reihenfolge ab, in der die Pakete geladen wurden. (Sie können conflicts() , um Objekte mit demselben Namen an zwei oder mehr Stellen im Suchpfad zu finden.)

Um Mehrdeutigkeiten und unerwartete Ergebnisse zu vermeiden, schlage ich vor, möglichst wenige Pakete zu laden und den Doppelpunktoperator zu verwenden ?"::" um Funktionen aus Paketen aufzurufen, ohne das Paket vorher zu laden, z.

library(data.table)
DT <- data.table(t = lubridate::now() + 0:3)
# call function from loaded package data.table
DT[, second(t)] 
[1] 18 19 20 21
# call function from lubridate package
DT[, lubridate::second(t)]
[1] 18.88337 19.88337 20.88337 21.88337

Es gibt einen weiteren Vorteil durch die Verwendung des doppelten Doppelpunktoperators. Es dient als Dokumentation innerhalb des Codes, von dem Paket eine Funktion aufgerufen wird.

Dies geht auf Kosten einiger zusätzlicher Tastenbetätigungen, kann jedoch viel Zeit sparen, wenn ein Code Wochen oder Jahre später überprüft, geändert oder debuggt wird. Ich habe viele Fragen zu SO gesehen, wo das OP das Paket nicht erwähnt hat.

Ich schreibe ein R-Paket und möchte wirklich vermeiden, Funktionsnamen in anderen Paketen zu verwenden. Zum Beispiel wollte ich eine Funktion 'Annotate' aufrufen, aber diese wurde bereits im NLP-Paket verwendet. Offensichtlich ist es am besten, offensichtliche Namenswahl zu vermeiden, aber gibt es eine systematische Möglichkeit, eine erschöpfende Liste der von CRAN veröffentlichten Funktionsnamen zu suchen, um Doppelungen zu vermeiden? Ich weiß, dass dies in erster Linie für CRAN-Shared-Pakete wichtig ist, aber es kann auch relevant sein, wenn Sie lokal freigeben, nur für den Fall, dass ein Konflikt mit einem anderen geladenen Paket auftritt.





names