giovedì 29 novembre 2018

Esportazione dei dati in un file .csv

Anche se normalmente quello che si fa è importare i dati in R [1], talora potrebbe essere necessario esportarli da R sotto forma di file. La soluzione migliore è quella di salvare i dati in un file .csv che potrà poi essere facilmente importato in qualsiasi software esterno.

La tecnica viene illustrata impiegando la funzione write.table() nella quinta e ultima riga di codice di questo script. Se non esiste già, la cartella C:\Rdati\ va creata prima di eseguire lo script.

Copiate e incollate lo script nella Console di R e premete ↵ Invio:

# ESPORTA I DATI DI UNA MATRICE
#
x <- c(4.2, 6.8, 2.5, 8.3, 5.4, 7.9, 5.3, 6.7, 2.2, 3.1) # genera l'array x
y <- c(3.1, 2.2, 6.7, 5.3, 7.9, 5.4, 8.3, 2.5, 6.8, 4.2) # genera l'array y
mymatrix <- data.frame(x, y) # combina gli array in una matrice
#
mymatrix # mostra la matrice nella quale R impiega il punto (.) come separatore dei decimali
#
write.table(mymatrix,file="C:/Rdati/esporta_csv.csv",sep=";", dec=",", quote=FALSE, row.names=FALSE) # esporta i dati in un file di testo .csv sostituendo il punto (.) con la virgola (,)
#

Le prime tre righe servono semplicemente a generare la matrice [2] impiegata come esempio. 

Quindi viene mostrata nella Console di R la matrice mymatrix con il punto (.) come separatore dei decimali e con gli identificativi univoci/nomi di riga (1, 2, eccetera) generati automaticamente da R:

> mymatrix # mostra la matrice nella quale R impiega il punto (.) come separatore dei decimali
     x   y
1  4.2 3.1
2  6.8 2.2
3  2.5 6.7
4  8.3 5.3
5  5.4 7.9
6  7.9 5.4
7  5.3 8.3
8  6.7 2.5
9  2.2 6.8
10 3.1 4.2

La funzione write.table() con i suoi argomenti:
→ esporta i dati dell'oggetto mymatrix;
→ genera in uscita il file esporta_csv.csv nella posizione C:/Rdati/;
→ impiega come separatore di campo il punto e vigola (sep=";")
→ impiega come separatore dei decimali la virgola (dec=",")
→ non chiude tra le virgolette "" i campi non numerici (quote=FALSE)
→ non esporta i nomi delle righe (row.names=FALSE)

Questo è il contenuto del file C:\Rdati\esporta_csv.csv generato con la funzione write.table() e aperto con un editor di testo:

x;y
4,2;3,1
6,8;2,2
2,5;6,7
8,3;5,3
5,4;7,9
7,9;5,4
5,3;8,3
6,7;2,5
2,2;6,8
3,1;4,2

Compaiono come previsto nello script il punto e virgola (;) come separatore di campo e la virgola (,) come separatore dei decimali. Notare che grazie all'argomento row.names=FALSE nel file esportato non compaiono gli identificativi/nomi di riga di R:

Potete importare senza difficoltà il file esporta_csv.csv in Excel o in un programma appartenente alla categoria del software libero [3] come OpenOffice calc o LibreOffice calc.

Ma in realtà R oltre alla funzione write.table() fornisce altre due funzioni per esportare i dati in formato .csv:
→ la funzione write.csv() che consente di esportare i dati impiegando la virgola (,) come separatore di campo [4] e il punto (.) come separatore dei decimali e quindi impiega i separatori secondo le convenzioni vigenti nel mondo anglosassone;
→ la funzione write.csv2() che consente di esportare i dati impiegando il punto e virgola (;) come separatore di campo e la virgola (,) come separatore dei decimali e quindi impiega i separatori secondo le convenzioni vigenti in Italia, Spagna, Francia e in altri Paesi europei.

Per illustrare queste modalità nello script che segue viene costruita una tabella che viene esportata nella cartella C:\Rdati\ in quattro file differenti impiegando le tre funzioni:
→ write.table()
→ write.csv()
→ write.csv2()

Copiate e incollate lo script nella Console di R e premete ↵ Invio:

