## 3.2 Functions in R

• In all research fields there are few statistical (or otherwise) calculations which are used frequently by the users, for example calculation of returns in finance research.

• R provides the facility of creating specific functions to evaluate a set of arguments and return an output value which are stored as R objects.

• The functions in R are created by the keyword $$\mathtt{function}$$ which takes the following syntax.

$\mathtt{function(arguments)}body$

• The arguments are the values/defaults/variables which are used in the body of the function to evaluate an expression.

• The body of the function is enclosed in curly braces. The function is assigned to a named object and called by passing arguments to the object.

• The following example illustrates by creating a function to calculate mean for all the columns in the data set $$\mathtt{data\_stocks}$$

# the following function takes 2 arguments, x a data frame, dates to indicate if
# there are dates in the first column
cal_mean = function(x, dates = TRUE) {
num_cols = ncol(x)  #calculate the number of columns
# num_cols=ifelse(dates==TRUE,num_cals-1,num_cals) lets use a list and a loop to
# refresh our concepts
m_stocks = list()  #creating an empty list

# use for loop assign the starting value based on the dates column,we skip dates
# column if they are present (dates are basically row names to more generalised
# version will be to check for row names)
l = ifelse(dates == TRUE, 2, 1)
j = 1  #starting point in the list m_stocks
for (i in l:num_cols) {
m_stocks[[j]] = mean(x[, i])
j = j + 1
}
names(m_stocks) = colnames(x[, l:num_cols])
return(m_stocks)
}
# lets call the function cal_mean (output not shown)
cal_mean(data_stocks, TRUE)
$MSFT [1] 26.91177$IBM
[1] 122.3303

$AAPL [1] 207.7967$MCD
[1] 58.95141

$PG [1] 61.32512$GOOG
[1] 469.9453
# lets call the function with no dates column
cal_mean(data_stocks[, 2:ncol(data_stocks)], FALSE)
$MSFT [1] 26.91177$IBM
[1] 122.3303

$AAPL [1] 207.7967$MCD
[1] 58.95141

$PG [1] 61.32512$GOOG
[1] 469.9453