Я пытаюсь получить представление о вездесущей функции which
. Пока я не начал читать вопросы/ответы на SO, я так и не нашел нужды. И я до сих пор этого не делаю.
Как я понимаю, which
принимает булевский вектор и возвращает слабо более короткий вектор, содержащий индексы элементов, которые были истинными:
> seq(10)
[1] 1 2 3 4 5 6 7 8 9 10
> x <- seq(10)
> tf <- (x == 6 | x == 8)
> tf
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
> w <- which(tf)
> w
[1] 6 8
Так почему бы мне использовать which
вместо простого использования логического вектора? Я мог бы увидеть некоторые проблемы с памятью с огромными векторами, поскольку length(w)
< < length(tf)
, но это вряд ли убедительно. И в файле справки есть некоторые параметры, которые не добавляют мне многого для понимания возможности использования этой функции. Примеры в файле справки также не очень помогают.
Изменить для ясности. Я понимаю, что which
возвращает индексы. Мой вопрос о двух вещах: 1), почему вам когда-либо понадобится использовать индексы, а не просто использовать логический вектор селектора? и 2), какое интересное поведение which
может предпочесть просто использовать векторизованное булево сравнение?