Jako dodatek do @MikeDunlavey's answer:
Faktycznie, zarówno library
i require
sprawdzić, czy pakiet jest już załadowany. Oto kilka czasy z microbenchmark
uzyskać:
> microbenchmark (`!` (exists ("qplot")),
`!` (existsFunction ('qplot')),
require ('ggplot2'),
library ('ggplot2'),
"package:ggplot2" %in% search())
## results reordered with descending median:
Unit: microseconds
expr min lq median uq max
3 library("ggplot2") 259.720 262.8700 266.3405 271.7285 448.749
1 !existsFunction("qplot") 79.501 81.8770 83.7870 89.2965 114.182
5 require("ggplot2") 12.556 14.3755 15.5125 16.1325 33.526
4 "package:ggplot2" %in% search() 4.315 5.3225 6.0010 6.5475 9.201
2 !exists("qplot") 3.370 4.4250 5.0300 6.2375 12.165
Dla porównania, załadunek po raz pierwszy:
> system.time (library (ggplot2))
User System verstrichen
0.284 0.016 0.300
(! To są sekundy)
W końcu, jak długo współczynnik 3 = 10 μs pomiędzy require
i "package:ggplot2" %in% search()
nie jest potrzebny, chciałbym przejść z require
, inaczej zt %in% search()
.
Dobra robota - miałem taką samą myśl o "to powinno zostać porównane". Dziękuję za zrobienie tego, a ja nadal będę używać 'require()' dla jasności bez znaczącej utraty wydajności. –