如何向作业调度程序提交R脚本:bash、编译器、Rscript或其他



我的问题:

我有一个使用配置文件的R脚本myscript.R,例如config.xml,向作业调度程序提交此类脚本的最佳方式是什么(例如,使用qsub)?

我希望能够以与使用相同的方式使用脚本和文件,例如嵌入bash脚本中的C或Fortran可执行文件。

我目前如何使用FORTRAN:

下面是一个我在编译的Fortran可执行文件fex中使用的方法示例,类似于下面我将调用的fscript.sh:

!#/bin/bash/
mpirun [arguments] "fex" -f $1

上面的fscript.sh可以发送到一个集群,其中包含读取配置文件的指令,如下所示:

qsub [arguments] fscript.sh 1 config.xml

我目前如何以类似的方式使用R:

为了以类似的方式运行R,我使用了一个bash脚本rscript.sh

#!/bin/bash
CONFIG=$1
env $CONFIG R --vanilla < myscript.R

这可以在命令行运行,例如

qsub [arguments] rscript.sh config.xml

其中rscript.R包含类似的内容

library(XML)
config <- Sys.getenv("CONFIG")
config <- xmlList(xmlParse(config.xml))
myfunction(config)

我的问题

  1. Rscript或编译器会提供比我目前使用的bash更健壮的方法吗
  2. 在什么条件下,一个比另一个更合适(有哪些优点和缺点)
  3. 在这两种情况下,我将如何传递配置文件

到目前为止我做了什么

除了提出上面描述的bash脚本rscript.sh之外,我还阅读了Rscript和编译器的教程和一些文档,但我不清楚在这些上下文中,一个是否比另一个更受欢迎。此外,还不清楚在任何一种上下文中传递配置文件的最佳方式。

这个问题与其他问题有关,例如,从R程序创建可执行文件的方法是什么,R编译器存在吗?。然而,我不认为这对于使用编译后的代码是必要的。

compiler与任何事物有什么关系?它将R代码编译为R解释器的字节码,因此它可能不会执行您怀疑的操作。

对于脚本,请使用Rscript(随处可见)或littler(早于Rscript)。

我们实际上是为了这个脚本目的而明确地写了littler,我的"带R的HPC简介"演讲(见演示页面)实际上有向slurm调度器/资源管理器提交此类脚本的例子(因为我从未访问过qsub)。

这里还有许多其他问题与Rscript和命令行解析有关。这应该会让你开始。

根据Dirk的回答和另一个问题,分析R脚本中的命令行参数,我提出了以下解决方案,使我能够创建一个接受配置文件名称的R可执行文件

来自OP的myscript.shrscript.R可以合并为以下newrscript.R

#!/usr/bin/Rscript
config.file <- commandArgs(trailingOnly = TRUE)
config <- xmlParse(config.file)
myfunction(config)

然后可以从命令行调用,以与myscript.sh:最初使用的方式非常相似的方式传递配置文件的名称

./newrscript.R config.xml

相关内容

  • 没有找到相关文章

最新更新