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)
などとします。
次回は、またまたこの関数の親戚にあたる関数をご紹介します。 お楽しみに。