从另一个目录运行R脚本

时间:2015-05-15 16:12:41

标签: r rscript

这是一个带有几个脚本的例子

test.R ==>
source("incl.R", chdir=TRUE)
print("test.R - main script")

incl.R ==>
print("incl.R - included")

它们都在同一目录中。当我使用Rscript --vanilla test.R从该目录运行它时,它工作正常。我想创建多个子目录(run1,run2,run3,...)并为不同的参数值运行我的原始脚本。假设我cd run1然后尝试运行脚本,我得

C:\Downloads\scripts\run1>Rscript --vanilla ..\test.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 'incl.R': No such file or directory
Execution halted

如何让它发挥作用?

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确地解决了你的问题。我假设您在相同的文件夹中有脚本test.Rincl.R,然后使用其他文件夹中的test.R运行Rscripttest.R应该确定test.R(以及incl.R)的存储位置,然后来源incl.R

诀窍在于您必须将脚本test.R的完整路径作为Rscript调用的参数。可以使用commandArgs获取此参数,然后从中构建incl.R的路径:

args <- commandArgs(trailingOnly=FALSE)
file.arg <- grep("--file=",args,value=TRUE)
incl.path <- gsub("--file=(.*)test.R","\\1incl.R",file.arg)
source(incl.path,chdir=TRUE)

在问题的示例中,您可以通过Rscript --vanilla ..\test.R调用脚本。 args将是一个包含元素“--file = .. / test.R”的字符向量。使用grep我抓住此元素,然后使用gsub从中获取路径“../incl.R”。然后可以在source中使用此路径。