У меня есть фрейм данных df
, который я хотел бы разделить на обучающий набор и тестовый набор. Вместо того, чтобы получать только один обучающий и тестовый набор, я хотел бы получить их распределение (n = 100).
Я пытаюсь сделать это с помощью lapply
, но значения для каждого элемента в списке оказываются абсолютно одинаковыми. Как рандомизировать значения в двух списках (т. е. train.data
и test.data
)?
Ожидаемым результатом будет список как для train.data
, так и для test.data
, каждый из которых содержит 100 элементов с разными подмножествами df
в обоих из них.
library(lubridate)
library(tidyverse)
library(caret)
date <- rep_len(seq(dmy("01-01-2013"), dmy("31-12-2013"), by = "days"), 300)
ID <- rep(c("A","B","C"), 50)
class <- rep(c("N","M"), 50)
df <- data.frame(value = runif (length(date), min = 0.5, max = 25),
ID,
class)
training.samples <- df$class %>%
createDataPartition(p = 0.6, list = FALSE)
n <- 100
train.data <- lapply(1:n, function(x){
df[training.samples, ]
})
test.data <- lapply(1:n, function(x){
df[-training.samples, ]
})
Попробуйте использовать replicate
f1 <- function(dat, colnm) {
s1 <- createDataPartition(dat[[colnm]], p = 0.6,
list = FALSE)
return(list(train.data = dat[s1,], test.data = dat[-s1,]))
}
n <- 100
out <- replicate(n, f1(df, "class"), simplify = FALSE)