Czy występują jakieś niepożądane skutki, włączając w to funkcje library
/require
w funkcjach, które będą wywoływane bardzo często?Jaki jest wpływ wymaganego pakietu wewnątrz funkcji, jeśli pakiet jest już załadowany?
Czas używany wydaje się raczej pomijalny, ale wywołuję tę funkcję co kilka minut i zastanawiam się, czy jest jakaś wada do wywołań repetitve require
?
Zwróć uwagę, że funkcja ta jest tylko narzędziem osobistym i nie jest udostępniana. tj. ja jestem jedynym użytkownikiem, który go używa
Nawiasem mówiąc, jakikolwiek wgląd w to, dlaczego library
jest w połowie tak wolny jak require
? Miałem wrażenie, że są synonimami.
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
jeśli jesteś jedyną osobą, używając go, dlaczego nie usunąć wymagać/Library i nazywają to poza funkcją? taht powiedział, Wewnątrz funkcji użyłbym 'require' ponieważ zwraca ostrzeżenia, a nie błąd – agstudy
Czy różnica prędkości miałaby coś wspólnego z' biblioteką' niewidocznie zwracającą listę dostępnych pakietów, podczas gdy 'require' właśnie zwraca logiczną' TRUE/FALSE'? Po prostu przeczytałem to w '? Library', ale nie jestem ekspertem w tym temacie. – thelatemail
Zła praktyka używania' library() 'lub' require() 'wewnątrz funkcji, ponieważ sprawia, że trudno jest powiedzieć jaki pakiet potrzebuje kod. Powinny one być ou tside lub w opakowaniu OPIS. Nie martwiłbym się zbytnio implikacjami związanymi z wydajnością (a jeśli zrobiłeś 'microbenchmark' dostarczysz lepsze dane do kontynuowania). – hadley