<- function(){
min_func print("hello")
}
Funksjoner
Hva er en funksjon?
En funksjon er en kodedel som kan brukes om og om igjen. De ligner på SAS-makroer og brukes til å automatisere prosesser. Den har en input (det som sendes inn til funksjonen) og en output (det som kommer ut).
En parameter er tilleggsinformasjon som sendes inn til funksjonen for å spesifisere videre hva funksjonen skal gjøres.
Bruk av funksjoner kan være nyttig for gjenbruk og abstraksjon.
Lage en enkel funksjon
Vi lager en funksjon ved å allokere et navn og spesifisere function()
:
Etterpå kan vi kjøre funksjonen med:
min_func()
[1] "hello"
Lage en funksjon for fylke
Her skal vi lage en funksjon som kan ta kommunenummer som input og returnere fylkenummer. Vi spesifiserer kommunenummer som en parameter i funksjonen. Vi bruker substr()
for å plukke ut de første to sifferne.
<- function(kommunenr){
lage_fylke substr(kommunenr, 1, 2)
}
lage_fylke("0301")
[1] "03"
Funksjoner kan gå over flere linjer. Den siste linjen er det som returneres. Hva som returneres kan også spesifiseres med return()
ved behov, særlig nyttig i komplekse funksjoner med flere output.
Flere parameter
Funksjoner kan ta mer enn èn paramter. For eksempel i fylke-funksjonen kanskje vi ønsker å sjekke lengden for å se om ledende 0-ere har falt av.
<- function(kommunenr, sjekk_lengde){
lage_fylke if(sjekk_lengde == TRUE){
<- ifelse(nchar(kommunenr) == 3,
kommunenr paste("0", kommunenr, sep = ""),
kommunenr)
}<- substr(kommunenr, 1, 2)
fylke
fylke }
lage_fylke(kommunenr = "301", sjekk_lengde = TRUE)
[1] "03"
lage_fylke(kommunenr = "301", sjekk_lengde = FALSE)
[1] "30"
Standard/default parameter
Vi kan sette standard parameter verdier for å slippe å spesifisere hver gang. For eksemepel, samme funksjon over kan ha sjekk_lengde=TRUE
som standard parameter.
<- function(kommunenr, sjekk_lengde = TRUE){
lage_fylke if(sjekk_lengde == TRUE){
<- ifelse(nchar(kommunenr) == 3,
kommunenr paste("0", kommunenr, sep = ""),
kommunenr)
}<- substr(kommunenr, 1, 2)
fylke
fylke
}
lage_fylke("301")
[1] "03"
Noen ganger kalles disse for “named parameters” eller “keyword arguements”. Standard parameter kommer alltid til sist.
Globalt vs, Lokalt-miljø
Når vi lager en funksjon, lager vi et lite lokalt-miljø. Varaiabler som lagres inn i en funksjon påvirker ikke det globale miljøet og blir slettet når funksjonen er ferdigkjørt. For eksempel, om vi har en enkel funksjon som returnerer verdien av parameter x
vil ikke dette påvirkes om vi har en x i det globale miljøet:
<- function(x){
funcx
x }
<- 2
x funcx(x = 4)
[1] 4
x
[1] 2
Varsling i funksjoner
Noen ganger ønsker vi at funksjonen skal si ifra om noe er litt rart eller feil. For at funksjonen skal stoppe bruker vi stop()
. For at det skal gi et varsel bruker vi warning()
.
For eksempel, her stopper funksjon om kommunenr kun er 2-siffer. Ved 3-siffer gis et varsel at en ledende 0 er lagt på.
<- function(kommunenr){
lage_fylke if (nchar(kommunenr) <= 2){
stop("Kommune nummer var ikke gjeldig.")
}if (nchar(kommunenr) == 3){
warning("Kommunenummer er lendge 3 og har blitt fylt med en ledende 0\n")
<- paste("0", kommunenr, sep = "")
kommunenr
}<- substr(kommunenr, 1, 2)
fylke
fylke }
lage_fylke(kommunenr = "03")
lage_fylke(kommunenr = "301")
Warning in lage_fylke(kommunenr = "301"): Kommunenummer er lendge 3 og har blitt fylt med en ledende 0
[1] "03"
lage_fylke(kommunenr = "0301")
[1] "03"