HW 01 - Primi passi in R

Data di consegna: lunedì 30 settembre 2024

Introduzione

In questo compito utilizzerai i comandi utili per:

  • creare oggetti atomici (vettori, matrici ed array) e non atomici (liste e tabelle) in R
  • puntare agli elementi di un oggetto R
  • fare operazione su oggetti R
  • calcolare alcune statistiche di base su oggetti R
  • salvare oggetti in un file RData

Obiettivi di apprendimento

Lo svolgimento di questo compito ti permetterà di:

  • comprende gli oggetti tipici utilizzati in R
  • manipolare le principali strutture dati usate per l’input e output
  • gestire i dati creati in R su file
  • estendere l’ambiente attraverso l’installazione di package

Istruzioni per l’uso

  • Rispondi ai vari punti salvando le risposte in un file R con il nome “hw01_cognome_nome.R”: ad esempio nel mio caso il nome del file sarebbe “hw01_vistocco_domenico.R”.

  • Per rispondere ad ogni punto inserisci un’etichetta di sezione (che puoi inserire nello script usando la combinazione di testi CTRL/CMD + SHIFT + R) utilizzando il punto cui sta rispondendo. Ad esempio, per rispondere al punto 1 del compito, usa un’etichetta di sezione:

    # PUNTO 1 ------------------------------------------------
  • Utilizza i commenti per rispondere alle domande in cui viene chiesta un’interpretazione da parte tua: lo script deve cioè essere funzionante quando si eseguono tutti i comandi con il pulsante Source.

  • Lo script viene valutato sia in base alla correttezza del codice che in base alla qualità (stile utilizzato per rendere lo script leggibile ed ordinato).

Esercizi

Nota

Ricordati di utilizzare i commenti per le risposte aperte.

Parte 1: Crezione/manipolazione di oggetti in R

  1. Crea un oggetto num_casuali contenente 8 numeri casuali estratti da una distribuzione normale con media 10 e scarto quadratico medio 3 sfruttando la funzione rnorm, disponibile nel package base di R
Suggerimento

Sfrutta la pagina di help della funzione rnorm per esplorare gli argomenti di input della funzione

  1. Crea una matrice mat_casuali disponendo i valori contenuti in num_casuali in una matrice di 4 righe e 2 colonne
Suggerimento

Sfrutta la pagina di help della funzione rnorm per esplorare gli argomenti di input della funzione

  1. Crea un oggetto str_testo contenente due elementi: il tuo nome alla prima posizione e il tuo cognome alla seconda posizione

  2. Crea un oggetto mat_mista affiancando per colonna i due oggetti num_casuali e str_testo

Suggerimento

Sfrutta la funzione cbind

  1. Crea un oggetto df_mista affiancando i due oggetti num_casuali e str_testo in un dataframe

  2. Crea un oggetto prod_scalare moltiplicando l’oggetto num_casuali per sè stesso e sommando il risultato ottenuto

Suggerimento

Usa la funzione sum per ottenere la somma di un vettore

  1. Crea un oggetto prod_vet_1 moltiplicando l’oggetto num_casuali per sè stesso sfruttando l’operatore %*%
Suggerimento

L’operatore %*% effettua la moltiplicazione RI-CO (riga x colonna) dell’algebra lineare

  1. Crea un oggetto prod_vet_2 moltiplicando la trasposta dell’oggetto num_casuali per l’oggetto iniziale num_casuali sfruttando l’operatore %*%
Suggerimento

Puoi sfruttare la funzione t per trasporre l’oggetto

  1. Crea un oggetto prod_vet_2 moltiplicando l’oggetto iniziale num_casuali per il suo trasposto sfruttando l’operatore %*%
Suggerimento

Puoi sfruttare la funzione t per trasporre l’oggetto

  1. Commenta brevemente le operazioni richieste ai punti precedenti (da 6 a 9), confrontando tra loro i risultati ottenuti

  2. Crea un oggetto lista lista_unnamed che contiene num_casuali, str_testo, mat_casuali, mat_mista e df_mista

  3. Crea un oggetto lista lista_named che contiene num_casuali, str_testo, mat_casuali, mat_mista e df_mista, utilizzando i seguenti nomi per gli elementi della lista: num_cas, txt, mat1, mat2, e tb

Parte 2: Indicizzazione

  1. Estrai dal vettore num_casuali gli elementi che si trovano alle posizioni dispari e stampali sulla console
Suggerimento

Puoi sfruttare la funzione seq per costruire il vettore con gli indici delle posizioni di interesse

  1. Estrai dal vettore num_casuali gli elementi che si trovano alle posizioni pari partendo dall’ultima posizione e stampali sulla console
Suggerimento

