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]]
O solo R> sum(combn(x, 2, prod)) [1] 14121 Saludos, Jorge.- 2015-02-24 21:00 GMT+11:00 Carlos Ortega <cof en qualityexcellence.es>:> 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]] > > _______________________________________________ > 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]]
En mi opinión en R siempre es preferible soluciones como la de Carlos, al ser una operación vectorial, todo es muchísimo más rápido, de este modo si tu vector fuese muy grande, mi solución sería lenta pero imagino que la de Carlos sería bastante rápida Un saludo Date: Tue, 24 Feb 2015 11:00:26 +0100 Subject: Re: [R-es] Problema con bucle for From: cof en qualityexcellence.es To: fjroar en hotmail.com CC: morales en us.es; r-help-es en r-project.org 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]]
Muchas gracias de nuevo por las soluciones aportadas. El 24/02/2015 11:10, Jorge I Velez escribió:> O solo > > R> sum(combn(x, 2, prod)) > [1] 14121 > > Saludos, > Jorge.- > > 2015-02-24 21:00 GMT+11:00 Carlos Ortega <cof en qualityexcellence.es>: > >> 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 [1] >> >> 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 [2] >>> >>> [[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 [2] >>> >>> >> >> -- >> Saludos, >> Carlos Ortega >> www.qualityexcellence.es [1] >> >> [[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 [2]Links: ------ [1] http://www.qualityexcellence.es [2] https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]