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
[R-es] Problema con bucle for
9 messages · Pedro Herrero Petisco, Francisco Rodríguez, Manuel Morales +3 more
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
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
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
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
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
_______________________________________________ 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
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