作为一个愚蠢的玩具例子,假设
x=4.5
w=c(1,2,4,6,7)我想知道是否有一个简单的R函数可以在x中找到与w最接近的索引。因此,如果foo是该函数,foo(w,x)将返回3。函数match是正确的想法,但似乎只适用于精确匹配。
解决方案这里 (例如which.min(abs(w - x))、which(abs(w-x)==min(abs(w-x)))等)都是O(n)而不是log(n) (我假设w已经排序了)。
发布于 2015-04-11 07:01:17
为了在字符向量上这样做,Martin在R-帮助上建议了这个函数。
bsearch7 <-
function(val, tab, L=1L, H=length(tab))
{
b <- cbind(L=rep(L, length(val)), H=rep(H, length(val)))
i0 <- seq_along(val)
repeat {
updt <- M <- b[i0,"L"] + (b[i0,"H"] - b[i0,"L"]) %/% 2L
tabM <- tab[M]
val0 <- val[i0]
i <- tabM < val0
updt[i] <- M[i] + 1L
i <- tabM > val0
updt[i] <- M[i] - 1L
b[i0 + i * length(val)] <- updt
i0 <- which(b[i0, "H"] >= b[i0, "L"])
if (!length(i0)) break;
}
b[,"L"] - 1L
} https://stackoverflow.com/questions/20133344
复制相似问题