1 Introduzione

In R ci sono centinaia di funzioni. Senza contare quelle integrabili installando pacchetti esterni. Di base ci sono funzioni per creare e manipolare e testare oggetti. Funzioni per computare modelli statistici, calcolare indici e produrre grafici. In questa sezione però volevo segnalare le principali funzioni in R utili anche per programmare, scrivere funzini personalizzate e gestire i dati in R. Non verranno approfondite funzioni statistiche e per la rappresentazione grafica.

2 Oggetti

Abbiamo già visto come creare i principali oggetti in R slides 3 - Strutture dati. Tuttavia ci sono altre funzioni estremamente utili:

2.1 is.* family

La is.* family permette di chiedere, aspettandosi una risposta si o no (TRUE/FALSE), ad un oggetto se è associato ad una particolare tipologia.

x <- 1:10
is.numeric(x)
## [1] TRUE
is.vector(x)
## [1] TRUE
is.matrix(x)
## [1] FALSE
is.character(x)
## [1] FALSE

2.2 as.* family

La as.* family non si limita solo a chiedere ma è leggermente più aggressiva e cerca di convertire la tipologia di oggetto. Dico cerca perchè non tutto è direttamente convertibile:

x <- 1:10
as.character(x)
##  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
as.factor(x)
##  [1] 1  2  3  4  5  6  7  8  9  10
## Levels: 1 2 3 4 5 6 7 8 9 10
y <- letters[1:10]
as.numeric(y)
## Warning: NAs introduced by coercion
##  [1] NA NA NA NA NA NA NA NA NA NA

2.3 Proprietà

  • class(): fornisce la classe dell’oggetto
  • attributes(): restituisce gli attributi
  • length(): restituisce la lunghezza (se rilevante) di un oggetto
  • dim(): fornisce le dimensioni di un oggetto. Simile a length() ma pensato per più di una dimensione
  • nrow()/ncol(): il numero di righe e colonne (se rilevante)
  • names(): fornisce i nomi (se impostati) assegnati ad un oggetto. Cambia se vettore o un dataframe
  • colnames(): i nomi delle colonne di un dataframe. Equivalente a names() se usato con un dataframe

2.4 Combinare oggetti

  • c(): unisce e crea vettori. Funziona anche su fattori e liste ma attenzione al risultato
  • cbind()/rbind(): combina matrici e dataframe rispettivamente per colonna e riga
  • append(): similar to c() to append one or more element to a vector

2.5 Operazioni logiche

Oltre alla is.* family ci sono anche altre funzioni utili per lavorare in modo logico.

  • any(): restituisce TRUE se almeno un valore in un vettore logico è TRUE
  • all(): restituisce TRUE se tutti i valori in un vettore logico sono TRUE
  • which(): converte una rappresentazione logica in una rappresentazione intera
x <- 1:10
x
##  [1]  1  2  3  4  5  6  7  8  9 10
x < 5 # rappresentazione logica
##  [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
which(x < 5) # rappresentazione intera
## [1] 1 2 3 4
  • which.max()/which.min(): restituisce la posizione del valore minimo/massimo all’interno di un vettore
  • all.equal(): restituisce TRUE se due dataframe/matrici sono esattamente uguali

2.6 Subsetting

  • subset(): seleziona righe da un dataframe in base ad una condizione. Simile a fare data[operazione, ]
  • complete.cases(): seleziona solo le righe che non hanno NA. Equivalente a valutare any(is.na(riga))

2.7 Operazioni

  • colSums()/rowSums(): rispettivamente calcolano la somma di tutti gli elementi per colonna/riga. E’ assolutamente analogo a fare apply(data, 2, sum) e apply(data, 1, sum)
  • colMeans()/rowMeans(): lo stesso approccio delle precedenti ma calcolano la media
