R-0, esempi introduttivi:
funz. di 2 variab, istogr. e boxplot, derivate, grafici di più funzioni.
R-1: approssimaz., frazioni, num. complessi, fattoriale, coeff. binom., :, operatori log.,
==, function, {}, var.locali-globali-parametri,
ifelse, plot, abline, readLines, read.table, csv, dev.new, ylim, axTicks, $,
[ ], ls, rm, c, length, range, sort, sum, prod, seq,
barplot.
R-2: plot type="n" fg xaxt yaxt, curve, add, copiare comandi ^ v, help, ricorsione,
for, NULL, min, max, quote, a capo, seq, rep,
sort, mean, median, stem-and-leaf, hist, [x], probability=TRUE, freq=FALSE,
right=FALSE, main, par, mai,
nclass, colors, lines, body, D, eval, integrate.
R-3: dev.off, summary, hist$mids, hist$density, sd, scan, boxplot, runif, floor,
dnorm, rnorm, text, while, TRUE, subset, cor, lm
R: indice per voci, WolframAlpha
Attività con R - 1
[righe da eseguire, tra un gurppo di "#" e l'altro]
1/3 print(1/3, 15); print(1/3, 16); print(1/3, 17); print(1/3, 18) # Come mai queste uscite? x <- 5555.1251; y <- 5555; x-y print(x-y, 16) # Come mai queste? # Col cellulare 1/3*3 fa 0.9999999 13/124+4/80 library(MASS) # Che cos'è una "libreria" fractions(13/124+4/80) fractions(1255.255255255255255255) fractions( 2.59807621135332/sqrt(3) ) # Deduco che 2.59807621135332 = 3√3/2 3+sqrt(-0.25) # NAN: not a number 3+sqrt(-0.25+0i) # I numeri complessi # as.roman(178); as.roman(179); as.roman(999) # Only numbers between 1 and 3899 have a representation as roman numbers # factorial(21) fractions(factorial(21)) fractions(factorial(22)) # Posso tentare con: print(factorial(22),17) # Ma: print(factorial(23),18) # Come detto, oltre le 16 cifre il risultati non sono affidabili. # Come effettuare il "calcolo esatto"? (vedremo più avanti come farlo con R) # # http://www.wolframalpha.com # 2.59807621135332 # sqrt(3)/2 # 13/124+4/80 # 3+sqrt(-0.25) # Is 5^(1/3) a rational number? # Is pi^sqrt(2) a rational number? # roman(999) # 23! # c( choose(7,0), choose(7,1), choose(7,2), choose(7,3) ) choose(7,0:7) # il ":" # 2 < 5; 5 >= 2; 5 == 2; 5 = 2 !(1 > 2 & (3/2 < 2 | 1 == 0)) 1 > 2 & (3/2 < 2 | 1 == 0) 1 > 2 3/2 < 2 | 1 == 0 3/2 < 2 1 == 0 # Gli operatori "logici" e l'"=" nelle condizioni # k <-2; t <- 1 p <- function(x) (x^2+x+1)^2 + 1/(x^2+x+1) + x^2+x+1 q <- function(x) {t <- x^2+x+1; t^k + 1/t + t} p(7); q(7) t; k # Nella definizione di q ho usato la variabile t come variabile locale (il # valore che assume non interferisce col valore che t ha assunto prima della # definizione, in cui era globale, come globale è la varabile k); x è invece # un parametro formale (è usato per definire q; anch'esso non interferisce # coi valori assunti da eventuali usi di x al di fuori della definizione di q) # f <- function(x) ifelse( x>= 2, -4, 6) plot(f,-5,5); abline(h=0,v=0,col="red") # plot(f,-5,5,type="p"); abline(h=0,v=0,col="red") # plot(f,-5,5,type="p",pch="."); abline(h=0,v=0,col="red") # plot(f,-5,5,type="p",pch=".",n=1e4); abline(h=0,v=0,col="red") # # http://www.wolframalpha.com # y = Piecewise[ { {-4, x >= -2}, {6, x < -2} } ] # Per avere il grafico in un particolare intervallo: # plot Piecewise[ { {-4, x >= -2}, {6, x < -2} } ], -8 <= x <= 8 # ovvero: # plot Piecewise[ { {-4, x >= -2}, {6, x < -2} } ], -8 <= x <= 8, -7 <= y <= 9 # readLines("http://macosa.dima.unige.it/om/prg/stf/altomas.txt",n=3) # Vedo che cos'è un file, stampandone poche righe, read.table("http://macosa.dima.unige.it/om/prg/stf/altomas.txt",sep=",",skip=1, nrows=2) # Poi, se vedo che è una tabella, ne carico le righe indicando il separatore, "," ("skip" # indica quante righe devo saltare: qui devo saltare solo la prima riga, inziante con "'" # - se inziasse con "#" il programma capirebbe da solo, senza "skip", che è un commento) hm <- read.table("http://macosa.dima.unige.it/om/prg/stf/altomas.txt",sep=",",skip=1) str(hm) # edit(hm) # hm write.csv(hm,"hm.csv") # Come scrivere una tabella in formato foglio di calcolo (csv) # (cercare il file sul computer: potrebbe essere nella cartella # Documenti, sul DeskTop, ...) # plot(hm) hf <- read.table("http://macosa.dima.unige.it/om/prg/stf/altofem.txt",sep=",",skip=1) dev.new() # apro una nuova finestra (device = dispositivo) plot(hf) # plot(hf,ylim=c(160,250),col="red") abline(v=axTicks(1), h=axTicks(2), col="orange",lty=3) # Volendo potevo scegliere l'intervallo per le x e definire la griglia # indicando la sequenza dei valori: primo, ultimo, passo: # plot(hf,ylim=c(160,250),xlim=c(1920,2020),col="red") # abline(v=seq(1920,2020,10), h=seq(160,250,10), col="orange",lty=3) points(hm,col="blue") lines(hm,col="blue"); lines(hf,col="red") # indm <- hm$V2/hm$V2[1]*100; indf <- hf$V2/hf$V2[1]*100 # Estraggo righe/colonne da una tabella plot(hf$V1,indf,col="red") abline(v=axTicks(1), h=axTicks(2), col="orange",lty=3) points(hm$V1,indm,col="blue") lines(hm$V1,indm,col="blue") lines(hf$V1,indf,col="red") # ls() rm(hm,t) ls() rm(list=ls()) ls() # Come vedere le variabili definite, come cancellarne alcune o tutte # x <- c(10.4, 5.6, 3.1, 6.4, 21.7); x length(x); min(x); max(x); range(x); sort(x); mean(x); median(x); sum(x); prod(x) # seq(3,10,len=4); seq(6,10,0.5) length(seq(6,10,0.5)) # Un modo per costruire sequenze # dati <- c(315.5, 732.3, 586.7); barplot(dati) # Un istogramma a barre # Come aggiungervi delle etichette: dev.new() names(dati) <- c("nord","centro","sud"); barplot(dati) dev.new() barplot(dati/sum(dati)*100) abline(h=axTicks(2), col="blue",lty=3) dev.new() barplot(dati/sum(dati)*100,horiz=TRUE) abline(v=axTicks(1), col="blue",lty=3) dev.new() # Come orientare le "etichette" sugli assi barplot(dati/sum(dati)*100,horiz=TRUE,las=1) abline(h=axTicks(2), col="blue",lty=3) # # Come cercare queste cose nell'indice per voci # Esempi d'uso di WolframAlpha: apri "software" qui # (poi apri "clicca"). # Per come vengono approssimati i numeri (problemi visti all'inizio), vedi qui. # Domande, problemi, ... ? # # (vedremo successivamente come salvare/caricare sessioni di lavoro) #