→  Usi di base più semplici
R. Esempi d'uso nella scuola di base (altri usi e installazione di R)
Nel programma i comandi appaiono preceduti da >.
Le righe seguenti, scritte in nero (con eventuali parti in rosso), possono man mano essere copiate da qui e incollate in R. Il programma automaticamente le esegue.
Le cose scritte in blu sono le uscite od altri commenti.
I grafici, qui riprodotti, in R appaiono in altre finestre.
Introduzione   Calcoli, grafici, …   Approfondimenti   Statistica   Ancora statistica   Generatore esercizi
Premessa
# Per un primo uso molti comandi (ed altri più semplici) sono già introdotti in
# un'apposita sezione di base. Eventualmente ricorri a questa ed usa immagini
# ed uscite delle pagine seguenti per individuare altri comandi che ti possono
# servire.
Introduzione
# Si possono copiare le righe di comandi come le seguenti (fino
# alla prima riga in blu esclusa) e poi incollarle (azionando il
# comando  col mouse - scegli "paste" da "Edit" -  o con Crtl+V)
# in R;  le parti precedute da # vengono prese come commenti.
# Poi procederemo in modo simile (copiando via via un po' di comandi
# per volta, da un gruppo di commenti ad un altro).
5/7
[1] 0.7142857
#
# [1] serve per numerare le righe delle uscite. In questi esempi le
# uscite stanno su una sola riga, ma se un'uscita fosse su più righe 
# la riga seconda, la terza, … sarebbero precedute da [2], [3], …
#
# Si possono eseguire più comandi, separati da un "punto e virgola",
# ossia da un ;.  Si ottengono, uno sotto l'altro, i risultati.
5-7; 50*7; 50/7; 1+2+50
[1] -2
[1] 350
[1] 7.142857
[1] 53
# La parte frazionaria e la parte intera di un numero vengono separate
# da ".", non da ",". Così si fa in quasi tutto il mondo (e in genere
# si fa in "matematica", anche in Italia). La moltiplicazione viene
# indicata col simbolo *.
#
17000*100; 17000*1000
[1] 1700000
[1] 1.7e+07
# Numeri lunghi, come il risultato 17000000 (6 "zero") di 17000*1000
# non vengono scritti per esteso ma in "notazione esponenziale": la
# scrittura 1.7e+07 indica il numero 1.7*10^7.
#
3^2; 2^3; 5^2
[1] 9
[1] 8
[1] 25
# Il simbolo "^" indica l'elevamento alla potenza;  quindi 2^3 e 5^2
# stanno per 2 alla terza e 5 al quadrato.
#
# Un altro esempio di uso della notazione esponenziale:
1/1000; 1/10000
[1] 0.001
[1] 1e-04
# 1/10000 equivale a 1/10^4, che viene scritto anche 1*(10^-4).
# 
# Si possono calcolare termini qualunque, rispettando le priorità tra
# le operazioni
2+3*5; (2+3)*5; 3*8/2^2; 3*(8/2)^2
[1] 17
[1] 25
[1] 6
[1] 48
#
# Per assegnare un valore ad una variabile in R occorre usare una freccia,
# ossia <- o ->. Per vedere il valore di una variabile occorre batterne il
# nome, come accade per ogni altra espressione.
a <- 7; 12 -> b; a+b; a*b; pippo <- a*b-4; pippo
[1] 19
[1] 84
[1] 80
# Le dimensioni delle lettere devono essere rispettate:  Pippo  e  pIPPO
# rappresentano cose diverse da  pippo.
#
# Vediamo come potrei calcolare il 15% di 380, 275, 637
p <- 15/100; tot <- 380; p*tot; tot <- 275; p*tot; tot <- 637; p*tot
[1] 57
[1] 41.25
[1] 95.55
#
# Una collezione di numeri può essere scritta così:
x <- c(380,275,637); x
[1] 380  275  637
# Un elemento della collezione lo ottengo mettendo il posto tra [ e ]
x[2]
[1] 275
# Se voglio eseguire una operazione su di essi, posso comandare
# l'operazione sulla variabile che li rappresenta tutti:
x*2; (x+10)/2
[1]  760  550 1274
[1] 195.0 142.5 323.5
#
# Schiacciando il tasto freccia ^ [v] si rivedono preced. [segu.] comandi:
# cosa COMODA per rivederli o riusarli, correggendoli o modificandoli.
#
# In matematica vengono chiamate funzioni dei procedimenti per assegnare a
# degli input degli ouput: ad un numero il suo doppio, ad una coppia di
# numeri la loro somma, ad un elenco di nomi il loro elenco in ordine
# alfabetico, ... Vediamo come si possono definire in R.
#
# Un esempio semplice: la media di tre dati: vediamo come definire la funzione
# "media" e 2 esempi di calcolo: (3+5+10)/3 = 18/3 = 6, (-7+7+1) = 1/3 = 3.333…
media <- function(x,y,z) (x+y+z)/3
media(3,5,10); media(-7,7,1)
[1] 6
[1] 0.3333333
#
# Ecco come calcolare il costo di parmigiano reggiano dal prezzo di 18.30
# euro al chilogrammo. Vediamo il costo di 2 kg, 317 g e di 3/4 kg:
costo <- function(chilogrammi) chilogrammi*18.30
costo(2); costo(317/1000); costo(3/4)
[1] 36.6
[1] 5.8011
[1] 13.725
#
# Ecco come scrivere semplicemente una sequenza di numeri. Tre esempi:
# la sequenza da 3 a 10 di "passo" 1; la sequenza da 3 a 10 di passo "1.5".;
# la sequenza da 3 a 10 lunga 5 elementi
seq(3,10, 1); seq(3,10, 1.5); seq(3,10, len=5)
[1] 3 4 5 6 7 8 9 10
[1] 3.0 4.5 6.0 7.5 9.0  # poi verrebbe 10.5 ma supera 10 e non viene scritto
[1]  3.00  4.75  6.50  8.25  10.00
#
# ----------------------------------------------------------------------------
#
# Per il calcolo frazionario e per i grafici di funzioni ti conviene usare
# prima questo comando:
#            source("http://macosa.dima.unige.it/r.R")
# Copialo e incollalo in R.
# Oppure salva sul computer col nome Via.R un file di testo con scritto
# tale comando e aperto R caricalo con Sorgente Codice dal menu File
#             Ecco un HELP che appare battendo  guida1():
HELP: 
frazio(7/20+1/6)                            Calcola 7/20+1/6 come frazione 
box(-5,8, 0,7)       Apre nuova finestra (box) con x da -5 a 8, y da 0 a 7 
boxm(-5,8, -4,9)    Usa scala monometrica (= unità su assi). Con bo0, box0
    non appare la griglia; box sono ridimensionabili. Bo… mantiene il box.
