Рассмотрим следующие три функции:
f1 <- function(df, ...) {
df %>%
mutate(
model = map(.$splits, ~ f2(.))
)
}
f2 <- function(split_df) {
split_df %>%
analysis() %>%
nest() %>%
mutate(
forecast = map(data, ~ f3(.$actuals))
)
}
f3 <- function(x, N = 3, fn = mean, window_size = 6, ...) {
# stuff
}
Я запускаю эти функции в более крупном конвейере, но суть моего вопроса заключается в следующем: я хотел бы передать аргументы в f3()
(например, изменитьfn = mean
до fn = median
в следующей строке кода:
df_resamples %>%
mutate(
result = .$resamples %>% map(~ f1(.))
)
Однако ни одно из следующих действий не возвращает правильные результаты:
# INCORRECT
df_resamples %>%
mutate(
result = .$resamples %>% map(~ f1(.), fn = median)
)
# ALSO INCORRECT
df_resamples %>%
mutate(
result = .$resamples %>% map(~ f1(., fn = median))
)
Если я жестко кодирую fn
в f2
я получаю правильный результат:
f2_good <- function(split_df) {
split_df %>%
analysis() %>%
nest() %>%
mutate(
forecast = map(data, ~ f3(.$actuals, fn = median))
)
}
Почему я не могу передать fn = median
через f3
, если я передаю ...
из f1
?
ПРИМЕЧАНИЕ: я могу решить передать аргументы на f1
и f2
, но это не очень сухо, и я подумал, что могу использовать многоточие, чтобы обойти этот подход:
f1 <- function(df, N = 3, fn = mean, window_size = 6) {
df %>%
mutate(
model = map(.$splits, ~ f2(., N = N, fn = fn, window_size = window_size))
)
}
f2 <- function(split_df, N = 3, fn = mean, window_size = 6) {
split_df %>%
analysis() %>%
nest() %>%
mutate(
forecast = map(data, ~ f3(.$actuals, N = N, fn = fn, window_size = window_size))
)
}
Выполнение вышеизложенного позволяет мне сделать:
df_resamples %>%
mutate(
result = .$resamples %>% map(~ f1(., fn = median))
)
и получить ожидаемые результаты, но я должен передать значения по умолчанию как f1
, так и f2
...