# +, -, *, /
# Con ^ eleviamo a potenza, con la funzione sqrt() calcoliamo la radice quadrata, con abs() il valore assoluto
# VARIABILI
# Assegnare valore a una variabile:
x<-sqrt(4)
# variabile utilizzabile a sua volta per la costruzione di una nuova variabile:
y<-x+5
# VETTORI
# Vettore = sequenza di elementi dello stesso tipo
# Lista = sequenza di elementi di tipi diversi
# Funzione c() per costruzione vettore, separatore ","
z<-c(x,y,3.2,5,6)
# E' possibile utilizzare un vettore per costruire un nuovo vettore:
c(z,8,12.6,z,y)
# Operazioni sui vettori (1):
z*2 # moltiplica per 2 ogni singolo elemento del vettore z.
# Operazioni sui vettori (2): se abbiamo due vettori della stessa lunghezza, R esegue l'operazione elemento per
# elemento (il primo con il primo, il secondo con il secondo, ecc.). Se invece uno dei due elementi è più corto
# dell'altro, R allunga il vettore più corto ripartendo dal primo elemento. Quindi la moltiplicazione seguente
c(1,2,3,4)*c(3,2)
# equivale a
c(1,2,3,4)*c(3,2,3,2)
# infatti entrambe le operazioni restituiranno il vettore [3,4,9,8].
# VALORI LOGICI
# <, >, >=, <=, ==, !=
# OR = |, AND = &
TRUE & c(TRUE, FALSE, FALSE)
# dà come risultato un vettore che confronta l'unico elemento a destra della & con ciascun elemento del vettore di sinistra, quindi
TRUE FALSE FALSE
# Se non vogliamo un vettore come risultato, ma un unico valore possiamo utilizzare l'operatore "&&" ("||" per
# l'OR), che confronta solo il primo elemento a sinistra con il primo a destra quindi:
TRUE && c(TRUE, FALSE, FALSE)
# darà come risultato TRUE
# FUNZIONI (INTRO)
# nomefunzione(parametro1, parametro2, ...)
args(nomefunzione) # mostra gli argomenti della funzione indicata
isTRUE(4>3) # valuta una funzione, è possibile utilizzare l'inverso della funzione con !isTRUE().
xor(TRUE, TRUE) # richiede due argomenti, differisce dall'operatore "|" perché restituisce TRUE solo se
# uno dei due argomenti è TRUE e l'altro è FALSE
any(c(-1,2,3)>0) # True se almeno uno degli elementi è > 0
all(c(-1,2,3)>1) # True se tutti gli elementi sono > 1
paste(Nome, Cognome, sep=" ") # unire stringhe di testo
as.numeric(x) # x convertita in numerico
as.factor(x) # x era quantitativa, ora è qualitativa
Sys.Date() # data attuale
mean(vettore) # media
# INTERAZIONE COL MONDO ESTERNO
getwd() # mostra working directory
list.files() # mostra eventuali file presenti nella working directory.
ls() # elenco di tutte le variabili e le funzioni salvate localmente (con RStudio le stesse sono nel riquadro in
# alto a destra)
rm(prova) # elimina la variabile "prova"
rm(list=ls()) # elimina tutte le variabili e funzioni locali
dir.create("prova") # crea nuova cartella in wd
dir.create("C:\\prova") # crea cartella in percorso indicato (serve \\ su Windows)
setwd("C:\\prova") # modifica cartella wd
file.create("prova.R") # crea file
file.exists("prova.R") # TRUE se il file indicato è presente in wd
file.info ("prova.R") # mostra informazioni sul file
file.rename("prova.R","test.R") # rinomina il file da prova a test.
file.copy("test.R","prova.R") # creo copia del file
unlink("C:\\prova", recursive=TRUE) # elimino cartella e contenuto (sottocartelle comprese
# mettendo recursive = TRUE, di default è FALSE)
install.packages("modulo") # installa modulo che contiene funzioni non presenti sul base
# CRAN = Comprehensive R Archive Network", contiene i moduli approvati
library("modulo") # richiama modulo installato per poter utilizzare una sua funzione
# NA E VETTORI(2)
# NA = Not Available (equivalente del NULL in SQL, o del Nothing in VB): valore sommato o altro a NA, dà come
# risultato sempre NA. NaN = valore indeterminato (0/0).
is.na(x) # vettore di valori logici, con TRUE se NA
# Uilizzare le parentesi quadre [] per filtrare solo alcuni dati da un vettore
x[is.na(x)] # estrae i soli componenti del vettore che sono NA
x[!is.na(x)] # estrae solo i valori non missing del vettore x
x[x>0] # estrae solo i valori positivi di x
x[!is.na(x) & x>0] # in un colpo solo le due di prima
x[c(1,3)] # primo e terzo elemento del vettore x.
x[-c(2,4)] # tutti tranne secondo e quarto elemento
# Gli elementi di un vettore possono avere dei nomi:
y <- c(nome = 1, nome2 = -7, nome3 = NA, nome4 = 0)
# Se gli elementi di un vettore hanno i nomi, possiamo usare anche questi per filtrare i valori:
x[c("nome", "nome3")]
names(y) # per vedere i nomi degli elementi del vettore.
names(x) <- y # Gli elementi di y usati come nome degli elementi di x.
identical(x,y) # TRUE se x è uguale a y
# DATE
# Classe data, formato ANNO-MESE-GIORNO. Internamente è il numero di giorni a partire dal 1/1/1970.
as.Date("1987-05-26") # per trasformare la stringa in formato data
Sys.Date() # data del sistema
unclass(VaiabileData) # vedo come è memorizzata internamente (num giorni dal 1/1/70)
# Time ha due possibili classi: POSIXct e POSIXlt
Sys.time() # data e ora del sistema in formato POSIXct
# POSIXct internamente è il numero di secondi a partire dal 1/1/1970 alle 00:00:00
unclass(VariabileDateTimePOSIXct) # vedo come è memorizzata internamente una datetime
# POSIXct (num secondi dal 1/1/70)
as.POSIXlt(Sys.time()) # data e ora del sistema in formato POSIXlt
# Internamente una datetime POSIXlt è memorizzata come una lista di valori (sec, min, hour, mon, year, ecc.)
unclass(VariabileDateTimePOSIXlt) # vedo come è memorizzata internamente una datetime POSIXlt
VariabileDateTimePOSIXlt$min # estraggo solo il minuto da una datetime POSIXlt
weekdays(Data) # giorno della settimana
months(Data) # mese
quarters(Data) # quadrimestre (es. Q1)
# strptime permette di convertire una stringa diversa dal formato AAAA-MM-GG in formato data.
strptime("26 maggio 1987", "%d %B %Y") # converte la stringa in data
?strptime # per vedere le tante opzioni disponibili che consentono di trasformare in data qualsiasi formato
# della stringa
# per confrontare due date in R possiamo utilizzare direttamente >,< e - per sottrarle.
difftime(Data1, Data2, units = 'weeks') # differenza tra due date in settimane
# Se si utilizzano spesso i campi data un pacchetto che include molte funzioni utili per esse è lubridate
library(lubridate)
# MATRICI E TABELLE
# matrici (matrix) e tabelle (data.frame) sono entrambi oggetti "rettangolari", ma le matrici possono contenere
# solo un tipo di dati come i vettori, mentre nelle tabelle le colonne possono essere di diversi tipi di dati.
m <- matrix(1:20, 4, 5) # matrice di 4 righe e 5 colonne composta dai numeri da 1 a 20
# Per associare dei nomi alle righe di una matrice, bisogna trasformarla in tabella (se semplicemente
# aggiungessimo all'inizio della matrice una colonna composta da un vettore testo, tutta la matrice sarebbe
# convertita in testo)
tab <- data.frame(vettore, matrice)
class(tab) # restituisce il tipo dell'oggetto
colnames(tab) <- c("a","b","c") # attribuire o cambiare il nome delle colonne di una tabella
names(tab[1:12]) # nomi delle prime 12 colonne di tabella
tab$colonna # estrae solo la colonna indicata della tabella
tab$Col <- [vettore o funzione] # crea la colonna Col
tab$Col <- NULL # elimina la colonna Col
dim(tab) # num righe e colonne della tabella
nrow(tab) # num righe
ncol(tab) # num colonne
object.size(tab) # spazio su disco occupato da tabella
head(tab) # preview della tabella con le prime 6 righe
head(tab, n=10) # prime 10 righe
tail(tab, n=10) # ultime 10 righe
summary(tab) # informazioni principali sulla tabella
str(tab) # informazioni sintetiche su tutte le colonne della tabella
range(tab$colonna) # valore minimo e massimo della colonna
colSums(tab) # somme di colonna
rowSums(tab) # somme di riga
colMeans(tab) # medie di colonna
rowMeans(tab) # medie di riga
fr <- table(tab$a, tab$b) # tabella con frequenze col1 vs col2
margin.table(fr, 1) # frequenze col1 su col2
margin.table(fr, 2) # frequenze col2 su col1
prop.table(fr) # percentuali di cella
prop.table(fr, 1) # percentuali di riga
prop.table(fr, 2) # percentuali di colonna
# CREARE FUNZIONI
# Pezzi di codice riutilizzabili come tutti gli altri oggetti di R. Oltre alle funzioni predefinite e a quelle presenti nei
# pacchetti esterni è possibile scriverle. Una funzione può a sua volta utilizzare altre funzioni
nome_funzione <- function(arg1, arg2){
# argomenti utilizzati
# valore restituito
}
# Esempio funzione che calcola la media:
media <- function(vettore) {
sum(vettore)/length(vettore)
}
# Utilizzabile con:
media(c(3,5,7))
# Esempio funzione con valore opzionale:
incremento <- function(numero, incr = 1){
numero + incremento
}
# Chiamando incremento con solo un argomento sarà sommato 1, altrimenti il secondo argomento.
# Esempio di funzione con n argomenti:
telegramma <- function(...){
paste("START",...,"STOP")
}
# telegramma() può essere utilizzata con un numero qualsiasi di argomenti.
# E' possibile creare anche funzioni binarie (utilizzabili come +,-,*,/) mettendole tra due % in fase di creazione:
# telegramma() può essere utilizzata con un numero qualsiasi di argomenti.
# E' possibile creare anche funzioni binarie (utilizzabili come +,-,*,/) mettendole tra due % in fase di creazione:
"%conc%" <- function(sinistra,destra){
paste(left,right)
}
}
# Ora la si può usare così:
"ciao"%conc%"a"%conc%"tutti"
# per concatenare le stringhe
"ciao"%conc%"a"%conc%"tutti"
# per concatenare le stringhe
No comments:
Post a Comment