grafico(F,-2,4, 3)   Traccia nel box il graf. di F tra -2 e 4 nel colore 3 
          1:nero 2:rosso 3:verde 4:blu 5:celeste 6:viola 7:giallo 8:grigio 
          black  red     green   blue   cyan      magenta yellow   grey
graficob(F,-2,4, "green")       Traccia il graf. scegliendo da solo il box 
                       [ es: g <- function(x) 2*x+4; graficob(g,-3,4, 6) ] 
punto(1,3/2, 3)      il punto (1,3/2) nel colore 3 (il col. 0 lo cancella) 
puntino(1,3/2, 3)  punticino(1,3/2, 3)          come sopra, ma più piccolo
punti(x,y, 2) (e puntini pallini punticini)     punti con ascis/ord in x/y
segmento(-2,5, 3,1, 4)        segm. da (-2,5) a (3,1) nel col.4 (e lungh.) 
linea(…)  freccia(…)  freccia2(3,1, 4)     sottile o con punta o solo fine
semiretta(2,0, 3,1, 4)  semir(…)   semiretta (sottile) (2,0)->(3,1), col.4
retta2p(2,0, 3,1, 4)  r2p(…)          retta (sottile) (2,0) - (3,1), col.4
punto_punto(1,4, -2,5)                         distanza tra (1,4) e (-2,5)
punto_retta(1,4, -2,5, 3,1)     distanza di (1,4) da r. per (-2,5) e (3,1)
raggio(2,4, 5,20, 6)   segm. da (2,4) lungo 5 dir.20° nel col.6 (e coord.)
raggi(2,4, 5,20, 6)             come sopra ma sottile (e senza coordinate)
raggioX(2,4,5,20) raggioY(…)  o  raggiox raggioy     coord. punto d'arrivo
cerchio(2,4, 3, 1)      il cerchio di centro (2,4) e raggio 3 nel colore 1
arco(2,4, 3, -45,45, 1)            arco dello stesso cerchio da -45° a 45°  
xrot(30)  yrot(30)     x ed y del punto  1,0  ruotato di 30° attorno a 0,0
poligono(2,4, 3, 5,30, 2)       il polig. regolare di 5 lati inscritto nel 
                      cerchio precedente con un vertice a 30° nel colore 2
