如何将数组作为参数传递给R脚本命令行运行?

时间:2017-06-27 18:42:22

标签: arrays r command-line arguments

我正在尝试通过Windows中的命令行传递数百个元素的数组作为R脚本的参数。首先,我想以某种方式声明我的数组。我在命令行中这样做:

set my_array=c(0,1,2,3,4,5,6,7,8,9,...,700)

然后我想运行我的脚本并将数组作为参数。

Rscript my_script my_array

但是当我尝试这个时,出现了一条错误消息,说'找不到对象my_array'。我知道如何使用args <- commandArgs(TRUE)在我的脚本中获取参数。我只需要识别我声明的数组作为参数 - 或者以正确的方式声明它并以正确的方式将其作为参数传递给我的脚本。

谢谢!

3 个答案:

答案 0 :(得分:1)

我想我明白你在这里要做什么,如果我错了就告诉我。

我创建了一个包含以下内容的R脚本(称为script.R):

args <- commandArgs(TRUE)
eval(parse(text=args[1]))
print(myarray)

然后我可以像这样(从我的命令行)调用脚本

Rscript script.R myarray="c(1,3,4)"

正如您所看到的,参数被传递(在您的脚本中您可以执行print(args)以查看传递的内容以及如何传递),我使用eval(parse(text = ...)))来执行它(在脚本中创建myarray)然后我可以用它做我想要的(在我的情况下,我打印它,但你可以做分析或其他的东西)。这有帮助吗?

答案 1 :(得分:1)

首先,我不确定您是否应该使用set在终端中声明任何变量,但您可以在man set页面上看到更多这样的内容。

我认为你可以尝试将数组传递给R脚本,这主要取决于你在终端中声明my_array的方式。

1 - &#34; my_array&#34;可以是bash中的字符串:

$ my_array="c(0,1,2,3,4)"
$ Rscript my_script ${my_array}

并使用R脚本中的eval(parse(text=()))将参数转换为R环境的向量。

args <- commandArgs(trailingOnly=TRUE) 
print(args)
# c(0,1,2,3,4,5,6,7,8,9)

args <- eval(parse(text=args[1]))
print(args)
# [1] 0 1 2 3 4 5 6 7 8 9

2 - &#34; my_array&#34;可以是bash中的数组:

$ my_array=(0,1,2,3,4)
$ Rscript my_script ${my_array[*]}

并且在R中args已经是你的数组,但是字符类型为

args <- commandArgs(trailingOnly=TRUE) 
print(args)
# [1] "0" "1" "2" "3" "4" "5"

答案 2 :(得分:0)

如果数组中有数百个值,那么将它写入文本文件并将文件路径作为参数传递并让R读入它会更有用。