if ~ else ~と ifelse の違い
ifelse(x>0,1,0)
と
if (x>0) {
1
} else {
0
}
の根本的な違いは?
x<-0として実行してみると
> x<-0
> ifelse(x>0,1,0)
[1] 0
> if (x>0) {
+ 1
+ } else {
+ 0
+ }
[1] 0
同じ結果が返ってくるが
x<-0:9 とベクトルで試してみると違いが出てくる
> x<-0:9
> ifelse(x>0,1,0)
[1] 0 1 1 1 1 1 1 1 1 1
> if (x>0) {
+ 1
+ } else {
+ 0
+ }
[1] 0
Warning message:
In if (x > 0) { :
the condition has length > 1 and only the first element will be used
ifelseはちゃんとベクトルで返ってくるけど、if ~ else ~はベクトルの最初だけ実行してあとは実行しないで警告が発生する
うまく説明できないけど
ifelseはオブジェクトというか関数というかそういうもんで
if ~ else ~は制御文
プロンプトから
>ifelse
って打てば、ifelse関数の中身のソースが表示されるけど
>if
って打つと
+
となって「完結してないので続きを」となる
うまく説明できないけど、、、
例えば、エクセルでセルに=if(A1>0,1,0)とかif関数を入力できるけど、これをセルにずーっとコピーして、=if(A2>0,1,0) =if(A3>0,1,0) ・・・ってやつがベクトル化ってこと
ifelseにベクトルを渡すのはこのようにエクセルでセルにコピーしてると考えるとわかりやすいかも(イメージ的に)
if ~ else ~ の方は、エクセルのセルに入れられないからベクトルを渡すことができない
まったくうまく説明できないけど、、、
この辺の感覚が理屈抜きで身につけば、R言語スキルもちょっとは上がってきてるのかもね