domenica 1 settembre 2024

Lista e aggiornamento dei pacchetti aggiuntivi

Dal Menù dell'interfaccia grafica di R (RGui) alla voce Pacchetti selezionando Carica pacchetto... compare l'elenco dei pacchetti installati  – sia i pacchetti previsti di default nella installazione base di R sia i pacchetti aggiuntivi installati dall'utente – che con l'opzione Aggiorna pacchetti...  possono (e devono) essere periodicamente aggiornati.

Uno script che genera l'elenco dei pacchetti installati sembrerebbe quindi superfluo, ma voglio dimostrare che non è esattamente così.

Ora copiate e incollate nella Console di R questo script e premete ↵ Invio.

# GENERA LA LISTA DEI PACCHETTI DELL'INSTALLAZIONE ORIGINARIA
#
pacchetti <- as.data.frame(installed.packages()[,c(1:3)], row.names=FALSE) # genera la lista
pacchetti # mostra la lista
write.csv(pacchetti, "C:/Rdati/pacchetti.csv") # salva la lista
#

La prima riga genera la lista di tutti i pacchetti installati e ne salva in una tabella (pacchetti) i primi tre campi (c(1:3)), quelli che ci interessano che sono il nome del pacchetto (Package), la sua ubicazione nel PC (LibPath), e la versione installata (Version) e la seconda riga mostra la lista nella Console di R.

> pacchetti # mostra la lista
              Package                                        LibPath    Version
1               abind C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
2             askpass C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
3           backports C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
4           base64enc C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
5         BayesFactor C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
6          bayestestR C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
7           BiasedUrn C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
8              bitops C:/Users/xxxxx/AppData/Local/R/win-library/x.x      x.x.x
..........
272           splines             C:/Program Files/R/R-x.x.x/library      x.x.x
273             stats             C:/Program Files/R/R-x.x.x/library      x.x.x
274            stats4             C:/Program Files/R/R-x.x.x/library      x.x.x
275          survival             C:/Program Files/R/R-x.x.x/library      x.x.x
276             tcltk             C:/Program Files/R/R-x.x.x/library      x.x.x
277             tools             C:/Program Files/R/R-x.x.x/library      x.x.x
278      translations             C:/Program Files/R/R-x.x.x/library      x.x.x
279             utils             C:/Program Files/R/R-x.x.x/library      x.x.x

