[R] how to return multipy matrix in a function

David Winsemius dwinsemius at comcast.net
Mon Feb 7 19:53:27 CET 2011


On Feb 7, 2011, at 12:30 PM, zhaoxing731 wrote:

> Hello
>
> I have a 100*100 matrix which is from a intensive computation, e.g.  
> mat. Is there any method/function that return the max of every row  
> and the subscript of maximum value simultaneously
>
> #define the function
>> returnfunction<-function(x){
> + value<-apply(x,1,max)
> + index<-apply(x,1,which.max)
> + }

That would only return an index value

You only get a vector (about which the error message seems somewhat on  
point, but a bit tangential since you did not return a named list  
either so the $ extraction will not succeed) , not a matrix in the x  
value passed from the apply call. Try:

returnfunction<-function(x){
    value <- max(x)
    index <- which.max(x)
    return( c(value, index) ) }

 > apply(mat,1, returnfunction)
      [,1] [,2] [,3]
[1,]    4    5   10
[2,]    3    1    2

Note no row names or col names. Could get rownames with:
 > returnfunction<-function(x){
+    value <- max(x)
+    index <- which.max(x)
+    return( c(val=value, ind=index) )}
 > apply(mat,1, returnfunction)
     [,1] [,2] [,3]
val    4    5   10
ind    3    1    2

-- 
David.
>
>
>> mat<-matrix(c(3,5,7,2,1,10,4,3,2),3)#initilize the matrix for test
>> mat
>     [,1] [,2] [,3]
> [1,]    3    2    4
> [2,]    5    1    3
> [3,]    7   10    2
>
>> returnfunction(mat)$value
> Error in returnfunction(mat)$value :
>  $ operator is invalid for atomic vectors
>> returnfunction(mat)$index
> Error in returnfunction(mat)$index :
>  $ operator is invalid for atomic vectors
>
>
> the "returnfunction(mat)$value" should be 4,5,10
> the "returnfunction(mat)$index" should be 3,1,2
>
> Thank you in advance
>
>
> ZhaoXing
> Department of Health Statistics
> West China School of Public Health
> Sichuan University
> No.17 Section 3, South Renmin Road
> Chengdu, Sichuan 610041
> P.R.China
>
> __________________________________________________
> ¸Ï¿ì×¢²áÑÅ»¢³¬´óÈÝÁ¿Ãâ·ÑÓÊÏä?
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list