S-PLUS mini course 3回目です。
前回の復習ですが、前回では、関数 apply を取り上げました。この関数を使うと、行列あるいはデータ・フレームの行方向、あるいは列方向ごとの計算が可能になりました。例として、
> apply(air, 2, mean)
ozone radiation
temperature wind
3.247784 184.8018 77.79279 9.938739
# air というサンプル・データ・フレームの列ごとの平均を求める
を取り上げました。
前回のメールでは、3番目の引数は「計算をさせたい関数の名前(あるいは、関数定義)」でした。上の例では、3つ目の引数は mean という名前の S-PLUS 関数でしたが、では、関数定義を指定する、ってどういうことでしょうか?
*********** 今回のポイント ***************
3つめの引数は関数定義にすることができる
apply(air, 2, function(x)sqrt(var(x)))
***************************************
上のコマンドを見ると、3つ目の引数は関数名ではなく、「関数定義」になっていますね(ちなみに、分散の平方根=標準偏差 を求めています)。
このように、apply の中で、関数を定義してそれを計算させることができます。この関数は関数名を持たず、「匿名関数」と呼ばれ、apply が終了すると同時になくなってしまいます。
この関数、もちろん、本文が2行以上になってもかまいません。ただ、注意しなければいけないこととして、必ず
があります。逆に、3番目の引数として指定することができる S-PLUS の既存の関数もこの条件を満たす必要があります。
では、その他の引数はどうやって与えたらいいでしょうか?たとえば、mean という関数は、データが欠損値を持つ場合どうするかを指定する na.rm という引数があります。これをデフォルト値から、変えたいときは、
apply(air, 2, mean, na.rm=T)
と、4番目以降に「名前 = 値」の形式で与えることができます。
次回はこの apply の仲間の関数について、紹介します。お楽しみに!