2012-08-15 29 views
10

che ho scritto un paio di funzioni per un pacchetto che utilizzano i percorsi relativi come:Package percorsi relativi a R

"./data/foobar.rds" 

Ecco un esempio di funzione:

foo <- function(x) { 
x <- readRDS("./data/bar.rds") 
return(x) 
} 

Ora, se dovessi essere lavorando nel percorso di sviluppo del pacchetto, funziona come mi aspetto. Ma quando carico il pacchetto, questo percorso usa la directory di lavoro corrente piuttosto che il percorso relativo del pacchetto.

Come si imposta in modo tale che il percorso per le funzioni all'interno di un pacchetto mantenga le proprie all'interno dei percorsi relativi del pacchetto?

+1

Vedere '' system.file' e .path.package' – Andrie

+0

Quindi, qualcosa di simile a 'x <-?? ReadRDS (pasta (system.file (package = "pkgname"),"/dati/bar .rds", settembre = ""))'? –

+1

Se si desidera qualcosa di indipendente dal sistema operativo, provare x <- 'readRDS (file.path (system.file (package =" pkgName ")," data "," bar.rds "))' – dickoa

risposta

5

Come osserva Andrie, è possibile utilizzare system.file, che "trova i nomi di file completi dei file nei pacchetti ecc."

x <- readRDS(system.file("help", "aliases.rds", package="MASS")) 
+0

Perché è necessaria la "guida"? –

+0

'dir (system.file (" help ", package =" MASS "))' – dickoa

+0

@BrandonBertelsen - La chiamata a 'system.file()' risolve in '/MASS/help/aliases.rds', che è dove risiede il file da leggere. (Tutti gli argomenti iniziali senza nome vengono assorbiti da '...', che 'system.file()' considera come un insieme di sottodirectory e file, dai quali costruisce i percorsi all'interno del pacchetto specificato.) –