LS0tCnRpdGxlOiAiTGUgZnVuemlvbmkgVE9QIGluIFIiCm91dHB1dDogCiAgICBib29rZG93bjo6aHRtbF9kb2N1bWVudDI6CiAgICAgICAgdG9jOiB0cnVlCiAgICAgICAgdG9jX2Zsb2F0OiB0cnVlCiAgICAgICAgY29kZV9kb3dubG9hZDogdHJ1ZQpjc3M6IFsiLi4vZmlsZXMvY3NzL2NvdXJzZV9odG1sLmNzcyJdCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgojIEludHJvZHV6aW9uZQoKSW4gUiBjaSBzb25vIGNlbnRpbmFpYSBkaSBmdW56aW9uaS4gU2VuemEgY29udGFyZSBxdWVsbGUgaW50ZWdyYWJpbGkgaW5zdGFsbGFuZG8gcGFjY2hldHRpIGVzdGVybmkuIERpIGJhc2UgY2kgc29ubyBmdW56aW9uaSBwZXIgY3JlYXJlIGUgbWFuaXBvbGFyZSBlIHRlc3RhcmUgb2dnZXR0aS4gRnVuemlvbmkgcGVyIGNvbXB1dGFyZSBtb2RlbGxpIHN0YXRpc3RpY2ksIGNhbGNvbGFyZSBpbmRpY2kgZSBwcm9kdXJyZSBncmFmaWNpLiBJbiBxdWVzdGEgc2V6aW9uZSBwZXLDsiB2b2xldm8gc2VnbmFsYXJlIGxlIHByaW5jaXBhbGkgZnVuemlvbmkgaW4gUiB1dGlsaSBhbmNoZSBwZXIgKipwcm9ncmFtbWFyZSoqLCAqKnNjcml2ZXJlIGZ1bnppbmkgcGVyc29uYWxpenphdGUqKiBlIGdlc3RpcmUgaSBkYXRpIGluIFIuIE5vbiB2ZXJyYW5ubyBhcHByb2ZvbmRpdGUgZnVuemlvbmkgc3RhdGlzdGljaGUgZSBwZXIgbGEgcmFwcHJlc2VudGF6aW9uZSBncmFmaWNhLgoKIyBPZ2dldHRpCgpBYmJpYW1vIGdpw6AgdmlzdG8gY29tZSBjcmVhcmUgaSBwcmluY2lwYWxpIG9nZ2V0dGkgaW4gUiBbc2xpZGVzIDMgLSBTdHJ1dHR1cmUgZGF0aV0oLi4vc2xpZGVzLzNfZGF0YV9zdHJ1Y3R1cmVzLzNfZGF0YV9zdHJ1Y3R1cmVzLmh0bWwpLiBUdXR0YXZpYSBjaSBzb25vIGFsdHJlIGZ1bnppb25pIGVzdHJlbWFtZW50ZSB1dGlsaToKCiMjIGBpcy4qYCBmYW1pbHkKCkxhIGBpcy4qYCBmYW1pbHkgcGVybWV0dGUgZGkgY2hpZWRlcmUsIGFzcGV0dGFuZG9zaSB1bmEgcmlzcG9zdGEgc2kgbyBubyAoYFRSVUVgL2BGQUxTRWApLCBhZCB1biBvZ2dldHRvIHNlIMOoIGFzc29jaWF0byBhZCB1bmEgcGFydGljb2xhcmUgdGlwb2xvZ2lhLgoKYGBge3J9CnggPC0gMToxMAppcy5udW1lcmljKHgpCmlzLnZlY3Rvcih4KQppcy5tYXRyaXgoeCkKaXMuY2hhcmFjdGVyKHgpCmBgYAoKIyMgYGFzLipgIGZhbWlseQoKTGEgYGFzLipgIGZhbWlseSBub24gc2kgbGltaXRhIHNvbG8gYSBjaGllZGVyZSBtYSDDqCBsZWdnZXJtZW50ZSBwacO5ICphZ2dyZXNzaXZhKiBlIGNlcmNhIGRpIGNvbnZlcnRpcmUgbGEgdGlwb2xvZ2lhIGRpIG9nZ2V0dG8uIERpY28gY2VyY2EgcGVyY2jDqCBub24gdHV0dG8gw6ggZGlyZXR0YW1lbnRlIGNvbnZlcnRpYmlsZToKCmBgYHtyfQp4IDwtIDE6MTAKYXMuY2hhcmFjdGVyKHgpCmFzLmZhY3Rvcih4KQoKeSA8LSBsZXR0ZXJzWzE6MTBdCmFzLm51bWVyaWMoeSkKYGBgCgojIyBQcm9wcmlldMOgCgotIGBjbGFzcygpYDogZm9ybmlzY2UgbGEgY2xhc3NlIGRlbGwnb2dnZXR0bwotIGBhdHRyaWJ1dGVzKClgOiByZXN0aXR1aXNjZSBnbGkgYXR0cmlidXRpCi0gYGxlbmd0aCgpYDogcmVzdGl0dWlzY2UgbGEgbHVuZ2hlenphIChzZSByaWxldmFudGUpIGRpIHVuIG9nZ2V0dG8KLSBgZGltKClgOiBmb3JuaXNjZSBsZSBkaW1lbnNpb25pIGRpIHVuIG9nZ2V0dG8uIFNpbWlsZSBhIGBsZW5ndGgoKWAgbWEgcGVuc2F0byBwZXIgcGnDuSBkaSB1bmEgZGltZW5zaW9uZQotIGBucm93KClgL2BuY29sKClgOiBpbCBudW1lcm8gZGkgcmlnaGUgZSBjb2xvbm5lIChzZSByaWxldmFudGUpCi0gYG5hbWVzKClgOiBmb3JuaXNjZSBpIG5vbWkgKHNlIGltcG9zdGF0aSkgYXNzZWduYXRpIGFkIHVuIG9nZ2V0dG8uIENhbWJpYSBzZSB2ZXR0b3JlIG8gdW4gZGF0YWZyYW1lCi0gYGNvbG5hbWVzKClgOiBpIG5vbWkgZGVsbGUgY29sb25uZSBkaSB1biBkYXRhZnJhbWUuIEVxdWl2YWxlbnRlIGEgYG5hbWVzKClgIHNlIHVzYXRvIGNvbiB1biBkYXRhZnJhbWUKCiMjIENvbWJpbmFyZSBvZ2dldHRpCgotIGBjKClgOiB1bmlzY2UgZSBjcmVhIHZldHRvcmkuIEZ1bnppb25hIGFuY2hlIHN1IGZhdHRvcmkgZSBsaXN0ZSBtYSBhdHRlbnppb25lIGFsIHJpc3VsdGF0bwotIGBjYmluZCgpYC9gcmJpbmQoKWA6IGNvbWJpbmEgbWF0cmljaSBlIGRhdGFmcmFtZSByaXNwZXR0aXZhbWVudGUgcGVyIGNvbG9ubmEgZSByaWdhCi0gYGFwcGVuZCgpYDogc2ltaWxhciB0byBgYygpYCB0byBhcHBlbmQgb25lIG9yIG1vcmUgZWxlbWVudCB0byBhIHZlY3RvcgoKIyMgT3BlcmF6aW9uaSBsb2dpY2hlCgpPbHRyZSBhbGxhIGBpcy4qYCBmYW1pbHkgY2kgc29ubyBhbmNoZSBhbHRyZSBmdW56aW9uaSB1dGlsaSBwZXIgbGF2b3JhcmUgaW4gbW9kbyAqKmxvZ2ljbyoqLgoKLSBgYW55KClgOiByZXN0aXR1aXNjZSBgVFJVRWAgc2UgYWxtZW5vIHVuIHZhbG9yZSBpbiB1biB2ZXR0b3JlIGxvZ2ljbyDDqCBgVFJVRWAKLSBgYWxsKClgOiByZXN0aXR1aXNjZSBgVFJVRWAgc2UgdHV0dGkgaSB2YWxvcmkgaW4gdW4gdmV0dG9yZSBsb2dpY28gc29ubyBgVFJVRWAKLSBgd2hpY2goKWA6IGNvbnZlcnRlIHVuYSByYXBwcmVzZW50YXppb25lIGxvZ2ljYSBpbiB1bmEgcmFwcHJlc2VudGF6aW9uZSBpbnRlcmEKCmBgYHtyfQp4IDwtIDE6MTAKeAoKeCA8IDUgIyByYXBwcmVzZW50YXppb25lIGxvZ2ljYQp3aGljaCh4IDwgNSkgIyByYXBwcmVzZW50YXppb25lIGludGVyYQpgYGAKCi0gYHdoaWNoLm1heCgpYC9gd2hpY2gubWluKClgOiByZXN0aXR1aXNjZSBsYSBwb3NpemlvbmUgZGVsIHZhbG9yZSBtaW5pbW8vbWFzc2ltbyBhbGwnaW50ZXJubyBkaSB1biB2ZXR0b3JlCi0gYGFsbC5lcXVhbCgpYDogcmVzdGl0dWlzY2UgYFRSVUVgIHNlIGR1ZSBkYXRhZnJhbWUvbWF0cmljaSBzb25vIGVzYXR0YW1lbnRlIHVndWFsaSAgCgojIyBTdWJzZXR0aW5nCgotIGBzdWJzZXQoKWA6IHNlbGV6aW9uYSByaWdoZSBkYSB1biBkYXRhZnJhbWUgaW4gYmFzZSBhZCB1bmEgY29uZGl6aW9uZS4gU2ltaWxlIGEgZmFyZSBgZGF0YVtvcGVyYXppb25lLCBdYAotIGBjb21wbGV0ZS5jYXNlcygpYDogc2VsZXppb25hIHNvbG8gbGUgcmlnaGUgY2hlIG5vbiBoYW5ubyBgTkFgLiBFcXVpdmFsZW50ZSBhIHZhbHV0YXJlIGBhbnkoaXMubmEocmlnYSkpYAoKIyMgT3BlcmF6aW9uaQoKLSBgY29sU3VtcygpL3Jvd1N1bXMoKWA6IHJpc3BldHRpdmFtZW50ZSBjYWxjb2xhbm8gbGEgc29tbWEgZGkgdHV0dGkgZ2xpIGVsZW1lbnRpIHBlciBjb2xvbm5hL3JpZ2EuIEUnIGFzc29sdXRhbWVudGUgYW5hbG9nbyBhIGZhcmUgYGFwcGx5KGRhdGEsIDIsIHN1bSlgIGUgYGFwcGx5KGRhdGEsIDEsIHN1bSlgCi0gYGNvbE1lYW5zKCkvcm93TWVhbnMoKWA6IGxvIHN0ZXNzbyBhcHByb2NjaW8gZGVsbGUgcHJlY2VkZW50aSBtYSBjYWxjb2xhbm8gbGEgbWVkaWE=