# How to perform do.call in R

How to perform do.call in R, you may use the do.call() function to apply a certain function to an entire list.

The basic syntax used by this function is as follows:

do.call(function, list)

Use of do.call() in practise is demonstrated in the examples that follow.

## Example 1: How to perform do.call in R with sum

The total of values in a list can be calculated using do.call() by using the following code:

#create list

mylist <- list(A=c(11, 12, 13), B=c(27, 25, 30), C=c(19, 19, 12))

#calculate sum of values in list

do.call(sum, mylist) [1] 168

The sum of the values in the list is 168.

Note that attempting to use sum() on the list directly would result in an error:

#let’s create list

mylist <- list(A=c(11, 12, 13), B=c(27, 25, 30), C=c(19, 19, 12))

#now attempt to sum values in list

sum(mylist) Error in sum(mylist) : invalid 'type' (list) of argument

## Example 2: Use do.call() with mean

The mean of values in a list may be calculated using do.call() by using the following code:

#let’s define argument to use in do.call

args <- list(10:20, na.rm=TRUE)

#calculate mean of values in list

do.call(mean, args) [1] 15

The list’s values have a mean value of 15, which.

Note that attempting to use mean() on the list directly would result in an error:

#attempt to calculate mean of values in list

mean(list(10:20), na.rm=TRUE) [1] NA

Warning message: In mean.default(list(10:20), na.rm = TRUE) : argument is not numeric or logical: returning NA

## Example 3: Use do.call() with rbind

#we can create three data frames

df1 <- data.frame(team=c('A', 'B', 'C'), points=c(2, 7, 3)) df2 <- data.frame(team=c('D', 'E', 'F'), points=c(2, 1, 0)) df3 <- data.frame(team=c('G', 'H', 'I'), points=c(1, 5, 4))

#now place the three data frames into list

df_list <- list(df1, df2, df3)

#row bind together all the three data frames

Free Data Science Books » EBooks »

do.call(rbind, df_list)

team points 1 A 2 2 B 7 3 C 3 4 D 2 5 E 1 6 F 0 7 G 1 8 H 5 9 I 4

As a result, one data frame is created that includes the rows from all three data frames.

Note that if we attempted to use rbind() on the list directly, we would not get the correct data frame:

thanks for info