Hola, quiero obtener la suma del producto de los elementos de un vector y cuando construyo el código me aparecen una serie de NA que me impiden calcular la suma. ¿Alguna sugerencia? El código es el siguiente: x<- c(24,12,45,68,45) n<-length(x) res<-numeric() for(i in 1:n-1){ for(j in i+1:n){ res<- sum(x[i]*x[j]) print(res) } } res [[alternative HTML version deleted]]
Puedes usar la orden is.na() que comprueba si un valor es NA o no y cuando lo sea hacer que pase al siguiente paso del bucle. Algo así: x<- c(24,12,45,68,NA,45) n<-length(x) res<-numeric() for(i in c(1:n)){ print(i) print(x[i]) if (is.na(x[i])) next for(j in c(i+1:n)){ if (is.na(x[j])) next res<- sum(x[i]*x[j]) print(res) } } res Espero que te sirva :-) El 24 de febrero de 2015, 10:02, <morales en us.es> escribió:> > > Hola, quiero obtener la suma del producto de los elementos de un vector > y cuando construyo el código me aparecen una serie de NA que me impiden > calcular la suma. ¿Alguna sugerencia? > > El código es el siguiente: > > x<- c(24,12,45,68,45) > n<-length(x) > res<-numeric() > for(i in 1:n-1){ > for(j in i+1:n){ > res<- sum(x[i]*x[j]) > print(res) > } > } > res > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Si he entendido bien el problema, lo que quieres hacer realmente es esto: x<- c(24,12,45,68,45)n<-length(x)res=0for(i in 2:n-1){ for(j in (i+1):n){ res<- res + (x[i]*x[j]) print(res) }} Cuya salida es: [1] 288[1] 1368[1] 3000[1] 4080[1] 4620[1] 5436[1] 5976[1] 9036[1] 11061[1] 14121 Varias observaciones: 1:n-1 define un vector que empieza en 0, cuando la posición 1 en R es el 1 por tanto x[0] no existe y no da resultado sum(x[i]*x[j]) es una operación que calcula la suma de un vector, en tu caso tienes un escalar y por tanto no debería hacer nada Tienes que definir res para que se sume así misma Un saludo Francisco J.> Date: Tue, 24 Feb 2015 10:02:11 +0100 > From: morales en us.es > To: r-help-es en r-project.org > Subject: [R-es] Problema con bucle for > > > > Hola, quiero obtener la suma del producto de los elementos de un vector > y cuando construyo el código me aparecen una serie de NA que me impiden > calcular la suma. ¿Alguna sugerencia? > > El código es el siguiente: > > x<- c(24,12,45,68,45) > n<-length(x) > res<-numeric() > for(i in 1:n-1){ > for(j in i+1:n){ > res<- sum(x[i]*x[j]) > print(res) > } > } > res > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es[[alternative HTML version deleted]]
Muchas gracias por la solución. El 24/02/2015 10:36, Francisco Rodríguez escribió:> Si he entendido bien el problema, lo que quieres hacer realmente es esto: > > x<- c(24,12,45,68,45) > n<-length(x) > res=0 > for(i in 2:n-1){ > for(j in (i+1):n){ > res<- res + (x[i]*x[j]) > print(res) > } > } > > Cuya salida es: > > [1] 288 > [1] 1368 > [1] 3000 > [1] 4080 > [1] 4620 > [1] 5436 > [1] 5976 > [1] 9036 > [1] 11061 > [1] 14121 > > Varias observaciones: > > 1:n-1 define un vector que empieza en 0, cuando la posición 1 en R es el 1 por tanto x[0] no existe y no da resultado > > sum(x[i]*x[j]) es una operación que calcula la suma de un vector, en tu caso tienes un escalar y por tanto no debería hacer nada > > Tienes que definir res para que se sume así misma > > Un saludo > > Francisco J. > >> Date: Tue, 24 Feb 2015 10:02:11 +0100 >> From: morales en us.es >> To: r-help-es en r-project.org >> Subject: [R-es] Problema con bucle for >> >> >> >> Hola, quiero obtener la suma del producto de los elementos de un vector >> y cuando construyo el código me aparecen una serie de NA que me impiden >> calcular la suma. ¿Alguna sugerencia? >> >> El código es el siguiente: >> >> x<- c(24,12,45,68,45) >> n<-length(x) >> res<-numeric() >> for(i in 1:n-1){ >> for(j in i+1:n){ >> res<- sum(x[i]*x[j]) >> print(res) >> } >> } >> res >> >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es[[alternative HTML version deleted]]
Hola, Otra forma de hacerlo, es así: #---------------> x<- c(24,12,45,68,45) > sum(apply(combn(x,2),2,prod))[1] 14121 #--------------- Y te ahorras los líos del bucle y de los índices... Saludos, Carlos Ortega www.qualityexcellence.es El 24 de febrero de 2015, 10:36, Francisco Rodríguez <fjroar en hotmail.com> escribió:> Si he entendido bien el problema, lo que quieres hacer realmente es esto: > x<- c(24,12,45,68,45)n<-length(x)res=0for(i in 2:n-1){ for(j in > (i+1):n){ res<- res + (x[i]*x[j]) print(res) }} > Cuya salida es: > [1] 288[1] 1368[1] 3000[1] 4080[1] 4620[1] 5436[1] 5976[1] 9036[1] > 11061[1] 14121 > Varias observaciones: > 1:n-1 define un vector que empieza en 0, cuando la posición 1 en R es el 1 > por tanto x[0] no existe y no da resultado > sum(x[i]*x[j]) es una operación que calcula la suma de un vector, en tu > caso tienes un escalar y por tanto no debería hacer nada > Tienes que definir res para que se sume así misma > Un saludo > Francisco J. > > > > Date: Tue, 24 Feb 2015 10:02:11 +0100 > > From: morales en us.es > > To: r-help-es en r-project.org > > Subject: [R-es] Problema con bucle for > > > > > > > > Hola, quiero obtener la suma del producto de los elementos de un vector > > y cuando construyo el código me aparecen una serie de NA que me impiden > > calcular la suma. ¿Alguna sugerencia? > > > > El código es el siguiente: > > > > x<- c(24,12,45,68,45) > > n<-length(x) > > res<-numeric() > > for(i in 1:n-1){ > > for(j in i+1:n){ > > res<- sum(x[i]*x[j]) > > print(res) > > } > > } > > res > > > > > > [[alternative HTML version deleted]] > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > [[alternative HTML version deleted]] > > > _______________________________________________ > 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 [[alternative HTML version deleted]]
Prueba esto: x<- c(24,12,45,68,45) tmp <- outer(x, x, "*") sum(tmp[lower.tri(tmp)]) Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 24 de febrero de 2015, 10:02, <morales en us.es> escribió:> > > Hola, quiero obtener la suma del producto de los elementos de un vector > y cuando construyo el código me aparecen una serie de NA que me impiden > calcular la suma. ¿Alguna sugerencia? > > El código es el siguiente: > > x<- c(24,12,45,68,45) > n<-length(x) > res<-numeric() > for(i in 1:n-1){ > for(j in i+1:n){ > res<- sum(x[i]*x[j]) > print(res) > } > } > res > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es