[R] apply fun to df returning a matrix

Duncan Murdoch murdoch.duncan at gmail.com
Fri Apr 30 14:02:20 CEST 2010


On 30/04/2010 7:55 AM, Soeren.Vogel at eawag.ch wrote:
> Hi Mohamed, thanks for your answer. Anyway, the "how to" is exactly my  
> problem, since ...
>
> fun2 <- function(x){
>     
> please_use_aggregate_and_apply_in_some_way_and_return_the_output_of_my_example_as_requested 
> (fun(x));
> }
> fun2(df);
>
> ... unfortunately returns an error ;-). Could you please give a simple  
> example? Thanks, Sören
>   

I would have recommended a nested for loop, but here it is with apply:

 > df <- data.frame(a=1:10, b=11:20, c=21:30)
 > f <- function(x,y) sum(x*y)
 > apply(df, 2, function(x) apply(df, 2, function(y) f(x,y)))
     a    b    c
a  385  935 1485
b  935 2485 4035
c 1485 4035 6585

To me this looks clearer:

result <- matrix(NA, 3,3)
for (i in 1:3)
  for (j in 1:3)
    result[i,j] <- f(df[,i], df[,j])

Duncan Murdoch
> On 30.04.2010, at 12:59, Mohamed Lajnef wrote:
>
>   
>> Hi Soeren
>>
>> Apply or aggregate functions
>>
>> best regards
>> M
>> Soeren.Vogel at eawag.ch a écrit :
>>     
>>> Hello, a data.frame, df, holds the numerics, x, y, and z. A  
>>> function, fun, should return some arbitrary statistics about the  
>>> arguments, e.g. the sum or anything else. What I want to do is to  
>>> apply this function to every pair of variables in df, and the  
>>> return should be a matrix as found with cov. How can I achieve  
>>> that? Thanks, Sören
>>>
>>> df <- data.frame(x=1:10, y=11:20, z=21:30);
>>> fun <- function(x){
>>>  return(sum(x));
>>> }
>>> # and now???
>>>       
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list