Tento soubor vznikl drobnou modifikaci soubor kolegyMatusa Maciaka, ktery vede paralelku. Proto to bude takova smes slovenstiny a cestiny. ###########################################################1. CVICENIE - 06.03.2007 #################################################################Podrobnosti k cviceniu na mojej web stranke, na adrese:http://www.mmatthew.matfyz.cz/school.php Podrobnosti k prednaske na stranke Dr. Hlavku, na adrese:http://www.karlin.mff.cuni.cz/~hlavka###########################################################ZAKLADY PRI PRACI S Rkom #################################################################Vsetkych 5 nizsie uvedenych datovych struktur moze nadobudatktorykolvek z datovych typov (num, znak, kompl, log)1. Praca s vektormiSkuste prikazy na tvorbu vektorov: "c()", "seq()" a "rep()"a <- c(1,3.14,6.28,Inf)b <- seq(2,6,length=4) ### aky je rozdiel medzi "b<-seq(2,6,4)"?nyni se da v R-ku prirazovat i pomoci "=",tj a = c(1,3.14,6.28,Inf)ale to staromilci nevidi radinezavislost na poradi vhodne identifikovanych vstupnych parametrov:seq(from=1, to=10, by=.1)seq(to=10, by=.1, from=1)pokud ale parametry neuvadim jmenem musi byt poradi spravne, R-ko neniod Microsoftu :)# Napovedao tom jak presne funguje funkce "seq" se dozvime pomocihelp(seq);anebo?seqpokud nevite presny nazev prikazu muze pomocihelp.search("seq")pro milovniky html napoved je zde help.start()webovy prohlizec, ktery se spusti lze na Linuxu nastavit pomoci options(browser="/usr/bin/firefox")Ale aby spravne fungovalo hledatko prikazu, je treba mit "dobre" nastavenou JAVUPokud se nam html napovedu nelibi a chceme se ji zbavit, pak dame options(htmlhelp = FALSE)"naplneni" vektora stejnym cislem...c <- rep(2,4)jde to samozrejme delat i vektoroverep(c(1,0), c(2,5))Scitanie vektorov: "+/-", nasobenie skalarom: "*", nasobenie vektorov: "%*%"transpozicia: "t()" - interpretacia opacna, nez v teorii!!!indexovanie vektorov, indexovanie logickymi podmienkami, ...print(a[c(1,3)])print(a[a>5])print(a[a>5 & a<Inf])vyhodi z indexu druhou slozkua[-2]prace s vektoryDokud R-ku nerekneme jinak, tak R-ko pracuje po slozkacha + ba * b2. Praca s maticamidimenzia matice (vektoru): "dim()", "nrow()", "ncol()", inverzna matica: "solve()",pozrite sa na funkcie "cbind()", "rbind()" a "matrix()"...Matice lze vytvaret ruznymi zpusoby, napr. poslepovanim sloupeckuB <- cbind(c(1,2,3),c(0,1,2),c(0,0,1))anebo poslepuju radkyC <- rbind(c(1,2,3),c(0,1,2),c(0,0,1))anebo vyuziju priklad matrixB <- matrix(c(1,2,3,0,1,2,0,0,1), nrow = 3, ncol = 3, byrow = FALSE);ekvivalentne a strucneji B <- matrix(c(1,2,3,0,1,2,0,0,1), 3, 3);pristupovat k prvkum mohu pomociB[3,2]drsnaci mohou vyuzit toho, ze R-ko ma maticiulozenou jako vektor poslepovanych sloupce, tedy B[6]Opet, dokud R-ku nerekneme jinak pocita po slozkachB + CB * CChceme-li maticovy soucin, pak B %*% Cmatici transponujeme pomocit(B)inverzesolve(B)overime vypoctenou inverzni maticisolve(B)%*%B velice elegantne muzeme ziskat radkove prumeryapply(B, 1, mean)anebo sloupcove prumeryapply(B, 2, mean)druhy parametr tedy znaci index, pres ktery pouzivame funkci "mean"editacia vytvorenych matic:B[2:3,1] <- 0;B[B > 1 | B == 0] <- Infrozsirovanie maticprint(D <- cbind(B,c(0,0,0),B))dalsi zajimave funkce "eigen()", "diag()", "apply()".3. Praca s polom - aneb, kdybychom si nahodou nevystacili s maticemapozrite sa na funkciu "array()"pole <- array(1:24, c(3,2,4))indexovanie pola...4. Praca s listom (zoznamom)datova struktura, ktorej prvky mozu mat rozny typ a roznu dlzku...l <- list(cislo1=15, cislo2 = c[1], vektor=a,logic=(b<7),znak="list")odkazovanie sa na jednotlive casti listu: list$cislo1, list$cislo2,...l$logic5. Praca s data framespecialny pripad listu (zoznamu), ktoreho prvky maju sice rozny typ, ale vzdy rovnaku dlzku...jmena <- c("Maruska", "Klara", "Eva");datum_nar <- as.Date(c("1985-07-15", "1986-02-24", "1984-11-10"));vyska <- c(164, 170, 168);ZENY <-data.frame(jmena, datum_nar, vyska);spristupnenie prvkov data framu: analogicky ako list, alebo spristupnit nazvy prvkov pomocou "attach(data_frame)"Odpojenie data framu: pomocou "dettach(data_frame)"Je na case si trochu pouklizetls() # vypise vsechny promennerm(jmena, datum_nar, vyska) # smaze vybrane promennerm(list = ls()) # smaze vse - ve Windows se k tomu da i proklikat###########################################################Nahodne veliciny a ich rozdelenie #################################################################pozrite sa na generatory: "runif" a "rnorm", ktore generujunahodny vyber z rovnomerneho a normalneho rozdelenia...pomocou helpu sa pozrite na funcie "plot()", "lines()""points()", "hist()" a "boxplot()"X <- rnorm(1000) Y <- runif(1000)plot(X);boxplotboxplot(X)histogramhist(X, freq = TRUE, col="blue", main="Pokusny histogramek", ylab="Absolutni cetnost")jak nastavit parametry kresleni obrazku -- viz. help(par)moc prijemne cteni to ale neni...###########################################################PRACA S REALNYMI DATAMI #################################################################nacitajte data z txt suboru a pomenujte sledovane velicinyspravne nastavit cestu pomocou "getwd()" a "setwd()"na Windowsech se lze proklikat... DATA <- read.table("data.txt", header=F)pokud bychom chteli mit nacteny spravne jednotlive typy promennychDATA <- read.table("data.txt", colClasses=c("factor", "factor", "factor", "numeric", "numeric", "numeric", "numeric"), header=F);names(DATA) <- c("index","skola","pohlavi","IQ","znamka1","znamka2","znamka3")pro nacitani vetsich dat se muze hodit funkce "scan"prvni pohled na datasummary(DATA);dim(DATA);skola ... typ skolyznamka1 ... prum. znamka na pololetnim vysvedceni v 7.trideznamka2 ... prum. znamka na konci roku v 7.trideznamka3 ... prum. znamka na pololetnim vysvedceni v 8.trideAky je rozdiel medzi nacitanim dat s parametrom "header = T" a "header = F"(pozri "help(read.table)" resp. "?read.table", alebo metoda POKUS-OMYL :-))Skuste ulozit premennu data do RData suboru a opat nacitat pomocou "load()"save(DATA,file="data.RData")rm(list=ls())load("data.RData")abychom nemuseli psat DATA$IQ ale pouze IQ,pozor, R-ko je case-sensitiveattach(DATA)jednoducha analyza...histogramhist(znamka1)pocet sloupecku hlida parametr breaks. Mohu zadat budcelkovy pocet sloupeckuhist(znamka1, breaks = 50);intervalyhist(znamka1, seq(1,4,0.25));souvislost dvou velicinpohlavi vs IQzakladni nahled...1 ... jsou kluci, 0 ... holkyboxplot(IQ~pohlavi);anebo :)boxplot(znamka1~pohlavi);podobnou informaci nam dava takeby(IQ, pohlavi, summary);by(znamka1, pohlavi, summary);strukturu zkoumanych dat z hlediska skoly a pohlavi table(skola, pohlavi)kovariancna matica, korelacna matica..."help("var")", help("cor")...Znamka asi bude souviset s IQplot(znamka1~IQ);tesnost tohoto vztahu se snazi zmerit korelacni koeficientten vystihuje tesnost linearniho vztahucor(cbind(znamka1, IQ))pustime data.frame DATAdetach(DATA);# # Ukonceniq()doporucuji na otazku odpovedet "yes" a pak se vam do souboru ".RData" ulozi vsechna dataa do souboru ".RHistory" historie prikazepokud bych si chtel historii prikazu ulozit nekam jinak, tak savehistory(file = "cviceni.RData")# # Dodatek -- R & UnixR-ko vznikalo pod UnixemR prejima nektere vlastnosti bashe, napr. TabulatorCtrl + Dprikazem system("prikaz") lze provadet prikazy v bashisystem("ps -aux");rafinovana sebevrazda -- system("killall R")