R -- Rscript传递参数

文章目录

  • getopt包
  • optparse包
  • argparse包

getopt包

getopt(spec = NULL, opt = NULL, command = get_Rscript_filename(),
usage = FALSE, debug = FALSE)

  • spec:
    内容由一个4-5列的matrix构成,matrix可以直接申明也可以如下申明 matrix(x,ncol=4,byrow=TRUE)
    每一列的构成要素如下:
    Column 1: the long flag name. A multi-character string.
    Column 2: short flag alias of Column 1. A single-character string.
    Column 3: Argument mask of the flag. An integer. Possible values: 0=no argument, 1=required argument, 2=optional argument.
    Column 4: Data type to which the flag’s argument shall be cast using storage.mode.
    Column 5 (optional): A brief description of the purpose of the option.
#!/path/to/Rscript
library('getopt')# get options, using the spec as defined by the enclosed list.
# we read the options from the default: commandArgs(TRUE).
spec = matrix(c('verbose', 'v', 2, "integer",'help' , 'h', 0, "logical",'count' , 'c', 1, "integer",'mean' , 'm', 1, "double",'sd' , 's', 1, "double"), byrow=TRUE, ncol=4)# 脚本运行到这里时,外部传递的参数会赋值给opt
opt = getopt(spec)# 这里设置帮助信息,并且如果接收到了帮助信息指令则打印帮助信息并且终止后续命令的执行
# if help was asked for print a friendly message
# and exit with a non-zero error code
if ( !is.null(opt$help) ) {cat(getopt(spec, usage=TRUE))q(status=1)
}# 默认参数设置部分
# set some reasonable defaults for the options that are needed,
# but were not specified.
if ( is.null(opt$mean ) ) { opt$mean = 0 }
if ( is.null(opt$sd ) ) { opt$sd = 1 }
if ( is.null(opt$count ) ) { opt$count = 10 }
if ( is.null(opt$verbose ) ) { opt$verbose = FALSE }# 设置脚本运行情况的信息反馈部分
# print some progress messages to stderr, if requested.
if ( opt$verbose ) { write("writing...",stderr()) }# do some operation based on user input.
cat(paste(rnorm(opt$count,mean=opt$mean,sd=opt$sd),collapse="\n"))
cat("\n")
# signal success and exit.
# q(status=0)
# Start ========================================================================
#!/path/to/Rscript# 脚本参数设置和接收部分
library(getopt)spec = matrix(c('input',  'i', 1, "character",'output', 'o', 1, "character",'help',   'h', 0, "logical"), byrow=TRUE, ncol=4)args <- getopt(spec)if(!is.null(args$help) || is.null(args$input) || is.null(args$output)){cat(paste(getopt(spec, usage = T), collapse = "\n"))cat("   Description: This script is aimed to calculate the ratio in malignant cell! Example:\nRscript cal_ratio.R -i BRCA.rds -o BRCA_output\nWritten by XqChai, 2023-07-20. \n")q(status=1)
}if (is.null(args$output)) {args$species = "out"}# 操作系统或者数据的部分
library(tidyverse)
library(reshape2)
library(stringi)#读取rds文件
input <- args$input 
output <- args$output
sce <- readRDS(input)

optparse包

make_option(opt_str, # 参数名,格式:--parameter_nameaction = NULL, # 描述optparse在遇到选项“store”、“store-true”、“store-false”或“callback”时应采取的操作的字符串。# 如果在命令字符串上找到选项,则“store”操作表示optparse应存储指定的以下值。# 如果找到选项,“store_true”将存储true,如果找到选项,“store_false”将存储false。# “callback”存储回调参数中指定的函数生成的返回值。如果callback不为空,则默认值为“callback”else“store”。type = NULL, # 参数数据类型dest = NULL,default = NULL, #设置参数的默认值help = "", # 该参数的描述信息metavar = NULL,callback = NULL,callback_args = NULL
)option_list = list(make_option(), make_option(), make_option()) 
#!/path/to/Rscript# 参数接受和设置部分
library(optparse)option_list = list(make_option(c("-f", "--file"), type="character", default=NULL, help="rpkm/fpkm matrix file", metavar="input"),make_option(c("-o", "--out"), type="character", default="out.tpm.xls", help="output file name [default= %default]", metavar="output")
); opt_parser = OptionParser(option_list = option_list, epilogue = "Written by Chai X. Q. 2019-04-22.")
opt = parse_args(opt_parser);if (is.null(opt$file)){print_help(opt_parser)stop("At least one argument must be supplied (input file).", call.=FALSE)
}# 操作系统或者数据部分
#program
input <- opt$file
output <- opt$out
exp <- covert(input)

argparse包

