Rstudio에서 작업 디렉토리를 원본 파일 위치로 설정하기 위한 R 명령
저는 R에서 몇 가지 튜토리얼을 공부하고 있습니다.각 R 코드는 특정 폴더에 포함되어 있습니다.그 안에 데이터 파일과 다른 파일들이 있습니다.나는 그것을 열고 싶습니다..r
아래와 같이 Rstudio의 작업 디렉토리를 변경할 필요가 없도록 파일로 작성하고 소스화합니다.
R에서 내 작업 디렉터리를 자동으로 지정할 수 있는 방법이 있습니까?
소스가 소가되스트의위가치다수사다있용습니할음을면스져려오를는크를 사용하면 .utils::getSrcDirectory
또는utils::getSrcFilename
이것들은 입력으로서의 기능이 필요합니다.다음 행을 사용하여 스크립트를 만들고 소스로 만들어 사용법을 확인합니다.
print(utils::getSrcDirectory(function(){}))
print(utils::getSrcFilename(function(){}, full.names = TRUE))
작업 디렉토리를 현재 파일의 디렉토리로 변경하려면 다음 작업을 수행합니다.
setwd(getSrcDirectory(function(){})[1])
RStudio에서 코드를 소스화하는 것이 아니라 코드를 실행하는 경우에는 이 작업이 작동하지 않습니다.이를 위해 다음을 사용해야 합니다.rstudioapi::getActiveDocumentContext
.
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
이 두 번째 솔루션을 사용하려면 당연히 RStudio를 IDE로 사용해야 합니다.
이 질문이 시대에 뒤떨어진 질문이라는 것은 알지만, 저도 그에 대한 해결책을 찾고 있었습니다. 그리고 구글은 맨 위에 이것을 나열했습니다.
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
WD가 해당 파일에 따라 변경되도록 파일 어딘가에 넣습니다(그러나 시작이 가장 좋습니다).
의견에 따르면, 이것이 모든 플랫폼에서 반드시 작동하는 것은 아닙니다(Windows는 작동하는 것으로 보이며 일부 플랫폼에서는 Linux/Mac).이 솔루션은 파일을 '소싱'하기 위한 것이지, 해당 파일에서 청크를 실행할 필요는 없습니다.
참고 항목: 'source'd 파일의 파일 이름 및 경로 가져오기
rstudio의 경우 다음과 같이 rstudioapi를 사용하여 작업 디렉토리를 스크립트 디렉토리로 자동 설정할 수 있습니다.
library(rstudioapi)
# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path
setwd(dirname(current_path ))
print( getwd() )
이 기능은 파일을 실행하거나 소스화할 때 작동합니다.
먼저 packerstudioapi를 설치해야 합니다.올바른 위치에 있는지 100% 확인하기 위해 경로를 인쇄하지만, 이는 선택 사항입니다.
dirname(rstudioapi::getActiveDocumentContext()$path)
저는 사용할 수 있지만 userstudioapi를 사용하고 싶지 않고 프로젝트에 참여하지 않은 경우에는 경로에 ~ 기호를 사용할 수 있습니다.~ 기호는 기본 RStudio 작업 디렉터리를 나타냅니다(최소한 Windows의 경우)
인 , "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")
이것은 당신이 어떤 컴퓨터를 사용하고 있든지 간에 제가 스크립트를 코딩하는 가장 좋은 방법입니다.
이것이 오래된 스레드라는 것을 알고 있지만, 작업 디렉토리를 설정해야 하는 비슷한 문제가 있어서 제게 맞는 솔루션을 찾을 수 없었습니다.나중에 다른 사람이 이 문제를 해결하지 못할 경우를 대비해 다음과 같이 작업했습니다.
# 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)
약간 복잡하지만 기본적으로 시스템 명령을 사용하여 작업 디렉토리를 가져와 더미 파일에 저장합니다.그런 다음 R은 data.table::fread를 사용하여 해당 파일을 읽습니다.나머지는 파일에 인쇄된 내용을 정리하여 디렉토리 경로만 남겨두는 것입니다.
클러스터에서 R을 실행해야 했기 때문에 어떤 디렉터리(작업에 번호와 계산 노드가 할당됨)에 있는지 알 수 있는 방법이 없었습니다.이것은 저에게 효과가 있었습니다.
이 답변은 다음과 같은 도움이 됩니다.
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- 에서 찾았습니다.
범블비의 답변(parent.frame이 sys.frame이 아닌 parent.frame)이 작동하지 않았습니다. 항상 오류가 발생합니다.
해결책
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) )
저한테는 효과가 있어요.
패키지는 다음을 제공합니다.here()
함수 - 일부 휴리스틱을 기반으로 프로젝트 루트 디렉터리를 반환합니다.
완벽한 해결책은 아닙니다. 스크립트의 위치를 찾지 못했기 때문입니다. 하지만 어떤 목적에서는 충분하기 때문에 여기에 놓아야겠다고 생각했습니다.
저는 이것이 구식이라는 것을 이해하지만, 저는 이전의 답변이 만족스럽게 작동하도록 할 수 없었기 때문에, 다른 누군가가 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"
이것이 막혔을 수도 있는 다른 사람들에게 도움이 되기를 바랍니다.
setwd(this.path::here())
소스 스크립트와 "활성" 스크립트 모두에서 작동합니다.
저는 이 문제에 대한 해결책을 찾고 있었는데, 이 페이지에 왔습니다.오래된 것으로 알고 있지만 이전의 해결책이 만족스럽지 않거나 효과가 없었습니다.관심이 있다면 여기 제 작품이 있습니다.
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)
저는 조롱하는 새처럼 느껴지지만, 저는 말할 것입니다: 이 게시물이 오래된 것은 알지만...
작업 스케줄러와 .bat 파일에서 스크립트를 실행할 때 api를 호출할 수 없다는 것을 최근에 알았습니다.저는 이것을 힘들게 배웠습니다.rstudioapi:: 메소드를 사용하는 사람들은 그것을 알고 싶어할 것이라고 생각했습니다.우리는 이런 식으로 밤새 많은 스크립트를 실행합니다.최근에 작업 디렉토리를 "동적으로" 설정할 수 있도록 호출되는 api를 포함하도록 경로를 변경했습니다.그런 다음 작업 스케줄러에서 트리거할 때 처음 시도한 작업이 실패했을 때 조사에서 해당 정보가 제공되었습니다.
이 문제가 밝혀진 실제 코드는 다음과 같습니다.
setwd(dirname(rstudioapi: getActiveDocumentContext()$path))
스크립트를 실행하는 경우에도 멋지게 작동합니다!
저는 사람들이 여전히 이 실들을 끌어올리고 있다는 것을 알기 때문에 이것이 도움이 될 것이라고 생각했습니다.
UTF-8 인코딩을 사용하는 경우:
path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(dirname(path))
아직 packer studioapi를 설치하지 않았다면 설치해야 합니다.
대부분의 GUI는 사용자가 디렉토리에 있고 .R 파일을 "열고" 두 번 클릭하거나 실행을 시도할 경우 별도로 지정하지 않는 한 .R 파일이 있는 디렉토리가 작업 디렉토리가 될 것으로 가정합니다.Mac GUI는 실행 중인 세션에서 설정한 기본 설정의 시작 패널에서 변경할 수 있는 기본 동작을 변경하는 방법을 제공하며 다음 "시작" 시 적용됩니다.또한 다음을 살펴보아야 합니다.
?Startup
RStudio 설명서에는 다음과 같은 내용이 나와 있습니다.
파일 연결을 통해 실행하면 RStudio는 자동으로 열린 파일의 디렉터리에 작업 디렉터리를 설정합니다.기본 설정은 RStudio가 .R 파일의 핸들러로 등록되는 것이지만, .Rdata 및 .R 확장자에 대해 RStudio와 기본 "연결"을 설정하는 기능에 대해서도 언급되어 있습니다.Linux에서 'handler' 상태와 'association' 상태가 동일한지 여부는 알 수 없습니다.
http://www.rstudio.com/ide/docs/using/workspaces
dirname(parent.frame(2)$ofile)
나에게도 통하지 않지만, 다음은 (https://stackoverflow.com/a/35842176/992088) 에서 제안한 것처럼) ubuntu 14.04에서 나에게도 작동합니다.
dirname(rstudioapi::getActiveDocumentContext()$path)
다음은 이를 위한 또 다른 방법입니다.
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()
언급URL : https://stackoverflow.com/questions/13672720/r-command-for-setting-working-directory-to-source-file-location-in-rstudio
'source' 카테고리의 다른 글
UIAction 만들기변수 목록이 아닌 배열로 전달하여 '기타 단추'를 시트합니다. (0) | 2023.06.06 |
---|---|
레일에서 비계 실행 취소 (0) | 2023.06.06 |
오류: Android 응용 프로그램 모듈의 Gradle 구성을 구문 분석할 수 없습니다. (0) | 2023.06.06 |
bto3 S3에 연결할 때 자격 증명을 지정하는 방법은 무엇입니까? (0) | 2023.06.06 |
라라벨:특정 데이터베이스 엔진만 대상으로 마이그레이션 실행 (0) | 2023.06.06 |