1

私は多くのサブディレクトリを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()しかし、組み込みの便利な方法があるのではないでしょうか?

4

2 に答える 2

4

関数で次のようなことができるように、前のディレクトリをsetwd返すことをお勧めします。

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

   # do something
} 

このようにして、グローバル変数などをいじることはありません<<-...

于 2013-11-26T09:33:12.367 に答える