bash到Rscript的命令行参数

时间:2010-12-28 17:05:09

标签: bash r arguments

我有一个bash脚本,可以创建一个csv文件和一个从中创建图形的R文件。

在bash脚本的最后,我调用了Rscript Graphs.R 10

我得到的回应如下:

Error in is.vector(X) : subscript out of bounds
Calls: print ... <Anonymous> -> lapply -> FUN -> lapply -> is.vector
Execution halted

我的Graphs.R的前几行是:

#!/bin/Rscript
args <- commandArgs(TRUE)
CorrAns = args[1]

不知道我做错了什么?网上的建议在我看来应该说这应该有效。很难理解commandArgs

4 个答案:

答案 0 :(得分:16)

在args.R中有以下内容

print(commandArgs(TRUE)[1])

以及args.sh中的以下内容

Rscript args.R 10

我从bash args.sh

获得以下输出
[1] "10"

并没有错误。如有必要,请使用as.numeric(commandArgs(TRUE)[1])转换为数字类型。

答案 1 :(得分:6)

只是一个猜测,也许你需要将CorrAns从字符转换为数字,因为?CommandArgs的值部分说:

  

包含名称的字符向量   可执行文件和   用户提供的命令行参数。

更新:它可以像以下一样简单:

#!/bin/Rscript
args <- commandArgs(TRUE)
(CorrAns = args[1])
(CorrAns = as.numeric(args[1]))

答案 2 :(得分:1)

阅读docs,您可能需要从调用TRUE中移除commandArgs(),因为您没有使用--args调用脚本。要么是,要么致电Rscript Graphs.R --args 10

  

用法

     

commandArgs(trailingOnly = FALSE)

     

参数

     

trailingOnly符合逻辑。应该只   返回--args后的参数?

答案 3 :(得分:1)

Rscript args.R 10其中10是我们想要传递给R脚本的数值。

print(as.numeric(commandArgs(TRUE)[1])打印出可以分配给变量的值。