我有一个拟合模型,我想应用它来对存储为 CSV 的新数据集进行评分。不幸的是,新数据集有点大,如果我一次完成所有预测,预测过程就会耗尽内存。因此,我想将适用于以下小型集合的过程转换为一次处理 500 行的批处理模式,然后为每个得分 500 输出一个文件。
我从这个答案(What is a good way to read line-by-line in R?)中了解到我可以使用 readLines 。所以,我将从:
trainingdata <- as.data.frame(read.csv('in.csv'), stringsAsFactors=F)
fit <- mymodel(Y~., data=trainingdata)
newdata <- as.data.frame(read.csv('newstuff.csv'), stringsAsFactors=F)
preds <- predict(fit,newdata)
write.csv(preds, file=filename)
类似于:
trainingdata <- as.data.frame(read.csv('in.csv'), stringsAsFactors=F)
fit <- mymodel(Y~., data=trainingdata)
con <- file("newstuff.csv", open = "r")
i = 0
while (length(mylines <- readLines(con, n = 500, warn = FALSE)) > 0) {
i = i+1
newdata <- as.data.frame(mylines, stringsAsFactors=F)
preds <- predict(fit,newdata)
write.csv(preds, file=paste(filename,i,'.csv',sep=''))
}
close(con)
但是,当我在循环内打印 mylines 对象时,它不会像 read.csv 产生的东西一样正确地自动列 - 标题仍然是一团糟,无论模数列宽发生在引擎盖下将向量包装到 ncol 对象中并没有发生。
每当我发现自己写了一些野蛮的东西,比如剪切第一行、换行时,我通常怀疑 R 有更好的方法来做事。关于如何从 readLines csv 连接获得类似 read.csv 的输出的任何建议?