spezzata(x,y, 2)     spezzata di col. 2 che collega punti con ascisse/ord.
    in x/y,  lung(x,y) sua lungh. [punto(x,y,2) evidenzia/collega i punti] 
torta/Torta/Barre/Striscia(x)   gonio()     diagr. dei dati in x e goniom.
P()         Traccia il punto P che clicco e memorizza e visualizza xP e yP 
curva(K,5) la curva K(x,y)=0, col.5 [q<- function(x,y) x+y^2-1;curva(q,2)]
pendenza(45)             calcola la pendenza di una retta inclinata di 45° 
inclinazione(1,2, 3,4)       calcola la inclinazione in ° da (1,2) a (3,4)
div(24,9)  divisori(24)  primi(24)    divis.con resto, divisori, div.primi
MCD(X) MCM(X)     mass.com.divis., min.com.mult. di collezione di interi X
soluz(F,7, 1,3)        risolve F(x)=7 se tra 1 e 3  F scavalca il valore 7 
soluz2(F,G, 1,3)  risolve F(x)=G(x) se in [1,3] graf. di F e G si tagliano 
minmax(F,2,5)          trova dove F ha min o max se tra 2 e 5 ha una gobba
NOTE  Con col. 0 grafici sono tratt., con "white" cancellati.  Non usare c
  come nome di fun.    Puoi ridim. finestre; chiuderle con [x]; uscire con
  esci().   graf, grafb, cur, spezza, cerch, arc  sono più fini di grafico
  graficob,curva,spezzata,cerchio,arco.  segm  e  ragg  non hanno scritte.
  BF=… HF=… dimensionano base/alt. di fin. grafiche. All'avvio BF=HF = 3.
#
# Sono presenti altri comandi, anche per livelli scolastici successivi
# (carta millim., frecce, curve in forma param. e polare, trasf. geom.,
#  calcoli con numeri grandi, diseq., pendenza, regressione, ...);
#       se interessato a questi approfondimenti clicca qui
#
# segmento(x,y, x1,y1, colore) visualizza anche la lunghezza del segmento, segm no
#       (inoltre, segment e segmen lo tracciano sottile o sottilissimo)
# raggio(x,y, R,dir, colore) visualizza anche le coord. del punto di arrivo, ragg no
#
frazio(0.75); frazio(1/5+3/5); frazio(1/2+1/3); frazio(120/100)
[1] 3/4
[1] 4/5
[1] 5/6
[1] 6/5
#
div(750,9);  divisori(750);  primi(750)
[1]  83  3
[1]   1  2  3  5  6  10  15  25  30  50  75 125 150 250 375 750
[1]   2  3  5  5  5
83*9+3
[1] 750
# Di fronte ad una lunga sequenza di dati posso elencarne solo i primi per avere
# un'idea della loro "struttura" col comando str. Esempio:
str( divisori(123456) )
num [1:28] 1 2 3 4 6 8 12 16 24 32 ...  # sono 28 e iniziano con 1 2 3 4 6 ...
#
# massimo comune divisore e minimo comune multiplo di una collezione di numeri
numeri <- c(12, 42, 60); MCD(numeri); MCM(numeri)
[1] 6
[1] 420
#
# Posso tracciare il grafico di una funzione a 1 input e 1 output. Ecco quello
# del costo del parmigiano al variare del peso tra 0 e 2 kg (in colore blu):
costo <- function(chilogrammi) chilogrammi*18.30
graficob(costo, 0,2, 4)   # o:  graficob(costo, 0,2, "blue")

