*apply
-funktionermark_my_file()
ctrl+shift+c
kommenterar/avkommenterar flera rader samtidigt.ctrl+L
rensar konsolenctrl+1
flytta markören till skriptctrl+2
flytta markören till konsolF1
hjälpalt+shift+k
Förstår jag uppgiften?
Dela upp problemet i små delar
Error i konsolen? (ofta syntaxfel)
Kommentera bort stora delar av koden
Sök på felmeddelandet på internet
Använd debugging!
Fråga om hjälp!
När ska jag använda flera if-satser och när ska jag använda if-else?
Det beror på problemet!
Vid flera oberoende ja/nej-frågor: upprepade if-satser
Vid ja/nej-frågor där svarat beror på svaret på tidigare frågor: if-else-sats
Oberoende ja/nej-frågor:
Beroende ja/nej-frågor
En funktion i R består av:
f
)function()
x
och y
){}
x + y
)return()
)utvärdet från funktionen (ex. f(3,2)
= 5 )
en egen (lokal) miljö där beräkningar görs
f <- function(x,y) {
z <- x^2 - y
return(z)
}
f
function(x,y) {
z <- x^2 - y
return(z)
}
class(f)
[1] "function"
formals(f)
$x
$y
body(f)
{
z <- x^2 - y
return(z)
}
environment(f)
<environment: R_GlobalEnv>
square_function <- function(x) {
return(x^2)
}
integrate(square_function, lower = 0, upper = 1)
0.3333333 with absolute error < 3.7e-15
f(1,5) # Samma som f(x = 1, y = 5)
[1] -4
f(y = 5, x = 1) # Samma som f(x = 1, y = 5)
[1] -4
return()
eller { }
för små funktionerf <- function(x) x^2 - 3
f(3)
[1] 6
f <- function(x = 10) x^2 - 3
f(3)
[1] 6
f()
[1] 97
Objekt kan definieras/skapas i…
objektnamn och objekt
R:s söklista:
namespaces
är laddadef <- function(x) x + y
Objektet/värdet för “fria” variabler undersöks i den miljö funktionen var definierad/skapad.
f <- function(x) x + y
f(3)
Error in f(3) : object 'y' not found
y <- 2
f(3)
[1] 5
search()
enviroment()
::
Undersöka laddade namespaces med search()
:
search()
[1] ".GlobalEnv" "package:knitr" "package:stats"
[4] "package:graphics" "package:grDevices" "package:utils"
[7] "package:datasets" "package:methods" "Autoloads"
[10] "package:base"
f<-function(x) x^2
environment(f)
<environment: R_GlobalEnv>
environment(base::mean)
<environment: namespace:base>
Att skapa / definiera objekt kallas att tilldela (assign)
assign()
<-
: tilldela i aktuell miljö <<-
: tilldela direkt till global miljö=
: kan användas, men avråds från (används för att definera defaultargument i funktioner)do.call()
och ...
(Ellipsis) i labbenBygger på artikeln Best practices for scientific computing som finns här
stop()
testthat
browser()
, debug()
Rprof()
#
roxygen2
system.time()
system.time(expr=mean(rep(c(1,2),1000000)))
user system elapsed
0.013 0.000 0.013
library()
::
)
base::mean()
install.packages()
(CRAN)devtools::install_github()
(GitHub)ls("package:MASS")
visar vilka funktioner som finns i paketet MASS.sessionInfo()
R.version.string
[1] "R version 4.0.3 (2020-10-10)"
Alla paket håller inte samma kvaliet. Följande tips för att granska:
För att komma igång med nya paket: vignetter
CRAN:
install.packages('lubridate')
install.packages('devtools')
GitHub:
library(devtools)
install_github('ropengov/pxweb')
# alt
devtools::install_github('ropengov/pxweb')
# läsa in:
library(lubridate)
# ta bort från aktuell session:
detach("package:lubridate", unload=TRUE)
SU-salar: Läsa in paket relaterade till kursen:
module add prog/r-mega-edition/20.08
ROxygendel | Innehåll |
---|---|
@title |
Anger titel för dokumentet |
@description |
En beskrivning vad funktionen gör |
@details |
Detaljer om funktionen |
@param |
Argument till funktionen |
@return |
Vad funktionen returnerar |
@references |
Eventuella referenser av intresse |
@seealso |
Andra funktioner som kan vara aktuella |
@examples |
Exempel på hur funktionen kan användas |
#' @title f
#' @description
#' En funktion som kvadrerar argumenten i x och y och summerar dem.
#' @param x
#' Den numeriska variabel x som ska kvadreras
#' @param y
#' Den numeriska variabel y som ska kvadreras
#'
#' @return
#' Funktionen returnerar en numerisk vektor
#'
f <- function(x, y) x^2 + y^2
lapply()
: loopar över element i en listatapply()
: loopar över ett index (ex. aggregate()
)apply()
: loopar över marginaler (ex. colSums()
)lapply()
har tre argument:
X
listan vi vill loopa överFUN
funktionen att aplicera...
argument till funktionenmyList <- list(x = 1:10, y = c(NA,12:20))
str(lapply(X=myList, FUN=mean, na.rm=TRUE))
List of 2
$ x: num 5.5
$ y: num 16