我有許多矩陣(20行/ 20列)。我想爲所有矩陣找出特定元素(單元格)的最大值,例如第9列17.在多個矩陣上獲取特定矩陣元素的最大值
這是越來越接近它: R: Getting maximum value from all matrices in a list 但我無法設法重寫它以滿足我的需要。現在我的列表中有我的矩陣。
任何想法?
我有許多矩陣(20行/ 20列)。我想爲所有矩陣找出特定元素(單元格)的最大值,例如第9列17.在多個矩陣上獲取特定矩陣元素的最大值
這是越來越接近它: R: Getting maximum value from all matrices in a list 但我無法設法重寫它以滿足我的需要。現在我的列表中有我的矩陣。
任何想法?
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)
這應該做你在問什麼。它提取從每個矩陣指定的單元格,然後取所有選項的最大值。
'llply/laply'來自'plyr'。你需要提一下'library(plyr)'。另外,這可以通過'base R'函數'sapply/lapply'完成。我發佈了一個答案,但不知道答案已經發布。 – akrun
這是一個基礎的解決方案(使用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
這也適用。我認爲這樣做沒有匿名功能,但決定將其包括在內以提高可讀性。 –
類似:'library(abind); arr < - do.call(abind,c(lst,list(along = 3))); max(arr [i,j,])'無論如何,可能會有一個數組而不是列表。 – Frank
do.call(pmax,lst)[i,j]
這工作,除非我誤解了這個問題。以這種方式爲所有元素取最大值可能是浪費的,但我懷疑這是一件大事。
如果它不是鏈接中的示例,則可能需要根據該示例顯示一些示例和預期結果 – akrun