Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

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"

© 2022 Carlo Vecchio
Torna ai contenuti