R 将“TRUE”字符串强制为 TRUE 逻辑是怎么回事?

tur*_*ics 7 string boolean r coercion

所以,我发现了这一点:

> TRUE == "TRUE"
[1] TRUE
> TRUE == "BOO"
[1] FALSE
> TRUE == "true"
[1] FALSE
> TRUE == "T"
[1] FALSE
> FALSE == "FALSE"
[1] TRUE
> FALSE == "F"
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

根据 R 文档logical {base}

as.logic 尝试将其参数强制为逻辑类型。字符串 c("T", "TRUE", "True", "true") 视为 true,c("F", "FALSE", "False", "false") 视为 false,其他所有视为 false不适用。

实际情况是这样的:

> as.logical("T")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

显然,发生的事情TRUE == "T"并不是一种as.logical转变。对于这些 == 比较的行为有任何合理的解释吗?

R.S*_*.S. 4

这是我的结论:来自逻辑比较的文档?"=="

x 和 y 中至少有一个必须是原子向量,但如果另一个是列表,R 会尝试将其强制转换为原子向量的类型:如果列表由长度为 1 的元素组成,则此操作将会成功强制为正确的类型。如果两个参数是不同类型的原子向量,则一个参数被强制转换为另一个参数的类型,优先级(递减)顺序为字符、复数、数字、整数、逻辑和原始。

对我来说,这似乎是后一部分在这里起作用。TRUE被强制为"TRUE" ,实际比较变成"TRUE"=="TRUE"而不是TRUE==TRUE

T总是被转换为TRUEsoT=="TRUE"保留。然而,当转换发生在字符而不是逻辑上时,“T”就没有这样的运气了。。