2013-07-05 15 views
8

To może być proste, ale nadal czuję się sfrustrowany, więc doceniam szybkie wyjaśnienie. Dokładnie szukałem właściwej odpowiedzi, ale nie mogę jej znaleźć.Różnica między .Rprofile a .First

Ponieważ mój .Rprofile zawiera wszystkie polecenia, które muszę uruchomić przy każdym uruchomieniu Rstudio (lub ogólnie R), dlaczego mam opcjonalność do zdefiniowania funkcji .First() w .Rprofile? Jaki jest naprawdę cel .First()?

Aby dać przykład, załóżmy, że mój .Rprofile ma następujące linie:

.First <- function(){ 
    library(xts) 
    cat("\nWelcome at", date(), "\n") 
} 

Czym różni się od wyżej po prostu o moim .Rprofile linie:

library(xts) 
cat("\nWelcome at", date(), "\n") 

mam próbowałem obu i mają ten sam wynik.

Dzięki!

Odpowiedz

12

Główną różnicą jest to, że .First jest wykonywany po domyślny obszar roboczy obraz .Rdata (jeśli istnieje) jest załadowany, a więc ma dostęp do obiektów w tym obszarze roboczym.

Na przykład stwórzmy obiekt, który będzie automatycznie ładowane przy starcie:

x <- 2 
save.image() 

Quit R i tworzyć .RProfile w domyślnym katalogu roboczego zawierająca:

y <- try(print(x)) 
print(y) 
.First <- function() 
{ 
    print(x) 
    invisible(NULL) 
} 

Pierwsza próba wydrukować x powinien się nie powieść, ale drugi powinien się powieść.

+0

Doskonały. Wielkie dzięki! –

+0

Należy zauważyć, że to zachowanie może być bardzo problematyczne, ponieważ **. Po pierwsze jest potencjalnie usunięte ** przez poprzednią wersję funkcji, gdy obszar roboczy jest załadowany. Należy ponownie załadować obszar roboczy, usunąć .Fisrt i ponownie uruchomić sesję (z zachowaniem obszaru roboczego) –