Как использовать do.call в R (3 примера)


Вы можете использовать do.call() в R, чтобы применить данную функцию к списку в целом.

Эта функция использует следующий базовый синтаксис:

do. call (function, list)

В следующих примерах показано, как использовать do.call() на практике.

Пример 1: Используйте do.call() с суммой

В следующем коде показано, как использовать do.call() для вычисления суммы значений в списке:

#create list
values_list <- list(A=c(1, 2, 3), B=c(7, 5, 10), C=c(9, 9, 2))

#calculate sum of values in list
do. call (sum, values_list)

[1] 48

Сумма значений в списке равна 48 .

Обратите внимание, что мы получили бы ошибку, если бы просто попытались использовать sum() непосредственно со списком:

#create list
values_list <- list(A=c(1, 2, 3), B=c(7, 5, 10), C=c(9, 9, 2))

#attempt to sum values in list
sum(values_list)

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

Пример 2: Используйте do.call() со средним значением

В следующем коде показано, как использовать do.call() для вычисления среднего значения в списке:

#define argument to use in do.call
args <- list(1:20, na. rm = TRUE )

#calculate mean of values in list
do. call (mean, args)

[1] 10.5

Среднее значение значений в списке равно 10,5 .

Обратите внимание, что мы получили бы ошибку, если бы просто попытались использовать метод mean() непосредственно со списком:

#attempt to calculate mean of values in list
mean(list(1:20), na. rm = TRUE )

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

Пример 3: Используйте do.call() с rbind

В следующем коде показано, как использовать do.call() для связывания нескольких фреймов данных в R:

#create three data frames
df1 <- data.frame(team=c('A', 'B', 'C'),
 points=c(22, 27, 38))

df2 <- data.frame(team=c('D', 'E', 'F'),
 points=c(22, 14, 20))

df3 <- data.frame(team=c('G', 'H', 'I'),
 points=c(11, 15, 18))

#place three data frames into list
df_list <- list(df1, df2, df3)

#row bind together all three data frames
do. call (rbind, df_list)

 team points
1 A 22
2 B 27
3 C 38
4 D 22
5 E 14
6 F 20
7 G 11
8 H 15
9 I 18

В результате получается один фрейм данных, содержащий строки из каждого из трех фреймов данных.

Обратите внимание, что мы не получили бы желаемый фрейм данных, если бы попытались использовать rbind() напрямую со списком:

#create three data frames
df1 <- data.frame(team=c('A', 'B', 'C'),
 points=c(22, 27, 38))

df2 <- data.frame(team=c('D', 'E', 'F'),
 points=c(22, 14, 20))

df3 <- data.frame(team=c('G', 'H', 'I'),
 points=c(11, 15, 18))

#place three data frames into list
df_list <- list(df1, df2, df3)

#attmempt to row bind together all three data frames
rbind(df_list)

 [,1] [,2] [,3] 
df_list List,2 List,2 List,2

Дополнительные ресурсы

В следующих руководствах объясняется, как использовать другие распространенные функции в R:

Как использовать функции paste & paste0 в R
Как использовать функцию replace() в R
Как использовать функцию View() в R
Как использовать функцию rep() в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.