mar*_*omo 31 comparison equality r built-in floating-point-comparison
测试isTRUE(all.equal(x, y))和identical(x, y)?之间有什么区别吗?
帮助页面说:
不要在'if'表达式中直接使用'all.equal' - 如果合适,使用'isTRUE(all.equal(....))'或'same'.
但"如果合适的话"让我怀疑.我如何确定哪两个合适?
Jos*_*ich 29
all.equal测试近似相等,而identical更精确(例如,它不容许差异,并且它比较存储类型).来自?相同:
函数'all.equal'有时也用于以这种方式测试相等性,但是用于不同的东西:它允许数值结果的微小差异.
个中缘由,你想包all.equal中isTRUE是因为all.equal将报告的差异,而不是简单地返回FALSE.
nul*_*lob 13
identical比较麻烦.例如:
> identical(as.double(8), as.integer(8))
[1] FALSE
> all.equal(as.double(8), as.integer(8))
[1] TRUE
> as.double(8) == as.integer(8)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
Ben*_*ker 13
除了数值容差的差异和存储模式的比较之外,不同的是all.equal(),identical还测试相关环境的相等性.R中有规则物体通常不会有相关的环境-他们是最常见的关联function和formula(和terms)对象.但为了说明,我将给出两个不同的(新创建的)环境:
x <- 2; environment(x) <- new.env()
y <- 2; environment(y) <- new.env()
all.equal(x,y) ## TRUE
identical(x,y) ## FALSE
Run Code Online (Sandbox Code Playgroud)
有一个ignore.environment论点:
ignore.environment:逻辑,指示在比较闭包时是否应忽略其环境.
但由于它仅在比较闭包(即函数)时应用,因此在这种情况下不会产生影响 - 在比较公式或术语对象时也不会产生差异.