2012-03-12 135 views
5

我已經創建了矩陣列表,現在我想要在所有矩陣中獲得最大值的行,我如何得到它們?從列表中的所有矩陣中獲得最大值

下面是列表的代碼:

i <- 1 
tryList <- list() 
treeList <- list() 
accList <- list() 

for(t_mtry in 1:40){ 
    for(t_ntree in 20:300{ 
    rf <- randomForest(class ~., data=training, mtry=t_mtry, ntree=t_ntree) 
    tbl <- table(predicted = predict(rf,evalSet,type="class"),actual=evalSet$class) 

    #get the accuracy of the classification as a list 
    retVal <- accuracy(tbl) 

    tryList <- c(tryList,t_mtry) 
    treeList <- c(treeList,t_ntree) 
    accList <- c(accList,mean(retVal)) 
    } 
    matrixList[[i]] <- matrix(c(tryList,treeList,accList),length(accList) 
    i <- i + 1 
    tryList <- list() 
    treeList <- list() 
    accList <- list() 
} 

現在我想從每一個矩陣accList的最大值。 如果我有一個矩陣我使用:

lapply(matrix,max) 
max(unlist(matrix[,3])) 

但我怎麼可以用它與列表?

+0

我想你的術語可能有點過這裏。如果你喜歡'矩陣',你評估每一個元素。你能提供一個可重複的例子(這個不運行,有兩個緊鄰的括號丟失,庫(randomForest)沒有聲明)? – 2012-03-12 07:44:55

回答

7

你的問題是有點不清楚,反正這裏的東西有用:

m1 <- cbind(c(1,2,3),c(7,2,4)) 
m2 <- cbind(c(-1,19,13),c(21,3,5),c(3,3,0),c(4,5,6)) 
m3 <- cbind(c(1,2,3,4,5),c(8,18,4,6,7)) 

mylist <- list(M1=m1,M2=m2,M3=m3) 

# get the maximum value for each matrix 
lapply(mylist,FUN=max) 

# get the global maximum 
max(unlist(lapply(mylist,FUN=max))) 

# get the maximum value for each row of each matrix 
lapply(mylist,FUN=function(x)apply(x,MARGIN=1,FUN=max)) 


##### OUTPUT ##### 
> lapply(mylist,FUN=max) 
$M1 
[1] 7 
$M2 
[1] 21 
$M3 
[1] 18 

> max(unlist(lapply(mylist,FUN=max))) 
[1] 21 

> lapply(mylist,FUN=function(x)apply(x,MARGIN=1,FUN=max)) 
$M1 
[1] 7 2 4 
$M2 
[1] 21 19 13 
$M3 
[1] 8 18 4 6 7 
+0

如果矩陣包含NA值,如何獲得最大值?我試着用你給定的解決方案:'max(unlist(lapply(mylist,FUN = max)))'但輸出顯示NA。還試着用'max(unlist(lapply(na.omit(mylist),FUN = max)))'。請你幫忙嗎? – joarderm 2014-04-01 08:46:39

+1

只需將'max()'參數'na.rm'添加到'lapply',例如。 :'lapply(mylist,FUN = max,na.rm = T)' – digEmAll 2014-04-01 09:33:56