我正在使用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"
答案 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'))