3 回答
TA贡献1893条经验 获得超10个赞
我的尝试readLines。这部分代码是根据csv选定的年份创建的。
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贡献1876条经验 获得超5个赞
有没有类似的方法可以一次在R中读取文件?
是。的readChar()函数将在字符的块读取,而不假定它们是空终止。如果要一次读取一行中的数据,可以使用readLines()。如果读取块或行,请执行操作,然后将数据写出,可以避免出现内存问题。尽管如果您想在Amazon EC2上启动大内存实例,则可以获取高达64GB的RAM。那应该保存您的文件,还有足够的空间来处理数据。
如果需要更高的速度,那么Shane建议使用Map Reduce是一个很好的建议。但是,如果您打算在EC2上使用大内存实例,则应该查看多核软件包以使用计算机上的所有内核。
如果您发现自己想将大量带分隔符的数据读入R中,则至少应研究sqldf程序包,该程序包可让您从R中直接导入sqldf,然后对R中的数据进行操作。我发现sqldf是其中之一如上一个问题所述,将大量数据导入R的最快方法。
- 3 回答
- 0 关注
- 712 浏览
添加回答
举报