这是一个带有几个脚本的例子
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
如何让它发挥作用?
答案 0 :(得分:1)
我不确定我是否正确地解决了你的问题。我假设您在相同的文件夹中有脚本test.R
和incl.R
,然后使用其他文件夹中的test.R
运行Rscript
。 test.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
中使用此路径。