R:RScript Vector作为参数

时间:2014-11-01 18:40:10

标签: r vector command-line rscript

我正在使用R中预装的包RScript。

我想从命令提示符中调用以下名为'test.R'的R-Script:

a <- c("a", "b", "c")
a

args <- commandArgs(TRUE)
b <- as.vector(args[1])
b

我使用以下命令:

RScript test.R c("d","e","f")

这会创建以下输出:

[1] "a" "b" "c"
[1] "c(d,e,f)"

如您所见,第一个(也是唯一的)参数被解释为String,然后转换为1维向量。如何将参数解释为向量?

旁注:当然,向量的项目可以分成几个参数,但在我的最终项目中,将有多个向量参数。实现这样的事情是我最后的选择:

RScript test.R "d" "e" "f" END_OF_VECTOR_1 "g" "h" "i" END_OF_VECTOR_2 "j" "k" "l"

3 个答案:

答案 0 :(得分:4)

您可以使用以逗号分隔的列表。

在命令行上:

RScript test.R a,b,c d,e,f g,h,i j

在您的代码中:

vargs <- strsplit(args, ",")
vargs
# [[1]]
# [1] "a" "b" "c"
# 
# [[2]]
# [1] "d" "e" "f"
# 
# [[3]]
# [1] "g" "h" "i"
# 
# [[4]]
# [1] "j"

答案 1 :(得分:1)

您可以使用以下内容清除a = "c(1,2,3)"之类的内容

as.numeric(unlist(strsplit(substr(a,3,nchar(a)-1), ",")))

只要脚本始终传递正确格式的字符串,并且您知道预期的格式,它就能正常工作。在RScript参数中,不应列出c()部分,只需给它一个带引号的逗号分隔列表。

答案 2 :(得分:-1)

@flodel感谢您的回答,这是一种方法。除此之外,我找到了解决问题的方法。

'test.R'文件中的以下代码将参数存储在'args'中。然后将'args'中的文本计算为正常的R表达式,并作为输出,给出a和b。

args <- commandArgs(TRUE)
eval(parse(text=args))
a
b

可以在命令提示符中调用代码,如下所示:

RScript test.R a=5 b=as.vector(c('foo', 'bar'))