# Il comando graficob sceglie automaticamnte il box.
# Con punto posso segnare dei punti.
punto(1,costo(1), 2); punto(0.7,costo(0.7), 3)

# Posso mettere delle scritte col comando text: metto le coordinate del
# punto in cui voglio centrare la scritta e poi la scritta tra "
# [ con text(1,35,"euro al kg", font=2) ho le scritte in grassetto;  con
#   text(…, cex=…) con in … un num. >1/<1 ho scritte più grosse/piccole ]
text(1,35,"euro al kg")
#
# Alcuni grafici di funzioni
f <- function(x) x^2+W
W <- 0;  graficob(f,-3,3, 2)
W <- 1; grafico(f,-3,3, 3)    # nello stesso box
W <- 2; grafico(f,-3,3, 4)
W <- 3; grafico(f,-3,3, 0)
# sotto a destra il grafico avendo cambiato il colore del
# tratteggio con    coltrat <- "red"

# La soluzione di x^2+1 = 3
W <- 1; soluz(f,3, 0,5)
[1] 1.414214
z <- soluz(f,3, 0,5); segmento(0,3, z,3, 1); segmento(z,0, z,3, 1)
[1] 1.4142135623731
[1] 3

# NOTA: soluz e soluz2 funzionano se nell'intervallo scelto
# le funzioni hanno grafico senza salti: se f avesse il grafico
# seguente, tra 1 e 2.5  f(x) = 3  non avrebbe soluzione
 
#
# Qualche figura (con un box "monometrico"):
boxm(-5,5, -5,5)
cerchio(1,1, 3, 2)   # o:  cerchio(1,1, 3, "red")
poligono(1,1, 3, 4,45, 1); poligono(1,1, 3, 8,45, 1)
segmento(-4,-4, 4,-2, 3) 
[1] lunghezza      8.24621125123532
puntino(-3,1, "brown"); pallini(-3.5,0.5, "red")
raggio(-3,3, 1,60, 4); raggio(-3,3, 1,180, 5); raggio(-3,3, 1,300, 6)
[1] punto finale   -2.5      3.86602540378444
[1] punto finale   -4        3             
[1] punto finale   -2.5      2.13397459621556
r <- punto_retta(-3,1, -4,-4, 4,-2)
cerchio(-3,1, r, "orange")

# Abbiamo aggiunto un punto, blu, e la semiretta che da esso va verso (4,-3)
punto(5,-2, "blue"); semiretta(5,-2, 4,-3, "blue")
#
# Una spezzata (chiusa, ossia un poligono) e la sua lunghezza
boxm(0,5, 0,5)
x <- c(1,5,3,1); y <- c(0,1,4,0)
spezzata(x,y,"blue"); lung(x,y)
[1] 12.20079

#
# Un grafico per punti (consumo medio di kg di frutta fresca all'anno
# consumata da un italiano):
anni <- c(1880,1890,1900,1910,1920,1930,1940,1950,1960,1970,1980)
frutta <- c(19,21,23,28,31,27,23,37,65,88,79)
box(1880,1980, 0,90)
spezzata(anni,frutta, 2)

#
# Operando col mouse sulla barra del titolo della finestra grafica posso
# spostarla. Operando su bordi od angoli di essa posso ridimensionarla.
#
# Ovvero come ottenere il grafico a sinsitra e, sotto, quello a destra.
box(1880,1980, 0,90)
punti(anni,frutta, 4)