该部分内容完全来自这位作者以及他的文字:
https://zhuanlan.zhihu.com/p/212997106

然后本人通常使用第一种(getopt)方法,第二种方法也使用过,但是这一部分内容仅仅是记录和比较。

argparse包分为三个步骤:
第一步是使用ArgumentParser()创建一个参数解析对象,
第二步是使用add_argument函数为前面的对象增加参数,
第三步是通过parse_args()把解析对象赋值并在后续程序中调用。

#! /usr/bin/env Rscript
library(argparse)# 创建参数解析对象
parser <- ArgumentParser()# 设置参数
# 设置第一个参数verbose,缩写为v,其作用是告诉脚本是否打印完整的计算过程,其缺省值为TRUE
parser$add_argument("-v", "--verbose", action="store_true", default=TRUE,help="Print extra output [default]")# 设置第二个参数quietly,缩写为q,其作用是修改verbose参数,当调用改参数时,verbose被修改为FALSE,从而导致不再打印计算过程
parser$add_argument("-q", "--quietly", action="store_false", dest="verbose", help="Print little output")# 设置第三个参数count,缩写为c,这是一个整数参数,缺省值5,在后续的代码中被用作确定输出随机数的个数
parser$add_argument("-c", "--count", type="integer", default=5, help="Number of random normals to generate [default %(default)s]",metavar="number")# 设置第四个参数generator,无缩写,用于确定调用何种随机分布,缺省值rnorm对应于正态分布
parser$add_argument("--generator", default="rnorm", help = "Function to generate random deviates [default \"%(default)s\"]")# 设置第五个参数mean,无缩写,浮点数,用于确定正态分布的均值,缺省值为0
parser$add_argument("--mean", default=0, type="double",help="Mean if generator == \"rnorm\" [default %(default)s]")# 设置第五个参数sd,无缩写,浮点数,用于确定正态分布的标准差,缺省值为1
parser$add_argument("--sd", default=1, type="double",metavar="standard deviation",help="Standard deviation if generator == \"rnorm\" [default %(default)s]")# 调用解析器,此时args就被赋值为命令行参数输入的相应值
args <- parser$parse_args()# 根据verbose确定是否打印计算过程
if ( args$verbose ) { write("writing some verbose output to standard error...\n", stderr()) 
}# 根据其他参数,确定输出随机数的类型与次数
if( args$generator == "rnorm") {cat(paste(rnorm(args$count, mean=args$mean, sd=args$sd), collapse="\n"))
} else {cat(paste(do.call(args$generator, list(args$count)), collapse="\n"))
}
cat("\n")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust中的高吞吐量流处理

本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库&#xff0c;还使用这些库实现了一个流处理程序。 最后&#xff0c;作者介绍了如何通过测量空闲和阻塞时间来优化流处理程序的性能&#xff0c;并将这些内容同步至…

Android 实现账号诊断动画效果,逐条检测对应的项目

Dialog中的项目 逐条检测效果&#xff1a; 依赖库&#xff1a; implementation com.github.li-xiaojun:XPopup:2.9.19 implementation com.blankj:utilcodex:1.31.1 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.101、item_account_check.xml <…

PictureBox基本使用

作用&#xff1a;展示图片&#xff0c;同时也具有click属性&#xff0c;可用充当按钮功能。 常用属性&#xff1a; 设置图片 设置图片的填充模式 常用事件&#xff1a; 后台代码示范&#xff1a;增加点击事件 private void pictureBox1_Click(object sender, EventArgs e){//…

【CodeWhisperer】亚马逊版代码生成工具

大家好&#xff0c;我是荷逸&#xff0c;今天给大家带来的是代码生成工具【CodeWhisperer】 CodeWhisperer简介 CodeWhisperer是亚⻢逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。 在编写代码时&#xff0c;它会自动根据我们现有的代码和注释生…

Java中「Future」接口详解

一、背景 在系统中&#xff0c;异步执行任务&#xff0c;是很常见的功能逻辑&#xff0c;但是在不同的场景中&#xff0c;又存在很多细节差异&#xff1b; 有的任务只强调「执行过程」&#xff0c;并不需要追溯任务自身的「执行结果」&#xff0c;这里并不是指对系统和业务产…

JDK, JRE和JVM之间的区别和联系

JDK, JRE和JVM是与Java编程语言相关的三个重要的概念&#xff0c;它们分别代表Java Development Kit&#xff08;Java开发工具包&#xff09;、Java Runtime Environment&#xff08;Java运行时环境&#xff09;和Java虚拟机&#xff08;Java Virtual Machine&#xff09;。它们…

