以前由于R命令行传参不友好,经常嵌套在其他程序语言(如Perl/Python)中来进行传参,但现在也陆续有一些方式来实现R的传参了,这里简单罗列下。
方法一
最传统的方法就是使用系统自带的commandArgs函数,直接按位置顺序传入。这种方法简短、快速,适合个人使用。一般也能满足我们的需求了,但对于其他用户是不够友好的。
方法二
使用getopt包,参数形式为:
说明:
spec是一个4-5列的矩阵,里面包括了参数信息,前四列是必须的,第五列可选。
- 第一列:参数的
longname,多个字符。 - 第二列:参数的
shortname,一个字符。 - 第三列:参数是必须的,还是可选的,数字:
0代表不接参数 ;1代表必须有参数;2代表参数可选。 - 第四列:参数的类型。
logical;integer;double;complex;character;numeric - 第五列:注释信息,可选。
应用示例:
以我的数据作为例子,部分脚本如下:
命令行运行:
帮助
运行
方法三
使用GetoptLong包。这是由大佬Zuguang Gu开发(就是开发ComplexHeatmap
和circlize的那位),借用了Perl GetoptLong模块的传参形式,用法也几乎一样。
可以看下他提供的例子:
https:///jokergoo/GetoptLonghttps://www.rdocumentation.org/packages/GetoptLong/versions/0.1.7/topics/GetoptLong
以我自己的数据为例。部分R脚本如下:
命令行运行会自动生成帮助文档。
长参传入:
短参传入:
如果所有参数的首字母不同,用首字母即可;如果有些参数名称近似,则最好用多个字母,否则会辨别不了。
比如我这里的cog和cazy参数,首字母相同,明显不能都用c,我把其中一个改成大写的C也辨别不了;其中一个用一个首字母,另一个用两个首字母也不行。用co和ca就可以了。所以参数的名字一定要明显区分开来。
这个就可以了
Ref:https://www.rdocumentation.org/packages/GetoptLong/versions/0.1.7/topics/GetoptLong
作者:Bioinfarmer,若要及时了解动态信息,请关注同名微信公众号:Bioinfarmer。
















