我在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
,我将获得所有相关性,但是我只想知道是否可以不输入任何参数并获得所有相关性?
有什么主意吗?
答案 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[@]}"