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

问题描述 投票:0回答:2

我的问题:

我有一个 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
compiler 的教程和一些文档,但我不清楚这些是否是其中的上下文会优先于其他。此外,尚不清楚在任一上下文中传递配置文件的最佳方法。

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

r rscript
2个回答
5
投票

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

对于脚本编写,请使用

Rscript
(随处可用)或 littler(早于 Rscript)。

我们实际上是为了这个脚本目的而明确编写了 littler ,并且我的“R HPC 简介”演讲(请参阅演示页面)实际上有将此类脚本提交给 slurm 调度程序/资源管理器 的示例(如我从来没有访问过qsub

)。

这里还有许多其他与

Rscript

 和命令行解析相关的问题。这应该可以帮助您开始。


1
投票
根据

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

OP中的

myscript.sh

rscript.R
可以合并为以下
newrscript.R


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

然后可以从命令行调用它,以与

myscript.sh

的原始用法非常相似的方式传递配置文件的名称:

./newrscript.R config.xml
    
© www.soinside.com 2019 - 2024. All rights reserved.