R에서 자습서를 만들고 있습니다. 각 R 코드는 특정 폴더에 포함되어 있습니다. 거기에 데이터 파일과 다른 파일이 있습니다. .r
파일 을 열고 소스를 지정하여 아래와 같이 Rstudio에서 작업 디렉토리를 변경할 필요가 없습니다.
R에서 작업 디렉토리를 자동으로 지정하는 방법이 있습니까?
load
있지 않고 동일한 폴더에있는 .rdata-files 를 원합니다 source
.
R에서 자습서를 만들고 있습니다. 각 R 코드는 특정 폴더에 포함되어 있습니다. 거기에 데이터 파일과 다른 파일이 있습니다. .r
파일 을 열고 소스를 지정하여 아래와 같이 Rstudio에서 작업 디렉토리를 변경할 필요가 없습니다.
R에서 작업 디렉토리를 자동으로 지정하는 방법이 있습니까?
load
있지 않고 동일한 폴더에있는 .rdata-files 를 원합니다 source
.
답변:
소스 스크립트의 위치를 확인하려면 utils::getSrcDirectory
또는 을 사용할 수 있습니다 utils::getSrcFilename
. 따라서 작업 디렉토리를 현재 파일의 디렉토리로 변경하려면 다음을 수행하십시오.
setwd(getSrcDirectory()[1])
소스 코드가 아닌 코드 를 실행 하면 RStudio에서 작동하지 않습니다 . 이를 위해서는을 사용해야 합니다.rstudioapi::getActiveDocumentContext
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
이 두 번째 솔루션은 물론 RStudio를 IDE로 사용해야합니다.
Error: 'getActiveDocumentContext' is not an exported object from 'namespace:rstudioapi'
getActiveDocumentContext()
RStudio 내의 콘솔에서 실행할 때 경로는로보고됩니다 ''
. 그러나 편집기 부분에서 코드 줄을 실행하면 예상대로 실행됩니다. 이것은 @Andru의 의견을 해결할 수 있습니다
rstudioapi
패키지를 사용하고있는 것 같습니다 . 최신 버전으로 업데이트하십시오.
나는이 질문이 오래되었다는 것을 알고 있지만 그에 대한 해결책을 찾고 있었고 Google은 이것을 맨 위에 나열합니다.
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
파일의 어딘가에 넣으십시오 (그러나 가장 좋은 것은 시작일 것입니다) .wd는 해당 파일에 따라 변경됩니다.
의견에 따르면, 이것은 모든 플랫폼에서 작동하지 않을 수도 있습니다 (Windows는 Linux / Mac에서 작동하는 것으로 보입니다). 이 솔루션은 파일을 '소싱'하기위한 것이며 반드시 해당 파일에서 청크를 실행하기위한 것은 아닙니다.
`source`d 파일의 파일 이름과 경로를 참조하십시오.
Error in dirname(parent.frame(2)$ofile) : a character vector argument expected
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) )
그것은 나를 위해 작동합니다.
pwd
또한 PowerShell (현재 Windows에서는 기본 셸로 간주 됨)에서 별명입니다 Get-Location
.
나는이 문제에 대한 해결책을 찾고 있었고이 페이지에 왔습니다. 나는 날짜가 있지만 만족스럽지 않거나 효과가 없었던 이전 솔루션을 알고 있습니다. 관심이 있다면 내 해결 방법이 있습니다.
filename = "your_file.R"
filepath = file.choose() # browse and select your_file.R in the window
dir = substr(filepath, 1, nchar(filepath)-nchar(filename))
setwd(dir)
setwd( dirname(filepath) )
있습니까?
나는 이것이 오래된 스레드라는 것을 알고 있지만 작업 디렉토리를 설정 해야하는 것과 비슷한 문제가 있었고 해결책을 찾지 못했습니다. 다른 사람이 나중에 이것을 우연히 발견 한 경우를 대비하여 다음과 같이 작동했습니다.
# SET WORKING DIRECTORY TO CURRENT DIRECTORY:
system("pwd=`pwd`; $pwd 2> dummyfile.txt")
dir <- fread("dummyfile.txt")
n<- colnames(dir)[2]
n2 <- substr(n, 1, nchar(n)-1)
setwd(n2)
약간 복잡하지만 기본적으로 시스템 명령을 사용하여 작업 디렉토리를 가져 와서 dummyfile.txt에 저장 한 다음 R은 data.table :: fread를 사용하여 해당 파일을 읽습니다. 나머지는 파일에 인쇄 된 내용을 정리하여 디렉토리 경로 만 남았습니다.
클러스터에서 R을 실행해야했기 때문에 어떤 디렉토리에 있는지 알 수있는 방법이 없었습니다 (작업에 숫자와 계산 노드가 할당 됨). 이것은 나를 위해 속임수를했다.
나는 이것이 구식이라는 것을 알고 있지만 이전 답변이 매우 만족스럽게 작동하지 못했기 때문에 BumbleBee의 답변에 대한 의견에서 언급 한 것과 동일한 오류가 발생하는 경우 내 방법을 제공하고 싶었습니다.
광산은 간단한 시스템 명령을 기반으로합니다. 당신이 기능을 공급하는 것은 스크립트의 이름입니다 :
extractRootDir <- function(x) {
abs <- suppressWarnings(system(paste("find ./ -name",x), wait=T, intern=T, ignore.stderr=T))[1];
path <- paste("~",substr(abs, 3, length(strsplit(abs,"")[[1]])),sep="");
ret <- gsub(x, "", path);
return(ret);
}
setwd(extractRootDir("myScript.R"));
함수의 출력은 다음과 같습니다 "/Users/you/Path/To/Script"
. 이것이 갇힌 다른 사람들을 도울 수 있기를 바랍니다.
대부분의 GUI는 사용자가 디렉토리에 있고 "열기", 두 번 클릭 또는 .R 파일 실행을 시도하는 경우 달리 지정하지 않는 한 해당 파일이있는 디렉토리가 작업 디렉토리가 될 것이라고 가정합니다. Mac GUI는 실행중인 세션에서 설정 한 다음 환경 설정의 시작 패널에서 변경할 수있는 기본 동작을 변경하는 방법을 제공합니다. 당신은 또한보고해야합니다 :
?Startup
RStudio 설명서는 다음과 같이 말합니다.
"파일 연결을 통해 시작할 때 RStudio는 작업 디렉토리를 열린 파일의 디렉토리로 자동 설정합니다." 기본 설정은 RStudio가 .R 파일에 대한 핸들러로 등록되는 것입니다. 그러나 RStudio와 .Rdata 및 .R 확장자에 기본 "연결"을 설정하는 기능에 대해서도 언급되어 있습니다. '핸들러'상태와 '연결'상태가 Linux에서 동일한 지 여부는 알 수 없습니다.
dirname(parent.frame(2)$ofile)
나에게도 효과가 없지만 다음 ( https://stackoverflow.com/a/35842176/992088 에서 제안 된 ) 우분투 14.04에서 저에게 효과적입니다.
dirname(rstudioapi::getActiveDocumentContext()$path)
Error: 'getActiveDocumentContext' is not an exported object from 'namespace:rstudioapi'
또한 우분투 14.04에서
UTF-8 인코딩을 사용하는 경우 :
path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(dirname(path))
rstudioapi 패키지를 아직 설치하지 않았다면 설치해야합니다.
다른 방법은 다음과 같습니다.
set2 <- function(name=NULL) {
wd <- rstudioapi::getSourceEditorContext()$path
if (!is.null(name)) {
if (substr(name, nchar(name) - 1, nchar(name)) != '.R')
name <- paste0(name, '.R')
}
else {
name <- stringr::word(wd, -1, sep='/')
}
wd <- gsub(wd, pattern=paste0('/', name), replacement = '')
no_print <- eval(expr=setwd(wd), envir = .GlobalEnv)
}
set2()
?setwd
?getwd