我有一個擬合的模型,我想要應用於對存儲爲CSV的新數據集進行評分。不幸的是,新的數據集非常大,如果我一次全部完成,預測程序就會耗盡內存。所以,我想將可以正常工作的程序轉換爲可以一次處理500行的批處理模式,然後爲每個得分500輸出文件。將R read.csv轉換爲readLines批處理?
我明白這個答案(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有更好的方法來做事。任何關於如何讓read.csv-like輸出形成readLines csv連接的建議?
這不會保留我的標題,對不對? – Mittenchops 2013-02-27 15:57:13
另外,如果我正確地理解了這一點:樂隊仍然在做這個同時而不是批量的,對嗎?如果由於擬合步驟我的過程耗盡內存,我仍然沒有輸出,而不是寫入第一批n,第二批n等。 – Mittenchops 2013-02-27 15:59:53
'lapply'分批執行此操作,每次調用'read_chunk'時,它將用於不同的'start'和'n'組合,因此用於'file'的不同子集。這不會保留'read_chunk'中的標題信息,但是如果你確實需要它,你可以在'lapply'循環外部讀取標題。 – 2013-02-27 16:02:30