Допустим, вы хотите подсчитать среднее значение последовательности чисел
mean(1:10)
но по ходу работы нужно передать функции дополнительные настройки. В этом случае можно формировать список аргументов постепенно, а затем передать его функции для выполнения.
Создайте список аргументов функции:
arg <- list(1:10, na.rm = TRUE)
Мы добавили в него "обрезку" пропущенных данных.
Нам понадобится функция do.call()
, чтобы с её передать список аргументов для mean()
:
do.call(mean, arg)
# Эквивалентно: mean(1:10, na.rm = TRUE)
#> [1] 5.5
Ещё один пример, с функцией plot()
:
arg <- list(x=1:5, y=(1:5)^2, main="Y by X", type="b", xlab="X", ylab="Y")
do.call(plot, arg)
Однако, вариант с do.call()
всё же несколько медленнее непосредственного вызова:
n <- 1000000
arg <- list(1:10, na.rm = TRUE)
system.time(
for (i in 1:n)
mean(1:10, na.rm = TRUE)
)
#пользователь система прошло
# 6.18 0.00 6.21
system.time(
for (i in 1:n)
do.call(mean, arg)
)
#пользователь система прошло
# 7.81 0.00 7.83
Комментарии
comments powered by Disqus