Capitolo 7 Input/Output

I dati raccolti dallo psicologo sono contenuti in file aventi formati diversi: solo testo, CSV, Excel, eccetera. R prevede diverse funzioni di importazione dei dati. Esamineremo qui la funzione read.table() per l’importazione di dati in formato solo testo, ma funzioni analoghe possono essere usate per molti altri formati possibili.

7.1 La funzione read.table()

Ci sono tanti modi per importare un file dal nostro computer. R permette di utilizzare delle funzioni che sono già nella libreria di base, oppure possiamo utilizzare delle funzioni specifiche, a seconda del tipo di file da importare, che sono contenute in pacchetti aggiuntivi. Per leggere i dati da file in R è conveniente preliminarmente generare un file di dati in formato ASCII, disponendoli come si farebbe in una matrice di dati, e mettere questo file nella cartella di lavoro corrente. Fatto questo, si può utilizzare la funzione read.table() presente nella libreria di base per leggere l’intero dataset. Se la prima riga del file contiene l’intestazione delle variabili, allora read.table("my_file.txt", header = TRUE) interpreterà la prima riga del file come una riga dove sono contenuti i nomi delle variabili, assegnando ciascun nome alle variabili del data frame:

mydata <- read.table("my_file.txt", header = TRUE)

In alternativa, si può impiegare la funzione read.csv(), che è adatta a leggere dati salvati in .csv. Utilizzando altre funzioni, si possono leggere in R  i dati contenuti in file aventi formati diversi da quelli considerati qui, quali Excel, SPSS, ecc.

7.2 File di dati forniti da R

In R esistono comunque oltre 50 insiemi di dati contenuti nel package base e altri sono disponibili in altri packages. Per vedere l’elenco degli insiemi di dati disponibili nel package base basta usare l’istruzione data(); per caricare un particolare insieme di dati, ad esempio cars, basta utilizzare l’istruzione

data(cars)

Nella maggior parte dei casi questo corrisponde a caricare un oggetto, solitamente un data.frame dello stesso nome: per l’esempio considerato si avrebbe un data frame di nome cars.

7.3 Esportazione di un file

Per esportare un data.frame in formato .csv possiamo scrivere il seguente codice

write.csv(df_esempio, file = "esempio.csv", row.names = FALSE)

dove df_esempio è il data.frame da salvare e esempio.csv è il file che verrà salvato all’interno della nostra cartellla di lavoro.

7.4 Pacchetto rio

Un’alternativa più semplice è fornita dalle funzioni fornite dal pacchetto rio. Per importare i dati da un file in qualsiasi formato si usa

my_data_frame <- rio::import("my_file.csv")

Per esportare i dati in un file avente qualsiasi formato si usa invece

rio::export(my_data_frame, "my_file.csv")

7.5 Dove sono i miei file?

Quello che abbiamo detto finora, a proposito dell’importazione ed esportazione dei file, si riferisce a file che si trovano nella cartella di lavoro (working directory). Ma non sempre ci troviamo in questa situazione, il che è anche una buona cosa, perché se dobbiamo gestire un progetto anche leggermente complesso è sempre una buona idea salvare i file che usiamo in cartelle diverse. Per esempio, possiamo usare una cartella chiamata psicometria dove salviamo tutto il materiale di questo insegnamento. Nella cartella psicometria ci potrà essere una cartella chiamata scripts dove salveremo gli script con il codice R utilizzato per i vari esercizi, e una cartella chiamata data dove possiamo salvare i dati. Questa organizzazione minimale ci pone, però, difronte ad un problema: i dati che vogliamo caricare in R non si trovano più nella cartella dove sono contenuti gli script. Quando importiamo un file di dati dobbiamo dunque specificare il percorso che identifica la posizione sul nostro computer del file che ci interessa.

Questo problema può essere risolto in due modi: speficicando l’inridizzo del file in modo assoluto o relativo. Specificare l’indirizzo di un file in modo assoluto ha una serie di limiti. Il più grande è che non sarà possibile utilizzare quell’istruzione su una macchina diversa. Dunque, è molto più conveniente specificare l’indirizzo dei file in modo relativo. Ma relativo rispetto a cosa? Rispetto alla working directory che definirà l’origine del nostro percorso.

Ma è facile immaginare che progetti diversi possano avere diverse working directory. Infatti le cose stanno proprio in questo modo: per ciascun progetto dobbiamo specificare una diversa working directory. Per esempio, potremmo avere un progetto relativo all’insegnamento di Psicometria e un progetto relativo alla prova finale.

Per organizzaere il lavoro in questo modo, si procede come segue. Supponiamo di creare una cartella chiamata psicometria che contiene, al suo interno, le cartelle scripts e data:

psicometria/
  ├── data
  ├── scripts

Queste cartelle conterranno i file che ho specificato sopra.

Chiudiamo RStudio, se è aperto e lo riapriamo di nuovo. Dal menu selezioniamo File -> New Project... Questo aprirà un altro menu che ci chiederà, tra le altre cose se vogliamo creare un nuovo progetto (New project). Selezioniamo quell’opzione e navighiamo fino alla cartella psicometria e selezioniamo open. Questo creerà un file chiamato psicometria.Rproj nella cartella psicometria.

Chiudiamo RStudio. Se vogliamo accedere al progetto “psicometria” dobbiamo cliccare sul file psicometria.Rproj. Questo aprirà RStudio e farà in modo che la working directory coincida con la cartalla psicometria. Ogni volta che vogliamo lavorare sui dati del progetto “psicometria” dobbiamo chiudere RStudio (se è già aperto) e riaprirlo cliccando sul file psicometria.Rproj.

A questo punto possiamo definire l’indirizzo dei file in modo relativo – relativo alla cartella psicometria. Per fare questo usiamo le funzionalità del pacchetto here. Supponiamo di volere caricare un file di dati che si chiama dati_depressione.txt e si trova nella cartella data contenuta nella cartella psicometria. Per importare questi dati (dopo avere caricato i pacchetti rio e here) useremo l’istruzione seguente:

rio::import(here("data", "dati_depressione.txt"))

In altre parole, così facendo specifichiamo il percorso relativo del file dati_depressione.txt. L’istruzione precedente significa che, partendo dalla cartella che coincide con la working directory dobbiamo spostarci nella cartella data e lì dentro troviamo il file chiamato dati_depressione.txt.