Los aprendizajes sobre la marcha (más sobre R)

En las pasadas entregas estuvimos revisando la básica creación de cuadros con sus respectivas precisiones estadísticas en uno de los lenguajes de moda: R.
No recuerdo haber programado en lenguaje que constara solo de una letra del alfabeto pero reconozco y en cierta forma me complanzco de que me lleva a mis primeros encuentros con el mundo de la programación, en nuestro querido CETis 155, ya que Basic en sus primeras versiones tenía la misma ventana interactiva que tiene R, y que nos permite experimentar ideas y pruebas de código.
Con un par de cursos introductorios y la guía de compañeros del instituto hemos estado bregando y abonando nuevos conocimientos a este cerebro que hace unos meses llegó a los 50 años.
Es por ello que aunque la máquina funciona a las maravillas es necesario que exista la "memoria secundaria", mis apuntes virtuales para cuando mi RAM falle en recordar alguna faena que he realizado con este lenguaje.
En mi caso mi "piedra filosofal" es el tridente de instrucciones paste-parse y eval. 
Estoy convencido y comparto a mis alumnos esta reflexión, que la generación de código conlleva a la generalización que a su vez se ve reflejada en el ahorro de código y con ello a una mayor productividad (a medida que se reduce el número de pulsaciones copy-paste mayor generalización en nuestros programas).
Recurro a otras fuentes para explicar esto:

paste
Es una función para concatener objetos y convertirlos a vectores de caracteres.

paste(...,sep=,collapse=)

...       Son los objetos a ser concatenados
sep  y collapse son cadenas que separan cada elemento a ser concatenado.





En el sitio donde tomo la información podemos ejecutar ejemplos muy interesantes y se muestra más a detalle su uso.
En mi caso construyo instrucciones de forma dinámica para ahorrar el código usando funciones.

parse.
Podemos decir  que analiza la expresión creada, pero no la evalua. Para este mi caso uso el atributo text=instrucciondeR para que usando ...

eval.
Que en si, es quien ejecuta la instrucción creada.

Vamos con un ejemplo llano y simple.


Creamos 4 vectores aleatorios con valores de 1 al 100 y queremos la media aritmética de los cuatro, pero queremos evitar escribir 4 veces la instrucción mean(x1). mean(x2)...etc
Por lo que hacemos un ciclo (instrucción for) de 1 a 4, construimos la instrucción que la guardamos en la variable ins, para luego hacer el parse-eval para obtener su promedio.

Simple, ¿no?. Vamos a nuestro negocio información estadística.

En días pasados se publicaron los resultados de la Encuesta Nacional sobre Disponibilidad y Uso de Tecnologías de la Información en los Hogares (ENDUTIH) 2019. Una vieja conocida mía.

Descargamos los datos del sitio de Internet, y escribimos el siguiente código:


Como es una encuesta vamos a usar nuestro paquete estadístico survey. La fuente de datos es una tabla de FoxPro por lo que necesitamos la librería foreign.

Esta tabla que se convierte en un dataset de R contiene las personas que fueron elegidas, personas de 6 años o más, y que contestan una serie de preguntas en el cuestionario. Para este ejemplo tomaremos:

EDAD - Edad de la persona encuestada.
P7 - Persona que ha usado el Internet en el hogar o fuera de él en los últimos tres meses.

La idea es obtener el número de personas que usan el internet por grupos de edad.
Para ello vamos a hacer grupos quinquenales de edad y para la construcción del cuadro es necesario la creación de variables dicotómicas como vemos a en la imagen anterior, para el uso de el tridente paste-parse-eval  nombre las variables como gpo1, gpo2, gpo3,...gpo13. La variable Universo representa toda la población de 6 años y más.


Creamos un vector que será relacionado con cada valor generado por medio de la función svytotal, definimos el diseño para obtener las cifras expandidas, para el total nacional aplicamos directamente
el svytotal, para el resto de instrucciones, se programa un ciclo y con ésto generamos las instrucciones "svytotal(~gpo1, DisenoE)","svytotal(~gpo2, DisenoE)"..."svytotal(~gpo13, DisenoE)"
cada valor se almacena en el vector cifras, por el último se construye cuadro como un dataset uniendo el vector de etiquetas con el de cifras y se despliega el resultado.


Podemos pontencializar todo esto creando bibliotecas de funciones para automatizar éstas tareas, como miembro de la "vieja guardia" esta característica nos recuerda a las "macros" de los lenguajes Xbase.

Hasta el próximo post.

Miguel Araujo.

Webgrafía.
"RDocumentation" https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/paste
"Análisis y Decisión Transformando datos en decisiones" https://analisisydecision.es/truco-r-eval-parse-y-paste-para-automatizar-codigo/




Comentarios

Entradas populares de este blog

Librería de REDATAM para R

Conectar bases de datos Oracle con R vía JDBC

Red 7 Admin