如何在slurm命令行中包含参数?

时间:2019-05-09 18:57:11

标签: r arguments slurm

我在data.frame(1000行和3列)上工作。我在第三列(对应于相关性)上使用了一个参数来选择比我的参数高或低的值。

Df<-get(load("test.RData"))

library(optparse)

args <- commandArgs(TRUE)

#get options 

option_list = list(
        make_option(c("-t", "--threshold"), type="double", default=NULL));

opt_parser= OptionParser(usage = "Usage: %prog -f [FILE]",option_list=option_list, description= "Description:")

opt = parse_args(opt_parser)

library(dplyr)

Df=Df%>%filter(corr>opt$threshold)

save(Df, file="corr.Rda")

然后,我想使用Slurm运行此代码。

test.sh

#!/bin/bash
#SBATCH -o job-%A_%a_task.out
#SBATCH --job-name=cor
#SBATCH --partition=normal
#SBATCH --time=1-00:00:00
#SBATCH --mem=1G  
#SBATCH --cpus-per-task=2


#Set up whatever package we need to run with

module load gcc/8.1.0 openblas/0.3.3 R

export FILENAME=~/test.R

Rscript $FILENAME --threshold $1

我的问题是这个:我是否需要在sbatch命令行上添加一个参数?例如,如果我运行sbatch test.sh 0.7,它将正常工作,并且相关系数> 0.7。但是,如果我不想提出任何论点,那么在获得所有相关性的目标中,我将运行sbatch test.sh,我得到

  Error in getopt(spec = spec, opt = args) : 
  flag "threshold" requires an argument

编辑:如果我运行sbatch test.sh -1,我将获得所有相关性,但是我只想知道是否可以不输入任何参数并获得所有相关性?

有什么主意吗?

1 个答案:

答案 0 :(得分:1)

您正在使用

Rscript $FILENAME --threshold $1

输入0.7之类的参数时,它将替换为

Rscript $FILENAME --threshold 0.7

但是当您不提供任何参数时,您将得到:

Rscript $FILENAME --threshold

并且如消息所示,--threshold需要一个参数。

您可以测试$1的存在,并仅在需要时传递--threshold参数:

threshold_args=()
if [ -n "$1" ]
then
    threshold_args+=("--threshold" "$1")
fi
Rscript $FILENAME "${threshold_args[@]}"