首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个目录运行R脚本

从另一个目录运行R脚本
EN

Stack Overflow用户
提问于 2015-05-15 16:12:41
回答 1查看 2.9K关注 0票数 1

下面是一个有几个脚本的例子

代码语言:javascript
复制
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,然后尝试运行脚本,我得到

代码语言:javascript
复制
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

我怎么才能让这个起作用?

EN

回答 1

Stack Overflow用户

发布于 2015-05-15 18:00:33

我不确定我是否正确地解决了你的问题。我假设您的脚本test.Rincl.R位于同一个文件夹中,然后使用其他文件夹中的Rscript运行test.Rtest.R应该知道test.R (因此是incl.R)存储在哪里,然后找到源incl.R

诀窍是,必须将脚本test.R的完整路径作为调用Rscript的参数。可以使用commandArgs获取这个参数,然后从它构造incl.R的路径:

代码语言:javascript
复制
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.R”。然后,可以在source中使用此路径。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30264144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档