# ESPORTA I DATI DI UNA TABELLA 
#
# genera cinque array
id <- c("MT", "GF", "MC", "SB", "FE", "AB", "RF")
sesso <- c("M", "F", "F", "M", "F", "M", "F")
anni <- c(69, 56, 53, 28 ,61, 46, 31)
peso_kg <- c(76, 63, 71, 73, 54, 92, 81)
altezza_m <- c(1.78, NA, 1.60, 1.78, 1.54, 1.84, 1.56)
mytable <- data.frame(id, sesso, anni, peso_kg, altezza_m) # combina gli array in una tabella
#
mytable # mostra la tabella nella quale R impiega il punto (.) come separatore dei decimali
#
# (a) write.table consente sia (.) sia (,) come separatore dei decimali
write.table(mytable, file="C:/Rdati/write_table_p.csv", quote=FALSE, sep=";", dec=".", na="", col.names=TRUE, row.names=FALSE) 
#
# (b) write.table consente sia (.) sia (,) come separatore dei decimali
write.table(mytable, file="C:/Rdati/write_table_v.csv", quote=FALSE, sep=";", dec=",", na="", col.names=TRUE, row.names=FALSE) 
#
(c) write.csv usa (,) come separatore di campo e (.) come separatore dei decimali
write.csv(mytable, file="C:/Rdati/write_csv.csv", quote=FALSE, na="", row.names=FALSE) 
#
# (d) write.csv2 usa (;) come separatore di campo e (,) come separatore dei decimali
write.csv2(mytable, file="C:/Rdati/write_csv2.csv", quote=FALSE, na="", row.names=FALSE) 
#

Le prime sei righe servono semplicemente a generare la tabella impiegata come esempio.

Questo è il contenuto della tabella mytable [2] con il punto (.) come separatore dei decimali e con gli identificativi/nomi di riga (1, 2, eccetera) generati automaticamente da R:

> mytable # mostra la tabella nella quale R impiega il punto (.) come separatore dei decimali
  id sesso anni peso_kg altezza_m
1 MT     M   69      76      1.78
2 GF     F   56      63        NA
3 MC     F   53      71      1.60
4 SB     M   28      73      1.78
5 FE     F   61      54      1.54
6 AB     M   46      92      1.84
7 RF     F   31      81      1.56

Dopo avere mostrato il contenuto della tabella:
in (a) la funzione write.table() viene impiegata una prima volta per esportare i dati nel file write_table_p.csv nel quale è previsto il punto (.) come separatore dei decimali;
in (b) la funzione write.table() viene impiegata una seconda volta per esportare i dati nel file write_table_v.csv nel quale è prevista la virgola (,) come separatore dei decimali;
in (c) la funzione write.csv() viene impiegata per esportare i dati nel file write_csv.csv impiegando i separatori secondo le convenzioni vigenti nel mondo anglosassone, cioè la virgola (,) come separatore di campo [4] e il punto (.) come separatore dei decimali;
in (d) la funzione write.csv2() viene impiegata per esportare i dati nel file write_csv2.csv impiegando i separatori secondo le convenzioni vigenti in Europa, cioè il punto e virgola (;) come separatore di campo e la virgola (,) come separatore dei decimali.

Da notare che il separatore dei decimali nelle funzioni write.csv() e write.csv2() è fissato all'interno delle funzioni stesse e non può essere cambiato.

I file generati sono salvati nella cartella C:\Rdati\ e anche in questo caso possono essere aperti con un editor di testo per verificarne il contenuto e possono essere importati in Excel o in OpenOffice calc o in LibreOffice calc.

Dopo avere illustrato il metodo canonico per esportare i dati da R [5], aggiungo che in realtà esiste anche un metodo naïf ma a dire il vero molto rapido e perfettamente funzionante. 

Supponiamo che vi interessi esportare, esattamente come è stata visualizzata nella Console di R con mytablela tabella riportata qui sopra. Selezionate il testo della tabella in questo modo










quindi copiatelo e incollatelo, aggiungendo un ↵ Invio al termine dell'ultima riga, in un editor di file di testo come ad esempio il Blocco note di Windows, infine salvatelo nella cartella Rdati con il nome naif - lasciate pure che l'editor aggiunga l'estensione di default .txt e quindi il nome completo del file sarà naif.txt.

