[R] apply in apply

Charilaos Skiadas cskiadas at gmail.com
Fri May 30 14:19:59 CEST 2008


On May 30, 2008, at 5:37 AM, baptiste Auguié wrote:

> Thank you for the suggestions (off-list as well). I think the best  
> option may eventually be an explicit for loop to make things  
> clearer. To clarify a bit, I've used the plot function in the  
> example where in fact it is a numerical integration (which is why I  
> need to pass an additional variable in the second apply call),
>
>> intg <- function (y, x)
>> {
>>     n <- length(x)
>>     index <- order(x)
>>     dx <- diff(sort(x))
>>     z <- y[index]
>>     ys <- (z[1:(n - 1)] + z[2:n])/2
>>     sum(ys * dx)
>> }
>> <environment: namespace:PROcess>
>
>
> Thanks again for the suggestions,

I think this is where the beauty of ... comes in, the following  
should be doing just what you want:

sapply(my.data, apply, 2, intg, x)

More clear? Not sure I can judge that, certainly more  concise.  
sapply just passes the extra arguments to apply, which then just  
passes them to intg.

> baptiste

Haris Skiadas
Department of Mathematics and Computer Science
Hanover College

> On 30 May 2008, at 10:02, Richard.Cotton at hsl.gov.uk wrote:
>
>>> I need to apply a function on each column of each matrix  
>>> contained in
>>> a list. Consider the following code,
>>>
>>>> x <- 1:3
>>>> my.data <- list(matrix(c(1,2,3,4,5,6),ncol=2),
>>>>       matrix(c(4,5,6,7,8,9),ncol=2))
>>>>
>>>> par(mfrow=c(2,2))
>>>> results <- sapply(1:length(my.data),
>>>>          function(ii) apply(my.data[[ii]], 2, function(y) plot 
>>>> (x,y) ))
>> #
>>>> plot is for demonstration purposes
>>>
>>>
>>> It works, but I think this is quite dirty code. Is there a simpler
>>> way of achieving this?
>>
>> The last line can be simplified
>> results <- sapply(my.data, function(x) apply(x,2,sum))
>>
>> (It is perhaps a little clearer what is going on when you use sum  
>> rather
>> than plot as the example function.)
>>
>> Regards,
>> Richie.
>>
>> Mathematical Sciences Unit
>> HSL
>>



More information about the R-help mailing list