Предположим, вы хотите вычесть максимальное значение каждой строки матрицы из соответствующей строки. Вы можете сделать это, используя цикл вроде этого:
# create matrix
mat <- matrix(rnorm(100),ncol=5,nrow=20)
for(i in 1:nrow(mat)){ #for each row
row.max <- max( mat[i,] ) #take the maximum of the row
mat[i,] <- mat[i,] - row.max #subtract it from the row
}
Я думаю о способе сделать это векторизованным способом, возможно, используя max.col()
, однако я не смог придумать что-то до сих пор. Есть идеи?
Спасибо!
Редактировать:
Спасибо за ваши ответы, я принял (безусловно) самое быстрое решение.
Unit: microseconds
expr min lq mean median uq max neval
loop 4671.687 4906.6820 5124.78995 5019.7965 5214.5935 12318.986 100
apply 41.055 47.0430 60.58208 57.0925 71.6320 158.661 100
rowMaxs 2.139 2.9945 6.21019 5.3465 8.9810 12.402 100
do.call 111.618 125.0890 154.46904 142.4095 170.2065 422.522 100