R命令将工作目录设置为源文件位置

我正在编写一些R教程。每个R代码都包含在一个特定的文件夹中。 那里有数据文件和其他文件。 我想打开.r文件并将其源代码,以便我不必在Rstudio中更改工作目录,如下所示:

在这里输入图像说明

有没有办法在R中自动指定我的工作目录

我知道这个问题已经过时了,但是我也在为这个问题寻找一个解决scheme,而Google在最上面列出了这个问题:

 this.dir <- dirname(parent.frame(2)$ofile) setwd(this.dir) 

把它放在文件的某个地方(尽pipe最好是开始),这样wd就会根据这个文件而改变。

另请参阅获取`source`d文件的文件名和path

要获取脚本的位置,可以使用utils::getSrcDirectoryutils::getSrcFilename 。 因此,将工作目录更改为当前文件的工作目录可以使用:

 setwd(getSrcDirectory()[1]) 

如果您运行代码而不是代码,这在RStudio中不起作用。 为此,您需要使用rstudioapi::getActiveDocumentContext

 setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) 

第二种解决scheme要求您使用RStudio作为您的IDE,当然。

解决scheme

 dirname(parent.frame(2)$ofile) 

不为我工作。

我正在使用蛮力algorithm,但工作原理:

 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) 

search目录时更容易:

 Dirname <- "subdir_name" Dirs <- list.dirs(path=file.path("~"),recursive=T) dir_wd <- names(unlist(sapply(Dirs,grep,pattern=Dirname))[1]) 

这个答案可以帮助:

 script.dir <- dirname(sys.frame(1)$ofile) 

注意:脚本必须来源为了返回正确的path

我发现它在: https : //support.rstudio.com/hc/communities/public/questions/200895567-can-user-obtain-the-path-of-current-Project-s-directory-

BumbleBee的答案(与parent.frame而不是sys.frame)没有工作给我,我总是得到一个错误。

 dirname(rstudioapi::getActiveDocumentContext()$path) 

为我工作,但如果你不想使用rstudioapi,而你不是在一个proyect,你可以使用符号〜在你的path。 符号〜表示默认的RStudio工作目录(至less在Windows上)。

RStudio选项

如果您的RStudio工作目录是“D:/ Documents”, setwd("~/proyect1")与setwd(“D:/ Documents / proyect1”)相同。

一旦你设置了,你可以导航到一个子目录: read.csv("DATA/mydata.csv") 。 与read.csv("D:/Documents/proyect1/DATA/mydata.csv")

如果要导航到父文件夹,可以使用"../" 。 例如:与read.csv("D:/Documents/oldata/DATA/mydata.csv")相同的read.csv("../olddata/DATA/mydata.csv") read.csv("D:/Documents/oldata/DATA/mydata.csv")

这是我编写脚本的最好方式,不pipe你用的是什么电脑。

我知道这已经过时了,但是我不能让以前的答案工作的非常满意,所以我想提供我的方法,以防其他人遇到同样的错误,在评论中提到的BumbleBee的答案。

矿是基于一个简单的系统命令。 所有你喂的function是你的脚本的名字:

 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" 。 希望这可以帮助其他任何可能卡住的人。

我只是在寻找解决这个问题的办法,来到这个页面。 我知道它的过时,但以前的解决scheme不满意或不适合我。 这是我的工作,如果感兴趣。

 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) 

我意识到这是一个古老的线程,但我有一个类似的问题,需要设置工作目录,并不能得到任何解决scheme为我工作。 这是什么工作,以防其他人稍后绊倒这个:

 # 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读取该文件。 其余的只是清理打印到文件中的内容,以便只留下目录path。

我需要在一个集群上运行R,所以没有办法知道最终的目录(作业被分配了一个数字和一个计算节点)。 这为我做了诡计。

如果你在Linux上工作,你可以试试这个:

setwd(system("pwd", intern = T) )

这个对我有用。

大多数graphics用户界面假设,如果你在一个目录下并“打开”,双击或以其他方式尝试执行一个.R文件,除非另有说明,否则它所在的目录将成为工作目录。 Mac GUI提供了一种方法来更改默认行为,该行为在您在运行会话中设置的“首选项”面板中可更改,并在下次“启动”时生效。 你也应该看看:

 ?Startup 

RStudio文档说:

“通过文件关联启动时,RStudio会自动将工作目录设置为打开文件的目录。” RStudio的默认设置是注册为.R文件的处理程序,但是也提到了可以为RStudio设置.Rdata和.R扩展名的默认“关联”。 在Linux上是否具有“处理器”状态和“关联”状态是相同的,我不能说。

http://www.rstudio.com/ide/docs/using/workspaces

 dirname(parent.frame(2)$ofile) 

也不适用于我,但下面(如https://stackoverflow.com/a/35842176/992088build议)适用于我在Ubuntu 14.04

 dirname(rstudioapi::getActiveDocumentContext()$path) 

如果你使用UTF-8编码:

 path <- rstudioapi::getActiveDocumentContext()$path Encoding(path) <- "UTF-8" setwd(dirname(path)) 

如果尚未完成,则需要安装软件包rstudioapi。