el_pako (el_pako) wrote,
el_pako
el_pako

Читаем xlsx и xlsm файлы в R

Потратил несколько часов на поиск нормального решения. Нужно было прочитать файл "xlsm", который весил 9 Мб и состоял из 2х колонок. Перепробовал несколько стандартных решений, но они не помогли (http://www.milanor.net/blog/?p=779):

require(RODBC)- не работал с 64х битным R. Просил компилировать код под 32 бита
require(gdata) - съел кучу Java памяти, а потом написал ошибку "Java heap space"
require(xlsReadWrite) - тоже, что и предыдущий - съел кучу Java памяти, а потом написал ошибку "Java heap space"
require(XLConnect) - ну, вы поняли )
require(xlsx) - та же ошибка, плюс требовал прописывать полный путь к xlsx, то есть не мог найти файл в рабочей директории

Мануал по XLConnect советовал увеличить размер памяти java путём добавления строки:

options ( java.parameters = "- Xmx1024m" ) - или любой другой "-Xmx4g", "-Xmx8g" - такое решение заканчивается очередной перегрузкой Java памяти и новой ошибкой: "GC overhead limit exceeded"

В общем, после долгого поиска случайно в комментариях наткнулся на функцию, которая читает "xlsm" с помощью xml и регулярных выражений, читает довольно быстро и практически не виснет: https://gist.github.com/byzheng/6119160

По времени выполнения чтения данных следующие показатели:

9 Мб (2 колонки 300к строк) - 36 секунд
26 Мб (6 колонок 300к строк) - 3 минуты 40 секунд


PS: возможно, стоит потестировать библиотеку libxls и функцию xls.open (http://libxls.sourceforge.net/index.html)
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments