2017-01-02 21 views
0

私はbashスクリプトから使いたいので、私のRスクリプトにいくつか問題があります。私の問題は私が数値ベクトルとして引数「1,2,1,3,2,3」を使用したい私は、スクリプトを呼び出すとその引数を導入したときに、私は次のコマンドライン数値ベクトルとして引数を読み込む方法

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

を使用していますその長さと要素を使うために。

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

が、私は他の事に、この変数comparisonsを使用する場合には、エラーが来る::だからmyscript.Rでコードがある

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は失敗します。そうしないと

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

あなたはscan()関数はしばしば見過ごさが、非常に便利で多目的なツールです

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

ありがとう、それはうまく動作し、私の問題を解決する! –

2

数値ベクトルに変換し、このコードを使用することができますdouble秒が必要:

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

s。

関連する問題