在R中读取.mdb文件的问题

时间:2014-04-11 17:29:00

标签: r ms-access database-connection hmisc

我正在尝试读取R中的一系列微软访问数据库。我从 Hmisc 包中找到 mdb.get 函数,该函数使用 mdb-工具

这是我的一个特定.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中做到这一点。谢谢!

1 个答案:

答案 0 :(得分:0)

...我试图重现你的错误,但一切都适合我。

从错误消息(“无法分配文件名”)和您所说的内容(“系列的微软访问数据库”)来判断,我敢打赌您正在达到内存限制R可以处理的事情。

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

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

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

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

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