# r-info05.txt i http://www.norskesites.org/r-programmering # vi trenger kanskje naa aa kikke litt paa hvordan r kan # lagre data paa disk og hente dem frem igjen. dette vil gi # oss mer kontroll ikke minst hvis vi fatter interesse for # et grafisk eksempel der vi har brukt noen innebygde data. # vi maa laere litt om mekanikken i dette, og ogsaa finne ut # hvordan analysere akkurat hvilke data som til enhver tid # ligger inne i vaar 'workspace'. # for at det ikke skal bli for abstrakt, avslutter vi med # et kjapt grafisk eksempel uten saerlige forklaringer, # sakset som foer fra noe av den veldige r standard dokumentasjonen! # to filer, .RData og .RHistory, kan lett oppstaa i folderen # som er arbeidsfolderen for ditt arbeid med R. Det kan vaere # greit aa vite at disse to filer -- som kanskje skjules litt, # slik det gjerne er i linux naar det er punktum foerst -- # kan fjernes, slik at du har en helt 'ren' oppstart hver gang. # hvis du svarer 'ja' for lagring av 'workspace' vil disse # filer gjenoppstaa. men visse programmer kan trenge en helt # ren workspace. se om du finner disse filene. bruker du # en linux for aa starte R, der du taster R for aa starte # den hver gang, vil kommandoen for aa fjerne dem vaere # noe slikt som rm .R* -i der du vil faa et spoersmaal # for fjerning av hver enkelt fil som begynner med .R # alternativt kan du sjekke hva som er i workspacen ved ls() # la oss si du lager en variabel y <- pi # denne kan du se ved at du skriver show(y) # og du kan se at du har y definert ved aa skrive ls() # la oss ogsaa lage en tilfeldighetsliste med 10000 elementer: x <- stats::runif(10000) # skriver du show(x) # faar du en lang liste. skriver du ls() # vil du se baade x og y. du kan fjerne dem inviduelt ved at # du skriver slikt som rm(x) og rm(y). du kan ogsaa slette # alt som er i workspacen ved kommandoen rm(list = ls()) # vaer forsiktig med rm (remove) kommandoer av denne typen # hvis du tror du burde lagre dataene foerst. la oss se paa # hvordan man kan lagre data. # hvis du skriver ls() og workspaces er empty vil du normalt # faa en melding av typen character(0) # denne 'null-karakteren' (som i noen dataspraak ogsaa kalles # for 'nil') er gjerne det interne datasymbolet som markerer # at en liste eller tekst er ferdig. hvis det er ingenting i # listen, er R slik at dette uttrykket character(0) kommer ut # istedet. det betyr med andre ord, 'det er ingenting aa liste'. # start opp r paa nytt og paste inn noe slikt som dette, der # vi lager x, y og w, der w bare har noen tilfeldig valgte # data elementer. # legg merke til at med moderne datamaskiner er lagring av # ogsaa store tallmengder i .txt (som ogsaa heter ASCII) # form raskt nok, mens tidligere var det viktig aa lage # mer kompakte filer dersom man hadde f.eks. ti tusen tall, # ellers ville datamaskinen oppfoere seg langsomt. fordelen # med .txt formatet, eller det saakalte ASCII-formatet, er # at tekstbehandlinger kan kikke paa filene, innholdet er # ikke skjult for dem; og de kan lett legges ut paa internet # og saa videre, og brukes ogsaa av andre programmer. manualen # til r reflekterer de antagelser som gjaldt tidligere i # databransjen, det moderne er bruk av ascii .txt filer ofte! # paste dette her, og ikke lagre workspace, og dermed vil # filen stat0001.txt ligge i den arbeidsfolderen for din bruk # av programmeringsspraaket r. du kan aapne den i en nettbrowser, # den vil ha blant andre ti tusen tilfeldige tall knyttet til x. x <- stats::runif(10000) y <- pi w <- list(price = 1000000, fivedoors = TRUE, color = "green") show(w) ls() options(save.defaults = list(ascii = TRUE)) save(list=ls(), file="stat0001.txt") q() # start opp r paa nytt, med ren workspace. hvis i tvil om at # den er tom, tast ls() og hvis du trenger aa slette den, kan # du altsaa skrive rm(list = ls()) eller du kan gaa ut av # r og fjerne de to arbeidsfilene .RData og .RHistory hvis du # finner dem. deretter proev noe slikt som dette: load("stat0001.txt") show(w) ls() show(y) # her vil du se dataene som vi hadde isted. du kan ogsaa se alle # de ti tusen tallene -- desimaltall mellom 0 og 1 -- som # x rommer i form av en array eller serie eller hva vi sier paa norsk: show(x) # dette ble veldig abstrakt, vi trenger litt grafikk hardcore. # her er ett av vaare lett bearbeidete eksempler trukket ut fra # den massive r dokumentasjonen -- mer eller mindre meningsfull # men hvert nytt eksempel inneholder noen nytt grafisk materiale # av en type som muligens er nyttig for en eller annen form # for fremvising av statiske data. merk at eldre element i R # finnes side om side med moderne R uttrykk, og det er # synonymer. uttrykket require er vanlig men 'library' er et # akseptabelt synonym. # dette eksemplet, databehandlingsmessig sett, har rotering # av tekst i 90 grader (rot = 90); det har skriving av tekst # og bruk av diverse linjesymboler inn i grafikken (med noen # enkle eksempeldata som ikke lagres noe sted, og som heller # ikke er tilfeldighets-genererte), og eksemplet bruker den # innebygde muligheten grid-pakken tilbyr for aa konvertere # stoerrelser mellom 'native' -- som henviser til grafikk- # rammen, viewporten's, antall piksler som vises paa # skjermen, og slik som 'inches' og 'centimeter'. hvis det # er noe her du vil bruke kan du senere kikke paa hvert # enkelt viktig element i manualen. her bruker vi det mest # for aa live opp denne pedagogiske rinfo-sesjonen! paste # dette her. require(grid) ps.options(pointsize = 12) options(width = 60) diagram.locn <- function(i, n, locn) { x <- i/(n+1) grid.lines(x = unit(rep(x, 2), "npc"), y = unit.c(unit(0, "npc"), locn)) grid.lines(x = unit(x, "npc") + unit(c(-2, 0, 2), "mm"), y = locn + unit(c(-2, 0, -2), "mm")) grid.text("shoe sales", x = unit(x, "npc") - unit(1, "mm"), y = locn - unit(3, "mm"), just = c("right", "bottom"), rot = 90) } diagram.dimn <- function(i, n, dimn) { x <- i/(n+1) pushViewport(viewport(x = unit(x, "npc"), y = unit(0, "native"), h = dimn, w = unit(1, "lines"), just = c("centre", "bottom"))) grid.rect() grid.text("spirits sales", rot = 90) popViewport() } pushViewport(viewport(w = 0.8, y=unit(1.7, "inches"), h = unit(4, "inches"), just = c("centre", "bottom"), yscale = c(-0.6, 1.3))) grid.grill(v = c(0, 1), h = seq(-0.5, 1, 0.5), default.units = "native") grid.rect() grid.yaxis() n <- 10 diagram.locn(1, n, unit(1, "native")) diagram.locn(2, n, unit(-0.4, "native")) diagram.locn(3, n, unit(0.4, "native")) diagram.locn(4, n, unit(1, "native") + unit(-0.4, "native")) diagram.locn(5, n, unit(1, "native") - unit(0.4, "native")) diagram.dimn(6, n, unit(1, "native")) diagram.dimn(7, n, unit(-0.4, "native")) diagram.dimn(8, n, unit(0.4, "native")) diagram.dimn(9, n, unit(1, "native") + unit(-0.4, "native")) diagram.dimn(10, n, unit(1, "native") - unit(0.4, "native")) pushViewport(viewport(yscale = c(-0.6, 1.3))) convertY(unit(1,'native'), "native") convertY(unit(-.4,'native'), "native") convertY(unit(1,'native')+unit(-.4,'native'), "native") convertY(unit(1,'native')-unit(.4,'native'), "native") convertHeight(unit(1,'native'), "native") convertHeight(unit(-.4,'native'), "native") convertHeight(unit(1,'native')+unit(-.4,'native'), "native") convertHeight(unit(1,'native')-unit(.4,'native'), "native") popViewport()