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)
Другие вопросы по тегам