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.