2012年11月13日火曜日

R言語のsubset関数の調査

とあるR使いとコードについて話をしたとき、subset関数について話が出た。データ操作でよく使われそうなものなので、どういう挙動か見てみることにする。

subset関数はベクトル、マトリックス、データフレームから条件を満たす行のみを抽出する。

使用方法は次のようになっている。

  • subset(x, ...)
  • subset(x, subset, ...)
  • subset(x, subset, select, drop = FALSE, ...)(マトリックスやデータフレームに対して)

引数は次のような意味をもつ。

  • xは部分集合を求めたいオブジェクト。ここではデータフレームなどのデータと思って差支えない。
  • subsetは残しておきたい要素、行の論理値表現。欠損値はfalseとみなされる。
  • selectはデータフレーム、マトリックスから抜き出したい列を選ぶ表現を書く。
  • dropは添え字オペレータ[で扱えるものにする。例えば1列のマトリックスはtrueに設定すればベクトル化されることになる。
  • ...にはさらに渡す引数や他のメソッドからの引数を与える。

subsetは総称的関数であり、マトリックス、データフレーム、ベクトルに対するメソッドが与えられている(リストも含む)。パッケージやユーザはさらにメソッドを追加することもできる。通常のベクトルであれば単にx[subset & !is.na(subset)]とすればよい。データフレームに対しては、引数subsetは行に対して働く。subsetはデータフレームで評価され、列は変数として(名前で)言及されることもある。引数selectはデータフレームとマトリックスに対するメソッドにおいてのみ存在する。最初に列名を対応する列番号に置き換え、得られた整数ベクトルを索引づけるために用いる。これにより、標準的な索引づけの慣習は、例えば列の範囲を簡単に特定するあるいは1列をドロップするといったことができるようにしている。引数dropはマトリックスとデータフレームに対して索引づけのメソッドに移される: マトリックスに対する既定の動作はそのような添字をつけるのとは異なる。因子は部分集合化した後には空の水準があるかもしれない: 使われていない水準は自動的に削除される。

返り値は、ベクトルであれば選ばれた要素を、データフレームやマトリックスでは選ばれた行と列を引数のxに似たオブジェクトで返す。

この関数はインタラクティブな使用を意図した便利な関数である。プログラミングでは"["のような標準的な部分集合化する関数を利用するのがよい。特に普通ではない評価をするような部分集合を求める引数では、思わぬ結果を引き起こすことになるかもしれない。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計