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