No.15873 applyの引数にifを使う方法  【仲村渠】 2011/12/04(Sun) 18:25

applyの第3引数にifを使う方法がわかりません.

applyの第1引数にデータフレームxを渡して,データフレームの特定列の値に
応じて適用する式を違える計算を行ごとに進める処理が成功しません.
具体的な例として以下のようなスクリプトが成功しません.

apply(x,1,if,xx1>=0,xanswer<-xx22,xanswer<-x$x2^3)
ここに,データフレームxはx1とx2のふたつの列を持ち,行数については任意である.
applyの第4引数はifの条件文,第5引数は条件文が真の場合の計算式,
第6引数は条件文が偽の場合の計算式である.
データフレームxの列x1の値がゼロ以上なら,列x2の値を2乗してその結果を列answerに入れる.
データフレームxの列x1の値が負なら,列x2の値を3乗してその結果を列answerに入れる.

よろしくお願いいたします.

No.15876 Re: applyの引数にifを使う方法  【青木繁伸】 2011/12/04(Sun) 19:18

無名関数を使うというやり方はご存じでしょうか?

x
answer<−apply(x,1,function(z) if (z[1]>=0) z[2]^2 else z[2]^3)
apply(x,1,...というのは,xの各行(列x1とx2の2つの数値からなる)を処理します。どのように処理するかが無名関数function(z)で,渡される2要素からなるベクトルをzととして,if (z[1]>=0) z[2]^2 else z[2]^3という計算をします。結果はベクトルで返されるので,それをxanswer に付値する。ということになります。

なおこの場合はベクトル演算を使って,以下のようにするのがベストです。

xanswer<−ifelse(xx1 >= 0, xx22,xx2^3)

No.15880 Re: applyの引数にifを使う方法  【仲村渠】 2011/12/04(Sun) 20:02

青木先生

無名関数について勉強しておりませんでした.
ご教授いただいた方法で正しく処理することができました.

早々にご回答いただいたことに大変感謝しております.
お時間いただきまして誠にありがとうございました.

● 「統計学関連なんでもあり」の過去ログ--- 045 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る