Как написать файлы Excel с 1 миллионом строк с пакетом openxlsx в R

У меня есть пользователи, которые не могут или не хотят подключаться к реляционным базам данных, но вместо этого предпочитают работать с данными, экспортированными в файлы Excel. Наборы записей, экспортированные из этих данных базы данных, могут стать довольно большими. (Я также экспортирую в файлы CSV).

Мой вопрос связан с этим: Обработка java.lang .OutOfMemoryError при записи в Excel из R.

Как рекомендовано в принятом ответе на этот вопрос (или, скорее, в первом комментарии), теперь я использую пакет openxlsx на основе Rcpp для экспорта некоторых представлений из базы данных. Он работает, когда в экспорте ~ 67000 строк, но он не работает для больших наборов данных (~ 1 миллион строк, ~ 20 параметров, все числовые, за исключением нескольких значений даты).

openxlsx::write.xlsx(data, file = "data.2008-2016.xlsx") # 800000 rows

Error: zipping up workbook failed. Please make sure Rtools is installed or a zip application is available to R.
         Try installr::install.rtools() on Windows

(Я использую ПК с Linux, и / usr / bin / zip доступен для R)

Могу ли я дать пакету openxlsx больше памяти? Или установить несколько настраиваемых параметров, чтобы лучше работать с большими наборами данных?

Есть ли что-то вроде options(java.parameters = "-Xmx1000m") для пакета xlsx на основе java для openxlsx?

Виньетка openxlsx не упоминает никаких опций. Но может быть, есть недокументированные способы или варианты? (например, отображение индикатора выполнения во время сохранения)

На этом этапе я действую следующим образом: закрываю все ненужные приложения, перезапускаю Rstudio, оставляю мало / совсем не больших объектов в глобальной среде, запрашиваю db, затем запускаю write.xlsx(). С таким «чистым списком» ему удалось экспортировать набор данных из 800000 строк в файл xlsx размером 93 МБ.


person knb    schedule 15.03.2016    source источник
comment
В Excel есть ограничения по строкам ... support.office.com/en-gb/article/   -  person cory    schedule 15.03.2016
comment
@cory, спасибо за ссылку на спецификации. Я знал, что ограничения существуют, но думал, что они выше; в частности, я думал, что размер рабочего листа также был ограничен доступной памятью и системными ресурсами, но это, очевидно, заблуждение. (Максимальный размер рабочего листа составляет 1048576 строк на 16384 столбца ...)   -  person knb    schedule 15.03.2016
comment
Excel 2007 имел ограничение в 65 536 строк. Те дни были тяжелыми ...   -  person cory    schedule 15.03.2016
comment
вы можете использовать options(error=recover) или debug(openxlsx::write.xlsx), чтобы точно определить проблему?   -  person Ben Bolker    schedule 23.12.2016
comment
Вы также можете попробовать Sys.setenv (R_ZIPCMD = / path_to_zip_tool) и посмотреть, поможет ли это более конкретно. В противном случае взгляните на stat.ethz.ch /R-manual/R-devel/library/utils/html/zip.html.   -  person Dylan Cross    schedule 06.01.2017


Ответы (1)


Твоя проблема не в памяти. openxlsx требует установки RTools или аналогичных программ для сохранения файлов Excel большего размера.

У меня была та же проблема и та же ошибка, что и вы только вчера. Ниже приведена ссылка на установщик Windows:

https://cran.r-project.org/bin/windows/Rtools/index.html

Следующий сайт дополнительно объясняет требования:

https://www.r-project.org/nosvn/pandoc/openxlsx.html

person Dylan Cross    schedule 22.12.2016
comment
Это правильный ответ, основанный на вашем сообщении об ошибке. Вам нужна версия zip, совместимая с openxlsx. Смотрите также здесь. r-project.org/nosvn/pandoc/openxlsx.html - person TARehman; 22.12.2016
comment
Я на Linux. Однако RTools доступен только для Windows - я не говорил об этом явно, но неявно, когда писал (/usr/bin/zip доступен для R), поэтому этот ответ не относится к моему варианту использования. Проголосовали хотя - person knb; 23.12.2016
comment
Тем не менее, спасибо за голос! Идея 1. Есть ли вероятность, что программа zip не работает с памятью? Странно, что вы получаете сообщение об ошибке архивирования книги. Идея 2: учитывая, что он работает с чистого листа, возможно, на вашем компьютере нет необходимой доступной памяти. Если вы наблюдаете за использованием памяти, увеличивается ли она и ограничивается ли она при запуске вашего R-скрипта? - person Dylan Cross; 05.01.2017