Рассмотрим следующий скрипт:
library(optparse)
option_list <- list(
make_option(c('--sample_p'), default=NA, dest='sample_p', help='Sample probability of inclusion if randomly sampling records')
)
args <- parse_args(OptionParser(option_list=option_list))
print(args)
if(!is.na(args$sample_p)){
print('Chose to sample')
}else{
print('Did not choose to sample')
}
Я хочу передать скрипту значение с плавающей запятой, которое будет храниться в args$sample_p
. Я попробовал следующее, но ни один из подходов не оставляет меня с 0.05
сохраненным:
$ Rscript test.R --sample_p 0.05
$sample_p
[1] NA
$help
[1] FALSE
[1] "Did not choose to sample"
$ Rscript test.R --sample_p=0.05
Warning message:
In getopt(spec = spec, opt = args) :
long flag sample_p given a bad argument
$sample_p
[1] NA
$help
[1] FALSE
[1] "Did not choose to sample"
Однако, если я изменю значение по умолчанию sample_p
на число вместо NA
, это работает:
library(optparse)
option_list <- list(
make_option(c('--sample_p'), default=0, dest='sample_p', help='Sample probability of inclusion if randomly sampling records')
)
args <- parse_args(OptionParser(option_list=option_list))
print(args)
if(!is.na(args$sample_p)){
print('Chose to sample')
}else{
print('Did not choose to sample')
}
$ Rscript test.R --sample_p 0.05
$sample_p
[1] 0.05
$help
[1] FALSE
[1] "Chose to sample"
Почему NA
в качестве значения по умолчанию вызывает проблемы?