R 包 optparse 之命令行参数传递
对于经常与 Linux 打交道的生物信息分析童鞋们,我们今天分享一下怎么在命令行下通过传递参数(类似perl、python) 的方式执行 R 脚本。
一般来说,命令行下使用 Rscript 执行 R 脚本,需要下面几方面信息:
一个输入的文件名(文件通常为 text 文本,包含了用于 R 处理的输入数据信息)
一个可选的附加参数(如,输出的文件名:使用者不提供的话,通过程序指定默认值)
R 的方式接收参数
这种方式最常用的方法就是使用 commandArgs 函数。例如我们创建一个 testScript-1.R 的 R 程序:
#!/usr/bin/env Rscript
args = commandArgs(trailingOnly=TRUE)
## test if there is at least one argument: if not, return an error
if (length(args)==0) {
stop("At least one argument must be supplied (input file).n", call.=FALSE)
} else if (length(args)==1) {
# default output file
args[2] = "out.txt"
}
## program ...
df = read.table(args[1], header=TRUE)
df_out = t(df)
write.table(df_out, file=args[2], row.names=TRUE, col.name=FALSE)
这样,我们就可以在命令行下执行 testScript-1.R:
$ Rscript --vanilla testScript-1.R iris.txt out.txt
或者:
$ Rscript --vanilla testScript-1.R iris.txt
args = commandArgs(trailingOnly=TRUE),运行会产生一个字符串向量 args,该向量包含了 iris.txt 和 out.txt 两项信息。
test 部分为缺失以及需要指定的默认值处理。
program 部分为 testScript-1.R 接收参数后的程序处理:把输入文件行列转置,最后把转置后的结果保存到 out.txt。
然而,当我们不输入任何文件参数时:
$ Rscript --vanilla testScript-1.R
Error: At least one argument must be supplied (input file).
Execution halted
Python 的方式接收参数
这是我们今天要讲的重点:利用 R optparse 包在命令行传递参数。optparse 主要包含了 下面几个功能:
make_option,用于选项声明,包括 flags, types, default values 以及 help messages。
OptionParser,用于读取传递给 R 脚本的参数。
parse_args,用于根据 make_option 的声明对 OptionParser 传递的参数进行解析。
下面,我们以创建一个名字为 testScript-2.R 传递参数程序为例,对 optparse 的使用进行详细说明。
创建 testScript-2.R,利用 optparse 定义参数
#!/usr/bin/env Rscript
library("optparse")
option_list = list(
make_option(c("-f", "--file"), type="character", default=NULL, help="dataset file name", metavar="character"),
make_option(c("-o", "--out"), type="character", default="out.txt", help="output file name [default = %default]", metavar="character")
);
opt_parser = OptionParser(option_list=option_list);
opt = parse_args(opt_parser);
这个程序会产生一个 opt 的列表,它包含了 option_list 自定义排序的所有参数,我们通过 opt$file、opt$out 就能使用具体的参数。
定义空参数异常
if (is.null(opt$file)){
print_help(opt_parser)
stop("At least one argument must be supplied (input file).", call.=FALSE)
}
print_help 会打印该选项在 option_list 中的帮助信息。
程序处理
## program ...
df = read.table(opt$file, header=TRUE)
df_out = t(df)
write.table(df_out, file=opt$out, row.names=TRUE, col.name=FALSE)
print_help 会打印该选项在 option_list 中的帮助信息。
程序执行
在命令行下,我们执行:

或者:

