2012-03-12 45 views
5

Tôi đã tạo Danh sách ma trận và bây giờ tôi muốn nhận được giá trị tối đa của hàng trong tất cả các ma trận, làm cách nào để nhận chúng?Nhận giá trị tối đa từ tất cả các ma trận trong danh sách

Đây là mã cho danh sách:

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

Bây giờ tôi muốn các giá trị tối đa của accList từ mọi ma trận. nếu tôi có một ma trận tôi sử dụng:

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

Nhưng làm cách nào tôi có thể sử dụng nó với danh sách?

+0

Tôi nghĩ rằng thuật ngữ của bạn có thể là một chút ở đây. Nếu bạn làm lapply trên một 'ma trận', bạn đánh giá mọi phần tử. Bạn có thể cung cấp một ví dụ tái sản xuất (cái này không chạy, có hai dấu ngoặc bị thiếu và thư viện (randomForest) không được khai báo)? –

Trả lời

7

Câu hỏi của bạn là một chút không rõ ràng, dù sao đây là một cái gì đó hữu ích:

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ách lấy giá trị tối đa nếu ma trận chứa giá trị NA? Tôi đã thử với giải pháp đã cho của bạn: 'max (unlist (lapply (mylist, FUN = max)))' nhưng đầu ra cho thấy NA. Cũng thử với 'max (unlist (lapply (na.omit (mylist), FUN = max)))'. Bạn có thể vui lòng giúp đỡ? – joarderm

+1

Chỉ cần thêm tham số 'max()' 'na.rm' vào' lapply', ví dụ: : 'lapply (danh sách của tôi, FUN = max, na.rm = T)' – digEmAll

Các vấn đề liên quan