如何将参数作为数字向量读取

时间:2017-01-02 13:04:48

标签: r rscript

我的R脚本遇到了一些麻烦,因为我想从bash脚本中使用它。当我调用脚本并引入其参数时,我的问题出现了,我使用以下命令行

Rscript myscript.R 1,2,1,3,2,3

我想使用参数" 1,2,1,3,2,3"作为数字向量,以便使用其长度和元素。所以在myscript.R中代码是:

args <- commandArgs(trailingOnly=TRUE)
comparisons <- args[1]

但是当我将这个变量comparisons用于其他事情时,会出现错误:

for (i in seq(from = 1, to = length(comparisons)-1, by = 2))
{
...
}

错误讯息:

Error in seq.default(from = 1, to = (length(comparisons) - 1), by = 2) : 
wrong sign in 'by' argument
Calls: seq -> seq.default
Execution halted

如何将参数comparisons读作数字向量?

2 个答案:

答案 0 :(得分:3)

scan()函数是一个经常被忽视但非常有用且功能多样的工具:

scan(text=args[1], sep=",", quiet=TRUE)

如果您不需要double s,那么:

scan(text=args[1], what=integer(), sep=",", quiet=TRUE)

会给你整数。

答案 1 :(得分:2)

使用您的代码,比较只是一个单元素的字符串向量,因此(length(comparisons) - 1) = 0。这导致from 1 -> to 0正在减少,但by 2为正,因此seq失败。

您可以使用此代码将其转换为数字向量

comparisons <- unlist(lapply(strsplit(comparisons, ","), as.numeric))