【发布时间】:2016-11-03 17:51:38
【问题描述】:
我有一个 data.frame,我想每 10 行对其进行一次子集化,然后对子集应用一个函数,保存对象,然后删除前一个对象。这是我到目前为止得到的结果
L3 <- LETTERS[1:20]
df <- data.frame(1:391, "col", sample(L3, 391, replace = TRUE))
names(df) <- c("a", "b", "c")
b <- seq(from=1, to=391, by=10)
nsamp <- 0
for(i in seq_along(b)){
a <- i+1
nsamp <- nsamp+1
df_10 <- df[b[nsamp]:b[a], ]
res <- lapply(seq_along(df_10$b), function(x){...}
saveRDS(res, file="res.rds")
rm(res)
}
我的问题是for loop 在到达序列的最后一个元素b 时崩溃
【问题讨论】:
-
为什么要保存在 for 循环中?您似乎一次又一次地保存同一个文件,因为您没有更改文件的名称。关闭 Lapply 功能。
-
该函数读取一些非常大的文件,这就是为什么我想以 10 个为一组,然后保存并删除它们以节省 RAM
-
对象是否太大以至于无法全部放入内存?更好的方法是使用列表(例如,
my_subsets = split(df, 1:nrow(df) %/% 10)然后lapply或for循环子集)或更好,使用data.table或dplyr与他们的“按组做事”能力。 -
该函数使用
data.frames2c_10上的信息来应用 'sleuth` 包中的函数,该函数读取hdf5这么大的文件,所以这就是我要应用的原因块的功能。感谢@Gregor 使用 split -
@Gregor,如果您使用
split详细说明答案,我会接受它