[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