K

Programering i R

Föreläsning 1: Introduktion

Josef Wilzén

STIMA, Linköpings universitet

Uppdaterad 2017-01-24 10:00:34

Föreläsning 1: Innehåll

  • Kursens upplägg och praktisk information
  • R, R-Studio och vetenskaplig programmering
  • Introduktion till programering i R
    • R som miniräknare
    • Variabler
    • Numeriska vektorer
  • Att söka hjälp
  • Funktioner
  • Logik

Kursens upplägg och praktisk information

Lärare

Föreläsare:

  • Josef Wilzén
  • Måns Magnussson

Labbassar:

  • Linn Mattsson, Georgia Mushe, Faton Rekathati, Joakim Bäcklund och Konrad Nelson

Kursens mål

Information om kursen finns i kursplanen. Denna kan sammanfattas till:

  • Mål 0. Bli bekväma med datorer
  • Mål 1. Tänka som en programmerare. Ställa upp problemet rätt. Struktur.
  • Mål 2. Skriva en (mindre) programkod.
  • Mål 3. Bli bekväma med R. Förstå hur du kan använda R i ditt framtida statistiska arbete.
  • Mål 4. Ha kul!

Flipped Learning

Kursen kommer innehålla inslag av flipped learning. För mer info se här och här

“Flipped Learning is a pedagogical approach in which direct instruction moves from the group learning space to the individual learning space, and the resulting group space is transformed into a dynamic, interactive learning environment where the educator guides students as they apply concepts and engage creatively in the subject matter.” http://flippedlearning.org/

Kursens delar

Kursen består av två delar:

  • Del 1: Grundläggande programering
  • Del 2: Tillämpningar

Varje vecka (block):

  • En interaktiv föreläsning (med uppföljning av förra veckan)
  • En obligatorisk datorlaboration och en obligatorisk fråga
  • 4 timmar lärarledd laboration + många timmar eget arbete
  • Inlämning:
    • Fråga: varje fredag kl. 18.00 via LISAM
    • Labbar: varje onsdag kl. 18.00 via LISAM

Kursens delar

  • Fråga:
    • Varje vecka ska ni konstruera en fråga baserat på veckans innehåll.
    • Ni väljer själva vilken fråga ni vill ställa, men den ska vara relevant i er inlärning
    • T.ex. saker som är svåra att förstå, viktiga koncept etc

Kursens delar

  • Interaktiv föreläsning:
    • Den första delan av föreläsningen varje vecka kommer att ha en interaktiv del (ca 30 min)
    • Innehållet på den interaktiva delen kommer bero på vilka frågor som har lämnats in.
    • Det “vanliga” innehållet på föreläsningen kommer att gås igenom i mån av tid

Del 1: Grundläggande programering

  • Grunderna för programmering i R
  • Fyra föreläsningar
  • Fyra labbar
  • Labbarna görs en och en

Del 2: Analys, datumhantering, strängar/regexp, paket och grafik

  • Statistisk analys med R
  • Fyra föreläsningar
  • Fyra labbar
  • Labbarna görs genom parprogrammering
  • Miniprojekt i två delar

Kursens viktigaste moment:

alt text

Eget arbete med labbarna!

Praktisk information

Kurslogistik

Hemsidan innehåller bland annat schema, föreläsningar m.m. och finns [här]. Kursen har också en github-sida [här]

LISAM: används för inlämning av labbar, frågor och kompletteringar.
Slack: används för kommunikation, ni kommer få en inbjudan. Andra labbpasset varje kursvecka -> frågor på Slack

Kurskod: 732G33

Programvara

För denna kurs krävs R och R-Studio.

Kurslitteratur I:

Kursboken

Kursboken A first course in statistical programming with R av Braun och Murdoch, första eller andra upplagan.

Artiklar

Kurslitteratur II:

Videoföreläsningar

  • Google Developers (GD) videomaterial [här]
  • Roger Pengs föreläsningar (RP) [här]

Reference cards:

Ett par sidor med viktiga funktioner i R. [ladda ned] Hjälp till RStudio [ladda ned] Det kommer flera reference cards under kursens gång.

Examination

  • Datorlabbar, 8 st
  • Inskickade frågor, 8 st
  • Datortentamen i datorsal
    • Hjälpmedel: R reference card v.2 (digitalt) + ett par till reference cards

