[R-es] Crear una función

javier.ruben.marcuzzi en gmail.com javier.ruben.marcuzzi en gmail.com
Mie Mar 15 12:08:02 CET 2017


Estimado Mauricio Monsalvo

Leí muy rápido su correo, pienso en que podría aislar problemas en distintas funciones y que estas sean llamadas por la función general, el mantenimiento es más fácil, porque si ahora logra lo que desea pero dentro de dos días piensa en una mejora, al estar todo en una sola función puede caer en problemas, en cambio si separa en varias funciones el inconveniente queda en una única función.

Por otro lado a mí me resulta más fácil probar por fragmentos de código que no todo junto, aunque eso es muy personal y depende de las capacidades de cada uno (yo tengo que aislar en secciónes).

Javier Rubén Marcuzzi

De: Mauricio Monsalvo
Enviado: miércoles, 15 de marzo de 2017 7:21
Para: r-help-es
Asunto: [R-es] Crear una función

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 = A3a)] #
     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

	[[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


	[[alternative HTML version deleted]]



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