This is a brief introduction. The syntax is:
functionName = function(inputs) { < function body > return(value) }
Then you would run the 4 lines of the code, which adds it to your workspace.
This is a brief introduction. The syntax is:
functionName = function(inputs) { < function body > return(value) }
Then you would run the 4 lines of the code, which adds it to your workspace.
Here we will write a function that returns the second element of a vector:
return2 = function(x) { return(x[2]) } return2(c(1,4,5,76))
[1] 4
Note that your function will automatically return the last line of code run:
return2a = function(x) { x[2] } return2a(c(1,4,5,76))
[1] 4
And if your function is really one line or evaluation, like here, you do not need the curly brackets, and you can put everything on one line:
return2b = function(x) x[2] return2b(c(1,4,5,76))
[1] 4
Also note that functions can take multiple inputs. Maybe you want users to select which element to extract
return2c = function(x,n) x[n] return2c(c(1,4,5,76), 3)
[1] 5
Let’s write a function, sqdif
, that:
x
and y
with default values of 2 and 3.sqdif <- function(x=2,y=3){ (x-y)^2 } sqdif()
[1] 1
sqdif(x=10,y=5)
[1] 25
sqdif(10,5)
[1] 25
Try to write a function called top()
that takes a matrix
or data.frame
, and returns the first n
rows and columns, with the default value of n=5
.
Try to write a function called top()
that takes a matrix
or data.frame
, and returns the first n
rows and columns
top = function(mat,n=5) mat[1:n,1:n] my.mat = matrix(1:1000,nr=100) top(my.mat) #note that we are using the default value for n
[,1] [,2] [,3] [,4] [,5] [1,] 1 101 201 301 401 [2,] 2 102 202 302 402 [3,] 3 103 203 303 403 [4,] 4 104 204 304 404 [5,] 5 105 205 305 405
apply
You can also designate functions “on the fly”
matList = list(x = matrix(1:25,nc=5),y=matrix(26:50,nc=5)) lapply(matList, function(x) x[1:2,1:2])
$x [,1] [,2] [1,] 1 6 [2,] 2 7 $y [,1] [,2] [1,] 26 31 [2,] 27 32
sapply()
is a user-friendly version and wrapper of lapply
by default returning a vector, matrix, or array
sapply(matList, dim)
x y [1,] 5 5 [2,] 5 5
sapply(matList, class)
x y "matrix" "matrix"
myList = list(a=1:10, b=c(2,4,5), c = c("a","b","c"), d = factor(c("boy","girl","girl"))) tmp = lapply(myList,function(x) x[1]) tmp
$a [1] 1 $b [1] 2 $c [1] "a" $d [1] boy Levels: boy girl
sapply(tmp, class)
a b c d "integer" "numeric" "character" "factor"
sapply
can also be applied to columns of data frames
library(readr) circ = read_csv(paste0("http://johnmuschelli.com/intro_to_r/", "data/Charm_City_Circulator_Ridership.csv")) sapply(circ,class)
day date orangeBoardings orangeAlightings "character" "character" "integer" "integer" orangeAverage purpleBoardings purpleAlightings purpleAverage "numeric" "integer" "integer" "numeric" greenBoardings greenAlightings greenAverage bannerBoardings "integer" "integer" "numeric" "integer" bannerAlightings bannerAverage daily "integer" "numeric" "numeric"