[R-es] Fwd: Crear una función

Mauricio Monsalvo m.monsalvo en gmail.com
Mie Mar 15 12:59:11 CET 2017


Gracias, Javier.
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...
Aprovecho y adjunto los archivos que en el anterior no lo había hecho y
también corrijo un error de transcripción.
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
= .(etiqueta =
​x
)], porque el data.table "nombra" esa variable como etiqueta (literal) en
lugar de utilizar el factor ("Sexo", en el ejemplo) asignado
​a
etiqueta <- "Sexo".-
Espero se entienda...


---------- Mensaje reenviado ----------
De: Mauricio Monsalvo <m.monsalvo en gmail.com>
Fecha: 15 de marzo de 2017, 7:21
Asunto: Crear una función
Para: r-help-es <r-help-es en r-project.org>


Hola.
Estoy intentando crear una función pero no logro que termine de cerrar y mi
manejo no permite que el google me ayude...
n.reg.dep <- function(x, y) {

​​
etiqueta <- str_replace(nombres[Variable == y, Descripcion], "[ ]", "")
     tabla <- datos[, .N, by = .(etiqueta =
​x
)] #
     tabla <- tabla[, Porc := round(N/sum(N)*100,1)]   # %
     tabla[, PorcAc := cumsum(Porc)]
          # Regiones
          tabla.1 <- datos[, .N, by = .(etiqueta = x, Region)]
          tabla.1[, Porc := round(N/sum(N)*100,1), by =.(Region)]
          tabla.1 <- spread(tabla.1[, .(etiqueta, Region, Porc)], key =
Region, value = Porc)
     tabla.reg <- left_join(tabla, tabla.1)
          # Depdendencia
          tabla.1 <- datos[, .N, by = .(etiqueta = x, Dependencia = B2a)]
          tabla.1[, Porc := round(N/sum(N)*100,1), by =.(Dependencia)] # %
por Dependencia
          tabla.1 <- na.omit(tabla.1)
          tabla.1 <- spread(tabla.1[, .(etiqueta, Dependencia, Porc)], key
= Dependencia, value = Porc)
     tabla.dep <- left_join(tabla, tabla.1)
     tabla <- left_join(tabla.reg, tabla.dep)
     return(tabla)
}
n.reg.dep(datos$A3a, "A3a")
n.reg.dep(datos$A3a)
​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.
​Si correo el código para la variable, resulta algo como:
> tabla
   Sexo   N Porc PorcAc  NEA  NOA Nacionales Provinciales Municipales
Comunitarios Religiosos Privados
1 Mujer 270 86.8   86.8 92.7 84.2       77.8         89.6        83.8
  78.9         90      100
2 Varon  40 12.9   99.7  7.3 15.3       22.2         10.4        16.2
  19.3         10       NA
3  <NA>   1  0.3  100.0   NA  0.5         NA           NA          NA
    NA         NA       NA​
​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.
​Adjunto datos de prueba y una tabla con los las variables y sus
variable.labels (nombres).
​Se usa:
library(data.table)
library(tidyverse) # library(dplyr)
library(stringr)
Muchas gracias.
Saludos.

-- 
Mauricio



-- 
Mauricio
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20170315/423ca50b/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: nombres.csv
Type: text/csv
Size: 97085 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20170315/423ca50b/attachment-0002.bin>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: datos.csv
Type: text/csv
Size: 10831 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20170315/423ca50b/attachment-0003.bin>


Más información sobre la lista de distribución R-help-es