The goal of this tutorial is to learn how to match functions using the name as a string.
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
##
##
##
# 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
# 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"
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.