2016-02-12 14 views
7

Non capisco il punto di.Prima funzione in R. La mia ragione è qualsiasi codice in .Rprofile sarà originato e eseguito quando R si avvia in ogni caso..Prima funzione in R

questo

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

e questo

library('devtools') 

in .Rprofile hanno esattamente lo stesso effetto.

Tuttavia, qui è un esempio che mostra .Prima può fare la differenza:

ad esempio 1, si può vedere X11.options() $ tipo diventa correttamente Xlib come stabilito in .Rprofile

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

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

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

ad esempio 2, si può vedere X11.options() $ tipo è ancora cairo, il setHook in .Rprofile non ha preso effetto

>> cat .Rprofile 
library(devtools) 

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

>> Rscript -e 'X11.options()$type' 
[1] "cairo" 
  • nel quale caso d o Devo assolutamente usare la prima funzione?
  • perché. La prima ha fatto la differenza nell'esempio sopra?

Grazie!

+2

È possibile salvare la funzione '.First' in' .RData', suppongo. R carica prima il file '.Renviron' quindi il file' .Rprofile' e poi il file '.RData'. Quindi, se si salva la funzione '.First' in' .RData', è possibile definire una diversa funzione '.First' per ciascun progetto. Penso che dovrebbe essere lo scopo di avere la funzione '.First'. –

+3

@Narendra. OK, sono convinto. Perché non renderlo una risposta? –

+3

@Narendra Più o meno il file di aiuto: * Una funzione .First (e .Last) può essere definita nei file appropriati '.Rprofile' o 'Rprofile.site' o sono stati salvati in '.RData'. * –

risposta

1

Potrebbe non essere necessario ma fornisce ancora un altro posto per modificare l'avvio. Certamente non fa male averlo.

Generalmente eseguo R in directory diverse per mantenere le cose separate; collegamento a un profiloRR comune; e utilizzare .First per adattare l'attuale ambiente di esecuzione R al problema specifico su cui sto lavorando. Se la prima azione non fosse disponibile, dovrei crearne una.