[(株)数理システム]

(S-PLUS) S-PLUS mini course 第3回


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 の仲間の関数について、紹介します。お楽しみに!

----------------------------------------------------------------

? お問い合わせ/資料請求はお気軽に。
(株)数理システム《S-PLUS》グループ <splus-info@msi.co.jp>