自然を相手に観測などする場合,
観測機器の不調等により正常にデータが取れない場合がある.
そのような場合, 本来データを書くべきところに,
特定のある数値 (例えば999.) を書いて,
正常にデータが取れていないことを示すことがある.
この「正常なデータでない」ことを意味する数値が欠損値である.
地球流体電脳ライブラリの多くのパッケージでは,
このような欠損値を含むデータを直接扱うことができる.
例えば, 次のようなデータがあったとしよう.
日最高気温の月平均値 | |||||||
月 観測点 | 札幌 | 仙台 | 東京 | 名古屋 | 京都 | 福岡 | 鹿児島 |
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を用いて
配列t1とt7の和をtxとして求めるときは,
NumRu::DCL.gllset(cp,lpara) rz = NumRu::DCL.vradd(rx,ry,n,jx,jy,jz)
としてやればよい. 'LMISS'を.true.としたとき, vraddはt1およびt7の配列要素の少なくとも どちらかが欠損値ならば欠損値を返すようになっているので, この場合, 名古屋, 京都に対応するtxの配列要素は 欠損値となる.
欠損値は glpget/glpsetが管理する内部変数
'RMISS'で指定され, 初期値は 999. である.
999. という値は, 気温としては本来ありえない値なので,
気温データなどの場合には問題はないが,
この値がデータの範囲に入ってしまうような場合には,
'RMISS'の値を変更しておく必要がある.