# [R] apply fun to df returning a matrix

Soeren.Vogel at eawag.ch Soeren.Vogel at eawag.ch
Fri Apr 30 14:34:33 CEST 2010

```Thanks for the code, that was exactly what I was looking for. Regards,
Sören

On 30.04.2010, at 14:04, David Winsemius wrote:

>
> On Apr 30, 2010, at 6:59 AM, Mohamed Lajnef wrote:
>
>> Hi Soeren
>>
>> Apply or aggregate functions
>>
>
> Probably needs combn as well. Could do it all with numeric indices,
> but this effort with character vectors seems acceptable:
>
> fun <- function(x){ cnms <- colnames(x)
>  return(apply(combn(cnms,2), 2, function(y) sum(x[,y])))
> }
> fun(df)
> #[1] 210 310 410
>
> I do have a question about "returning a matrix" though. Did you mena
> that you wanted the pairs of sums rather than the sums of pairs. In
> that case:
>
> fun2 <- function(x){cnms <- colnames(x)
>  return(apply(combn(cnms,2), c(1,2), function(y) sum(x[,y])))
> }
>
> fun2(df)
> #     [,1] [,2] [,3]
> #[1,]   55   55  155
> #[2,]  155  255  255
>
> --
> David.
>
>> 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???
>>>
>>
>> --
>>
>>
>> Mohamed Lajnef,IE INSERM U955 eq 15
>> Pôle de Psychiatrie
>> Hôpital CHENEVIER
>> 40, rue Mesly
>> 94010 CRETEIL Cedex FRANCE
>> Mohamed.lajnef at inserm.fr
>> tel : 01 49 81 31 31 (poste 18470)
>> Sec : 01 49 81 32 90
>> fax : 01 49 81 30 99
>
> David Winsemius, MD
> West Hartford, CT
>
>
>

--
Sören Vogel, Dipl.-Psych. (Univ.), PhD-Student, Eawag, Dept. SIAM
http://www.eawag.ch, http://sozmod.eawag.ch

```