为什么TRUE =="TRUE"在R中为TRUE?

Mah*_*hdi 53 comparison boolean-logic boolean r

  1. 为什么TRUE == "TRUE"TRUE在R'
  2. ===在R中有任何等价物吗?

更新:

这些都回归了FALSE:

TRUE == "True"
TRUE == "true"
TRUE == "T"
Run Code Online (Sandbox Code Playgroud)

唯一的TRUE价值是TRUE == "TRUE".

如果检查identical()一切正常.

第二次更新:

通过===运营商我的意思是检查的过程数据类型一的变量.在这种情况下,我假设==操作符只会比较变量的,而不是它们的数据类型.

pla*_*pus 57

根据帮助文件?`==`:

如果两个参数是不同类型的原子向量,则一个被强制为另一个的类型,优先级(递减)顺序为字符,复数,数字,整数,逻辑和原始.

所以TRUE被强迫"TRUE"(即as.character(TRUE)),因此是平等.

运算符的等价物===(即两个对象相等且类型相同)将起作用identical:

identical(TRUE, "TRUE")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我必须编辑我的答案,因为我想到了它:实际上`==`强制到一个普通类型,优先顺序是字符,复数,数字,整数,逻辑和原始.所以它实际上是TRUE被强制为"TRUE"而不是相反,我的坏. (2认同)
  • 在 R 中,对 `NA` 或 `NaN` 没有任何“==”,甚至是它们自己。 (2认同)

42-*_*42- 10

TRUE和FALSE是R中的保留字.当他说任何非零值为TRUE时,我不认为eznme是正确的(在编辑之前),因为TRUE == "A"评估为FALSE.(这在解释为什么TRUE == 1评估为TRUE时是正确的,但它不能解释结果TRUE == 7

plannapus给出的解释取自描述行为的背景as.logical.它更接近于"真理",因为它是由==创建此结果的运算符对字符的TRUE的隐式强制.虽然T并且F最初被赋予TRUE和FALSE的值,但是可以将它们重新分配给其他值或类型.

> 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
Run Code Online (Sandbox Code Playgroud)

(我之前错误地写道,由TRUE ="TRUE"引起的强制是逻辑的;它实际上是通过as.character(TRUE)返回"TRUE".)