2016-10-13 3 views
-1

Ich möchte den Verzeichnisnamen als formales Argument der Funktion übergeben. Innerhalb der Funktion möchte ich mein Arbeitsverzeichnis in das in formalen Argument erwähnte Verzeichnis ändern. Das Verzeichnis befindet sich derzeit in meinem Arbeitsverzeichnis.Ändern des Arbeitsverzeichnisses innerhalb einer Funktion

Hinweis:

specdata ist das Verzeichnis, in meinem aktuellen wd

Code:

x <-function(directory) 
{ 
y<-file.path(getwd(),directory) 
setwd(y) 
} 

x(specdata) 

Dies scheint nicht zu funktionieren, ich will nicht "specdata" als Funktion argument.It eingeben sollte not be in double quotes.

+3

Was ist Ihr Widerspruch zur Verwendung von 'x (" specdata ")'? Die Verwendung der Anführungszeichen ist fast sicher eine einfachere Lösung als das Codieren einer Lösung ohne die Anführungszeichen. – Benjamin

Antwort

0

Ich weiß nicht, warum Sie die Anführungszeichen vermeiden wollen, da Sie den Kontext nicht erklärt haben. Aber wenn dies wirklich das ist, was Sie brauchen, können Sie eine nicht-standardmäßige Auswertung verwenden, um dies zu erreichen.

x <-function(directory) { 
    directory <- as.character(substitute(directory)) 
    y <-file.path(getwd(),directory) 
    setwd(y) 
    } 

Die Verwendung von as.character(substitute()) ist genau, wie zum Beispiel die Funktion library() man entweder haben, Zitate oder nicht erlaubt (die aktuelle Zeile, die diese Funktion in der Bibliothek tut, ist package <- as.character(substitute(package)).)

+0

Um Probleme auf der Straße zu vermeiden, sollte die Funktion 'orig_wd <- getwd(); on.exit (setwd (orig_wd)) 'ebenfalls. – Benjamin

+0

@Benjamin Ich bin mir nicht sicher, ob ich die Notwendigkeit dafür verstehe. Da der Zweck der Funktion der Nebeneffekt ist, das Arbeitsverzeichnis zu ändern, scheint das Rückgängigmachen dieses Effekts beim Beenden den Zweck zu vereiteln. – dww

+0

Ich nehme an, dass hängt davon ab, was auch immer die Funktion tut. Wenn das eine Funktion ist, die Sie zweimal innerhalb desselben Programms aufrufen können, wird es wahrscheinlich bei dem zweiten Aufruf fehlschlagen. Wenn der einzige Zweck darin besteht, das Arbeitsverzeichnis zu ändern, ist dies nicht notwendig. – Benjamin

Verwandte Themen