Это легко сделать с помощью функции purrr
imap
.
Первый трюк состоит в том, чтобы предварительно определить все методы теста функции и пометить их:
# define and label test methods
test_methods <- list(
Mean = meanf,
RW = rwf
)
Затем мы позволяем imap_dfr
делать забавные вещи - применять каждую функцию к данным, переформатировать их, маркировать и связывать все вместе
library(purrr)
result_df <- imap_dfr(test_methods, function(f, .method) {
tmp <- accuracy(f(beer.train, h = 8), beer.test)
tmp %>%
as.data.frame() %>%
mutate(
Set = str_extract(rownames(tmp), "Train|Test"),
Method = .method
) %>%
select(Method, Set, everything())
})
Мы используем imap
потому что он автоматически устанавливает 2-ю переменную в функции (здесь .method
) на имена в нашем списке (например, имена в test_methods
).Это именно то, что нужно здесь.
Обновление
Чтобы добавить аргументы к вызовам функций, нам нужно включить эту информацию в методы тестирования.Например:
test_methods <- list(
Mean = meanf,
RW = rwf,
RWdrift = function(x, ...) rwf(x, drift = TRUE, ...)
)
Точечная запись необходима, потому что h=8
жестко запрограммирован в вызовах функций.Если h
также изменяется, вам необходимо удалить его из вызова в пределах imap_dfr
и указать его во всех test_methods
записях:
test_methods <- list(
Mean08 = function(x) meanf(x, h = 8),
Mean10 = function(x) meanf(x, h = 10),
RW8 = function(x) rwf(x, h = 8,
RWdrift8 = function(x, ...) rwf(x, h = 8, drift = TRUE, ...)
)