<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Loops on Bastián Olea</title>
    <link>https://bastianolea.rbind.io/tags/loops/</link>
    <description>Recent content in Loops on Bastián Olea</description>
    <generator>Hugo</generator>
    <language>es-ES</language>
    <lastBuildDate>Wed, 18 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bastianolea.rbind.io/tags/loops/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Herramientas básicas para programar con R</title>
      <link>https://bastianolea.rbind.io/blog/r_introduccion/r_intermedio/</link>
      <pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/r_introduccion/r_intermedio/</guid>
      <description>&lt;p&gt;Esta es la segunda guía introductoria para aprender el lenguaje de programación R orientado al análisis de datos. &#xA;&lt;a href=&#34;../../../../blog/r_introduccion/r_basico/&#34;&gt;En la guía anterior vimos los principios más fundamentales del lenguaje R&lt;/a&gt;, para familiarizarnos con R y entender su funcionamiento básico. En esta segunda guía, seguiremos puliendo nuestros aprendizajes para aprender herramientas de programación poderosas que flexibilizarán mucho nuestras capacidades de análisis de datos, abriendo infinitas posibilidades.&lt;/p&gt;&#xA;&lt;p&gt;En esta guía, aprenderemos herramientas que nos permitirán a:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cómo dejar de repetirte y escribir código más eficiente en R</title>
      <link>https://bastianolea.rbind.io/blog/repetirse/</link>
      <pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/repetirse/</guid>
      <description>&lt;p&gt;El otro día me llegó un script (muy probablemente hecho por una IA) de más de 9.000 líneas!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://bastianolea.rbind.io/blog/repetirse/script.mov&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Igual era entendible, porque era un script que producía cientos de gráficos. Pero revisando el script me doy cuenta de que también &lt;strong&gt;se repiten cientos de veces los mismos patrones de código.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Scripts como éstos suelen ser apenas una docena de bloques de código distintos, pero repetidos muchas veces cada uno con mínimas diferencias entre ellos: referencias a columnas distintas, etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redactar textos basados en datos automáticamente con R: describiendo resultados del censo de población</title>
      <link>https://bastianolea.rbind.io/blog/redactar_texto/</link>
      <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/redactar_texto/</guid>
      <description>&lt;div style=&#34;display: flex; align-items: center; gap: 15px; padding: 14px; &#xA;            background-color: #493365;&#xA;            border-radius: 6px;&#xA;            margin: 20px 40px 20px 40px;&#34;&gt;&#xA;  &#xA;  &lt;div style=&#34;flex-shrink: 0;&#34;&gt;&#xA;    &lt;i class=&#34;fas fa-triangle-exclamation&#34; style=&#34;font-size: 130%; margin-left: 2px; opacity: 1; color: #EAD2FA;&#34;&gt;&lt;/i&gt;&#xA;  &lt;/div&gt;&#xA;  &#xA;  &lt;aside style = &#34;font-size: 90%; color: #EAD2FA;&#34;&gt;&#xA;    También tengo &#xA;&lt;a href=&#34;https://bastianolea.rbind.io/blog/redactar_texto_llm&#34;&gt;una versión alternativa de este tutorial donde usamos IA para generar textos desde R.&lt;/a&gt; Pero ten en consideración que &lt;strong&gt;usar IA y aprender son cosas distintas!&lt;/strong&gt; Recomiendo aprender primero y luego apoyarte en IA.&#xA;  &lt;/aside&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&lt;p&gt;Luego de explorar o procesar un conjunto de datos, toca &lt;strong&gt;presentar los resultados&lt;/strong&gt;. Si bien esto nos hace pensar en &#xA;&lt;a href=&#34;../../../tags/visualizaci%c3%b3n-de-datos/&#34;&gt;gráficos&lt;/a&gt;, &#xA;&lt;a href=&#34;../../../tags/tablas/&#34;&gt;tablas&lt;/a&gt; o &#xA;&lt;a href=&#34;../../../tags/quarto/&#34;&gt;reportes&lt;/a&gt;, el &lt;strong&gt;texto&lt;/strong&gt; también es una forma de comunicar resultados que puede ser &lt;strong&gt;optimizada&lt;/strong&gt; mediante la programación.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generando ruido visual con R</title>
      <link>https://bastianolea.rbind.io/blog/2025-08-27/</link>
      <pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/2025-08-27/</guid>
      <description>&lt;p&gt;El otro día tuve que usar R para generar comandos muy largos (para automatizar el convertir cientos de reportes &lt;code&gt;html&lt;/code&gt; a &lt;code&gt;pdf&lt;/code&gt; usando un navegador web), y el código resultante fue eterno. Al pegarlo en la consola se produjo un aluvión de texto:&lt;/p&gt;&#xA;&lt;div style=&#34;margin:auto; max-width:70%;&#34;&gt;&#xA;  &#xA;  &lt;video src=&#34;videos/comando_eterno.mp4&#34; style=&#34;border-radius:7px; max-width: 100%; display: block; margin: auto;&#34; autoplay loop&gt;&#xA;  &lt;/video&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Entre el océano de texto y código aparecen algunas figuras diagonales con cierta regularidad. Es un fenómeno que me había pasado antes, y que siempre llamó mi atención.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Descargar todos los archivos de la página web del Censo 2024 con `{rvest}`</title>
      <link>https://bastianolea.rbind.io/blog/2025-07-27/</link>
      <pubDate>Sun, 27 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/2025-07-27/</guid>
      <description>&lt;p&gt;Veamos un mini ejemplo de automatización de tareas con R: los resultados del Censo 2024 vienen en 20 archivos, en 20 enlaces distintos!&lt;/p&gt;&#xA;&lt;p&gt;¿El problema? para obtenerlos, tendríamos que entrar al sitio con el navegador, ir al enlace de descargas, bajar cada uno de los 20 archivos manualmente, y guardarlos en una carpeta para poder usarlos.&lt;/p&gt;&#xA;&lt;p&gt;En un script de R, con &lt;code&gt;{rvest}&lt;/code&gt; extraemos todos los enlaces del sitio, y con &lt;code&gt;{purrr}&lt;/code&gt; descargamos todos los archivos de una 🚀&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generar múltiples gráficos automáticamente con R</title>
      <link>https://bastianolea.rbind.io/blog/ggplot_purrr/</link>
      <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/ggplot_purrr/</guid>
      <description>&lt;p&gt;Uno de los principales beneficios del análisis de datos en base a programación es que &lt;strong&gt;el código es reutilizable.&lt;/strong&gt; Esto significa que cualquier cosa que hayas hecho puedes &lt;strong&gt;reutilizarla&lt;/strong&gt;, y así ahorrar trabajo. El siguiente paso es reutilizar el código de tal forma que sirva para aplicarlo a varios casos a la vez, incluso cientos o miles de veces.&lt;/p&gt;&#xA;&lt;p&gt;La reutilización de código es súper conveniente para la visualización de datos: una vez que diseñaste un gráfico, con muy pocas modificaciones puedes adaptarlo para que funcione con una fuente de datos distintas, una fuente actualizada, o para que visualice distintas variables.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Procesamiento de datos multiprocesador en R con {furrr}</title>
      <link>https://bastianolea.rbind.io/blog/furrr_multiprocesador/</link>
      <pubDate>Thu, 12 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/furrr_multiprocesador/</guid>
      <description>&lt;p&gt;La mayoría de las funciones de R, así como R mismo, se ejecutan en un único proceso dentro de tu computadora, dado que R es un software de un sólo hilo (&lt;em&gt;single threaded&lt;/em&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Los computadores modernos en general tienen entre 2 y 8 núcleos (&lt;em&gt;cores&lt;/em&gt;), algunos incluso muchos más. Una mayor cantidad de núcleos o procesadores permite a tu computadora hacer más &lt;strong&gt;operaciones paralelas&lt;/strong&gt;. Por ejemplo, si tu computador tiene 6 núcleos y R está procesando datos, R usará 1 núcleo al 100%, y te quedarán 5 núcleos en desuso, que podrían estar ejecutando otras tareas. En otras palabras, R está usando sólo el 100% de tu computador, cuando podría estar usando el 600%.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generar contenido en serie usando loops en un reporte Quarto</title>
      <link>https://bastianolea.rbind.io/blog/quarto_loop/</link>
      <pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/quarto_loop/</guid>
      <description>&lt;p&gt;Una de las gracias de generar documentos en Quarto es que podemos combinar la redacción con el código. Pero esto puede ir más allá que simplemente escribir un párrafo de texto y seguido de un párrafo de código. Podemos usar código para literalmente generar texto, títulos y más.&lt;/p&gt;&#xA;&lt;p&gt;En otros tutoriales vimos cómo podemos &#xA;&lt;a href=&#34;../../../blog/quarto_reportes/#c%c3%b3digo-entre-el-texto&#34;&gt;incluir resultados del código dentro de nuestros párrafos de texto&lt;/a&gt;, por ejemplo, para que una cifra que esté dentro de una oración venga directamente del resultado de un cálculo en vez de tener que escribirle de forma manual. Pero en esta guía vamos a ver cómo podemos programar la generación masiva de títulos, párrafos y gráficos en base a una &#xA;&lt;a href=&#34;../../../blog/r_introduccion/r_intermedio/#bucles&#34;&gt;iteración, bucle o &lt;em&gt;loop&lt;/em&gt;.&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatiza la generación de reportes creando documentos parametrizados con Quarto y R</title>
      <link>https://bastianolea.rbind.io/blog/quarto_params/</link>
      <pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/quarto_params/</guid>
      <description>&lt;p&gt;En este tutorial aprenderemos a crear &#xA;&lt;a href=&#34;https://posit.co/blog/parameterized-quarto/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;reportes parametrizados&lt;/a&gt; con Quarto. Un reporte parametrizado es un reporte diseñado para que el contenido, incluyendo textos, gráficos y más, cambien al modificar una variable en su encabezado. En este sentido, por &lt;em&gt;parámetro&lt;/em&gt; nos referimos a un valor que podremos cambiar para alterar el resultado obtenido por un mismo reporte.&lt;/p&gt;&#xA;&lt;p&gt;De esta manera, podemos &lt;strong&gt;generar múltiples versiones de un mismo reporte simplemente cambiando el parámetro&lt;/strong&gt;, por ejemplo, para diseñar un reporte con datos para un país, en base a un conjuntos de datos de múltiples países, y luego obtener múltiples versiones del mismo reporte pero para distintos países. O generar un reporte con datos de un año específico, y luego generar versiones del mismo reporte para distintos años.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Evitar que un loop se detenga debido a errores</title>
      <link>https://bastianolea.rbind.io/blog/evitar_errores/</link>
      <pubDate>Fri, 13 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://bastianolea.rbind.io/blog/evitar_errores/</guid>
      <description>&lt;p&gt;Usando el paquete &lt;code&gt;{purrr}&lt;/code&gt; para realizar iteraciones o &lt;em&gt;loops&lt;/em&gt; en nuestro código, vamos a probar tres escenarios ante los que un loop se detendría debido a un error, y formas de solucionarlo.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purrr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;números&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En el primer escenario, el loop intenta sumar &lt;code&gt;100&lt;/code&gt; a un vector de números, pero se encuentra con que uno de los números es un texto, por lo tanto la ejecución se detiene con un error:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
