хороший сценарий
Если вы находитесь в классическом случае, где
- ваш вектор отсортирован в порядке возрастания,
- он не включает 0,
- он не имеет связанных значений,
, вы можете просто сделать следующее:
findInterval(0, x, TRUE) + 0:1
Если условие 1 не выполняется, но условия 2 и 3 все еще выполняются, вы можете сделать
sig <- order(x)
sig[findInterval(0, x[sig], TRUE) + 0:1]
ответ Акруна в основном такой же.
плохой сценарий
Все становится сложнее, когда ваш вектор x
содержит0 или связанные / повторные значения, потому что:
В этой ситуацииВы должны адаптировать ответ Ронака Шаха , который позволяет исключить 0. Но помните, что which
может датьВы несколько индексов, если есть повторяющиеся значения.