
Benilton, Tente com essa, aparenta ser 30% mais rapida: mapply(function(x, y)colMeans(sapply(x, function(.x).x < y)), as.data.frame(X), as.data.frame(Y)) #benchmark t1 <- system.time(replicate(100, t(sapply(1:nrow(X), f, X, Y)))) t2 <- system.time(replicate(100, mapply(function(x, y)colMeans(sapply(x, function(.x).x < y)), as.data.frame(X), as.data.frame(Y)))) t2 / t1 2011/3/29 Benilton Carvalho <beniltoncarvalho@gmail.com>:
Prezados,
existe algo obvio (em termos de R, visto que gostaria de evitar o uso de codigo compilado) que eu esteja esquecendo em termos de otimizacao para a seguinte operacao?
Ela se resume a:
R[i,j] = mean( X[i,j] < Y[,j])
O CMR segue:
set.seed(1) X <- matrix(rnorm(100), nc=5) Y <- matrix(rnorm(50), nc=5)
f = function(i, x, y){ n = ncol(x) sapply(1:n, function(j, v, ref) mean(ref[,j] > v[j]), x[i,], y) } R = t(sapply(1:nrow(X), f, X, Y)
O problema que surge para mim refere-se ao tempo de execucao quando tenho q lidar com X com dimensoes 5e6 x 1e3.... pois, naturalmente, a solucao acima levara' um bom tempo para finalizar...
obrigado, benilton _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
-- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O