在R中花车少或相等

假设我想测试,如果'a'小于或等于'b',当两者都是浮点数时。 我会一起去的

isTRUE(all.equal(a,b)) || a <= b

我想知道是否有比这更好的方法。 是否有像all.equal这样的函数用于少或相等(/大于等于)以允许“接近平等”?

如果不是一个人想要比较两个花车向量,而应该做什么?

更新 :@shadow指向我在R中的数字比较难度

人们当然可以明确地设置容忍度并避免all.equal:

tol = 1e-5

# a equals b
abs(a-b) <= tol

# a less or equal to b
a <= b + tol

以下是关于绝对相对容差的一些讨论:http://realtimecollisiondetection.net/blog/?p = 89

我想一如既往,没有“正确”的方式来实现这一点。


有趣的问题。 我相信有更好的方法,但是这个简单的函数需要两个double s向量,并且如果它们几乎等于element-wise( mode = "ae" ),则返回给定的容差。 如果它们小于( mode = "lt" )或者它们几乎等于或小于( mode = "ne.lt" )以及它们的"gt"等价物,它也可以返回...

near_equal <- function( x , y , tol = 1.5e-8 , mode = "ae" ){
    ae <- mapply( function(x,y) isTRUE( all.equal( x , y , tolerance = tol ) ) , x , y )    
    gt <- x > y
    lt <- x < y
    if( mode == "ae" )
      return( ae )
    if( mode == "gt" )
      return( gt )
    if( mode == "lt" )
      return( lt )
    if( mode == "ne.gt" )
      return( ae | gt )
    if( mode == "ne.lt" )
      return( ae | lt )
}


#  And in action....
set.seed(1)
x <- 1:5
# [1] 1 2 3 4 5
y <- 1:5 + rnorm(5,sd=0.1)
# [1] 0.9373546 2.0183643 2.9164371 4.1595281 5.0329508


near_equal( x , y , tol = 0.05 , mode = "ae" )
#[1] FALSE  TRUE  TRUE  TRUE  TRUE

near_equal( x , y , tol = 0.05 , mode = "ne.gt" )
#[1] TRUE TRUE TRUE TRUE TRUE

希望有所帮助。

链接地址: http://www.djcxy.com/p/58535.html

上一篇: Less or equal for floats in R

下一篇: Is extra time required for float vs int comparisons?