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

R脚本封装必备模板——argparse版

2023-06-29 22:27 作者:学生信的大叔  | 我要投稿

将R脚本封装后在linux下运行必备。脚本分区较多,根据自己需求可以删减一部分内容。这也是我在使用的最新版本的R脚本模板了。

脚本特点

  • 使用R版本argparse 包写脚本模板,仍然依赖于Python版本的模块。

  • 调用了R包cliprettyunits ,一般提到的推文很少,多用于开发。cli 包使用可以见我之间推文R包cli: 花式打印信息

  • 多以包::函数的方式调用函数。

  • 使用{ } 将较大分区分开,便于代码梳理。

脚本分区

  • 基础设置:Rscript调用,语言设置和管道符启用设置。

  • 以library()方式展示使用了哪些包。全部注释掉,仅作提示用。

  • 写出conda环境下使用该脚本所需环境的配置命令

  • 设置脚本选项参数,并作解析和检查

  • 起始时间记录:记录脚本运行起始时间。建议在脚本选项参数解析之后记录脚本运行起始时间。

  • 将选项转换为常规变量

  • 调试用参数:封脚本时需要改为F。仅为调试脚本命令。

  • 输入文件的检查

  • 定义函数:将常用函数放到这里。本模板把WGCNA::collectGarbage 代码放在这里,定义为wgcna_collectGarbage函数,用于最后内存释放。

  • 脚本代码⭐⭐⭐。是该脚本所需功能实现的主体部分。

  • 回收内存:根据需要运行wgcna_collectGarbage

  • 完成时间记录:记录脚本运行完成时间,并计算脚本运行用时。

脚本模板

 #!/usr/bin/env Rscript
 
 Sys.setenv(LANGUAGE = "en") # 设置提示信息为英文
 suppressPackageStartupMessages(library(magrittr, quietly = T))
 
 
 # # 所需安装包,仅作展示查看,不做运行。
 # {
 #   library(argparse) # 该模块依赖于Python的同名模块。
 #   library(prettyunits)
 #   library(lubridate)
 #   library(stringr)
 #   library(vroom)
 #   library(dplyr)
 # }
 
 # conda安装所需模块
 ##mamba install -c conda-forge r-argparse  r-prettyunits r-lubridate # r-stringr r-vroom r-dplyr
 
 # 设置脚本选项参数
 {
   parser <- argparse::ArgumentParser(description = "Get bed file of ssr sequence!")
   # 添加选项
   parser$add_argument("-i","--input",action = "store",type = "character",
                       help = "The input.")
   parser$add_argument("-t","--thread",action = "store",type = "integer", default = 10,
                       help = "Threads. [default: 10]")
   
   # type: 'logical', 'integer', 'double' or 'character'
   
   # 解析参数为一个list
   args <- parser$parse_args()
   # args #打印查看参数内容
   parser$print_help() #打印帮助文档,用于调试 # 测试完毕需要注释掉这一行。
 }
 
 
 # 时间设置:起始时间记录。
 {
   start_time <- lubridate::now(tzone = 'Asia/Shanghai') #记录开始时间
   cli::cat_line("Start time: ",cli::col_red(start_time),"!")
 }
 
 
 # 将选项转换为常规变量
 {
   input <- args$input #输入文件
 }
 
 # 调试用参数:封脚本时需要改为F。
 if(F){
   input <- "./Trinity.fa.misa"
 }
 
 # 检查文件
 {
   # 输入文件:两个,其中misa文件为显,fasta文件也必须包含。
   ## 直接检查misa文件
   if(file.exists(misa)){
     cli::cli_inform(message = paste0("OK: ",cli::col_red(input)))
   }else{
     cli::cli_abort(message = c("{cli::col_red(input)} does not exist!",
                                "x"="You've supplied {cli::col_red(input)} in current directory!"))
   }
   
   ## 检查fasta文件
   fasta_file <- stringr::str_remove(input,pattern = "\\.misa")
 }
 
 # 定义函数
 {
   # WGCNA::collectGarbage # 不讲武德地直接复制过来代码了,因为WGCNA安装常常不是很顺。
   wgcna_collectGarbage <- function(){
     while (gc()[2, 4] != gc()[2, 4] | gc()[1, 4] != gc()[1, 4]) {
     }
   }
   
   # 读入fasta为df
   read_bio_fasta <- function(fasta){
     fa <- vroom::vroom_lines(file = fasta, skip_empty_rows = TRUE)
     # a vector of fasta id
     id <- fa[stringr::str_detect(fa, "^>")] %>% stringr::str_remove(pattern = "^>")
     # a vector of fasta sequence
     seq <- stringr::str_replace_all(fa,pattern = "^>.*",replacement = ">") %>% paste0(collapse = "") %>% stringr::str_split(pattern = ">")
     seq <- seq[[1]][-1]
     
     return(data.frame(id = id, sequence = seq))
   }
 }
 
 # 脚本代码⭐⭐⭐
 {
   # 写入你的内容
 }
 
 
 # 回收内存:根据需要使用
 {
   # 可以使用简单的invisible(gc())
   # invisible(gc())
   # 如果安装了R包WGCNA,还可以调用WGCNA::collectGarbage
   wgcna_collectGarbage()
 }
 
 # 计算运行用时
 {
   # 时间设置:运行时间记录
   end_time <- lubridate::now(tzone = 'Asia/Shanghai') #记录结束时间
   cli::cat_line("End time: ",cli::col_red(end_time),"!") # 打印结束时间
   
   # 计算时间差
   runtime <- lubridate::interval(start = start_time, end = end_time) %>%
     lubridate::time_length(unit = "second")
   
   cli::cat_line("Time consuming: ", cli::col_red(prettyunits::pretty_sec(runtime)), "!")# 使用prettyunits美化时间差。
 }

收费业务

『收费服务』 SSR分析收费版:MISA+Primer3流程

『收费服务』Uniprot数据库拆分fasta文件获取


R脚本封装必备模板——argparse版的评论 (共 条)

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