【发布时间】:2023-03-26 18:05:01
【问题描述】:
考虑以下三个函数:
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))
)
如果我在f2 中硬编码fn,我会得到正确的结果:
f2_good <- function(split_df) {
split_df %>%
analysis() %>%
nest() %>%
mutate(
forecast = map(data, ~ f3(.$actuals, fn = median))
)
}
如果我从f1 传递...,为什么我不能传递fn = median 到f3?
注意:我能够解决将参数传递给 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...
【问题讨论】:
标签: r parameter-passing purrr