2013-01-18 14 views
14

Mi dispiace se è stato chiesto in precedenza ma non riesco a trovare la risposta.Crea una funzione creata dall'utente in R

Diciamo che ho scritto una piccola funzione in R

add2<-function(a){ 
return(a+2) 
} 

risparmio come add2.R nella mia home directory (o qualsiasi directory). Come posso ottenere R per trovarlo ??

So che posso aprire lo script, copiarlo/incollarlo nella console, eseguirlo e quindi funziona. Ma come faccio ad averlo incorporato così, se apro e chiudo R, gira ancora senza copiare e incollarlo?

+6

si può 'le cose nella vostra fonte fissa di' .Rprofile' se si vuole sempre la funzione, o metterla in un pacchetto e usa 'library'. – Justin

+2

Solo per espandere leggermente il commento di Justin, la documentazione di '? Startup' è un po 'una lettura densa, ma contiene l'essenziale di come usare un file' .RProfile'. Fondamentalmente, "viene cercato nella directory corrente o nella home directory dell'utente (in questo ordine).Il file del profilo utente viene acquisito nello spazio di lavoro. " – joran

+0

windows 7 non mi consente di creare un file chiamato" .Rprofile ".Si suggerisco? – stuppie

risposta

17

Una possibilità leggero:

dump("add2", file="myFunction.R") 

## Then in a subsequent R session 
source("myFunction.R") 

Un'alternativa:

save("add2", file="myFunction.Rdata") 

## Then just double click on "myFunction.Rdata" to open 
## an R session with add2() already in it 

## You can also import the function to any other R session with 
load("myFunction.Rdata") 

Fino a quando si è pronti per confezionare le funzioni nel vostro pacchetto privato, la loro memorizzazione in ben organizzato, source() testo ready i file (come nel primo esempio sopra) sono probabilmente la migliore strategia. Vedere this highly up-voted SO question per alcuni esempi di come i RE d'uso esperti mettono in pratica questo approccio.

4

Prima di invocare la funzione (ad esempio all'inizio dello script), si dovrebbe source il file contenente la funzione definita dall'utente/s, vale a dire:

source("add2.R") # this executes add2.R script loading add2 function 

In sostanza, source funzione esegue il codice incluso nella script passato come argomento. Quindi se il file contiene solo definizioni di funzioni carica la funzione in memoria per un uso futuro.

4

Se si desidera avviarlo automaticamente, è necessario impostare lo script di avvio e quindi utilizzare uno dei metodi descritti nelle risposte sopra.

/Library/Frameworks/R.framework/Versions/2.15/Resources/etc/ è (per Mac) la posizione di Rprofile.site, che deve essere modificato in modo adeguato.

La mia versione di esso è:

.First <- function() 
{ 
    dir='~/Desktop/Infobase/R/0_init/0_init.R' 
    if(file.exists(dir)) 
    { 
    source(dir, chdir = TRUE) 
    } else {cat("startup file is not found at:",dir)} 
    cat("\nWelcome at", date(), "\n") 
}  

.Last <- function() 
{ 
cat("\nGoodbye at ", date(), "\n") 
} 

nota, che dopo aver provenienza 1 script in R, non c'è bisogno di entrare più questo file. Fai tutto ciò che ti serve dal file che hai acquistato. Nel mio caso il file "0_init.R" non contiene funzioni, contiene solo il caricamento di altri script. Bene, hai avuto l'idea.

Inoltre, se si esegue questa operazione, si consiglia di memorizzarli in un nuovo ambiente. Gli ambienti reali non sono realmente adatti alle tue funzioni (sono implementati meglio se hai un pacchetto sviluppato, altrimenti perdi molto controllo).

uso "allegare", "staccare", "ricerca", ecc ....

attach(FUN,name="af2tr")