比较允许特定误差范围的值

时间:2014-11-14 15:50:18

标签: r range

R中是否有任何书写函数在比较数字或向量时允许出现误差?如果两个值在指定的可容忍误差范围内,则x == y将评估为TRUE。

示例如果目标值是77并且我允许的误差范围是5%,问问题x == 77?如果x在77左右的误差范围内,则评估为TRUE,即73.15和80.85之间的任何x值将评估为TRUE。

我可以对一个函数进行“==”比较,但无法提出一个解决方案,在每个目标值周围构建一个“接受”范围,这样如果我允许的误差范围为5%,任何落在tgt值+/- 5%范围内的dta元素都将评估为TRUE。

tgt <- c(45,77,92)
dta <- c(33,41,44,60,68,71,77,78,87,95)
sapply(tgt, function(i) i==dta)

将每个tgt与每个dta进行比较。返回TRUE的唯一比较是将77与77进行比较。我必须围绕每个tgt元素构建一个范围,然后将每个dta元素与该范围进行比较,只要任何dta元素落入任何创建的范围内,就会返回true。当我开始构建范围时,我感到非常困惑。我将寻找的结果将评估为真,当44与45相比时它短于小于5%,类似78接近77以评估为真以及95至92.

1 个答案:

答案 0 :(得分:2)

neighbour <- function(x, y, tol=0.1){
  sapply(x, function(.x) {.tol <- tol * pmax(.x, y) ; abs(.x - y) <= .tol})
}

tgt <- c(45,77,92)
dta <- c(33,41,44,60,68,71,77,78,87,95)

neighbour(x=tgt, y=dta)