Используя комментарии @markus, чтобы использовать split.default, мы можем изменить исходный код и изменить выборку, чтобы мы получили ровно 50 в каждом подмножестве,
Создание фиктивных данных,
df <- data.frame(matrix(1:250, ncol = 250))
Затем разделение, (мы разделяем этот путь из-за этого , на который указывает @markus, это более безопасная / надежная версия)
df2 <- lapply(split.data.frame(t(df), sample(rep(1:5, ncol(df)/5))), t)
Менее надежный, но более простой вариант:
df2 <- split.default(df, sample(rep(1:5, ncol(df)/5)))
дает нам,
> ncol(df2$`1`)
[1] 50
> ncol(df2$`2`)
[1] 50
> ncol(df2$`3`)
[1] 50
> ncol(df2$`4`)
[1] 50
> ncol(df2$`5`)
[1] 50