Learn how to define an own function to eliminate repetition from code and allows code reuse.
Functions allow you to automate common tasks avoid copying and pasting. To create a new function you need to pick a name for the function, list the inputs or arguments and place the code you have developed in the body of the function.
Basic function template: name and body
#Functions
my_function <- function(arg1, arg2){
#Do something
}
Function template with defaults arguments
my_function <- function(arg1, arg2, detail_arg = default1){
#Do something
}
Example: function to estimate Z - Gas compressibility factor using Papay correlation
In this case two arguments are difined, pseudoreduced pressure and pseudoreduced temperature. The function is called z.papay and in its body is the equation. At the end we define the value that will be return as result.
\[ z = 1-\frac{3.53p_{pr}}{10^{0.9813T_{pr}}}+\frac{0.274p_{pr}^2}{10^{0.8157T_{pr}}}\]
z.papay <- function(Ppr, Tpr){
#Ppr <- 3
#Tpr <- 2
z <- 1-(3.53*Ppr)/(10^(0.9813*Tpr))+(0.274*Ppr^2)/(10^(0.8157*Tpr))
return(z)
}
Once the function is in the environment, we can use it to calculate Z value.
z.estimate <- z.papay(3, 2)
z.estimate
[1] 0.9421987
Bacause a vector is the simplest type of data structure in R, we can use a vector as a parameter in functions. A pseudoreduced pressure vector is defined to calculate z factor to constant pseudoreduced temperature
library(ggplot2)
Ppr <- seq(from = 0, to = 8, by = 0.2)
Tpr <- 1.6
Tpr2 <- 1.3
z_cal <- z.papay(Ppr, Tpr)
z_cal2 <- z.papay(Ppr, Tpr2)
z.value <- data.frame(Ppr = Ppr, z = z_cal, z2 = z_cal2)
plot_x <- ggplot(z.value) +
geom_line(aes(x = Ppr, y = z), col = "red") +
geom_line(aes(x = Ppr, y = z2), col = "blue")
plot_x
For attribution, please cite this work as
Vazquez (2021, Nov. 3). Chato Solutions: Define Functions in R. Retrieved from https://www.chatosolutions.com/posts/2021-11-03-function1/
BibTeX citation
@misc{vazquez2021define, author = {Vazquez, Rigoberto Chandomi}, title = {Chato Solutions: Define Functions in R}, url = {https://www.chatosolutions.com/posts/2021-11-03-function1/}, year = {2021} }