findInterval () z prawymi przerwami

WspaniałyfindInterval() funkcja w R używa w swoimvec argument, jak pokazano w dokumentach:

Jeślii <- findInterval(x,v), mamyv[i[j]] <= x[j] < v[i[j] + 1]

Jeśli chcę mieć pod-przedziały z zamkniętymi prawami, jakie mam opcje? Najlepsze, co wymyśliłem, to:

findInterval.rightClosed <- function(x, vec, ...) {
  fi <- findInterval(x, vec, ...)
  fi - (x==vec[fi])
}

Inny działa również:

findInterval.rightClosed2 <- function(x, vec, ...) {
  length(vec) - findInterval(-x, -rev(vec), ...)
}

Oto mały test:

x <- c(3, 6, 7, 7, 29, 37, 52)
vec <- c(2, 5, 6, 35)
findInterval(x, vec)
# [1] 1 3 3 3 3 4 4
findInterval.rightClosed(x, vec)
# [1] 1 2 3 3 3 4 4
findInterval.rightClosed2(x, vec)
# [1] 1 2 3 3 3 4 4

Ale chciałbym zobaczyć inne rozwiązania, jeśli jest lepsze. Mówiąc „lepiej”, mam na myśli „jakoś bardziej satysfakcjonujący” lub „nie czuje się jak kludge”, a może nawet „bardziej wydajny”. =)

(Zauważ, że jestrightmost.closed argument dofindInterval(), ale jest inny - odnosi się tylko do ostatniego pod-przedziału i ma inne znaczenie.)

questionAnswers(3)

yourAnswerToTheQuestion