Минимум из списка на R

Есть два списка именно:

a <- list(0, 1, 1, 0, 1)
b <- list(5.35, -14, 21, -70, 5)

Как мне в одну строку получить индекс самого маленького элемента из b, только среди тех индексов у которых в a на этих же позициях стоят единицы. Например в данном случае минимальный элемент в b будет -14


Ответы (1 шт):

Автор решения: aleksandr barakin

например, так (пробелы вставлены лишь для лучшего восприятия, их в данном случае можно убрать все до одного):

min( unlist( b )[ unlist( a ) == 1 ] )

где:

  • unlist(список) — преобразование списка в вектор (векторами гораздо проще манипулировать)
  • вектор == значение — результатом будет замена элементов вектора, равных указанному значению, на T (true, истина), остальных — на F (false, ложь)
  • вектор[вектор_индексов] — фильтрация вектора: если энный элемент в вектор_индексов — ложь, то энный элемент вектора пропускается
  • min(вектор) — получение минимального значения вектора.

ах, да, требуется не значение, а индекс. для этого вместо функции min() можно воспользоваться функцией which.min().

→ Ссылка