Iniziamo!

Matilde Trevisani

2025-02-25

R e RStudio

Per controllare di non avere una versione datata di R usa il comando sessionInfo().

Concetti e terminologia base per la programmazione in R

Workspace

R è object-oriented, nel senso che possiamo creare entità chiamate objects. Questi possono essere di diverso tipo, come singoli valori, vettori, matrici, funzioni o strutture ancora più complesse, come liste e dataframe.

a <- 2
b <- 1:10

Questi oggetti vengono memorizzati in un’area dedicata, chiamata workspace. È possibile controllare gli oggetti attualmente presenti nell’area di lavoro dalla scheda Environment nella finestra in alto a destra o utilizzando il comando ls()

ls()
## [1] "a" "b"

La funzione rm() può essere utilizzata per eliminare uno (o più) oggetti dal workspace

rm(a)

Da questo momento, l’oggetto "a" non sarà più nell’area di lavoro.
Un comando utile per pulire completamente il workspace è

rm(list=ls())

Alternativamente, si può usare anche Clear Workspace dalla scheda Session.

Al termine di una sessione può essere utile salvare lo spazio di lavoro con la funzione save.image(), indicando come argomento il nome scelto:

save.image(file="myobjects.RData")

Questa funzione salva tutti gli oggetti nell’area di lavoro corrente nel file “myobjects.RData”. L’area di lavoro salvata può essere caricata in una nuova sessione con il comando load()

load("myobjects.RData")

Il menu in RStudio ha voci specifiche per il salvataggio/caricamento dell’area di lavoro (si vedano le entrate opportune della scheda Session).

Working directory

Quando si avvia una nuova sessione l’utente può impostare la working directory, utilizzando il comando setwd(). In generale è consigliabile utilizzare cartelle dedicate ai diversi progetti, al fine di evitare possibili sovrapposizioni di dati. La cartella di lavoro corrente può essere vista con il comando getwd().

getwd()
## [1] "C:/Users/39349/Documents/teaching_2024/ADPI/lab/basics"

Il menu in RStudio ha voci specifiche per cambiare la cartella di lavoro. Ad esempio, l’utente può sceglierla usando dal menu Session -> Set Working directory.

Packages

R viene fornito con alcuni pacchetti standard che contengono la maggior parte delle funzioni utili a eseguire i comandi di base. Per analisi più complesse potrebbero essere necessari pacchetti di R aggiuntivi che devono essere installati e caricati utilizzando il menu Packages in RStudio o dalla riga di comando. Ad esempio, consideriamo il pacchetto ggplot2, per installarlo sul computer si digiti

install.packages("ggplot2")

mentre per caricarlo usiamo la funzione library()

library(ggplot2)

Molti pacchetti sono forniti con una “vignetta” o un tutorial su come utilizzare il pacchetto.

Per ottenere un elenco di tutte le vignette di un pacchetto, utilizza la funzione vignette(), specificando il nome del pacchetto con l’opzione package:

vignette(package = "ggplot2")

Per aprire una vignetta è possibile utilizzare anche la funzione vignette(). Ad esempio, per aprire la vignetta chiamata “extending-ggplot2” per il pacchetto ggplot2, esegui:

vignette("extending-ggplot2", package = "ggplot2")

Help

R dispone di un Help molto ben organizzato. Il modo più semplice per ottenere assistenza in RStudio è usare la scheda Help sulla barra degli strumenti.
Se conosci il nome della funzione1 per la quale desideri un aiuto, devi semplicemente chiamare la routine help() nel seguente modo:

help(nome_funzione)

Quindi, se si vuole conoscere la funzione read.table basta digitare

help(read.table)
# o
?read.table

Se non conosci il nome esatto di una funzione, puoi intraprendere una ricerca inserendo una parola chiave digitando:

help.search("read")

Con il comando

help.start()

l’help online si attiva nel web browser.

Basi del linguaggio

Impariamo a conoscere un po’ di terminologia base:

  • Objects: impareremo come si assegnano valori a oggetti (nominati) e come si mostra il valore degli oggetti (nominati)
  • Tipi di dati: integer, double/numeric, logical, e character
  • Strutture di dati: vector, factor, list, dataframe
  • Conditionals o operazioni logiche: T/F, operatori logici
  • Funzioni o comandi: le funzioni effettuano un compito in R. Prendono in input i cosiddetti arguments e restituiscono outputs. Gli argomenti sono o specificati manualmente o, altrimenti, sono i valori assunti di default dalla funzione.
  • Error, Warning, Message

