Visualizzazione post con etichetta script. Mostra tutti i post
Visualizzazione post con etichetta script. Mostra tutti i post

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 e 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;
 i pacchetti ubicati 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 ubicati 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.

La terza riga di codice dello script salva la lista 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 vogliono aggiungere all'installazione preesistente su un altro PC i pacchetti impiegati nell'installazione corrente.

Precisato che quando cambia solamente la terza cifra del numero della versione (i.e.: x.x.X) questo viene considerata un aggiornamento minore ed è sufficiente disinstallare la versione corrente, installare la nuova versione, ed effettuare l'aggiornamento dei pacchetti dal menù di R (Pacchetti >> Aggiorna pacchetti...), nel caso di una aggiornamento maggiore ci sono tre opzioni:
 fare coesistere diverse versioni di R e delle relative librerie (ma sono possibili problemi);
 disinstallare la versione corrente di R e installarne una nuova senza mettere mano alle librerie (ma anche se queste poi vengono poi aggiornate seguendo le indicazioni che si trovano online si può andare incontro a problemi);
 procedere ogni volta con una installazione pulita di R, che prevede di disinstallare la versione corrente di R, di cestinare tutte le librerie e reinstallarle tutte daccapo.

In quest'ultimo caso, che personalmente impiego e che mi sento di consigliare in quanto mette sicuramente al riparo da qualsiasi problema, il primo passo è leggere il file C:\Rdati\pacchetti.csv che contiene i pacchetti dell'installazione originaria (O) che era installata sul PC, che è stata disinstallata e 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) e che, quando 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):

# 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 confermare con SI le specifiche di configurazione proposte,



quindi selezionare il 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 ovviamente i due si equivalgono).


Nella Console di R vedrete 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, serve un po' di pazienza, consiglio di non fare nulla fino alla conferma dell'avvenuto completamento della procedura.

Al termine è possibile verificare che tutto sia andato a buon fine 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 contenenti oltre 12 000 file, senza alcun problema. 

----------

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

martedì 20 novembre 2018

Salvare uno script

Riprendiamo lo script per il calcolo della media e della deviazione standard che abbiamo impiegato per illustrare come eseguire uno script [1], questa volta con l'obiettivo di salvarlo sotto forma di file per iniziare a realizzare una raccolta di script da riutilizzare al bisogno.

# CALCOLA LA MEDIA E LA DEVIAZIONE STANDARD DEI VALORI 8, 6, 11, 7
#
# viene generato l'oggetto mydata che contiene i valori numerici 8,6,11,7
mydata <- c(8,6,11,7)
# viene mostrato il contenuto dell'oggetto mydata
mydata
# viene calcolata la media dei valori numerici contenuti nell'oggetto mydata
mean(mydata)
# viene calcolate la deviazione standard dei valori numerici contenuti nell'oggetto mydata
sd(mydata)
#

Ci sono vari modi in cui potete farlo. Ma tutti prevedono di salvare il codice R in un file in formato testo [2] impiegando una codifica universalmente riconosciuta [3].

Un primo modo prevede di utilizzare l’Editor di R che si apre dalla RGui selezionando File >> Nuovo script


Copiate il codice dello script, incollatelo nell’Editor di R quindi selezionate File >> Salva con nome 


e salvate il file per esempio con il nome Media_e_ds.R (l'estensione .R viene aggiunta automaticamente dall'Editor di R)













Un modo alternativo prevede di utilizzare uno degli strumenti forniti con il sistema operativo, come ad esempio il Blocco note di WindowsDopo avere incollato il codice nel Blocco note selezionate File >> Salva con nome 


