如何找到最接近您输入的值?

时间:2015-12-17 10:53:19

标签: r

我有输入:

  Tin=7.02654  ; t=0.1 ;Tou=?;sed=?

我的问题是如何找到sed sed[i]=中的值,它会给出与Tin最不同的Tou,或者换句话说最接近我的锡?

我尝试了什么:

sed = seq(from = 0, to = 0.7, by=0.001)
for(i in 1:length(sed)) {
  Tou = 5 + t*sed[i]
  find sed[i] = min(abs(Tou-Tin)))
  sed[i] 
}

我的意思是什么,而不是find sed[i]

2 个答案:

答案 0 :(得分:1)

你可以记住最好的结果,并在你发现与Tin的绝对差异较小的Tou时更新它。像这样:

Tin = 5.04
t = 0.1

sed = seq(from = 0, to = 0.7, by = 0.001)

bestResult = 5 + t * sed[1]
bestDiff = abs(Tin - bestResult)

for (i in 2:length(sed)) {
  Tou = 5 + t * sed[i]
  diff = abs(Tin - Tou)
  if (diff < bestDiff) {
    bestDiff = diff
    bestResult = Tou
  }
}

bestResult

答案 1 :(得分:1)

which.min方法的一个缺点是它返回一个数字而不是一个布尔矢量(然后您可以使用&|,因此可以使用一个更复杂的过滤器)

在这种情况下,你想使用Ardavel所说的绝对差值,但是没有理由将它作为循环的一部分进行跟踪,这可以完全在data.frame或data.table中完成。

Tin=7.02654
t = 0.1
test <- data.frame(sed = seq(from = 0, to = 0.7, by=0.001))
test$Tou <- 5 + t * test$sed
test$sed[abs(test$Tou - Tin) == min(abs(test$Tou - Tin))]