Удобная обработка каталогов в 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('../')