Еще одна идея, использующая outer
и max.col
B[max.col(-abs(outer(A, B, `-`)))]
# [1] 1.25 1.25 1.25 1.45 1.45
Хорошо подойдет, если A
и B
не слишком велики.
шагшагом
outer(A, B, "-")
возвращает следующую матрицу
# [,1] [,2]
#[1,] -0.05 -0.25
#[2,] 0.05 -0.15
#[3,] 0.05 -0.15
#[4,] 0.15 -0.05
#[5,] 0.25 0.05
, где первый столбец является результатом A - B[1]
, а второй столбец - A - B[2]
.Для каждой строки нам нужно найти положение столбца абсолютного минимума.
Нет функции min.col
, поэтому минус в
max.col(-abs(outer(A, B, `-`)))
, который возвращает
# [1] 1 1 1 2 2
Наконец, мы используем этот вектор для извлечения нужных значений из B
.