[R-br] sugestao de melhorias em codigo?

Henrique Dallazuanna wwwhsd em gmail.com
Terça Março 29 11:03:37 BRT 2011


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 em 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 em 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


Mais detalhes sobre a lista de discussão R-br