box(1880,1980, 0,90)
punto(anni,frutta, 4)
#
# Ovvero:
box(1880,1980, 0,90)
spezzata(anni,frutta,2); punti(anni,frutta,4)

#
box(1880,1980, 0,90)
numeri <- c(10,20,30,40,50,60,70,80,90)
linea(1880,numeri, 2000,numeri, 3); linea(anni,0, anni,100, 3)
segmento(1880,0, 2000,0, 1); segmento(1880,0, 1880,100, 1)
spezzata(anni,frutta, 2); punti(anni,frutta, 4)

# Ovvero (figura sopra a destra):
linea(1880,numeri, 2000,numeri, "grey"); linea(anni,0, anni,100, "grey")
segmento(1880,0, 2000,0, "grey"); segmento(1880,0, 1880,100, "grey")
spezza(anni,frutta, 4); puntini(anni,frutta, 1)
#
# Un esempio meno facile: trovare il punto più basso (o alto) di un grafico
# e le intersezioni tra due grafici:
h <- function(x) x^2+x+10; graficob(h,-3,3, 1)
minmax(h, -3,3)
[1] -0.5
punto(-0.5, h(-0.5), 2)
k <- function(x) x/2+14; grafico(k, -3,3, "blue")
# soluz2(h,k, -3,-2) trova la x per cui h(x)=k(x) tra -3 e -2
soluz2(h,k, -3,-2); soluz2(h,k, 1,3)
[1] -2.265564
[1] 1.765564
punto(soluz2(h,k, -3,-2) ,k(soluz2(h,k, -3,-2)), "green")
punto(soluz2(h,k, 1,3) ,k(soluz2(h,k, 1,3)), "green")

#
# Una figura suddivisa con archi di cerchio in 4 parti (quale è maggiore?).
box0(-4,4, -4,4); cerchio(0,0, 4, 6)
arco(-3,0, 1, 0,180, 2); arco(1,0, 3, 180,360, 2)
arco(-2,0, 2, 0,180, 3); arco(2,0, 2, 180,360, 3)
arco(-1,0, 3, 0,180, 4); arco(3,0, 1, 180,360, 4)
      
# Sopra al centro cerchi costruiti con:
box0(-8,8, -8,8); for(i in 1:8) cerchio(0,0, i, i)
# for(i in 1:8) fa ripetere il comando per i=1,...,i=8
# A destra un orologio costruito ruotando un segmento corto ed uno lungo
# (non è facilissima come costruzione: pensaci):
box0(-1,1, -1,1); cerchio(0,0, 1, 4)
for(i in 0:60) {a <- 360/60*i; linea(xrot(a)*0.9,yrot(a)*0.9,xrot(a),yrot(a),4)}      
for(i in 0:12) {a <- 360/12*i; segm(xrot(a)*0.8,yrot(a)*0.8,xrot(a),yrot(a),4)}
# Se vuoi vedere un orologio:
orologio()
#
# I diagrammi a torta e un goniometro, e i diagrammi a barre e a striscia:
dati <- c(237.5, 137.5, 125); torta(dati); Torta(dati); torta(0);

giallo,celeste,... % 47.5 27.5 25
gonio()
   
Barre(dati)
giallo,celeste,... % 47.5 27.5 25
   
# Sono stati messi anche i nomi: per ottenerli si è messo prima del
# comando "Barre" il comando:  nomiBarre = c("A", "B", "C")
# Senza l'aggiunta di questo comando non compaiono i nomi.
#
Striscia(dati)
giallo,celeste,... % 47.5 27.5 25
   
#
# Due curve "scambiando" x ed y, e un cerchio descritto con l'equazione:
boxm(-5,5, -5,5)
f <- function(x,y) y-(x^2-3);  curva(f, 6)
g <- function(x,y) x-(y^2-3);  curva(g, 7)
h <- function(x,y) x^2+y^2-16; curva(h, 5)

