Hola, Manuel: La propuesta es lógica y funciona:
> 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) Está en la línea de la solución propuesta por Juan Abasolo. Pero no es lo qu buscaba que, por lo que veo, no existe. Gracias a todos por las sugerencias. Saludos. On Sat, 12 Aug 2023 05:07:26 +0200 Manuel Mendoza <mmend...@fulbrightmail.org> wrote: > No tuve tiempo de mirarlo, pero, ¿es coherente lo que dice? > > El vie, 11 ago 2023 a las 21:02, Griera-yandex (<gri...@yandex.com>) > escribió: > > > 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 <mmend...@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 (<gri...@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@r-project.org > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es