[R-es] vectorizaciones
J. Miguel Marin
jmmarin en est-econ.uc3m.es
Mar Dic 17 10:17:11 CET 2013
Hola Carlos,
muchas gracias, funciona :D
Aunque las matrices P1a y P2a debo sacarlas de la función porque la
función se aplica a cualquier matriz externa a la función.
Siempre me queda la duda de que las funciones tengan acceso a matrices
o dataframes externos y que no se les pasa como argumentos, pero parece
que no hay problema. Siempre me queda la duda si no es mejor manejar,
en este caso, asignaciones globales con "<<-" pero está siempre
desaconsejado....
A ver si hay suerte y realmente la vectorización aumenta la velocidad :D
Y saludos y felices fiestas a tod en s
> Hola,
>
> De esta manera sí funciona:
>
> #-----------------------------------------------
>
> #...................
>
> vec1a <- as.vector(1:3)
>
> n1a <- 3
>
> n2a <- 3
>
> #P1a <- matrix(rnorm(30),nrow=3)
>
> #P2a <- matrix(rnorm(30),nrow=3)
>
> Ka <- 10
> n.val <- 30
>
> # En forma de funcion
>
> producto <- function(n1a,n2a,Ka,vec1a,n.val){
>
> # A eliminar una vez compruebes que la vectorización funciona
> set.seed(123)
>
> P1a <- matrix(rnorm(n.val),nrow=3)
> P1a <- matrix(rnorm(n.val),nrow=3)
>
> LLa = numeric(2*Ka)
>
> for (i in 1:n1a){
>
> for (j in 1:n2a){
>
> LLa = LLa - vec1a%*%matrix(abs(P1a[i,]-P2a[j,]), nrow=length(vec1a),
> ncol=2*Ka, byrow=TRUE)
> }
>
> }
>
> return(sum(LLa))
>
> }
>
>
> producto(n1a,n2a,Ka,vec1a,n.val)
>
>
> vproducto <- Vectorize(producto)
> sum(vproducto(3,3,10,as.vector(1:3),30))
>
> vproducto <- Vectorize(producto, c("n1a","n2a","Ka","vec1a","n.val"))
> sum(vproducto(3,3,10,as.vector(1:3),30))
>
>
> #-----------------------------------------------
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
>
> El 16 de diciembre de 2013, 17:38, J. Miguel Marin <jmmarin en est-econ.uc3m.es
>> escribió:
>
>>
>> Hola a tod en s,
>>
>> tengo que hacer una operación con matrices que lleva un doble bucle. He
>> intentado vectorizarlo pero sin mucho éxito con la función "Vectorize".
>> ¿sabríais de alguna manera de evitar los bucles o de que funcionase
>> Vectorize?
>> Adjunto un ejemplo
>>
>> #...................
>>
>> vec1a <- as.vector(1:3)
>>
>> n1a <- 3
>>
>> n2a <- 3
>>
>> P1a <- matrix(rnorm(30),nrow=3)
>>
>> P2a <- matrix(rnorm(30),nrow=3)
>>
>> Ka <- 10
>>
>> # En forma de funcion
>>
>> producto <- function(n1a,n2a,Ka,vec1a,P1a,P2a){
>>
>> LLa = numeric(2*Ka)
>>
>> for (i in 1:n1a){
>>
>> for (j in 1:n2a){
>>
>> LLa = LLa - vec1a%*%matrix(abs(P1a[i,]-P2a[j,]), nrow=length(vec1a),
>> ncol=2*Ka, byrow=TRUE)
>>
>> }
>>
>> }
>>
>> return(sum(LLa))
>>
>> }
>>
>>
>> producto(n1a,n2a,Ka,vec1a,P1a,P2a)
>>
>>
>> vproducto <- Vectorize(producto)
>>
>> vproducto(n1a,n2a,Ka,vec1a,P1a,P2a)
>>
>> # Error en P1a[i, ] : número incorreto de dimensiones
>>
>>
>> #...................
>>
>> Y saludos
>>
>> mm~
>>
>> _______________________________
>>
>> J. Miguel Marin
>>
>> http://www.est.uc3m.es/jmmarin
>>
>> Dep. de Estadistica
>> Universidad Carlos III de Madrid
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
mm~
_______________________________
J. Miguel Marin
http://www.est.uc3m.es/jmmarin
Dep. of Statistics
University Carlos III of Madrid
European Union (EU)
Más información sobre la lista de distribución R-help-es