Hei,
Velkommen til den andre øvelsen i BIO104 - Komparativ fysiologi. Som en del av kurset har dere her mulighet for å utvide kunnskapene i R ved å:
Øvelsen skal utføres i R/RStudio. Vi på bioST@TS har utviklet denne siden for å hjelpe deg med å komme i gang med R/RStudio og å løse oppgavene i denne øvelsen.
Du kan også gå tilbake til forrige lab-øvelse i mikrobiologi hvis du har behov for å friske opp i R.
Gå til fanen Files og klikk på filen Bio104_Template_rapport.Rmd.
Filen åpnes øverst til venstre og viser malen til rapporten.
Denne filen er skrevet i Rmarkdown-format som gjør redigeringsprosessen pålitelig.
Ved bruk av den forhåndsinstallerte R-pakken knitr og knappen Knit, produserer RStudio et ferdigformatert dokument med figurer, titler og tekst.
I denne seksjonen skal du skrive en introduksjon til forsøket
Les og følg instruksjonene i malen.
Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.
Når man skriver vitenskaplige tekster, så har man ofte behov for å bruke matematiske symboler. I Rmarkdown kan man enkelt sette inn alle mulige symboler i teksten.
Dette gjør man med å skrive inn symbol-navnet mellom to dollar-tegn ($) og setter en omvendt skråstrek foran symbolet (\).
Hvis vi for eksempel ønsker å sette inn symbolet \(\Psi\) (psi), så skriver vi $\Psi$. Merk her at vi skriver Psi med stor forbokstav. Dette gjør vi for å få “stor-bokstav” av symbolet. Man kan også skrive psi som lite symbol med å skrive $\psi$ og da ser symbolet slikt ut \(\psi\).
Hvis du ønsker å legge til hevet eller senket skrift i symbolene så bruker man _{} for senket skrift og ^{} for hevet skrift.
Vi kan f. eks. skrive \(mc^{2}\) ved å sette inn $mc^{2}$ eller \(CO_{2}\) ved å sette inn $CO_{2}$.
Merk at bokstavene mc og CO blir i kursiv og vises som et matematisk symbol. For å lage hevet og senket skrift utenom matematiske formler kan man bruke tilde (~) for senket og hatt (^) for hevet. For eksempel H~2~SO~4~ gir H2SO4 og Fe^2+^ gir Fe2+.
For å lage de to ligningene som kan være relevant for dette forsøket så kan man skrive:
$\Psi = \Psi_{o} + \Psi_{p} + \Psi_{m}$
for å få:
\(\Psi = \Psi_{o} + \Psi_{p} + \Psi_{m}\)
og skrive:
$\Psi_{s} = -miRT$
for å få:
\(\Psi_{s} = -miRT\)
Hvis du klikker her, så finner du en oversikt over nyttige symboler og hvordan man bruker dem.
I denne seksjonen skal du beskrive hvordan eksperimentet ble utført og hvordan målingene ble registrert. Les og følg instruksjonene i malen. Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.
I denne seksjonen skal du presentere resultatene. Les og følg instruksjonene i malen. Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.
I dette lab-forsøket står dere veldig fritt i forhold til hvordan dere ønsker å sette opp øvelsen. Derfor er det også mange alternativer for hvordan man ønsker å vise resultatene sine.
I de neste seksjonene forklarer vi:
Dette er bare eksempler og dere står fritt til å presentere resultatene slik dere ønsker.
Har du problemer med R så er det mange steder hvor du kan få hjelp.
"Help will always be given at UiB for those who ask for it" :)
Ofte kan det være nytte å presentere resultatene i form av en tabell (Tabell 1). Vi har vist et eksempel fra et tidligere plantelab-forsøk, men oppbyggen for andre tabeller vil være den samme.
| Tube | Manntitol (mL) | Destilled water (mL) | Final mannitol concentration (mol/L) |
|---|---|---|---|
| P1 | 0 | 10 | 0 |
| P2 | 3 | 7 | 0.15 |
| P3 | 4 | 6 | 0.2 |
| P4 | 5 | 5 | 0.25 |
| P5 | 6 | 4 | 0.3 |
| P6 | 7 | 3 | 0.35 |
| P7 | 8 | 2 | 0.4 |
| P8 | 9 | 1 | 0.45 |
| P9 | 10 | 0 | 0.5 |
Vi kan bygge opp en slik tabell i R ved å lage en matrix av dataene.
I koden nedenfor henter vi opp funksjonen matrix. Her legger vi inn tre parametre c(), ncol og byrow.
table_methods <- matrix( c(
"P1", 0, 10, 0.00,
"P2", 3, 7 , 0.15,
"P3", 4, 6 , 0.20,
"P4", 5, 5 , 0.25,
"P5", 6, 4 , 0.30,
"P6", 7, 3 , 0.35,
"P7", 8, 2 , 0.40,
"P8", 9, 1 , 0.45,
"P9", 10,0 , 0.50), ncol=4, byrow=TRUE)
# Kode over og under vil gi samme resultat
table_methods <- matrix(c("P1", 0, 10, 0.00,"P2", 3, 7 , 0.15,"P3", 4, 6 , 0.20,"P4", 5, 5 , 0.25,"P5", 6, 4 , 0.30,"P6", 7, 3 , 0.35,"P7", 8, 2 , 0.40,"P8", 9, 1 , 0.45,"P9", 10,0 , 0.50), ncol=4, byrow=TRUE)Inni parantesen til c() legger man inn dataene man ønsker å sette inn i tabellen. Hvert element separeres med bruke komma (,) og desimal-tall defineres med å bruke punktom (.). Dataene her vil leses kronologisk og fylles inn i hver kolonne i tabellen (fra venstre mot høyre).
For at R skal forstå hvor mange elementer som skal leses før den skal fylle kolonnene i neste rad, så definerer vi antall kolonner med å bruke ncol. I eksempelet ovenfor, så har vi brukt ncol=4 som vil si at R henter ut fire elementer fra listen c() og legger hvert element i en kolonne bortover første rad. Deretter vil den hente ut de fire neste elementene fra c() og legge til disse i de samme kolonnene, men i raden under.
Parameteren byrow=TRUE forteller at elemene som leses skal fylles opp i rader (horisontalt) og ikke nedover i kolonner (vertikalt).
Neste steg er å sette navn på kolonnene. Dette gjør man ved å bruke colnames(). Her må vi hente opp matrixen vi lagde over som vi kalte table_methods og navngi kolonnene kronologisk bortover slik som vist nedenfor:
# Defining column names
colnames(table_methods) <- c("Tube", "Manntitol (mL)","Destilled water (mL)", "Final mannitol concentration (mol/L)")
# Defining row names
rownames(table_methods) <- NULLMerk, siden vi ikke har navn på radene i dette eksempelet, så kan vi sette denne til å være NULL. Hvis du ønsker å navngi radene, så fylles denne inn på tilsvarende vis som for colnames()
Før vi kan printe tabellen, så må matrixen omgjøres til å være i et tabell-format. Vi bruker funksjonen as_tibble() for å gjøre om matrixen til en lesbar tabell. En tibble-tabell er både modulerbar og mye brukt i R.
I neste steg henter vi opp en pakke fra knitr som heter kabel. Denne kan printe ut en fin tabell i Rmarkdown. Her definerer vi tabellteksten vår under caption. Vi har også definert at vi ikke har rad navn (row.names=FALSE) og at all tekst skal stå sentrert (align = “c”).
# Combine the above input as a table
table_methods <- as_tibble(table_methods)
# Creating the visual output
knitr::kable(table_methods, caption = "Tabel 1: Her kan du beskrive hva denne tabellen inneholder.", row.names = FALSE, align = "c")
Slik vil hele tabell-oppsettet se ut:
# Filling in the table
table_methods <- matrix( c(
"P1", 0, 10, 0.00,
"P2", 3, 7 , 0.15,
"P3", 4, 6 , 0.20,
"P4", 5, 5 , 0.25,
"P5", 6, 4 , 0.30,
"P6", 7, 3 , 0.35,
"P7", 8, 2 , 0.40,
"P8", 9, 1 , 0.45,
"P9", 10,0 , 0.50), ncol=4, byrow=TRUE)
# Defining column names
colnames(table_methods) <- c("Tube", "Manntitol (mL)","Destilled water (mL)", "Final mannitol concentration (mol/L)")
# Defining row names
rownames(table_methods) <- NULL
# Combine the above input as a table
table_methods <- as_tibble(table_methods)
# Creating the visual output
knitr::kable(table_methods, caption = "Tabel 1: Her kan du beskrive hva denne tabellen inneholder.", row.names = FALSE, align = "c")Hvis du ønsker å legge til et bilde i rapporten så kan du enkelt gjøre dette med å bruke kommandoen under:
{width=100%}
Figur X: Dette er en potet
[] skriver man figurtektsen.() spesifiseres filstien til bildet.
Bilder. Denne mappen og bilde må være plasser på samme sted på datamaskinen som prosjektfilen du arbeider i.{width=100%}.Merk, bilde-kommandoen legges direkte i teksten og ikke i en code-chunk.
Det er også mulig å legge til flere bilder etterhverandre, men vær OBS på at vi her mangler figur-annotering per bilde! Dette må eventuelt legges inn i bildet på forhånd eller så kan du legge til disse gjennom R ved å følge stegene i neste seksjon (4.2.2).
{width=20%} {width=22%} {width=29%}
Figur X: Dette er en spire som blomstrer
Figur X: Dette er en spire som blomstrer
For å legge til figur-annotering i R må man installere og bruke to pakker som heter cowplot og patchwork:
install.packages("cowplot")
ELLER
remotes::install_github("wilkelab/cowplot")
OG
install.packages("patchwork")
Figure 1: Blomster vekst kort tidsinterval
Figure 2: Blomster vekst langt tidsinterval
Vi må starte med å laste inn nødvendige pakker for å kunne sette inn bilder på denne måten i R.
library(tidyverse)
library(cowplot)
library(patchwork)Merk, legg gjerne til message=FALSE, warning=FALSE i chunck setup for å unngå at det kommer opp synlige meldinger i dokumentet etter at det knittes:
{r, message=FALSE, warning=FALSE}
Neste steg er å laste inn de bildene en ønsker å bruke og lagre dem i hver sitt objekt som vi her kaller “img1”, “img2” “img3”. Fil-lokasjonen til bildene må ligge i samme mappe som prosjektfilen du arbeider i. Her har vi hentet opp bildene blomst 1,2 og 3 i en mappe som heter Bilder. Har du flere bilder repeterer du bare linjene nedenfor og gir nye objekt-navn (img4, img5, img6…).
img1 <- file.path("Bilder/blomst1.png")
img2 <- file.path("Bilder/blomst2.jpg")
img3 <- file.path("Bilder/blomst3.jpeg")
Neste steg er å lage et tomt “område” hvor vi skal sette inn bildene og vi bruker plottefunksjonen til dette:
p <- ggplot() +
theme(panel.background = element_blank())
Deretter må vi bruke ggdraw for at R skal lese inn bildet riktig. Har du flere bilder legger du til flere tilsvarende linjer og gir nye objektnavn (p4, p5, p6…). Det er også mulig å skalere hvert enkelt bilde med å sette inn scale=1, hvor 1 er orginal størrelse på bildet. Hvis vi for eksempel ønsker å øke størrelsen til et av bildene kan vi øke scale=1.4 eller vi kan minke størrelsen ved å skrive scale=0.8.
p1 <- ggdraw(p) + draw_image(img1, scale=1)
p2 <- ggdraw(p) + draw_image(img2)
p3 <- ggdraw(p) + draw_image(img3)
Nå kan vi legge inn bildene i den rekkefølgen man ønsker og plotte dem. Her bruker vi to symboler + (pluss) og / (skråstrek). Pluss-tegnet vil sette bildene ved siden av hverandre og skråstreken vil plassere bildet under det forrige.
Så for å plassere tre bilder ved siden av hverandre skriver vi p1+p2+p3 og slår dette sammen med funksjonen plot_annotation():
bildene <- p1+p2+p3
bildene + plot_annotation(tag_levels = "A")Merk, plot annotation er i eksempelet over satt til å være tag_levels = "A" som betyr at vi ønsker alfabetisk annotering (A,B,C,D…). Vi kan bytte om og skrive tag_levels = "1" hvis man heller ønsker at det skal være numerisk annotering (1,2,3,4…) på bildene.
Hvis man ønsker å endre på farge eller størrelse på annoteringene så må vi legge til funksjonen theme og kan her legge til color="red" og endre skriftstørrelse med size=24. Det er mange farger å velge mellom, og du finner en oversikt over disser her
bildene <- p1+p2+p3
bildene + plot_annotation(tag_levels = "1") &
theme(plot.tag = element_text(color = "red", size=24))
Hvis du ønsker å legge til flere bilder under hverandre, så er det viktig å bruke paranteser for å fortelle R hvor man ønsker å plassere bildene og med hvilke bilder man vil plassere dem sammen med, Hvis vi f. eks. ønsker å lage det samme bilde-plottet som vist i Figur 2, så må vi si at (p1+p2+p3) skal være sammen og under disse (/) skal (p4+p5+p6) være og under disse (/) skal (p7+p8+p9) være.
bildene <- (p1+p2+p3) / (p4+p5+p6) / (p7+p8+p9)
bildene + plot_annotation(tag_levels = "1") &
theme(plot.tag = element_text(color = "red", size=24))Hvis man ønsker å representere dataene sine i form av et plot (linjediagram, søylediagram, boksplott etc.), så finnes det mange måter å gjøre dette gjennom å bruke ggplot. Husk at ggplot ligger under pakken tidyverse, så du trenger bare å laste inn library(tidyverse) om du ønsker å bruke denne pakken.
geom_bar().
geom_boxplot().I denne seksjonen skal du tolke resultatene. Er det noe overraskende, uforventet eller rart med dataene? Har du en forklaring for det? Her kan du gi din mening. Husk å linke informasjonen fra introduksjonen til diskusjonen og linke argumenter til forskningslitteratur.
Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.
I denne delen skal du oppgi referanser og kilder som du har brukt i teksten til rapporten. Det er mulig å bruke en funksjon i R som heter citr som vil hjelpe deg å enkelt sette inn referanser og som vil automatisk generere en referanseliste når man knitter dokumentet.
Du finner en detaljert beskrivelse av hvordan man bruker denne funksjonen i mikrobiologi-delen ved å klikke her.
Hvis du trenger litt hjelp med å skrive den delen, kan du gå til denne bioSKRIV-siden.
Hvis man har resultater som man ikke viser i resultat-delen, så kan man gjerne supplementere disse i denne seksjonen (Appendix/Supplementary). Dette kan være f. eks. en tabell eller figur.
Når rapporten din er ferdig, så er det bare å trykke på knappen Knit (Figur 3).
Hvis alt er korrekt, så åpnes rapporten i et nytt vindu.
Les gjennom dokumentet.
Finner du noe feil, så kan du gå tilbake til malen og rette det.
Figure 3: Trykke på knit.
Hvis det ligger noen feil i koden din, skal fanen R Markdown (ved siden av Console) vise feilmelding istedenfor å skrive ut rapporten. Les feilmeldingen, rett feilen(e), og trykk på Knit igjen.
Liker du rapporten din akkurat som den er, så trykker du på Open in Browser øverst i vinduet.
Rapporten åpnes da i nettleseren din.
Trykk på CTRL + P (⌘ + P) for å skrive ut rapporten.
Du kan f. eks. skrive den ut i pdf-format.
Den er klar til innlevering.
Figure 4: Lagre som PDF.