给出一个非平方矩阵a
,我需要从每行中减去其自己的最大值。矩阵包含要丢弃的NA
。矩阵的尺寸事先已知并固定。此外,所有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
,但似乎需要先将矩阵转换为数据帧。
谢谢您的建议!
我们可以尝试使用rowMaxs
包中的matrixStats
,通常速度更快
a - matrixStats::rowMaxs(a, na.rm = TRUE)