2016-05-17 7 views
0
check.num <- function(x){ 
    if(x>0){ 
    print("Greater than or equal to 1") 
    } else if(x==0){ 
    print("Equals zero") 
    } else if(x<0){ 
    print("Less than zero") 
    } else{ 
    print("Confused") 
    } 
} 

check.num(1) 
#Output: [1] "Greater than or equal to 1" 

check.num(0) 
#Output: [1] "Equals zero" 

check.num(-1) 
#Output: [1] "Less than zero" 

以下のコマンドはどのように値を返すのですか?私は最初のケースでは「0」、2番目の「混乱した」では返されると予想していました。タイプキャスティングはどのようにRで起こっていますか?

?Comparison(又は ?">")から
check.num("") 
#Output: [1] "Less than zero" 

check.num("kj") 
#Output: [1] "Greater than or equal to 1" 

答えて

4

2つの引数が異なるタイプの原子ベクトルである場合、一方が他方のタイプに強制 、 優先の(減少する)ためであります文字、複合、数値、整数、論理であり、 生のものです。

数0は、他の引数(「」または「KJ」)を一致させる文字にキャストされたので、私たちは、これらの比較で終わる:ある

"">"0" ## FALSE 
"kj">"0" ## TRUE 

、それは辞書です比較。

文字と数字の比較でNAが与えられた場合は、それほど驚くことはありませんが、それは言語の定義方法ではありません。

+0

@Ben Bolkerさんの返信をありがとう、私の問題を解決しました。 私は、辞書編集の比較を理解するために、以下のコードを試しました。 if( "" <"0")TRUEその他の場合FALSE #Output:[1] TRUE if( "kj"> "0")TRUE else FALSE #Output:[1] TRUE –

+1

チェックマークをクリックすることをお勧めします( 'if(condition)TRUE else else FALSE'は必要ありません)...'(condition) 'と同じ値を返すだけです –

+0

Thumbs up。再度、感謝します。 :) –

関連する問題