Datorlaborationer

  • Börja direkt!
  • Är obligatoriska.
  • ~ 15 h arbete
  • Laborationsmall finns på hemsidan, kolla här
  • Labbarna lämnas in via LISAM och autorättas
    • R-paketet markmyassignment
  • Filer på kurshemsidan
  • 100 % rätt för godkänt
  • Vissa labbuppgifter är inspirerade av linjär algebra

Datorlaborationer

  • Registrera er på kursen för att få tillgång till kursrummet på LISAM
  • Arbetstakt:
    • kursveckorna går tisdag till tisdag
    • Kursen går på halvfart ~ 20 h/vecka, varav ca 15 till labbar
    • Hård deadline: onsdag kl 18.00 veckan efter, dvs 1 feb för labb 1.
  • Kompletteringar:
    • Labb 1-4: komplettering strax efter halva kursen
    • Komplettering i samband med tentan och omtentor

markmyassignment

  • Paket för direkt återkoppling på labbar
  • Underlätta lärandet
  • Kom gärna med synpunkter!
set_assignment()
show_tasks()
mark_my_assignment()

Datorn, programering och R

Datorns delar

Datorns delar

R och datorn

  • En bra minnesregel är:
    • Hårddisk = I bokhyllan
    • Internminne (RAM) = På skrivbordet

R arbetar på i internminnet (skrivbordet)

Vad är programering?

  • Instruera en dator att utföra uppgifter
  • Mjukvaruutveckling / vetenskaplig programmering
  • Lågnivåspråk / Högnivåspråk
  • Kompilerande / Intepreterande språk

Varför programera?

  • Hantera (stora och komplexa) data
  • Replikerbarhet i analyser
  • Utföra komplexa beräkningar
  • Utföra och automatisera (tråkiga) rutinuppgifter
  • Effektivt användande av tid

Vad är R?

  • Populäraste programmeringsspråket för statistiker
  • Bygger på öppen källkod (gratis och transparent)
  • Många utvecklare - stor funktionalitet
  • Finns för Windows, Mac och Linux
  • Högnivåspråk (enklare)
  • Mer information i RP:s video “Overview and Background”
  • Ett “klister” för statistiska analyser

Ett exempel på ett program

Skapa ett program som utgår från talet 7 och skriver sedan de följande 3 udda talen på skärmen.
Programmet ska avslutas med meddelandet ’Klar!’.

I R ser det ut på följande sätt

talet <- 7
for (i in 1:3) {
  talet <- talet + 2 
  print(talet)
}
print("Klar!")

Resultatet

Kör vi koden i R får vi följande resultat:

[1] 9
[1] 11
[1] 13
[1] "Klart!"

Introduktion till programering i R

Installation av R och R-Studio

R

  1. Gå till https://cran.r-project.org/
  2. Välj ditt operativsystem, ladda ned och installera R

R-Studio

  1. Gå till http://www.rstudio.com/
  2. Powerful IDE for R > Download now > Download RStudio Desktop
  3. Välj ditt operativsystem, ladda ned och installera R-Studio

Se kurshemsidan för mer info.

Demo: R och R-Studio

Variabler (objekt) och vektorer i R

  • “spara” värden
  • Vektorer är 1+ element av samma typ (ex. heltal).
  • Jmf. linjär algebra.
  • Skapas (enklast) med c()
  • Indexering/slicing med [ ] Exempel:
testScore <- c(7,15,20,23,1.2)
testScore[3]
[1] 20

Vektoraritmetik

  • Sker elementvis
testScore <- c(7,15,20,23,1.2)
testScore * 2
[1] 14.0 30.0 40.0 46.0  2.4
  • Recycling
x <- c(5,2,1)
y <- c(7,4)
y + x
[1] 12  6  8

Att söka hjälp

  • Hjälpen i R
  • Google, Google, Google
  • Stack overflow / R help
  • Sök på engelska
  • Sök / studera på felmeddelandet från R
Error in eval(expr, envir, enclos) : object 'x' not found
  • Mer information i RP:s video “How to get Help”

Demo: Variabler och vektorer

Variabeltyper

