Foro de debate

Iteración while en R

Iteración while en R

de Silvia Guerra -
Número de respuestas: 2

Hola, la verdad es que tengo una sentencia que recorre un vector y va eliminando todas aquellas filas que solo tienen 0. Lo tengo programado con un For:

for (j in 1:m.tab)

{
      filaux<-tab[j,3:(n.tab-2)] (datos que queremos comprobar)
      S<-sum(filaux)                 (comprobamos si es un vector de ceros)
      if (S==0)
      {
             res<-eliminar_fila (tab, j) (elimina la fila que esta
llena de 0)
             tab<-res                           (pasa a ser la tabla que nos 
interesa)
      }
}

El problema es que como voy eliminando las filas en la tabla tab, llega un momento que el vector sale de rango.

Para ir bien tendria que hacer algo como un while que se utiliza en java pero no se como se hace eso en Rgui. ¿Alguien podria ayudarme?

Muchas Grácias!!

En respuesta a Silvia Guerra

Re: Iteración while en R

de Antonio Jesús Arriaza Gómez -
La siguiente función elimina todas las filas nulas de un data.frame o una matriz, si deseas restringir su uso a un número de filas se puede modificar sin problemas.

filtro<-function(datos){

indice<-c(0)
filas<-dim(datos)[1]

for(j in 1:filas){
S<-sum(datos[j,]^2)
if(S!=0) indice<-c(indice,j)
}

indice<-indice[2:length(indice)]
return(datos[indice,])
}

PD: La condición "S<-sum(filaux) (comprobamos si es un vector de ceros)" de tu bucle no discrimina si la fila es nula pues puede contener números positivos y negativos que hagan la suma cero. Para eso se utiliza la suma de cada elemento de la fila al cuadrado que es cero si y sólo si cada elemento es cero.

Un saludo.