Tre precisazioni:
 se dal codice togliete [,c(1:3)] la lista generata comprenderà tutti i campi previsti nelle specifiche dei pacchetti (la trovate poi nel file salvato, mentre nella Console di R la lista potrebbe essere variamente troncata a causa delle sue grandi dimensioni);
 i pacchetti salvati in C:/Program Files/R/R-x.x.x/library (dove x.x.x è la versione di R) sono quelli previsti di default nella installazione base di R;
 quelli salvati in C:/Users/xxxxx/AppData/Local/R/win-library/x.x  (dove xxxxx è il nome dell'utente e x.x la versione di R) sono i pacchetti aggiuntivi installati dall'utente.

Con la terza riga di codice la lista è salvata nel file C:\Rdati\pacchetti.csv (da notare che \ è la barra rovesciata o backslash impiegata da Windows come separatore tra i nomi delle directory nel percorso di un file, mentre R impiega la barra obliqua o slash).

Ed è qui che la cosa si fa interessante, perché disporre di un file con i nomi dei pacchetti installati comporta un notevole vantaggio, consentendoci di riprodurre una installazione dei pacchetti aggiuntivi identica a quella corrente:
 quando si installa un aggiornamento maggiore di R a una nuova versione, indicato da un cambiamento nella prima e/o nella seconda cifra della versione (i.e.: X.X.x oppure x.X.x);
 quando si installa R ex novo su un altro PC;
 quando si vuole integrare rapidamente l'installazione su un altro PC con i pacchetti impiegati nell'installazione corrente.

Nel secondo e nel terzo caso il vantaggio è ovvio. Nel primo caso dipende invece dalle scelte dell'utente in quanto:
→ quando cambia solamente la terza cifra del numero della versione (i.e.: x.x.X) questo viene considerata un aggiornamento minore ed è in linea di principio sufficiente disinstallare la versione corrente, installare la nuova versione, ed effettuare l'aggiornamento dei pacchetti, che vengono correttamente riconosciuti dalla nuova versione;
 se si vuole mantenere la coesistenza di diverse versioni di R e delle relative librerie, oppure se si vuole disinstallare la versione corrente di R e installarne una nuova senza mettere mano alle librerie, è opportuno ricorrere alle indicazioni fornite online per queste soluzioni (indicazioni che però non mi hanno mai completamente soddisfatto);
 se si preferisce (come il sottoscritto) procedere ogni volta con una installazione pulita di R – che prevede di disinstallare la versione corrente di R e di fare piazza pulita delle relative librerie (in media per una cinquantina di pacchetti aggiuntivi di una installazione parliamo di una almeno un decina di migliaia di file) – automatizzare la reinstallazione dei pacchetti è di fondamentale importanza.

In quest'ultimo caso per procedere con ordine, il primo passo è – dopo avere copiato la cartella C:\Rdati\ se si tratta di una installazione su un nuovo PC – leggere il file C:\Rdati\pacchetti.csv che contiene i pacchetti dell'installazione originaria (O) che si intende replicare:  

# IMPORTA LA LISTA DEI PACCHETTI DELL'INSTALLAZIONE ORIGINARIA (O)
#
pacchetti_O <- read.csv("C:/Rdati/pacchetti.csv")[c(-1)] # legge la lista
pacchetti_O # mostra la lista
#

Il secondo passo è generare la lista dei pacchetti installati localmente (L). La lista, se si parte con una installazione pulita di R, comprenderà solamente i pacchetti installati di default in C:/Program Files/R/R-x.x.x/library (dove x.x.x è la versione di R), altrimenti comprenderà anche eventuali pacchetti aggiuntivi già installati:

# GENERA LA LISTA DEI PACCHETTI INSTALLATI LOCALMENTE (L)
#
pacchetti_L <- as.data.frame(installed.packages()[,c(1:3)], row.names=FALSE) # genera la lista
pacchetti_L # mostra la lista
#

Il terzo passo è generare la lista dei pacchetti aggiuntivi mancanti da installare (M) come differenza tra quelli dell'installazione originaria e quelli già installati localmente (M = O - L). Va da sé che questa differenza esclude i pacchetti dell'installazione base di R, per definizione già installati localmente, e lascia nella lista solamente pacchetti aggiuntivi:

# GENERA LA LISTA DEI PACCHETTI AGGIUNTIVI MANCANTI DA INSTALLARE (M = O - L)
#
pacchetti_M <- setdiff(pacchetti_O$Package, pacchetti_L$Package) # genera la lista
pacchetti_M # mostra la lista
#

Il quarto e ultimo passo è l'installazione dei pacchetti aggiuntivi mancanti (M):

# INSTALLA I PACCHETTI AGGIUNTIVI MANCANTI (M)
#
install.packages(pacchetti_M) # installa i pacchetti mancanti
#

A questo punto confermate con SI le specifiche di configurazione proposte,



quindi selezionate il vostro CRAN preferito, dal quale effettuare il download dei pacchetti (sotto Italy trovate Milano e Padua, io per inveterata abitudine mi collego a Padua che è stato il primo dei due in Italia a implementare la modalità "sicura" https e funziona molto bene, ma ora i due si equivalgono).


Nella Console di R vedete scorrere il download dei pacchetti e la loro installazione che include la verifica dell'integrità dei file scaricati. Il processo richiede un po' di tempo, abbiate pazienza e non fate nulla fino alla conferma dell'avvenuto completamento della procedura.

Al termine se proprio volete potete verificare che tutto sia andato a buon fine anche eseguendo degli script che richiedono qualcuno dei pacchetti appena installati. La procedura qui riportata è stata validata con la versione di R per Windows 4.4.1 a 64 bit, eseguendola più volte su differenti PC con Windows 11 e riproducendo una installazione originaria di oltre 270 pacchetti, senza alcun problema. 

----------

Codice opportunamente modificato e adattato da un post di Roberto Chiosa:
https://robertochiosa.medium.com/import-export-r-packages-a6a122005e00

Nessun commento:

Posta un commento