Tips

  • R è “case-sensitive”, cioè considera maiuscole e minuscole caratteri diversi (e.g., A e a sono oggetti diversi);
  • regole per creare un nome:
    • deve iniziare con una lettera alfabetica;
    • tutte le lettere e i numeri possono essere utilizzati mentre non è possibile utilizzare spazi e simboli di punteggiatura, ad eccezione di underscore (’_‘) e punto (‘.’);
  • consigli per creare i nomi:
    • usa solo lettere minuscole;
    • usa l’underscore come separatore;
    • evita nomi già usati da R
  • i comandi devono essere separati da un punto e virgola (‘;’) oppure da capolinea;
  • i testi dei commenti possono essere aggiunti dopo il simbolo ‘#’, ciò che segue per tutta la riga viene ignorato da R;
  • è possibile richiamare i comandi impartiti in precedenza utilizzando la freccia “su” della tastiera.

Operazioni semplici

I comandi di base consistono in

  • espressioni
  • assegnazioni.

Se il comando è un’espressione, R fornisce il risultato della valutazione dell’espressione, come illustrato negli esempi seguenti.

1+2+3
## [1] 6
2+3*4
## [1] 14
2+(3*4)
## [1] 14
(2 + 3) * 4
## [1] 20
3/2+1
## [1] 2.5
4*3^3
## [1] 108

Si noti l’uso delle parentesi per modificare l’ordine di priorità delle operazioni.

Gli operatori aritmetici in R sono

+ addizione
- sottrazione
* moltiplicazione
/ divisione
^ esponenziazione
x %% y modulo (x mod y)
x %/% y divisione intera

Tutte le funzioni matematiche elementari sono disponibili in R come funzioni base. Alcune sono

sqrt square root
abs absolute value
sin, cos, tan funzioni trigonometriche
asin, acos, atan funzioni trigonometriche inverse
sum, mean, var sum, arithmetic mean, variance
max, min maximun, minimum
exp, log exponential, logarithm

Le espressioni che coinvolgono operatori logici restituiscono un valore logico (VERO o FALSO), come nei seguenti esempi:

2 > 10
## [1] FALSE
2 <= 10
## [1] TRUE
5!=5
## [1] FALSE

Operatori logici per formare e combinare espressioni con risultato booleano

\(<\) less than
\(<=\) less than or equal to
\(>\) greater than
\(>=\) greater than or equal to
\(==\) exactly equal to
!\(=\) not equal to
!x Not x
x | y x OR y
x & y x AND y
%in% belongs to (in the set)

Oppure un altro tipo di dato è quello testuale, e.g. possiamo digitare il testo (tra virgolette "/'):

"Hello"
## [1] "Hello"

Abbiamo visto come R sia in grado di gestire vari tipi di dati: numeri, valori logici (VERO e FALSO) e stringhe di testo.

Un’assegnazione valuta un’espressione e ne salva i risultati in un oggetto dotato di nome. L’operatore di assegnazione standard in R è <- (il simbolo = viene talvolta utilizzato, ma non funziona in alcune situazioni speciali).

## Note: Generic code
[name of object] <- [thing I want to save]

RStudio’s keyboard shortcut for the gets arrow <- is Alt + - on Windows and Option + - on Macs.
To see a full list of RStudio keyboard shortcuts, go to the “Help” tab in RStudio and select “Keyboard Shortcuts”.

Gli oggetti creati tramite un’assegnazione possono essere riutilizzati in espressioni o altre assegnazioni. Ad esempio, il codice seguente creerà un oggetto di nome x con valore \(\sqrt{2}\):

x <- sqrt(2)

Per vedere il valore, basta semplicemente scrivere il nome dell’oggetto. Questo stamperà il valore dell’oggetto nella console:

x # Print the object x
## [1] 1.414214

Oppure, per stamparlo al momento della creazione basta racchiudere il comando tra parentesi tonde:

(x <- sqrt(2))
## [1] 1.414214

È anche possibile fare un’assegnazione (da sinistra a destra) utilizzando il simbolo \(\rightarrow\).

Il contenuto che assegniamo ad un oggetto può essere un valore numerico, un valore logico, un carattere o stringa (scritta tra virgolette), il nome di un’altra variabile, il risultato di un’espressione o l’output di una funzione.

x^3 -> y
y
## [1] 2.828427
z <- log(y)+x
z
## [1] 2.453934
word <- "Hello"
n <- nchar(word)

Esercizio

  1. Utilizzare la funzione log() per calcolare il log in base 3 di 9.
  2. Calcola il quoziente intero e il resto di 119 diviso per 13.
  3. Verifica che 7 + 3 - 5 x 2 e (7 + 3) - (5 x 2) sono equivalenti.
  4. Utilizzare un’opportuna operazione logica per scoprire se 574 è un multiplo di 7.
  5. Creare una costante scalare x con valore 5.0359. Quindi, utilizzare la funzione ceiling() su x. Cosa ottieni? In che modo l’output differisce da floor(x)?
  6. Utilizzare la funzione round() per controllare il numero di cifre decimali in x = 5.0359 (Suggerimento: provare a utilizzare l’help.)

  1. Alcuni nomi di funzioni richiedono di essere scritti tra virgolette (o apici) come, e.g., if, else, for, in, repeat, while, break and next.↩︎