Я пытаюсь построить процесс перекрестной проверки с нуля, используя функции tidyverse
, и я застреваю, когда пытаюсь использовать cross
и pmap
для итерации моей подгонки и прогнозирования модели -генерирующая функция для различных комбинаций итераций, сгибов и моделей.
Вот минимальный пример того, что я пытаюсь сделать. Функция работает, если я применяю ее вручную (например, my_function(1, 1, formula_list[[1]])
), и различные версии cross
, которые я пробовал, выдают все списки желаемой длины и (я думал) структуры. Но когда я пытаюсь применить pmap
к этому списку, я получаю сообщение об ошибке «неиспользованные аргументы».
library(purrr)
library(dplyr)
df <- data.frame(i = rep(seq(2), each = 50),
k = rep(seq(5), times = 20),
y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100))
formula_list <- list( as.formula(y ~ x1), as.formula(y ~ x1 + x2))
my_function <- function(my_i, my_k, my_formula) {
train <- filter(df, i == my_i & k != my_k)
test <- filter(df, i == my_i & k == my_k)
mod <- lm(my_formula, data = train)
test$pred <- predict(mod, newdata = test)
return(test)
}
# this throws an error about unused arguments
crossArg <- cross3(seq(2), seq(5), formula_list)
results <- pmap(crossArg, my_function)
# this throws the same error
crossArg <- cross(list(seq(2), seq(5), formula_list))
results <- pmap(crossArg, my_function)
Я, должно быть, упускаю какой-то фундаментальный пункт о синтаксисе pmap
, но я просмотрел документацию и некоторые примеры в Интернете и все еще застрял.