[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.500000 0.625000 -72.222222 # 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.500000 0.625000 -72.222222 # 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 <r-uca en uca.es> 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 +0000 Isidro Hidalgo Arellano <ihidalgo en jccm.es> 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 <r-help-es-bounces en r-project.org> En nombre de Griera Enviado el: jueves, 10 de agosto de 2023 19:36 Para: r-help-es en 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 en 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 en 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 en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es