2012-08-15 35 views
10

que he escrito unas cuantas funciones para un paquete que utilizan rutas relativas como:paquete rutas relativas en R

"./data/foobar.rds" 

He aquí un ejemplo de función:

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

Ahora, si tuviera que ser trabajando en la ruta de desarrollo del paquete, esto funciona como espero. Pero cuando cargo el paquete, esta ruta utiliza el directorio de trabajo actual en lugar de la ruta relativa del paquete.

¿Cómo se configura uno de tal manera que la ruta para las funciones dentro de un paquete mantienen su dentro de las rutas relativas del paquete?

+1

Véase '' system.file' y .path.package' – Andrie

+0

Por lo tanto, algo así como 'x <-?? ReadRDS (pasta (system.file (paquete = "pkgName"),"/data/bar .rds ", sep =" "))'? –

+1

Si desea algo independiente de sistema operativo intente x <- 'readRDS (file.path (system.file (package =" pkgName ")," data "," bar.rds "))' – dickoa

Respuesta

5

Como señala Andrie, puede usar system.file, que "busca los nombres completos de los archivos en los paquetes, etc."

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

¿Por qué es necesaria la "ayuda"? –

+0

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

+0

@BrandonBertelsen - La llamada a 'system.file()' resuelve a '/MASS/help/aliases.rds', que es donde reside el archivo que se va a leer. (Todos los argumentos iniciales sin nombre se empapan con '...', que 'system.file()' trata como un conjunto de subdirectorios y archivos, desde los cuales construye rutas dentro del paquete dado.) –

Cuestiones relacionadas