3 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
我的嘗試readLines。這部分代碼是根據(jù)csv選定的年份創(chuàng)建的。
file_in <- file("in.csv","r")
file_out <- file("out.csv","a")
x <- readLines(file_in, n=1)
writeLines(x, file_out) # copy headers
B <- 300000 # depends how large is one pack
while(length(x)) {
ind <- grep("^[^;]*;[^;]*; 20(09|10)", x)
if (length(ind)) writeLines(x[ind], file_out)
x <- readLines(file_in, n=B)
}
close(file_in)
close(file_out)

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
有沒(méi)有類似的方法可以一次在R中讀取文件?
是。的readChar()函數(shù)將在字符的塊讀取,而不假定它們是空終止。如果要一次讀取一行中的數(shù)據(jù),可以使用readLines()。如果讀取塊或行,請(qǐng)執(zhí)行操作,然后將數(shù)據(jù)寫出,可以避免出現(xiàn)內(nèi)存問(wèn)題。盡管如果您想在Amazon EC2上啟動(dòng)大內(nèi)存實(shí)例,則可以獲取高達(dá)64GB的RAM。那應(yīng)該保存您的文件,還有足夠的空間來(lái)處理數(shù)據(jù)。
如果需要更高的速度,那么Shane建議使用Map Reduce是一個(gè)很好的建議。但是,如果您打算在EC2上使用大內(nèi)存實(shí)例,則應(yīng)該查看多核軟件包以使用計(jì)算機(jī)上的所有內(nèi)核。
如果您發(fā)現(xiàn)自己想將大量帶分隔符的數(shù)據(jù)讀入R中,則至少應(yīng)研究sqldf程序包,該程序包可讓您從R中直接導(dǎo)入sqldf,然后對(duì)R中的數(shù)據(jù)進(jìn)行操作。我發(fā)現(xiàn)sqldf是其中之一如上一個(gè)問(wèn)題所述,將大量數(shù)據(jù)導(dǎo)入R的最快方法。
- 3 回答
- 0 關(guān)注
- 753 瀏覽
添加回答
舉報(bào)