2012-08-15 17 views
10

ich ein paar Funktionen für ein Paket geschrieben haben, die wie relative Pfade verwenden:Paket relative Pfade in R

"./data/foobar.rds" 

Hier ist ein Beispiel Funktion:

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

Nun, wenn ich sein sollten Arbeiten im Entwicklungspfad des Pakets, das funktioniert wie ich es erwarte. Aber wenn ich das Paket lade, verwendet dieser Pfad das aktuelle Arbeitsverzeichnis und nicht den relativen Pfad des Pakets.

Wie stellt man es so ein, dass der Pfad für Funktionen innerhalb eines Pakets ihre innerhalb des Pakets relativen Pfade behält?

+1

Siehe 'system.file' und' .path.package' – Andrie

+0

Also, so etwas wie 'x <-? ReadRDS (Paste (system.file (Paket = "pkgname"),"/data/bar .rds ", sep =" "))'? –

+1

Wenn Sie etwas OS unabhängig versuchen möchten, versuchen Sie x <- 'readRDS (Datei.Pfad (System.File (Paket =" Paketname ")," Daten "," Bar.RDS "))' – dickoa

Antwort

5

Wie Andrie bemerkt, können Sie system.file verwenden, die "die vollständigen Dateinamen von Dateien in Paketen usw. findet".

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

Warum ist "Hilfe" notwendig? –

+0

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

+0

@BrandonBertelsen - Der Aufruf von 'system.file()' wird in '/MASS/aufgelöst help/aliases.rds', wo sich die zu lesende Datei befindet. (Alle anfänglichen unbenannten Argumente werden von '...' aufgesaugt, was 'system.file()' als eine Menge von Unterverzeichnissen und Dateien behandelt, aus denen es Pfade innerhalb des gegebenen Pakets konstruiert.) –