{ "cells": [ { "cell_type": "markdown", "id": "b646f738-c7ee-488d-85b7-07110911e466", "metadata": {}, "source": [ "# **

Diplomado en Ciencia de Datos**" ] }, { "cell_type": "markdown", "id": "1d20e2c1-e091-4525-b49a-37d1f549319e", "metadata": {}, "source": [ "# **

Introducción a R**" ] }, { "cell_type": "markdown", "id": "ba199989-7b68-4d56-9854-360c062b34a9", "metadata": {}, "source": [ "# **Profesores**" ] }, { "cell_type": "markdown", "id": "a81ba6a3-e7ae-4ce3-858e-c7256b5a669a", "metadata": {}, "source": [ "* Álvaro Montenegro, PhD, \n", "* Campo Elías Pardo, PhD, \n", "* Daniel Montenegro, Msc, \n", "* Camilo José Torres Jiménez, Msc, " ] }, { "cell_type": "markdown", "id": "330f2079-b3cb-428b-939c-0feb68f5acea", "metadata": {}, "source": [ "## Asesora Medios y Marketing digital" ] }, { "cell_type": "markdown", "id": "4764e6ec-2eb8-4889-87cf-9bbbea0102dd", "metadata": {}, "source": [ "* Maria del Pilar Montenegro, pmontenegro88@gmail.com\n", "* Jessica López Mejía, jelopezme@unal.edu.co" ] }, { "cell_type": "markdown", "id": "cc4ccc25-95f2-4d40-948c-f1e1e9464d14", "metadata": {}, "source": [ "## Fuentes principales\n", "\n", "* Manual de Introducción a R [An Introduction to R](https://cran.r-project.org/doc/manuals/r-release/R-intro.html)\n", "* Cuadernos sobre programación en Python." ] }, { "cell_type": "markdown", "id": "69e2c005-076e-4eab-8324-5b59fdb1c724", "metadata": {}, "source": [ "## **Estructuras de control**" ] }, { "cell_type": "markdown", "id": "2589c21f-c8ad-4a1b-aca5-f72b673e1d83", "metadata": {}, "source": [ "En la mayoría de lenguajes de programación, que soportan el paradigma imperativo, existen tres estructuras de control básicas:\n", "\n", "- Secuencia\n", "- Selección (o decisión)\n", "- Iteración (o repetición)\n" ] }, { "cell_type": "markdown", "id": "8845d78e-5f2a-426d-9359-e4b8cd9c62fb", "metadata": {}, "source": [ "## **Secuencia**" ] }, { "cell_type": "markdown", "id": "3224ec62-7673-4905-9307-f3eef0944327", "metadata": {}, "source": [ "La ejecución del programa (algoritmo codificado en el lenguaje de programación) se realiza en orden de aparición de las sentencias. Una `sentencia` puede ser *simple* (solamente una instrucción) o *compuesta* (varias instrucciones que siguen un orden y que fueron agrupadas)." ] }, { "cell_type": "markdown", "id": "2c308529-9ca0-4497-aa40-c966848dbc22", "metadata": {}, "source": [ "### **Ejemplo**" ] }, { "cell_type": "code", "execution_count": 2, "id": "3dfe3c68-345b-4f6e-8fc0-778a559e2b77", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 2" ] } ], "source": [ "x = 1\n", "y = 2\n", "cat(x, y)" ] }, { "cell_type": "markdown", "id": "db698f49-cacf-4ff8-8528-6d16e1e47018", "metadata": {}, "source": [ "En el ejemplo hay tres sentencias. Dos sentencias de asignación de valores y una sentencia de impresión. Se ejecuta una después de la otra." ] }, { "cell_type": "markdown", "id": "84f6ca31-2208-4814-a3c9-92e945ea2417", "metadata": {}, "source": [ "### **Estructura if**" ] }, { "cell_type": "markdown", "id": "523a6d8a-ae1a-4e82-a298-2eff9e75082f", "metadata": {}, "source": [ "Si la instrucción lógica es verdadera *if* imprime la siguiente instrucción. \n", "Los comandos entre llaves se comportan como una instrucción. La indentación es\n", "voluntaria, se suele utilizar para facilitar la lectura del código." ] }, { "cell_type": "code", "execution_count": 3, "id": "5096dcc9-7051-4ccc-89c5-67b9cd47a73f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x es mayor que y\n", "Este texto se imprimirá únicamente si x es mayor que y \n", "Este texto se imprimirá sin que ello dependa de si x es mayor que y\n" ] } ], "source": [ "x = 5\n", "y = 3\n", "if (x > y){\n", " cat(\"x es mayor que y\\n\")\n", " cat(\"Este texto se imprimirá únicamente si x es mayor que y \\n\")\n", "}\n", "cat(\"Este texto se imprimirá sin que ello dependa de si x es mayor que y\\n\")" ] }, { "cell_type": "markdown", "id": "80d8a6c4-274f-405e-9882-a1a2d1f7e3df", "metadata": {}, "source": [ "Ahora observe el cambio:" ] }, { "cell_type": "code", "execution_count": 8, "id": "c2e1b358-c8cf-4838-89eb-e07ce9f6b72c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Este texto se imprimirá sin que ello dependa de si x es mayor que y\n" ] } ], "source": [ "x = 3\n", "y = 5\n", "if (x > y){\n", " cat(\"x es mayor que y\\n\")\n", " cat(\"Este texto se imprimirá únicamente si x es mayor que y \\n\")\n", "}\n", "cat(\"Este texto se imprimirá sin que ello dependa de si x es mayor que y\\n\")" ] }, { "cell_type": "markdown", "id": "8543a2ba-cf5c-41a9-ac7a-defa39960244", "metadata": {}, "source": [ "Los comandos agrupados entre {} después del *if* no se ejecutan porque la sentencia \n", "lógica es falsa." ] }, { "cell_type": "markdown", "id": "4cd43709-ae26-4117-a415-0ed07e75ee8e", "metadata": {}, "source": [ "### **Estructura if- else**" ] }, { "cell_type": "markdown", "id": "136c8b17-2445-4280-8e3e-e8767cd5956d", "metadata": {}, "source": [ "Cuando hay dos alternativas de ejecución, dependiendo de la evaluación de una condición, se puede emplear la estructura **if-else**. Ahora observe el siguiente ejemplo.\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "c6bb0136-fa44-4bb8-9423-01e315de50d9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1] \"La condición es falsa\"\n", "[1] \"Este texto se imprimirá únicamente si x NO es mayor que y\"\n", "[1] \"Este texto se imprimirá sin que ello dependa de si x es mayor que y\"\n" ] } ], "source": [ "x = 3; y = 5\n", "if (x > y) {\n", " print(\"La condición es verdadera\")\n", " print(\"Este texto se imprimirá únicamente si x es mayor que y\")\n", "} else {\n", " print('La condición es falsa')\n", " print(\"Este texto se imprimirá únicamente si x NO es mayor que y\")\n", "}\n", "print(\"Este texto se imprimirá sin que ello dependa de si x es mayor que y\")" ] }, { "cell_type": "markdown", "id": "793f4933-f6d6-424b-9011-04a999c943b5", "metadata": {}, "source": [ "Lo que se agregó aquí fue un **else**. Este debe ir después de un **if** y se ejecuta cuando la condicion del **if** no se cumple, es decir cuando su valor lógico es: **FALSE**." ] }, { "cell_type": "markdown", "id": "b9083f47-3ae7-4f68-b892-7e82f53d70c3", "metadata": {}, "source": [ "#### **Ejercicio**" ] }, { "cell_type": "markdown", "id": "595cd84b-bb02-4260-9536-38d75a519716", "metadata": {}, "source": [ "Reemplaze Campo Elías por su nombre y ejecute el trozo de R. Analice el resultado." ] }, { "cell_type": "code", "execution_count": 7, "id": "9ce4b2e0-ee1d-4110-93e6-6df8ce65ec77", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Campo Elías ... es un nombre corto" ] } ], "source": [ "N = \"Campo Elías\"\n", "if (length(N) > 10) A=\"es un nombre largo\" else A=\"es un nombre corto\"\n", "cat(N, A, sep=\" ... \")" ] }, { "cell_type": "markdown", "id": "4e47c572-d7a2-4f08-b426-41058d564774", "metadata": {}, "source": [ "### **Estructuras de repetición (iteración, ciclos o bucles)**\n" ] }, { "cell_type": "markdown", "id": "47b0f5e9-4f55-4428-8bc6-e41845d35b2d", "metadata": {}, "source": [ "#### **Ciclo while**" ] }, { "cell_type": "code", "execution_count": 9, "id": "188ce33a-d4f4-4396-8188-08a01b5fee61", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "¡Empezando!\n", "0 1 2 3 4 5 6 7 8 9 \n", "¡Hecho!\n" ] } ], "source": [ "contador = 0\n", "cat('¡Empezando!\\n')\n", "while (contador < 10) {\n", " cat(contador, ' ', end = '')\n", " contador = contador + 1\n", "}\n", "cat('\\n¡Hecho!\\n')" ] }, { "cell_type": "markdown", "id": "7e3b28f5-31c2-4197-a192-c60881d68979", "metadata": {}, "source": [ "#### **Ciclo for**" ] }, { "cell_type": "code", "execution_count": 10, "id": "f0be48eb-a4a6-4e99-b20e-6d7976cb5bf3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Inicio:\n", "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \n", "Hecho." ] } ], "source": [ "cat('\\nInicio:\\n')\n", "for (i in 1:20) cat(i, ' ', end='')\n", "cat('\\nHecho.')" ] }, { "cell_type": "markdown", "id": "7eccd4da-fdd5-491f-880b-a0d87054e2df", "metadata": {}, "source": [ "#### **

Ejercicio**" ] }, { "cell_type": "markdown", "id": "dda71417-daba-40c2-bb08-315ebd7cb56b", "metadata": {}, "source": [ "Reescriba los dos ejemplos anteriores cambiado de `while` a `for` y viceversa, según el caso." ] }, { "cell_type": "markdown", "id": "86c8bd09-3b4b-4e84-a878-9f051b1c5344", "metadata": {}, "source": [ "### **Sentencia break**\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "4a2a37db-fcd0-42c2-b30e-df074d9d9783", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "12345" ] } ], "source": [ "for (i in 1:10) {\n", " cat(i)\n", " if (i == 5) break\n", "}" ] }, { "cell_type": "markdown", "id": "731cebcc-f438-420e-a1a7-2dd290e55613", "metadata": {}, "source": [ "## **Estructuras de control anidadas**" ] }, { "cell_type": "code", "execution_count": 13, "id": "dca61b2b-d787-4c7e-8edc-768a34d23605", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x = 5 y = 3\n", "Cinco es mayor que tres\n", "1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , \n", "x = 9.9 , y = 2" ] } ], "source": [ "x = 5\n", "y = 3\n", "cat(\"x =\", x, \"y =\", y)\n", "if (x > y){ \n", " cat(\"\\nCinco es mayor que tres\\n\")\n", " for (i in 1:10) cat(i, end=\", \")\n", " x = 9.9\n", "}\n", "y = 2\n", "cat(\"\\nx =\", x, \", y =\", y)" ] }, { "cell_type": "markdown", "id": "e2e43253-8a3a-413d-955d-e9a7ce8e8447", "metadata": {}, "source": [ "#### **Ejemplo de las tablas de multiplicar**" ] }, { "cell_type": "code", "execution_count": 14, "id": "cb658881-087b-42a7-b583-b48e20bb621e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Algunas Tablas de Multiplicar:\n", "\n", "Tabla del 6 \n", "6x1 = 6\n", "6x2 = 12\n", "6x3 = 18\n", "6x4 = 24\n", "6x5 = 30\n", "6x6 = 36\n", "6x7 = 42\n", "6x8 = 48\n", "6x9 = 54\n", "6x10 = 60\n", "\n", "Tabla del 7 \n", "7x1 = 7\n", "7x2 = 14\n", "7x3 = 21\n", "7x4 = 28\n", "7x5 = 35\n", "7x6 = 42\n", "7x7 = 49\n", "7x8 = 56\n", "7x9 = 63\n", "7x10 = 70\n", "\n", "Tabla del 8 \n", "8x1 = 8\n", "8x2 = 16\n", "8x3 = 24\n", "8x4 = 32\n", "8x5 = 40\n", "8x6 = 48\n", "8x7 = 56\n", "8x8 = 64\n", "8x9 = 72\n", "8x10 = 80\n" ] } ], "source": [ "cat(\"\\nAlgunas Tablas de Multiplicar:\\n\")\n", "for (i in 6:8) { # i va aumentado desde 1, luego va a 2,3,...\n", " cat('\\nTabla del', i,'\\n')\n", " for (j in 1:10) cat(i, \"x\", j, \" = \", i*j,\"\\n\", sep='')\n", "}" ] }, { "cell_type": "markdown", "id": "4d096e30-d67f-46b3-a42a-41cf817bdbe2", "metadata": {}, "source": [ "#### **Ejemplo de una sucesión creciente de asteríscos**" ] }, { "cell_type": "code", "execution_count": 15, "id": "fe9b7f5f-6f09-46b0-9e4f-0774e052fdfb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "* \n", "* * \n", "* * * \n", "* * * * \n", "* * * * * \n", "* * * * * * \n", "* * * * * * * \n", "* * * * * * * * \n", "* * * * * * * * * \n", "* * * * * * * * * * \n", "* * * * * * * * * * * \n" ] } ], "source": [ "# Sucesión creciente de asteríscos\n", "num_lineas = 11\n", "for (i in 1:num_lineas) { \n", " for (j in 1:i) cat('*', end='') \n", " cat('\\n') \n", "}" ] }, { "cell_type": "markdown", "id": "1a43775c-a2a9-48f0-a26e-b68025701e3a", "metadata": {}, "source": [ "# Funciones en R" ] }, { "cell_type": "markdown", "id": "16eb5261-4cea-4676-8c97-4f52196be032", "metadata": {}, "source": [ "## ** Funciones predefinidas**" ] }, { "cell_type": "markdown", "id": "677c6a3a-14ca-4e45-8913-66223ded9409", "metadata": {}, "source": [ "Están en las librerías básicas de R es decir en las que se instalan en R y que que están disponibles en cualquier sesión de trabajo, por ejemplo *sin* y *round*, *cat*:" ] }, { "cell_type": "code", "execution_count": 25, "id": "7335f15f-3d71-4ed9-864f-f7152173db0b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "0" ], "text/latex": [ "0" ], "text/markdown": [ "0" ], "text/plain": [ "[1] 0" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "0.7071" ], "text/latex": [ "0.7071" ], "text/markdown": [ "0.7071" ], "text/plain": [ "[1] 0.7071" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "angulo: 0 0.3927 0.7854 1.1781 1.5708 1.9635 2.3562 2.7489 3.1416\n", "seno: 0 0.3827 0.7071 0.9239 1 0.9239 0.7071 0.3827 0" ] } ], "source": [ "round(sin(pi),4)\n", "round(sin(pi/4),4)\n", "# en un vector de más dimensiones\n", "angulo = seq(0,pi,pi/8)\n", "cat(\"\\nangulo:\", round(angulo,4))\n", "cat(\"\\nseno:\",round(sin(angulo),4))" ] }, { "cell_type": "markdown", "id": "a5e74973-9e0a-4210-b8a6-5ecb1f7bbaa7", "metadata": {}, "source": [ "#### **Ejemplo función *rbind***" ] }, { "cell_type": "code", "execution_count": 18, "id": "390f555a-18e7-40e2-bd88-1f5c9e4f9abd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "
A matrix: 2 × 9 of type dbl
angulo00.39270.78541.17811.57081.96352.35622.74893.1416
seno00.38270.70710.92391.00000.92390.70710.38270.0000
\n" ], "text/latex": [ "A matrix: 2 × 9 of type dbl\n", "\\begin{tabular}{r|lllllllll}\n", "\tangulo & 0 & 0.3927 & 0.7854 & 1.1781 & 1.5708 & 1.9635 & 2.3562 & 2.7489 & 3.1416\\\\\n", "\tseno & 0 & 0.3827 & 0.7071 & 0.9239 & 1.0000 & 0.9239 & 0.7071 & 0.3827 & 0.0000\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A matrix: 2 × 9 of type dbl\n", "\n", "| angulo | 0 | 0.3927 | 0.7854 | 1.1781 | 1.5708 | 1.9635 | 2.3562 | 2.7489 | 3.1416 |\n", "| seno | 0 | 0.3827 | 0.7071 | 0.9239 | 1.0000 | 0.9239 | 0.7071 | 0.3827 | 0.0000 |\n", "\n" ], "text/plain": [ " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] \n", "angulo 0 0.3927 0.7854 1.1781 1.5708 1.9635 2.3562 2.7489 3.1416\n", "seno 0 0.3827 0.7071 0.9239 1.0000 0.9239 0.7071 0.3827 0.0000" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rbind(angulo=round(angulo,4),seno=round(sin(angulo),4))" ] }, { "cell_type": "markdown", "id": "25416639-7c74-4def-a191-2222866c8ebf", "metadata": {}, "source": [ "## ** Creación de funciones en R**" ] }, { "cell_type": "markdown", "id": "bb71c899-c93a-4806-9900-6a0bc989246a", "metadata": {}, "source": [ "#### **Ejemplo función suma:**" ] }, { "cell_type": "code", "execution_count": 20, "id": "cd68d14a-1150-4dfe-a0ea-29a6f39c6885", "metadata": {}, "outputs": [], "source": [ "suma = function(x,y){\n", " s = x + y\n", " return(s)\n", " }" ] }, { "cell_type": "markdown", "id": "c0fc9502-f0c9-4556-a65a-2414002a1da1", "metadata": {}, "source": [ "Utilizándolo para sumar 3 y 5:" ] }, { "cell_type": "code", "execution_count": 21, "id": "1fc4f0b0-46f1-4ead-932b-200a11acab17", "metadata": {}, "outputs": [ { "data": { "text/html": [ "8" ], "text/latex": [ "8" ], "text/markdown": [ "8" ], "text/plain": [ "[1] 8" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "suma(3,5)" ] }, { "cell_type": "markdown", "id": "d50b062c-cb8f-4d47-9c83-f8aef831dbd7", "metadata": {}, "source": [ "#### **Una función que regresa dos valores**" ] }, { "cell_type": "code", "execution_count": 22, "id": "602a6f68-12ea-4ef6-b99d-eb3738ee56cc", "metadata": {}, "outputs": [], "source": [ "mysum_prod = function(x,y){\n", " s = x + y\n", " p = x * y\n", " return(rbind(suma=s, producto=p))\n", "}" ] }, { "cell_type": "markdown", "id": "1cb5d88c-9dfc-4d24-ab8e-5a5462225abe", "metadata": {}, "source": [ "$3+5$ y $3\\times 5$" ] }, { "cell_type": "code", "execution_count": 24, "id": "051ab74b-2bc7-44d6-9653-0117164bc62f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\t\n", "\t\n", "\n", "
A matrix: 2 × 1 of type dbl
suma 8
producto15
\n" ], "text/latex": [ "A matrix: 2 × 1 of type dbl\n", "\\begin{tabular}{r|l}\n", "\tsuma & 8\\\\\n", "\tproducto & 15\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A matrix: 2 × 1 of type dbl\n", "\n", "| suma | 8 |\n", "| producto | 15 |\n", "\n" ], "text/plain": [ " [,1]\n", "suma 8 \n", "producto 15 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mysum_prod(3,5)" ] }, { "cell_type": "markdown", "id": "1061a49b-5820-4655-bfed-51a60abf9add", "metadata": {}, "source": [ "### **Seguir practicando R**" ] }, { "cell_type": "markdown", "id": "b7fd4e32-69da-47cf-aa55-b052765c417a", "metadata": {}, "source": [ "El menú de RStudio permite entrar directamente a la documentación para seguir avanzado y utilizando R. Además el menú grafico tiene los comandos más utilizados en R y RStudio.\n", "\n", "Se está utilizando mucho, por ejemplo, para producir informes seriados, por ejemplo diarios, cambiando el archivo de datos." ] } ], "metadata": { "kernelspec": { "display_name": "R", "language": "R", "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", "pygments_lexer": "r", "version": "4.3.1" } }, "nbformat": 4, "nbformat_minor": 5 }