R腳本封裝必備模板——argparse版

將R腳本封裝后在linux下運行必備。腳本分區(qū)較多,根據(jù)自己需求可以刪減一部分內(nèi)容。這也是我在使用的最新版本的R腳本模板了。
使用R版本
argparse
包寫腳本模板,仍然依賴于Python版本的模塊。調(diào)用了R包
cli
和prettyunits
,一般提到的推文很少,多用于開發(fā)。cli
包使用可以見我之間推文多以
包::函數(shù)
的方式調(diào)用函數(shù)。使用
{ }
將較大分區(qū)分開,便于代碼梳理。
腳本分區(qū)
基礎設置:Rscript調(diào)用,語言設置和管道符啟用設置。
以library()方式展示使用了哪些包。全部注釋掉,僅作提示用。
寫出conda環(huán)境下使用該腳本所需環(huán)境的配置命令
設置腳本選項參數(shù),并作解析和檢查
起始時間記錄:記錄腳本運行起始時間。建議在腳本選項參數(shù)解析之后記錄腳本運行起始時間。
將選項轉(zhuǎn)換為常規(guī)變量
調(diào)試用參數(shù):封腳本時需要改為F。僅為調(diào)試腳本命令。
輸入文件的檢查
定義函數(shù):將常用函數(shù)放到這里。本模板把
WGCNA::collectGarbage
代碼放在這里,定義為wgcna_collectGarbage
函數(shù),用于最后內(nèi)存釋放。腳本代碼???。是該腳本所需功能實現(xiàn)的主體部分。
回收內(nèi)存:根據(jù)需要運行
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
?
?# 設置腳本選項參數(shù)
?{
? ?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'
? ?
? ?# 解析參數(shù)為一個list
? ?args <- parser$parse_args()
? ?# args #打印查看參數(shù)內(nèi)容
? ?parser$print_help() #打印幫助文檔,用于調(diào)試 # 測試完畢需要注釋掉這一行。
?}
?
?
?# 時間設置:起始時間記錄。
?{
? ?start_time <- lubridate::now(tzone = 'Asia/Shanghai') #記錄開始時間
? ?cli::cat_line("Start time: ",cli::col_red(start_time),"!")
?}
?
?
?# 將選項轉(zhuǎn)換為常規(guī)變量
?{
? ?input <- args$input #輸入文件
?}
?
?# 調(diào)試用參數(shù):封腳本時需要改為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")
?}
?
?# 定義函數(shù)
?{
? ?# 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))
? ?}
?}
?
?# 腳本代碼???
?{
? ?# 寫入你的內(nèi)容
?}
?
?
?# 回收內(nèi)存:根據(jù)需要使用
?{
? ?# 可以使用簡單的invisible(gc())
? ?# invisible(gc())
? ?# 如果安裝了R包WGCNA,還可以調(diào)用WGCNA::collectGarbage
? ?wgcna_collectGarbage()
?}
?
?# 計算運行用時
?{
? ?# 時間設置:運行時間記錄
? ?end_time <- lubridate::now(tzone = 'Asia/Shanghai') #記錄結(jié)束時間
? ?cli::cat_line("End time: ",cli::col_red(end_time),"!") # 打印結(jié)束時間
? ?
? ?# 計算時間差
? ?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美化時間差。
?}
收費業(yè)務
『收費服務』 SSR分析收費版:MISA+Primer3流程
『收費服務』Uniprot數(shù)據(jù)庫拆分fasta文件獲取
