字符向量作为R脚本的参数

时间:2012-12-12 12:50:39

标签: r

我正在运行R脚本,但面临错误:

Rscript example.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)

错误是:

Error in eval(expr, envir, enclos) : object 'a' not found
Calls: eval_string -> eval.parent -> eval -> eval
Execution halted

请帮助我,我需要在代码中进行编辑?

2 个答案:

答案 0 :(得分:4)

不确定我是否得到了你想要的东西,但是我希望你能够自己弄清楚细节并解决你的问题。

将字符向量作为参数传递给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"

如果您只想在--args使用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"

答案 1 :(得分:1)

传递给脚本的“a,b,c”被解释为变量名,而不是字符串。

编辑:无论如何,我不明白你为什么要把数据作为参数传递而不是 a)从标准输入读取它 或更好 b)使用例如read.table

从文件中读取它