您正在尋找的which.min
功能,給出對應於給定的矢量最少值的索引。見?which.min
。因此,這樣的事情應該給你想要的東西:
Tin <- 5.04
t <- 0.1
sed <- seq(from = 0, to = 0.7, by = 0.001)
i <- which.min(abs(5 + t*sed - Tin))
#[1] 401
sed[i]
#[1] 0.4
除非我誤解你的僞代碼,似乎沒有理由使用一個for循環。
編輯2: 要回答評論;這大概應該是這樣的
fun <- function(x, d, sed) { # Some complicated function
return(x*sed^2 + d)
}
myfun <-function(Tin) {
sed <- seq(from = 0, to = 0.7, by = 0.001)
Tou_vec <- fun(x = 1, d = 2, sed = sed) + 5
i <- which.min(abs(Tou_vec - Tin))
return(sed[i])
}
myfun(Tin = 5.5)
#[1] 0
功能which.min
預期值的numeric
向量,並返回值最小的索引。在你的代碼中,你提供了一個長度爲1的矢量,因此i
總是評估爲1
。此外,您還嘗試返回(或至少打印)for
-loop內的(第一個)值。這是行不通的,如果您堅持,則需要明確的print
或return
。我試圖在答案中重寫你的myfun
。從您的示例中,您不需要for
-loop。
請閱讀有關的信息[如何提出一個很好的問題(http://stackoverflow.com/help/how-to-ask),以及如何給予[重複的例子(HTTP:// stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)。這會讓其他人更容易幫助你。 – Jaap
我也會提供這個建議:'which(abs(x-your.number)== min(abs(x-your.number)))'from [here](https://stat.ethz.ch/pipermail /r-help/2008-July/167216.html)。 – Konrad
@Konrad或者,可以使用'which.min(abs(x-your.number))'產生相同的索引(如果不存在關係)。 –