# Define Functions in R

Learn how to define an own function to eliminate repetition from code and allows code reuse.

11-03-2021

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

 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 ### Citation

Vazquez (2021, Nov. 3). Chato Solutions: Define Functions in R. Retrieved from https://www.chatosolutions.com/posts/2021-11-03-function1/
@misc{vazquez2021define,
}