最后,完整命令行下执行 testScript-2.R 如下:
$ Rscript --vanilla testScript-2.R -f iris.txt
# 或者:
$ Rscript --vanilla testScript-2.R -f iris.txt -o out.txt
ok,今天就介绍到这里。optparse 更多详细的信息,请参考:
https://cran.r-project.org/web/packages/optparse/index.html
https://cran.r-project.org/web/packages/optparse/optparse.pdf
https://cran.r-project.org/web/packages/optparse/vignettes/optparse.html
本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
R 包 optparse 之命令行参数传递的更多相关文章
- python3的命令行参数传递
#coding:utf-8#命令行参数传递,例如输入: python <文件名>.py -help#这个结果就会打印help#sys.argv[0]代表"文件名",第一 ...
- Java带包结构调用命令行运行编译
原文: https://www.toutiao.com/i6491809562037846542/ 带包结构调用命令行运行编译. 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 分 ...
- [R] 如何在Linux命令行进行参数传入?
以前由于R命令行传参不友好,经常嵌套在其他程序语言(如Perl/Python)中来进行传参,但现在也陆续有一些方式来实现R的传参了,这里简单罗列下. 方法一 最传统的方法就是使用系统自带的comman ...
- 手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行
新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都 ...
- 浅谈optparse 解析命令行参数库
使用的背景 在工作中我们经常要制定运行脚本的一些参数,因为有些东西是随着我么需求要改变的,所以在为们写程序的时候就一定不能把写死,这样我们就要设置参数 在python中我们可以通过sys 模板的arg ...
- Swift 包管理器命令行使用
1.swift -version //swift 版本查看 2.swift build //swift工程编译 3.swift package generate-xcodeproj //创建Xcode ...
- python命令行参数传递JSON串
有点小问题,一是传递的双引号被自动删除了,但是如果用单引号,JSON解析又不认. 所以,最后的方案是,传递单引号,但程序处理时做一个替换,替换成单引号.
- Go命令行参数解析flag包
go语言提供的flag包可以解析命令行的参数,代码: package main import ( "flag" "fmt" ) func main() { // ...
- [Go] 命令行参数解析包(flag 包)使用详解
Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag // 只支持bool类型 cmd -flag=xxx cmd -flag ...
- IDEA 直接点击运行执行正常,命令行下面执行Jar包出现部分乱码的情况。
解决方案如上: 有个Springboot项目为了测试方便,模型类用中文作为字段属性,封装成Odata格式,在通过Springboot发布并打成jar包. 通过命令行启动jar包里面的Springweb ...
随机推荐
- RPC 与 Restful 的区别
PRC 是一种技术的代名词,HTTP 是一种协议,RPC 可以通过 HTTP 来实现,也可以通过 Socket 自己实现一套协议来实现.所以谈论为什么用 RPC 不用 HTTP 是无意义的.但我们习惯 ...
- Golang数据结构
数据类型 不同类型的内存样式图 append,切片添加元素 清空切片的3种方法 清空切片的2种方法 查看变量类型 使用 fmt.Printf package main import "fmt ...
- python3各数据类型的常用方法
python3数据类型包括: 数字.字符串str.列表list.元组tuple.字典dict.集合set.布尔bool 1.字符串(str)-可变-用"".''定义 (1)uppe ...
- CTF-Web-PHP反序列化
概念解释 PHP 反序列化漏洞又叫做 PHP 对象注入漏洞,我觉得这个表达很不直白,也不能说明根本的问题,不如我们叫他 PHP 对象的属性篡改漏洞好了(别说这是我说的~~) 反序列化漏洞的成因在于代码 ...
- 电商平台趋势妙手采集类API接口
电商平台趋势,平台化.大家可以看到大的电商都开始有自己的平台,其实这个道理很清楚,就是因为这是充分利用自己的流量.自己的商品和服务大效益化的一个过程,因为有平台,可以利用全社会的资源弥补自己商品的丰富 ...
- 实现和CSS一样的easing动画?直接看Mozilla、Chromium源码!
前言 在上一篇丝滑的贝塞尔曲线:从数学原理到应用介绍贝塞尔曲线实现动画时给自己留了一个坑,实现的动画效果和CSS的transition-timing-function: cubic-bezier差别较 ...
- 在Ubuntu中安装Samba文件服务
点击蓝字 关注我们 First Frost 在Ubuntu中安装Samba文件服务 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message ...
- SpringBoot整合RocketMQ,老鸟们都是这么玩的!
今天我们来讨论如何在项目开发中优雅地使用RocketMQ.本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们 ...
- SpringBoot 缓存注解的使用
最近比较忙,没时间更新了.上一篇文章我说了如何使用Redis做缓存,文末我稍微提到了SpringBoot对缓存的支持.本篇文章就针对SpringBoot说一下如何使用. 1.SpringBoot对缓存 ...
- [MAUI]模仿微信“按住-说话”的交互实现
@ 目录 创建页面布局 创建手势控件 创建TalkBox 创建动画 拖拽物动画 按钮激活动画 TalkBox动画 Layout动画 项目地址 .NET MAUI跨平台框架包含了识别平移手势的功能,在之 ...