R - 在循环

时间:2016-10-27 15:55:57

标签: r loops ram write.table

每天我用VB脚本在一秒钟内从网上解析大约700 MB。程序每天创建大约13,000个文件。

使用R我试图将这些文件放入数据库。为了实现这一目标,我创建了 for loop ,它遍历我下载的所有文件,并将它们写入存储在目录中的数据库。

在每次迭代中,我都有以下代码:

rm(list=c('var1', 'var2'))
unlink(file)
gc()
我希望能解决这个问题。它没有。

在主循环中,我有内循环来在读取后保存文件。

for (i in seq_along(listofallfiles)) {
    (here goes code to parse data out of files and store them in var1, var2, etc. -)
      file = paste(path,"\\",l[i], sep="")
      txt  = readLines(file,skipNul = TRUE)

      html      = htmlTreeParse(txt, useInternalNodes = TRUE)

      name      = xpathSApply(html, "//td/div/span[starts-with(@class, 'name')]", xmlValue)

(then goes many more var2, var3 that are based on xpathSapply)


           for (j in seq_along(name)) {

                final_file = paste(direction,"\\", name[j], ".csv", sep="")

                if (file.exists(final_file)) {
                     write.table(t(as.matrix(temp[j,])), file=final_file, row.names = FALSE, append=TRUE, col.names = FALSE)   
                } else {
                     file.create(final_file, showWarnings = FALSE)
                      write.table(t(as.matrix(temp[j,])), file=final_file, row.names = FALSE, append=TRUE)
                }
           }
}

问题

当我打开任务管理器时,我发现在一天内只读取了50%的文件后,RStudio的内存使用率约为90%。这意味着我将无法在一天内创建一个数据库。 RAM使用率为55%左右,大约为4.2GB。

它甚至更奇怪,因为目录中创建的数据库大小只有大约40MB!

问题

有没有办法用R构建这样的数据库? 我选择了write.table但它可以是任何函数,它给我一个可以迭代方式存储的输出(所以可以将数据附加到现有文件的函数)。

如果不在R中 - 用什么编程语言呢?

修改

数据库 - 现在它被计划为平面文件(csv)。这令人困惑。目标是以任何方式存储数据,这样可以再次有效地读取R(不使用太多RAM)

file - 这些是HTML文件,这就是我使用xpathSApply的原因。一个文件大约是28KB。

我解决这个问题的方法是创建外部循环,以块的形式读取数据。循环的每次迭代后,我把

 .rs.restartR()

解决了这个问题。

0 个答案:

没有答案