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 en 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 en 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 en r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >