Sunteți pe pagina 1din 55

Introducere in R

Cursul 2-modul 2

De ce utilizam R
Este gratuit (open-source)
Functioneaza pe o mare varietate de
platforme incluzand Windows (dar si Mac,
Linux, chiar Playstation 3)
Ofera o platforma pentru programarea
metodelor noi de statistica intr-o modalitate
facila
Contine rutine statistice avansate care nu
sunt disponibile in alte programe
Include cele mai moderne disponibilitati
grafice
Permite o trecere graduala de la utilizator la
programator.

Ce inseamna free software


Dreptul de a utiliza programul pentru orice
scopuri este necesar
Dreptul de a studia programul si a il adapta
necesitatilor fiecaruia (inclusiv de a
modifica codul sursa)
Dreptul de a il redistribui altor persoane
care au nevoie de el
Dreptul de a imbunatati programul si de a
distribui modificarile realizate spre binele
comunitatii

Cum se descarca
Se cauta pe Google using R sau
CRAN (Comprehensive R Archive
Network) sau
Se utilizeaza direct link-ul

http://www.r-project.org

Imagini grafice obtinute in R

Tutoriale
P. Kuhnert & B. Venables, An Introduction to R:
Software for Statistical Modeling & Computing
J.H. Maindonald, Using R for Data Analysis and
Graphics
B. Muenchen, R for SAS and SPSS Users
W.J. Owen, The R Guide
D. Rossiter, Introduction to the R Project for
Statistical Computing for Use at the ITC
W.N. Venebles & D. M. Smith, An Introduction to R
Lista completa de documentatie la:
http://www.r-project.org/doc/bib/R-books.html

Istoric
Initial R a fost creat de Ross Ihaka si
Robert Gentleman de la
Departamentul de Statistica al
Universitatii din Auckland, Noua
Zeelanda in cursul anilor 90 ca dialect
al limbajului S (creat in 1976 de catre
John Chambers in laboratoarele Bell).
Este un limbaj pentru realizarea
calculelor si reprezentarilor grafice in
statistica.

Dificultati pentru incepatori


Sintaxa. O parantez greit pus, sau o
parantez [.] n loc de (.) poate crea
erori foarte mari.
Scripturi. Adica un fisier cu extensia .R.
conteaza unde este salvat, proiectele
diferite s fie puse n directoare diferite
Introducerea datelor din fiiere.transferarea datelor in si din Excel de
exemplu

Dezavantaje ale limbajului R


Functionalitatea se bazeaza pe
necesitatile consumatorilor si
contributiile utilizatorilor. Daca aveti
nevoie de imbunatatiri le faceti singuri!
Obiectele cu care se lucreaza trebuie
stocate in memoria fizica a
computerului (deci acesta trebuie sa
faca fata in cazul utilizarii unor obiecte
care ocupa mult spatiu de memorie)

Interfata R
Odata cu pornirea sistemului R va
apare fereastra principala (RguiGraphic User Interface) cu o subfereastra (R Console)
In fereastra Consola cursorul ramane
in asteptarea comenzilor (>)
permitand lucrul in mod interactiv.
Alta metoda este lucrul cu ajutorul
scripturilor (apelate prin Open script)

Prima sesiune de lucru in R

Fereastra de lucru in

Comenzi de baza in R
Comenzile se pot introduce cate una in
momentul aparitiei prompterului (>)
sau se poate introduce un set de
comenzi dintr-un fisier sursa.
Exista o mare varietate de date cum ar
fi: vectori (numerici, de caractere,
logici), matrici, tabele de date si liste
Pentru a iesi din programul R utilizati
quit
>q()

Help
Pentru a obine informaii despre
facilitile oferite de functia help(), din R
> help.start()
Pentru a obine informaii despre o
anumit funcie R, de exemplu plot
> help(plot)
sau comanda alternativ
> ?plot

Introducere in R
Atribuirea si rezultatele calculelor pot
fi scrise sub forma de obiecte utilizand
operatori ca:
O sageata formata din caracterul mai
mic si caracterul liniuta (<-) - atribuire
Caracterul egal (=)
Putem utiliza semnul # pentru comentarii,
programul va ignora tot ceea ce scriem la
dreapta acestui simbol.

Obiecte
In R exista cinci tipuri de clase de obiecte:
Caracter
Numeric (numere reale)
Intreg
Complex
Logic
Obiectul de baza este vectorul. Un vector trebuie
sa contina numai obiecte de aceeasi clasa.
Singura exceptie este lista, reprezentata ca un
vector dar poate contine obiecte de clase
diferite.

