前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言Rscript脚本-参数设置

R语言Rscript脚本-参数设置

原创
作者头像
十维农场主
发布2023-05-17 17:04:06
8950
发布2023-05-17 17:04:06
举报

方法一:commandArgs()方法

  • 优点:Rbase自带,简单方便
  • 缺点:功能不够强大,也不能设置缺省值(但是可以在脚本中通过长度判断设置可缺省最后的连续几个参数,如下所示:如果总参数为5个时允许缺省后3个参数)。
  1. 直接通过Rsript xx.R arg1 arg2 arg3 arg4 arg5运行脚本。这种方法只能设置位置参数,各参数位置固定,不能写乱,所以如果参数简单且数量少,可以用此种方法。
  2. 如果不设置参数控制,直接在脚本第一行写一句Args <- commandArgs(T)即可,然后直接Rscript xx.R a1 a2运行脚本,参数a1,a2的值会存储在Args中,脚本中使用Args[[1]], Args[[2]]获取它们即可。
# 示例脚本(当阐述格式为5个或者2个时成功运行脚本,否则报错并提示错误信息)
# 当想要设置五个参数时使用下列代码:
Args <- commandArgs(T)
# --------------------------------如果简单应用,可以直接掠过下面代码,不需要使用,只要上面一句即可。
if ( length(Args) %in% c(0,1,3,4,6:100)) {
# 即:当参数为个数为0,1,3,4,6:100时报错,并提示以下帮助信息
    stop({
         cat("Error: Argu error\n Please use args correctly\nHelp:\n Rscrpit this.R [outdir] [method] [pvalue] [fdr] [log2fc] \n")
         cat(" --------------------------------------------------------\n")
         cat(" 需要设置[outdir] [method] 2个或者全部5个参数, 注:各参数位置不能错!\n")
         cat("   [outdir] : 输出结果文件夹, 如果文件夹下原本有内容会覆盖文件\n")
         cat("   [method] : 差异分析方法, 取值为0, 1, 2, 3, 4。如为芯片数据, 只能设置为4\n")
         cat("                  0: 全部方法(默认) 1: edgeR; 2: Deseq2 3: Limma.voom 4: Limma\n")
         cat("   [pvale] [fdr] [log2fc] : 差异分析阈值, 默认为p=0.05, fdr=0.1, log2fc=1\n")
    })
} else if (length(Args) == 2) { 
# 允许参数个数为2个,当阐述个数为2个时,后面三项参数使用以下默认值
        p = 0.05
        fdr = 0.1
        log2fc = 1
} 

cat("Hello, World!", Args[[1]], Args[[2]], p)
cat("Hello, World!", Args[[1]], Args[[2]],  Args[[3]], Args[[4]],  Args[[5]])
  1. 终端中运行Rscript xx.R arg1 arg2 arg3 arg4 arg5

方法二:optparse包方法

通过加载optparse包进行参数设置,这种方法类似与python中argparse方法设置参数,如果不是简单的一两个参数推荐这种方法调用参数。

  • 这种方法,可以设置默认值,指定参数数据类型,帮助信息。
library(optparse) # 需要用户自己事先安装
option_list <- list(
# -n 为短参数 --name为参数调用时的名称,type:数据类型, action默认store就行,其他顾名思义。
  make_option(c("-n", "--name"), type = "character", default = NULL,
              action = "store", help = "项目名称,必须设置,最好简短且有意义"
  ),
  make_option(c("-t", "--thread"), type = "integer", default = 4,
              action = "store", help = "多线程, 默认为4, 请根据自己计算机资源设置"
  ),
  make_option(c("-m", "--method"), type = "integer", default = 2,
              action = "store", 
              help = "差异分析方法, 取值为1, 2(默认), 1:egdeR, 2:额外进行DESeq2 + Limma-voom"
  ),
    make_option(c("-p", "--pvalue"), type = "numeric", default = 0.05,
              action = "store", help = "差异基因筛选阈值p, 默认0.05"
  ),
    make_option(c("-q", "--fdr"), type = "numeric", default = NULL,
              action = "store", help = "差异基因筛选阈值fdr, 默认NULL"
  ),
    make_option("--fc", type = "numeric", default = 2,
              action = "store", help = "差异基因筛选阈值foldchange, 默认2,即为logfc=1"
  )
  )
# 解析参数
opt = parse_args(OptionParser(option_list = option_list, 
                 usage = "此脚本为RNAseq差异分析流程!",
                 description = "格式: Rscript %prog [options]\n将清洗好的eset及group文件放在脚本运行目录下的data文件夹中"))

if( is.null(opt$name) ) { stop({ 
    cat("Error:\nthe argu -n[--name] must be set!\nPlease use Rscript xx.R -h to get help info\n") 
    }) }
  • 终端运行 Rscript xx.R -n yyds -t 8 -m 1 -p 0.05 -q 0.1 --fc 4
  • 这种方法使用参数不用考虑参数位置,缺省默认值设置也很灵活,复杂脚本参数应该使用这种方法。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一:commandArgs()方法
  • 方法二:optparse包方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档