2017-01-02 55 views
0

我的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作爲數字向量讀取?

+1

它仍然從'r'解釋器運行,與'bash'無關,刪除標籤。 – Inian

回答

2

使用您的代碼,比較只是一個元素的字符串向量,因此(length(comparisons) - 1) = 0。這導致,from 1 -> to 0正在減少,但by 2是正數,因此seq失敗。

您可以使用此代碼,將其轉換爲數字矢量

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

非常感謝,它工作正常,解決了我的問題! –

2

scan()函數是一個經常被忽視但非常有用的和靈活的工具:

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

如果你不這樣做需要double當時的:

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

將整給你秒。

相關問題