I wanted to get the minimum of an array of dimenstion (nr,nc,6), so the output was of dimension (nr,nc), ie for each row,column the minimum of 6 numbers. I thought apply might be the sensible way, but I also compared it to looping over each row/column. In this case the loop method was faster than my apply (which probably means I wasn't using apply in the best way). Then I found that pmin was much faster. Here is some example code:
nr <- 300 nc <- 300 aa <- array(rnorm(nr*nc*6),c(nr,nr,6)) system.time(aamin1 <- apply(aa,c(1,2),min)) system.time({ aamin2 <- matrix(0,nr,nc) for(i in 1:nr) for(j in 1:nc) aamin2[i,j] <- min(aa[i,j,]) }) system.time(aamin3 <- pmin(aa[,,1],aa[,,2],aa[,,3],aa[,,4],aa[,,5],aa[,,6])) I have three questions: 1) is there a better way to use apply than the approach I have taken 2) How can I write a function to use pmin on an array as above, but when I don't know the size of the array? ie 3) My applications are from images, so it would be good for me to know how to go about writing efficient code that does this sort of operation on arrays, but using more complex functions than pmin/pmax. Would the sensible way to go be to write the function in C and call it that way? Hopefully an answer to (1) will answer this too. Thanks I'm using R-2.5.1 (out of date I know, but I have tried this at work using 2.8.0 as well), on linux. ______________________________________________ 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.