Rのapplyの使い方

1897 ワード

R言語のapplyファミリー関数はCで書かれているため,applyを用いた遍歴の実行効率は自分で作成したループ文よりはるかに高い.
関数の説明
アプリの使い方は簡単です.
apply(X, MARGIN, FUN, ...)

X:配列(array)です.つまり、入力は同じタイプのデータでなければなりません.数値型であるか、文字型である必要があります.ハイブリッドデータ型のdata.frameであれば、as.matrixでデータの強制変換を試みます.
MARGIN:行(1)または列(2)に関数を適用することを示します.
FUN:でもRはmean、sumなどの関数を持っています.自分で書いた関数でもいいです....:FUNの追加パラメータ
単純なケース
まず、2行4列のマトリクスを作成します.
ma  ma
     [,1] [,2] [,3] [,4]
[1,]    1    3    1    7
[2,]    2    4    6    8

行ごとに平均を求める
> apply(ma,1,mean)
[1] 3 5

に相当
mean(ma[1,]) # 3
mean(ma[2,]) # 5

列ごとに平均を求める
> apply(ma,2,mean)
[1] 1.5 3.5 3.5 7.5

次のようになります.
mean(ma[,1]) # 1.5
mean(ma[,2]) # 3.5
...

PS:そこで私はMARGINの1がma[x,y]のx,MARGINの2が[x,y]のyに対応することを発見した.
ステップアップ:...の役割
使用法の説明では、...は、関数に追加のパラメータを提供するのに適している.具体的には、1つの関数に複数のパラメータがある場合、...は、1つのパラメータ以外のパラメータの入力を担当する.例えばmean(x, trim = 0, na.rm = FALSE, ...)には、na値をどのように処理するかのパラメータがあります.
#     NA 
> ma[1,1]  ma
     [,1] [,2] [,3] [,4]
[1,]   NA    3    1    7
[2,]    2    4    6    8

デフォルト:
> apply(ma,1,mean)
[1] NA  5

パラメータna.rm=TRUEを追加
> apply(ma,1,mean,na.rm=TRUE)
[1] 3.666667 5.000000

ステップステップ:カスタム関数かすたむかんすう
Pythonは使い慣れているので、配列を巡り、複数の関数を組み合わせるときは、基本的にforサイクルを考えます.Rにループを書くのは非常に非効率なので、できるだけapplyを使います.1サイクルで複数の演算に触れると,Rで直接関数を持ち込むことは不可能である.しかし、applyでは自分で関数を作ることができます.
次に、少し複雑な点の例を計算し、行ごとにループしてマトリクスの1列目に1を加え、1列目と2列目の平均値を計算し、各行を加算します.ツッコミ:私もなぜこれらの操作をするのか分かりませんが、関数をプレゼンテーションするために
ma
     [,1] [,2] [,3] [,4]
[1,]    1    3    1    7
[2,]    2    4    6    8

myfunc