我有一个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
崩溃了
答案 0 :(得分:1)
分区数据时,split
是您的朋友。它将创建一个列表,每个数据子集作为一个项目,然后很容易迭代。
dfs = split(df, 1:nrow(df) %/% 10)
然后你的for循环可以简化为类似的东西(未经测试......我不确定你在做什么,因为示例数据似乎从df
切换到sc2_10
而我只希望名为b
的列与名为b
的向量不同:
for(i in seq_along(dfs)){
res <- lapply(seq_along(dfs[[i]]$b), function(x){...}
saveRDS(res, file = sprintf("res_%s.rds", i))
rm(res)
}
我还修改了你的保存文件名,这样你就不会每次都覆盖同一个文件。