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