欢迎光临散文网 会员登陆 & 注册

R脚本的传参

2023-04-14 11:07 作者:小云爱生信  | 我要投稿

尔云间  一个专门做科研的团队


原创  小果  生信果   关注我们


今天小果为大家带来的是R脚本的传参。一个R脚本要在linux上运行时不可避免的要使用到参数传递这一功能。坦率得讲,R语言自带的commandArgs()函数完全可以胜任大多数的参数传递任务,但是为了更方便观察更推荐使用getopt包。


函数commandArgs()的使用:

例如,脚本文件名为foot.R, 可以这样写:


arg=commandArgs(T)
input1<-arg[1]
Input2<-arg[2]
...

函数中有一个布尔型参数TRUE,这个意思是让函数可以将接收到的所有输入依次存储进arg列表中。那么参数是如何传入脚本的呢?

在使用commandArgs()函数时,参数是没有名字的,只需:


Rscript  foot.R  1  2

即可将1与2传入脚本,按照顺序1将被存入arg[1],2将被存入arg[2]那么如果检验输入参数的数目呢?可以这样写:

If(length(arg)!=2){
cat(“you shoudl in put 1. input2 2.input2”)
break
}

但是,这种写法有两个弊端:

一是如果你需要的是一个字符串1,那么很幸运直接用就可以。但如果你需要的是一个数值型的1,那你是无法直接传入的,需要在脚本中转化才行,很不方便。

二是如果我输入了,但是输错了,你需要的是数字,但我输入的是一个苹果和一个栗子,函数会照单全收全部吃进arg列表中,这也会带来麻烦。所以,我们有一个单独用来传参的getopt包可以使用,更方便。


library(getopt)

首先创建一个列数为5的矩阵。第一列参数名;第二列参数名简写;第三列0,1或2依次表示不接收变量,可以接收变量与必须接受变量;第四列为变量的类型又logical、integer、double、complex、character、numeric可供选择;第5列为变量的说明。而矩阵的每一行就是一个参数。


spec <- matrix(
c("expr",  "e", 1, "character", "This is path of gene expr!",
"help",   "h", 0, "logical",  "This is Help!"),
byrow=TRUE, ncol=5)
opt <- getopt(spec=spec)

这里的opt存储了输入的全部的参数,若要调用只需opt$参数名即可


if( !is.null(opt$help) || is.null(opt$expr) ){
cat(paste(getopt(spec=spec, usage = T), "\n"))
quit()
}

这一个检验参数的步骤,如果想偷懒的话,蓝字不用变,只要根据自己的参数数量对is.null部分进行增改就可以。


使用时只需这样写命令:Rscript foot.R --expr 文件的路径 或Rscript foot.R  -e 文件的路径。

今天的分享就到这里,小果祝大家生活愉快。



推荐阅读


关注小果,小果将会持续为你带来更多生信干货哦。

“生信果”,生信入门、R语言、生信图解读与绘制、软件操作、代码复现、生信硬核知识技能、服务器、生物信息学的教程,以及基于R的分析和可视化等原创内容,一起见证小白和大佬的成长。


R脚本的传参的评论 (共 条)

分享到微博请遵守国家法律