{"id":4098,"date":"2026-05-21T19:19:33","date_gmt":"2026-05-21T17:19:33","guid":{"rendered":"https:\/\/elnostreraco.com\/blog\/?p=4098"},"modified":"2026-05-21T19:32:00","modified_gmt":"2026-05-21T17:32:00","slug":"actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran","status":"publish","type":"post","link":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/","title":{"rendered":"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Si fas servir npm, PyPI, crates, Composer o Maven en el teu dia a dia i no has fet servir mai R, aix\u00f2 t\u2019interessa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si ja has fet servir R alguna vegada, segurament has vist que instal\u00b7les un paquet, actualitzes depend\u00e8ncies i tot continua funcionant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sembla obvi que hagi de ser aix\u00ed, oi? Doncs atura&#8217;t. Aix\u00f2 que sembla tan normal \u00e9s en realitat extraordinari i \u00e9s cosa de CRAN.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"400\" src=\"https:\/\/elnostreraco.com\/blog\/wp-content\/uploads\/CRANlogo-e1779378723690.png\" alt=\"\" class=\"wp-image-4109\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Imagina\u2019t per un segon que vols actualitzar una llibreria en el teu projecte i fas una cosa com:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ pip3 install numpy --upgrade<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No funciona i proves:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ pip3 install numpy --upgrade --ignore-installed<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tampoc. Hi tornes amb:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ uv lock --upgrade-package \"numpy==2.4.0\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A mi em faria por fer-ho a producci\u00f3 sense provar-ho abans. Perqu\u00e8 una actualitzaci\u00f3 mal gestionada pot desencadenar depend\u00e8ncies trencades i fer que el projecte falli per canvis en funcions o m\u00e8todes de la nova versi\u00f3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quan treballo amb paquets de CRAN a R, tinc la tranquil\u00b7litat de saber que la instal\u00b7laci\u00f3 de l&#8217;\u00faltima versi\u00f3 de qualsevol dels 23.721 que hi ha a CRAN em funcionar\u00e0 (a dia 2026-05-21).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No \u00e9s extraordinari?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Doncs et vull explicar com funciona CRAN per fer-ho possible i reflexionar sobre els seus pros i contres.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Canvi de mentalitat: De repositori a direcci\u00f3 paternalista<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CRAN (Comprehensive R Archive Network) va n\u00e9ixer el 1997 amb la mentalitat de servir com a entorn de treball per a estad\u00edstics. Un tipus d\u2019usuari a qui preferiries no demanar que resolgui problemes t\u00e8cnics en sistemes Linux, Windows, macOS, Solaris, etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Perl va ser for\u00e7a popular entre 1995 i 2005. El 1995 es va publicar CPAN (Comprehensive Perl Archive Network), un monorepositori inspirat en CTAN (Comprehensive TeX Archive Network). Un altre monorepositori publicat el 1992.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201c\u2026Un Anell per manar a tots, Un per trobar-los,<br>Un Anell per reunir-los i, en les Tenebres<br>tenir tots lligats a M\u00f3rdor on s&#8217;est\u00e9n l&#8217;Ombra.\u201d<br>&#8211; La Germandat de l&#8217;Anell. Cap\u00edtol 2: \u00abL&#8217;ombra del passat\u00bb<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Per a scripts personals, eines internes o experiments, plataformes com GitHub, GitLab, Codeberg o similars s\u00f3n perfectes: tens llibertat absoluta, puges el codi i fas un push. Per\u00f2 si tota la seva distribuci\u00f3 fos aix\u00ed, seria \u00abla llei de la selva\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En repositoris com PyPI, npm, crates o similar, registrar un paquet no \u00e9s gaire diferent: et registres, el puges i ja est\u00e0. L\u2019autor podria esborrar el repositori o canviar les funcions o m\u00e8todes sense avisar, o que algun col\u00b7laborador li hagi colat un codi malici\u00f3s que ning\u00fa m\u00e9s hagi revisat. Aix\u00f2 \u00e9s un problema greu si altres paquets l&#8217;utilitzaven. I tot fa pensar que amb els assistents de codi d&#8217;IA passar\u00e0 cada vegada m\u00e9s sovint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vaig crear un paquet <a href=\"https:\/\/github.com\/jrosell\/helloworld\" type=\"link\" id=\"https:\/\/github.com\/jrosell\/helloworld\">helloworld<\/a> nom\u00e9s amb el prop\u00f2sit de fer-lo servir en un proc\u00e9s de CI que volia provar. A PyPI o npm ning\u00fa pregunta ni revisa. A CRAN, em van rebutjar perqu\u00e8 no aportava valor real als seus usuaris (Tenien ra\u00f3). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En lloc de tenir un magatzem de paquets a\u00efllats, CRAN tracta tot l&#8217;ecosistema com si fos un \u00fanic repositori gegant interconnectat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A CRAN hi ha una revisi\u00f3 per a cada enviament. Aquesta \u201cburocr\u00e0cia\u201d \u00e9s un filtre de qualitat. Tot paquet que arriba a la cua d\u2019enviament de CRAN passa per:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Llistes d&#8217;espera (Se&#8217;n pot fer seguiment a trav\u00e9s de <a href=\"https:\/\/r-hub.github.io\/cransays\/\" type=\"link\" id=\"https:\/\/r-hub.github.io\/cransays\/\">cransays<\/a>).<\/li>\n\n\n\n<li>Es fan comprovacions autom\u00e0tiques en m\u00faltiples sistemes operatius i versions de R.<\/li>\n\n\n\n<li>Revisi\u00f3 manual per part de voluntaris de l&#8217;equip de CRAN.<\/li>\n\n\n\n<li>Verificaci\u00f3 de depend\u00e8ncies inverses.<\/li>\n\n\n\n<li>Compliment estricte de la <a href=\"https:\/\/CRAN.R-project.org\/web\/packages\/policies.html\" type=\"link\" id=\"https:\/\/CRAN.R-project.org\/web\/packages\/policies.html\">CRAN Repository Policy.<\/a><\/li>\n\n\n\n<li>I segur que em deixo coses.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Aquest proc\u00e9s garanteix que, quan instal\u00b7les un paquet de CRAN, s\u00e0pigues que alg\u00fa l&#8217;ha mirat abans que tu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Que CRAN sigui gestionat per un equip de voluntaris principalment via llistes de correu electr\u00f2nic, t\u00e9 el seu encant.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gesti\u00f3 de depend\u00e8ncies inverses<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En altres llenguatges de programaci\u00f3 \u00e9s habitual que cada paquet declari qualsevol rang de versions. Llavors, per resoldre depend\u00e8ncies, cal fer malabars per trobar una combinaci\u00f3 compatible (i sense garantia que sigui fins i tot possible).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CRAN t\u00e9 regles molt estrictes de compatibilitat cap enrere: els paquets han de funcionar amb la versi\u00f3 actual de R i amb les versions especificades a les seves depend\u00e8ncies. La immensa majoria especifiquen l\u00edmits inferiors (>= x.y.z) i no especifiquen versions estrictes (== x.y.z).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aquesta mentalitat de direcci\u00f3 paternalista permet a l&#8217;usuari d\u2019R actualitzar sense tenir por de trencar res.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Debian\/Ubuntu hi ha un proc\u00e9s d\u2019auto-removal en el que et poden arxivar el paquet, si detecten que deixa de funcionar per alguna depend\u00e8ncia trencada (<a href=\"https:\/\/wiki.debian.org\/Autoremoval\" type=\"link\" id=\"https:\/\/wiki.debian.org\/Autoremoval\">entre altres coses<\/a>).<\/li>\n\n\n\n<li>A CRAN va un pas m\u00e9s enll\u00e0. Si el proc\u00e9s \u201cR CMD check\u201d dona algun error (ERROR) o advert\u00e8ncia (WARNING), es rebutja autom\u00e0ticament de la cua. Si es detecta una fallada en un tercer, l&#8217;actualitzaci\u00f3 es frena. No pots actualitzar el teu paquet per haver trencat l\u2019\u00fas que en fan altres paquets.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Et deus estar preguntant:<em> Com? Qu\u00e8? Eh?<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9s el que s&#8217;anomena la pol\u00edtica de depend\u00e8ncies inverses, i \u00e9s el pilar de l&#8217;estabilitat de l&#8217;ecosistema. Quan un autor vol pujar una actualitzaci\u00f3, has de comprovar que aquesta nova versi\u00f3 no trenqui cap dels paquets que en depenen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aix\u00f2 significa que si la teva actualitzaci\u00f3 fa que el paquet d&#8217;un senyor d\u2019Andorra, a qui no coneixes de res, deixi de passar els tests, CRAN no acceptar\u00e0 la teva actualitzaci\u00f3 fins que reverteixis el teu codi per mantenir la compatibilitat cap enrere o b\u00e9, contactis amb l&#8217;altre autor perqu\u00e8 actualitzi el seu paquet simult\u00e0niament.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aquest proc\u00e9s garanteix que el cat\u00e0leg actiu estigui 100% funcional. No hi ha paquets \u00abzombis\u00bb que es mantinguin a la llista principal malgrat estar trencats.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ara b\u00e9, el mantenidor del paquet paga el preu (en temps, revisions, comunicacions, controls&#8230;) perqu\u00e8 l&#8217;usuari final tingui un cam\u00ed lliure d&#8217;obstacles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un cas concret. Els autors del paquet<a href=\"https:\/\/cran.r-project.org\/web\/packages\/glmnet\/\" type=\"link\" id=\"https:\/\/cran.r-project.org\/web\/packages\/glmnet\/\"> {glmnet}<\/a>, molt popular, van haver de coordinar una migraci\u00f3 amb m\u00e9s de 150 depend\u00e8ncies inverses en una sola actualitzaci\u00f3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9s una feinada \u201cser\u201d a CRAN<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CRAN funciona com un repositori de desenvolupament continu: quan es publica una nova versi\u00f3 d&#8217;un paquet, l&#8217;anterior no s&#8217;esborra, sin\u00f3 que es mou a l&#8217;\u00e0rea d&#8217;arxiu. Aix\u00f2 t\u00e9 dues conseq\u00fc\u00e8ncies clau:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Quan fas `install.packages()` obtens la versi\u00f3 m\u00e9s recent que ha passat tots els controls de CRAN.<\/li>\n\n\n\n<li>Si tens tots els paquets de CRAN actualitzats i una cosa et deixa de funcionar, \u00e9s perqu\u00e8 et cal actualitzar el teu codi a les noves versions.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;historial \u00e9s accessible: Si necessites una versi\u00f3 antiga per reproductibilitat, pots accedir-hi program\u00e0ticament via l&#8217;arxiu o amb eines com <a href=\"https:\/\/rstudio.github.io\/renv\/\" type=\"link\" id=\"https:\/\/rstudio.github.io\/renv\/\">{renv}<\/a> o <a href=\"https:\/\/docs.ropensci.org\/rix\/\" type=\"link\" id=\"https:\/\/docs.ropensci.org\/rix\/\">{rix}<\/a>, sigui amb la versi\u00f3 concreta o amb l&#8217;\u00faltima versi\u00f3 publicada en una data \u201ccongelada\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com pots suposar, en comparaci\u00f3, \u00e9s una feinada pujar un nou paquet a CRAN. Per\u00f2 no nom\u00e9s aix\u00f2, tamb\u00e9 \u00e9s una feinada ser-hi. O sigui, mantenir-s\u2019hi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00f3c contribu\u00efdor d\u2019alguns paquets i recentment em van acceptar un paquet molt petit anomenat <a href=\"https:\/\/cran.r-project.org\/web\/packages\/gtakeout\/\" type=\"link\" id=\"https:\/\/cran.r-project.org\/web\/packages\/gtakeout\/\">{gtakeout}<\/a>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per tant, si ho he fet jo, aix\u00f2 demostra que ho pot fer tothom. Tot i que pot ser frustrant, \u00e9s el que garanteix la qualitat de l&#8217;ecosistema. Hi ha coses complicades que s\u2019aprenen fent-les una vegada i una altra.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">No tot \u00e9s CRAN<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CRAN t\u00e9 una pol\u00edtica molt estricta, gaireb\u00e9 draconiana: est\u00e0 prohibit descarregar fitxers o depend\u00e8ncies de tercers d&#8217;Internet durant el proc\u00e9s d&#8217;instal\u00b7laci\u00f3 de l&#8217;usuari (tret de casos excepcionals molt pactats). Tot ha d&#8217;estar contingut en el paquet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aix\u00f2 significa que els autors que utilitzen llibreries externes no poden fer que els seus paquets les descarreguin. Per exemple, com que no poden descarregar les llibreries de Rust amb `cargo fetch`, els desenvolupadors es veuen obligats a incloure el codi de les depend\u00e8ncies externes dins del mateix paquet d&#8217;R i a documentar manualment cada una de les llic\u00e8ncies del codi que inclouen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A m\u00e9s, com que CRAN tamb\u00e9 imposa l\u00edmits estrictes de mida, hi ha autors que per distribuir m\u00e9s enll\u00e0 d\u2019un repositori git, prefereixen publicar els seus paquets en repositoris alternatius.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vols que el teu codi sigui una eina fiable per a la comunitat, necessites un repositori m\u00e9s formal. Aqu\u00ed \u00e9s on entren CRAN, Bioconductor, Multiverse o, en l&#8217;\u00e0mbit corporatiu, un repositori privat estil CRAN gestionat internament (<a href=\"https:\/\/packagemanager.posit.co\/\" type=\"link\" id=\"https:\/\/packagemanager.posit.co\/\">Posit Package Manager<\/a>, <a href=\"https:\/\/eddelbuettel.github.io\/drat\/#status\" type=\"link\" id=\"https:\/\/eddelbuettel.github.io\/drat\/#status\">drat<\/a>, etc)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Per acabar, una reflexi\u00f3 i una petici\u00f3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La reflexi\u00f3: CRAN \u00e9s anti-marketing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed, m\u00e9s maldecaps pels desenvolupadors significa uns n\u00fameros menys brillants de volum de paquets disponibles, per\u00f2 trobo que val la pena tenir un espai on es prioritzi la responsabilitat davant l\u2019usuari. Aix\u00f2  dona lloc a un ecosistema o entorn de treball que progressa potser m\u00e9s lentament per\u00f2 m\u00e9s col\u00b7laborativament.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Diuen que R \u00e9s un llenguatge peculiar per la seva expressivitat, per\u00f2 potser ho \u00e9s m\u00e9s per la seva cultura de comunitat pensada pels seus usuaris.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La petici\u00f3: T\u2019animo a provar R avui mateix.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/cloud.r-project.org\/\" type=\"link\" id=\"https:\/\/cloud.r-project.org\/\">Instal\u00b7la\u2019l<\/a> i prova\u2019l ara mateix. Encara que nom\u00e9s sigui per dir-te el resultat de sumar 1+1. Ja em dir\u00e0s qu\u00e8 tal.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si fas servir npm, PyPI, crates, Composer o Maven en el teu dia a dia i no has fet servir mai R, aix\u00f2 t\u2019interessa. Si ja has fet servir R alguna vegada, segurament has vist &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[18],"class_list":["post-4098","post","type-post","status-publish","format-standard","hentry","category-dev","tag-destacats"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN ~ Desenvolupament<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/\" \/>\n<meta property=\"og:locale\" content=\"ca_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN ~ Desenvolupament\" \/>\n<meta property=\"og:description\" content=\"Si fas servir npm, PyPI, crates, Composer o Maven en el teu dia a dia i no has fet servir mai R, aix\u00f2 t\u2019interessa. Si ja has fet servir R alguna vegada, segurament has vist &hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/\" \/>\n<meta property=\"og:site_name\" content=\"Jordi Rosell\" \/>\n<meta property=\"article:author\" content=\"http:\/\/www.facebook.com\/jrosell\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-21T17:19:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-21T17:32:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/elnostreraco.com\/blog\/wp-content\/uploads\/CRANlogo-e1779378723690.png\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"jrosell\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jrosell\" \/>\n<meta name=\"twitter:site\" content=\"@jrosell\" \/>\n<meta name=\"twitter:label1\" content=\"Escrit per\" \/>\n\t<meta name=\"twitter:data1\" content=\"jrosell\" \/>\n\t<meta name=\"twitter:label2\" content=\"Temps estimat de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuts\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/\"},\"author\":{\"name\":\"jrosell\",\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/#\\\/schema\\\/person\\\/af160702c4f0ec816120b9fa60f5f8d4\"},\"headline\":\"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN\",\"datePublished\":\"2026-05-21T17:19:33+00:00\",\"dateModified\":\"2026-05-21T17:32:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/\"},\"wordCount\":1548,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/wp-content\\\/uploads\\\/CRANlogo-e1779378723690.png\",\"keywords\":[\"destacats\"],\"articleSection\":[\"Desenvolupament\"],\"inLanguage\":\"ca\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/\",\"url\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/\",\"name\":\"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN ~ Desenvolupament\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/wp-content\\\/uploads\\\/CRANlogo-e1779378723690.png\",\"datePublished\":\"2026-05-21T17:19:33+00:00\",\"dateModified\":\"2026-05-21T17:32:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/#\\\/schema\\\/person\\\/af160702c4f0ec816120b9fa60f5f8d4\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#breadcrumb\"},\"inLanguage\":\"ca\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ca\",\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#primaryimage\",\"url\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/wp-content\\\/uploads\\\/CRANlogo-e1779378723690.png\",\"contentUrl\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/wp-content\\\/uploads\\\/CRANlogo-e1779378723690.png\",\"width\":400,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inici\",\"item\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desenvolupament\",\"item\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/category\\\/dev\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/\",\"name\":\"Jordi Rosell\",\"description\":\"Conversi\u00f3, eCommerce i Marketing online\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ca\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/elnostreraco.com\\\/blog\\\/#\\\/schema\\\/person\\\/af160702c4f0ec816120b9fa60f5f8d4\",\"name\":\"jrosell\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ca\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8e2c92ba58be3b381bdc53ea33374b70e1091d8288204187f0645d151e112925?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8e2c92ba58be3b381bdc53ea33374b70e1091d8288204187f0645d151e112925?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8e2c92ba58be3b381bdc53ea33374b70e1091d8288204187f0645d151e112925?s=96&d=mm&r=g\",\"caption\":\"jrosell\"},\"description\":\"Consultor, professor i conferenciant. Ajudo als meus clients en la definici\u00f3 estrat\u00e8gica, l'an\u00e0lisi de dades, la presa de decisions i la millora de resultats.\",\"sameAs\":[\"http:\\\/\\\/elnosstreraco.com\\\/blog\",\"http:\\\/\\\/www.facebook.com\\\/jrosell\",\"https:\\\/\\\/x.com\\\/jrosell\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN ~ Desenvolupament","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/","og_locale":"ca_ES","og_type":"article","og_title":"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN ~ Desenvolupament","og_description":"Si fas servir npm, PyPI, crates, Composer o Maven en el teu dia a dia i no has fet servir mai R, aix\u00f2 t\u2019interessa. Si ja has fet servir R alguna vegada, segurament has vist &hellip;","og_url":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/","og_site_name":"Jordi Rosell","article_author":"http:\/\/www.facebook.com\/jrosell","article_published_time":"2026-05-21T17:19:33+00:00","article_modified_time":"2026-05-21T17:32:00+00:00","og_image":[{"width":400,"height":400,"url":"https:\/\/elnostreraco.com\/blog\/wp-content\/uploads\/CRANlogo-e1779378723690.png","type":"image\/png"}],"author":"jrosell","twitter_card":"summary_large_image","twitter_creator":"@jrosell","twitter_site":"@jrosell","twitter_misc":{"Escrit per":"jrosell","Temps estimat de lectura":"9 minuts"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#article","isPartOf":{"@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/"},"author":{"name":"jrosell","@id":"https:\/\/elnostreraco.com\/blog\/#\/schema\/person\/af160702c4f0ec816120b9fa60f5f8d4"},"headline":"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN","datePublished":"2026-05-21T17:19:33+00:00","dateModified":"2026-05-21T17:32:00+00:00","mainEntityOfPage":{"@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/"},"wordCount":1548,"commentCount":0,"image":{"@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#primaryimage"},"thumbnailUrl":"https:\/\/elnostreraco.com\/blog\/wp-content\/uploads\/CRANlogo-e1779378723690.png","keywords":["destacats"],"articleSection":["Desenvolupament"],"inLanguage":"ca","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/","url":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/","name":"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN ~ Desenvolupament","isPartOf":{"@id":"https:\/\/elnostreraco.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#primaryimage"},"image":{"@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#primaryimage"},"thumbnailUrl":"https:\/\/elnostreraco.com\/blog\/wp-content\/uploads\/CRANlogo-e1779378723690.png","datePublished":"2026-05-21T17:19:33+00:00","dateModified":"2026-05-21T17:32:00+00:00","author":{"@id":"https:\/\/elnostreraco.com\/blog\/#\/schema\/person\/af160702c4f0ec816120b9fa60f5f8d4"},"breadcrumb":{"@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#breadcrumb"},"inLanguage":"ca","potentialAction":[{"@type":"ReadAction","target":["https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/"]}]},{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#primaryimage","url":"https:\/\/elnostreraco.com\/blog\/wp-content\/uploads\/CRANlogo-e1779378723690.png","contentUrl":"https:\/\/elnostreraco.com\/blog\/wp-content\/uploads\/CRANlogo-e1779378723690.png","width":400,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/elnostreraco.com\/blog\/actualitzar-paquets-de-r-a-la-vegada-i-que-res-es-trenqui-aixi-ho-fa-cran\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inici","item":"https:\/\/elnostreraco.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Desenvolupament","item":"https:\/\/elnostreraco.com\/blog\/category\/dev\/"},{"@type":"ListItem","position":3,"name":"Actualitzar m\u00e9s de 23.000 paquets de R a la vegada i que res es trenqui: Aix\u00ed ho fa CRAN"}]},{"@type":"WebSite","@id":"https:\/\/elnostreraco.com\/blog\/#website","url":"https:\/\/elnostreraco.com\/blog\/","name":"Jordi Rosell","description":"Conversi\u00f3, eCommerce i Marketing online","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/elnostreraco.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ca"},{"@type":"Person","@id":"https:\/\/elnostreraco.com\/blog\/#\/schema\/person\/af160702c4f0ec816120b9fa60f5f8d4","name":"jrosell","image":{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/secure.gravatar.com\/avatar\/8e2c92ba58be3b381bdc53ea33374b70e1091d8288204187f0645d151e112925?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8e2c92ba58be3b381bdc53ea33374b70e1091d8288204187f0645d151e112925?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e2c92ba58be3b381bdc53ea33374b70e1091d8288204187f0645d151e112925?s=96&d=mm&r=g","caption":"jrosell"},"description":"Consultor, professor i conferenciant. Ajudo als meus clients en la definici\u00f3 estrat\u00e8gica, l'an\u00e0lisi de dades, la presa de decisions i la millora de resultats.","sameAs":["http:\/\/elnosstreraco.com\/blog","http:\/\/www.facebook.com\/jrosell","https:\/\/x.com\/jrosell"]}]}},"_links":{"self":[{"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/posts\/4098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/comments?post=4098"}],"version-history":[{"count":50,"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/posts\/4098\/revisions"}],"predecessor-version":[{"id":4152,"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/posts\/4098\/revisions\/4152"}],"wp:attachment":[{"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/media?parent=4098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/categories?post=4098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elnostreraco.com\/blog\/wp-json\/wp\/v2\/tags?post=4098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}