読者です 読者をやめる 読者になる 読者になる

暇人の研究室

金融工学やR言語・統計学について書いてます。

<

【R言語】functionで関数を自作するための基礎知識 その1

 

Rの長所としてはfunction()という関数を使うことで特定の変数に自分の作った計算コードを保存できるという点があります。まあ自分で複雑なfunctionのスクリプトを書いてパッケージが作れるくらいが理想なのですが、現実はパッケージ頼りという人が結構多いと思います。

 

まあオブジェクト指向とif・forってプログラミングで一番躓く場所なので、そうなのも残念ながら当然という感じもしますが、とりあえずパッケージの関数の中身を見てRでは >?関数名 で関数の中身を見ることができます。

 

あーこういう処理をしてるんだなというのを少しずつ勉強していけば、いずれ自分でスクリプトを描けるようになると思います。

 

 

 

というわけで今回はfunction()の基本的な書き方について見ていきます。まず、function()を使った関数の定義式の書き方はこんな感じです。

 

 

>関数名 <- function( 引数1, ・・・ , 引数n ) {

<関数本体>

}

 

試しに簡単な関数を自作してみます。

 

##足し算する関数の作成##

> add<-function(x=10,y=20){
+ x+y
+ }

 

##引数を指定しなかった場合デフォルトの数値が使われる

 > add()
[1] 30

 

##引数を指定するとその値で計算してくれる

> add(100,200)
[1] 300

 

 

 

今度は少し実践的な書き方を見ていきます。関数で様々な演算を行った後に、計算結果を返すときは return または invisible を利用するのが一般的です。

 

return の場合は、計算結果を返すと同時に画面上に結果が表示されます。一方、invisible は計算結果を返しますが結果は画面上に表示されません。

 

 

 

###  return で返す関数 ###
> add <- function(x = 10, y =20) {
+ p <- x + y
+ return(p)
+ }



###  invisible で返す関数 ###
> add2 <- function(x =10, y = 20) {
+ p <- x + y
+ invisible(p)
+ }

 

 

関数の計算結果を受け取る変数があると、計算結果が変数に代入されるため、return と invisible どっちでも同じになります。

 

>x1 <- plus1(15, 25)
>x1
## [1] 40

>x2 <- plus2(15, 25)
>x2
## [1] 40

 


しかし、関数の計算結果を受け取る変数がないと、return だと計算結果が画面上に表示させるのに対して、invisible では計算結果を画面上に表示されず、見かけだけだと何も起こっていないように見えます。

 

> add(10, 20)
[1] 30

> add2(10, 20)
>

 

まあこの2つの違いはそこまで重要ではないのですが、パッケージのコードとか見るとreturnとかinvisibleとかが出てくるのでこの2つがどういう意味をもっているのかは知っておく必要があると思います。