为什么在R中“ <integer>” == <integer>为true

Man*_*dye 4 r

我刚开始学习R,在我的第一个作业中,我遇到一个问题,我需要比较一堆变量,而这样做的时候,我不但要比较两个变量(不相等,而且要比较类型)时也会得到假不一样。例如 :

7 == "7"
Run Code Online (Sandbox Code Playgroud)

给出正确的,应该是错误的。目前,我正在执行以下操作:

var1 = 8 == "8"
var2 = typeof(8) == typeof("8")
var1 & var2
Run Code Online (Sandbox Code Playgroud)

我想应该有一些更简单的方法。就像我们将数字添加到字符向量时一样,它隐式地将7转换为“ 7”。那么有没有办法在1行中获得相同的结果?

Ken*_*HBS 5

?Comparison帮助页面:

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

在同一帮助页面上,作者警告在-expressions中使用==!=进行测试if。他们建议identical()改为使用:

7 == "7"
# TRUE
identical(7, "7")
# FALSE
Run Code Online (Sandbox Code Playgroud)

  • 这并不意味着不应该非常小心:`identical(8L,8)[1] FALSE`。如果定义一个向量,例如x <-1:8,然后尝试比较identical(x [8],8),则会发生这种情况。猜结果。 (3认同)
  • 真正。同时,“ identical(8,8.0)[1] TRUE”。好像`R`会自动假定数字数据为浮点数,除非另有明确指定 (2认同)