docopt & Numeric Options

Every input is a string in docopt. Every Input!!

R
development
programming
docopt
Author

Robert M Flight

Published

January 17, 2018

TL;DR

If you use the docopt package to create command line R executables that take options, there is something to know about numeric command line options: they should have as.double before using them in your script.

Setup

Lets set up a new docopt string, that includes both string and numeric arguments.

"
Usage:
  test_numeric.R [--string=<string_value>] [--numeric=<numeric_value>]
  test_numeric.R (-h | --help)
  test_numeric.R

Description: Testing how values are passed using docopt.

Options:
  --string=<string_value>  A string value [default: Hi!]
  --numeric=<numeric_value>   A numeric value [default: 10]

" -> doc
library(methods)
library(docopt)

script_options <- docopt(doc)

script_options
## List of 8
##  $ --string : chr "Hi!"
##  $ --numeric: chr "10"
##  $ -h       : logi FALSE
##  $ --help   : logi FALSE
##  $ string   : chr "Hi!"
##  $ numeric  : chr "10"
##  $ h        : logi FALSE
##  $ help     : logi FALSE
## NULL

It is very easy to see here, that the numeric argument is indeed a string, and if you want to use it as numeric, it should first be converted using as.double, as.integer, or even as.numeric.

Can’t You Easily Tell It’s Character?

I just bring this up because I recently used docopt to provide interfaces to three executables scripts, and I spent a lot of time printing the doc strings, and I somehow never noticed that the numeric values were actually character and needed to be converted to a numeric first. Hopefully this will save someone else some time in that regard.

Reuse

Citation

BibTeX citation:
@online{mflight2018,
  author = {Robert M Flight},
  title = {Docopt \& {Numeric} {Options}},
  date = {2018-01-17},
  url = {https://rmflight.github.io/posts/2018-01-17-docopt-numeric-optoins},
  langid = {en}
}
For attribution, please cite this work as:
Robert M Flight. 2018. “Docopt & Numeric Options.” January 17, 2018. https://rmflight.github.io/posts/2018-01-17-docopt-numeric-optoins.