R установить рабочий каталог в папку
Я пытаюсь установить рабочий каталог в другую подпапку в функции. Я ожидал, что команда print распечатает
C:/Users/Blah/Desktop/dir2/SUBFOLDER
вместо этого он печатает
C:/Users/Blah/Desktop/dir2
Тем не менее, когда я запускаю dirs в консоли, я получаю:
C:/Users/Blah/Desktop/dir2/SUBFOLDER
...(Much longer list)
как я и ожидал. Вот мой код:
temp<-function(path)
{
print(path) #output is C:/Users/Blah/Desktop/dir2
setwd(path)
print(getwd())
xml=xmlParse("filename.xml")
...
}
dirs<-list.dirs("C:/Users/Blah/Desktop/dir2")
lapply(dirs,temp)#apply function tempt to every item in dirs
2 ответа
Вы проверили необязательные аргументы list.dirs ()? ( https://stat.ethz.ch/R-manual/R-devel/library/base/html/list.files.html)
В документации сказано, что по умолчанию ответ включает в себя сам "путь", поэтому ваша функция temp сначала будет применена к каталогу, который вы указали для list.dirs(), "C:/Users/Blah/Desktop/dir2". Вы можете попробовать использовать list.dirs("C:/Users/Blah/Desktop/dir2", recursive = FALSE) (если все в порядке с тем, что вы хотите)
Ваш вопрос довольно сложен для понимания.
list.dirs
вернет (по умолчанию) пути относительно текущего рабочего каталога.
Если вы измените рабочий каталог, относительные пути не будут действительными.
Вы можете попробовать использовать full.names = TRUE
в списке list.dirs ваш temp
функция возвращает рабочий каталог в исходное состояние
temp <- function(path) {
owd <- getwd()
on.exit(setwd(owd))
print(path)
setwd(path)
print(getwd())
}
Еще лучшей идеей может быть, вместо того, чтобы возиться с рабочим каталогом, просто передать соответствующее имя файла xmlParse
(или что бы ни делала ваша функция)
files <- list.files(pattern = '\\.xml$', recurvise = TRUE)
XML <- lapply(files, xmlParse)