R,矩阵:逐行减去最大,删除NAs

问题描述 投票:0回答:1

给出一个非平方矩阵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,但似乎需要先将矩阵转换为数据帧。

谢谢您的建议!

r matrix max vectorization
1个回答
0
投票

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

a - matrixStats::rowMaxs(a, na.rm = TRUE)
© www.soinside.com 2019 - 2024. All rights reserved.