R,矩阵:逐行减去最大值,移除 NA

R, matrices: subtract maximum row-wise, removing NAs

给定一个非方矩阵 a 我需要从每一行中减去它自己的最大值。矩阵包含 NAs,将被丢弃。矩阵的维度是预先知道的并且是固定的。此外,如果此信息有帮助,所有 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)})) 快)。

不知道有没有更快的解决办法,因为这个操作要重复很多次。

在 Whosebug 中,我找到了类似问题的答案,建议使用 pmax,但这需要将矩阵转换为列表,我相信这会比我的解决方案慢得多。一些答案建议使用 dplyr 中的 rowwise,但这似乎需要先将矩阵转换为数据框。

感谢您的建议!

我们可以尝试使用 matrixStats 包中的 rowMaxs,通常速度更快

a - matrixStats::rowMaxs(a, na.rm = TRUE)