Introducere in R
Aceste obiecte pot fi utilizate in alte calcule
Pentru a printa un obiect este suficient sa
introducem numele obiectului respectiv
Exista unele restrictii atunci cand denumim
un obiect:
Numele obiectului nu poate contine urmatoarele
simboluri !, +, -, #
Sunt permise punctul si underscore (.), (_)
Numele poate contine un numar dar nu poate
incepe cu un numar
R este case sensitive deci conteaza daca
utilizam litere mari sau litere mici

Numerele in R sunt tratate ca obiecte


numerice (numere reale in dubla precizie)
In cazul numerelor intregi trebuie
adaugat explicit sufixul L.
Spre exemplu numarul intreg 1 se va scrie 1L

Exista numarul special Inf insemnand


infinit adica rezultatul unei operatii de
forma 1/0
Valoarea NaN reprezinta o valoare
nedefinita, practic un numar inexistent
(rezultat al operatiei 0/0)

Obiectele din R pot avea anumite


atribute:
Nume, nume prescurtate
Dimensiuni (matrici, multimi)
Clasa
Lungimea
Alte atribute definite de utilizator

Atributele unui obiect pot fi accesate


utilizand functia attributes ()

La aparitia prompterului in R vom scrie


expresii
> x<-1
> print (x)
[1] 1
Caracterul # indica un comentariu. Tot
ce apare in dreapta lui # (inclusiv #)
va fi ignorat de R.
> x<- # Expresie incompleta

Cand introducem o expresie dupa prompter,


aceasta este evaluata, iar rezultatul evaluarii
este returnat. Rezultatul poate aparea prin
auto-tiparire.
> x<-5
> x ## apare auto-tiparirea
[1] 5
Sau > print(x) ## tiparirea este solicitata
explicit
[1] 5
[1] indica faptul ca x este un vector iar 5 este
primul sau element

Operatorul : este utilizat pentru a crea


secvente de numere intregi.
> x<- 1:20
>x
Prin auto tiparire va rezulta un vector lung
de forma
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[16] 16 17 18 19 20
[1] semnifica faptul ca primul element al
vectorului este 1, apoi [16] faptul ca primul
element este 16

Functia c() este utilizata pentru a crea vectori de


obiecte
> x<- c(0.5, 0.6) ## vector numeric
> x<- c(TRUE, FALSE) ## vector logic
> x<- c(a, b, c) ## vector caracter
> x<- c(9:29) ## vector intreg
> x<- c(1+0i, 2+4i) ## vector complex
Se poate utiliza si functia vector() pentru a crea un
vector de un anumit tip si lungime, spre exemplu
> x<- vector(numeric, length=10)
>x
[1] 0 0 0 0 0 0 0 0 0 0

Cand mai multe tipuri de obiecte sunt


combinate in cadrul unui vector apare asa
numitul fenomen de constrangere ,
fiecare element al vectorului fiind incadrat
in aceeasi clasa. Astfel
> y <- c(1.7, a) ## caracter
> y <- c(TRUE, 2) ## numeric
Deoarece TRUE reprezinta numarul 1, iar
FALSE numarul 0.
> y <- c(a, TRUE) ## caracter
Deoarece TRUE este practic un sir de
caractere

Obiectele pot fi constranse in mod explicit sa faca parte


dintr-o anumita clasa utilizand functia as.
> x<- 0:6
> class (x)
[1] integer
> as.numeric (x)
[1] 0 1 2 3 4 5 6
> as.logical (x)
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE
> as.character (x)
[1] 0 1 2 3 4 5 6
> as.complex (x)
[1] 0+0i, 1+0i, 2+0i, 3+0i, 4+0i, 5+0i, 6+0i
Constrangerea fara sens va returna NA si un mesaj de
eroare.

Matricile sunt vectori avand ca atribut dimensiunile


(nrow, ncol) adica nr de randuri si nr de coloane.
Putem crea o matrice vida ca exemplu
>m<- matrix(nrow=2, ncol=3)
>m
[,1] [,2] [,3]
[,1] NA NA NA
[,2] NA NA NA
> dim(m)
[1] 2 3
> attributes (m)
$dim
[1] 2 3

Pentru a introduce valori in matrice, sa


