当我试图找出为什么我编写的某些函数给出了意外输出时,我偶然发现了这一点。
> 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?
答案 0 :(得分:6)
因为as.logical
将有限数量的字符串转换为逻辑字符串:
as.logical试图将其参数强制为逻辑类型。对于 因素,这使用水平(标签)。像它一样剥离 属性,包括名称。字符串c(“ T”,“ TRUE”,“ True”, “ true”)被视为true,c(“ F”,“ FALSE”,“ False”,“ false”)被视为 错误,所有其他均为不适用。
if
的帮助文件指出强制发生,但没有强制发生:
如果可能,其他类型将被强制转换为逻辑类型,而忽略任何类。