hack のためのネタ帳, etc,,,

真偽値

大文字で TRUE, FALSE
短縮表記として T, F も使える

if, else

基本は以下の書式なんだけど地味に罠がある。
if ( EXPRESSION ) { TRUECASE }
if ( EXPRESSION ) { TRUECASE } else { FALSECASE }
TRUECASE と FALSECASE の結果は if, else の外の値と演算出来るんだけど、結果は以下の通り。
> 2*if(F){3}else{5}*7 # 2*5*7=70
[1] 70
> 2*if(T){3}else{5}*7 # 2*3=6
[1] 6
酷い罠だ。
if, else 全体を () もしくは {} で囲めば大丈夫みたい。
> 2*(if(T){3}else{5})*7 # 2*3*7=42
[1] 42
> 2*{if(T){3}else{5}}*7 # 2*3*7=42
[1] 42

grep() を使う場合、match すると c(1)、しないと integer(0) が返ってくる。
> grep("d", "abcdef")
[1] 1
> grep("g", "abcdef")
integer(0)
integer(0) は要素数 0 なのでこのまま if, else に突っ込むとエラーになる。
> if(grep("d", "abcdef")){T}else{F}
[1] TRUE
> if(grep("g", "abcdef")){T}else{F}
Error in if (grep("g", "abcdef")) { : argument is of length zero
従って、grep() を食わせる場合は length() を噛ませる等の工夫が必要になる。
> if(length(grep("d", "abcdef"))){T}else{F}
[1] TRUE
> if(length(grep("g", "abcdef"))){T}else{F}
[1] FALSE

関連:

関連

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です