########################################### ### DRUGI CAS - MATRICE, FAKTORI, LISTE ### ########################################### ############# ## MATRICE ## ############# # Matrice su dvodimenzioni vektori # Nacini zadavanja: # 1. pravimo matricu od elemenata jednodimenzionog vektora promenom dimenzija x<-1:12 dim(x)<-c(3,4) # x je sada 2d vektor sa 3 vrste i 4 kolone x # 2. matricu formiramo pomocu f-je MATRIX x<-matrix(1:12, nrow=3) # nrow = broj vrsta matrice x #i sto je i: x<-matrix(1:12,ncol=4) # ncol = broj kolona x # Primecujemo da se pri kreiranju matrice prvo popunjava elementima prva kolona, pa druga, itd. # Ako hocemo da se popunjava vrsta po vrsta, dodamo parametar BYROW x <- matrix(1:12,nrow=3,byrow=T) x # Davanje imena kolonama i vrstama matrice preko f-ja COLNAMES i ROWNAMES rownames(x)<-c('A','B','C') x # NAPOMENA: U R-u postoji ugradjen vektor LETTERS koji sadrzi slova alfabeta LETTERS letters # prethodna komanda moze da izgleda i ovako: rownames(x)<-LETTERS[1:3] x # Jos ugradjenih vektora korisnih za imena kolona i vrsta matrica: month.name month.abb colnames(x)<-month.abb[1:4] x # 3. Matrica se moze dobiti nalepljivanjem vektora funkcijama CBIND i RBIND: # f-ja CBIND vezuje vektore kao kolone matrice a<-1:4 a b<-5:8 b c<-9:12 c cbind(a,b,c) # skraceno, to je isto sto i: cbind(1:4,5:8,9:12) # f-ja RBIND povezuje vektore kao vrste matrice rbind(1:4,5:8,9:12) # Pristupanje elementima matrice x[1,2] # Pristupanje celoj vrsti/koloni x[3,] x[,4] # OPERACIJE SA MATRICAMA x<-matrix(c(2,5,3,7,5,1,7,4,3),ncol=3) # Transponovana matrica t(x) # Samo elementi sa dijagonale diag(x) # Determinanta det(x) # Inverzna matrica solve(x) # Mnozenje matrica a<-cbind(1:3,4:6,7:9) a b<-cbind(7:9,4:6,1:3) b # Mnozenje elemenata sa istim indeksom a*b # Matricno mnozenje a%*%b # sume/srednje vrednosti po kolonama/vrstama rowSums(x) rowMeans(x) colSums(x) colMeans(x) ############# ## FAKTORI ## ############# # Faktori se koriste kada podatke svrstavamo u kategorije # svaki faktor ima nekoliko kategorija (nivoa, levela) # Najcesce se opisuju brojevima (0 za muski, 1 za zenski) pol<-c(0,0,1,0,1) fpol<-factor(pol,levels=0:1) # komanda kojom kazemo da pol posmatramo kao faktor, cije su moguce vrednosti 0 i 1 fpol levels(fpol)<-c("muski","zenski")# dodeljujemo znacenje levelima faktora # kada opet ispisemo vektor fpol fpol levels(fpol) #f-ja as.numeric prikazuje kako su leveli kodirani, uvek pocinje od 1 (1,2,..): as.numeric(fpol) # Drugi primer faktora, stepeni bola: # Pravimo vektor za 5 pacijenata, gde su elementi stepeni bola bol<-c(0,3,2,2,1) # Hocemo ovo da tretiramo kao promenljivu sa kategorijama, pa pravimo faktor fbol<-factor(bol,levels=0:3) # Dajemo imena levelima da bismo znali kako da interpretiramo brojeve levels(fbol)<-c("nema","slab","umeren","jak") fbol as.numeric(fbol) # Dodelio je levelima 1,2,3,4 # Ako se izostavi levels=..., po defaultu se pravi faktor od sortiranih vrednosti iz vektora # To nije uvek preporucljivo, npr. ako je vektor stringova, sort je alfabetski ########### ## LISTE ## ########### # Kolekcija objekata skupljena u jedan slozen objekat # Primer pravljenja liste od dva vektora v1<-c(4,3,2,1) v2<-c(5,6,7,8) lista<-list(v1,v2) lista # Pristupanje elementima liste lista[[1]] lista[[1]][2] # Ako u pravljenju liste elementima dodelimo imena, mozemo pozivati elemente preko njihovih imena i znaka $ lista<-list(prvi=v1,drugi=v2) lista[[1]] # isto sto i lista[["prvi"]] #i isto sto i: lista$prvi # F-ja koja vraca imena elemenata names(lista) # NAPOMENA: Elementi liste ne moraju biti objekti istog tipa!!! lista<-list(2,1.4,"string",c(1,3,4),2:12,matrix(1:12,nrow=2)) lista # Lista moze sadrzati i druge liste nova_lista<-list(lista,12,"rec") nova_lista # Dodavanje elementa na kraj liste: # Prvo pravimo listu od 2 elementa: lista<-list(1:3,matrix(1:4,ncol=2)) lista # Dodavanje preko indeksa lista[[3]]<-"treci" # Moguce je dodati novi element i preko imena lista$cetvrti<-"cet" lista # Sada samo cetvrti element liste ima imei dodat je na kraj liste # Brisanje elemenata liste lista[-1] #prikazuje listu bez prvog elementa lista[lista!="treci"] #prikazuje listu bez elemenata identicnih reci "treci" # Da sacuvamo izmenu, dodeljujemo listi izmenjenu verziju lista<-lista[lista!="treci"] lista