[R-es] Como usar un DO WHILE o un DO UNTIL en R

Carlos J. Gil Bellosta cgb en datanalytics.com
Vie Oct 9 16:52:46 CEST 2009


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
>
>



Más información sobre la lista de distribución R-help-es