我的问题:
我有一个使用配置文件的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)
我的问题
- Rscript或编译器会提供比我目前使用的bash更健壮的方法吗
- 在什么条件下,一个比另一个更合适(有哪些优点和缺点)
- 在这两种情况下,我将如何传递配置文件
到目前为止我做了什么
除了提出上面描述的bash脚本rscript.sh
之外,我还阅读了Rscript
和编译器的教程和一些文档,但我不清楚在这些上下文中,一个是否比另一个更受欢迎。此外,还不清楚在任何一种上下文中传递配置文件的最佳方式。
这个问题与其他问题有关,例如,从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