即使“ T”不是逻辑矢量,为什么(“ T”)也不会引发错误?

时间:2018-09-26 17:47:03

标签: r

当我试图找出为什么我编写的某些函数给出了意外输出时,我偶然发现了这一点。

> if ("T") print("why?")
[1] "why?"

为什么这样做会代替发出argument is not interpretable as logical错误?除if"T", "F", "TRUE"之外,传递给"FALSE"的所有其他字符串都会发生这种情况。

根据if的帮助页面,方括号内的条件必须是逻辑向量,但是

> is.logical("T")
[1] FALSE

它们如何在一起? if如何评估条件,是否有秘密发生的事情将“ T”转换为T?

1 个答案:

答案 0 :(得分:6)

因为as.logical将有限数量的字符串转换为逻辑字符串:

  

as.logical试图将其参数强制为逻辑类型。对于   因素,这使用水平(标签)。像它一样剥离   属性,包括名称。字符串c(“ T”,“ TRUE”,“ True”,   “ true”)被视为true,c(“ F”,“ FALSE”,“ False”,“ false”)被视为   错误,所有其他均为不适用。

if的帮助文件指出强制发生,但没有强制发生:

  

如果可能,其他类型将被强制转换为逻辑类型,而忽略任何类。