57
  1. なぜRにTRUE == "TRUE"いるのですか?TRUE
  2. ===Rに相当するものはありますか?

アップデート:

これらはすべて戻ってきていFALSEます:

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

唯一のTRUE値はTRUE == "TRUE"です。

すべてをチェックする場合は正常にidentical()動作します。

2番目の更新:

演算子とは、変数のデータ型===チェックするプロセスを意味します。この場合、演算子は変数ののみを比較し、データ型も比較しないと想定しました。==

4

3 に答える 3

61

ヘルプファイルによると?`==`

2つの引数が異なるタイプのアトミックベクトルである場合、一方は他方のタイプに強制変換され、優先順位の(降順)は文字、複素数、数値、整数、論理、および生です。

したがってTRUE、強制されて"TRUE"(つまりas.character(TRUE))、したがって平等になります。

===他の言語の演算子(つまり、2つのオブジェクトが等しく、同じタイプである)に相当するものは、関数になりidenticalます。

identical(TRUE, "TRUE")
[1] FALSE
于 2013-02-18T08:31:14.353 に答える
12

TRUEとFALSEはRの予約語です。ゼロ以外の値がTRUEであると彼が言ったとき、eznmeはFALSEと評価されるため、(編集前に)正しくなかったと思いTRUE == "A"ます。(これは、なぜTRUE == 1TRUEと評価されるのかを説明する上で正しいはずですが、結果を説明することはできません。TRUE == 7

plannapusによる説明は、の動作を説明するという文脈から外されましたas.logical==この結果を作成するのは、演算子による文字へのTRUEの暗黙の強制であるため、「真実」に近いです。Tおよびには最初にTRUEとFALSEの値がF与えられますが、他の値またはタイプに再割り当てすることができます。

> 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"を返します。)

于 2013-02-18T08:40:32.787 に答える
3

に加えて

TRUE =="TRUE"

これらも当てはまります。

  • TRUE == 1
  • TRUE == 1.0
  • TRUE == 1.0000000000000001
  • TRUE == 0.99999999999999999など、一般に、すべての値も1.0に十分近く、IEEE754に丸められます。

しかし、もっと興味深いのは、チェックするものです。if()チェックしますnon-false。実際、これはプロットします!:

if(4.0) plot(1) 

トリガーしない値if()は0、F、FALSE、および「FALSE」のみであり、正確に0として定義されているように見えます。

于 2013-02-18T09:06:10.190 に答える