2013-02-18 11 views
48
  1. なぜTRUE == "TRUE"TRUEであるか?
  2. Rに===の相当品はありますか?

更新:なぜTRUE == "R"の "TRUE"はTRUEですか?

これらはすべてFALSE戻ってきている。

TRUE == "True" 
TRUE == "true" 
TRUE == "T" 

のみTRUE値がTRUE == "TRUE"です。

identical()の場合、すべて正常に動作します。

セカンドアップデート:私はデータタイプ変数をチェックする処理を意味

===オペレータによる。この場合、==演算子はの変数だけを比較し、データタイプは比較しないと仮定しました。

+0

として定義思えFALSEと「FALSE」Fは、=== 'で'ですJavaScriptの演算子? [Strict Equality Comparison Algorithm?](http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.6) – agstudy

+0

@agstudy多くのC主導の構文言語では、値とデータの両方にこの演算子があると思います型チェックを同時に行います。私は他の言語についてはわかりません... – Mahdi

+1

TRUE == 1とTRUE == 1.0とTRUE == 1.0000000000000001(と0.99999999999999999)も真です。一般的に、IEEE754に丸められるには1.0に近いものがすべてです。 –

答えて

53

ヘルプファイル?`==`によると:2つの引数が異なる種類の原子ベクトルの場合

、一方が他方のタイプに強制変換され、優先された文字の(減少)ため、複雑で、数値、整数、論理、および未加工です。

SoはTRUE"TRUE"(すなわちas.character(TRUE))、したがって、平等に強制変換されます。

オペレータ===の当量(すなわち2つのオブジェクトが等しいと同じタイプのされている)機能identical次のようになります。

identical(TRUE, "TRUE") 
[1] FALSE 
+0

答えをいただきありがとうございますが、 'identical'はうまく動作しますが、' TRUE == "T" 'または' TRUE == "true" 'はまだ' FALSE'です。何か案が? – Mahdi

+2

私は逆に考えたので、私の答えを編集しなければなりません:実際には '=='は一般的な型を強要し、優先順位は文字、複雑、数値、整数、論理、それは実際に真であり、逆ではなく、真実に強制されます。 – plannapus

+0

私はそれが今正しいと思います。 –

10

TRUEとFALSEはR.内の単語を予約している私はeznmeだったとは思いませんTRUE == "A"はFALSEと評価されるため、ゼロ以外の値がTRUEであると言ったときに修正前に修正してください。 (それはTRUE == 1がTRUEと評価理由を説明して正しいされているだろうが、それはplannapusによって与えられた説明はas.logicalの動作を説明する文脈から取り出したTRUE == 7

のための結果を説明できないだろう。それはに近いですTFにはTRUEとFALSEの値が与えられていますが、他の値や型に代入することができます。

このように、この結果を作成するのは ==演算子によってTRUEと文字の暗黙の強制です。
> TRUE == as.logical(c("TRUE", "T", "true", "True")) 
[1] TRUE TRUE TRUE TRUE 

> TRUE == 7 
[1] FALSE 
> TRUE == as.logical(7) 
[1] TRUE 
> TRUE == as.logical("A") 
[1] NA 

(以前私は誤って、 TRUE == "TRUE"は論理的です。実際にはas.character(TRUE)を介して "TRUE"を返します。

TRUE == "TRUE"

に加えて)

+0

前の見積もりは、 '=='が一般的な型に強制変換されていると仮定したため、実際には 'as.logical'のためのものでした。私の修正を参照してください。 – plannapus

+0

'TRUE ==" A "はFALSEと評価されています。 –

+0

しかし、TRUEと "TRUE"も異なった値です...実際は異なったモードです。 –

3

これらもまた真である:

  • TRUE == 1
  • TRUE == 1.0
  • TRUE == 1.0000000000000001
  • TRUE == 0.99999999999999999 など、一般的にはすべての値が十分に近いIEEE754に丸められた1.0になる。

しかし、何よりinteresingであることは何if()チェックです:それはnon-falseをチェックします。実際には、このプロット!:

if(4.0) plot(1) 

私はトリガーif()いけない唯一の値が0だと思う、彼らは正確に0

+2

? ""明らかに、引数が論理的に強制されていることを示している場合。 –

+0

偽でないものはすべてtrueに強制されます。 datatype-widthはここでは興味深いわけではありませんが、どの元の値がtrueにマッピングされ、どの値がfalseにマッピングされるのかについては興味深いです。 –

+2

FALSE以外の値はすべてTRUEに強制されます。 NAはエラーを投げます。 –

関連する問題