Re: [R-es] Expresión en un objeto

2023-08-14 Por tema jose luis via R-help-es
 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

2023-08-14 Por tema jose luis via R-help-es
 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

2023-08-14 Por tema Griera-yandex
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

2023-08-14 Por tema Griera-yandex
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

2023-08-14 Por tema Proyecto R-UCA
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