<<目次へ


自分で関数を作ってみる ― 簡単なプログラミングのルールを学びましょう



■関数の定義の仕方

 myprog()を定義します。myprog()の引数に指定した値の2乗の値を返します。値を返す方法はいくつかありますが,ここでは以下の2点(returnを使う場合と使わない場合)とを区別しておいてください。

> myprog<-function(x) #return()で値を返す
+ {
+ pow=x^2
+ return(pow)
+ }
> myprog(2)
[1] 4
> myprog<-function(x) #return()を使わずに値を返す
+ {
+ pow=x^2
+ pow
+ }
> myprog(2)
[1] 4

■条件によって処理をする if構文

 引数xとyについて四則演算を行います。hanteiには1〜4までを指定し,1なら足し算,2なら引き算,3なら掛け算,4なら割り算を行います。それ以外の値が指定された場合は警告を出してプログラムを終了します。

―プログラム例

myprog<-function(x,y,hantei)
{
        if(hantei==1){
                z=x+y
        }else if(hantei==2){
                z=x-y
        }else if(hantei==3){
                z=x*y
        }else if(hantei==4){
                z=x/y
        }else{
                stop("フザケンナ\n")
        }
        return(z)
}

―実行例

> myprog(2,5,1)
[1] 7
> myprog(2,5,2)
[1] -3
> myprog(2,5,3)
[1] 10
> myprog(2,5,4)
[1] 0.4
> myprog(1,2,6)
以下にエラーmyprog(1, 2, 6) : フザケンナ

■繰り返しの処理 for構文

 例えばcat()を使用して「私はシリウスです」という文字列を5回繰り返してみます。

―プログラム例

myprog<-function()
{
        for(i in 1:5){
                cat("私はシリウスです\n")
        }
}

―実行例

> myprog()
私はシリウスです
私はシリウスです
私はシリウスです
私はシリウスです
私はシリウスです

■ループ while構文

 指定した条件が真である限り処理を実行します。

myprog<-function()
{
        x=0
        while(x<=5){
                cat("私はシリウスです\n")
                x=x+1
        }
        cat("ループを抜けました\n")
}
> myprog()
私はシリウスです
私はシリウスです
私はシリウスです
私はシリウスです
私はシリウスです
私はシリウスです
ループを抜けました

■強制的に処理を中止するbreak,強制的に次の処理に移るnext

 for構文やwhile構文の途中で繰り返しを中止したい場合や,ある条件のときは(本来実行すべき処理を無視して)次の処理に写したいときに使います。

☆breakの使い方

―プログラム例 その1(通常の繰り返し)

myprog1<-function()
{
        for(i in 1:10){
                x=i
                print(i)
        }
}

―出力例

> myprog1()
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

―プログラム例 その2(breakを使った場合)・・・もしxが5よりも大きければ処理を中止する

myprog2<-function()
{
        for(i in 1:10){
                x=i
                if(x>5)break
                print(i)
        }
}

―出力例

> myprog2()
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

☆nextの使い方

―プログラム例 その1(通常の繰り返し)

myprog1<-function()
{
        for(i in 1:10){
                x=i
                print(i)
        }
}

―実行例

> myprog1()
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

―プログラム例 その2(nextを使った場合)・・・もしxが3よりも大きく,かつ7よりも小さい場合はnext以下の処理を無視する。つまり4,5,6のときはnext以下の処理が処理されない。

myprog2<-function()
{
        for(i in 1:10){
                x=i
                if(x>3 && 7>x) next
                print(i)
        }
}

―実行例

> myprog2()
[1] 1
[1] 2
[1] 3
[1] 7
[1] 8
[1] 9
[1] 10