Was ist die Auswirkung, die eine Paket innerhalb einer Funktion, wenn das Paket bereits geladen ist?
Gibt es irgendwelche negativen Auswirkungen, einschließlich library
/require
Anweisungen innerhalb von Funktionen aufgerufen werden, sehr Häufig?
Die Zeit scheint eher negligble, aber ich bin dem Aufruf der Funktion alle paar Minuten und ich Frage mich, ob es irgendeinen Nachteil der repetitve require
Anrufe?
beachten Sie, dass die Funktion nur eine persönliche util und wird nicht geteilt. dh, ich bin die einzige Hilfe
Übrigens keine Einsicht, warum library
ist halb so langsam wie require
? Ich hatte den Eindruck, Sie wurden gleichbedeutend.
WithREQUIRE <- function(x) {
require(stringr)
str_detect(x, "hello")
}
WithLIBRARY <- function(x) {
library(stringr)
str_detect(x, "hello")
}
Without <- function(x) {
str_detect(x, "hello")
}
x <- "goodbye"
library(rbenchmark)
benchmark(WithREQUIRE(x), WithLIBRARY(X), Without(x), replications=1e3, order="relative")
# test replications elapsed relative user.self sys.self
# Without(x) 1000 0.592 1.000 0.262 0.006
# WithREQUIRE(x) 1000 0.650 1.098 0.295 0.015
# WithLIBRARY(X) 1000 1.359 2.296 0.572 0.024
- wenn Sie sind die einzige person, die ihn benutzt , Warum nicht zu entfernen, die erfordern, dass/library und nennen es außerhalb der Funktion? taht ' s sagte, Innerhalb einer Funktion, die ich benutzen würde
require
denn es gibt eine Warnung, kein Fehler. - Würde der speed-Unterschied zu tun haben, mit
library
unsichtbar Rückgabe einer Liste der verfügbaren Pakete, währendrequire
gibt nur eine logischeTRUE/FALSE
? Ich habe gerade gelesen, dass in?library
aus, bin aber kein Experte auf diesem Thema. - Es ist schlechte Praxis zu verwenden
library()
oderrequire()
innerhalb einer Funktion, weil es macht es schwer zu sagen, welche Pakete muss der code. Sie sollten entweder außerhalb oder in der Paket-BESCHREIBUNG. Ich würde nicht so viele sorgen über die Auswirkungen auf die Leistung (und wenn Sie habenmicrobenchmark
gibt Ihnen bessere Daten zu gehen).
Du musst angemeldet sein, um einen Kommentar abzugeben.
require
überprüft, ob das Paket bereits geladen ist (im Suchpfad)mit
und wird erst dann fortgesetzt mit dem laden, wenn dies
FALSE
library
enthält einen ähnlichen test, aber hat ein bisschen mehrstuff
wenn dieses WAHR ist (einschließlich der Erstellung einer Liste der verfügbaren Pakete.require
Erlöse mit einemtryCatch
Aufruf-Bibliothek und erstellen Sie eine Nachricht .So dass ein einzelner Aufruf
library
oderrequire
wenn ein Paket nicht auf der Suche Weg führen kannlibrary
schnellerAber, wenn das Paket schon geladen, dann, als Sie zeigen,
require
ist schneller, da es nicht viel mehr als überprüfen Sie das Paket geladen wird.Die beste Lösung wäre ein kleines Paket, dass die Einfuhren
stringr
(oder zumindeststr_extract
aus stringrrequire
manchmal lädt schneller alslibrary
.