<html><head></head><body><div class="ydp6a0dd22yahoo-style-wrap" style="font-family:courier new, courier, monaco, monospace, sans-serif;font-size:16px;"><div></div>
<div dir="ltr" data-setdir="false">Algo asi:</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><img title="Imagen en el mensaje" alt="Imagen en el mensaje" src="cid:f4b0cdd0-d92d-aa45-7520-caf3fc824e14@yahoo.com" class="yahoo-inline-image" draggable="false" style="max-width: 401px; width: 100%;" data-id="<f4b0cdd0-d92d-aa45-7520-caf3fc824e14@yahoo.com>"><br><span></span><br></div><div><br></div>
</div><div id="yahoo_quoted_3005928528" class="yahoo_quoted">
<div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
<div>
En lunes, 14 de agosto de 2023, 17:29:37 CEST, jose luis via R-help-es <r-help-es@r-project.org> escribió:
</div>
<div><br></div>
<div><br></div>
<div> Hola, no estoy seguro de si es esto lo que te hace falta. ¿conoces la funcion "coalesce"?<br clear="none">coalesce function - RDocumentation<br clear="none"><br clear="none"><br clear="none">| <br clear="none">| <br clear="none">| | <br clear="none">coalesce function - RDocumentation<br clear="none"><br clear="none"><p>Given a set of vectors, <code>coalesce()</code> finds the first non-missing value at each position. This is i...<br clear="none"> |<br clear="none"><br clear="none"> |<br clear="none"><br clear="none"> |<br clear="none"><br clear="none"><br clear="none"><br clear="none">How to implement coalesce efficiently in R<br clear="none"><br clear="none"><br clear="none">| <br clear="none">| <br clear="none">| <br clear="none">| | |<br clear="none"><br clear="none"> |<br clear="none"><br clear="none"> |<br clear="none">| <br clear="none">| | <br clear="none">How to implement coalesce efficiently in R<br clear="none"><br clear="none">BackgroundSeveral SQL languages (I mostly use postgreSQL) have a function called coalesce which returns the fi...<br clear="none"> |<br clear="none"><br clear="none"> |<br clear="none"><br clear="none"> |<br clear="none"><br clear="none"><br clear="none"><br clear="none"> En lunes, 14 de agosto de 2023, 16:38:04 CEST, Griera-yandex <<a shape="rect" ymailto="mailto:griera@yandex.com" href="mailto:griera@yandex.com">griera@yandex.com</a>> escribió: <br clear="none"> <br clear="none"> Hola:<br clear="none"><br clear="none">Aplicando tu solución al problema original, seria:<br clear="none"><br clear="none">> V1 <- c (47, 71, 41, 23, 83, 152, 82, 8, 160, 18)<br clear="none">> V2a <- c (NA, 36, 15, 5, 56, 18, NA, 5, NA, 5)<br clear="none">> V2b <- c (37, NA, 15, NA, NA, NA, 90, NA, 161, NA)<br clear="none">> ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))"<br clear="none"><br clear="none"># Sin ORD:<br clear="none"><br clear="none">> V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100<br clear="none">> V3<br clear="none"> [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895<br clear="none"> [7] 9.756098 -37.500000 0.625000 -72.222222<br clear="none"><br clear="none"># Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD:<br clear="none"><br clear="none">> V3 <- eval(parse(text = paste0 ("((", ORD, "- V1)/V1)*100")))<br clear="none">> V3 <br clear="none"> [1] -21.276596 -49.295775 -63.414634 -78.260870 -32.530120 -88.157895<br clear="none"> [7] 9.756098 -37.500000 0.625000 -72.222222<br clear="none"><br clear="none"># Sin ORD:<br clear="none"><br clear="none">> 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)<br clear="none">> V4<br clear="none"> [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0"<br clear="none"><br clear="none"># Substituyendo "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))" por ORD:<br clear="none"><br clear="none">> V4 <- eval(parse(text = paste0 ("ifelse (! is.na (((", ORD, "-V1)/V1)*100), ifelse (((", ORD, "-V1)/V1)*100 > 0, '1', '0'), NA)")))<br clear="none">> V4<br clear="none"> [1] "0" "0" "0" "0" "0" "0" "1" "0" "1" "0"<br clear="none"><br clear="none"><br clear="none">Mucas gracias y saludos.<br clear="none"><br clear="none">On Mon, 14 Aug 2023 10:14:06 +0200<br clear="none">Proyecto R-UCA <<a shape="rect" ymailto="mailto:r-uca@uca.es" href="mailto:r-uca@uca.es">r-uca@uca.es</a>> wrote:<br clear="none"><br clear="none">> Buenas,<br clear="none">> <br clear="none">> ¿Qué tal esto?<br clear="none">> <br clear="none">> > V1 <- 1<br clear="none">> > V2a <- 20<br clear="none">> > V2b <- 200<br clear="none">> > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))"<br clear="none">> > V3 <- "((ORD - V1)/V1)*100"<br clear="none">> > V33 <- sub('ORD', ORD, V3)<br clear="none">> > V33<br clear="none">> [1] "(((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100"<br clear="none">> > eval(parse(text = V33))<br clear="none">> [1] 1900<br clear="none">> <br clear="none">> Un saludo<br clear="none">> <br clear="none">> El vie, 11-08-2023 a las 12:30 +0200, Griera-yandex escribió:<br clear="none">> > Gracias, Isidro, por la ayuda:<br clear="none">> > <br clear="none">> > On Fri, 11 Aug 2023 09:16:34 +0000<br clear="none">> > Isidro Hidalgo Arellano <<a shape="rect" ymailto="mailto:ihidalgo@jccm.es" href="mailto:ihidalgo@jccm.es">ihidalgo@jccm.es</a>> wrote:<br clear="none">> > <br clear="none">> > > A ver... con que xfunc() esté preparada para tomar un parámetro de tipo "carácter" y evaluarlo, claro que se puede hacer...<br clear="none">> > > Si el problema lo tienes en evaluar la expresión, la función "eval()" te lo hace.<br clear="none">> > > Si no te he entendido bien, explícate más 😊<br clear="none">> > <br clear="none">> > Simplemente quería que en la orden:<br clear="none">> > <br clear="none">> > V3 <- ((ORD - V1)/V1)*100<br clear="none">> > <br clear="none">> > ORD lo reconocieses (y lo substituyese), por ejemplo, como "(ifelse (is.na (V2a) & ! is.na (V2b), V2b,<br clear="none">> > V2a))".<br clear="none">> > <br clear="none">> > Con eval() no parece que funcione:<br clear="none">> > <br clear="none">> > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))"<br clear="none">> > > V3 <- ((eval (ORD) - V1)/V1)*100<br clear="none">> > Error in eval(ORD) - V1 : non-numeric argument to binary operator<br clear="none">> > <br clear="none">> > Alguna sugerencia?<br clear="none">> > <br clear="none">> > Gracias y saludos.<br clear="none">> > <br clear="none">> > <br clear="none">> > > Saludos<br clear="none">> > > Isidro<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > -----Mensaje original-----<br clear="none">> > > De: R-help-es <<a shape="rect" ymailto="mailto:r-help-es-bounces@r-project.org" href="mailto:r-help-es-bounces@r-project.org">r-help-es-bounces@r-project.org</a>> En nombre de Griera<br clear="none">> > > Enviado el: jueves, 10 de agosto de 2023 19:36<br clear="none">> > > Para: <a shape="rect" ymailto="mailto:r-help-es@r-project.org" href="mailto:r-help-es@r-project.org">r-help-es@r-project.org</a><br clear="none">> > > Asunto: [R-es] Expresión en un objeto<br clear="none">> > > <br clear="none">> > > Hola a todos:<br clear="none">> > > <br clear="none">> > > Se me ha planteado un problema que no está ligado a ningún problema concreto. Es más teórico. <br clear="none">> > > <br clear="none">> > > Supongamos que tenemos tres variables:<br clear="none">> > > <br clear="none">> > > V1 <- c (47, 71, 41, 23, 83, 152, 82, 8, 160, 18)<br clear="none">> > > V2a <- c (NA, 36, 15, 5, 56, 18, NA, 5, NA, 5)<br clear="none">> > > V2b <- c (37, NA, 15, NA, NA, NA, 90, NA, 161, NA)<br clear="none">> > > <br clear="none">> > > Supongamos que tengo la expresión (que no puedo asignarlo a ninguna variable):<br clear="none">> > > <br clear="none">> > > (ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))<br clear="none">> > > <br clear="none">> > > 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:<br clear="none">> > > <br clear="none">> > > V3 <- (((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a)) - V1)/V1)*100<br clear="none">> > > V4 <- ifelse (! is.na ((((ifelse (is.na (V2a) & ! is.na (V2b),<br clear="none">> > > V2b, V2a))-V1)/V1)*100), ifelse ((((ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))-V1)/V1)*100 > 0, "1", "0"), NA)<br clear="none">> > > <br clear="none">> > > Hay alguna forma de almacenar la expresión "(ifelse (is.na (V2a) & !<br clear="none">> > > 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<br clear="none">> > > ()). Por<br clear="none">> > > ejemplo:<br clear="none">> > > <br clear="none">> > > ORD <- "(ifelse (is.na (V2a) & ! is.na (V2b), V2b, V2a))"<br clear="none">> > > V3 <- ((xfunc (ORD) - V1)/V1)*100<br clear="none">> > > V4 <- ifelse (! is.na (((xfunc (ORD)-V1)/V1)*100), ifelse<br clear="none">> > > (((xfunc (ORD)-V1)/V1)*100 > 0, "1", "0"), NA)<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > El ejemnplo és absurdo, pero solo lo presento como un hipotético ejercicio.<br clear="none">> > > <br clear="none">> > > Muchas gracias por la ayuda.<br clear="none">> > > <br clear="none">> > > _______________________________________________<br clear="none">> > > R-help-es mailing list<br clear="none">> > > <a shape="rect" ymailto="mailto:R-help-es@r-project.org" href="mailto:R-help-es@r-project.org">R-help-es@r-project.org</a><br clear="none">> > > <a shape="rect" href="https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$" target="_blank">https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$</a><br clear="none">> > > <br clear="none">> > <br clear="none">> > _______________________________________________<br clear="none">> > R-help-es mailing list<br clear="none">> > <a shape="rect" ymailto="mailto:R-help-es@r-project.org" href="mailto:R-help-es@r-project.org">R-help-es@r-project.org</a><br clear="none">> > <a shape="rect" href="https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$" target="_blank">https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help-es__;!!D9dNQwwGXtA!XN-cky8L5_OX7y2kyLLm27CRefYwg62XypISxc1W0ZPK_yu5yoIEqqRZK27otqN6Gvr0JcGQZ26m$</a><br clear="none">> > <br clear="none">> <br clear="none">> _______________________________________________<br clear="none">> R-help-es mailing list<br clear="none">> <a shape="rect" ymailto="mailto:R-help-es@r-project.org" href="mailto:R-help-es@r-project.org">R-help-es@r-project.org</a><br clear="none">> <a shape="rect" href="https://stat.ethz.ch/mailman/listinfo/r-help-es" target="_blank">https://stat.ethz.ch/mailman/listinfo/r-help-es</a><br clear="none"><br clear="none">_______________________________________________<br clear="none">R-help-es mailing list<br clear="none"><a shape="rect" ymailto="mailto:R-help-es@r-project.org" href="mailto:R-help-es@r-project.org">R-help-es@r-project.org</a><br clear="none"><a shape="rect" href="https://stat.ethz.ch/mailman/listinfo/r-help-es" target="_blank">https://stat.ethz.ch/mailman/listinfo/r-help-es</a><br clear="none"> <br clear="none"> [[alternative HTML version deleted]]<div class="yqt7194069832" id="yqtfd08562"><br clear="none"><br clear="none">_______________________________________________<br clear="none">R-help-es mailing list<br clear="none"><a shape="rect" ymailto="mailto:R-help-es@r-project.org" href="mailto:R-help-es@r-project.org">R-help-es@r-project.org</a><br clear="none"><a shape="rect" href="https://stat.ethz.ch/mailman/listinfo/r-help-es" target="_blank">https://stat.ethz.ch/mailman/listinfo/r-help-es</a><br clear="none"></div></div>
</div>
</div></body></html>