[R] How to apply a function on each column of a matrix
     (Ted Harding) 
    Ted.Harding at manchester.ac.uk
       
    Sun Jan 24 01:49:15 CET 2010
    
    
  
 On 24-Jan-10 00:27:37, Jim Lemon wrote:
> On 01/24/2010 11:11 AM, anna wrote:
>>
>> Here is the last code that I wrote but it would give me the
>> same problem:
>> I have the matrix mat with n columns mat.1, mat.2 ...mat.n
>>
>> #To be able to use lapply I convert it to a data.frame:
>> mat<- data.frame(mat)
>>
>> lapply(mat, function, argument of function)
>>
>> It works but I still get for all elements the function applied
>> for the last element. The elements of my results are all the
>> same I don't understand I did exactly as shown on this website:
>> http://www.ats.ucla.edu/stat/r/library/advanced_function_r.htm#lapply
> 
> Hi anna,
> If you could post your matrix "mat" (or something else that
> produces the problem you describe if "mat" is private or too big)
> and the commands you used, someone will probably figure out what
> is going wrong.
> 
> Jim
I agree with Jim's comments. It may help to formulate your reply
to considet the following simple case of applying a function "on
each column of a matrix":
  X2 <- function(x){ x^2 }
  M <- matrix(c(1,2,3,4,5,6,7,8,9),nrow=3)
  M
  #      [,1] [,2] [,3]
  # [1,]    1    4    7
  # [2,]    2    5    8
  # [3,]    3    6    9
  X2 <- function(x){ x^2 }
  apply(M,2,X2)
  #      [,1] [,2] [,3]
  # [1,]    1   16   49
  # [2,]    4   25   64
  # [3,]    9   36   81
  SX2 <- function(x){ sum(x^2) }
  apply(M,2,SX2)
  # [1]  14  77 194
Not ythe use of apply(), not lapply(); also that the result is
not a matrix (with 1 row) but a vector (dimensionless):
  dim(apply(M,2,SX2))
  # NULL
If you want the result to be a 1-row vector, then you need to
force this explicitly:
  N <- apply(M,2,SX2)
  # dim(N)<-c(1,3)
  N
  #      [,1] [,2] [,3]
  # [1,]   14   77  194
or (in this case) more simply:
  rbind(NULL,apply(M,2,SX2))
  #      [,1] [,2] [,3]
  # [1,]   14   77  194
If that approach does not work with your matrix and your function,
then there must be something special about one or the other!
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 24-Jan-10                                       Time: 00:49:12
------------------------------ XFMail ------------------------------
    
    
More information about the R-help
mailing list