Variabeltyper

  • Olika typer av värden på variabler, ex:
    • Heltal, Numeriska värden, Textsträngar
  • Kallas för atomära klasser
  • För att undersöka vilken klass en variabel har används: typeof()
  • För att konvertera mellan klasser används as. - funktioner (finns för alla variabeltyper). Ex:
as.character(1:5)
[1] "1" "2" "3" "4" "5"

Variabeltyper, översikt

Beskrivning Synonymer typeof() Exempel i R
Heltal (\( \mathbb{Z} \)) int integer -1, 0, 1
Reella tal (\( \mathbb{R} \)) real, double, float numeric 1.03, -2.872
Komplexa tal (\( \mathbb{C} \)) cplx complex 1 + 2i
Logiska värden boolean, bool, logi logical TRUE FALSE
Textsträngar string, char character Go R!

Introduktion till funktioner i R

Introduktion till funktioner

  • “Allt som existerar är objekt, allt som sker är funktioner”
  • Tar noll eller flera argument
  • Flera funktioner samlas i R-paket
  • Många och små funktioner är det bästa!
  • Kod som vi vill använda flera gånger
  • Svårare att felsöka än vanlig kod.
  • Grunden för bra och säker kod. Modularisering. Testbarhet.

Introduktion till funktioner

Function

Funktioners struktur

En funktion i R består (ofta) av:

  • ett funktionsnamn (ex. f)
  • en funktionsdefinition: function()
  • 0 eller flera argument (ex. x och y)
  • “curly bracers” {}
  • programkod / funktionen (ex. res <- x + y)
  • returnera värde (ex. return(res))

Exempel på funktion

f <- function(x, y){
  resultat <- x + y
  return(resultat)
}
f(x = 3, y = 2)
[1] 5

Lokal miljö

  • “Det som sker i funktionen, stannar i funktionen”
f <- function(x, y){
  z <- 1
  res <- z+x+y
  return(res)
}

Lokal miljö II

ls()
[1] "f"         "i"         "talet"     "testScore" "x"         "y"        
f(1,2)
[1] 4
ls()
[1] "f"         "i"         "talet"     "testScore" "x"         "y"        

Att tänka på med funktioner

  • Funktionen måste “köras” innan den fungerar
  • return() avslutar funktionen
  • Skriv i flera delar
    • Börja med kod som fungerar
    • Lyft in i funktionen
    • Pröva funktionen

Demo: Introduktion till funktioner

Logik

Kort om logik

  • Logiska värden återkommer ofta
  • De logiska värdena: TRUE, FALSE, NA
  • Skapas på två sätt:
    • Som vanliga vektorer
    • Med relationsoperatorer
  • Kan användas för indexering

Kort om logik II

minVektor <- c(12,1,2,7)
minBool <- c(TRUE, FALSE, FALSE, TRUE)
minVektor[minBool]
[1] 12  7

Logiska operatorer

  • Boolsk algebra
  • Operatorer:
Operator Symbol Operator i R
och (and) \( \wedge \) &
eller (or) \( \vee \) \( | \)
icke (not) \( \neg \) !

Logiska operatorer (forts.)

Symbol \( A \) \( B \) \( \neg A \) \( A \wedge B \) \( A \vee B \)
i R A B !A A & B A \( | \) B
TRUE TRUE FALSE TRUE TRUE
TRUE FALSE FALSE FALSE TRUE
FALSE TRUE TRUE FALSE TRUE
FALSE FALSE TRUE FALSE FALSE
  • Kan kombineras för komplicerade uttryck:
(FALSE & !TRUE) | FALSE
[1] FALSE

Relationsoperatorer

  • Jämförelser
  • I R reference card v.2 under operatorer
  • Skapar logiska vektorer
Beskrivning Operatorer i R
Lika med ==
Inte lika med !=
Större än >
Mindre än <
Större än eller lika med >=
Mindre än eller lika med <=
Finns i %in%

Relationsoperatorer (Exempel)

x <- c(1, 2, 3, 4, 5)
x != 5
[1]  TRUE  TRUE  TRUE  TRUE FALSE
x > 2
[1] FALSE FALSE  TRUE  TRUE  TRUE

Kort om logik III - Allt på en gång

minVektor <- c(12,1,2,7,99)
minBool <- minVektor > 5 & minVektor < 50
minVektor[minBool]
[1] 12  7

Demo: Logik