#
# Un esempio d'uso delle frecce, per indicare percorsi:
boxm(-1,5, -1,5)
freccia(4,3, 4,1, "red")
freccia2(1,1, "red");freccia2(1,5, "red");freccia2(3,3, "red")

# Sopra a destra un esempio d'uso un po' complicato di ragg e raggiox,
# raggioy: traccio dei "raggi", uno attaccato all'altro, di direzione
# D che varia di 45° e di lunghezza che cresce di 1/10 a partire da
# 180° e da 1:
boxm(-10,10, -10,10)
h <- 0; k <- 1; for(i in 0:73)  { D <- 180+45*i; R <- 1+i*0.1;
             ragg(h,k,R,D, "blue"); h <- raggiox; k <- raggioy }
#
# Il triangolo rettangolo con un certo cateto nota la lunghezza, 5, dell'altro:
boxm(-1,10, -1,10)
segmento(8,4, 2,6, 2); inclinazione(8,4, 2,6)
[1] lunghezza    6.32455532033676
[1] -18.43495
raggio(2,6, 5, inclinazione(8,4, 2,6)-90, 4)
[1] punto finale      0.418861169915811 1.25658350974743
segmento(8,4, 0.418861169915811, 1.25658350974743, 4)
arco(2,6, 1, -18.43495,-18.43495-90, 4)

#
# P() consente di cliccare un punto e di leggerne le coordinate.
# Usando P() posso fare anche disegni "a mano libera":
box0(0,10,0,10)
# i muri (4 segmenti):
P(); n <-4; for(i in 1:n) {x <- xP; y <- yP; P(); linea(xP,yP, x,y, "black")}
# Per avere anche le coordinate di tutti i punti cliccati metto:
P(); n <-4; for(i in 1:n) {x <- xP; y <- yP; P(); print(c(x,y)); linea(xP,yP, x,y, "black")}
# la porta (3 segmenti):
P(); n <-3; for(i in 1:n) {x <- xP; y <- yP; P(); linea(xP,yP, x,y, "brown")}
# il tetto (2 segmenti):
P(); n <-2; for(i in 1:n) {x <- xP; y <- yP; P(); linea(xP,yP, x,y, "red")}
# ...
# e se voglio una griglia (prima di fare il disegno) "leggera" (se no batterei boxm):
n <- 0:10;  linea(0,n, 10,n, 0); n <- 0:10; linea(n,0, n,10, 0)
# 0:10  è:  0  1  2  3  4  5  6  7  8  9  10

#
# Modificando altezza, HF, e base, BF, delle finestre puoi anche modificare
# l'aspetto delle figure:
HF=2;   BF=2; box(-5,5, -5,5); cerchio(0,0, 4, "blue")
HF=1.5; BF=3; box(-5,5, -5,5); cerchio(0,0, 4, "blue")

                    come salvare immagini       approfondimenti
#
#  ----------------------------------------------------------------------------
#
# Vediamo come fare qualche analisi statistica di dati.
#
# Ecco un modo alternativo a quello visto sopra per costruire un
# diagramma a torta ("pie" in inglese). Vediamo come rappresentare
# le estensioni complessive delle zone di collina, montagna e pianura
# del Piemonte espresse in decine di chilometri quadrati:
# primo modo (semplicissimo):
pie(c(770,1099,671))
# modo più sofisticato (aggiungo i nomi):
piemonte <- c(770,1099,671)
names(piemonte) <- c("col","mon","pia")
pie(piemonte)
# scelgo anche i colori:
pie(piemonte,col=c("yellow","brown","green"))

#
# Se voglio mantenere il precedente diagramma posso fare il successivo
# in una nuova finestra, che posso aprire col comando  dev.new()
#
# La rappresentazione con un diagramma a barre ("barplot"), primo modo:
barplot(piemonte)
# Eccola riducendo lo spazio tra le colonne e mettendo una griglia
barplot(piemonte,space=0)
# Traccia linee orizzontali a certe quote, tratteggiate
abline(h=c(200,400,600,800,1000),lty=3)
# Eccola aggiungendo colori:
barplot(piemonte,space=0,col=c("yellow","brown","green"))
abline(h=c(200,400,600,800,1000),lty=3)

