[R-es] Expresión en un objeto

Manuel Mendoza mmendoz@ @end|ng |rom |u|br|ghtm@||@org
Vie Ago 11 18:15:18 CEST 2023


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
>

	[[alternative HTML version deleted]]



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