1.3 欠損値処理

自然を相手に観測などする場合, 観測機器の不調等により正常にデータが取れない場合がある. そのような場合, 本来データを書くべきところに, 特定のある数値 (例えば999.) を書いて, 正常にデータが取れていないことを示すことがある. この「正常なデータでない」ことを意味する数値が欠損値である. 地球流体電脳ライブラリの多くのパッケージでは, このような欠損値を含むデータを直接扱うことができる.

例えば, 次のようなデータがあったとしよう.



日最高気温の月平均値  
$\backslash$観測点 札幌 仙台 東京 名古屋 京都 福岡 鹿児島
1月 -1.1 5.0 9.5 8.4 999. 9.3 12.2
7月 24.8 25.6 28.8 999. 999. 30.6 31.4



1月の京都, 7月の名古屋, 京都の 999. は データが正常に得られなかったことを示している. 1月, 7月それぞれの月のデータを配列t1, t7に読み込んで 平均値を算出するとき, 999. まで有効なデータとして扱ってしまうと, とんでもない値が算出されてしまう. そこで, 以下のように glpget/glpsetが管理する内部変数'LMISS'.true.として(初期値は.false.) RFALIBのraveを用いれば, 999. を除いた平均値が算出できる.

      NumRu::DCL.gllset(cp,lpara)
      TAVE1 = return_value = NumRu::DCL.rave(rx,n,jx)
      TAVE7 = return_value = NumRu::DCL.rave(rx,n,jx)

なお, 欠損値処理をおこなうことができるメソッド(元関数)では, すべての配列要素が欠損値のときは欠損値が返される.



また, VRBLIBのvraddを用いて 配列t1t7の和をtxとして求めるときは,

 

      NumRu::DCL.gllset(cp,lpara)
      rz = NumRu::DCL.vradd(rx,ry,n,jx,jy,jz)

としてやればよい. 'LMISS'.true.としたとき, vraddt1およびt7の配列要素の少なくとも どちらかが欠損値ならば欠損値を返すようになっているので, この場合, 名古屋, 京都に対応するtxの配列要素は 欠損値となる.



欠損値は glpget/glpsetが管理する内部変数 'RMISS'で指定され, 初期値は 999. である. 999. という値は, 気温としては本来ありえない値なので, 気温データなどの場合には問題はないが, この値がデータの範囲に入ってしまうような場合には, 'RMISS'の値を変更しておく必要がある.