# La distribuzione percentuale (sum fa la somma):
piemonte/sum(piemonte)*100
     col      mon      pia 
30.31496 43.26772 26.41732
# Il suo arrotondamento agli interi
round(piemonte/sum(piemonte)*100)
col mon pia 
 30  43  26
# e ai decimi
round(piemonte/sum(piemonte)*100, 1)
 col  mon  pia 
30.3 43.3 26.4 
# Ecco il diagramma con le percentuali:
colori <- c("yellow","brown","green")
barplot(piemonte/sum(piemonte)*100,space=0,col=colori)
abline(h=c(10,20,30,40),lty=3)

#
#
# Ecco le altezze di 3 ragazze di scuola media e l'esito di alcuni calcoli:
x <- c(145,152,147)
c( min(x), max(x), sum(x) )
[1] 145 152 444
c( length(x), sum(x)/length(x), mean(x) )
[1]   3  148  148
# si sono trovati il minimo, il massimo e la somma dei dati; poi si sono
# scritti quanti sono i dati (la "lunghezza" di x), la loro media, espressa
# come somma divisa per il numero dei dati o direttamente.
#
# Vediamo la analoga analisi fatta su più dati:
alu <- c(146,158,152,140,157,147,161,147,149,154,155,153,155,156,150,153,152,145)
c( min(alu), max(alu), length(alu) )
[1] 140 161  18
# Mettiamo i dati in ordine ("sort" in inglese significa "sorta", "specie" ma
# anche "ordinamento")
sort(alu)
 [1] 140 145 146 147 147 149 150 152 152 153 153 154 155 155 156 157 158 161
c( min(alu), max(alu), length(alu), mean(alu), median(alu) )
[1] 140.0000 161.0000  18.0000 151.6667 152.5000
# Si noti che quando si stampano più dati usando c(...) essi vengono tutti
# scritti con cifre dopo il "." se ce n'è qualcuno che ne ha.
# Alla fine abbiamo stampato anche il valore della mediana ossia il valore
# che sta al centro dell'elenco.
#
# Ecco l'istogramma. Il programma sceglie automaticamente le classi in cui
# classificare i dati. Il comando è hist.
hist(alu, right=FALSE)
# L'espressione "right=FALSE" serve per comunicare al programma che vogliamo che gli
# intervalli siano del tipo […,…), in modo che ad esempio 150 non sia classificato
# tra 145 e 150 ma tra 150 e 155: 150 non sta in [145,150) ma sta in [150,155).
  
# Vengono rappresentate le frequenze delle varie classi in cui sono stati
# suddivisi i dati.  Se aggiungiamo probability=TRUE otteniamo la stessa figura
# (vedi immagine di sopra, a destra), ma cambia la scala verticale: sono
# rappresentate non le frequenze ma le frequenze relative unitarie (o densità di
# frequenza), ossia le frequenze relative divise per l'ampiezza degli intervalli.
hist(alu, right=FALSE, probability=TRUE, col="yellow"); abline(h=0.06,lty=3)
# Tra 150 e 155 c'erano 6 dati; i dati sono 18, quindi la frequenza relativa è
# 6/18 = 0.333… (cioè 33.333…%), e quella unitaria è 6/18/5 = 0.06666… = 6.7%.
#
# Come faccio a trovare frequenze assolute e quelle percentuali (ossia le
# frequenze relative in forma percentuale) facilmente? Ecco:
hist(alu,right=FALSE)$counts
[1] 1 5 6 5 1
hist(alu,right=FALSE)$counts/length(alu)*100
[1]  5.555556  27.777778  33.333333  27.777778  5.555556

# ----------------------------------------------------------------------------

Per qualche altra considerazione di statistica e probabilità clicca qui.