2012-05-30 19 views

Odpowiedz

2

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().

+0

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. –

9

Nie uruchamiaj ponownie - zachowaj stałą sesję R i po prostu wysyłaj do niej żądania. Może to zapewnić coś takiego, jak na przykład Rserve, i na przykład: FastRWeb używa go bardzo dobrze - w trakcie milisekundowych podróży w obie strony do generowania wykresów.

+0

To była też moja myśl. Dodałabym też myślenie o sterowaniu ładowaniem, gdy R jest uruchamiany. Jeśli chcesz być efektywny, kontroluj profil tak, aby podczas rozruchu były ładowane tylko wymagane biblioteki, w tym przypadku ggplot2. –

2

Co powiedział Dirk, plus można użyć funkcji exists warunkowo załadować bibliotekę, jak w

if (! exists("some.function.defined.in.the.library")){ 
    library(the.library) 
} 

więc jeśli umieścić, że w skrypcie można uruchomić skrypt więcej niż raz w tym samym R sesja.

Powiązane problemy