[(株)数理システム]

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


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

新緑が美しいころですが、皆様いかがお過ごしでしょうか? S-PLUS は 5/14 より、16日まで東京ビッグサイトで開催されます 「国際バイオEXPO」に出展します。興味とお時間のある方はぜひ お立ち寄りください。詳しくは http://web.reedexpo.co.jp/bio/jp/ をご参照ください。

前回は by という関数を使って、車のデータ(サンプルの fuel.frame)を車の種類ごとに回帰するような方法をご紹介しました。

今日は、「最後のapply」族、sapply という関数をご紹介します。

*********** 今回の関数 *****************
sapply
***************************************

当てはめ方などは、基本的に他の apply グループと同じなのですが、第1引数には、ベクトル、データ・フレームをはじめ、S-PLUS オブジェクトなら何を持ってきてもかまいません。

●まず、簡単に数字ベクトルなら、
例1
sapply(1:10, function(x){sum(1:x)})
  [1] 1 3 6 10 15 21 28 36 45 55
# cumsum(1:10) に等しい

第1引数の 1, 2, ... に対して、ひとつひとつ、2つ目の引数で指定された関数(関数定義)の第1引数に渡されます。

●次に、文字ベクトルなら、
例2
objname <- objects()
# 作業データベースにあるオブジェクトの名前一覧

objname[sapply(objname, function(x){class(get(x))=="function"})]
# そのうち、関数のものだけを抽出
# get という関数を使うと、文字列をデータそのものにすることが
# できる

●データ・フレームを引数として与えると、
例3
sapply(fuel.frame, is.factor)
  Weight Disp. Mileage Fuel Type
         F      F        F      F     T

# fuel.frame の各列が因子かどうかのチェック

ここで、lapply という関数を思い出してみましょう。lapply は1つ目の引数にリストかデータ・フレームを渡すと、リストなら各要素に、データ・フレームなら各列に、2つ目の引数で指定した関数を実行しましたね。つまり、上の sapply と同じことをするはずです。

lapply(fuel.frame, is.factor)
$Weight:
[1] F

$Disp.:
[1] F

$Mileage:
[1] F

$Fuel:
[1] F

$Type:
[1] T

# 同じことを実行するが、結果はリストになる。

つまり、sapply では、結果はベクトルか行列になり、lapply は リストを返します。

今回でデータ・フレームとデータ・フレームでの計算に便利な関数をいくつかご紹介しました。次回からは、ご要望の多かったグラフについて順をおってご説明 していきたいと思います。

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

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