[R-es] Expresión en un objeto

Griera-yandex gr|er@ @end|ng |rom y@ndex@com
Vie Ago 11 21:02:46 CEST 2023


Muchas gracias, Manuel:

Que bueno! No se me había ocurrido lo de GPT!

Lo pruebo.

Saludos.

On Fri, 11 Aug 2023 18:15:18 +0200
Manuel Mendoza <mmendoza using fulbrightmail.org> wrote:

> Esta es la respuesta que te da ChatGPT-4:
> 
> Entiendo tu pregunta y, aunque no hay una función nativa en R que te
> permita hacer exactamente lo que estás pidiendo, puedes lograr el mismo
> resultado utilizando una función. Una función te permitiría encapsular la
> lógica de la expresión que quieres reutilizar y luego llamar a esa función
> donde sea necesario.
> 
> He aquí cómo podrías hacerlo:
> 
> 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)
> 
> # Definir una función que encapsula la lógica de la expresión
> myFunc <- function(V2a, V2b) {
>   ifelse(is.na(V2a) & !is.na(V2b), V2b, V2a)
> }
> 
> # Luego puedes usar esa función donde necesites la expresión
> V3 <- ((myFunc(V2a, V2b) - V1)/V1)*100
> V4 <- ifelse(!is.na(((myFunc(V2a, V2b)-V1)/V1)*100), ifelse(((myFunc(V2a,
> V2b)-V1)/V1)*100 > 0, "1", "0"), NA)
> ```
> 
> Definir la lógica dentro de una función te brinda la flexibilidad de
> reutilizar esa lógica en diferentes partes de tu código sin tener que
> repetir la misma expresión una y otra vez. Esto hace que tu código sea más
> fácil de leer y mantener.
> 
> 
> 
> El jue, 10 ago 2023 a las 19:36, Griera (<griera using yandex.com>) escribió:
> 
> > 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