R語言如何最簡單的寫腳本並添加幫助文檔
- 2019 年 12 月 5 日
- 筆記
1. 默認的參數commandArgs超簡單
1.1 腳本示例
head.R
1args = commandArgs(TRUE) 2 3if(length(args) != 2){ 4 cat("運行命令方式:Rscript head.R dat.csv 5nthead.R 為腳本ntdat.csv 為數據nt5 為行數n") 5 quit("no") 6}else{ 7 dd = read.csv(args[1]) 8 n = as.numeric(args[2]) 9 head(dd,n) 10}
1.2 腳本解釋
- 首先將
commandArgs
為TRUE,並賦值給args,這樣args[1]是第一個參數,args[2]為第二個參數,以此類推 - 使用length(args)計算參數長度,並使用if判斷長度是否為2,參數個數為2,執行else,否則報錯
- 報錯這一步中,用cat列印幫助文檔,然後quit("no")程式
- 如果執行程式,直接列印到螢幕上
1.3 腳本測試
執行:無參數,直接給出幫助文檔
1(base) [dengfei@ny01 a]$ Rscript head.R 2運行命令方式:Rscript head.R dat.csv 5 3 head.R 為腳本 4 dat.csv 為數據 5 5 為行數
執行:參數個數不符合要求,直接給出幫助文檔
1(base) [dengfei@ny01 a]$ Rscript head.R npk.csv 2運行命令方式:Rscript head.R dat.csv 5 3 head.R 為腳本 4 dat.csv 為數據 5 5 為行數
執行:參數正確,直接執行
1(base) [dengfei@ny01 a]$ Rscript head.R npk.csv 4 2 block N P K yield 31 1 0 1 1 49.5 42 1 1 1 0 62.8 53 1 0 0 0 46.8 64 1 1 0 1 57.0
2. 如果想正式使用`optparse`包
2.1 腳本示例
head2.R
1library(optparse) 2 3option_list <- list( 4 make_option(c("-d", "--dat"), type = "character", default=FALSE, 5 help="請輸入數據文件"), 6 make_option(c("-r", "--row"), type="integer", default=FALSE, 7 help="請輸入行數") 8) 9 10opt_parser = OptionParser(option_list=option_list); 11opt = parse_args(opt_parser); 12file = opt$dat 13r = opt$row 14 15dd = read.csv(file) 16head(dd,r)
2.2 腳本解釋
- 首先載入optparse包
- 使用list編寫說明文檔和關鍵詞
- 使用parse_args解析參數,編程類似args的格式
- 調用
2.3 腳本測試
執行:–help,直接給出幫助文檔
1(base) [dengfei@ny01 a]$ Rscript head2.R --help 2Usage: head2.R [options] 3 4 5Options: 6 -d DAT, --dat=DAT 7 請輸入數據文件 8 9 -r ROW, --row=ROW 10 請輸入行數 11 12 -h, --help 13 Show this help message and exit
也可以使用簡寫的-h形式列印幫助文檔
1(base) [dengfei@ny01 a]$ Rscript head2.R -h 2Usage: head2.R [options] 3 4 5Options: 6 -d DAT, --dat=DAT 7 請輸入數據文件 8 9 -r ROW, --row=ROW 10 請輸入行數 11 12 -h, --help 13 Show this help message and exit
執行:參數正確,直接執行
- 第一個參數:-d npk.csv
- 第二個參數:-r 4
1Rscript head2.R -d npk.csv -r 4
1(base) [dengfei@ny01 a]$ Rscript head2.R -d npk.csv -r 4 2 block N P K yield 31 1 0 1 1 49.5 42 1 1 1 0 62.8 53 1 0 0 0 46.8 64 1 1 0 1 57.0