R命令将工作目录设置为源文件位置
我正在编写一些R教程。每个R代码都包含在一个特定的文件夹中。 那里有数据文件和其他文件。 我想打开.r
文件并将其源代码,以便我不必在Rstudio中更改工作目录,如下所示:
有没有办法在R中自动指定我的工作目录
我知道这个问题已经过时了,但是我也在为这个问题寻找一个解决scheme,而Google在最上面列出了这个问题:
this.dir <- dirname(parent.frame(2)$ofile) setwd(this.dir)
把它放在文件的某个地方(尽pipe最好是开始),这样wd就会根据这个文件而改变。
另请参阅获取`source`d文件的文件名和path
要获取脚本的位置,可以使用utils::getSrcDirectory
或utils::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工作目录是“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上是否具有“处理器”状态和“关联”状态是相同的,我不能说。
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。