2016-02-12 26 views
7

Nie rozumiem punktu funkcji First w R. Moja przyczyna to jakikolwiek kod w .Rprofile będzie pozyskiwany i wykonywany, gdy R uruchomi się mimo to.Pierwsza funkcja w R

to

.First<-function(){                 
    library('devtools')          
} 

i to

library('devtools') 

w .Rprofile mają dokładnie ten sam efekt.

Jednak tutaj jest przykładem, który pokazuje .First może zrobić różnicę:

przykład 1, można zobaczyć X11.options() $ typ poprawnie staje Xlib jak określono w .Rprofile

>> cat .Rprofile 
.First <- function() { 
    library(devtools) 
} 

setHook(
    packageEvent("grDevices", "onLoad"), 
    function(...) grDevices::X11.options(type="Xlib") 
) 

>> Rscript -e 'X11.options()$type' 
[1] "Xlib" 

przykład 2, można zobaczyć X11.options() $ typ jest nadal Kairze setHook w .Rprofile nie miała wpływu

>> cat .Rprofile 
library(devtools) 

setHook(
    packageEvent("grDevices", "onLoad"), 
    function(...) grDevices::X11.options(type="Xlib") 
) 

>> Rscript -e 'X11.options()$type' 
[1] "cairo" 
  • w jakim przypadku d o Absolutnie muszę używać funkcji .First?
  • dlaczego .First wprowadził różnicę w powyższym przykładzie?

Dzięki!

+2

Możesz zapisać '.First' funkcję w' .RData' Chyba. R najpierw ładuje plik '.Renviron', następnie' .Rprofile', a następnie plik '.RData'. Więc jeśli zapiszesz funkcję '.First' w' .RData', możesz zdefiniować inną funkcję '.First' dla każdego projektu. Myślę, że powinien to być cel funkcji '.First'. –

+3

@Narendra. OK, jestem przekonany. Dlaczego nie uczynić z tego odpowiedzi? –

+3

@Narendra Mniej lub więcej pliku pomocy: * Funkcja. Początek (i .Last) mogą być zdefiniowane w odpowiednich plikach ".Rprofile" lub "Rprofile.site" lub zapisane w ".RData". * –

Odpowiedz

1

Może to być niepotrzebne, ale zapewnia jeszcze jedno miejsce do modyfikacji uruchamiania. To na pewno nie boli.

Generalnie uruchamiam R w różnych katalogach, aby zachować rozróżnienie; łącze do wspólnego .Rprofile; i użyj .First, aby dostosować bieżące środowisko pracy R do określonego problemu, nad którym pracuję. Jeśli działanie .First było niedostępne, musiałbym je utworzyć.