我正在运行 R 脚本,但遇到错误:
Rscript 示例.R "a,b,c"
我正在运行上面的代码,其中 a、b、c 是作为参数传递的字符向量的元素。如果我传递数值(例如 1,5,6),上面的代码可以正常工作
Code is :
library("optparse")
library("tldutils") # eval_string
# install.packages("tldutils", repos="http://R-Forge.R-project.org")
option_list <- list(
make_option(c("-c", "--count"), type="character", default="5",
help='Vector of numbers separated by commas and surrounded by ""',
metavar="number")
)
args <- parse_args(OptionParser(option_list = option_list))
print(args$c)
eval_string(sprintf("foo = c(%s)", args$c))
print(foo)
Run Code Online (Sandbox Code Playgroud)
错误是:
Error in eval(expr, envir, enclos) : object 'a' not found
Calls: eval_string -> eval.parent -> eval -> eval
Execution halted
Run Code Online (Sandbox Code Playgroud)
请帮助我,我需要在代码中编辑哪里?
不确定我是否完全明白你想要的,但我希望你能够自己弄清楚细节并解决你的问题。
将字符向量作为参数传递给 R 的最简单方法是使用该commandArgs函数(基本包的函数,无需安装任何花哨的东西)。
# Start R from the shell
$ R --args a,b,c
# Within R
> commandArgs()
[1] "/usr/lib64/R/bin/exec/R" "--args"
[3] "a,b,c"
Run Code Online (Sandbox Code Playgroud)
--args如果您只想获取use之后指定的参数trailingOnly=TRUE。加起来strsplit就变成"a,b,c"了三元素向量。或者,将逗号更改为空格,则不需要strsplit.
$ R --args a,b,c
...
> strsplit(commandArgs(TRUE), ",")[[1]]
[1] "a" "b" "c"
$ R --args a b c
...
> commandArgs(T)
[1] "a" "b" "c"
Run Code Online (Sandbox Code Playgroud)