Basic R

# CALCOLATRICE
# +, -, *, /
# 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:
"%conc%" <- function(sinistra,destra){ 
  paste(left,right)
}
# Ora la si può usare così:
"ciao"%conc%"a"%conc%"tutti"
# per concatenare le stringhe 



No comments:

Post a Comment