ne imaginam ca acestea se vor aseza
la rand, pe coloane, incepand din
coltul stanga sus al matricei.
Exemplu
> m<- matrix(1:6, nrow=2, ncol=3)
>m
[,1] [,2] [,3]
[,1] 1
3
5
[,2] 2
4
6

Matricile pot fi create din vectori carora le


adaugam ca atribute dimensiunile matricei
> m<- 1:10
[1] 1 2 3 4 5 6 7 8 9 10
Vectorul va fi transformat intr-o matrice cu
dimensiunile date
> dim(m)<- c(2, 5)
>m
[,1] [,2] [,3] [,4] [,5]
[,1] 1
3
5
7
9
[,2] 2
4
6
8 10

O matrice poate fi creata si cu ajutorul functiilor cbind ()


legarea coloanelor sau rbind () legarea randurilor.
> x<- 1:3
> y<- 10:12
> cbind(x, y)
x y
[1,] 1 10
[2,] 2 11
[3,] 3 12
>rbind (x, y)
[,1] [,2] [,3]
x
1
2
3
y
10 11 12

Lista este un tip special de vector care


poate contine date din clase diferite.
x <- list (1, a, TRUE, 1+4i)
Factorii sunt vectori intregi utilizati pentru
a reprezenta date categorice. Fiecare
intreg va avea o anumita eticheta. Ei pot fi
ordonati sau nu.
Este preferabil sa utilizam factori cu etichete
auto-descriptive decat factori numere
intregi.

> x<- factor(c(yes, yes, no, yes, no))


>x
[1] yes yes no yes no
Levels: no yes
Ordinea nivelurilor poate fi stabilita utilizand
atributul levels cu functia factor.
> x<- factor(c(yes, yes, no, yes, no),
levels=c (yes, no))
>x
[1] yes yes no yes no
Levels: yes no

Date tabelare
-sunt reprezentate ca tipuri speciale de
liste in care fiecare element trebuie sa
aiba aceeasi lungime
-fiecare element al listei poate fi
considerat o coloana in timp ce lungimea
lui va reprezenta numarul de randuri
-spre deosebire de matrici, se pot stoca
elemente din clase diferite
- Sunt create cu ajutorul functiilor
read.table() sau read.csv()

Datele tabelare pot fi create si cu ajutorul


functiei data.frame()
Spre exemplu, fie prima coloana numita
variabila foo (numar intreg) iar a doua
variabila bar (variabila logica).
> x <- data.frame(foo=1:4, bar=c(T, T, F, F))
>x
foo bar
1 1 TRUE
2 2 TRUE
3 3 FALSE
4 4 FALSE

Obiectele din R pot primi diferite


denumiri prin utilizarea functiei
names()
> x<-1:3
> names (x)<- c(foo, bar, norf)
>x
foo bar norf
1
2
3

Functii utile in R
length() # numar de elemente sau componente
str() # structura unui obiect
class() # clasa sau tipul unui obiect
names() # denumirile obiectelor
c() # combina obiecte intr-un vector
cbind() # combina obiecte sub forma de coloane
rbind() # combina obiecte sub forma de randuri
ls() # lista obiectelor curente
rm() # sterge un anumit obiect
newobject <- edit() # editeaza, copiaza,
salveaza un obiect nou
fix() # editeaza pe loc obiectul respectiv

Spatiul de lucru
Obiectele create in timpul unei sesiuni de
lucru in R sunt pastrate in memorie, iar
colectia de obiecte curente se numeste
spatiu de lucru.
Spatiul de lucru nu se salveaza in
calculator pana cand nu se da comanda de
salvare.
Cand se inchide fereastra se solicita
salvarea spatiului de lucru. Salvarea are loc
intr-un fisier .Rdata

In timpul sesiunii in R se poate salva


explicit spatiul de lucru, astfel:
In meniul File se selecteaza Save
Workspace
Sau se utilizeaza functia save.image()
Pentru a verifica denumirea directorului
curent se utilizeaza functia getwd()
setwd() modifica directorul curent

Alte comenzi in R
> help (options) # ofera ajutor legat de
optiunile disponibile
> options() # setarile curente ale optiunilor
> options (digits=3) # nr de cifre utilizat
la tiparirea rezultatului
> history() # afiseaza ultimele 25 de
comenzi
> history(max.show=Inf) # afiseaza toate
comenzile precedente

