Удобная обработка каталогов в R

Так как я работаю со многими подкаталогами, я нахожу setwd() довольно неудобно, так как требует от меня вспомнить текущее и предыдущее местоположение и менять их обратно каждый раз, когда я выполняю другой анализ. Все становится сложнее, когда некоторые пути должны быть относительными, а другие - абсолютными. Я ищу удобный способ применить изменения для определенной части кода, как в Ruby:

Dir.chdir("newDir") do
  # some code here #
end

Я написал такие уродливые функции:

path = list()

tempDirNew <- function(..., abs= FALSE){
  path$tempDir$old <<- getwd()
  mod = ifelse(abs == TRUE,
         '',
         path$tempDir$old)
  path$tempDir$new <<- file.path(mod, ...)

  dir.create(path= path$tempDir$new, showWarnings= FALSE)
  setwd(dir= file.path(path$tempDir$new))
}

tempDirOld <- function(){
  setwd(dir= path$tempDir$old)
  path$tempDir$new <- NULL
  path$tempDir$old <- NULL
}

и применить tempDirNew('newdir') до и tempDirOld() после каждой части кода. Но может быть есть какой-то встроенный, удобный способ?

2 ответа

Решение

Вам может понравиться это setwd возвращает предыдущий каталог, так что вы можете сделать что-то подобное в своих функциях:

f <- function(){
   old <- setwd( "some/where" )
   on.exit( setwd(old) )

   # do something
} 

Таким образом, вы не связываетесь с глобальными переменными, <<- так далее...

Почему бы не сохранить исходный каталог как переменную при запуске и использовать его для сброса каталога:

mydir <- getwd()
# do anything
# change directories
# do more stuff
# change directories
# yadda yadda yadda
setwd(mydir)

Также звучит так, как будто вы хотите использовать относительные пути:

setwd('./subdir')
# do stuff, then go back:
setwd('../')
Другие вопросы по тегам