2012-03-12 110 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