Seturi de date in R
Comanda
> data() permite vizualizarea tuturor
seturilor de date disponibile
Iar comanda
> help(numele setului de date)
afiseaza detalii legate de setul de
date nominalizat

Intrari-iesiri
> source() afiseaza un program din
sesiunea curenta. Daca numele fisierului nu
include o cale, fisierul este luat din
directorul curent
> sink() defineste directia rezultatului
Optiunea append controleaza faptul ca
fisierul suprascrie sau se adauga unui fisier
Optiunea split determina daca rezultatul
este trimis atat spre ecran cat si spre fisier

Rezultate grafice
Functia dev.off() returneaza rezultatul catre
terminal. Mai exista urmatoarele
posibilitati:
Function

Output

pdf("mygraph.pdf")

pdf file

win.metafile("mygraph.w
mf")

windows metafile

png("mygraph.png")

png file

jpeg("mygraph.jpg")

jpeg file

bmp("mygraph.bmp")

bmp file

postscript("mygraph.ps") postscript file

Importarea datelor
Din Excel
O prima varianta ar fi convertirea intr-un
fisier text cu virgula (comma) ca separator.
Primul rand va contine numele variabilelor
separate prin virgula.
Asociati variabila id cu numele randurilor.
mydata <- read.table("c:/mydata.csv",
header=TRUE, sep=",",
row.names="id")

Importarea datelor din Excel


A doua varianta este utilizarea pachetului
RODBC pentru a accesa fisierele Excel.
Primul rand va contine numele
variabilelor (coloanelor)
channel <odbcConnectExcel("c:/myexcel.xls")
mydata <- sqlFetch(channel,
"mysheet")
odbcClose(channel)

Importarea tabelelor din


Excel
Presupunem ca a fost creat un tabel in Excel
Datele se copiaza si raman in Clipboard
Se da comanda
>t=read.table("clipboard")
>t

Crearea tablourilor de date


Exemplu
varsta <- c(25, 30, 56)
sex <- c(masculin", "feminin", "masculin")
greutate <- c(160, 110, 220)
mydata <- data.frame(varsta, sex, greutate)
Pentru introducerea interactiva a datelor
mydata <- data.frame(varsta=numeric(0),
sex=character(0), greutate=numeric(0))
mydata <- edit(mydata)

Exemplu
varsta
sex
1
25 masculin
2
30
feminin
3
56 masculin

greutate
160
110
220

Exportarea datelor
Catre un fisier text cu separator tab
write.table(mydata,
"c:/mydata.txt", sep="\t")
Catre un fisier Excel
library(xlsReadWrite)
write.xls(mydata, "c:/mydata.xls")

Liste
Lista este o colecie de obiecte R care pot fi
de tipuri diferite i de mrimi diferite.
Crearea unei liste se face simplu prin funcia
list urmat ntre paranteze de numele
obiectelor ce o compun.

Exemplu de creare lista


S presupunem c exist o familie cu
numele tatlui Ion, numele mamei Maria,
iar numele copiilor sunt: Andrei (4 ani),
Alexandra (7 ani) i Bogdan (9 ani).
>
lista1=list(sot="Ion",sotie="Maria"
,nr.copii=3, varsta.copii=c(4,7,9))
> lista1 #afisarea continutului listei

Baze de date in R
R include i un numr de baze de date care se
pot folosi n diverse aplicaii.
Aceste baze de date sunt de fapt data
frame-uri.
Pentru a vizualiza toate bazele de date
disponibile, se poate folosi funcia data:
> data()
i se va deschide o fereastr n care sunt
enumerate toate bazele de date disponibile.

Pentru a accesa una dintre aceste baze de


date, se poate scrie data(numele bazei
de date). De exemplu, pentru a accesa
baza de date cars care conine vitezele i
distanele de oprire ale unor maini (1920)
putem proceda astfel:
> data(cars)
> cars[1:5,] #primele 5 rnduri ale bazei de
date
speed dist #coloanele bazei de date

Dac se dorete manipularea pe


caracteristici, atunci se poate folosi vectorul
cars[,1] ce ne d toate vitezele msurate
sau vectorul cars[,2] ce ne d toate
distanele disponibile.
O alt modalitate de a lucra cu o baz de
date este de a folosi funcia attach:
> attach(cars)
> names(cars) #numele coloanelor
bazei de date

Utilizarea pachetelor de date


(exemplu pachetul MASS)

Apelarea setului de date Cars93