R命令,用于在Rstudio中将工作目录设置为源文件位置
我正在用R编写一些教程。每个R代码都包含在一个特定的文件夹中。里面有数据文件和其他文件。我想打开R命令,用于在Rstudio中将工作目录设置为源文件位置,r,automation,working-directory,R,Automation,Working Directory,我正在用R编写一些教程。每个R代码都包含在一个特定的文件夹中。里面有数据文件和其他文件。我想打开.r文件并对其进行源代码设置,这样我就不必更改Rstudio中的工作目录,如下所示: 是否有一种方法可以在R中自动指定我的工作目录。大多数GUI都假定,如果您在一个目录中并“打开”,双击或以其他方式尝试执行.R文件,则除非另有指定,否则它所在的目录将是工作目录。Mac GUI提供了一种更改默认行为的方法,该默认行为可在您在运行会话中设置的首选项启动面板中更改,并在下一次“启动”时生效。您还应该看到:
.r
文件并对其进行源代码设置,这样我就不必更改Rstudio中的工作目录,如下所示:
是否有一种方法可以在R中自动指定我的工作目录。大多数GUI都假定,如果您在一个目录中并“打开”,双击或以其他方式尝试执行.R文件,则除非另有指定,否则它所在的目录将是工作目录。Mac GUI提供了一种更改默认行为的方法,该默认行为可在您在运行会话中设置的首选项启动面板中更改,并在下一次“启动”时生效。您还应该看到:
?Startup
RStudio文档说明:
“当通过文件关联启动时,RStudio会自动将工作目录设置为打开文件的目录。”默认设置是将RStudio注册为.R文件的处理程序,不过也提到了可以为.Rdata和.R扩展名设置与RStudio的默认“关联”。Linux上的“handler”状态和“association”状态是否相同,我无法判断
我知道这个问题已经过时,但我也在寻找解决方案,谷歌在最上面列出了这个问题:
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
this.dir解决方案
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)
File我知道这已经过时了,但我无法让以前的答案非常令人满意,所以我想贡献我的方法,以防其他人遇到大黄蜂答案评论中提到的相同错误
Mine基于一个简单的系统命令。为函数提供的所有内容都是脚本的名称:
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"));
extractRootDir这个答案可以帮助:
script.dir <- dirname(sys.frame(1)$ofile)
script.dir我只是在寻找这个问题的解决方案,来到这个页面。我知道它过时了,但以前的解决方案不令人满意或对我不起作用。如果有兴趣,这是我的作品
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)
要获取源代码脚本的位置,可以使用utils::getSrcDirectory
或utils::getsrcdilename
。因此,可以通过以下方法将工作目录更改为当前文件的工作目录:
setwd(getSrcDirectory()[1])
如果您运行代码而不是源代码,那么这在RStudio中不起作用。为此,需要使用rstudioapi::getActiveDocumentContext
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
当然,第二种解决方案需要使用RStudio作为IDE
dirname(parent.frame(2)$ofile)
也不适合我,但以下(如中所建议的)在ubuntu 14.04中适合我
dirname(rstudioapi::getActiveDocumentContext()$path)
如果您在Linux上工作,可以尝试以下方法:
setwd(系统(“pwd”,intern=T))
它对我有用
dirname(rstudioapi::getActiveDocumentContext()$path)
对我来说是可行的,但是如果您不想使用rstudioapi,并且您不在项目中,您可以在路径中使用符号~。符号~表示默认的RStudio工作目录(至少在Windows上)
如果您的RStudio工作目录是“D:/Documents”,则setwd(“~/proyect1”)
与setwd(“D:/Documents/proyect1”)相同
设置后,可以导航到子目录:read.csv(“DATA/mydata.csv”)
。与读取.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)
#将工作目录设置为当前目录:
系统(“pwd=`pwd`;$pwd2>dummyfile.txt”)
dir如果使用UTF-8编码:
path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(dirname(path))
path对于,您可以自动将工作目录设置为脚本目录,如下所示:
library(rstudioapi)
# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path
setwd(dirname(current_path ))
print( getwd() )
这在运行或源文件时有效
您需要首先安装包rstudioapi。
请注意,我打印路径是为了100%确保我在正确的位置,但这是可选的。该包提供了here()
函数,该函数基于一些启发式返回项目根目录
这不是一个完美的解决方案,因为它找不到脚本的位置,但它满足了某些目的,所以我想把它放在这里。这里是另一种方法:
set2我已经尝试了上面的所有答案,其中大多数在某些情况下都失败了。并且依赖于RStudio,当从终端执行脚本时,它们中的大多数都不起作用
我已经为每个系统提出了一个通用的解决方案,它既可以从RStudio工作,也可以从终端脚本执行工作
窗户
用于UNIX系统(Linux、Macintosh等)
这可能是个骗局。请参见?setwd
?getwd
非重复,海报希望加载同一文件夹中的
.rdata文件,而不是源
,并将工作目录设置为源文件的路径。请确保RStudio不会做出这种假设。它的行为与我在计算机上描述的方式相同。我没有对RStudio首选项做任何特殊的操作。在Linux上没有这样做:)“通过文件关联启动时”是这里的关键条件。有些人可能通过终端中的快捷方式或命令启动Rstudio。您需要打开该文件,并将打开.R文件的默认值设置为Rstudio。如果先打开Rstudio(然后打开文件),它将无法按所述工作。通过文件关联,上述答案在windows和mac中有效(可能不是@nico指出的linux)
library(rstudioapi)
# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path
setwd(dirname(current_path ))
print( getwd() )
setwd(system("pwd", intern = TRUE))
setwd(shell("echo %cd%", intern = TRUE))