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, [EMAIL PROTECTED] 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


______________________________________________
R-help@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.

Reply via email to