暇人の研究室

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

<

【R言語】Rでのプログラミング  その2

・条件式と論理記号

 

==:等しい !=:等しくない !:~でない

 

・条件ごとに異なる処理を行う

 

条件ごとに異なる処理を行う場合はswitch()を使います。

 

> x<-2
> y<-5
> z<-"+"
> switch(z,
+ "*"={print("掛け算");x*y},
+ "+"={print("足し算");x+y})
[1] "足し算"
[1] 7

 

第1引数には条件を指定します。次に続くのが実行式であり、文字列と「;」を挟んだ右側にあるやつです。

 

 

・繰り返し文

 

次はスクリプトを書く上で絶対必須である繰り返し分を取り上げていきます。Rでは、for()で繰り返し処理ができます。

 

試しに1から10000までの数字の合計を繰り返しで計算してみます。

 

> x<-1:10000
> i<-0
> for(a in x){
+ i<-i+a
+ }
> i
[1] 50005000

 

これは足し算の結果を「i」というオブジェクトに保存し、そしてループで「i」を上書きしていくというものです。

 

また繰り返す回数をしてしないときはwhile()を使います。

 

> i<-0
> while(i<100){
+ i<-i+1
+ }
> print(i)
[1] 100

 

ここで「i」の更新方法(上の式の i<-i+1 の部分)を指定忘れると無限にループになりRを強制終了しないといけなくなるので注意しましょう。

 

 

・ループの終了とスキップの指定

 

nextbreakを使えば条件が満たされた場合にループを終了したりスキップすることができます。

 

 

 

> i<-0
> while(i<100){
+ i<-i+1
+ if(i%%30!=0)next
+ if(i%%90==0){
+ cat("\n")
+ break
+ }
+ cat(i,"\t")
+ }
30 60

 

この式は30の倍数になったら画面に表示し90で打ち切るというものです。30で割れるかどうかは%%演算子(余りを求める演算子)で調べられます。

 

もちろん割り切れる場合は0ですが、割り切れない場合は0ではありません。なので、条件式の後にnextを加えることによって、割り切れなかったら次に行くとしています。

 

そしてiが90になったら、cat()で結果を画面に出力させ、breakでループを打ち切るとしています。