2015-06-21 82 views
1

我有許多矩陣(20行/ 20列)。我想爲所有矩陣找出特定元素(單元格)的最大值,例如第9列17.在多個矩陣上獲取特定矩陣元素的最大值

這是越來越接近它: R: Getting maximum value from all matrices in a list 但我無法設法重寫它以滿足我的需要。現在我的列表中有我的矩陣。

任何想法?

+1

如果它不是鏈接中的示例,則可能需要根據該示例顯示一些示例和預期結果 – akrun

回答

2
library(plyr) 

mats <- llply(1:1000, function(x) replicate(20, rnorm(20))) 

getEntry <- function(mat, row, col) { 

    mat[row, col] 

} 

getMax <- function(mats, row, col) { 

    max(laply(mats, function(x) getEntry(x, row, col))) 

} 

# Get max of row 2, col 3 & row 12, col 19 
getMax(mats, 2, 3) 
getMax(mats, 12, 19) 

這應該做你在問什麼。它提取從每個矩陣指定的單元格,然後取所有選項的最大值。

+0

'llply/laply'來自'plyr'。你需要提一下'library(plyr)'。另外,這可以通過'base R'函數'sapply/lapply'完成。我發佈了一個答案,但不知道答案已經發布。 – akrun

1

這是一個基礎的解決方案(使用akrun的答案被刪除樣本數據),但實際上並不需要一個匿名函數:

set.seed(24) 
lst <- lapply(1:4, function(i) matrix(sample(0:9, 20*20, 
     replace=TRUE), ncol=20)) 
str(lst) 

List of 4 
$ : int [1:20, 1:20] 2 2 7 5 6 9 2 7 8 2 ... 
$ : int [1:20, 1:20] 4 1 1 8 9 5 7 0 1 6 ... 
$ : int [1:20, 1:20] 1 8 3 1 2 6 2 3 7 5 ... 
$ : int [1:20, 1:20] 2 3 5 4 3 2 7 2 1 5 ... 


max(sapply(lst, "[", i=9, j=7)) # Use `[` as a function with 3 parameters: 
             # object and 2 indices 
[1] 8 
+0

這也適用。我認爲這樣做沒有匿名功能,但決定將其包括在內以提高可讀性。 –

+0

類似:'library(abind); arr < - do.call(abind,c(lst,list(along = 3))); max(arr [i,j,])'無論如何,可能會有一個數組而不是列表。 – Frank

0
do.call(pmax,lst)[i,j] 

這工作,除非我誤解了這個問題。以這種方式爲所有元素取最大值可能是浪費的,但我懷疑這是一件大事。