大数据课程G2——Hbase的基本架构

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Hbase的基本架构; ⚪ 掌握Hbase的读写流程; ⚪ 掌握Hbase的设计与优化; 一、基本架构 1. HRegion 1. 在HBase中,会将一个表从行键方向上进行切分,切分成1个或者多个HRegion。 …

C#利用自定义特性以及反射,来提大型项目的开发的效率

在大型项目的开发过程中&#xff0c;需要多人协同工作&#xff0c;来加速项目完成进度。 比如一个软件有100个form&#xff0c;分给100个人来写&#xff0c;每个人完成自己的Form.cs的编写之后&#xff0c;要在Mainform调用自己写的Form。 如果按照正常的Form form1 new For…

MIT 6.824 -- MapReduce -- 01

MIT 6.824 -- MapReduce -- 01 引言抽象和实现可扩展性可用性(容错性)一致性MapReduceMap函数和Reduce函数疑问 课程b站视频地址: MIT 6.824 Distributed Systems Spring 2020 分布式系统 推荐伴读读物: 极客时间 – 大数据经典论文解读DDIA – 数据密集型应用大数据相关论文…

【具身智能】系列论文解读(CoWs on PASTURE VoxPoser Relational Pose Diffusion)

0. My Conclusion CoWs on PASTURE&#xff1a; 擅长零样本的视觉语言对象导航&#xff0c;主要解决了LLM辅助下的任务级动作执行任务VoxPoser&#xff1a; 擅长设计一些未预定义的动作轨迹&#xff0c;主要解决了LLM辅助下的动作轨迹设计任务Relational Pose Diffusion&#…

Packet Tracer - 将路由器连接到 LAN

Packet Tracer - 将路由器连接到 LAN 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 192.168.10.1 255.255.255.0 N/A G0/1 192.168.11.1 255.255.255.0 N/A S0/0/0 (DCE) 209.165.200.225 255.255.255.252 N/A R2 G0/0 10.1.1.1 255.255.255…

vue打包到jar资源访问被shiro拦截

1.shiro放发对静态资源的拦截// filterMap.put("/202307171550/**", "anon"); // filterMap.put("/config/**", "anon"); // filterMap.put("/index.html", "anon"); 2.装载资源访问 priva…

基于java软件缺陷管理系统设计与实现

摘  要 随着科学信息技术不断的发展&#xff0c;各行各业中处处融入了计算机技术&#xff0c;由计算机技术衍生的产品对各个企业、各个领域都带来了极大的好处。本文就着眼于计算机技术与软件缺陷管理系统的融合发展为各个企业所带来的便利进行研究。利用计算机技术所开发出的…

概率论与数理统计复习总结3

概率论与数理统计复习总结&#xff0c;仅供笔者复习使用&#xff0c;参考教材&#xff1a; 《概率论与数理统计》/ 荣腾中主编. — 第 2 版. 高等教育出版社《2024高途考研数学——概率基础精讲》王喆 概率论与数理统计实际上是两个互补的分支&#xff1a;概率论 在 已知随机…

Kernel Exception导致手机重启案例分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、高温触发 Kernel Exception 重启问题二、解决方案三、提高电池温度方案 一、 高温触发 Kernel Exception 重启问题 手机 电池温度 默认60度以上高温…

【实战】 九、深入React 状态管理与Redux机制(四) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十九)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

代码随想录算法训练营第五十六天| 583. 两个字符串的删除操作 72. 编辑距离

代码随想录算法训练营第五十六天| 583. 两个字符串的删除操作 72. 编辑距离 一、力扣583. 两个字符串的删除操作 题目链接 思路&#xff1a;相等时不删除&#xff0c;不相等时&#xff0c;两个字符串各删除一个&#xff0c;比大小&#xff0c;删除用步骤少的。 class Soluti…

CBCGPRibbon 添加背景图片

resource.h中声明资源的ID&#xff1a;ID_RIBBON_BACKIMAGE rc文件中添加png图片路径&#xff1a; ID_RIBBON_BACKIMAGE PNG DISCARDABLE "res\\bkribbon.png" 代码中添加下测&#xff1a; //添加背景图片 m_wndRibbonBar.SetBackgroundImage(ID_RIB…

机器学习:马尔可夫模型

后续遇到合适的案例会再补充 1 马尔可夫模型 马尔可夫模型(Markov Model, MM)是一种统计模型&#xff0c;广泛应用在自然语言处理等领域中。 1.1 数学定义 考虑一组随机变量序列 X { X 0 , X 1 , … , X t , … } X\{X_{0},X_{1},\dots,X_{t},\dots\} X{X0​,X1​,…,Xt​,……

C语言单链表OJ题(较易)

一、移除链表元素 leetcode链接 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 思路&#xff1a; 正常遍历&#xff0c;找到value的值与题目中相同的结点去fr…