2013-11-26 5 views
1

많은 서브 디렉토리로 작업하고 있기 때문에 setwd()은 현재 위치와 이전 위치를 기억하고 다른 분석을 수행 할 때마다 다시 변경해야하기 때문에 꽤 불완전합니다. 상대 경로와 다른 경로가 필요할 때 상황이 더욱 복잡해집니다. 루비 같이, 코드의 특정 부분에 대한 변경 사항을 적용 할 수있는 편리한 방법을 찾고 있어요 :편리한 디렉토리 처리 R

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')을 적용 : 나는 그런 추한 기능을 작성했습니다

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

코드의 각 부분 이후에는 tempDirOld()입니다. 하지만 어쩌면 내장 된 편리한 방법이 있을까요?

답변

4

당신은 당신이 당신의 기능이 뭔가를 할 수 있도록, 이전의 디렉토리를 반환 setwd 같은 수 있습니다

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

    # do something 
} 

이 방법을 사용하면 전역 변수, <<- 등으로 혼란을하지 않습니다 ...

2

왜 그냥 당신이 시작할 때 변수로 시작 디렉토리를 저장하고 디렉토리를 재설정하는 데 사용

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

루게릭 병을 상대 경로를 활용하려고하는 것처럼 들릴 수도 있습니다.

setwd('./subdir') 
# do stuff, then go back: 
setwd('../')