如何在R中有效地读取块中的大文件

时间:2011-11-12 06:40:13

标签: r file-io

我正在读取R中的一个大型事件文件,接近200万行,将每行解析为一组事件属性并存储在我的矩阵中。我预先分配了一个巨大的矩阵(200万个事件),从文件中读取一小块,重复并处理它。但是处理文件需要很长时间。我想知道我能做些什么来提高性能。这是我的代码片段:

numEvents <<- 2000000;
eventLog <<- matrix(0,nrow=numEvents,ncol=4);

loadEvents <- function(inputfile) {
    con <- file(inputfile, "r", blocking = FALSE)
    batch <- 1000
    lines <- readLines(con,n=batch)
    while(length(lines) > 0 && eventCount <= numEvents) {
        for (i in 1:length(lines))
            storeEvent(lines[i]); # processes and stores each event in eventlog
        lines <- readLines(con,n=batch)
    }
    close(con);
}

您认为批量大小不是最佳的吗?

非常感谢任何想法。

2 个答案:

答案 0 :(得分:0)

也许你的案例是R extension(在C或C ++中)的好例子?但我不太了解R。

答案 1 :(得分:0)

在我的处理过程中发现了这个问题。我使用列表作为地图来包含事件的映射。 List本身并不是哈希映射,因此它可能非常慢。我改变它使用hash()并且性能提高了十倍。感谢。