List of 4
$ : chr "ciao!"
$ : int [1:3] 1 2 3
$ : logi [1:2] TRUE FALSE
$ :List of 3
..$ : chr "ciao!"
..$ : int [1:3] 1 2 3
..$ : logi [1:2] TRUE FALSE
vettori
fattori
liste
matrici
array
dataframe
Le liste sono strutture flessibili che possono contenere oggetti di tipo differente e di differenti dimensioni (ogni elemento può essere a sua volta una lista), e si creano attraverso il comando list()
La lista pur essendo unidimensionale, si sviluppa in profondità
Primo Livello: lista
Secondo Livello: vettore numerico
Terzo Livello: numero intero
E’ possibile assegnare dei nomi agli elementi della lista…
ed accerdervi chiamandoli per “nome” attraverso l’operatore $
Come per i vettori anche le liste hanno una lunghezza (lenght()) ed eventualmente dei nomi (names()).
La differenza tra le parentesi quadre riguarda il fatto se vogliamo fare un subset della lista ottenendo un’altra lista oppure se vogliamo accedere direttamente all’elemento interno:
Se vogliamo fare un vero e proprio subset della lista) dobbiamo sempre usare le parentesi quadre singole:
Le liste hanno una struttura unidimensionale ma che si può sviluppare in profondità. Per selezionare elementi nested si possono concatenare più parentesi:
Sono flessibili, permettono di conservare/organizzare dati/informazioni complesse e varie. Per esempio la funzione lm() fornisce in output una lista contentente varie informazioni e risultati sul modello testato.
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-2.0898 -0.9203 0.0777 0.7198 2.3279
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.05828 0.20886 -0.279 0.782
x 0.01256 0.20756 0.061 0.952
Residual standard error: 1.144 on 28 degrees of freedom
Multiple R-squared: 0.0001308, Adjusted R-squared: -0.03558
F-statistic: 0.003663 on 1 and 28 DF, p-value: 0.9522
List of 12
$ coefficients : Named num [1:2] -0.0583 0.0126
..- attr(*, "names")= chr [1:2] "(Intercept)" "x"
$ residuals : Named num [1:30] -0.19 -0.297 0.716 -1.393 1.582 ...
..- attr(*, "names")= chr [1:30] "1" "2" "3" "4" ...
$ effects : Named num [1:30] 0.3196 0.0692 0.7385 -1.3761 1.5485 ...
..- attr(*, "names")= chr [1:30] "(Intercept)" "x" "" "" ...
$ rank : int 2
$ fitted.values: Named num [1:30] -0.0619 -0.0685 -0.0568 -0.0552 -0.0403 ...
..- attr(*, "names")= chr [1:30] "1" "2" "3" "4" ...
$ assign : int [1:2] 0 1
$ qr :List of 5
..$ qr : num [1:30, 1:2] -5.477 0.183 0.183 0.183 0.183 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:30] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:2] "(Intercept)" "x"
.. ..- attr(*, "assign")= int [1:2] 0 1
..$ qraux: num [1:2] 1.18 1.14
..$ pivot: int [1:2] 1 2
..$ tol : num 1e-07
..$ rank : int 2
..- attr(*, "class")= chr "qr"
$ df.residual : int 28
$ xlevels : Named list()
$ call : language lm(formula = y ~ x)
$ terms :Classes 'terms', 'formula' language y ~ x
.. ..- attr(*, "variables")= language list(y, x)
.. ..- attr(*, "factors")= int [1:2, 1] 0 1
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:2] "y" "x"
.. .. .. ..$ : chr "x"
.. ..- attr(*, "term.labels")= chr "x"
.. ..- attr(*, "order")= int 1
.. ..- attr(*, "intercept")= int 1
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(y, x)
.. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
.. .. ..- attr(*, "names")= chr [1:2] "y" "x"
$ model :'data.frame': 30 obs. of 2 variables:
..$ y: num [1:30] -0.252 -0.366 0.659 -1.448 1.542 ...
..$ x: num [1:30] -0.286 -0.812 0.116 0.244 1.43 ...
..- attr(*, "terms")=Classes 'terms', 'formula' language y ~ x
.. .. ..- attr(*, "variables")= language list(y, x)
.. .. ..- attr(*, "factors")= int [1:2, 1] 0 1
.. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. ..$ : chr [1:2] "y" "x"
.. .. .. .. ..$ : chr "x"
.. .. ..- attr(*, "term.labels")= chr "x"
.. .. ..- attr(*, "order")= int 1
.. .. ..- attr(*, "intercept")= int 1
.. .. ..- attr(*, "response")= int 1
.. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. .. ..- attr(*, "predvars")= language list(y, x)
.. .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
.. .. .. ..- attr(*, "names")= chr [1:2] "y" "x"
- attr(*, "class")= chr "lm"
vettori
fattori
liste
matrici
array
dataframe
Le matrici sono una struttura dati bidimensionale (caratterizzate da 2 dimensioni dim() ) dove il numero di righe rappresenta la dimensione 1 e il numero di colonne la dimensione 2.
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
Possono contenere una sola tipologia di dati
Essendo bidimensionali, abbiamo bisogno di due indici di posizione (righe e colonne) per identificare un elemento
Possono essere viste come un insieme di singoli vettori
Il numero di righe e colonne non deve essere lo stesso necessariamente (matrice quadrata) ma il numero di righe deve essere compatibile con il vettore data:
Cosa fa R di default?
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
[,1] [,2] [,3]
[1,] 1 2 1
[2,] 2 1 2
[3,] 1 2 1
warnings: la funzione ci informa di qualcosa di potenzialmente problematico, ma (circa!!) tutto liscio
Per identificare uno o più elementi nella matrice abbiamo bisogno di indici/e di riga e/o colonna separati da virgola, sempre con le parentesi quadre: matrice[riga, colonna]
E’ possibile anche selezionare un’intera riga o colonna
Come per i vettori, anche in questo caso possiamo applicare l’indicizzazione logica:
I vettori si creano attraverso la funzione c() e possono essere concatenati tra loro sempre attraverso la stessa funzione:
Le matrici possono essere unite tra loro attraverso i comandi
cbind()
rowbind()
Cosa notate di “strano”?
Come per i vettori, anche alle matrici si possono applicare operazioni matematiche:
vettori
fattori
liste
matrici
array
dataframe
Gli array sono degli oggetti n-dimensionali (es., se la matrice è un quadrato un array è un cubo). Valgono le stesse proprietà della matrice scalate alle n dimensioni, si creano con il comando array
L’indicizzazione avviene allo stesso modo delle matrici aggiungendo una dimensione
Aprite e tenete aperto questo link:
https://etherpad.wikimedia.org/p/arca-corsoR