2016-10-13 3 views
-1

Je souhaite transmettre le nom du répertoire en tant qu'argument formel de la fonction. Dans la fonction, je veux changer mon répertoire de travail pour le répertoire mentionné dans l'argument formel. Le répertoire se trouve actuellement dans mon répertoire de travail.Modification du répertoire de travail dans une fonction

Note:

specdata est le répertoire dans mon wd actuel

code:

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

x(specdata) 

Cela semble ne fonctionne pas, je ne veux pas entrer "specdata" en fonction argument.It devrait not be in double quotes.

+3

Quelle est votre opposition à l'utilisation de 'x (" specdata ")'? L'utilisation des guillemets est presque certaine d'être une solution plus simple que de coder une solution sans les guillemets. – Benjamin

Répondre

0

Je ne sais pas pourquoi vous voulez éviter les guillemets, car vous n'avez pas expliqué le contexte. Mais si c'est vraiment ce dont vous avez besoin, vous pouvez utiliser une évaluation non standard pour y parvenir.

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

L'utilisation de as.character(substitute()) est exactement comment, par exemple, la fonction library() permet d'avoir soit des citations ou non (la ligne réelle qui fait cela dans la fonction de la bibliothèque est package <- as.character(substitute(package)).)

+0

pour éviter les problèmes sur la route, la fonction devrait inclure 'orig_wd <- getwd(); on.exit (setwd (orig_wd)) 'également. – Benjamin

+0

@Benjamin Je ne suis pas sûr de comprendre le besoin de cela. Puisque le but de la fonction est son effet secondaire de changer le répertoire de travail, annuler cet effet à la sortie semble aller à l'encontre du but. – dww

+0

Je suppose que cela dépend de tout ce que fait la fonction. S'il s'agit d'une fonction que vous pouvez appeler deux fois dans le même programme, elle échouera probablement au deuxième appel. Si le seul but est de changer le répertoire de travail, alors ce n'est pas nécessaire. – Benjamin