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

2023-08-15 Por tema Griera-yandex
Hola, José Luis:

Muchas gracias por responder. No conocía esta función. La reviso.

Pero en el problema que planteaba, la identificación de los valores 
desconocidos era como un ejemplo, no que realmente los necesitase identificar. 
El problema que planteaba era si en una una orden, por ejemplo:

V3 <- ((V1 - V2) / (V2)) * 100

se podía substituir una parte de ella por un texto almacenado en un objeto. Es 
decir, algo así como en el ejemplo:

> V1 <- c (47, 71,  41,  23,  83, 152,  82,   8, 160,  18)
+ V2 <- c (NA, 36,  15,   5,  56,  18,  NA,   5,  NA,   5)
+ V3 <- ((V1 - V2) / (V2)) * 100
+ V3
 [1]NA  97.2 173.3 360.0  48.21429 744.4NA
 [8]  60.0NA 260.0

substituir "(V1 - V2)" por un texto almacenado en un objeto. La solución de 
R-UCA seria:

> OBJ <- "(V1 - V2)"
+ V3 <- eval(parse(text = paste0 ("(", OBJ, "/ (V2)) * 100")))
+ V3
 [1]NA  97.2 173.3 360.0  48.21429 744.4NA
 [8]  60.0NA 260.0

Gracias por la ayuda y saludos.


On Mon, 14 Aug 2023 15:29:00 + (UTC)
jose luis  wrote:

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

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


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

2023-08-12 Por tema Griera-yandex
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  wrote:

> No tuve tiempo de mirarlo, pero, ¿es coherente lo que dice?
> 
> El vie, 11 ago 2023 a las 21:02, Griera-yandex ()
> 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  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 () 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


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

2023-08-11 Por tema Manuel Mendoza
No tuve tiempo de mirarlo, pero, ¿es coherente lo que dice?

El vie, 11 ago 2023 a las 21:02, Griera-yandex ()
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  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 () 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
> > >
>

[[alternative HTML version deleted]]

___
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-11 Por tema Griera-yandex
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  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 () 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


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

2023-08-11 Por tema Manuel Mendoza
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 () 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
>

[[alternative HTML version deleted]]

___
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-11 Por tema Griera-yandex
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://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-11 Por tema Isidro Hidalgo Arellano via R-help-es
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 
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://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