Sappiamo che un file .txt è identico a un file .csv a parte, appunto, l'estensione del nome del file. In questo caso abbiamo un file di testo che impiega come separatore di campo un tabulatore <TAB> e come separatore dei decimali il punto (.).

Se ora copiate e incollate nella Console di R questa riga

mynaif <- read.table("c:/Rdati/naif.txt", header=TRUE, sep="", dec=".")

dove tra le virgolette in sep="" ho avuto cura di inserire (anche se non lo vedete) il carattere <TAB>, ritrovate in mynaif i vostri dati:

> mynaif <- read.table("c:/Rdati/naif.txt", header=TRUE, sep="    ", dec=".")
> mynaif
  id sesso anni peso_kg altezza_m
1 MT     M   69      76      1.78
2 GF     F   56      63        NA
3 MC     F   53      71      1.60
4 SB     M   28      73      1.78
5 FE     F   61      54      1.54
6 AB     M   46      92      1.84
7 RF     F   31      81      1.56

In buona sostanza avete esportato i dati semplicemente copiandoli direttamente dalla Console di R e salvandoli in un file di testo - dal quale li potete rileggere con R ma anche con quasiasi altro applicativo - senza digitare nemmeno una riga di codice!


----------

[1] Vedere i post:

[2] Parliamo di array o vettore nel caso di dati numerici monodimensionali, disposti su una sola riga, 

8
6
11
7

di matrice nel caso di dati numerici disposti su più righe e più colonne

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

e 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

[3] Per il significato di "Software libero", di "Software open source" e di "Software di dominio pubblico" vedere: The Free Software Foundation. GNU Operating System. Categories of free and nonfree software. URL consultato il 28/11/2018: https://goo.gl/MqwM2Q

[4] L'impiego della virgola come separatore di campo (,) è alla base della modalità comma separated value che definisce la struttura dati dei relativi file e dal cui acronimo è derivato il nome .csv dell'estensione.

[5] Un esempio che illustra come impiegare la funzione write.table() per esportare in un file .csv uno dei numerosi set di dati forniti con R e con i suoi pacchetti aggiuntivi è riportato nel post Il set di dati ais.

Pacchetti aggiuntivi di statistica e grafica

Il programma R che si scarica e si installa sul proprio PC o notebook da sito ufficiale di R [1] include una serie di funzioni statistiche e grafiche di base, che tuttavia possono essere integrate da una miriade di funzioni statistiche e grafiche contenute nei pacchetti aggiuntivi disponibili, ciascuno orientato alla risoluzione di un problema specifico.

Per scaricare un pacchetto aggiuntivo e installarlo sul vostro PC o notebook:
selezionare dalla RGui l'opzione Pacchetti
selezionare dal menù a tendina che compare Installa pacchetti...

Si aprirà prima una finestra per selezionare nel CRAN (Comprehensive R Archive Network) il sito dal quale scaricare il pacchetto, per l'Italia potete selezionare Italy (Milano) o Italy (Padua), entrambi siti https.


Una volta selezionato il sito si aprirà una finestra con l’elenco dei pacchetti disponibili. Selezionate il pacchetto e premete OK per installarlo.

Quando si installa un pacchetto è possibile che questo richieda che sul PC o notebook siano installati altri pacchetti, cui esso si appoggia. Se questi non sono installati verrà effettuato automaticamente il download e l’installazione di più pacchetti, tutti quelli tra loro concatenati e quindi necessariamente e contemporaneamente richiesti per garantire la funzionalità dell’unico pacchetto che si desiderava installare. Ora scaricate e installate il pacchetto DAAG che ci serve tra poco (vedere il post il set di dati ais).

In R un "pacchetto" è una raccolta di funzioni, di set di dati e di codice R compilato. Quando si scarica e si installa un pacchetto, questo viene immagazzinato nella locale libreria. Ecco perché se nella Console di R digitate

library

potete vedere l'elenco dei pacchetti che avete installato e che sono disponibili in R sul vostro PC o notebook.

Per utilizzare le funzioni e i set di dati contenuti in un pacchetto è necessario caricarlo come segue:
dalla RGui fare click su Pacchetti;
selezionare Carica pacchetto...;
→ nella finestra che compare selezionare il pacchetto da caricare.


