{ "cells": [ { "cell_type": "markdown", "id": "69217d2c", "metadata": {}, "source": [ "# Programación para las ciencias biológicas\n", "\n", "# Instalación de librerías adidicionales en R \n", "\n", "**Docente:** **Charles Escobar - 2025**\n", "\n", "Las siquientes librerías implementan herramientas para la capa de visualización en R por lo que de acuerdo a su necesidad se recomienda su instalación.\n", "\n", "Este cuaderno tiene como objetivo:\n", "\n", "* Instalar librerías adicionales en R\n", "* Instalar paquetes en R desde repositorios específicos\n", "* Instalar paquetes en R desde fuentes exrernas como `github`\n", "* Resolver problemas de dependencias con librerías o paquetes de sistema operativo (Debian®)" ] }, { "cell_type": "markdown", "id": "49d476cd-c597-45f2-9969-61634b0294d5", "metadata": {}, "source": [ "Nombre del alumno:" ] }, { "cell_type": "markdown", "id": "757b02cb-c671-4059-8bdf-c91ac1cdea5a", "metadata": {}, "source": [ "Escriba aquí su nombre" ] }, { "cell_type": "markdown", "id": "353e667e-c310-46fa-9c71-334899030328", "metadata": {}, "source": [ "----\n", "\n", "Como requisito previo ejecute el cuaderno previo 12:\n", "* Cuaderno12_Librerias_Python_adicionales.ipynb\n", "\n", "----" ] }, { "cell_type": "markdown", "id": "78d7ae93", "metadata": {}, "source": [ "# Librerías de visualización\n", "\n", "Desde un terminal de R instale las siguientes librerías:\n", "* install.packages('ggplot2',repos='http://cran.us.r-project.org')\n", "* install.packages('tidyverse',repos='http://cran.us.r-project.org')\n", "\n", "Observe que en este caso se define el repositorio desde donde se descargarán los paquetes\n", "\n", "Para verificar su instalación ejecute:\n", "\n", "library('ggplot2')" ] }, { "cell_type": "code", "execution_count": null, "id": "923d5e5c-54d3-4890-aa60-ec29d9ad3b20", "metadata": {}, "outputs": [], "source": [ "library('ggplot2')" ] }, { "cell_type": "markdown", "id": "f088a9c0-c340-49fd-b60b-9a548a4d5238", "metadata": {}, "source": [ "Instale la libreíra png:\n", "\n", "* install.packages('png')\n", "\n", "Para verificar su instalación ejecute:\n" ] }, { "cell_type": "code", "execution_count": null, "id": "78bc7cf5-2f47-4c4e-a67a-71e0f86c2400", "metadata": {}, "outputs": [], "source": [ "library('png')" ] }, { "cell_type": "markdown", "id": "7a38eefc", "metadata": {}, "source": [ "## Instale las siguientes librerías:\n", "* install.packages('ggmosaic',)\n", "* install.packages('reshape2')\n", "* install.packages('ggforce')\n", "* install.packages('treemapify')\n", "\n", "Para verificar que todo ha ido bien ejecute:\n" ] }, { "cell_type": "code", "execution_count": null, "id": "68bc8249", "metadata": {}, "outputs": [], "source": [ "rm(list=ls())\n", "require(ggplot2)\n", "require(dplyr)\n", "require(tidyr)\n", "require(viridis)\n", "require(ggmosaic)\n", "require(treemap)\n", "require(tidyverse)\n", "require(ggfittext)\n", "require(treemapify)\n", "require(plotrix)\n", "require(ggforce)\n", "require(reshape2)" ] }, { "cell_type": "markdown", "id": "115e7214", "metadata": {}, "source": [ "Al ejecutarlo recibirá un mensaje de advertencia de librerías enmascaradas que no supone un error" ] }, { "cell_type": "markdown", "id": "e0194f8b-4854-4d86-bdef-09bcfa2462bf", "metadata": {}, "source": [ "A continuacoón instale las librerías que se detallan a continuación:\n", "\n", "* maps\n", "* terra\n", "\n", "---\n", "\n", "Al instalar `terra` se obtiene el siguiente error" ] }, { "cell_type": "markdown", "id": "06045f56-d0b8-4bc2-98ff-36118828323b", "metadata": {}, "source": [ "```R\n", " \"*installing *source* package ‘terra’ ... \n", " ** package ‘terra’ successfully unpacked and MD5 sums checked \n", " ** using staged installation \n", " configure: CC: gcc \n", " configure: CXX: g++ -std=gnu++14 \n", " checking for gdal-config... no \n", " configure: error: gdal-config not found or not executable. \n", " *** Installing this package from source requires the prior \n", " *** installation of external software, see for details \n", " *** https://rspatial.github.io/terra/ \n", " ERROR: configuration failed for package ‘terra’ \n", " *removing ‘/home/jupyter/R/x86_64-pc-linux-gnu-library/4.2/terra’ \n", " \n", " The downloaded source packages are in \n", " ‘/tmp/Rtmpxpr04J/downloaded_packages’ \n", " Warning message: \n", " In install.packages(\"terra\") : \n", " installation of package ‘terra’ had non-zero exit status \"\n", "```\n", "\n", "Ponga atención en la línea:\n", "\n", "* configure: error: gdal-config not found or not executable. \n", "\n", "Que nos indica que el programa externo gdal-config no puede ejecutarse, por lo que se trata de una librería de sistema operativo. Para solucionarlo se debe instalar la librería detallada pero que se usa para compilación, es decir que generalmente complementa su nombre con el témino `-dev`. Para ello desde un terminal BASH instale la librería:\n", "\n", "* sudo apt install libgdal-dev \n", "\n", "Y una vez que termine este proceso, ejecute nuevamente en el terminal R\n", "\n", "* install.packages('terra')\n" ] }, { "cell_type": "markdown", "id": "720c9bbe-49ba-4a62-a09e-69e1ba4e3cfd", "metadata": {}, "source": [ "Al terminar el proceso de instalación y luego de resolver la dependencia libgdal-dev, debe concluir satisfactoriamente:\n", "\n", "```R\n", " \"** testing if installed package keeps a record of temporary installation path \n", " * DONE (terra) \"\n", "```\n", "The downloaded source packages are in \n", " ‘/tmp/Rtmpxpr04J/downloaded_packages’ " ] }, { "cell_type": "markdown", "id": "79184630-8287-4a8b-9e77-b0807e91e56b", "metadata": {}, "source": [ "A continuación instale los siguientes paquetes:\n", "\n", "* cowplot\n", "* googleway\n", "\n", "---\n", "\n", "Con esta última librería recibirá el siguiente mensaje:\n", "\n", "```R\n", "\"** testing if installed package keeps a record of temporary installation path \n", "*DONE (googlePolylines) \n", "ERROR: dependency ‘jqr’ is not available for package ‘googleway’ \n", "*removing ‘/home/jupyter/R/x86_64-pc-linux-gnu-library/4.2/googleway’ \n", "\n", "The downloaded source packages are in \n", " ‘/tmp/Rtmpxpr04J/downloaded_packages’ \n", "Warning messages: \"\n", "```\n", "\n", "\n", "En donde debemos poner atención en el mensaje:\n", "\n", "* ERROR: dependency ‘jqr’ is not available for package ‘googleway’\n", "\n", "Para solucionarlo, desde un terminal instale `libjq-dev`\n", "\n", "* sudo apt install libjq-dev\n", "\n", "--- \n", "\n", "Instale a continuación los siguientes paquetes:\n", "\n", "* ggrepel\n", "* ggspatial\n", "---\n", "Observe el mensaje al final de la instalación de la última librería:\n", "\n", "The downloaded source packages are in \n", " ‘/tmp/Rtmpxpr04J/downloaded_packages’ \n", "Warning messages: \n", "1: In install.packages(\"ggspatial\") : \n", " installation of package ‘units’ had non-zero exit status \n", "2: In install.packages(\"ggspatial\") : \n", " installation of package ‘sf’ had non-zero exit status \n", "3: In install.packages(\"ggspatial\") : \n", " installation of package ‘ggspatial’ had non-zero exit status \n", "\n", "Con la experiencia previa pruebe instalando:\n", "* sudo apt install libunits-cpp-dev\n", "* sudo apt install units\n", "\n", "e instale nuevamente la librería `ggspatial` desde R. Al concluir seguirá mostrando un error de dependencia, sin embargo al revisar con detalle algunas líneas arriba del mensaje de error debería observar esta sección:\n", "\n", "```R\n", "\"configure: error: in `/tmp/RtmpkTcCAq/R.INSTALL3aa018b56fd8/units': \n", "configure: error: \n", "-------------------------------------------------------------------------------- \n", " Configuration failed because libudunits2.so was not found. Try installing: \n", " * deb: libudunits2-dev (Debian, Ubuntu, ...) \n", " * rpm: udunits2-devel (Fedora, EPEL, ...)\n", " * brew: udunits (OSX) \n", " If udunits2 is already installed in a non-standard location, use: \n", " --configure-args='--with-udunits2-lib=/usr/local/lib' \n", " if the library was not found, and/or: \n", " --configure-args='--with-udunits2-include=/usr/include/udunits2' \n", " if the header was not found, replacing paths with appropriate values. \n", " You can alternatively set UDUNITS2_INCLUDE and UDUNITS2_LIBS manually. \n", "-------------------------------------------------------------------------------- \"\n", "```\n", "\n", "Ponga atención en:\n", "\n", "* deb: libudunits2-dev (Debian, Ubuntu, ...)\n", "\n", "Línea que no informa la librería que se debe instalar en Debian.\n", "\n", "En un terminal BASH instale `libudunits2-dev` y vuelva a instalar `ggspatial` en **R**, donde finalmente habrá instalado este paquete:\n", "\n", "```R\n", "\"* DONE (ggspatial)\n", "\n", "The downloaded source packages are in\n", " ‘/tmp/Rtmpxpr04J/downloaded_packages’\"\n", "```\n", "\n", "A continuación instale las siguientes librerías en **R**:\n", "\n", "* lwgeom\n", "* sf\n", "* rnaturalearth\n", "* rnaturalearthdata\n", "\n", "También se puede instalar paquetes preparados por la comunidad desde fuentes externas como gihub, por ejemplo para el paquete:\n", "\n", "* rnaturalearthhires\n", "\n", "Instálelo desde la fuente externa ejecutando en la consiola de **R**:\n", "* remotes::install_github(\"ropensci/rnaturalearthhires\")" ] }, { "cell_type": "markdown", "id": "dd89be47-79b2-4483-aeda-5642377f01ea", "metadata": {}, "source": [ "Para probar las librerías instaladas cárguelas en el espacio de trabajo:" ] }, { "cell_type": "code", "execution_count": null, "id": "47e4fe60", "metadata": {}, "outputs": [], "source": [ "require(maps)\n", "require(cowplot)\n", "require(googleway)\n", "require(ggrepel)\n", "require(lwgeom)\n", "require(sf)\n", "require(rnaturalearth)\n", "require(rnaturalearthdata)\n", "require(rnaturalearthhires) \n", "require(devtools)\n", "require(ggplot2)\n", "require(ggspatial)" ] }, { "cell_type": "markdown", "id": "c5d681ed-6d33-45a5-b474-6b9bb32b799e", "metadata": {}, "source": [ "Veamos un pequeño ejemplo usando las librerías instaladas:" ] }, { "cell_type": "code", "execution_count": null, "id": "49b09b7c-e648-4fd2-8ba8-784ae6f76219", "metadata": {}, "outputs": [], "source": [ "world <- ne_countries(scale = \"small\", returnclass = \"sf\")\n", "#names(world)\n", "sudamerica <- ne_countries(scale = \"small\", returnclass = \"sf\", continent=\"South America\")" ] }, { "cell_type": "code", "execution_count": null, "id": "c0393c71", "metadata": {}, "outputs": [], "source": [ "data(world.cities)\n", "names(world.cities)\n", "\n", "sitios <- data.frame(longitude = world.cities[world.cities$country.etc==\"Ecuador\",5]\n", " , latitude = world.cities[world.cities$country.etc==\"Ecuador\",4])\n", "\n", "ggplot(data = world) + \n", " geom_sf(fill= \"antiquewhite\") + \n", " geom_point(data = sitios, aes(x = longitude, y = latitude), size = 1, \n", " shape = 23, fill = \"darkred\") +\n", " coord_sf(xlim = c(-85.0, -75.12), ylim = c(-4, 2), expand = FALSE) +\n", " annotation_scale(location = \"bl\", width_hint = 0.5) + \n", " annotation_north_arrow(location = \"bl\", which_north = \"true\"\n", " ,pad_x = unit(0.1, \"in\"), pad_y = unit(0.5, \"in\")\n", " ,style = north_arrow_fancy_orienteering) + \n", " xlab(\"Longitude\") + ylab(\"Latitude\") + ggtitle(\"Mapa de Ecuador\") + theme(panel.grid.major = element_line(color = gray(.5), linetype = \"dashed\", size = 0.5), panel.background = element_rect(fill = \"aliceblue\"))\n" ] }, { "cell_type": "markdown", "id": "398d2472-8631-4bb2-ab1b-e65b8b33c3a0", "metadata": {}, "source": [ "## Tarea \n", "\n", "### 1. Práctica\n", "\n", "El desarrollo de este cuaderno y la instalación de librerías adicionales, solucionando problemas de dependencia, se considera como la parte práctica de este ejercicio.\n", " \n", "Para verificar la instalación de estas librerías ejecute el siguiente script, el cual validará y calificará cada librería instalada" ] }, { "cell_type": "code", "execution_count": null, "id": "ff4f773d-e3cf-4ad4-8f50-8eda2e4c6c77", "metadata": {}, "outputs": [], "source": [ "# Lista de librerías a verificar\n", "librerias <- c(\"maps\", \"cowplot\", \"ggrepel\", \"lwgeom\", \"sf\", \"rnaturalearth\", \n", " \"rnaturalearthdata\", \"devtools\", \"ggspatial\", \n", " \"googleway\", \"rnaturalearthhires\")\n", "\n", "# Función para verificar si una librería está instalada y asignar puntaje\n", "verificar_librerias <- function(librerias) {\n", " puntaje_total <- 0\n", " \n", " # Iterar sobre cada librería\n", " for (i in seq_along(librerias)) {\n", " libreria <- librerias[i]\n", " \n", " # Verificar si la librería está instalada\n", " if (requireNamespace(libreria, quietly = TRUE)) {\n", " cat(\"La librería\", libreria, \"está instalada.\\n\")\n", " \n", " # Asignar puntaje: 15 puntos para las últimas 3, 5 para el resto\n", " if (i > length(librerias) - 3) {\n", " puntaje <- 6\n", " cat(\"Se asignan 6 puntos (librería especial).\\n\")\n", " } else {\n", " puntaje <- 1.5\n", " cat(\"Se asignan 1.5 puntos.\\n\")\n", " }\n", " \n", " puntaje_total <- puntaje_total + puntaje\n", " } else {\n", " cat(\"La librería\", libreria, \"NO está instalada. No se asignan puntos.\\n\")\n", " }\n", " }\n", " \n", " cat(\"\\nPuntaje total asignado:\", puntaje_total, \"/ 30\\n\")\n", " return(puntaje_total)\n", "}\n", "\n", "# Llamar a la función para verificar las librerías\n", "puntaje_total <- verificar_librerias(librerias)" ] }, { "cell_type": "markdown", "id": "d02cd738-6989-4904-a525-4fda8ee88cb1", "metadata": {}, "source": [ "### 2. Cuestionario\n", "\n", "Conteste las siguientes preguntas" ] }, { "cell_type": "markdown", "id": "a8166cee-fd62-4404-91f2-8e28b44f43ea", "metadata": {}, "source": [ "#### 2.1. ¿Por qué no es recomendable instalar las librerías de R desde el notebook de jupyter?" ] }, { "cell_type": "markdown", "id": "41174795-a59d-40d6-bbd2-befba928a37e", "metadata": {}, "source": [ "ponga aquí su respuesta" ] }, { "cell_type": "markdown", "id": "fdccdba6-d1a8-4786-a229-d3f4d2406b7d", "metadata": {}, "source": [ "#### 2.2. ¿Como se soluciona en R el problema de dependencias de sistema operativo? Asuma quee stá trabajando con Debian 12" ] }, { "cell_type": "markdown", "id": "e9530cdd-bacb-4725-b222-a2b65a080a29", "metadata": {}, "source": [ "ponga aquí su respuesta" ] }, { "cell_type": "markdown", "id": "f8ab195d-7c47-4892-bbf8-5ca41d74c730", "metadata": {}, "source": [ "#### 2.3. ¿Cuál es la diferencia entre instalar paquetes adicionales en R y Python?" ] }, { "cell_type": "markdown", "id": "c3e32d1a-a5f0-4b5d-999e-28c4f7ca41fe", "metadata": {}, "source": [ "\n", "ponga aquí su respuesta" ] }, { "cell_type": "markdown", "id": "46e2eb94-e170-447a-a9df-cd08a971f903", "metadata": {}, "source": [ "# Conclusiones y Recomendaciones\n", "\n", "Una vez ejecutado este cuaderno de trabajo y seguido las instrucciones que en el se detallan, desarrolle por lo menos tres conclusiones y recomendaciones delimitadas exclusivamente a las actividades ejecutadas en este cuaderno de trabajo." ] }, { "cell_type": "markdown", "id": "46f111c4-9fcc-4e0a-a510-5748a50faeab", "metadata": {}, "source": [ "## Conclusiones\n", "1. Conclusión 1\n", "2. Conclusión 2\n", "3. Conclusión 3" ] }, { "cell_type": "markdown", "id": "e88efc48-f24b-456a-8a40-ea2270d81027", "metadata": {}, "source": [ "## Recomendaciones\n", "1. Recomendación 1\n", "2. Recomendación 2\n", "3. Recomendación 3" ] }, { "cell_type": "markdown", "id": "fb6006e2-dcaf-4d22-b597-26d1a9e90cf2", "metadata": {}, "source": [ "|RÚBRICA Y CRITERIOS DE EVALUACIÓN |||||\n", "|:-|:-:|:-:|:-:|:-|\n", "|PARÁMETROS|100%|50%|0%|Total parcial|\n", "|Desempeño en el desarrollo del cuaderno de trabajo (toma de datos, realización de cálculos, ejecución de comandos, realización de programas, obtención de resultados, obtención de un producto, aplicación de una herramienta, realización de un procedimiento para experimento, etc.)|El estudiantes demuestra solvencia al desempeñarse durante la práctica|El estudiante demuestra parcialmente solvencia al desempeñarse durante la práctica |El estudiante no demuestra solvencia al desempeñarse durante la práctica |40%|\n", "|Cuestionario|El estudiante contesta el cuestionario de forma correcta |El estudiante contesta la mitad del cuestionario de forma correcta|El estudiante contesta el cuestionario de forma incorrecta|30%|\n", "|Conclusiones y Recomendaciones|Todas las conclusiones son adecuadas, objetivas y aplicables exclusivamente a la práctica|Las conclusiones son parcialmente adecuadas, objetivas y aplicables|Las conclusiones no son adecuadas, objetivas y aplicables|30%|\n", "|TOTAL||||100%|" ] }, { "cell_type": "code", "execution_count": null, "id": "85e5c5df-b63e-4c64-b148-2249657c9ed1", "metadata": {}, "outputs": [], "source": [] } ], "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.2.2" } }, "nbformat": 4, "nbformat_minor": 5 }