gpt4 book ai didi

r - 在 LSF 中指定作业数组

转载 作者:行者123 更新时间:2023-12-01 13:47:52 24 4
gpt4 key购买 nike

我的目标是重复运行 R 脚本,每次使用一组不同参数。

为此,我一直在使用 bash 脚本通过循环输入文件将命令行参数传递给 R 脚本,其中每一行包含 7 个参数的不同组合。

输入文件如下所示:

10 food 0.00005 0.002 1 OBSERVED 0
10 food 0.00005 0.002 1 OBSERVED 240
10 food 0.00005 0.002 1 OBSERVED 480
10 food 0.00005 0.002 1 OBSERVED 720
10 food 0.00005 0.002 1 OBSERVED 960
10 food 0.00005 0.002 1 OBSERVED 1200

传递命令行参数的 R 脚本是这样开始的:

commandArgs(trailingOnly=FALSE)
A <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -6 )])
B <- commandArgs()[as.numeric(length(commandArgs()) -5 )]
C <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -4 )])
D <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -3 )])
E <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) -2 )])
F <- commandArgs()[as.numeric(length(commandArgs()) -1 )]
G <- as.numeric (commandArgs()[as.numeric(length(commandArgs()) )])

读取这些内容并调度 R 脚本的 bash 循环如下;

#!/bin/bash
N=0
cat Input.txt | while read LINE ; do
N=$((N+1))
echo "R --no-save < /home/trichard/Script.R" "$LINE" | bsub -N -q priority -R "select[model==Xeon5450]"
done

但是,问题是 Input.txt 中有数百万行,所以这种方法太慢了(它会阻止其他 LSF 用户提交他们自己的作业)。

那么,问题是,如何使用 LSF 数组执行上述操作?

最佳答案

主要技巧是从输入文件中提取第 n 行。假设你在一个类 Unix 系统上,你可以使用“sed”命令来做到这一点。这是一个例子:

N=$(wc -l < input.txt)
echo 'R --no-save -f Script.R --args $(sed "${LSB_JOBINDEX}q;d" input.txt)' |
bsub -J "R_Job[1-$N]" -N -q priority -R "select[model==Xeon5450]"

正确的参数引用有点棘手,但在这个例子中非常重要。

请注意,这使用 R“--args”选项来避免有关无法识别参数的警告消息。我还建议在 R 脚本中使用 commandArgs(trailingOnly=TRUE),这样您就只会看到感兴趣的参数。

关于r - 在 LSF 中指定作业数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34422491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com