Вот один способ, которым вы могли бы создать нужный раздел, используя tidyverse
:
library(tidyverse)
df %>%
mutate(id = row_number()) %>% #create a column called id which will hold the row numbers
filter(Time > 15) %>% #subset data frame according to your description
split(.$id) %>% #split the data frame into lists by id (row number)
map(~ .x %>% select(id) %>% #clean up so it works with indexOut argument in trainControl
unlist %>%
unname) -> folds_cv
РЕДАКТИРОВАТЬ: кажется, что аргумент indexOut
не работает должным образом, но аргумент index
делает это последелая folds_cv
, можно просто получить обратное, используя setdiff
:
folds_cv <- lapply(folds_cv, function(x) setdiff(1:nrow(df), x))
, а теперь:
test_control <- trainControl(index = folds_cv,
savePredictions = "final")
quad.lm2 <- train(Time ~ Effect,
data = df,
method = "lm",
trControl = test_control)
с предупреждением:
Warning message:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :
There were missing values in resampled performance measures.
> quad.lm2
Linear Regression
200 samples
1 predictor
No pre-processing
Resampling: Bootstrapped (50 reps)
Summary of sample sizes: 199, 199, 199, 199, 199, 199, ...
Resampling results:
RMSE Rsquared MAE
3.552714e-16 NaN 3.552714e-16
Tuning parameter 'intercept' was held constant at a value of TRUE
таккаждая повторная выборка использовала 199 строк и рассчитывалась на 1, повторяя для всех 50 строк, которые мы хотели сохранить за раз.Это можно проверить в:
quad.lm2$pred
Почему отсутствует Rsquared
Я не уверен, что буду копать немного глубже.