[R-br] sugestao de melhorias em codigo?

Benilton Carvalho beniltoncarvalho em gmail.com
Terça Março 29 11:19:49 BRT 2011


aha! sou mestre em esquecer do mapply... obrigado...

FYI: eu tenho um ganho significativo com:

mapply(function(x, y) sapply(x, function(.x) mean(.x < y)),
                   as.data.frame(X), as.data.frame(Y))

obrigado, b

2011/3/29 Henrique Dallazuanna <wwwhsd em gmail.com>:
> 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