2017-12-07 24 views
0

Rの検証パッケージを使用してcrpsを計算しようとしていますが、データが正常に読み込まれているようですが、CRPS自体を計算しようとすると、 times '引数 "、しかし、すべての値は実数で、負の値ではなく、私はnan/na値をテストし、それらを無視しています。私はこのエラーが発生している理由を説明する解決策を見つけることができません。私はnetcdfファイルからのデータをより大きな配列に読み込み、それらの配列内の各グリッドセルに対してCRPSを計算しています。R:CRPSを計算する 'times'引数が無効

ご協力いただければ幸いです!

私が使用しているコードから関連スニップです:

##for each grid cell, get obs (wbarray) and 25 ensemble members of forecast eps (fcstarray) 
for(x in 1:3600){ 
    for(y in 1:1500){  

     obs=wbarray[x,y] 
     eps=fcstarray[x,y,1:25]    

      if(!is.na(obs)){ 
       print(obs) 
       print(eps) 
       print("calculating CRPS - real value found") 
       crpsfcst=(crpsDecomposition(obs,eps)$CRPS) 
       CRPSfcst[x,y,w]=crpsfcst}}} 

(Wは以前のループで指定されている)

そして私が手出力:

obs: 0.3850737 
eps: 0.3382506 0.3466184 0.3508921 0.3428135 0.3416993 0.3423528 0.3307764 
0.3372431 0.3394377 0.3398165 0.3414395 0.3531360 0.3319155 0.3453161 
0.3362813 0.3449474 0.3340050 0.3278898 0.3380596 0.3379150 0.3429202 
0.3467927 0.3419354 0.3472489 0.3550797 

"calculating CRPS - real value found" 
Error in rep(0, nObs * (nMember +1)) : invalid 'times' argument 
Calls: crpsDecomposition 
Execution halted 

答えて

0

RコマンドプロンプトにcrpsDecompositionと入力すると、その関数のソースコードが表示されます。最初の数行が表示さ:

function (obs, eps) 
{ 
    nMember = dim(eps)[2] 
    nObs <- length(obs) 

あなたepsデータオブジェクトは、その次元の2番目の要素がnMemberにを設定する、NULLになるだろう、(自分の出力から)1次元ベクトルであることを表示されますので、 NULL。したがって、nObs*(nMember + 1)は0と評価されます。私は、それぞれの列が別の「メンバー」に対応する行列でなければならないと思われるので、epsの形式を再検討する必要があると思います。 。

+0

ありがとうございました!確かに私はちょうど私のepsベクトルを25列の配列に再フォーマットする必要がありました。素敵で簡単に修正できます。 – CoffeeBean