In alternativa è possibile, ed è più pratico, caricare i pacchetti impiegando all'interno degli script la funzione library() o la funzione require() e riportando come argomento all'interno della parentesi () il nome del pacchetto.

Una volta caricato un pacchetto è possibile avere l'elenco di tutti i set di dati che sono stati caricati con quel pacchetto, e digitando nella Console di R il nome di uno di questi set di dati poterne vederne il contenuto:

library(DAAG) # carica il pacchetto DAAG
data(package="DAAG") # elenca i set di dati caricati con il pacchetto DAAG
ais # mostra il contenuto del set di dati ais

Mediante la funzione data() possono essere caricati set di dati senza caricare il pacchetto che li contiene, così ad esempio è possibile caricare selettivamente il set di dati ais senza caricare il pacchetto DAAG digitando nella Console di R

data(ais, package="DAAG")

Digitando nella Console di R

help(package="DAAG")

si accede alla documentazione delle funzioni e dei set di dati contenuti nel pacchetto.

Per scaricare il manuale di riferimento in formato .pdf di un pacchetto:
→ accedere al CRAN (per esempio su https://cran.stat.unipd.it/);
fare click sulla voce Packages nella sezione Software;
fare click sul link Table of available packages, sorted by name;
→ fare click sul nome del pacchetto;
il manuale si trova alla voce Reference manual.

Per aggiornare periodicamente i pacchetti installati:
dalla RGui selezionare l'opzione Pacchetti;
dal menù a tendina che compare selezionare Aggiorna pacchetti...

I pacchetti non più manutenuti vengono rimossi dal CRAN, ma sono ancora resi disponibili nell'archivio storico di R al link https://bit.ly/2FVFufj (URL consultato il 14/01/2023). 


----------

[1] The R Project for Statistical Computing. URL consultato il 07/08/2018: https://www.r-project.org/

Il set di dati galton

Il set di dati galton, inizialmente contenuto nella libreria psych ma recentemente spostato nella libreria psychTools (in caso di difficoltà verificate entrambe le librerie, non si sa mai...) contiene 928 coppie di valori di altezza (misurata in pollici) di altrettanti padri e dei relativi figli. Questa in breve la storia del set di dati.

Francis Galton [1] era cugino di Charles Darwin e dopo la lettura de "L'origine delle specie" si era convinto che la preminenza delle persone nei vari campi fosse dovuta essenzialmente a fattori genetici. Si era quindi dedicato alla ricerca delle leggi della genetica. E l'osservazione di fenomeni di "regressione verso la media" dell'altezza dei figli rispetto all'altezza dei padri lo portò a concepire l'idea della necessità di opporvisi, applicando quelli che riteneva essere i principi di una "buona" genetica ("eugenetica").

In un suo famoso lavoro [2] Galton così si esprime:

"… This memoir contains the data upon which the remarks on the Law of Regression were founded ... My object is to place beyond doubt the existence of a simple and far-reaching law that governs the hereditary transmission of, I believe, every one of those simple qualities which all possess, though in unequal degrees."

"It is some years since I made an extensive series of experiments on the produce of seeds of different size but of the same species. They yielded results that seemed very noteworthy, and I used them as the basis of a lecture before the Royal Institution on February 9th, 1877. It appeared from these experiments that the offspring did not tend to resemble their parent seeds in size, but to be always more mediocre than they - to be smaller than the parents, if the parents were large; to be larger than the parents, if the parents were very small."

"It was anthropological evidence that I desired, caring only for the seeds as means of throwing light on heredity in man ... inducing me to make an offer of prizes for Family Records, which was largely responded to, and furnished me last year with what I wanted ... An analysis of the Records fully confirms and goes far beyond the conclusions I obtained from the seeds. It gives the numerical value of the regression towards mediocrity in the case of human stature ... My data consisted of the heights of 930 adult children and of their respective parentages, 205 in number..."

A pagina 254 del lavoro Galton cita "... a total of 928 children ..." che corrisponde al numero delle coppie di valori riportati in R nel set di dati galton.

L'espressione "regressione" è quindi stata associata al metodo statistico per il calcolo dell'equazione della retta, che è diventata così la "retta di regressione", in seguito agli studi di Galton. Per i problemi che nascono applicando ai dati di Galton il modello tradizionale di regressione lineare, quello più largamente impiegato, vedere il post Regressione lineare semplice parametrica e il post La regressione lineare: assunti e modelli.

Per utilizzare il set di dati galton dovete scaricare e installare dal CRAN il pacchetto psych quindi caricare il set di dati con la riga di codice
library(psychTools)
come riportato nei vari script che impiegano questi dati.

In alternativa per caricare il set di dati potete fare il download del file galton.csv come indicato alla pagina Dati, salvare il file galton.csv nella cartella C:\Rdati\ [3] quindi negli script sostituire la riga
library(psychTools)
con la riga
galton <- read.table("c:/Rdati/galton.csv", header=TRUE, sep=";", dec=",")
Da notare che invece del punto viene impiegata la virgola come separatore delle cifre decimali (dec=",") per garantire la compatibilità con l'installazione standard in lingua italiana di Excel, OpenOffice Calc, eccetera. 

Potete anche copiare le righe riportate qui sotto e salvarle in C:\Rdati\ nel file di testo denominato galton.txt. Attenzione: l'ultimo carattere nel file deve essere un ↵ Invio (cioè un "a capo") che dovete avere cura di aggiungere immediatamente dopo il 73,7 finale prima di salvare il file.

70,5;61,7\n68,5;61,7\n65,5;61,7\n64,5;61,7\n64;61,7\n67,5;62,2\n67,5;62,2\n67,5;62,2\n66,5;62,2\n66,5;62,2\n66,5;62,2\n64,5;62,2\n70,5;63,2\n69,5;63,2\n68,5;63,2\n68,5;63,2\n68,5;63,2\n68,5;63,2\n68,5;63,2\n68,5;63,2\n68,5;63,2\n67,5;63,2\n67,5;63,2\n67,5;63,2\n67,5;63,2\n67,5;63,2\n66,5;63,2\n66,5;63,2\n66,5;63,2\n65,5;63,2\n65,5;63,2\n65,5;63,2\n65,5;63,2\n65,5;63,2\n65,5;63,2\n65,5;63,2\n65,5;63,2\n65,5;63,2\n64,5;63,2\n64,5;63,2\n64,5;63,2\n64,5;63,2\n64;63,2\n64;63,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n69,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n68,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n67,5;64,2\n66,5;64,2\n66,5;64,2\n66,5;64,2\n66,5;64,2\n66,5;64,2\n65,5;64,2\n65,5;64,2\n65,5;64,2\n65,5;64,2\n65,5;64,2\n64,5;64,2\n64,5;64,2\n64,5;64,2\n64,5;64,2\n64;64,2\n64;64,2\n64;64,2\n64;64,2\n71,5;65,2\n70,5;65,2\n69,5;65,2\n69,5;65,2\n69,5;65,2\n69,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n68,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n67,5;65,2\n66,5;65,2\n66,5;65,2\n65,5;65,2\n65,5;65,2\n65,5;65,2\n65,5;65,2\n65,5;65,2\n65,5;65,2\n65,5;65,2\n64,5;65,2\n64;65,2\n71,5;66,2\n71,5;66,2\n71,5;66,2\n70,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n69,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n68,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n67,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n66,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n65,5;66,2\n64,5;66,2\n64,5;66,2\n64,5;66,2\n64,5;66,2\n64,5;66,2\n64;66,2\n64;66,2\n71,5;67,2\n71,5;67,2\n71,5;67,2\n71,5;67,2\n70,5;67,2\n70,5;67,2\n70,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n69,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n68,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n67,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n66,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n65,5;67,2\n64,5;67,2\n64,5;67,2\n64,5;67,2\n64,5;67,2\n64,5;67,2\n64;67,2\n64;67,2\n72,5;68,2\n71,5;68,2\n71,5;68,2\n71,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n70,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n69,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n68,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n67,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n66,5;68,2\n65,5;68,2\n65,5;68,2\n65,5;68,2\n65,5;68,2\n65,5;68,2\n65,5;68,2\n65,5;68,2\n64;68,2\n72,5;69,2\n72,5;69,2\n71,5;69,2\n71,5;69,2\n71,5;69,2\n71,5;69,2\n71,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n70,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n69,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n68,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n67,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n66,5;69,2\n65,5;69,2\n65,5;69,2\n65,5;69,2\n65,5;69,2\n65,5;69,2\n65,5;69,2\n65,5;69,2\n64,5;69,2\n64,5;69,2\n64;69,2\n72,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n71,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n70,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n69,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n68,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n67,5;70,2\n66,5;70,2\n66,5;70,2\n66,5;70,2\n66,5;70,2\n65,5;70,2\n65,5;70,2\n65,5;70,2\n65,5;70,2\n65,5;70,2\n72,5;71,2\n72,5;71,2\n71,5;71,2\n71,5;71,2\n71,5;71,2\n71,5;71,2\n70,5;71,2\n70,5;71,2\n70,5;71,2\n70,5;71,2\n70,5;71,2\n70,5;71,2\n70,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n69,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n68,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n67,5;71,2\n65,5;71,2\n65,5;71,2\n73;72,2\n72,5;72,2\n72,5;72,2\n72,5;72,2\n72,5;72,2\n72,5;72,2\n72,5;72,2\n72,5;72,2\n71,5;72,2\n71,5;72,2\n71,5;72,2\n71,5;72,2\n71,5;72,2\n71,5;72,2\n71,5;72,2\n71,5;72,2\n71,5;72,2\n70,5;72,2\n70,5;72,2\n70,5;72,2\n70,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n69,5;72,2\n68,5;72,2\n68,5;72,2\n68,5;72,2\n68,5;72,2\n67,5;72,2\n67,5;72,2\n67,5;72,2\n67,5;72,2\n65,5;72,2\n73;73,2\n73;73,2\n73;73,2\n72,5;73,2\n72,5;73,2\n71,5;73,2\n71,5;73,2\n70,5;73,2\n70,5;73,2\n70,5;73,2\n69,5;73,2\n69,5;73,2\n69,5;73,2\n69,5;73,2\n68,5;73,2\n68,5;73,2\n68,5;73,2\n72,5;73,7\n72,5;73,7\n72,5;73,7\n72,5;73,7\n71,5;73,7\n71,5;73,7\n70,5;73,7\n70,5;73,7\n70,5;73,7\n69,5;73,7\n69,5;73,7\n69,5;73,7\n69,5;73,7\n69,5;73,7

In questo caso come separatore tra record / righe non viene impiegato un ↵ Invio ma viene impiegato un \n che R interpreta come un ↵ Invio se nella funzione read.table() che importa i dati viene abilitato il riconoscimento dei caratteri di controllo con l'argomento allowEscapes=TRUE. Il vantaggio è rappresentato da un file di testo molto più compatto. Per importare i dati dal file galton.txt impiegate questo codice:
galton <- read.table("c:/Rdati/galton.txt", header=TRUE, col.names=c("parent","child"), sep=";", dec=",", allowEscapes=TRUE)

Questo script infine carica il pacchetto psychTools ed esporta nel file C:\Rdati\galton.csv il set di dati galton impiegando il punto e virgola come separatore di campo (sep=";") e la virgola come separatore delle cifre decimali (dec=","). 

# ESPORTA DA R IN UN FILE .csv IL SET DI DATI galton DEL PACCHETTO psychTools
# impiega come separatore di campo il punto e virgola (;)
# impiega come separatore delle cifre decimali la virgola (,)
#
library(psychTools) # carica il pacchetto incluso il set di dati galton
write.table(galton, file="C:/Rdati/galton.csv", quote=FALSE, sep=";", dec=",", na="", col.names=TRUE, row.names=FALSE) # esporta i dati, notare / invece di \ su windows
#


----------

[1] Francis Galton. MacTutor History of Mathematics archive. School of Mathematics and Statistics. University of St Andrews, Scotland. URL consultato il 29/11/2018: https://goo.gl/BVMXGn

[2] Francis Galton. Regression Towards Mediocrity in Hereditary Stature. The Journal of the Anthropological Institute of Great Britain and Ireland, 1886, Vol. 15, pp. 246-263. URL consultato il 29/11/2018: https://goo.gl/VWvBau

[3] Se non esiste, la cartella C:\Rdati\ va creata.