R语言如何最简单的写脚本并添加帮助文档

1. 默认的参数commandArgs超简单

1.1 脚本示例

head.R

args = commandArgs(TRUE)

if(length(args) != 2){
    cat("运行命令方式:Rscript head.R dat.csv 5\n\thead.R 为脚本\n\tdat.csv 为数据\n\t5 为行数\n")
    quit("no")
}else{
    dd = read.csv(args[1])
    n = as.numeric(args[2])
    head(dd,n)
}

1.2 脚本解释

  • 首先将commandArgs为TRUE,并赋值给args,这样args[1]是第一个参数,args[2]为第二个参数,以此类推
  • 使用length(args)计算参数长度,并使用if判断长度是否为2,参数个数为2,执行else,否则报错
  • 报错这一步中,用cat打印帮助文档,然后quit(“no”)程序
  • 如果执行程序,直接打印到屏幕上

1.3 脚本测试

执行:无参数,直接给出帮助文档

(base) [dengfei@ny01 a]$ Rscript head.R 
运行命令方式:Rscript head.R dat.csv 5
	head.R 为脚本
	dat.csv 为数据
	5 为行数

执行:参数个数不符合要求,直接给出帮助文档

(base) [dengfei@ny01 a]$ Rscript head.R npk.csv 
运行命令方式:Rscript head.R dat.csv 5
	head.R 为脚本
	dat.csv 为数据
	5 为行数

执行:参数正确,直接执行

(base) [dengfei@ny01 a]$ Rscript head.R npk.csv 4
  block N P K yield
1     1 0 1 1  49.5
2     1 1 1 0  62.8
3     1 0 0 0  46.8
4     1 1 0 1  57.0

2. 如果想正式使用optparse

2.1 脚本示例

head2.R

library(optparse)

option_list <- list(
  make_option(c("-d", "--dat"), type = "character", default=FALSE,
              help="请输入数据文件"),
  make_option(c("-r", "--row"), type="integer", default=FALSE,
              help="请输入行数")
)

opt_parser = OptionParser(option_list=option_list);
opt = parse_args(opt_parser);
file = opt$dat
r = opt$row

dd = read.csv(file)
head(dd,r)

2.2 脚本解释

  • 首先载入optparse包
  • 使用list编写说明文档和关键词
  • 使用parse_args解析参数,编程类似args的格式
  • 调用

1.3 脚本测试

执行:–help,直接给出帮助文档

(base) [dengfei@ny01 a]$ Rscript head2.R --help
Usage: head2.R [options]


Options:
	-d DAT, --dat=DAT
		请输入数据文件

	-r ROW, --row=ROW
		请输入行数

	-h, --help
		Show this help message and exit

也可以使用简写的-h形式打印帮助文档

(base) [dengfei@ny01 a]$ Rscript head2.R -h
Usage: head2.R [options]


Options:
	-d DAT, --dat=DAT
		请输入数据文件

	-r ROW, --row=ROW
		请输入行数

	-h, --help
		Show this help message and exit

执行:参数正确,直接执行

  • 第一个参数:-d npk.csv
  • 第二个参数:-r 4
Rscript head2.R -d npk.csv -r 4
(base) [dengfei@ny01 a]$ Rscript head2.R -d npk.csv -r 4
  block N P K yield
1     1 0 1 1  49.5
2     1 1 1 0  62.8
3     1 0 0 0  46.8
4     1 1 0 1  57.0

上一篇:Educational Codeforces Round 81 (Rated for Div. 2) A-E简要题解


下一篇:python对excel文件的处理