Prova a rispondere in due modi:

  • sfruttando la funzione seq per costruire il vettore con gli indici delle posizioni di interesse
  • sfruttando la funzione rev per disporre il vettore in ordine inverso
  1. Sostituisci il valore dell’ultimo elemento del vettore num_casuali inserendo il numero 100

  2. Stampa a video l’elemento alla posizione 15 del vettore (nota: il vettore ha lunghezza 8)

  3. Assegna il numero 150 all’elemento alla posizione 15 del vettore (nota: il vettore ha lunghezza 8)

  4. Commenta brevemente i risultati delle operazioni richieste ai punti precedenti (punti 16 e 17)

  5. Stampa a video l’elemento che si trova alla posizione (terza riga, seconda colonna) della matrice mat_casuale usando un puntamento con il doppio indice

  6. Stampa a video l’elemento che si trova alla posizione (terza riga, seconda colonna) della matrice mat_casuale usando un puntamento con un singolo indice

  7. Stampa a video l’elemento che si trova alla posizione (terza riga, seconda colonna) della matrice mat_casuale usando un puntamento con un singolo indice

  8. Stampa a video l’elemento che si trova alla posizione (terza riga, quarta colonna) della matrice mat_casuale (nota: anche qui si tratta di una posizione inesistente)

Warning

Questo comando restituisce un errore

  1. Assegna il numero 300 all’elemento che si trova alla posizione (terza riga, quarta colonna) della matrice mat_casuale
Warning

Anche questo comando restituisce un errore

  1. Commenta brevemente i risultati delle operazioni richieste ai punti precedenti (punti 22 e 23) confrontando il risultato delle analoghe operazioni fatte su un vettore (punti 16 e 17)

  2. Elimina dal vettore num_casuali l’elemento che si trova alla seconda posizione

  3. Stampa a video gli elementi del vettore num_casuali minori della media

Suggerimento

Puoi sfruttare la funzione mean per calcolare la media

  1. Stampa a video gli elementi della matrice num_casuali minori della media

  2. Stampa a video la prima colonna del dataframe df_mista usando un puntamento con il doppio indice (riga, colonna)

  3. Stampa a video la prima colonna del dataframe df_mista usando un puntamento con il singolo indice e la singola parentesi quadra

  4. Stampa a video la prima colonna del dataframe df_mista usando un puntamento con il singolo indice e la doppia parentesi quadra

  5. Stampa a video la prima colonna del dataframe df_mista usando un puntamento con il singolo indice

  6. Commenta brevemente i risultati delle operazioni richieste ai punti precedenti (punti 30 e 31). Qual è la differenza tra i due tipi di puntamento?

Suggerimento

Per esplorare i tipi degli oggetti restituiti puoi sfruttare la funzione mode

  1. Stampa a video l’elemento alla terza posizione della lista lista_named usando un puntamento con la doppia parentesi quadra

  2. Stampa a video l’elemento alla terza posizione della lista lista_named usando un puntamento con la singola parentesi quadra

  3. Stampa a video l’elemento alla terza posizione della lista lista_named usando un puntamento che sfrutta il nome dell’elemento (mat1)

  4. Commenta brevemente i risultati delle operazioni richieste ai punti precedenti (punti 33, 34 e 35). Qual è la differenza tra i tre tipi di puntamento?

  5. Stampa a video la modalità (funzione mode) e la classe (funzione class) dell’oggetto mat_mista

Suggerimento

Puoi sfruttare la funzione c per combinare i due output richiesti

  1. Stampa a video la modalità (funzione mode) e la classe (funzione class) dell’oggetto df_mista

  2. Stampa a video la modalità (funzione mode) e la classe (funzione class) dell’oggetto mat_mista

  3. Stampa a video la modalità (mode) e la classe (class) dell’oggetto lista_named

  4. Commenta brevemente i risultati delle operazioni richieste ai punti precedenti (punti da 37 a 40)

Parte 3: Gestione di file dei dati R su disco

  1. Stampa sulla console la directory corrente (o directory di lavoro)
Suggerimento

Puoi sfruttare la funzione getwd

  1. Salva il contenuto dell’intero workspace su un file tutti_gli_oggetti.RData nella directory corrente

  2. Elimina tutti gli oggetti dal workspace

Suggerimento

Puoi sfruttare la funzione rm

  1. Carica il file tutti_gli_oggetti.RData che hai creato al punto 42

  2. Salva gli oggetti num_casuali, mat_casuali e lista_named su un file solo_tre_oggetti.RData nella directory corrente

  3. Elimina tutti gli oggetti dal workspace

  4. Carica il file solo_tre_oggetti.RData che hai creato al punto 45

ADD-IN: Installazione di package

  1. Installa il package tidyverse sul disco utilizzando la funzione install.packages o l’interfaccia grafica (scheda Packages + Install)

  2. Verifica che l’installazione sia andata a buon fine caricando il package utilizzando la seguente funzione

library(tidyverse)

Se l’installazione ha funzionato viene stampato a video un messaggio articolato di questo tipo:

── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Warning

Se hai avuto problemi con l’installazione:

Consegna

Per inviare la tua soluzione:

  • Carica il file .R salvato in risposta al compito assegnato su Teams

Valutazione

Totale punti disponibili: 110 punti

Component Punti
Es 1 - 50 100
Workflow & formattazione 101

Footnotes

  1. La valutazione al “Workflow & formattazione” tiene conto del principio di riproducibilità del codice: lo script caricato deve funzionare senza errori su qualunque PC dando gli stessi risultati↩︎