# vi gaar videre med forskjellige eksmpler og haaper paa at # vi plukker opp litt laerdom fra det ene, og litt fra det andre, # samtidig som vi legger vekt paa 'action' -- at vi produserer # grafer i full fart -- uten for stor detailfokus. # i manualen til R kan du soeke opp noe info om hr. Anscombe, # som pryder statistikkens historie med aa forklare hvordan # totalt ulike data kan ha felles statistiske trekk, inklusive # gjennomsnitt og det de kaller 'enkel linear regresjon'. # proev dette her, copy og paste metoden, og du faar ikke # mindre enn fire grafer ut, med baade sirkler og en linear # strek gjennom dem. legg merke til at det er { og } etter # uttrykket for (i in 1:4), som du kan lese omtrent slik: # for hvert eneste tall i, fra serien 1:4, gjoer slik og slik. # her brukes innebygde tall -- uttrykket data = anscombe # er to steder. require(stats) require(graphics) ff <- y ~ x mods <- setNames(as.list(1:4), paste0("lm", 1:4)) for (i in 1:4) { ff[2:3] <- lapply(paste0(c("y","x"), i), as.name) mods[[i]] <- lmi <- lm(ff, data = anscombe) } op <- par(mfrow = c(2, 2), mar = 0.1+c(4,4,1,1), oma = c(0, 0, 2, 0)) for (i in 1:4) { ff[2:3] <- lapply(paste0(c("y","x"), i), as.name) plot(ff, data = anscombe, col = "red", pch = 21, bg = "orange", cex = 1.2, xlim = c(3, 19), ylim = c(3, 13)) abline(mods[[i]], col = "blue") } mtext("Linear Regr w/example data named \"anscombe\"", outer = TRUE, cex = 1.5) par(op) # vi kikker paa mer fra grid-manualen, mer eller mindre modifisert. # restart R (bruk quit() og gaa inn i den igjen) og det neste # eksempel gjoer bruk av to ulike koordinat-systemer eller hva # vi kaller det, og drar en linje mellom de to. eksemplet har # bare enkle funkjons-kall i seg og egner seg litt bedre enn # endel andre eksempler til at du modifiserer ett og ett tall # ser hvilken effekt det faar, og dermed laerer litt mer baade # om R generelt og grid-pakken spesielt. her er det av verdi # at du bruker en tekstbehandler og ikke limer inn rett fra # nett-browseren, for nett-browseren tilbyr vanligvis ikke at # du endrer paa ting. i tekstbehandleren kan du proeve ulike # ting, uten at du lagrer det paa disk, og den hurtige responsen # er en av de pedagogiske verdiene med interaktive script-orienterte # spraak som R. dette eksempel er ogsaa enkelt nok til at det ikke # er viktig aa quitte og restarte r mellom hver gang. det er helt # greit for r at du skriver require(grid) flere ganger, den henter # inn pakken den foerste gangen og overser elegant om kommandoen # repeteres! require(grid) pushViewport( viewport(w = 0.8, h = 0.8, layout = grid.layout(1, 3, widths = unit(rep(1, 3), c("null", "inches", "null"))))) pushViewport(viewport(layout.pos.col = 1, yscale = c(0, 4))) grid.grill() grid.yaxis() grid.xaxis() grid.points(0.5, unit(2, "native")) grid.move.to(0.5, unit(2, "native")) popViewport() pushViewport( viewport(layout.pos.col = 3, yscale = c(0, 2))) grid.grill(); grid.yaxis(); grid.xaxis() grid.points(0.3, unit(2, "native")) grid.line.to(0.3, unit(2, "native")) # la oss lage en variant over dette. istedenfor at # vi har faste verdier for hvor stor grafen skal vaere # i bredde og hoeyde, la oss variere dette fritt hver # gang, vi putter inn <- function(i1, i2) { foran og # en } bak, og vi setter w = i2, h = i1 istedenfor # w = 0.8, h = 0.8 helt i begynnelsen. vi lager altsaa # en funksjon av det. la oss kalle den our_probe. # da maa vi ogsaa putte inn our_probe(0.3, 0.5) eller # noe slikt etterpaa for aa se resultatet. Og vi kan # saa prove our_probe(0.2, 0.6) og slikt uten aa paste # inn paa nytt! require(grid) our_probe <- function(i1, i2) { pushViewport( viewport(w = i2, h = i1, layout = grid.layout(1, 3, widths = unit(rep(1, 3), c("null", "inches", "null"))))) pushViewport(viewport(layout.pos.col = 1, yscale = c(0, 4))) grid.grill() grid.yaxis() grid.xaxis() grid.points(0.5, unit(2, "native")) grid.move.to(0.5, unit(2, "native")) popViewport() pushViewport( viewport(layout.pos.col = 3, yscale = c(0, 2))) grid.grill(); grid.yaxis(); grid.xaxis() grid.points(0.3, unit(2, "native")) grid.line.to(0.3, unit(2, "native")) } our_probe(0.3, 0.5)