3 Lab 1 - 16/10/2020
Per programmare andremo a scrivere il codice in un file di testo detto script. Per aprire un nuovo script, usare il Menu di RStudio: File - New File - R Script. Il file può essere salvato con File - Save as (l’estensione del file è .R).
Per eseguire del codice dallo script è necessario posizionarsi sulla linea da lanciare e premere ctrl+invio, in caso di utente Windows, o cmd+invio, in caso di utente Mac (è possibile anche eseguire insieme più righe di codice selezionandole e digitando ctrl/cmd+invio). Nello script è possibile inserire dei commenti (non eseguiti da R) utilizzando all’inizio della riga il simbolo di cancelletto #
.
3.1 Funzioni built-in
In R esistono funzioni built-in, ovvero già disponibili (per esempio le funzioni log
, sqrt
, mean
, max
, min
, …). E’ inoltre possibile scrivere delle proprie funzioni (user-defined functions).
Prima di utilizzare una funzione è sempre opportuno visualizzare la sua pagina di help (tramite ?nomedellafunzione
) in modo da capire quali siano i suoi argomenti e gli eventuali settaggi di default.
Per eseguire una qualsiasi funzione ed ottenere il relativo risultato è necessario digitare il suo nome specificando fra parentesi tonde l’argomento (o gli argomenti) che rappresentare gli input della funzione.
Per esempio, per calcolare il logaritmo di un numero si utilizza la funzione log
. Visualizzando l’help della funzione lanciando
si nota che la funzione è caratterizzata da due argomenti: x
(numero/vettore di cui si vuole calcolare il logaritmo) e base
(base del logaritmo, di default viene calcolato il logaritmo naturale).
E’ possibile utilizzare la funzione come segue:
## [1] 2
## [1] 1.386294
E’ possibile anche omettere i nomi degli argomenti. In questo caso però è necessario fare attenzione all’ordine in cui vengono passati gli input alla funzione (vale l’ordine definito nell’help della funzione).
## [1] 2
## [1] 0.5
3.2 Vettori
Un vettore di numeri viene creato utilizzando la funzione c
(concatenate). Ad esempio, il seguente codice crea un vettore di 4 numeri. Il vettore viene salvato in un nuovo oggetto di nome x
(l’assegnazione del vettore al nuovo oggetto viene effettuata usando il segno di uguale =
)
la cui lunghezza è data da
## [1] 4
E’ possibile eseguire operazioni con vettori. Ad esempio, il codice
crea un nuovo vettore denominato y
i cui elementi sono dati dagli elementi di x
aumentati di 2. Si noti che R esegue le operazioni (in questo caso la somma) elemento per elemento. Per visualizzare i valori di y
lanciare semplicemente il nome dell’oggetto da visualizzare (attenzione, R è case-sensitive per cui y
è diverso da Y
):
## [1] 5.000000 -2.500000 3.609438 7.550000
Per la selezione di elementi all’interno di un vettore si utilizzano le parentesi quadre. Ad esempio per selezionare il secondo elemento si usa il seguente codice (si noti che all’interno delle parentesi quadre si specifica la posizione del numero da selezionare).
## [1] -2.5
Volendo selezionare più elemento si andrà a definire un vettore di posizioni:
## [1] 5.00 7.55
E’ inoltre possibile selezionare un valore e poi sostituirlo creando una nuova assegnazione con il simbolo di =
:
## [1] 5.000000 4.000000 3.609438 7.550000
E’ possibile anche sintetizzare i valori presenti in un vettore con funzioni tipo la somma (sum
) o la
media (mean
) applicata a y
o a una sua trasformazione:
## [1] 20.15944
## [1] 8.883646
## [1] 5.039859
## [1] 5.039859
## [1] 170.5982
Esistono altre funzioni di sintesi come, ad esempio, median
, min
e max
.
E’ possibile eseguire anche operazioni logiche il cui risultato è TRUE se la condizione è soddisfatta o FALSE altrimenti. Ad esempio il codice
## [1] TRUE FALSE FALSE TRUE
restituisce un vettore di TRUE/FALSE a seconda che il corrispondente valore di y
sia maggiore o uguale a 5. Funzioni di sintesi come la media e la somma possono essere applicati anche a vettori logici. In questo caso ogni TRUE viene conteggiato come uno mentre ogni FALSE come zero:
## [1] 2
## [1] 0.5
## [1] 50
La seguente tabella riporta tutti gli operatori logici disponibili in R.
Operatore R | Descrizione |
---|---|
<= >= | minore/maggiore o uguale |
< > | minore/maggiore |
== | esattamente uguale |
!= | diverso (negazione) |
& | intersezione (e) |
| (barra verticale) |
unione (oppure) |
Utilizzando gli operatori logici è possibile eseguire selezione di elementi e/o sostituzione per condizione. In questo caso non sarà necessario specificare le posizioni degli elementi da selezionare/sostitutire perchè R eseguirà la selezione/sostituzione solamente per quegli elementi che soddisfano la condizione:
## [1] 1000.000000 4.000000 3.609438 7.550000
3.3 Esercizi lab 1
3.3.1 Esercizio 1
- Calcolare \(\exp(3-\frac{4}{5})+\frac{\sqrt{3+2^5}}{4-7\cdot \log(10))}\)
- Creare il vettore
x
contenente i valori \((10, log(0.2), 6/7, exp(4), sqrt(54), -0.124)\):
- Determinare la lunghezza di
x
. - Estrarre il primo e ultimo elemento di
x
(per estrarre l’ultimo elemento usarelength
). - Calcolare il numero e la percentuale di valori di
x
maggiori o uguali a 0. - Calcolare il numero di valori di
x
compresi tra 0 (incluso) e 1 (escluso). Suggerimento: in questo caso ci sono due condizioni,x>=0 & x<1
dove&
è l’operatore AND (intersezione). - Sostituire i valori negativi di
x
con il numero 0. - Estrarre da
x
gli elementi in posizione 2 e 4 e salvarli in un nuovo vettorey
. Calcolarey+sqrt(exp(-0.4))
.
3.3.2 Esercizio 2
- Commentare ogni riga del seguente codice spiegando quale operazione viene eseguita.
- Commentare ogni riga del seguente codice spiegando quale operazione viene eseguita.
3.3.3 Esercizio 3
Utilizzare le seguenti due righe di codice (che verranno poi spiegate nelle prossime lezioni) per simulare \(n=100\) valori dalla distribuzione Normale standardizzata (Normale con media 0 e varianza 1). I valori vengono salvati in un vettore di nome x
.
## [1] -0.560475647 -0.230177489 1.558708314 0.070508391 0.129287735
## [6] 1.715064987 0.460916206 -1.265061235 -0.686852852 -0.445661970
## [11] 1.224081797 0.359813827 0.400771451 0.110682716 -0.555841135
## [16] 1.786913137 0.497850478 -1.966617157 0.701355902 -0.472791408
## [21] -1.067823706 -0.217974915 -1.026004448 -0.728891229 -0.625039268
## [26] -1.686693311 0.837787044 0.153373118 -1.138136937 1.253814921
## [31] 0.426464221 -0.295071483 0.895125661 0.878133488 0.821581082
## [36] 0.688640254 0.553917654 -0.061911711 -0.305962664 -0.380471001
## [41] -0.694706979 -0.207917278 -1.265396352 2.168955965 1.207961998
## [46] -1.123108583 -0.402884835 -0.466655354 0.779965118 -0.083369066
## [51] 0.253318514 -0.028546755 -0.042870457 1.368602284 -0.225770986
## [56] 1.516470604 -1.548752804 0.584613750 0.123854244 0.215941569
## [61] 0.379639483 -0.502323453 -0.333207384 -1.018575383 -1.071791226
## [66] 0.303528641 0.448209779 0.053004227 0.922267468 2.050084686
## [71] -0.491031166 -2.309168876 1.005738524 -0.709200763 -0.688008616
## [76] 1.025571370 -0.284773007 -1.220717712 0.181303480 -0.138891362
## [81] 0.005764186 0.385280401 -0.370660032 0.644376549 -0.220486562
## [86] 0.331781964 1.096839013 0.435181491 -0.325931586 1.148807618
## [91] 0.993503856 0.548396960 0.238731735 -0.627906076 1.360652449
## [96] -0.600259587 2.187332993 1.532610626 -0.235700359 -1.026420900
- Calcolare la lunghezza di
x
. - Calcolare il minimo (
min
), il massimo (max
), la media (mean
), la varianza (var
) e la mediana (median
) dix
. I valori ottenuti sono ragionevoli? - Quanti valori (in valore assoluto e percentuale) di
x
sono positivi? - Quanti valori (in valore assoluto e percentuale) di
x
sono compresi tra -1 e +1 (estremi esclusi)? - Calcolare
x/4-2
e assegnare i nuovi valori a un nuovo vettore denominatoy
. - Pensate che
y
possa essere stato generato da una vc Normale? Di quali parametri?