Re: [R-es] bucle
Probablemente tienes un caso en el que ninguna de las 11 condiciones se cumple... Fíjate con los datos simulados, hay 1686 casos fuera de las condiciones que defines: set.seed(12345) rango_inr1 = ceiling(runif(3738,0,11)) inr = runif(3738,2,4) n=3738 cinr = rep(NA, 3738) for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } table(cinr) sum(is.na(cinr)) Un saludo. Isidro Hidalgo Arellano Observatorio Regional de Empleo Consejería de Empleo y Economía http://www.jccm.es -Mensaje original- De: r-help-es-boun...@r-project.org [mailto:r-help-es-bounces@r- project.org] En nombre de juan(uned) Enviado el: jueves, 10 de julio de 2014 8:59 Para: r-help-es@r-project.org Asunto: [R-es] bucle Estimados compañeros, hoy me ha surgido una duda, quizás trivial, pero que no encuentro sentido. Tengo un bucle con el siguiente código: for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } donde n vale 3738 e i naturalmente 3738. Pues bien, resulta que la variable creada cinr tiene 3737 casos. ¿Qué puede estar ocurriendo?. He comprobado los casos de rango_inr1 y de inr y son 3738. ¿Qué estoy haciendo mal?. Un cordial saludo, Juan -- Juan Antonio Gil Pascual Profesor de Metodología de la Investigación Cuantitativa correo: j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Telf. 91 3987279 Fax. 91 3987288 ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] bucle
Hola, Juan: Eso sólo es posible si exactamente para uno de los valores de i no se cumple ninguna de las condiciones, con lo cual no llegas a incorporar valor en cinr. Puedes utilizar if else de modo que te emita un mensaje informando del i que no supera ninguno de los if. Un saludo. Eva El Jueves 10 de julio de 2014 8:58, juan(uned) j...@edu.uned.es escribió: Estimados compañeros, hoy me ha surgido una duda, quizás trivial, pero que no encuentro sentido. Tengo un bucle con el siguiente código: for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } donde n vale 3738 e i naturalmente 3738. Pues bien, resulta que la variable creada cinr tiene 3737 casos. ¿Qué puede estar ocurriendo?. He comprobado los casos de rango_inr1 y de inr y son 3738. ¿Qué estoy haciendo mal?. Un cordial saludo, Juan -- Juan Antonio Gil Pascual Profesor de MetodologÃa de la Investigación Cuantitativa correo: j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Telâf. 91 3987279 Fax. 91 3987288 ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] bucle
Juan, Prueba a utilizar for (i in 0:(n-1)) A lo mejor sólo estás comprobando los (n-1) casos. Eva El Jueves 10 de julio de 2014 9:37, Eva Prieto Castro evapcas...@yahoo.es escribió: Hola, Juan: Eso sólo es posible si exactamente para uno de los valores de i no se cumple ninguna de las condiciones, con lo cual no llegas a incorporar valor en cinr. Puedes utilizar if else de modo que te emita un mensaje informando del i que no supera ninguno de los if. Un saludo. Eva El Jueves 10 de julio de 2014 8:58, juan(uned) j...@edu.uned.es escribió: Estimados compañeros, hoy me ha surgido una duda, quizás trivial, pero que no encuentro sentido. Tengo un bucle con el siguiente código: for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } donde n vale 3738 e i naturalmente 3738. Pues bien, resulta que la variable creada cinr tiene 3737 casos. ¿Qué puede estar ocurriendo?. He comprobado los casos de rango_inr1 y de inr y son 3738. ¿Qué estoy haciendo mal?. Un cordial saludo, Juan -- Juan Antonio Gil Pascual Profesor de MetodologÃa de la Investigación Cuantitativa correo: j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Telâf. 91 3987279 Fax. 91 3987288 ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] bucle
De todas formas, es mejor (y más rápido) no usar un bucle y asignar directamente: cinr = rep(NA, 3738) cinr[rango_inr1==1 (inr= 2 inr= 3)] - 1 cinr[rango_inr1==2 (inr= 2.5 inr= 3.5)] - 2 cinr[rango_inr1==3 (inr= 2 inr= 2.9)] - 3 cinr[rango_inr1==4 (inr= 2.25 inr= 3.5)] - 4 cinr[rango_inr1==5 (inr= 2.2 inr= 3.25)] - 5 cinr[rango_inr1==6 (inr= 2 inr= 3.5)] - 6 cinr[rango_inr1==7 (inr= 2 inr= 4)] - 7 cinr[rango_inr1==8 (inr= 2 inr= 2.6)] - 8 cinr[rango_inr1==9 (inr= 2 inr= 2.5)] - 9 cinr[rango_inr1==10 (inr= 2 inr= 2.8)] - 10 cinr[rango_inr1==11 (inr= 2.5 inr= 4)] - 11) Un saludo. Isidro Hidalgo Arellano Observatorio Regional de Empleo Consejería de Empleo y Economía http://www.jccm.es -Mensaje original- De: r-help-es-boun...@r-project.org [mailto:r-help-es-bounces@r- project.org] En nombre de juan(uned) Enviado el: jueves, 10 de julio de 2014 8:59 Para: r-help-es@r-project.org Asunto: [R-es] bucle Estimados compañeros, hoy me ha surgido una duda, quizás trivial, pero que no encuentro sentido. Tengo un bucle con el siguiente código: for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } donde n vale 3738 e i naturalmente 3738. Pues bien, resulta que la variable creada cinr tiene 3737 casos. ¿Qué puede estar ocurriendo?. He comprobado los casos de rango_inr1 y de inr y son 3738. ¿Qué estoy haciendo mal?. Un cordial saludo, Juan -- Juan Antonio Gil Pascual Profesor de Metodología de la Investigación Cuantitativa correo: j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Telf. 91 3987279 Fax. 91 3987288 ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] bucle
Hola Juan Antonio, Has pensado considerar una aproximacion diferente? De ser asi, explora ?cut y ?car:::recode. Saludos, Jorge.- 2014-07-10 16:58 GMT+10:00 juan(uned) j...@edu.uned.es: Estimados compañeros, hoy me ha surgido una duda, quizás trivial, pero que no encuentro sentido. Tengo un bucle con el siguiente código: for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } donde n vale 3738 e i naturalmente 3738. Pues bien, resulta que la variable creada cinr tiene 3737 casos. ¿Qué puede estar ocurriendo?. He comprobado los casos de rango_inr1 y de inr y son 3738. ¿Qué estoy haciendo mal?. Un cordial saludo, Juan -- Juan Antonio Gil Pascual Profesor de Metodología de la Investigación Cuantitativa correo: j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Tel'f. 91 3987279 Fax. 91 3987288 ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] bucle
Eva muchas gracias por la contestación pero hay muchos casos que no cumplen la condición y cinr toma el valor NA porque inr toma valores fuera de los intervalos que pongo pero rango_inr1 siempre toma uno de los 11 valores, además sum(table(rango_inr1)) es 3738. PodÃas concretar la opción que comentas de ifelse(). Muchas gracias a Jorge y a Isidro. Probaré la alternativa de Isidro. Un cordial saludo, Juan El 10/07/2014 9:37, Eva Prieto Castro escribió: Hola, Juan: Eso sólo es posible si exactamente para uno de los valores de i no se cumple ninguna de las condiciones, con lo cual no llegas a incorporar valor en cinr. Puedes utilizar if else de modo que te emita un mensaje informando del i que no supera ninguno de los if. Un saludo. Eva El Jueves 10 de julio de 2014 8:58, juan(uned) j...@edu.uned.es escribió: Estimados compañeros, hoy me ha surgido una duda, quizás trivial, pero que no encuentro sentido. Tengo un bucle con el siguiente código: for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } donde n vale 3738 e i naturalmente 3738. Pues bien, resulta que la variable creada cinr tiene 3737 casos. ¿Qué puede estar ocurriendo?. He comprobado los casos de rango_inr1 y de inr y son 3738. ¿Qué estoy haciendo mal?. Un cordial saludo, Juan -- Juan Antonio Gil Pascual Profesor de MetodologÃa de la Investigación Cuantitativa correo: j...@edu.uned.es mailto:j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Telâf. 91 3987279 Fax. 91 3987288 ___ R-help-es mailing list R-help-es@r-project.org mailto:R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- Juan Antonio Gil Pascual Profesor de MetodologÃa de la Investigación Cuantitativa correo: j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Telâf. 91 3987279 Fax. 91 3987288 [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
Re: [R-es] bucle
Hola. La alternativa de Isidro es la que yo uso normalmente en este tipo de cosas. Si algún caso que no cumpla ninguna de las condiciones te quedará con cinr=NA. Saludos El 10/07/14 17:10, juan(uned) escribió: Eva muchas gracias por la contestación pero hay muchos casos que no cumplen la condición y cinr toma el valor NA porque inr toma valores fuera de los intervalos que pongo pero rango_inr1 siempre toma uno de los 11 valores, además sum(table(rango_inr1)) es 3738. Podías concretar la opción que comentas de ifelse(). Muchas gracias a Jorge y a Isidro. Probaré la alternativa de Isidro. Un cordial saludo, Juan El 10/07/2014 9:37, Eva Prieto Castro escribió: Hola, Juan: Eso sólo es posible si exactamente para uno de los valores de i no se cumple ninguna de las condiciones, con lo cual no llegas a incorporar valor en cinr. Puedes utilizar if else de modo que te emita un mensaje informando del i que no supera ninguno de los if. Un saludo. Eva El Jueves 10 de julio de 2014 8:58, juan(uned) j...@edu.uned.es escribió: Estimados compañeros, hoy me ha surgido una duda, quizás trivial, pero que no encuentro sentido. Tengo un bucle con el siguiente código: for (i in 1:n) { if (rango_inr1[i]==1 (inr[i]= 2 inr[i]= 3)) cinr[i]-1 if (rango_inr1[i]==2 (inr[i]= 2.5 inr[i]= 3.5)) cinr[i]-2 if (rango_inr1[i]==3 (inr[i]= 2 inr[i]= 2.9)) cinr[i]-3 if (rango_inr1[i]==4 (inr[i]= 2.25 inr[i]= 3.5)) cinr[i]-4 if (rango_inr1[i]==5 (inr[i]= 2.2 inr[i]= 3.25)) cinr[i]-5 if (rango_inr1[i]==6 (inr[i]= 2 inr[i]= 3.5)) cinr[i]-6 if (rango_inr1[i]==7 (inr[i]= 2 inr[i]= 4)) cinr[i]-7 if (rango_inr1[i]==8 (inr[i]= 2 inr[i]= 2.6)) cinr[i]-8 if (rango_inr1[i]==9 (inr[i]= 2 inr[i]= 2.5)) cinr[i]-9 if (rango_inr1[i]==10 (inr[i]= 2 inr[i]=2.8)) cinr[i]-10 if (rango_inr1[i]==11 (inr[i]= 2.5 inr[i]= 4)) cinr[i]-11 } donde n vale 3738 e i naturalmente 3738. Pues bien, resulta que la variable creada cinr tiene 3737 casos. ¿Qué puede estar ocurriendo?. He comprobado los casos de rango_inr1 y de inr y son 3738. ¿Qué estoy haciendo mal?. Un cordial saludo, Juan -- Juan Antonio Gil Pascual Profesor de Metodología de la Investigación Cuantitativa correo: j...@edu.uned.es mailto:j...@edu.uned.es web: www.uned.es/personal/jgil Dpto. MIDE Facultad de Educación c/Juan del Rosal, 14 desp. 2.72 28040 Madrid Tel,f. 91 3987279 Fax. 91 3987288 ___ R-help-es mailing list R-help-es@r-project.org mailto:R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]] ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es