我有一个 R 脚本
myscript.R
,它使用配置文件,例如config.xml
,将此类脚本提交给作业调度程序的最佳方法是什么(例如,使用 qsub)?
我希望能够以与我使用相同的方式使用脚本和文件,例如嵌入 bash 脚本中的 C 或 Fortran 可执行文件。
这是我使用已编译的 Fortran 可执行文件的方法示例
fex
,如下所示,我将其称为 fscript.sh
:
!#/bin/bash/
mpirun [arguments] "fex" -f $1
上面的
fscript.sh
可以发送到集群,并包含读取配置文件的指令,如下所示:
qsub [arguments] fscript.sh 1 config.xml
要以类似的方式运行 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)
除了提出上述 bash 脚本
rscript.sh
之外,我还阅读了 Rscript
和 compiler 的教程和一些文档,但我不清楚这些是否是其中的上下文会优先于其他。此外,尚不清楚在任一上下文中传递配置文件的最佳方法。
这个问题与其他问题相关,例如,从 R 程序创建可执行文件的方法是什么,R 编译器存在吗?。但是,我认为使用编译代码并不是必需的。
compiler
有什么关系? 它将 R 代码编译为 R 解释器的字节码,因此它可能不会执行您怀疑的操作。
对于脚本编写,请使用
Rscript
(随处可用)或 littler(早于 Rscript)。
我们实际上是为了这个脚本目的而明确编写了 littler ,并且我的“R HPC 简介”演讲(请参阅演示页面)实际上有将此类脚本提交给 slurm 调度程序/资源管理器 的示例(如我从来没有访问过qsub
)。这里还有许多其他与
Rscript
和命令行解析相关的问题。这应该可以帮助您开始。
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