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$
>