R言語での自作関数の作り方・使い方【第4回】

[公開日]2016/07/22[更新日]2017/04/06 [カテゴリー]R言語入門 Written by  IMIN

初心者向けのR言語講座

【第1回】ベクトル・行列の作成と四則演算・要素の参照
【第2回】データ読み込みとデータの取り出し方
【第2.5回】Rで解析する上で知っておきたい便利なコマンド集
【第3回】Rで線形モデルによる回帰分析
【第4回】Rでの自作関数の作り方・使い方 ←今ここ!!
【第5回】グラフのプロットと画像保存の方法(回帰直線)【終】

今回は自作関数の作り方・使い方について解説していきます。他のプログラミング言語を勉強したことがある人ならお分かりかと思いますが、自作関数とは非常に便利なものです。R言語でもこの関数というものが自分で定義することが出来ます。

今まで、回帰分析の関数"lm()"など、既存の関数を使ってきました。これらはR言語側が既に用意してくれていた関数です。そして、この関数というものは自分で定義することで自作することもできるのです。普段からよく行う操作があるのであれば、その関数を自分で関数を作って、一度Rに読み込ませれば、それからは自由に作った自作関数を使うことができるのです。

 
 

関数の作り方

関数を作るときの基本的な書き方は以下のようになります。

関数名 <-function(引数){
関数内で行う処理
}

これをRの実行環境に読み込ませることによって、作った関数が使えるようになります。※引数はカンマ”,”で区切ることによって複数取ることも出来ます。

では実際に簡単な関数を作ってみます。今回はちょっと特殊な計算を関数にしてみます。

プログラム
fun1 <- function(x){
a <- x^2
b <- x+10
ans <- a+b
return(ans)
}

この関数をR上で全文実行して、関数定義を行います。これで、fun1というオリジナルの自作関数が出来ました。どのような関数なのかというと、

「引数で入れた任意のxという数字について”xの2乗”と”xに10足した数”を足し合わせ、その結果を返す。」

という関数です。

ではこの関数を使ってみましょう!例えば引数に10を入れてみます。

プログラム
fun1(10)
[1] 120

というような結果になりました。120という数字が返ってきていますね。実際に計算をしてみるとわかりますが、正しく関数が作られていることが確認できました。

例:ロジスティック回帰分析の関数

関数の作り方はお分かりいただけたでしょうか。でも、実際にこの関数をどのように使えばいいのか。基本的には「よく使う解析」を関数として作っておいて、関数を呼び出すだけでデータ解析が出来るようにしておくのが便利です。

例えば、ロジスティック回帰分析をして、必要なデータを抽出し、エクセルファイルまでの流れを一つの自作関数にまとめておけます。そうすることで、1行のプログラムでロジスティック回帰分析の結果をエクセルファイルに出力することが出来るのです。

ロジスティック回帰分析の場合について、参考用の関数を作ってみました。

プログラム
fun2 <- function(dat,num){
ans <- glm(df$病気~.,data=dat,family=binomial)
s.ans <- summary(ans)
coe <- s.ans$coefficient
N <- nrow(df)
aic <- AIC(ans)
result <- cbind(coe,aic,N)
result[2:nrow(result),5:6] <- ""filename <- paste("logistic回帰-sample-",num,"変量.csv",sep="")
write.table(matrix(c("",colnames(result)),nrow=1),filename,append=F,quote=F,sep=","
,row.names=F,col.names=F)
write.table(result,filename,append=T,quote=F,sep=",",row.names=T,col.names=F)
write.table("",filename,append=T,quote=F,sep=",",row.names=F,col.names=F)
}

この関数は、datにロジスティック回帰分析用のデータ、numに何変量の回帰分析をしたかの数字を引数にとります。これによって目的変数が病気の場合について解析が出来ます。

sample-data

↑今まで使ってきた、このデータを用いて解析を行ってみます。

プログラム
df <- read.csv("sample-data.csv",header=T,row.names=1)
fun2(df[,c(5,1,2,3)],3)

データを読み込んで、解析まで2行で済みますね。これだけで、エクセルファイルに解析結果が出力されました。

ちなみに結果はこんな感じ。

関数ロジスティック

まとめ

自作関数をの作り方と、自作関数を使う便利さはお分かりいただけましたでしょうか。特に同じような解析を複数回行う場合、プログラムがどうしても長くなってしまいます。その時に決まった作業を行うための関数を作っておけば、プログラムも短くなりますし、すっきりとした見やすいプログラムにもなります。

是非、関数を使いこなして綺麗なプログラムを書けるようになりたいものですね。

初心者向けのR言語講座

【第1回】ベクトル・行列の作成と四則演算・要素の参照
【第2回】データ読み込みとデータの取り出し方
【第2.5回】Rで解析する上で知っておきたい便利なコマンド集
【第3回】Rで線形モデルによる回帰分析
【第4回】Rでの自作関数の作り方・使い方 ←今ここ!!
【第5回】グラフのプロットと画像保存の方法(回帰直線)【終】

  • スポンサーリンク

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA