2012-03-12 728 views
5

He creado una lista de matrices, y ahora quiero obtener los valores máximos de la fila en todas las matrices, ¿cómo puedo obtenerlas?Obtener el valor máximo de todas las matrices en una lista

Aquí es el código de la lista:

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() 
} 

Ahora quiero a los valores máximos de la accList de cada matriz. si tengo una matriz que utilizo:

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

Pero, ¿cómo lo puedo usar con la lista?

+0

Creo que su terminología puede ser un poco aquí. Si aplica una 'matriz', evalúa cada elemento. ¿Puede proporcionar un ejemplo reproducible (este no se ejecuta, faltan dos corchetes y la biblioteca (randomForest) no está declarada)? –

Respuesta

7

Su pregunta es un poco claro, de todos modos aquí está algo útil:

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

¿Cómo obtener el valor máximo si las matrices contienen valores de NA? Intenté con su solución dada: 'max (unlist (lapply (mylist, FUN = max)))' pero el resultado muestra NA. También se intentó con 'max (unlist (lapply (na.omit (mylist), FUN = max)))'. ¿Podrías amablemente ayudar por favor? – joarderm

+1

Simplemente agregue el parámetro 'max()' 'na.rm' a' lapply', p. Ej. : 'lapply (mylist, FUN = max, na.rm = T)' – digEmAll

Cuestiones relacionadas