如何将参数读取为数字向量
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)
会给你整数。
我的 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)
会给你整数。