1 Goal


The goal of this tutorial is to learn how to match functions using the name as a string.


2 Data preparation


library(ggplot2)

# In this tutorial we are going to use the iris dataset
data("iris")
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

3 Using a function by name


# We can use the match.fun function to get a function by its name
# We can use the mean function 

mean(iris$Sepal.Length)
## [1] 5.843333
# Now let's compare with the mean function obtained using match.fun

my_function <- match.fun("mean")

# We see what's inside 
my_function
## function (x, ...) 
## UseMethod("mean")
## <bytecode: 0x7f91fc7d3068>
## <environment: namespace:base>
# And apply the function
my_function(iris$Sepal.Length)
## [1] 5.843333

4 Using a set of functions in one go


# Imagine we want to obtain several parameters from a vector: mean, sd, median, var, min, max
# We define a vector where we store all these methods

M <- c("mean", "sd", "median", "var", "min", "max")

# And now we can apply each method

for (my_method in M){
  my_function <- match.fun(my_method)
  print(paste0("The ",my_method, " is ", round(my_function(iris$Sepal.Length),3)))
}
## [1] "The mean is 5.843"
## [1] "The sd is 0.828"
## [1] "The median is 5.8"
## [1] "The var is 0.686"
## [1] "The min is 4.3"
## [1] "The max is 7.9"

5 Conclusion


In this tutorial we have learnt how to get functions by their name and use them. This could be useful when we want to apply several functions to the same object.