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

Lo spazio di lavoro

Quando creiamo una variabile, o una funzione, tecnicamente dove la creiamo? Tecnicamente, nello spazio di lavoro (workspace).

RStudio IDE

PowerPoint Presentation

Cookies

Questo sito utilizza cookies tecnici e di terze parti quali google analytics per funzionalità tecniche e statistiche.

Se non acconsenti all'utilizzo dei cookie di terze parti, alcune di queste funzionalità potrebbero essere non disponibili.