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

How to read arguments as numeric vector

我的 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 读取为数值向量?

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

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

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

scan() 函数是一个经常被忽视但非常有用且用途广泛的工具:

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

如果您不需要 double,那么:

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

会给你整数。