# dette er r-info02.txt av a.t. # disse .txt filene er lette aa lagre i egen computer og aapne # i hvilken som helst tekst editor. Copy og paste fra en editor # er saerlig enkelt naar du bruker en tekst editor som er hyperenkel, # uten fontvariasjoner, men det skulle gaa aa copy og paste fra # de fleste editorer, og ogsaa fra firefox direkte, inn i R. # pass paa at naar du velger copy skal du ha med en linjeskift # ETTER siste linje. sjekk naar du paster at linjeskift er kommet # med -- at ingen linje 'henger' igjen paa slutten. hvis det er # linje som 'henger' igjen, tast linjeskift manuelt etter at du # har pastet for at alt skal gaa som det skal. # programmeringsspraaket R har samme stringens som man forventer # av et godt programmeringsspraak, men det har visse tilpasninger # som gjoer det lettere aa bruke i form av inntastete linjer som # lager grafikk mer eller mindre med det samme. Disse forenklinger # er knyttet til at hvis en funksjon normalt har la oss si fem # inputs -- parametere, som vi sier, kan du ofte likevel bare gi den # noen faa parametere, og den gjoer jobben sin likevel. Den bruker # da standardverdier der du ikke har spesifisert dine egne verdier. # denne fleksibiliteten betyr at hvis funkjonen funk1(a, b, c, d, e) # skal kjoeres og du bare vil spesifisere la oss si a og d, maa du # ha en metode for aa angi a og d inne i funksjonen. Alternativet # ville vaere aa fylle opp med masse kommaer. Saa du vil ofte finne # likhetstegn = inne i funksjonene -- noe slikt som funk1(a=3, d=5) # som et abstrakt eksempel. # naar du skal definere noe nytt, eller gi dine data et navn inne # i R, slik at R kan sjonglere frem grafer ved aa bruke dette navnet, # i et lite R program, bruker du en venstre-pil, <- for dette. # du kan lese <- som "settes til", og du kan ogsaa tenke paa <- # som en variant av =, "er lik". I noen tilfeller kan du lese <- # som "defineres som". # hvis du har laget en graf men trenger aa modifisere den, og du # skriver ting inn i en tekstbehandler og bruker Copy og deretter # Paste inn i R, kan du lett endre materialet og proeve paa nytt. # noen ganger maa du da ta quit() eller q() for aa forlate R, # slik at R resettes og er klar til bruk med friske data. # paa denne maaten kan du bygge opp de grafer som gir den beste # foerste-hands fremstilling av tallene i dine matriser. # vi skal fortsette med eksempler med minimal forklaring til aa # begynne med. men vit at hvert eneste ord i R har en eksakt # forklaring. det er ingen 'fuzziness' over betydningen av de # ulike ordene. alt kan hentes frem via R manualene. vi tror # imidlertid at motivasjonen for aa se paa ulike definisjoner # er mye stoerre naar du har en viss ide om hva slags R uttrykk # som gir hva slags grafer; du kan da stille deg inn paa aa # omskape de grafer som er naermest de du selv trenger ved at # du leser forklaringer i manual (og her) saerlig knyttet til # disse eksempler. sammen med hver eksempel-samling, skal vi gi # litt nye kommentarer som birdrar til innsikt i R, men vektlegge # 'doing' fremfor masse abstrakt snakk. # merk at her er det bruk av mer enn en { inne i et avsnitt, og # antallet } skal matche. Saa naar du ser to stk. { i et avsnitt, # skal det vaere to stk } lenger ned i samme R avsnitt. # avslutt R (ved at du skriver quit() og presser linjeskift) og # start opp R paa nytt. Proev aa paste alt som foelger -- helt frem # til popViewport(3) og frem paa skjermen, hvis alt er som det skal # med R installasjonen, skal komme en farget "barplot" med # noen tilfeldige data: require(grid) barData <- matrix(sample(1:4, 16, replace = TRUE), ncol = 4) boxColours <- 1:4 bp <- function(barData) { nbars <- dim(barData)[2] nmeasures <- dim(barData)[1] barTotals <- rbind(rep(0, nbars), apply(barData, 2, cumsum)) barYscale <- c(0, max(barTotals)*1.05) pushViewport(plotViewport(c(5, 4, 4, 1), yscale = barYscale, layout = grid.layout(1, nbars))) grid.rect() grid.yaxis() for (i in 1:nbars) { pushViewport(viewport(layout.pos.col = i, yscale = barYscale)) grid.rect(x = rep(0.5, nmeasures), y = unit(barTotals[1:nmeasures, i], "native"), height = unit(diff(barTotals[,i]), "native"), width = 0.8, just = "bottom", gp = gpar(fill = boxColours)) popViewport() } popViewport() } legLabels <- c("Group A", "Group B", "Group C", "Something Longer") boxSize <- unit(0.5, "inches") leg <- function(legLabels) { nlabels <- length(legLabels) pushViewport(viewport(layout = grid.layout(nlabels, 1))) for (i in 1:nlabels) { pushViewport(viewport(layout.pos.row = i)) grid.rect(width = boxSize, height = boxSize, just = "bottom", gp = gpar(fill = boxColours[i])) grid.text(legLabels[i], y = unit(0.5, "npc") - unit(1, "lines")) popViewport() } popViewport() } grid.rect(gp = gpar(lty = "dashed")) legend.width <- max(unit(rep(1, length(legLabels)), "strwidth", as.list(legLabels)) + unit(2, "lines"), unit(0.5, "inches") + unit(2, "lines")) pushViewport(viewport(layout = grid.layout(1, 2, widths = unit.c(unit(1,"null"), legend.width)))) pushViewport(viewport(layout.pos.col = 1)) bp(barData) popViewport() pushViewport(viewport(layout.pos.col = 2)) pushViewport(plotViewport(c(5, 0, 4, 0))) leg(legLabels) popViewport(3) # det fungerte? bra! naa ta quit() ut av R og start R paa nytt, # og paste det samme inn en gang til. du vil se variasjoner # knyttet til at det er tilfeldige inngangsdata -- istedenfor # data fra forskningsarbeide. Disse saa kalte 'random generators' # er naturligvis ikke ekte random (det er en filosofisk debatt # om noe slikt overhodet kan finnes). De er, naermere bestemt, # 'relative frie fluktuasjoner' generert av en eller annen # litt komplisert aritmetisk funksjon. (I eget arbeid kaller # vi dette derfor for RFFG heller enn random slik at vi har en # presisjon, men RFFG er ikke et uttrykk som brukes i R-spraaket.)