2

我的问题:

我有一个myscript.R使用配置文件的 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之外,我还阅读了有关Rscriptcompiler的教程和一些文档,但我不清楚这些是否是一种优于另一种的上下文。此外,尚不清楚在任一上下文中传递配置文件的最佳方式。

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

4

2 回答 2

5

和什么compiler有什么关系?它将R 代码编译为 R 解释器的字节码,因此它可能不会做你怀疑的事情。

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

实际上,我们为此编写脚本的目的更明确地编写 littler ,而我的“使用 R 的 HPC 简介”讲座(请参阅演示页面)实际上有将此类脚本提交给slurm 调度程序/资源管理器的示例(因为我从未访问过)。qsub

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

于 2012-08-29T17:58:33.963 回答
1

根据Dirk 的回答和另一个问题Parsing command line arguments in R scripts,我提出了以下解决方案,使我能够创建一个接受配置文件名称的 R 可执行文件

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

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

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

./newrscript.R config.xml
于 2012-08-29T20:49:43.337 回答