martedì 9 giugno 2020

Inserimento manuale dei dati [3]

Abbiamo già visto alcuni esempi di dati riportati direttamente (cablati) nel codice R, dove comunque possono essere modificati a piacere [1, 2]. Una modalità molto elementare ma utile nella pratica quando si debbano inserire pochi dati, come in un test chi-quadrato, in un grafico a torta o quant'altro.

Vediamo ora due nuovi esempi un po' particolari, in quanto prevedono l'inserimento dei dati in modo interattivo, cioè da parte di un operatore che deve inserire manualmente i dati nella Console di R su richiesta, nel punto previsto dallo script, perché l'esecuzione dello script possa proseguire. Si tratta di una modalità di inserimento dei dati che, mentre consente di familiarizzare con qualche aspetto un po' più tecnico di R, può risultare utile in casi particolari.

Copiate lo script che segue quindi incollatelo nella Console di R e premete ↵ Invio:

# INSERIMENTO MANUALE DEI DATI [3a]
# inserimento di un singolo dato
#
# predispone la funzione inserisci_un_dato() compresa tra { e }
inserisci_un_dato <- function() {
# legge il dato inserito nella Console di R
datoinserito <- readline("Dato da elaborare = ")
# converte il dato inserito in un numero
datoinserito <- as.numeric(datoinserito)
# calcola la radice quadrata del numero inserito e mostra il risultato
print(paste("La radice quadrata di", datoinserito, "è", sqrt(datoinserito)), quote=FALSE)
}
# esegue la funzione inserisci_un_dato() in modalità interattiva attendendo un input da tastiera
if(interactive()) inserisci_un_dato()

Con le prime quattro righe di codice viene predisposta la funzione inserisci_un_dato, il cui codice è incluso tra la parentesi graffa { e la parentesi graffa }. La funzione prevede di acquisire il dato (un solo dato) dalla Console di R con readline(), trasformare quanto immesso in un numero con as.numeric() quindi calcolarne la radice quadrata e mostrare il risultato con la quarta riga di codice.

L'ultima riga di codice con if(interactive()) manda in esecuzione la funzione inserisci_un_dato() in modo interattivo, restando in attesa dell'immissione da tastiera nella Console di R del dato. 

I commenti inseriti nel codice R sono sufficientemente esplicativi di quanto avviene, mentre la documentazione delle funzioni impiegate può essere visualizzata come al solito digitando help(nomedellafunzione) nella Console di R.

Ora copiate lo script che segue quindi incollatelo nella Console di R e premete ↵ Invio:

# INSERIMENTO MANUALE DEI DATI [3b]
# inserimento di più dati
#
# imposta 1 come dato iniziale
datoinserito <- 1
# ripete le istruzioni inserite nel loop fino a quando il dato inserito è diverso da 0 (zero)
while(datoinserito!=0) {
# richiede di inserire la temperatura in gradi Celsius
datoinserito <- readline("Temperatura in gradi Celsius = ")
# converte il dato inserito in un numero
datoinserito <- as.numeric(datoinserito)
# effettua il calcolo e presenta il risultato
print(paste(datoinserito, "gradi Celsius corrispondono a", ((datoinserito * 1.8) + 32), "gradi Fahrenheit"), quote=FALSE)
}

Mediante la funzione while() viene realizzato un loop, il cui codice è incluso tra la parentesi graffa { e la parentesi graffa }, che viene reiterato fino a quando il dato inserito risulta diverso da 0 (datoinserito!=0). Quando il dato inserito è 0 il loop viene terminato.

Il codice prevede che nella Console di R sia inserito manualmente da tastiera un dato di temperatura (datoinserito) in gradi Celsius (°C), per il quale viene calcolata e mostrata la corrispondente temperatura in gradi Fahrenheit (°F) essendo

°F = (°C ∙ 1.8) + 32

Possono essere inseriti anche valori negativi di temperatura in gradi Celsius.

Anche in questo caso i commenti inseriti nel codice R sono sufficientemente esplicativi di quanto avviene mentre di nuovo al bisogno la documentazione delle funzioni impiegate può essere visualizzata digitando help(nomedellafunzione) nella Console di R.

Per entrambi gli script ci si può inoltre divertire a immaginare i controlli che potrebbero essere eseguiti sul dato inserito, e per il secondo script anche a trovare qualcosa di meglio dell'uscita dal loop piuttosto grezza realizzata inserendo 0 come dato, ma questo va al di la degli scopi del post.

In definitiva i due script, pur nella loro semplicità, forniscono come sottoprodotto utile due esempi didattici:
di come con R sia possibile realizzare una funzione, cioè un blocco di codice che può essere eseguito semplicemente richiamando nomedellafunzione(eventualiargomenti);
di come con R sia possibile realizzare un loop (ciclo, iterazione), cioè la ripetizione ciclica di una sequenza di operazioni finché risulta vera la condizione di controllo prefissata, una struttura di controllo ampiamente utilizzata in qualsiasi linguaggio di programmazione, oltre che all'interno delle funzioni di R.


----------

[1] Vedere il post Inserimento manuale dei dati [1] per l'assemblamento dei vettori in matrici.

[2] Vedere il post Inserimento manuale dei dati [2] per l'assemblamento di vettori in tabelle.

Nota: parliamo di array o vettore nel caso di dati numerici monodimensionali, disposti su una sola riga, 

8
6
11
7

di matrice nel caso di dati numerici disposti su più righe e più colonne

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

Di fatto i vettori sono matrici aventi una sola riga o una sola colonna. Una matrice con una sola riga e più colonne è detta matrice riga o vettore riga, mentre una matrice con una sola colonna e più righe è detta matrice colonna o vettore colonna.


Nessun commento:

Posta un commento