Если размер данных невелик, в R есть много пакетов и функций, которые можно использовать в соответствии с вашими требованиями.
write.xlsx, write.xlsx2, XLconnect также выполняют свою работу, но иногда они медленнее по сравнению с openxlsx .
Итак, если вы имеете дело с большими наборами данных и сталкивались с ошибками java. Я бы посоветовал взглянуть на "openxlsx", который действительно потрясающий, и сократить время до 1/12 .
Я протестировал все и, наконец, был действительно впечатлен производительностью возможностей openxlsx.
Вот шаги для записи нескольких наборов данных на несколько листов.
install.packages("openxlsx")
library("openxlsx")
start.time <- Sys.time()
x <- as.data.frame(matrix(1:4000000,200000,20))
y <- as.data.frame(matrix(1:4000000,200000,20))
z <- as.data.frame(matrix(1:4000000,200000,20))
wb <- createWorkbook("Example.xlsx")
Sys.setenv("R_ZIPCMD" = "C:/Rtools/bin/zip.exe")
Sys.setenv ("R_ZIPCMD" = "C: /Rtools/bin/zip.exe") должен быть статическим, так как он принимает ссылку на некоторую утилиту из Rtools.
Примечание. Если в вашей системе не установлен Rtools, сначала установите его для бесперебойной работы. вот ссылка для справки: (выберите подходящую версию)
https://cran.r-project.org/bin/windows/Rtools/
проверьте параметры по ссылке ниже (необходимо установить все флажки во время установки)
https://cloud.githubusercontent.com/assets/7400673/12230758/99fb2202-b8a6-11e5-82e6-836159440831.png
addWorksheet(wb, "Sheet 1")
addWorksheet(wb, "Sheet 2")
addWorksheet(wb, "Sheet 3")
writeData(wb, 1, x)
writeData(wb, 2, x = y, withFilter = TRUE)
writeDataTable(wb, 3, z)
saveWorkbook(wb, file = "Example.xlsx", overwrite = TRUE)
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
Пакет openxlsx действительно хорош для чтения и записи огромных данных из / в файлы Excel и имеет множество опций для пользовательского форматирования в Excel.
Интересным фактом является то, что нам не нужно беспокоиться о памяти кучи java здесь.
createSheet
функция, которая позволяет вам создавать новые листы, а затем записывать на них в цикле. Кроме того, эквивалентные функции в XLConnect векторизованы, что позволяет записывать список фреймов данных на несколько листов.