df %>% split(.$x)
对于 x 的大量唯一值,变得很慢。如果我们手动将数据帧拆分为更小的子集,然后对每个子集执行拆分,我们将时间减少至少一个数量级。
library(dplyr)
library(microbenchmark)
library(caret)
library(purrr)
N <- 10^6
groups <- 10^5
df <- data.frame(x = sample(1:groups, N, replace = TRUE),
y = sample(letters, N, replace = TRUE))
ids <- df$x %>% unique
folds10 <- createFolds(ids, 10)
folds100 <- createFolds(ids, 100)
跑步microbenchmark
给了我们
## Unit: seconds
## expr mean
l1 <- df %>% split(.$x) # 242.11805
l2 <- lapply(folds10, function(id) df %>%
filter(x %in% id) %>% split(.$x)) %>% flatten # 50.45156
l3 <- lapply(folds100, function(id) df %>%
filter(x %in% id) %>% split(.$x)) %>% flatten # 12.83866
是split
不是为大型团体设计的?除了手动初始子集之外还有其他选择吗?
我的笔记本电脑是 2013 年末的 macbook pro,2.4GHz 8GB