我正在尝试读取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中做到这一点。谢谢!
答案 0 :(得分:0)
...我试图重现你的错误,但一切都适合我。
从错误消息(“无法分配文件名”)和您所说的内容(“系列的微软访问数据库”)来判断,我敢打赌您正在达到内存限制R可以处理的事情。
以下是一些可以帮助您的建议:
您可以使用rm
释放一些无用的内容。在加载文件之前运行gc()
以触发垃圾收集器,因此可以确保所有可用内存都可用。这可能足以解决您的问题。
如果这还不够:按顺序导入 mdb 文件,一次一个,将其中的每个文件以其他格式保存在硬盘中(如默认.RData
)并完全清除你的工作区。当你稍后打开它们时,你仍然可能需要担心空间,用它们进行分析,但至少你不必通过 mdb - > R 转换步骤。
最后,确实需要R来读取该数据库吗?如果没有,只需使用其他技术(python?)来读取数据库,就可以省去很多麻烦。
最后,一个处理大量数据的通用建议:您应该考虑学习如何使用data.tables
,以防您不知道它。