xlsx works in the end after the JAVA memory issue
XLConnect and openxlsx doese not work
# deal with JAVA issues
# # Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, :
# https://stackoverflow.com/questions/21937640/handling-java-lang-outofmemoryerror-when-writing-to-excel-from-r
# https://stackoverflow.com/questions/7019912/using-the-rjava-package-on-win7-64-bit-with-r
options(java.parameters = "-Xmx4g")
options(java.home="C:/Program Files/Java/jdk1.8.0_144/jre/bin/server")
library(rJava)
library(xlsx)
jgc <- function()
{
gc()
.jcall("java/lang/System", method = "gc")
}
if(!file.exists(FILE_OUT_RESULT)){
file.rename(FILE_OUT_RESULT, FILE_OUT_RESULT_BKP)
}
# map2(dfToSave, dfToSaveSheetName,
# ~write.xlsx(.x, file=FILE_OUT_RESULT, sheetName=.y,
# col.names=TRUE, row.names=TRUE, append=TRUE, showNA=TRUE))
wb <- createWorkbook()
for(i in seq_along(dfToSave)){
jgc()
message("Creating sheet", i)
sheet <- createSheet(wb, sheetName = dfToSaveSheetName[[i]])
message("Adding data frame", i)
addDataFrame(dfToSave[[i]], sheet)
}
saveWorkbook(wb, FILE_OUT_RESULT)
# # XLConnect ---------------------------------------------------------------
# # too loop to response
# options(java.parameters = "-Xmx4g" )
# library(XLConnect)
# outputWB <- loadWorkbook(FILE_OUT_RESULT, create=TRUE)
# for(i in seq_along(dfToSave)){
# createSheet(outputWB, name=dfToSaveSheetName[[i]])
# }
#
# for(i in seq_along(dfToSave)){
# writeWorksheet(outputWB,
# dfToSave[[i]],
# sheet = dfToSaveSheetName[[i]])
# }
# saveWorkbook(outputWB)
#
# # openxlsx ----------------------------------------------------------------
# #input string 9903 is invalid UTF-8
# library(openxlsx)
# wb <- createWorkbook()
# map(dfToSaveSheetName, ~ addWorksheet(wb, .x))
# map2(dfToSave, dfToSaveSheetName, ~ writeData(wb = wb, sheet = .y, x=.x))
# saveWorkbook(wb, FILE_OUT_RESULT, overwrite = TRUE)
No comments:
Post a Comment