Hi James I added your suggestion to the package, it is in svn revision 74349 and should be on the server in the devel section soon.
This an old package - I noted the first commit to it had revision number 24 and was by Robert Gentleman on 2001-08-01. Best wishes Wolfgang El Mar 13, 2013, a las 10:41 am, James F. Reid <rei...@gmail.com> escribió: > Hi Wolfgang, > > On 12/03/13 21:11, Wolfgang Huber wrote: >> >> Dear James >> >> Thank you. What would the saved time be (e.g. compared to the overall >> runtime of arrayQualityMetrics)? I would be surprised if the saving was >> worth the added complexity, but am always happy to be surprised. > > I believe so but maybe I'm missing something. > Here are the system times on a 20000*100 on my laptop using just dist2, which > would also have a consequence on the overall runtime of arrayQualityMetrics > in aqm.heamap. > > > dist2 <- function (x, > fun = function(a, b) mean(abs(a - b), na.rm = TRUE), > diagonal = 0) { > > defaultFun <- ifelse(missing(fun), TRUE, FALSE) > > if (!(is.numeric(diagonal) && (length(diagonal) == 1L))) > stop("'diagonal' must be a numeric scalar.") > res = matrix(diagonal, ncol = ncol(x), nrow = ncol(x)) > colnames(res) = rownames(res) = colnames(x) > if (ncol(x) >= 2) { > > if (defaultFun) { > res <- apply(x, 2, function(i) colMeans(abs(x - i), na.rm=TRUE)) > } else { > for (j in 2:ncol(x)) > for (i in 1:(j - 1)) > res[i, j] = res[j, i] = fun(x[, i], x[, j]) > } > } > > return(res) > } > > y <- matrix(rnorm(20000 * 100), 20000, 100) > > system.time(dist2(x = y, fun = function(a, b) mean(abs(a - b), na.rm=TRUE))) > ## user system elapsed > ## 11.664 0.060 11.800 > > system.time(dist2(x = y)) > ## user system elapsed > ## 5.201 0.348 5.600 > > Not sure what you'd want to change to the Rd. > > Best, > James. > >> >> A patch of the .R and .Rd file would be most welcome and expedite the change. >> >> Btw, colSums apparently also works with 3-dim arrays, so both loops (over i >> and j) could be vectorised, however afaIcs at the cost of constructing an >> object of size nrow(x)^3 in memory, which might again break performance. >> >> Best wishes >> Wolfgang >> >> Il giorno Mar 12, 2013, alle ore 4:43 PM, James F. Reid <rei...@gmail.com> >> ha scritto: >> >>> Dear bioc-devel, >>> >>> the dist2 function in genefilter defined as: >>> >>> dist2 <- function (x, fun = function(a, b) mean(abs(a - b), na.rm = TRUE), >>> diagonal = 0) { >>> >>> if (!(is.numeric(diagonal) && (length(diagonal) == 1L))) >>> stop("'diagonal' must be a numeric scalar.") >>> res = matrix(diagonal, ncol = ncol(x), nrow = ncol(x)) >>> colnames(res) = rownames(res) = colnames(x) >>> if (ncol(x) >= 2) { >>> for (j in 2:ncol(x)) for (i in 1:(j - 1)) res[i, j] = res[j, >>> i] = fun(x[, i], x[, j]) >>> } >>> return(res) >>> } >>> >>> could have it's default function vectorized as: >>> >>> res <- apply(x, 2, function(i) colMeans(abs(x - i), na.rm=TRUE)) >>> >>> to improve performance for example in the ArrayQualityMetrics package. >>> >>> Best. >>> James. >>> >>> _______________________________________________ >>> Bioc-devel@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/bioc-devel >> > _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel