2016-10-13 2 views
-1

Я хочу передать имя каталога в качестве формального аргумента функции. Внутри функции я хочу изменить рабочий каталог на каталог, упомянутый в формальном аргументе. В настоящее время каталог находится внутри моего рабочего каталога.Изменение рабочего каталога внутри функции

Примечание:

specdata директория внутри моих текущих БВ

код:

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

x(specdata) 

Это, кажется, не работает, я не хочу, чтобы ввести "specdata" в качестве функции argument.It должен not be in double quotes.

+3

Какой ваш против использования 'x (" specdata ")'? Использование котировок почти наверняка будет более простым решением, чем кодирование решения без кавычек. – Benjamin

ответ

0

Я не знаю, почему вы хотите избежать двойных кавычек, поскольку вы не объяснили контекст. Но если это действительно то, что вам нужно, то для достижения этой цели вы можете использовать нестандартную оценку.

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

Использование as.character(substitute()) именно как, например, функция library() позволяет либо иметь цитаты или нет (фактической линии, что делает это в функции библиотеки является package <- as.character(substitute(package)).)

+0

, чтобы избежать проблем в будущем, функция должна включать в себя 'orig_wd <- getwd(); on.exit (setwd (orig_wd)) '. – Benjamin

+0

@Benjamin Я не уверен, что я понимаю необходимость этого. Поскольку целью функции является ее побочный эффект от изменения рабочего каталога, отмена этого эффекта на выходе, похоже, превзошла цель. – dww

+0

Я полагаю, это зависит от того, что еще делает функция. Если это функция, вы можете дважды позвонить в одну и ту же программу, она, скорее всего, не сработает при втором вызове. Если единственной целью является изменение рабочего каталога, то это необязательно. – Benjamin

Смежные вопросы