在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