2016-07-31 54 views
1

我試圖在矩陣包含NA時在r中找到矩陣中每一行的最大值。我試圖使用「qlcMatrix」包中的函數rowMax(),但它不處理NA(如果該行至少包含一個NA值,它會返回「NA」)。在包含NA的矩陣的每一行中查找最大值

+0

請閱讀有關的信息[如何提出一個很好的問題(http://stackoverflow.com/help/how-to-ask),以及如何給[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610)。這會讓其他人更容易幫助你。 – Jaap

+2

'library(matrixStats); rowMaxs(x,na.rm = TRUE)' – Sotos

回答

2

您可以使用max。如果您將該行作爲向量提供,並使用max,請確保您設置na.rm = TRUE。

下面是使用的載體的例子:

> x = c(2,4,6,10,1,5,NA) 

> max(x,na.rm = TRUE) 

[1] 10 

下面是一個使用矩陣的一個示例:

> x = matrix(1:10,2,5) 
> x 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 7 9 
[2,] 2 4 6 8 10 
> x[2,2] = NA 
> x 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 7 9 
[2,] 2 NA 6 8 10 
> max(x[2,],na.rm = TRUE) 
[1] 10 

下面是一個簡單的for循環示範:

for(i in 1:nrow(x)){ 
    y[i] = max(x[i,],na.rm = TRUE) 

} 
> y 
[1] 9 10 
+0

儘管他們需要每行... –

+0

沒問題我補充說,我認爲他的問題更多是因爲缺少NA支持而不是循環。 – Alos

+0

那不是一個好方法。 'print'不在任何地方存儲值,因此它是無用的。 –

0

索托斯'回答上面的作品。另外,還要檢查文檔中的基礎R爲「應用」:

apply(your_matrix, 1, max, na.rm = TRUE) 
相關問題