我的目标是重复运行一个 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 数组来完成上述操作?