<div dir="ltr"><div class="gmail_default"><font face="tahoma, sans-serif">Gracias, Javier.</font></div><div class="gmail_default"><font face="tahoma, sans-serif">Es una buena orientación. ¿Qué criterio utilizarías para aislar las funciones? ¿Cada una que crea un objeto es una función en sí misma, que luego puede ser llamada por otra? Me parece más eficiente y seguro es más sencillo de mantener, pero con poco práctica en funciones me pareció un camino a evitar...</font></div><div class="gmail_default"><font face="tahoma, sans-serif">Aprovecho y adjunto los archivos que en el anterior no lo había hecho y también corrijo un error de transcripción.</font></div><div class="gmail_default"><font face="tahoma, sans-serif">En este momento, más allá del interés de aprender y mejorar la forma de encarar estos problemas (tengo más de 1500 líneas de código que puedo resumir con esta función), el principal problema que veo es que no logro que el objeto etiqueta, que en la segunda línea asigna un factor al parámetro y sea luego el nombre que aparece en las variables datos[, .N, by = .(<font color="#ff0000">etiqueta </font>= <div class="gmail_default" style="display:inline">​x</div>)], porque el data.table "nombra" esa variable como etiqueta (literal) en lugar de utilizar el factor ("Sexo", en el ejemplo) asignado <div class="gmail_default" style="display:inline">​a </div>etiqueta <- "Sexo".-</font></div><div class="gmail_default"><font face="tahoma, sans-serif">Espero se entienda...</font></div><div class="gmail_default"><font face="tahoma, sans-serif"><br></font></div><div class="gmail_default" style="font-family:tahoma,sans-serif"><br></div><div class="gmail_quote">---------- Mensaje reenviado ----------<br>De: <b class="gmail_sendername">Mauricio Monsalvo</b> <span dir="ltr"><<a href="mailto:m.monsalvo@gmail.com" target="_blank">m.monsalvo@gmail.com</a>></span><br>Fecha: 15 de marzo de 2017, 7:21<br>Asunto: Crear una función<br>Para: r-help-es <<a href="mailto:r-help-es@r-project.org" target="_blank">r-help-es@r-project.org</a>><br><br><br><div dir="ltr"><div style="font-family:tahoma,sans-serif">Hola.</div><div style="font-family:tahoma,sans-serif">Estoy intentando crear una función pero no logro que termine de cerrar y mi manejo no permite que el google me ayude... </div><div><div><font face="monospace, monospace">n.reg.dep <- function(x, y) {</font></div><div><font face="monospace, monospace">     <div class="gmail_default" style="font-family:tahoma,sans-serif;display:inline">​​</div>etiqueta <- str_replace(nombres[Variable == y, Descripcion], "[ ]", "")</font></div><div><font face="monospace, monospace">     tabla <- datos[, .N, by = .(etiqueta = <div class="gmail_default" style="font-family:tahoma,sans-serif;display:inline">​x</div>)] # </font></div><div><font face="monospace, monospace">     tabla <- tabla[, Porc := round(N/sum(N)*100,1)]   # %</font></div><div><font face="monospace, monospace">     tabla[, PorcAc := cumsum(Porc)]</font></div><div><font face="monospace, monospace">          # Regiones</font></div><div><font face="monospace, monospace">          tabla.1 <- datos[, .N, by = .(etiqueta = x, Region)] </font></div><div><font face="monospace, monospace">          tabla.1[, Porc := round(N/sum(N)*100,1), by =.(Region)] </font></div><div><font face="monospace, monospace">          tabla.1 <- spread(tabla.1[, .(etiqueta, Region, Porc)], key = Region, value = Porc)</font></div><div><font face="monospace, monospace">     tabla.reg <- left_join(tabla, tabla.1)</font></div><div><font face="monospace, monospace">          # Depdendencia</font></div><div><font face="monospace, monospace">          tabla.1 <- datos[, .N, by = .(etiqueta = x, Dependencia = B2a)] </font></div><div><font face="monospace, monospace">          tabla.1[, Porc := round(N/sum(N)*100,1), by =.(Dependencia)] # % por Dependencia</font></div><div><font face="monospace, monospace">          tabla.1 <- na.omit(tabla.1)</font></div><div><font face="monospace, monospace">          tabla.1 <- spread(tabla.1[, .(etiqueta, Dependencia, Porc)], key = Dependencia, value = Porc)</font></div><div><font face="monospace, monospace">     tabla.dep <- left_join(tabla, tabla.1)</font></div><div><font face="monospace, monospace">     tabla <- left_join(tabla.reg, tabla.dep)</font></div><div><font face="monospace, monospace">     return(tabla)</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace">n.reg.dep(datos$A3a, "A3a")</font></div></div><div><div><font face="monospace, monospace">n.reg.dep(datos$A3a)</font></div></div><div><div style="font-family:tahoma,sans-serif">​Si bien anda y el resultado es bastante parecido al que espero, no puedo hacer que las tablas se llamen como quisiera porque el factor "etiqueta" que debería indicar el primer nombre de la variable no es consdierado, como podrán ver.</div></div><div><div style="font-family:tahoma,sans-serif">​Si correo el código para la variable, resulta algo como:</div><div><font face="monospace, monospace">> tabla</font></div><div><font face="monospace, monospace">   Sexo   N Porc PorcAc  NEA  NOA Nacionales Provinciales Municipales Comunitarios Religiosos Privados</font></div><div><font face="monospace, monospace">1 Mujer 270 86.8   86.8 92.7 84.2       77.8         89.6        83.8         78.9         90      100</font></div><div><font face="monospace, monospace">2 Varon  40 12.9   99.7  7.3 15.3       22.2         10.4        16.2         19.3         10       NA</font></div><div><font face="monospace, monospace">3  <NA>   1  0.3  100.0   NA  0.5         NA           NA          NA           NA         NA       NA​</font></div><div style="font-family:tahoma,sans-serif">​Pero como tengo que hacerlo muchas veces, necesitaría poder escribir esta (mi primera) función. Ahorraría mucho tiempo, además ​de asegurarme que no pifio en el copiar y pegar y reemplazar. </div><div style="font-family:tahoma,sans-serif">​Adjunto datos de prueba y una tabla con los las variables y sus variable.labels (nombres).</div><div style="font-family:tahoma,sans-serif">​Se usa:</div></div><div><div><font face="monospace, monospace">library(data.table)</font></div><div><div><font face="monospace, monospace">library(tidyverse) # library(dplyr)</font></div></div><div><div><font face="monospace, monospace">library(stringr)</font></div><div style="font-family:tahoma,sans-serif">Muchas gracias.</div></div><div style="font-family:tahoma,sans-serif">Saludos.</div></div><span class="gmail-m_-188605668849676459HOEnZb"><font color="#888888"><div><br></div>-- <br><div class="gmail-m_-188605668849676459m_1253852243880221503gmail_signature"><div dir="ltr"><font face="tahoma, sans-serif">Mauricio</font></div></div>
</font></span></div>
</div><br><br clear="all"><div><br></div>-- <br><div class="gmail-m_-188605668849676459gmail_signature"><div dir="ltr"><font face="tahoma, sans-serif">Mauricio</font></div></div>
</div>