2

我正在尝试在 R 中读取一系列 microsoft access 数据库。我从使用mdb-tools的Hmisc包中找到了mdb.get函数。

这是我针对一个特定 .mdb 文件的工作流程

system("wget http://www.dgis.salud.gob.mx/descargas/zip/BDSS_2004.zip")
unzip("BDSS_2004.zip")
mdb.get("SECTORIAL2004.mdb")
   Can't alloc filename
   Couldn't open database.
   named list()
   Warning message:
   running command 'mdb-tables -1 SECTORIAL2004.mdb' had status 1 

我尝试使用System()直接传递突击队以提供mdb-tables命令,但我得到了非常相似的结果。

system("mdb-tables SECTORIAL2004.mdb")   
   Can't alloc filename
   Couldn't open database.

主要问题是,当我直接在终端中执行此操作时,它适用于相同的文件。我想我可以使用 shell 脚本来完成,但我更愿意在 R 中完成。任何帮助将不胜感激。

编辑

我忽略了说我在 RStudio 中运行此代码,我尝试单独在 R 终端中运行它并且它可以工作,所以这让我认为它与mdb-tools的文件路径或类似的东西有关那。话虽如此,我仍然希望能够在 RStudio 中做到这一点。谢谢!

4

1 回答 1

0

...我试图重现您的错误,但一切对我来说都很好。

从错误消息(“无法分配文件名”)和您所说的(“一系列microsoft access 数据库”)来看,我敢打赌,您正在达到 R 可以处理的内存限制。

以下是一些可以帮助您的建议:

  1. 您也许可以使用rm. 在加载文件之前运行gc()以触发垃圾收集器,因此您可以确保所有可用内存都可用。这可能足以解决您的问题。

  2. 如果这还不够:按顺序导入mdb文件,一次一个,将它们中的每一个以另一种格式(如默认格式.RData)保存在硬盘驱动器中,并完全清除您的工作区。当您稍后打开它们以进行分析时,您可能仍然需要担心空间,但至少您不必经历mdb -> R转换步骤。

  3. 最后,你真的需要 R 来读取那个数据库吗?如果没有,您只需使用其他技术(python?)来读取您的数据库就可以省去很多麻烦。

最后,处理大量数据的一个通用建议:您应该真正考虑学习如何使用data.tables,以防您还不知道它。

于 2014-04-11T21:49:09.547 回答