[R-es] Expresión en un objeto

Griera-yandex gr|er@ @end|ng |rom y@ndex@com
Vie Ago 11 12:30:24 CEST 2023


Gracias, Isidro, por la ayuda:

On Fri, 11 Aug 2023 09:16:34 +0000
Isidro Hidalgo Arellano <ihidalgo using jccm.es> wrote:

> A ver... con que xfunc() esté preparada para tomar un parámetro de tipo "carácter" y evaluarlo, claro que se puede hacer...
> Si el problema lo tienes en evaluar la expresión, la función "eval()" te lo hace.
> Si no te he entendido bien, explícate más 😊

Simplemente quería que en la orden:

V3 <- ((ORD - V1)/V1)*100

ORD lo reconocieses (y lo substituyese), por ejemplo, como "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,
V2a))".

Con eval() no parece que funcione:

> ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,  V2a))"
> V3 <- ((eval (ORD) - V1)/V1)*100
Error in eval(ORD) - V1 : non-numeric argument to binary operator

Alguna sugerencia?

Gracias y saludos.


> Saludos
> Isidro
> 
> 
> -----Mensaje original-----
> De: R-help-es <r-help-es-bounces using r-project.org> En nombre de Griera
> Enviado el: jueves, 10 de agosto de 2023 19:36
> Para: r-help-es using r-project.org
> Asunto: [R-es] Expresión en un objeto
> 
> Hola a todos:
> 
> Se me ha planteado un problema que no está ligado a ningún problema concreto. Es más teórico. 
> 
> Supongamos que tenemos tres variables:
> 
> V1  <- c (47, 71,  41,  23,  83, 152,  82,   8, 160,  18)
> V2a <- c (NA, 36,  15,   5,  56,  18,  NA,   5,  NA,   5)
> V2b <- c (37, NA,  15,  NA,  NA,  NA,  90,  NA,  161, NA)
> 
> Supongamos que tengo la expresión (que no puedo asignarlo a ninguna variable):
> 
> (ifelse (is.na (V2a) & ! is.na (V2b), V2b,  V2a))
> 
> Supongamos que tengo que utilizar esta expresión dos o más veces y no puedo utilizar ni un xapply () ni un bucle. Por ejemplo:
> 
> V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b,  V2a)) - V1)/V1)*100
> V4 <-	ifelse (! is.na ((((ifelse (is.na (V2a) & ! is.na (V2b),
> V2b,  V2a))-V1)/V1)*100), ifelse ((((ifelse (is.na (V2a) & ! is.na (V2b), V2b,  V2a))-V1)/V1)*100 > 0, "1", "0"), NA)
> 
> Hay alguna forma de almacenar la expresión "(ifelse (is.na (V2a) & !
> is.na (V2b), V2b,  V2a))" en un objeto y utilizar el nombre del objeto en las ordenes (por ejemplo, con una hipotética función xfunc ()). Por
> ejemplo:
> 
> ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,  V2a))"
> V3 <- ((xfunc (ORD) - V1)/V1)*100
> V4 <-	ifelse (! is.na (((xfunc (ORD)-V1)/V1)*100), ifelse
> (((xfunc (ORD)-V1)/V1)*100 > 0, "1", "0"), NA)
> 
> 
> El ejemnplo és absurdo, pero solo lo presento como un hipotético ejercicio.
> 
> Muchas gracias por la ayuda.
> 
> _______________________________________________
> R-help-es mailing list
> R-help-es using 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