Учитывая неквадратную матрицу a
Мне нужно вычесть из каждой строки свой максимум. Матрица содержит NA
s, которые должны быть отброшены. Размеры матрицы известны заранее и фиксированы. Кроме того, все NA
находятся под главной диагональю, если эта информация помогает, то есть a
имеет форму
a11 a12 a13 a14 ...
NA a22 a23 a24 ...
NA NA a33 a34 ...
...
На данный момент я использую
a <- a - apply(a,1,function(x){max(x, na.rm=TRUE)})
(что, кстати, быстрее, чем t(apply(a,1,function(x){x-max(x, na.rm=TRUE)}))
).
Интересно, есть ли более быстрое решение, потому что эту операцию придется повторять очень много раз.
В Stackoverflow я нашел ответы на похожие вопросы, предлагая использовать pmax
, но для этого потребовалось бы преобразовать матрицу в список, и это, я думаю, сделало бы ее намного медленнее, чем мое решение. В некоторых ответах предлагалось использовать rowwise
из dplyr
, но для этого требуется сначала преобразовать матрицу в фрейм данных.
Спасибо за ваши предложения!