Поскольку матрица 2x2, инвертировать ее не слишком дорого. Вы можете попробовать
Minv <- solve(matrix(c(1,0.2,0.2,1), nrow=2L))
DT[, mah_dist := {
x <- c(vara - centa, varb - centb)
sqrt(x %*% Minv %*% x)
}, 1L:nrow(DT)]
вывод:
vara varb centa centb mah_dist
1: 1.262954285 0.7635935 -0.22426789 -0.2357066 1.6507441
2: -0.326233361 -0.7990092 0.37739565 -0.5428883 0.7134176
3: 1.329799263 -1.1476570 0.13333636 -0.4333103 1.5423502
4: 1.272429321 -0.2894616 0.80418951 -0.6494716 0.5414365
5: 0.414641434 -0.2992151 -0.05710677 0.7267507 1.2369112
6: -1.539950042 -0.4115108 0.50360797 1.1519118 2.3590344
7: -0.928567035 0.2522234 1.08576936 0.9921604 2.0435022
8: -0.294720447 -0.8919211 -0.69095384 -0.4295131 0.6801583
9: -0.005767173 0.4356833 -1.28459935 1.2383041 1.6739981
10: 2.404653389 -1.2375384 0.04672617 -0.2793463 2.7729519
данные:
set.seed(0L)
DT <- data.table(vara = rnorm(10), varb = rnorm(10), centa = rnorm(10), centb = rnorm(10))
Minv <- solve(matrix(c(1,0.2,0.2,1), nrow=2L))