我有输入:
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]
?
答案 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))]