e salvate il file per esempio con il nome Media_e_ds.txt (l'estensione .txt viene aggiunta automaticamente)


Nel Blocco note quando selezionate File >> Salva con nome dovete verificare che vicino al tasto Salva sia selezionato Codifica: UTF-8 cioè la codifica dei caratteri impiegata di default da R [3]. Nella penultima figura si vede in basso a destra nel Blocco note di Windows la scritta UTF-8 che conferma che il salvataggio avviene con questa codifica dei caratteri.

In conclusione l'Editor di R aggiunge automaticamente al nome del file l'estensione .R mentre il Blocco note di Windows aggiunge automaticamente al nome del file l'estensione .txt: ma si tratta di file di testo perfettamente identici tanto che è possibile aprire i file .R con il Blocco note di Windows e aprire i file .txt con l'Editor di R (provare per credere).

Potete ancora impiegare non solo un qualsiasi altro editor di testo ma anche un qualsiasi wordprocessor, salvando i file in formato testo (tutti i wordprocessor hanno questa opzione per il salvataggio dei file) con l'accortezza di verificare che siano salvati con la codifica UTF-8, cosa che attualmente dovreste trovare prevista di default con i wordprocessor di tutte le piattaforme (Windows, Mac, Linux).

Quale di questi metodi usare allora? Personalmente uso il Blocco note di Windows ma in realtà non fa nessuna differenza: è possibile salvare gli script con il programma che si trova più comodo e più pratico utilizzare. La sola cosa che conta è salvarli in un file in formato testo perché questo è il solo formato con cui lo script può essere riconosciuto ed essere eseguito in R.

Per il seguito si rimanda nuovamente a [1].

Nota bene: in R il separatore delle cifre decimali è il punto (.) e come già riportato altrove questa convenzione per ragioni di omogeneità viene adottata non solo negli script ma anche nei dati e nei testi dei post.


----------

[1] Vedere il post Eseguire uno script.

[2] Cioè in un file nel quale i caratteri possono essere scritti (e successivamente essere riletti) in chiaro nello stesso modo in cui sono scritti su (e possono essere riletti da) un foglio di carta scritto con una macchina da scrivere, impiegando un set di caratteri/codice universalmente riconosciuto. La macchina da scrivere è stata oramai da decenni sostituita da PC, wordprocessor e stampante, ma è da lei che è derivato il concetto.

lunedì 19 novembre 2018

Eseguire uno script

In R uno script è costituito semplicemente da una serie di righe di testo: scritte in linguaggio R queste righe di testo, riportate nella Console di R, sono eseguite in sequenza dall'Interprete di comandi di R allo scopo di elaborare dei dati o effettuare delle rappresentazioni grafiche. Per seguire uno script è sufficiente copiare le righe di testo che lo compongono e incollarle nella Console di R, aggiungendo al bisogno un ↵ Invio. Se lo script è stato salvato in un file di testo R prevede anche una modalità alternativa che non richiede il "copia e incolla".

Nei post di questo blog il testo degli script è riportato con queste convenzioni:

→ in colore nero preceduti dal simbolo # sono riportati i promemoria e i commenti che non sono eseguiti da R;
in colore rosso e in grassetto è riportato il codice R che viene eseguito e commentato;
→ in colore nero e in grassetto è riportato il codice R che viene eseguito ma che è già stato illustrato o riveste scarso interesse nell'esempio specifico;

mentre i risultati che compaiono nella Console di R in seguito all'esecuzione del codice sono riportati con queste convenzioni:

in colore rosso sono riportati sia il codice R inserito sia gli eventuali promemoria e commenti;
in colore blu sono riportati risultati dell'elaborazione da parte di R

Per eseguire uno script nella Console di R ci sono vari modi.

Primo modo (tradizionale):
selezionate il testo dello script dalla prima riga all'ultima, # inclusi;
→ con il tasto destro del mouse aprite il menù contestuale e con il tasto sinistro fate click su Copia per copiare;
nella RGui fate click con il tasto sinistro del mouse sul menù Modifica quindi selezionate Incolla e se necessario premete ↵ Invio.


Secondo modo (alternativo):
→ selezionate il testo dello script dalla prima riga all'ultima, # inclusi;
→ con il tasto destro del mouse aprite il menù contestuale e con il tasto sinistro fate click su Copia per copiare;
nella Console di R fate click con il tasto destro del mouse per aprire il menù contestuale e con il tasto sinistro fate click su Incolla e se necessario premete ↵ Invio.

Terzo modo (rapido e consigliato):
→ selezionate il testo dello script dalla prima riga all'ultima, # inclusi, e fate ctrl-C (tenendo premuto il tasto ctrl premete il tasto con la lettera C) per copiare;
fate click con il tasto sinistro del mouse sulla finestra della Console di R quindi fate ctrl-V (tenendo premuto il tasto ctrl premete il tasto con la lettera V) per incollare e se necessario premete ↵ Invio.

Nota: se lo script è molto lungo per selezionare e copiare il testo può essere comodo:
→ fare click con il tasto sinistro del mouse a sinistra del primo carattere della prima riga dello script (il più delle volte un #) quindi rilasciare il tasto;
→ ruotando la rotella del mouse portarsi alla fine dello script;
→ tenendo premuto il tasto ↑ Shift (↑ Maiuscolo) fare click con il tasto sinistro del mouse a destra dell'ultimo carattere dell'ultima riga dello script;
→ con il tasto destro del mouse aprire il menù contestuale e con il tasto sinistro fare click su Copia per copiare.

Il quarto modo parte da uno script salvato sul PC [1]:
→ se l'avete salvato in un file di testo .txt dovete aprire il file con il vostro editor di testo preferito, copiare lo script con gli strumenti che questo vi fornisce, quindi incollarlo con una delle modalità riportate sopra nella Console di R se necessario premete ↵ Invio;
→ se l'avete salvato con R in un file .R dovete dal menù File della RGui selezionare Apri script... per aprirlo nell'Editor di R 


quindi dal menù Modifica selezionare Esegui tutto per eseguire lo script.


Ora eseguite questo script nella Console di R seguendo una delle indicazioni riportate e se necessario premete ↵ Invio:

# CALCOLA LA MEDIA E LA DEVIAZIONE STANDARD DEI VALORI 8, 6, 11, 7
#
# viene generato l'oggetto mydata che contiene i valori numerici 8,6,11,7
mydata <- c(8,6,11,7)
# viene mostrato il contenuto dell'oggetto mydata
mydata
# viene calcolata la media dei valori numerici contenuti nell'oggetto mydata
mean(mydata)
# viene calcolate la deviazione standard dei valori numerici contenuti nell'oggetto mydata
sd(mydata)
#

Le righe di codice vengono eseguite una ad una in sequenza e questo è quanto compare nella Console di R:

> # CALCOLA LA MEDIA E LA DEVIAZIONE STANDARD DEI VALORI 8, 6, 11, 7
> #
> # viene generato l'oggetto mydata che contiene i valori numerici 8,6,11,7
> mydata <- c(8,6,11,7)
> # viene mostrato il contenuto dell'oggetto mydata
> mydata
[1] 8 6 11 7
> # calcola la media dei valori numerici contenuti nell'oggetto mydata
> mean(mydata)
[1] 8
> # calcola la deviazione standard dei valori numerici contenuti nell'oggetto mydata
> sd(mydata)
[1] 2.160247
> #

Dal punto di vista della statistica niente di più banale. Ma lo script ci offre l'opportunità per alcuni chiarimenti importanti sugli elementi del linguaggio R, utili a chi affronta per la prima volta l'argomento:
mydata è un oggetto;
<- è l'operatore di assegnamento;
c(), mean() e sd() sono funzioni;
→ l'operatore di assegnamento <- assegna all'oggetto mydata il contenuto dell'array (o vettore) generato dalla funzione c();
→ l'oggetto mydata è l'argomento delle funzioni mean() e sd();
→ la funzione mean() utilizza come argomento l'oggetto mydata che contiene i valori 8,6,11,7 per calcolarne la media, che risulta uguale a 8;
→ la funzione sd() utilizza come argomento l'oggetto mydata che contiene i valori 8,6,11,7 per calcolarne la deviazione standard, che risulta uguale a 2.160247

Il nome mydata attribuito all'oggetto che contiene i numeri 8,6,11,7 è arbitrario, possiamo chiamarlo in qualsiasi altro modo purché sia un identificativo univoco dell'oggetto. Da notare che R riconosce le lettere maiuscole per cui mydata è un oggetto diverso da Mydata.

Come vedete nello script, digitando nella Console di R il nome di un oggetto come ad esempio

mydata

ne viene mostrato il contenuto

> mydata
[1] 8 6 11 7

mentre con la funzione str() come  ad esempio con

str(mydata)

ne viene mostrato la struttura

> str(mydata)
 num [1:4] 8 6 11 7

In questo caso la struttura di mydata è semplice, si tratta di un oggetto che contiene un array (vettore) numerico (num) che include quattro valori ([1:4]) successivamente riportati (8 6 11 7), ma la funzione str() diventa particolarmente utile quando si salvano i molti risultati forniti da una funzione complessa in un oggetto dal quale si vuole estrarre qualche risultato specifico per una successiva elaborazione.

La funzione c() combina gli elementi numerici (8,6,11,7inseriti come argomento in una sequenza di celle ciascuna della quali contiene un dato. In informatica si parla di array o vettore nel caso di dati monodimensionali disposti su una sola riga 

8
6
11
7

si parla di matrice nel caso di dati numerici disposti su più righe e più colonne [2]

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e si parla di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

Se nella Console di R digitate help(c) si apre la finestra di aiuto con la documentazione della funzione c().

All'interno della parentesi graffa {} compare il nome del pacchetto nel quale è inclusa la funzione, nel caso specifico la funzione c() è inclusa nel pacchetto base di funzioni che viene installato con il programma R.

c {base} R Documentation
Combine Values into a Vector or List
Description
This is a generic function which combines its arguments.
The default method combines its arguments to form a vector ...

Più in generale per aprire la finestra di aiuto con la documentazione di una qualsiasi funzione è sufficiente digitare help(nomedellafunzione) nella Console di R e pertanto:
→ per la documentazione della funzione mean() digitate help(mean) nella Console di R
→ per la documentazione della funzione sd() digitate help(sd) nella Console di R.

Nota bene: in R il separatore delle cifre decimali è il punto (.) e come già riportato altrove questa convenzione per ragioni di omogeneità viene adottata non solo negli script ma anche nei dati e nei testi dei post.


----------

[1] Vedere il post Salvare uno script.

[2] I vettori sono matrici aventi una sola riga o una sola colonna. Una matrice con una sola riga e più colonne è detta matrice riga o vettore riga, mentre una matrice con una sola colonna e più righe è detta matrice colonna o vettore colonna.