R에서 자습서를 만들고 있습니다. 각 R 코드는 특정 폴더에 포함되어 있습니다. 거기에 데이터 파일과 다른 파일이 있습니다. .r
파일 을 열고 소스를 지정하여 아래와 같이 Rstudio에서 작업 디렉토리를 변경할 필요가 없습니다.
R에서 작업 디렉토리를 자동으로 지정하는 방법이 있습니까?
답변
소스 스크립트의 위치를 확인하려면 utils::getSrcDirectory
또는 을 사용할 수 있습니다 utils::getSrcFilename
. 따라서 작업 디렉토리를 현재 파일의 디렉토리로 변경하려면 다음을 수행하십시오.
setwd(getSrcDirectory()[1])
소스 코드가 아닌 코드 를 실행 하면 RStudio에서 작동하지 않습니다 . 이를 위해서는을 사용해야 합니다.rstudioapi::getActiveDocumentContext
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
이 두 번째 솔루션은 물론 RStudio를 IDE로 사용해야합니다.
답변
나는이 질문이 오래되었다는 것을 알고 있지만 그에 대한 해결책을 찾고 있었고 Google은 이것을 맨 위에 나열합니다.
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
파일의 어딘가에 넣으십시오 (그러나 가장 좋은 것은 시작일 것입니다) .wd는 해당 파일에 따라 변경됩니다.
의견에 따르면, 이것은 모든 플랫폼에서 작동하지 않을 수도 있습니다 (Windows는 Linux / Mac에서 작동하는 것으로 보입니다). 이 솔루션은 파일을 ‘소싱’하기위한 것이며 반드시 해당 파일에서 청크를 실행하기위한 것은 아닙니다.
`source`d 파일의 파일 이름과 경로를 참조하십시오.
답변
dirname(rstudioapi::getActiveDocumentContext()$path)
나를 위해 작동하지만 rstudioapi 를 사용하지 않고 proyect가 아닌 경우 경로에 ~ 기호를 사용할 수 있습니다. ~ 기호는 기본 RStudio 작업 디렉토리를 나타냅니다 (적어도 Windows에서는).
RStudio 작업 디렉토리가 “D : / Documents”인 경우 setwd("~/proyect1")
setwd ( “D : / Documents / proyect1”)와 동일합니다.
일단 설정하면 하위 디렉토리로 이동할 수 있습니다 read.csv("DATA/mydata.csv")
. 와 동일합니다 read.csv("D:/Documents/proyect1/DATA/mydata.csv")
.
상위 폴더로 이동하려면을 사용할 수 있습니다 "../"
. 예를 들면 다음 read.csv("../olddata/DATA/mydata.csv")
과 같습니다.read.csv("D:/Documents/oldata/DATA/mydata.csv")
이것은 어떤 컴퓨터를 사용하든 스크립트를 코딩하는 가장 좋은 방법입니다.
답변
이 답변이 도움이 될 수 있습니다.
script.dir <- dirname(sys.frame(1)$ofile)
참고 : 올바른 경로를 반환하려면 스크립트를 소싱해야합니다.
https://support.rstudio.com/hc/communities/public/questions/200895567-can-user-obtain-the-path-of-current-Project-s-directory- 에서 찾았습니다.
BumbleBee의 답변 (parent.frame 대신 sys.frame 사용)이 작동하지 않아 항상 오류가 발생합니다.
답변
들어 rstudio , 당신은 자동으로 사용하여 스크립트 디렉토리로 작업 디렉토리를 설정할 수 있습니다 rstudioapi을 그렇게 :
library(rstudioapi)
# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path
setwd(dirname(current_path ))
print( getwd() )
파일을 실행하거나 소싱 할 때 작동합니다.
rstudioapi 패키지를 먼저 설치해야합니다. 올바른 경로에 100 % 확신하도록 경로를 인쇄하지만 선택 사항입니다.
답변
해결책
dirname(parent.frame(2)$ofile)
나를 위해 작동하지 않습니다.
나는 무차별 대입 알고리즘을 사용하고 있지만 작동합니다.
File <- "filename"
Files <- list.files(path=file.path("~"),recursive=T,include.dirs=T)
Path.file <- names(unlist(sapply(Files,grep,pattern=File))[1])
Dir.wd <- dirname(Path.file)
디렉토리를 검색 할 때 더 쉽게 :
Dirname <- "subdir_name"
Dirs <- list.dirs(path=file.path("~"),recursive=T)
dir_wd <- names(unlist(sapply(Dirs,grep,pattern=Dirname))[1])
답변
Linux에서 작업하는 경우 다음을 시도하십시오.
setwd(system("pwd", intern = T) )
그것은 나를 위해 작동합니다.