【发布时间】:2015-08-18 17:26:34
【问题描述】:
您能否详细说明,这里发生了什么:
a = "TRUE"
b = TRUE
a
#[1] "TRUE"
b
#[1] TRUE
str(a)
#chr "TRUE"
str(b)
#logi TRUE
a == b
#[1] TRUE
这只是 TRUE 中的字符串 "TRUE",例如:
"STRING" == TRUE
#[1] FALSE
所以这不是因为非空字符串是 TRUE 就像 en e.g. Perl,因此我预计TRUE == "TRUE" 会产生FALSE?
【问题讨论】:
-
来自
?Comparison: "如果两个参数是不同类型的原子向量,一个被强制为另一个的类型,(递减)优先顺序是字符,复杂,数字、整数、逻辑和原始。" -
@lukeA :我明白了,谢谢你的回答。恕我直言,这是一个令人讨厌的功能,如果我试图比较不可比的实体,我宁愿受到惩罚......
-
当在操作中混合不兼容的类型时,将事物提升为最一般的表示形式是 R 中一般原则的一部分。我认为它符合 R 是一种动态和函数式语言的事实,它更像 Lisp,而不是 C 家族。
-
只是一个快速添加:可以这样举例说明:在 R 提示符处键入
c(1,"1",TRUE,"TRUE")将产生:[1] "1" "1" "TRUE" "TRUE" -
不应该有人发布答案,以便可以标记为解决方案并“退休”的问题吗?
标签: r