Re: [R-es] Expresión en un objeto
Algo asi: En lunes, 14 de agosto de 2023, 17:29:37 CEST, jose luis via R-help-es escribió: Hola, no estoy seguro de si es esto lo que te hace falta. ¿conoces la funcion "coalesce"? coalesce function - RDocumentation | | | | coalesce function - RDocumentation Given a set of vectors, coalesce() finds the first non-missing value at each position. This is i... | | | How to implement coalesce efficiently in R | | | | | | | | | | | How to implement coalesce efficiently in R BackgroundSeveral SQL languages (I mostly use postgreSQL) have a function called coalesce which returns the fi... | | | En lunes, 14 de agosto de 2023, 16:38:04 CEST, Griera-yandex escribió: Hola: Aplicando tu solución al problema original, seria: > 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) > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" # Sin ORD: > V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100 > V3 [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895 [7] 9.756098 -37.50 0.625000 -72.22 # Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD: > V3 <- eval(parse(text = paste0 ("((", ORD, "- V1)/V1)*100"))) > V3 [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895 [7] 9.756098 -37.50 0.625000 -72.22 # Sin ORD: > 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) > V4 [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0" # Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD: > V4 <- eval(parse(text = paste0 ("ifelse (! is.na (((", ORD, > "-V1)/V1)*100), ifelse (((", ORD, "-V1)/V1)*100 > 0, '1', '0'), NA)"))) > V4 [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0" Mucas gracias y saludos. On Mon, 14 Aug 2023 10:14:06 +0200 Proyecto R-UCA wrote: > Buenas, > > ¿Qué tal esto? > > > V1 <- 1 > > V2a <- 20 > > V2b <- 200 > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" > > V3 <- "((ORD - V1)/V1)*100" > > V33 <- sub('ORD', ORD, V3) > > V33 > [1] "(((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100" > > eval(parse(text = V33)) > [1] 1900 > > Un saludo > > El vie, 11-08-2023 a las 12:30 +0200, Griera-yandex escribió: > > Gracias, Isidro, por la ayuda: > > > > On Fri, 11 Aug 2023 09:16:34 + > > Isidro Hidalgo Arellano 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 En nombre de Griera > > > Enviado el: jueves, 10 de agosto de 2023 19:36 > > > Para: r-help-es@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 <-
Re: [R-es] Expresión en un objeto
Hola, no estoy seguro de si es esto lo que te hace falta. ¿conoces la funcion "coalesce"? coalesce function - RDocumentation | | | | coalesce function - RDocumentation Given a set of vectors, coalesce() finds the first non-missing value at each position. This is i... | | | How to implement coalesce efficiently in R | | | | | | | | | | | How to implement coalesce efficiently in R BackgroundSeveral SQL languages (I mostly use postgreSQL) have a function called coalesce which returns the fi... | | | En lunes, 14 de agosto de 2023, 16:38:04 CEST, Griera-yandex escribió: Hola: Aplicando tu solución al problema original, seria: > 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) > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" # Sin ORD: > V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100 > V3 [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895 [7] 9.756098 -37.50 0.625000 -72.22 # Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD: > V3 <- eval(parse(text = paste0 ("((", ORD, "- V1)/V1)*100"))) > V3 [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895 [7] 9.756098 -37.50 0.625000 -72.22 # Sin ORD: > 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) > V4 [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0" # Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD: > V4 <- eval(parse(text = paste0 ("ifelse (! is.na (((", ORD, > "-V1)/V1)*100), ifelse (((", ORD, "-V1)/V1)*100 > 0, '1', '0'), NA)"))) > V4 [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0" Mucas gracias y saludos. On Mon, 14 Aug 2023 10:14:06 +0200 Proyecto R-UCA wrote: > Buenas, > > ¿Qué tal esto? > > > V1 <- 1 > > V2a <- 20 > > V2b <- 200 > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" > > V3 <- "((ORD - V1)/V1)*100" > > V33 <- sub('ORD', ORD, V3) > > V33 > [1] "(((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100" > > eval(parse(text = V33)) > [1] 1900 > > Un saludo > > El vie, 11-08-2023 a las 12:30 +0200, Griera-yandex escribió: > > Gracias, Isidro, por la ayuda: > > > > On Fri, 11 Aug 2023 09:16:34 + > > Isidro Hidalgo Arellano 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 En nombre de Griera > > > Enviado el: jueves, 10 de agosto de 2023 19:36 > > > Para: r-help-es@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 > > >
Re: [R-es] Expresión en un objeto
Hola: Aplicando tu solución al problema original, seria: > 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) > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" # Sin ORD: > V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100 > V3 [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895 [7] 9.756098 -37.50 0.625000 -72.22 # Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD: > V3 <- eval(parse(text = paste0 ("((", ORD, "- V1)/V1)*100"))) > V3 [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895 [7] 9.756098 -37.50 0.625000 -72.22 # Sin ORD: > 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) > V4 [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0" # Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD: > V4 <- eval(parse(text = paste0 ("ifelse (! is.na (((", ORD, "-V1)/V1)*100), > ifelse (((", ORD, "-V1)/V1)*100 > 0, '1', '0'), NA)"))) > V4 [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0" Mucas gracias y saludos. On Mon, 14 Aug 2023 10:14:06 +0200 Proyecto R-UCA wrote: > Buenas, > > ¿Qué tal esto? > > > V1 <- 1 > > V2a <- 20 > > V2b <- 200 > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" > > V3 <- "((ORD - V1)/V1)*100" > > V33 <- sub('ORD', ORD, V3) > > V33 > [1] "(((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100" > > eval(parse(text = V33)) > [1] 1900 > > Un saludo > > El vie, 11-08-2023 a las 12:30 +0200, Griera-yandex escribió: > > Gracias, Isidro, por la ayuda: > > > > On Fri, 11 Aug 2023 09:16:34 + > > Isidro Hidalgo Arellano 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 En nombre de Griera > > > Enviado el: jueves, 10 de agosto de 2023 19:36 > > > Para: r-help-es@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@r-project.org > > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$ > > > > > > > ___ > > R-help-es mailing list > > R-help-es@r-project.org > >
Re: [R-es] Expresión en un objeto
Hola: Si, esto está mucho más cerca de lo que quería! Creo que es la solución. Gracias! Lo trabajo! Saludos. On Mon, 14 Aug 2023 10:14:06 +0200 Proyecto R-UCA wrote: > Buenas, > > ¿Qué tal esto? > > > V1 <- 1 > > V2a <- 20 > > V2b <- 200 > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" > > V3 <- "((ORD - V1)/V1)*100" > > V33 <- sub('ORD', ORD, V3) > > V33 > [1] "(((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100" > > eval(parse(text = V33)) > [1] 1900 > > Un saludo > > El vie, 11-08-2023 a las 12:30 +0200, Griera-yandex escribió: > > Gracias, Isidro, por la ayuda: > > > > On Fri, 11 Aug 2023 09:16:34 + > > Isidro Hidalgo Arellano 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 En nombre de Griera > > > Enviado el: jueves, 10 de agosto de 2023 19:36 > > > Para: r-help-es@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@r-project.org > > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$ > > > > > > > ___ > > R-help-es mailing list > > R-help-es@r-project.org > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$ > > > > ___ > 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
Re: [R-es] Expresión en un objeto
Buenas, ¿Qué tal esto? > V1 <- 1 > V2a <- 20 > V2b <- 200 > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" > V3 <- "((ORD - V1)/V1)*100" > V33 <- sub('ORD', ORD, V3) > V33 [1] "(((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100" > eval(parse(text = V33)) [1] 1900 Un saludo El vie, 11-08-2023 a las 12:30 +0200, Griera-yandex escribió: > Gracias, Isidro, por la ayuda: > > On Fri, 11 Aug 2023 09:16:34 + > Isidro Hidalgo Arellano 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 En nombre de Griera > > Enviado el: jueves, 10 de agosto de 2023 19:36 > > Para: r-help-es@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@r-project.org > > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$ > > > > ___ > R-help-es mailing list > R-help-es@r-project.org > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$ > ___ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es