[(株)数理システム]

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


S-PLUS mini course の4回目をお届けします。

早いもので、明日から4月ですね。異動や転勤があったり、学年があがったり、4月はまさに出会いと別れの季節ですね。数理システムにも、明日からフレッシュな新人が入ってまいります。楽しみです。

さて、前回は apply という関数とその応用について触れました。 そして、「実際に使ってみた」といううれしいお便りを小林さまから いただいたわけなんですが、

***********************************************
apply は答えをベクトルにできるときにのみ、使うことができる
***********************************************

apply という関数は「行列、配列やデータ・フレームに適用でき」ます。行列に対してこれを用いますと、答えは必ず、ベクトルに なりますから問題ありません(行列はすべての列が数値なら数値、 文字ならば文字、と型(mode)が統一されていなければならないデータでしたね)。

ところが、Excel などのデータをインポートされますと、見た目は 行列であっても、これはデータ・フレームです。データ・フレームは 各要素の長さが等しいベクトル、であるリストですから、ある列は 数値、ある列は文字、・・・と列ごとに型を変えて持つことができます。実際、小林さまのデータは、1列目のみが日付になっていましたね。

そのデータ・フレームに apply を適用すると、すべての列が数値 ならば、問題なく計算できますが、小林さまのデータでは、1列目が 日付、日付の平均が計算されてまた日付データとなります。これをそのほかの数値データと一緒にベクトルにしようとして、エラーになったのです。

解決方法は apply(data[, -1], mean) のように、1列目を除いて計算させることでした。今回はこれでよかったけれど、いつもいつも不特定のある列を除くわけにはいかないよ、ということもあると思います。

そこで

*********** 今回の関数 *****************
lapply
***************************************

です。この関数は、「第1引数で指定したリストの各要素に、第2引数で指定した関数を当てはめる」という働きをします。apply の場合は、第2引数が「1, 2」という次元をあらわす数値でしたが、この関数では、これが抜けて、第2引数が関数名となります。

さらに apply との違いですが、apply は結果がベクトル(行列も含みます)になるのに対して、lapply では、リストになります。したがって、もう少し、複雑な検定の関数だとか、回帰など統計の関数を当てはめることもできます。

データ・フレームは実は、各要素が同じ長さのベクトルであるリスト(日本語変ですか?)であるため、使うことができるワザなんですね。

データ・フレームの各列がどういうクラスを持つデータなのか、知るには、

lapply(data, class)

などとします。

次回は、またまたこの関数の親戚にあたる関数をご紹介します。 お楽しみに。

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

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