2011-08-28 7 views
10

Voglio essere in grado di source() un file che include un file diverso nella sua stessa directory, ma io non voglio avere per impostare la directory di lavoro dalla R-conferma prima di eseguire questo file:Determinare la posizione del file corrente in R per includere il file dalla stessa directory?

> getwd() 
[1] "/Users/myser" 
> source("/Users/myuser/workspace/myproject/myfile.r") 

Inside/Users/myuser/workspace/myproject, ci sarebbero myfile.r e my-utils.r. myfile.r chiama source('my-utils.r') dall'interno di esso.

Altri linguaggi di programmazione possono determinare il percorso del file corrente. R ha qualcosa di simile? Esempio:

cur_dir <- sys.get_current_file_path() 
source(file.path(cur_dir, "my-utils.r")) 

risposta

11
source("/Users/myuser/workspace/myproject/my-utils.r", chdir=TRUE) 

Quando chdir opzione è impostata su true e il parametro file di origine è un percorso completo, la directory dei file verrà utilizzato come directory di lavoro, mentre il file di sourcing.

NOTA: cur_dir <- sys.get_current_file_path() non ha molto senso perché i nomi dei percorsi non sono univoci.

+0

battere il mio di 30 secondi ... bella risposta. –

+0

@ Apprentice: il nome della mia funzione era probabilmente scarsamente scelto. Quello che intendevo era qualcosa come questo codice Python: os.path.realpath (\ _ \ _ file \ _ \ _) –

+1

Il problema con questo codice/soluzione è che lega la funzionalità di quella chiamata a 'source' ad essa esistente in quella directory specifica. Sarebbe bene avere una soluzione che non dipendesse da questo, come sarebbe realizzabile con l'approccio che Dolan stava cercando con il suo pseudo esempio di ispirazione pitone. correggimi se mi manca qualcosa però. – metasoarous