# Materialy wprowadzajace do platformy R # i jezyka programowania R # http://www.biecek.pl/semestr/stats # # --------------------------------------------------------------- # Podstawy składni języka R # # liczby 2.5e3 # lancuchy znakow "Jestem lancuchem znakow" # typ logiczny TRUE == T FALSE == F # wektory obiektow tego samego typu c(1,3,4) # listy obiektow roznych typow list(name=c("Jan","Tomasz"), surname="Kowalski", age=25, married=T) # macierze matrix(0,4,2) # ramki danych data.frame(id=c(100,101,102), age=c(25,21,22), male=c(T,T,F)) # typ wyliczeniowy factor(c("sierzant", "kapitan", "sierzant")). # uwaga na konwersje pomiedzy typami! as.numeric(factor(c(-2,2))) # konwersje na typ liczbowy, najlepiej robic tak: as.numeric(as.character(factor(c(-2,2)))) # operator przypisania c(13, 13) -> zmienna.z.kropka imie <- "Ola" i = 4 # indeksowanie wektorow list i macierzy jest bardzo proste wektor <- 1:10 wektor wektor[1:3] wektor[c(-1,-3,-5)] # elementy macierzy indeksowac mozna tak macierz <- matrix(1:4,2,2) macierz macierz[1,] macierz[-1,-1] # elementy list i ramek danych indeksowac mozna tak osobnik <- list(name=c("Jan","Tomasz"), surname="Kowalski", age=25, married=T) osobnik$name osobnik[[2]] osobnik[[1]] # sekwencje mozna tworzyc na dwa sposoby # -2:2 # seq(10,50,by=10) # ale nalezy byc ostroznym, jezeli chcemy miec sekwencje liczb niecalkowitych v <- seq(0.7, 0.8, by=0.1) v v == 0.8 # operatory logiczne sa takie jak w wiekoszci jezykow programowania lubie.statystyke = c(ala=F, ola=T, ewa=T) lubie.prowadzacego = c(ala=T, ola=T, ewa=F) lubie.statystyke & lubie.prowadzacego lubie.statystyke && lubie.prowadzacego lubie.statystyke | lubie.prowadzacego lubie.statystyke || lubie.prowadzacego # operacje wejscia wyjscia wektor.liczb = scan("nazwa.pliku") # mozna specyfikowac typ odczytywanych zmiennych i separatory wektor.lancuchow = scan("nazwa.pliku", what="character", sep=",") # macierz liczb najlatwiej odczytac w ten sposob macierz = read.table("nazwa.pliku") # jezeli macierz ma naglowek, to powiedzmy o tym R'owi macierz = read.table("nazwa.pliku", header=T, sep="\t") # zapisywanie do pliku jest proste cat(wektor, file="nazwa.pliku", append=F) # bardziej zlozone struktury lepiej zapisac w ten sposob write.table(macierz, file="nazwa.pliku", sep="\t") # mozemy odczytywac i zapisywac dane do windowsowego schowka wektor = scan("clipboard") write.csv(macierz,"clipboard") # mozna importowac dane z SPSS library(Hmisc) ramka.danych = spss.get("nazwa.pliiku.sav") # importowac dane z wbudowanych pakietow library(BSDA) data(Coffee) head(Coffee) # mozemy zapisywac pliki graficzne png("obrazek.png", width = 640, height = 480) example(plot) dev.off() # # przykladowa sesja z R # zrobmy kilka zmiennych wektor <- 1:100 macierz <- matrix(1:100,10,10) fragment<- sample(wektor,50,T) ramka <- read.csv("http://semestr.pl/cogito/download/drzewka.csv", header=T, sep="\t") # wyswietlmy te zmienne fragment ramka ramka$waga str(ramka) head(ramka,3) ramka[ramka$plec=="M",] colnames(ramka) # policzmy cos BMI <- ramka$waga/(ramka$wzrost/100)^2 ramka$BMI = BMI # dowiedzmy sie czegos o funkcji hist ?hist args(hist) # narysujmy cos hist(fragment) hist(ramka$wiek, xlab="Wiek") plot(ramka$waga, ramka$wzrost/100, xlim=c(50,100), ylim=c(1.5,2), xlab="waga [kg]", ylab="wzrost [m]", type="p", lwd=2, col="red") ls() attach(ramka) ls() etykietki = paste(ramka$imie, ramka$nazwisko) identify(waga, wzrost/100, etykietki) # a teraz uruchamiamy R commandera library(Rcmdr) # demo mozliwosci pakietu graphics demo(graphics) library(rgl) demo(rgl) # kilka podsumowan summary(fragment) summary(ramka) # co to za pokoj? add.box <- function(x1,x2,y1,y2,z1,z2,col) { rgl.quads(c(x1,x1,x2,x2),c(y1,y2,y2,y1),c(z1,z1,z1,z1),col) rgl.quads(c(x1,x1,x2,x2),c(y1,y2,y2,y1),c(z2,z2,z2,z2),col) rgl.quads(c(x1,x1,x1,x1),c(y1,y2,y2,y1),c(z1,z1,z2,z2),col) rgl.quads(c(x2,x2,x2,x2),c(y1,y2,y2,y1),c(z1,z1,z2,z2),col) rgl.quads(c(x1,x2,x2,x1),c(y1,y1,y1,y1),c(z1,z1,z2,z2),col) rgl.quads(c(x1,x2,x2,x1),c(y2,y2,y2,y2),c(z1,z1,z2,z2),col) } rgl.open() rgl.quads(c(-0.01,-0.01,4.5,4.5),c(0,2.5,2.5,0),c(2.21,2.21,2.21,2.21), "blue",alpha=0.5) rgl.quads(c(-0.01,-0.01,4.5,4.5),c(0,2.5,2.5,0),c(-0.01,-0.01,-0.01,-0.01), "blue",alpha=0.5) rgl.quads(c(4.5,4.5,4.5,4.5),c(0,2.5,2.5,0),c(-0.01,-0.01,2.21,2.21),"blue", alpha=0.5) rgl.quads(c(-0.01,-0.01,-0.01,-0.01),c(0,2.5,2.5,0),c(-0.01,-0.01,2.21,2.21), "blue",alpha=0.5) rgl.quads(c(4.49,4.49,4.49,4.49),c(1,2.3,2.3,1),c(0.5,0.5,2.1,2.1),"black") rgl.quads(c(0,0,4.5,4.5),c(0,0,0,0),c(0,2.2,2.2,0),"#AB5400") add.box(0,2.2,0,2.1,2.2,1.8,"#E7F179") rgl.quads(c(0.55,0.55,1.65,1.65),c(0,2.1,2.1,0),c(1.79,1.79,1.79,1.79),"#B1B1B1") add.box(0,0.4,0,0.8,0.6,1.2,"#E7F179") add.box(2.55,2.15,0,0.4,0,0.4,"#E7F179") add.box(2.6,4.3,0,0.4,0,2.1,"#E7F179") add.box(1,2.1,0,0.8,0,0.45,"#E7F179") rgl.quads(c(1.3,1.3,2.1,2.1),c(1,1.8,1.8,1),c(0.01,0.01,0.01,0.01),"#B1B1B1") rgl.quads(c(0,0,0.8,0.8),c(0,2,2,0),c(0.01,0.01,0.01,0.01),"#7A7E84") rgl.material(ambient="#FFFFFF") rgl.light(diffuse="#AAAAAA") for(i in 1:360) { rgl.viewpoint(i); }