Primi passi con R
Scaricare R
R è un software free ed open source, che può essere liberamente scaricato dal sito R: The R Project for Statistical Computing, ad esempio utilizzando il mirror dell'università di Padova: The Comprehensive R Archive Network
R è disponibile per piattaforme Windows, Mac, Linux.
R è un software a riga di comando. Questo significa che ogni istruzione viene comunicata ad R attraverso il prompt della riga di comando.
RStudio
Per rendere più semplice la vita, è opportuno utilizzare RStudio, un IDE (integrated development environment) che rende più pratico scrivere codice in R. Anche RStudio può essere installato su Windows, Mac, Linux.
Usare R come una calcolatrice
Per iniziare a prendere confidenza con la riga di comando di R, è possibile cominciare a giocarci, provando le funzioni più elementari. La riga di comando, ad esempio, può essere utilizzata per calcolare alcune semplici operazioni.
Operazioni aritmetiche di base
Addizione, sottrazione, moltiplicazione, divisione, elevazione a potenza
# addizione
7+4
## [1] 11
# sottrazione
13-5
## [1] 8
# moltiplicazione
7*7
## [1] 49
# divisione
23/3
## [1] 7.666667
# divisione intera
23 %/% 3
## [1] 7
# modulo (il resto della divisione)
23 %% 3
## [1] 2
# elevazione a potenza
2^3
## [1] 8
3^2 + (7-2)*3
## [1] 24
Assegnazione di variabili
La creazione di una variabile avviene attraverso la sintassi <-
. In R non è necessario definire il tipo di variabile. Attraverso l'assegnazione, sarà R a creare un tipo opportuno di variabile (o di oggetto).
numero1 <- 5
etichetta1 <- "Antonio"
# le parentesi servono a stampare il risultato a video
(numero2 <- 5.12)
## [1] 5.12
numero3 <- 10/3
# invocando la variabile ne stampo il valore
numero3
## [1] 3.333333
# se alla stessa variabile assegno un nuovo valore
# perdo il valore precedente
numero3 <- 10*2
numero3
## [1] 20
# operazioni usando le variabili
numero2 * numero3
## [1] 102.4
# assign (variabile, valore) equivale a variabile <- valore
assign("numero4", 7)
numero4
## [1] 7
<-
è l'operatore di assegnamento, ed equivale alla funzione assign
. Pertanto numero <- 5
è una scorciatoia della funzione assign("numero", 5)
.
La funzione ls()
mi permette di elencare tutte le variabili (oggetti) attualmente attivi nel framework.
ls()
## [1] "a" "aerobica" "affitti"
## [4] "altitudine" "anno" "aov_1"
## [7] "aov_2" "aov_3" "aov_sc2"
## [10] "aovAffitti" "aovScenario1" "arabica"
## [13] "atteso" "b" "bartlett_1"
## [16] "bartlett_2" "booleano" "bootstraps"
## [19] "c" "caffe" "caffe_top_country"
## [22] "campione" "campione_genere" "campione_occupazione"
## [25] "campione1" "campione2" "campioneA"
## [28] "campioni20" "campioni50" "cat_ord"
## [31] "cat1" "chi_quadro" "chi_quadro1"
## [34] "chi_quadro2" "chi2_a" "chi2_b"
## [37] "chisq_test1" "ciao" "ciaoDipende"
## [40] "ciaoNome" "ciaoNomeAmico" "ciaoNomeForse"
## [43] "ciaoNomi" "cicli" "ciclo"
## [46] "cinque" "colore" "colori"
## [49] "condizione" "confidenza_bootstraps" "confidenza_campioni20"
## [52] "confidenza_campioni50" "confidenza_simulazione" "confidenza1"
## [55] "confidenza2" "confidenza3" "confronti1"
## [58] "confronto1" "confronto2gruppi" "conta"
## [61] "contingenza" "cor_test_S4" "correlazione"
## [64] "correlazione1" "correlazione2" "cortest"
## [67] "corTest_1" "corTest_2" "corTest_3"
## [70] "country" "density20" "density50"
## [73] "densityboot" "destDir" "destinazione"
## [76] "df_simulato" "df_simulato_2" "differenza"
## [79] "differenza_campioni20" "differenza_campioni50" "differenzaOsservata"
## [82] "differenze" "distanza" "distanza_oss"
## [85] "distanza1" "distanza2" "distribuzione"
## [88] "due_campioni" "due_rank" "due_somma_rank"
## [91] "effettoAerobico" "effettoFarmaco" "erre"
## [94] "erre1" "erre2" "errore_standard"
## [97] "errore_standard_stimato" "estimate" "estimates"
## [100] "etichetta" "etichetta1" "expDep1"
## [103] "expDep2" "F_Affitti" "farlocco"
## [106] "farmaco" "farmacoA" "farmacoAmod"
## [109] "farmacoNA" "file_rmd" "freq_scol"
## [112] "freq_sex" "frequenze" "Fvalue"
## [115] "fZone" "genere_atteso" "ggBar1"
## [118] "ggBar2" "ggBoxplot" "ggBoxplot2"
## [121] "ggDensity" "ggDensity2" "ggHist"
## [124] "ggJitter" "ggPie" "ggScatter"
## [127] "ggViolin" "gira" "giusto"
## [130] "harvtest2" "harvtest3" "histLanci1"
## [133] "histLanci2" "htest_1" "htest_2"
## [136] "i" "incompleto" "indici2d"
## [139] "intero1" "intervalli" "intervalli1A"
## [142] "intervalli1B" "intervalli2" "isNominaleA"
## [145] "k" "K" "kstest_1"
## [148] "kt_1" "kt1" "lanci1"
## [151] "lanci2" "lancio" "lineare"
## [154] "lineare_1" "lineare_2" "linmod"
## [157] "lista1" "lmAltAroma" "logico1"
## [160] "m" "m_aov_1" "m_aov_2"
## [163] "m_aov_3" "m20" "m50"
## [166] "marginali_colonna" "marginali_riga" "matrice1"
## [169] "matrice2" "matrice3" "meanA"
## [172] "meanB" "meanC" "meanTot"
## [175] "media" "media_campione" "media_pop"
## [178] "media_teorica" "medie_bootstraps" "medie_campioni20"
## [181] "medie_campioni50" "medie.osservate" "medieAffitti"
## [184] "minmax" "mischiato" "mischiatoA"
## [187] "mischiatoB" "misto" "moda"
## [190] "mode_scol" "mode_sex" "modello1"
## [193] "modello2" "modello3" "MSM"
## [196] "MSR" "n" "n_pop"
## [199] "nome" "nome_file" "nomi"
## [202] "nominale" "numerico1" "numerico2"
## [205] "numero1" "numero2" "numero3"
## [208] "numero4" "op" "ordinale"
## [211] "oss1" "oss2" "osservazioni"
## [214] "osservazioniA" "osservazioniB" "osservazioniC"
## [217] "p_value" "p_value_differenze_simulazione" "p_value_differenze_t"
## [220] "p_value_empirica_1" "p_value_F_1" "p_value_simulazione"
## [223] "p_value_simulazione1" "p_value_simulazione2" "p_value_t1"
## [226] "p_value_t2" "p_value_Wilcoxon" "p_value1"
## [229] "p_value2" "partecipanti" "partecipanti_validi"
## [232] "placeboA" "placeboNA" "plot_range"
## [235] "popolazione" "posizione" "prob_attesa"
## [238] "prob_attese" "prob_dist" "prob_genere_attesa"
## [241] "punteggi" "punteggioBase" "pvalue"
## [244] "Q" "quant_scol" "quattro"
## [247] "R2_1" "R2_2" "rank_atteso"
## [250] "rankx4" "ranky4" "relazioni"
## [253] "relazioni_t" "residui1" "residui2"
## [256] "risultati" "sbagliato" "score"
## [259] "sd_teorica" "SE" "selezione"
## [262] "sequenza" "sequenze1" "shapiro2"
## [265] "sim_barplot1" "sim_barplot2" "sim_boxplot"
## [268] "sim_density" "sim_donut" "sim_hist"
## [271] "sim_pie" "sim_scatter" "soggetti"
## [274] "sorgente" "spearman4" "srcDir"
## [277] "SSM" "SSMA" "SSMB"
## [280] "SSMC" "SSR" "SSRA"
## [283] "SSRB" "SSRC" "SST"
## [286] "stest_1" "summaryAov1" "sustain"
## [289] "sustainable" "sx1" "sy1"
## [292] "sy2" "t" "t_atteso"
## [295] "t_campione" "t_campione2" "t_campioneA"
## [298] "t_genere_atteso" "t_scol" "t_sex"
## [301] "t_test" "t_test_campioneA" "t_test_campioneA2"
## [304] "t1" "t2" "tabella_statistiche"
## [307] "table_country" "testo" "ttest_1"
## [310] "ttest_2" "tutti" "uni2"
## [313] "valutazioni" "var_1A" "var_1B"
## [316] "var_6A" "var_6B" "varFattore1"
## [319] "varFattore2" "variabile1" "varIntervalli1"
## [322] "varIntervalli2" "varIntervalli3" "varIntervalli4"
## [325] "varIntervalli5" "varIntervalli6" "varIntervalli7"
## [328] "varIntervalliA" "varIntervalliB" "varIntervalliC"
## [331] "varNominale1" "varNominale2" "varNominale3"
## [334] "varNominale4" "vero" "vettore_logico1"
## [337] "vettore1" "vettore2" "vettore3"
## [340] "vettore4" "vFiltro" "vinceA"
## [343] "vinceB" "wilcoxon" "wilTest_1"
## [346] "x" "x1" "x2"
## [349] "x3" "x4" "xcoeff"
## [352] "xcoeffs" "xrange" "xx"
## [355] "y" "y1" "y2"
## [358] "y3" "y4" "ycoeff"
## [361] "ycoeffs" "yy" "zonaA"
## [364] "zonaB" "zonaC" "zone"
La funzione rm()
rimuove un oggetto. Ad esempio, con il comando rm(variabile1)
l'oggetto variabile1 sarà cancellato, e non più disponibile.
Operazioni booleane
Le operazioni booleane sono finalizzate a confrontare due elementi. L'output di queste operazioni è di tipo booleano.
Attenzione: per valutare l'uguaglianza fra due elementi si usa ==
quattro <- 4
cinque <- 5
# la variabile quattro è uguale a 4?
quattro == 4
## [1] TRUE
cinque == 4
## [1] FALSE
# quattro è minore di cinque?
quattro < cinque
## [1] TRUE
# quattro è minore o uguale a 4?
quattro <= 4
## [1] TRUE
quattro < 4
## [1] FALSE
# quattro è diverso da cinque?
quattro != cinque
## [1] TRUE
giusto = TRUE
sbagliato = FALSE
# TRUE or FALSE = TRUE
giusto | sbagliato
## [1] TRUE
# TRUE and FALSE = FALSE
giusto & sbagliato
## [1] FALSE
# vero o falso = vero
(5>4) | (4>5)
## [1] TRUE
# vero e falso = falso
(5>4)&(4>5)
## [1] FALSE
(6<7)&(7<8)
## [1] TRUE
# ! significa not.
!TRUE
## [1] FALSE
!FALSE
## [1] TRUE
!sbagliato
## [1] TRUE
sbagliato & (quattro==4)
## [1] FALSE
Riferimenti
Guide di stile
Nello scrivere del codice, è opportuno seguire delle guide di stile. Questo garantisce una maggiore consistenza e codice più elegante.
Uno degli aspetti più importanti e meno banali è dare dei nomi appropriati alle variabili. Appropriati significa comprensibili ma non troppo lunghi.
Per separare le parole in un nome composto, Hadley Wickham suggerisce di usare l'underscore _
. Ad esempio nome_variabile
. Personalmente, però, non disdegno di utilizzare a volte il camelCase: nomeVariabile
(peraltro suggerito nelle linee guida di Google).
Per approfondire, si consigliano queste risorse:
Help
Sebbene sia utile conoscere a memoria le funzioni più importanti, è assolutamente normale non ricordare tutte le funzioni, tutti i parametri.
Dalla sezione documenti del sito di R si possono scaricare delle R Reference Card, ovvero delle raccolte, con breve spiegazioni, delle funzioni più importanti. Strumenti come gli cheatsheets di RStudio sono estremamente utili per avere un riferimento veloce di una serie di argomenti.
È opportuno imparare ad usare gli aiuti che l'ambiente R ci offre.
- help(nome) help sulla funzione `nome'
- ?nome equivale a help(nome)
- apropos("nome") elenca le funzioni che contengono ``nome''
- example(funzione) mostra degli esempi dell'uso della funzione
- RSiteSearch("kmeans") cerca informazioni relative alla funzione ``kmeans'' su internet.
Risorse
- The Very Basics | Hands-On Programming with R
- Tutorials for learning R | R-bloggers
- R-intro.pdf
- https://psyr.org/getting-started.html
- Learning - Efficient R programming
Lo spazio di lavoro
Quando creiamo una variabile, o una funzione, tecnicamente dove la creiamo? Tecnicamente, nello spazio di lavoro (workspace).
- Quick-R: The Workspace
- Working in the Console – RStudio Support
- Using Projects – RStudio Support
- R basics, workspace and working directory, RStudio projects
- Quick-R: The Workspace