Hola quiero usar una sentencia do until o do while en R y no se como se usa. Aca esta el programa q hice en SAS, alguien me podria decir como hacerlo en R. Gracias data marco12; set eah09.marco1; do until ((us8 ne us1) & (us8 ne us2) & (us8 ne us3) & (us8 ne us4) & (us8 ne us5) & (us8 ne us6) & (us8 ne us7bis) & (us9 ne us1) & (us9 ne us2) & (us9 ne us3) & (us9 ne us4) & (us9 ne us5) & (us9 ne us6) & (us9 ne us7bis)); Aleat2=uniform(2); US8=ceil(Aleat2*Mj09/2); US9=ceil(Mj09/2+US8); end; run; -- José "... hoy el cambio cualitativo la liberacion, implica, cambios organicos, de instinto y biologicos, AL MISMO TIEMPO q cambios politicos y sociales" H. M. [[alternative HTML version deleted]]
Hola! Puedes resolver tu problema pidiendo la ayuda online en R: ?repeat te muestra como usar constructos para control de flujo como if(cond) expr if(cond) cons.expr else alt.expr for(var in seq) expr while(cond) expr repeat expr break next Kjetil 2009/10/9 jose ramirez costa <joseramirezcosta en gmail.com>:> Hola quiero usar una sentencia do until o do while en R y no se como se usa. > > Aca esta el programa q hice en SAS, alguien me podria decir como hacerlo en > R. > > Gracias > > data marco12; set eah09.marco1; > do until ((us8 ne us1) & (us8 ne us2) & (us8 ne us3) & (us8 ne us4) & (us8 > ne us5) & (us8 ne us6) & (us8 ne us7bis) > & (us9 ne us1) & (us9 ne us2) & (us9 ne us3) & (us9 ne us4) & (us9 > ne us5) & (us9 ne us6) & (us9 ne us7bis)); > Aleat2=uniform(2); > US8=ceil(Aleat2*Mj09/2); > US9=ceil(Mj09/2+US8); > end; > run; > > -- > José > > "... hoy el cambio cualitativo la liberacion, implica, cambios organicos, de > instinto y biologicos, AL MISMO TIEMPO q cambios politicos y sociales" H. M. > > [[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 > >-- "... an entire human genome would fit on a music CD." --- www.thinkgene.com
Carlos J. Gil Bellosta
2009-Oct-09 14:52 UTC
[R-es] Como usar un DO WHILE o un DO UNTIL en R
Hola, ¿qué tal? En primer lugar, reescribiría tu programa en SAS así: %let compvars = ( us1 us2 us3 us4 us5 us6 us7bis ); data marco12; set eah09.marco1; Aleat2=uniform(2); US8=ceil(Aleat2*Mj09/2); US9=ceil(Mj09/2+US8); do until not( ( us8 in compvars ) and ( us9 in compvars ) ); Aleat2=uniform(2); US8=ceil(Aleat2*Mj09/2); US9=ceil(Mj09/2+US8); end; run; Si no lo haces así, puedes tener problemas en la primera observación. En R podrías hacer algo en la siguiente línea: kk <- matrix( 1:6, 2, 3 ) (conjunto de entrada prueba) foo <- function( x, usX ){ repeat{ tmp <- 2 * runif( 1 ) us8 <- ceiling( x * tmp / 2 ) us9 <- ceiling( us8 + x /2 ) if( !( us8 %in% usX | us9 %in% usX ) ) break } c( x, usX, us8, us9 ) } La salida es> t( apply( kk, 1, function( x ) foo( x[1], x[-1] ) ) )[,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 1 2 [2,] 2 4 6 2 3> kk[,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 Las columnas 4 y 5 se construyen a partir de la 1 (aleatoriamente) sin y sin coincidencias con las 2 y 3. Un saludo, Carlos J. Gil Bellosta El día 9 de octubre de 2009 16:01, jose ramirez costa <joseramirezcosta en gmail.com> escribió:> Hola quiero usar una sentencia do until o do while en R y no se como se usa. > > Aca esta el programa q hice en SAS, alguien me podria decir como hacerlo en > R. > > Gracias > > data marco12; set eah09.marco1; > do until ((us8 ne us1) & (us8 ne us2) & (us8 ne us3) & (us8 ne us4) & (us8 > ne us5) & (us8 ne us6) & (us8 ne us7bis) > & (us9 ne us1) & (us9 ne us2) & (us9 ne us3) & (us9 ne us4) & (us9 > ne us5) & (us9 ne us6) & (us9 ne us7bis)); > Aleat2=uniform(2); > US8=ceil(Aleat2*Mj09/2); > US9=ceil(Mj09/2+US8); > end; > run; > > -- > José > > "... hoy el cambio cualitativo la liberacion, implica, cambios organicos, de > instinto y biologicos, AL MISMO TIEMPO q cambios politicos y sociales" H. M. > > [[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 > >