R - Fondamenti di R
R
Fondamenti di R
Le operazioni fondamentali
- R può essere utilizzato per eseguire le classiche operazioni aritmetiche: addizione, sottrazione, moltiplicazione, divisione, elevazione a potenza, resto della divisione e divisione intera.
# Addizione.
12 + 34
[1] 46
# Sottrazione.
78 - 56
[1] 22
# Moltiplicazione.
11 * 22
[1] 242
# Divisione.
1234 / 123
[1] 10.03252
# Elevazione a potenza.
5^5
[1] 3125
# Resto.
12 %% 5
[1] 2
# Divisione intera.
123 %/% 12
[1] 10
Altre operazioni
- Negli esempi seguenti si utilizza il Pi grego, la radice quadrata, il valore assoluto, i logaritmi, gli esponenziali e il fattoriale.
# P greco.
pi
[1] 3.141593
# Radice quadrata.
sqrt(2)
[1] 1.414214
# Valore assoluto.
abs(-3)
[1] 3
# Logaritmo naturale.
log(10)
[1] 2.302585
# Logaritmi in base 2 e 10.
log2(10)
[1] 3.321928
log10(10)
[1] 1
# Logaritmo in qualsiasi base.
log(4, base=4)
[1] 1
# Esponenziale.
exp(2)
[1] 7.389056
# Fattoriale.
factorial(5)
[1] 120
Arrotondamenti
- È possibile arrotondare i numeri all'intero superiore o inferiore, troncare i numeri, arrotondarli con un certo numero di cifre decimali o con un certo numero di cifre significative.
# Intero superiore.
ceiling(3.1)
[1] 4
ceiling(-3.1)
[1] -3
# Intero inferiore.
floor(3.9)
[1] 3
floor(-3.9)
[1] -4
# Tronca al valore intero.
trunc(3.9)
[1] 3
trunc(-3.9)
[1] -3
# Arrotonda con un determinato numero di cifre decimali.
round(456.34567, 3)
[1] 456.346
round(456.34567, 2)
[1] 456.35
round(456.34567, 1)
[1] 456.3
round(456.34567, 0)
[1] 456
round(456.34567, -1)
[1] 460
round(456.34567, -2)
[1] 500
# Arrotonda con un determinato numero di cifre totali.
signif(456.34567, 5)
[1] 456.35
signif(456.34567, 4)
[1] 456.3
signif(456.34567, 3)
[1] 456
signif(456.34567, 2)
[1] 460
signif(456.34567, 1)
[1] 500
signif(456.34567, 0)
[1] 500
signif(456.34567, -1)
[1] 500
Funzioni trigonometriche
- Sono presenti le seguenti funzioni trigonometriche: seno, coseno, tangente e le loro inverse, arcoseno, arcocoseno e arcotangente. Sono anche presenti le funzioni iperboliche e le loro inverse.
sin(pi / 3)
[1] 0.8660254
cos(pi / 3)
[1] 0.5
tan(pi / 3)
[1] 1.732051
asin(sqrt(2) / 2)
[1] 0.7853982
acos(sqrt(2) / 2)
[1] 0.7853982
atan(sqrt(2) / 2)
[1] 0.6154797
sinh(pi / 3)
[1] 1.249367
cosh(pi / 3)
[1] 1.600287
tanh(pi / 3)
[1] 0.7807144
asinh-(2)
[1] 1.443635
acosh(2)
[1] 1.316958
atanh(0.5)
[1] 0.5493061
Funzioni per stringhe
- Sono presenti le seguenti funzioni per il trattamento delle stringhe: lunghezza, conversione in maiuscolo e minuscolo, estrazione di sottostringhe, sostituzione di sottostringhe, ricerca di sottostringhe, suddivisione e concatenazione.
# Lunghezza delle stringhe.
x <- c("Hello", " ", "world!")
print(length(x))
[1] 3
print(nchar(x))
[1] 5 1 6
# Conversione in maiuscolo e minuscolo.
x <- toupper("abcd1234")
print(x)
[1] "ABCD1234"
x <- tolower("ABCD1234")
print(x)
[1] "abcd1234"
# Estrae una sottostringa.
x <- "abcdefgh"
print(x)
[1] "abcdefgh"
substr(x, start=2, stop=4)
[1] "bcd"
# Rimpiazza una sottostringa. Notare il comportamento della funzione nel caso che la stringa che rimpiazza abbia lunghezza diversa della sottostringa da rimpiazzare.
substr(x, start=2, stop=4) <- "R"
print(x)
[1] "aRcdefgh"
substr(x, start=2, stop=4) <- "REP"
print(x)
[1] "aREPefgh"
substr(x, start=2, stop=4) <- "REPLACE"
print(x)
[1] "aREPefgh"
# Ricerca di una stringa in un vettore di stringhe.
x <- grep("ar", c("Carlo", "Alessandro", "Mario", "Pippo", "Pluto"), fixed = TRUE)
print(x)
[1] 1 3
# Ricerca di una stringa in un vettore di stringhe e sostituzione con un'altra stringa.
x <- sub("ar", "AR", c("Carlo", "Alessandro", "Mario", "Pippo", "Pluto"), fixed = TRUE)
print(x)
[1] "CARlo" "Alessandro" "MARio" "Pippo" "Pluto"
# Split (suddivisione) di una stringa.
# Questa istruzione crea una lista.
x <- strsplit("A;B;C;D;E", ";")
print(x)
[[1]]
[1] "A" "B" "C" "D" "E"
# Dalla lista si può ottenere un vettore con 'unlist'.
x <- unlist(x)
print(x)
[1] "A" "B" "C" "D" "E"
# Concatenazione di più stringhe o vettori. Se non si indica il separatore, viene aggiunto uno spazio.
x <- paste("A", "B", "C")
print(x)
[1] "A B C"
x <- paste0("A", "B", "C")
print(x)
[1] "ABC"
x <- paste("A", "B", "C", sep = "-")
print(x)
[1] "A-B-C"
x <- paste(c("A", "B", "C"), c("1", "2", "3"), sep = "-")
print(x)
[1] "A-1" "B-2" "C-3"
Funzioni logiche
- Sono presenti le classiche funzioni logiche AND (simbolo '&'), OR (simbolo '|') e NOT (Simbolo '!').
# Esempi con AND.
print(TRUE & TRUE)
[1] TRUE
print(TRUE & FALSE)
[1] FALSE
print(FALSE & FALSE)
[1] FALSE
# Esempi con OR.
print(TRUE | TRUE)
[1] TRUE
print(TRUE | FALSE)
[1] TRUE
print(FALSE | FALSE)
[1] FALSE
# Esempi con NOT.
print (!TRUE)
[1] FALSE
print (!FALSE)
[1] TRUE
- Esempi di funzioni logiche sui vettori.
# Dato un vettore.
x <- c(1, 2, 3, 4, 5)
# I risultati sono vettori logici.
print(x < 3)
[1] TRUE TRUE FALSE FALSE FALSE
print(x <= 3)
[1] TRUE TRUE TRUE FALSE FALSE
print(x == 3)
[1] FALSE FALSE TRUE FALSE FALSE
print(x != 3)
[1] TRUE TRUE FALSE TRUE TRUE
print(x > 3)
[1] FALSE FALSE FALSE TRUE TRUE
print(x >= 3)
[1] FALSE FALSE TRUE TRUE TRUE
Generazione numeri random
- La generazione di numeri random è fatta con la funzione sample().
# Random da 1 a 100, tutti i numeri sono diversi.
x <- sample(1:100)
print(x)
[1] 2 80 93 96 22 61 25 32 15 31 76 69 74 6 97 33 47 84 63 99 75 50
[23] 42 4 81 77 59 10 12 65 45 35 88 89 52 70 85 62 92 64 11 39 28 73
[45] 23 36 41 8 83 13 21 14 57 34 95 68 9 40 5 100 46 43 38 67 30 55
[67] 79 87 16 26 3 29 19 94 51 20 78 7 60 49 24 82 48 91 17 98 54 1
[89] 44 53 71 72 58 56 37 66 86 27 90 18
# Random da 1 a 100, in totale 20 elementi.
x <- sample(1:100, size = 20)
print(x)
[1] 19 77 78 54 92 15 47 62 16 17 38 3 49 21 23 9 76 86 63 59
# Random da 1 a 100, in totale 200 elementi, i numeri possono essere presenti più volte.
x <- sample(1:100, size = 200, replace = TRUE)
print(x)
[1] 66 2 61 37 80 94 51 30 68 26 20 66 59 8 26 26 8 73 74 87 16 13
[23] 5 53 59 68 78 50 82 48 20 67 95 82 40 94 78 26 45 23 87 70 78 72
[45] 11 30 54 70 39 70 20 85 33 33 39 48 64 94 64 1 44 54 90 69 4 8
[67] 82 11 90 20 23 82 29 8 7 91 11 22 48 93 46 16 39 44 74 17 15 47
[89] 87 74 46 75 17 83 6 61 28 62 72 12 65 60 20 51 91 17 7 79 26 32
[111] 21 86 36 76 52 48 34 90 27 12 97 14 10 10 27 92 17 27 64 17 34 76
[133] 98 81 31 52 4 50 75 60 95 82 52 61 100 41 17 17 93 84 57 37 81 75
[155] 44 38 93 47 73 9 18 65 12 35 15 98 3 57 49 99 29 66 32 11 85 99
[177] 35 77 57 18 99 37 72 65 30 27 57 98 7 52 95 19 82 96 43 51 32 5
[199] 64 14
# Da un vettore dato, estrae 3 elementi.
x <- sample(c(10, 20, 30, 40, 50), 3)
print(x)
[1] 20 40 10
I valori NA e NaN
- NA = Not Available: è il marker che indica un valore numerico mancante o non disponibile.
- NaN = Not a Number: è il marker che indica un'operazione matematica impossibile, per esempio 0 / 0 oppure Inf - Inf.
- La funzione is.na() restituisce TRUE sia per gli NA che per gli NaN.
- La funzione is.nan() restituisce TRUE per gli NaN e FALSE per gli NA.
x <- c(1, NA, 3, 4, 5, NA, 7, NaN, 9, 10)
print(is.na(x))
[1] FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
print(is.na(x[2]))
[1] TRUE
print(is.na(x[8]))
[1] TRUE
print(is.nan(x))
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
print(is.nan(x[2]))
[1] FALSE
print(is.nan(x[8]))
[1] TRUE
Conversioni
- Convertire un vettore numerico in una stringa.
x <- c(1:5)
print(toString(x))
[1] "1, 2, 3, 4, 5"
- Convertire un vettore numerico in un vettore di stringhe.
x <- c(1:5)
print(as.character(x))
[1] "1" "2" "3" "4" "5"