which
возвращает номера индексов для выбора элементов из вектора или срезов из матрицы / массива или data.frame, и их нельзя «смешать» с логическими векторами
Рассмотрим логический вектор для всех чисел> 5 в этом векторе:
x <- 1:10
x > 5
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Это логический вектор из 10 элементов, но эквивалент которого () имеет длину 5:
, который (x> 5) [1] 67 8 9 10
Нет ничего сложного в том, что нельзя смешивать эти вещи, они просто не идут вместе.Первый неявно отбрасывает первые пять элементов и сохраняет последние пять в силу сопоставления позиций между данными и логическим вектором
x[x > 5]
, а второй явно выбирает только последние пять элементов
x[which(x > 5)]
Тот же результат, но аргумент оператора "[" в каждом случае совершенно разный.Это применяется независимо от того, являются ли выбранные элементы одноэлементными значениями в векторе или строками в data.frame
.