我能够从IDE(Rstudio)中获取R脚本,但不能从命令行调用中获取。有没有办法在不提供完整路径的情况下做到这一点?
我想要源的文件位于父目录中。
这有效:
source('../myfile.R') #in a call from Rstudio
然而,这并不是:
> Rscript filethatsources_myfile.R
Error in file(filename, "r", encoding = encoding) :
cannot open the connection
Calls: source -> file
In addition: Warning message:
In file(filename, "r", encoding = encoding) :
cannot open file '../myfile.R': No such file or directory
Execution halted
这看起来应该很简单,但是......
编辑:我使用GNU bash,版本3.2.53(1)-release(x86_64-apple-darwin13)
答案 0 :(得分:10)
在R中,相对文件位置始终相对于当前工作目录。您可以像这样显式设置工作目录:
setwd("~/some/location")
设置完成后,您可以获取相对于当前工作目录的源文件。
source("some_script.R") # In this directory
source("../another_script.R") # In the parent directory
source("folder/stuff.R") # In a child directory
不确定您当前的工作目录是什么?您可以通过提交getwd()
进行检查。
如果源文件位于(例如)父目录但引用相对于其位置的文件,该怎么办?使用chdir=
中的source
选项:
source("../another_script.R", chdir = TRUE)
这会在源评估期间临时将工作目录更改为包含源文件的目录。完成后,您的工作目录将恢复为运行source
之前的状态。