Проблемы с чтением файлов .mdb в R

Я пытаюсь прочитать ряд баз данных Microsoft Access в R. Я нашел функцию mdb.get из пакета Hmisc, который использует mdb-tools.

Это мой рабочий процесс для одного конкретного файла .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.

Основная проблема в том, что когда я делаю это прямо в терминале, он отлично работает для тех же файлов. Я думаю, я мог бы сделать это с помощью сценария оболочки, но я предпочитаю делать это внутри R. Любая помощь будет принята с благодарностью.

ИЗМЕНИТЬ

Я забыл сказать, что запускаю этот код в RStudio, я пробовал запускать его только в терминале R, и он работает, поэтому я думаю, что он как-то связан с путем к файлу mdb-tools. или что-то в этом роде. При этом я все же предпочел бы иметь возможность делать это в RStudio. Спасибо!


person eclark    schedule 11.04.2014    source источник


Ответы (1)


... Я попытался воспроизвести вашу ошибку, но у меня все работает нормально.

Судя по сообщению об ошибке («Не удается выделить имя файла») и тому, что вы говорите («серия баз данных Microsoft Access»), могу поспорить, что вы достигаете пределов памяти того, что R может справиться.

Вот пара советов, которые могут вам помочь:

  1. Вы можете освободить некоторые бесполезные вещи с помощью rm. Запустите gc(), чтобы запустить сборщик мусора перед загрузкой файла, чтобы вы были уверены, что вся свободная память будет доступна. Этого может быть достаточно для решения вашей проблемы.

  2. Если этого недостаточно: последовательно импортируйте файлы mdb, по одному, сохраняя каждый из них на жестком диске в другом формате (например, .RData по умолчанию) и полностью очищая рабочее пространство. Вам все равно, вероятно, придется беспокоиться о пространстве, когда вы откроете их позже, чтобы провести с ними анализ, но, по крайней мере, вам не придется проходить через mdb -> R шаг преобразования.

  3. Наконец, вам действительно нужен R для чтения этой базы данных? Если нет, вы избавите себя от многих проблем, просто используя другие технологии (python?) для чтения вашей базы данных.

Наконец, один общий совет для обработки большого количества данных: вам действительно следует подумать о том, чтобы научиться использовать data.tables, если вы еще не знаете об этом.

person Jealie    schedule 11.04.2014
comment
Здравствуйте, спасибо за ответ. Я не думаю, что моя проблема в размере, я даже могу прочитать небольшой .mdb на R, но я могу без проблем прочитать его в терминале. Я пытался прочитать это с помощью RStudio, и я думаю, что это проблема, потому что я могу прочитать все .mdbs, если я запускаю тот же код в R, но в терминале. - person eclark; 12.04.2014
comment
@eclark: Не могли бы вы попробовать выполнить тот же скрипт в R (терминальная версия) или в Rstudio? Могу поспорить, что у них, вероятно, будет такая же проблема. - person Jealie; 12.04.2014
comment
@eclark: В противном случае без воспроизводимого примера мы просто не сможем вам помочь! - person Jealie; 12.04.2014
comment
Хорошо, я попытался выполнить его на R (терминальная версия), и он работает без проблем, проблема возникает, когда я запускаю его в RStudio. - person eclark; 12.04.2014
comment
... и у меня работает в Rstudio (последняя версия, Linux). Было бы здорово, если бы вы отправили отчет об ошибке команде rstudio. - person Jealie; 12.04.2014
comment
Я переустановил RStudio, и теперь он работает. Я не знаю, что происходит. Но спасибо за помощь!! - person eclark; 13.04.2014