[R-es] error en ifelse

Jorge Miguel Garcia Fernandez jm.garcia.fdz en gmail.com
Mie Feb 26 22:43:15 CET 2014


El problema puede estar en el no uso de suficientes paréntesis. Por
ejemplo, con:
> a=1
> b=0
> c=0

la instrucción

 ifelse(((a>1) | (b=0) | (c=1) | (d=1)), 11, 22)

da el resultado esperado:

[1] 11

Pero si se omiten los paréntesis se llega a un error de interpretación:

destino de la asignación se expande a un objeto fuera del lenguaje

Espero que sirva

Jorge



El 26/2/14, daniel <daniel319 en gmail.com> escribió:
> Priscila,
>
> Los NA aparecen porque en la condición:
>
> guaran$sp=="L.lucidum"|guaran$pap11 ==
> "muerto"|guaran$pap06=="muerto"|guaran$pap01=="muerto"|guaran$pap96=="muerto"
>
> hay alguna columna que es NA. Por ejemplo en la línea 46:
>
>  c.1    P.porphyria  <NA>   <NA>  nuevo     34     38 157 44        NA
>
> la cuarta columan es pap96. Si los NA están en columnas que no son
> evaluadas por la condición, no se debieran generan NA. No revisé caso por
> caso para ver si esto se cumple pero hace sentido para mi.
>
> Para resolver el problema lo mejor es que sigas lo propuesto por Francisco
> Viciana.
>
> Si lo que quieres es ignorar las columnas con NA y seguir buscando en las
> otras entonces reemplaza los NA por otra variable en las columnas que usas
> y terminado vuelve a poner en su lugar los NA. Ten mucho cuidado si haces
> esto, y solo si lo permite el problema que tratas de resolver.
>
> Espero te sirva para entender por que aparecen los NA en tu ejemplo.
>
> Daniel Merino
>
>
>
> El 26 de febrero de 2014, 13:41, "Marcuzzi, Javier Rubén" <
> javier.ruben.marcuzzi en gmail.com> escribió:
>
>> Hola
>>
>> No es lo mismo pero en mi caso personal la forma que utilizo se basa en
>> el ejemplo de http://cran.r-project.org/doc/contrib/grafi3.pdf página
>> 49, no usa el if pero también hay una condición para todos los
>> verdaderos.
>>
>> No intenté en este caso en particular, habría que ver si también da
>> problemas, pero como Carlos Ortega que sabe mucho dio una solución y
>> como vos estas empezando no quiero confundirte,
>>
>> Javier Marcuzzi
>>
>>
>> El 26/02/14 12:49, Carlos Ortega escribió:
>> > Hola,
>> >
>> > No he encontrado la razón de que la explicación sea estrictamente la
>> > presencia de NAs.
>> > Por este contraejemplo:
>> >
>> >> val <- guaran[44,]
>> >> val
>> >     parc.      sp pap91 pap96 pap01  pap06 pap11   x  y
>> > 44   c.1 T.stans  *<NA>* nuevo    47 muerto  *<NA>* 149 52
>> >> ifelse(
>> > +                    val$sp=="L.lucidum" | val$pap11 == "muerto"
>> > +                  | val$pap06=="muerto" | val$pap01=="muerto"
>> > +                  | val$pap96=="muerto", 1, 0
>> > +                           )
>> > [1] *1* *#Devuelve bien el valor el ifelse a pesar de que hay NAs.*
>> >> val <- guaran[45,]
>> >> val
>> >     parc.       sp pap91 pap96 pap01 pap06 pap11   x  y
>> > 45   c.1 C.lilloi  *<NA>*  *<NA> *nuevo    54    53 159 42
>> >> ifelse(
>> > +                    val$sp=="L.lucidum" | val$pap11 == "muerto"
>> > +                  | val$pap06=="muerto" | val$pap01=="muerto"
>> > +                  | val$pap96=="muerto", 1, 0
>> > +                           )
>> > [1] *NA* *# Pero en este otro caso que debería ser "1" devuelve un
>> > "NA".*
>> >
>> > Al aplicar el "ifelse" es a partir de la fila 45 donde comienzan a
>> aparecer
>> > los "NA", aunque en múltiples filas anteriores hay valores NA.
>> >
>> > Pero sí que es cierto que al quitar todos los NAs el problema se
>> resuelve.
>> > El siguiente código quita los NA, aplica el ifelse creando la nueva
>> columna
>> > y vuelve a darte a ponerte los NAs que tenías al principio....
>> >
>> >
>> #-------------------------------------------------------------------------
>> > # Sustituyo los NA por ZZ
>> > guaran <- dat.in[,c(1:9)]
>> > for (i in 1:dim(guaran)[2]) {
>> >      guaran[is.na(guaran[,i]),i] <- c("ZZ")
>> > }
>> > #head(guaran,25)
>> >
>> > #Compruebo que funciona el ifelse
>> > guaran$datmatriz <- ifelse(
>> >                     guaran$sp == "L.lucidum" | guaran$pap11 == "muerto"
>> >                   | guaran$pap06 == "muerto" | guaran$pap01 == "muerto"
>> >                   | guaran$pap96 == "muerto", 1, 0
>> >                            )
>> > #head(guaran,50)
>> >
>> > #Devuelvo el data.frame al estado original
>> > # Pero con la columna del ifelse ya añadida y evaluada
>> > for (i in 1:dim(guaran)[2]) {
>> >      guaran[guaran[,i]=="ZZ",i] <- NA
>> > }
>> >
>> > #head(guaran,50)
>> >
>> #-------------------------------------------------------------------------
>> >
>> >
>> > Saludos,
>> > Carlos Ortega
>> > www.qualityexcellence.es
>> >
>> >
>> >
>> >
>> > El 26 de febrero de 2014, 15:23, Priscila Ana Powell <
>> > priscilaapowell en gmail.com> escribió:
>> >
>> >> Hola gente!! Estoy empezando a trabajar con R, y no puedo resolver lo
>> >> siguiente:
>> >>
>> >> Quiero crear una nueva variable (datmatriz) que toma el valor de 1 si:
>> >> -la variable sp es igual a L.lucidum
>> >> -alguna de las variables pap11, pap06, pap01, pap96 es igual a muerto.
>> >>
>> >> El script que utilicé es :
>> >>
>> >> guaran$datmatriz<-ifelse (guaran$sp=="L.lucidum"|guaran$pap11 ==
>> >>
>> "muerto"|guaran$pap06=="muerto"|guaran$pap01=="muerto"|guaran$pap96=="muerto",
>> >> 1, 0)
>> >>
>> >> Sin embargo, al observar datmatriz, tengo 0, 1 y NA, que no sé que los
>> >> genera.
>> >>
>> >> Alguna idea para salvar el inconveniente?
>> >>
>> >> adjunto la matriz
>> >>
>> >> desde ya, muchas gracias!!
>> >>
>> >>
>> >> saludos !
>> >>
>> >> Priscila
>> >> --
>> >>   Priscila Ana Powell
>> >> Instituto de Ecología Regional
>> >> Facultad de Ciencias Naturales e Instituto Miguel Lillo
>> >> Universidad Nacional de Tucumán
>> >> Argentina
>> >>
>> >> _______________________________________________
>> >> R-help-es mailing list
>> >> R-help-es en r-project.org
>> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
>> >>
>> >>
>> >
>> >
>> >
>> > _______________________________________________
>> > 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
>>
>>
>
>
> --
> Daniel
>
> 	[[alternative HTML version deleted]]
>
>



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