R 语言作图

【R基础】R脚本解析命令行参数

2021-10-25  本文已影响0人  caokai001

1.命令行方式运行R脚本

$ cd /home/kcao/BG-share/R/script_create

$ cat >test.R
print("Hello R!")

$ Rscript test.R

#!/usr/bin/Rscript or #!/home/kcao/anaconda3/bin/Rscript

(base) [23:49:04] kcao@localhost:~/BG-share/R/script_create
$ which Rscript
~/anaconda3/bin/Rscript

$ cat >test.R
#!/home/kcao/anaconda3/bin/Rscript
print("Hello R!")

$ chmod 755 test.R

$ ./test.R

2.R语言接受命令行参数方法

R接受命令的参数有三个常见的方法commandArgs()、getopt()、OptionParser()

其中第一个是R自带的函数,后面两个分别来自包getopt和optparse。

2.1 commandArgs()

这是个R的内置命令,和perl的@ARGV或者和python的sys.argv类似,就是将来自于命令的参数存入向量(数组)中。但是与perl和python的不同,它的前面几个元素不是命令行的参数,先尝试打印一下这个参数是怎样的。

对于参数的位置是可变的,在R所在路径R脚本的路径这两个参数之间是Rscript的参数,这些参数的数量是可变的. 输入的参数是从第6个开始

$ cat > test1.R
# commandArgs()就返回一个包含参数信息的向量
args <- commandArgs()
print(args)



$ Rscript test1.R Hello R
[1] "/home/kcao/anaconda3/lib/R/bin/exec/R"   # R所在的路径
[2] "--slave"                                 # Rscript的参数
[3] "--no-restore"                            # Rscript的参数
[4] "--file=test1.R"                          # 运行R脚本的路径
[5] "--args"                                  # 脚本参数flag
[6] "Hello"                                   # 第一个参数
[7] "R"                                       # 第二个参数

$ Rscript 
Usage: /path/to/Rscript [--options] [-e expr [-e expr2 ...] | file] [args]

--options accepted are
  --help              Print usage and exit
  --version           Print version and exit
  --verbose           Print information on progress
  --default-packages=list
                      Where 'list' is a comma-separated set
                        of package names, or 'NULL'
or options to R, in addition to --slave --no-restore, such as
  --save              Do save workspace at the end of the session
  --no-environ        Don't read the site and user environment files
  --no-site-file      Don't read the site-wide Rprofile
  --no-init-file      Don't read the user R profile
  --restore           Do restore previously saved objects at startup
  --vanilla           Combine --no-save, --no-restore, --no-site-file
                        --no-init-file and --no-environ

'file' may contain spaces but not shell metacharacters
Expressions (one or more '-e <expr>') may be used *instead* of 'file'
See also  ?Rscript  from within R

这样一来就会导致R脚本的参数的索引不固定,针对这种情况,你也可以添加一个参数来削掉R脚本参数之前的参数了。

$ cat > test2.R
args <- commandArgs(trailingOnly = TRUE)
print(args)

$ Rscript test2.R Hello R
[1] "Hello" "R"

2.2 optparse

Python模块学习——optparse

使用之前安装包

install.packages("optparse")

其中的方法OptionParser()的用法为:其中最重要的参数是option_list,这个参数接受一个列表,这个列表是被用来描述命令参数的解析方式的。

OptionParser(usage          = "usage: %prog [options]", # 使用示例
                        option_list     = list(), # 参数列表
                    add_help_option = TRUE,   # 是否自动添加-h参数
            prog            = NULL,   # prog替代具体的字符串,默认是程序名
            description     = "",     # 在usage语句和options语句之间为print_help打印的附加文本
                    epilogue        = "")     # 在options语句之后打印的print_help的附加文本 

make_option(opt_str,               # 参数的short-long flag;"-f --file"
                    action = NULL,         # 具体存储到参数列表的值,store/store_true/store_false
                    type = NULL,           # 填写参数的数据类型,"logical/integer/double"
                    dest = NULL,           # 参数列表中具体存储的变量名;默认是opt_str的long flag
                default = NULL,        # 参数的默认值
                      help = "",             # 参数的功能的介绍
            metavar = NULL)        # 提醒用户,该命令行参数所期待的参数

Example:

$ cat > test3.R
library(optparse)

# 描述参数的解析方式
option_list <- list(
  make_option(c("-f", "--first"), type = "integer", default = 1,
              action = "store", help = "This is first! [default %default]"),
  make_option(c("-s", "--second"), type = "character", default = "ok",
              action = "store", help = "This is second![default \"%default\"]"),
  make_option(c("-t", "--third"), type = "logical", default = FALSE,
              action = "store", help = "This is third! [default %default]"),
  make_option(c("-r", "--run"), action = "store_true", default = FALSE,
              dest = "verbose", help = "run this SAS code [default %default]")
)

# 解析参数
opt = parse_args(OptionParser(option_list = option_list, 
                              usage = "Usage: %prog [options] \nDescription: This Script is a test for arguments!"))

print(opt)

运行脚本,查看帮助信息:

$ Rscript test3.R -h
Usage: test3.R [options] 
Description: This Script is a test for arguments!


Options:
    -f FIRST, --first=FIRST
        This is first! [default 1]

    -s SECOND, --second=SECOND
        This is second![default "ok"]

    -t THIRD, --third=THIRD
        This is third! [default FALSE]

    -r, --run
        run this SAS code [default FALSE]

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

查看默认参数:

$ Rscript test3.R 
$first
[1] 1

$second
[1] "ok"

$third
[1] FALSE

$verbose
[1] FALSE

$help
[1] FALSE

提供参数值:

$ Rscript test3.R -f 1 -s "hello" -t TRUE -r
$first
[1] 1

$second
[1] "hello"

$third
[1] TRUE

$verbose
[1] TRUE

$help
[1] FALSE

欢迎评论交流~ 😊

上一篇 下一篇

猜你喜欢

热点阅读