我的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
读作数字向量?
答案 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))