Это проблема комбинации. У меня 10 магазинов. Я хочу найти 8 лучших магазинов, которые минимизируют сумму расстояний от моих 100 наблюдений.
Из матрицы комбинаций 'test_comb_matrix' я получу sh, чтобы извлечь комбинации из 8 на каждой итерации выбора (10 8). Затем я применяю эти индексы к матрице расстояний test_dist_matrix и записываю расстояния. Я использую pmin (), чтобы найти ближайший магазин для каждого наблюдения, затем записываю минимум в myminCol.
Ниже приведен мой код (прокрутите вниз, чтобы получить воспроизводимый код). Я хочу удалить бит «от a до h».
for(i in 1:nrow(testDat))
{
print(i)
# get indices from combination matrix
a <- test_comb_matrix[1, i]
b <- test_comb_matrix[2, i]
c <- test_comb_matrix[3, i]
d <- test_comb_matrix[4, i]
e <- test_comb_matrix[5, i]
f <- test_comb_matrix[6, i]
g <- test_comb_matrix[7, i]
h <- test_comb_matrix[8, i]
# find the minimum
myminCol <- as.vector(pmin(test_dist_matrix[, a], test_dist_matrix[, b],
test_dist_matrix[, c], test_dist_matrix[, d],
test_dist_matrix[, e], test_dist_matrix[, f],
test_dist_matrix[, g], test_dist_matrix[, h]))
# sum distances
mySum <- sum(myminCol)
testDat[i, 1] <- mySum
}
Воспроизводимый код:
# number of combinations from 10 choose 8
n <- choose(10, 8)
# get combination matrix
test_comb_matrix <- combn(1:10, 8)
# view first 5 combinations
test_comb_matrix[, 1:5]
# create distance matrix for 100 observations and 10 columns
test_dist_matrix <- data.frame(matrix(rnorm(100), nrow = 100, ncol = 10))
testDat <- data.frame(matrix(NA, nrow = n, ncol = 1))
names(testDat) <- "min"