Vettori (R)

Per creare un vettore in R si può:

  1. definire un intervallo numerico, per esempio
    1:5

    rappresenta un vettore di numeri da 1 a 5

  2. usare c(), con questo comando è possibile creare vettori di oggetti di qualunque tipo. Per esempio,
    c("Marco", "Franco", "Gino")
  3. usare seq(). il vantaggio è che è possibile determinare l'intervallo tra i numeri. Per esempio,
    seq(1, 3, 0.1)

    crea un vettore di 30 numeri 1.0, 1.1, 1.2,..., 2.9, 3.0

  4. usare rep(). Rep permette di ripetere tante volte i numeri o i caratteri passati come primo argomento. Per esempio,
    rep(1:3, 4)

    restituisce i numeri da 1 a 3 ripetuti per 4 volte: 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3

Per concatenare dei vettori è possibile usare di nuovo il comando c(). Per esempio

a <- c(1, 2, 3)
b <- c(4, 5, 6)
c(a, b)
[1] 1, 2, 3, 4, 5, 6

Per filtrare il contenuto di un array, è possibile usare una condizione tra parentesi quadre:

c <- c(a, b)
c[c < 3]
[1] 1, 2, 1, 2, 1, 2, 1, 2

Per raggruppare gli elementi di un vettore, è possibile usare cut(). Questo è comodo soprattutto se si vuole rappresentare la densità di numeri reali:

cut(rnorm(1000), breaks = 20)

Questo comando suddivide i 1000 numeri casuali (basati su una distribuzione normale) in 20 blocchi calcolati automaticamente in base al valore minimo e al massimo.
Il numero è sostituito con un'etichetta che indica a quale dei 20 gruppi appartiene.
È usato spesso con table(), che restituisce un doppio vettore (un vettore di dimensione 2x20, in questo caso) con le etichette e il conteggio degli elementi.

plot(table(cut(rnorm(1000), breaks = 20)), type="s")

Per creare una matrice è possibile usare il comando matrix(), a cui vanno passati un vettore e il numero di righe e di colonne. Se gli elementi sono passati in ordine di lettura, è possibile specificare l'opzione byrow = TRUE.

matrix(c(-5:5, dnorm(-5:5)), 2, 11, byrow = TRUE)

Questo comando crea una matrice 2x11 con i numeri interi da -5 a +5 e i corrispondenti valori di una distribuzione normale standard.

Lo stesso risultato si poteva ottenere con rbind(), che prende due vettori della stessa dimensione - pena un alert - e ne fa un vettore bidimensionale.

rbind(-5:5, dnorm(-5:5))

Se avessi desiderato una matrice con due colonne e 11 righe, avrei dovuto usare

matrix(c(-5:5, dnorm(-5:5)), 11, 2)

oppure

cbind(-5:5, dnorm(-5:5))

cbind al posto di rbind