我正在学习R的一些教程,每个R代码都在特定文件夹中。这里有数据文件和其他文件。 我想打开.r
文件并对其进行源引用,以便我不必像下面显示的那样更改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。
getActiveDocumentContext()
时,路径报告为''
。但是,如果在编辑器部分运行代码行,则会按预期执行。这可能可以解决@Andru的评论。 - Megatronrstudioapi
包版本。尝试更新到最新版本。 - Richie Cottonsetwd(getSrcDirectory()[1])
对我不起作用。使用 rstudioapi
解决方案可以解决问题。 - filups21utils::getSrcDirectory()
。在脚本中要做的第一件事是定义一个虚拟函数,然后使用该函数作为参数调用utils::getSrcDirectory()
。例如:dummy = function() {}; scriptdir = utils::getSrcDirectory(dummy); rm(dummy)
。 - mastropi我知道这个问题已经过时了,但我也在寻找解决方案,而且Google将其排在首位:
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
把它放到文件中的某个地方(尽管最好放在开头),这样wd就根据那个文件改变了。
根据评论,这种方法不一定适用于每个平台(似乎Windows可以,Linux/Mac则要看情况)。 请记住,此解决方案是用于'获取'文件,而不一定是用于运行该文件中的代码块。
dirname(parent.frame(2)$ofile)
函数出错:
预期的是一个字符向量参数。Error in dirname(parent.frame(2)$ofile) : a character vector argument expected
- tumultous_rooster对于RStudio,您可以使用rstudioapi自动将工作目录设置为脚本所在的目录,方法如下:
library(rstudioapi)
# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path
setwd(dirname(current_path ))
print( getwd() )
当你运行或源代码文件时,这将起作用。
你需要首先安装rstudioapi包。 请注意,我打印路径以确保我在正确的位置,但这是可选的。
dirname(rstudioapi::getActiveDocumentContext()$path)
对我来说可以工作,但如果你不想使用rstudioapi并且没有在项目中,你可以在路径中使用符号~。符号~指的是默认的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")
相同。我知道这是一个旧的帖子,但我遇到了类似的问题,需要设置工作目录,但无法找到任何解决方案来解决我的问题。以下是我用到的方法,以防其他人在以后也会遇到同样的问题:
# 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,因此无法知道我最终会在哪个目录中(作业分配一个数字和计算节点)。这对我很有用。
这个答案可以帮助您:
script.dir <- dirname(sys.frame(1)$ofile)
setwd(system("pwd", intern = T) )
这对我很有效。pwd
在 PowerShell 中也可以使用(它目前被认为是 Windows 上的默认 shell),其中它是 Get-Location
的别名。 - BroVicdirname(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])
here
包提供了 here()
函数,根据一些启发式方法返回您的项目根目录。
虽然它不能完美解决找到脚本位置的问题,但对于某些目的来说足以满足需求。因此我想在这里分享这个包。
here::set_here()
来获取当前脚本的位置。 - BroVichere::here()
返回的是项目的工作目录,而不是脚本的位置。而this.path::here()
则不受项目设置的影响,始终能够正确返回脚本的位置。 - undefinedsetwd(this.path::here())
适用于引用的脚本和“活动”的脚本。
install.packages("this.path")
命令之前,你需要先安装这个软件包。 - giacomo
?setwd
和?getwd
。 - Brandon BertelsencommandArgs(trailingOnly = TRUE)
函数获取当前 R 脚本的路径,然后用dirname()
函数提取出该文件所在的目录路径。例如,以下代码将输出当前 R 脚本的路径:r_script_path <- commandArgs(trailingOnly = TRUE)[1] r_script_dir <- dirname(r_script_path) print(r_script_dir)
- nico