2017-07-04 1 views
0

J'ai une donnée qui a une taille similaire à « un » ci-dessousClash lors de l'exportation fichier Excel à l'aide « .xlsx » et forfaits « openxlsx » dans R

library(openxlsx) 
a <- list() 
names(a) <- paste("sheet", seq_along(fulldata), sep="_") ### name for each sheet 
for (i in 1:172) { 
a[[i]] <- matrix(i,30,60) 
} 

write.xlsx(a, "a.xlsx") 

Si je lance le code ci-dessus, quelques secondes plus tard , R se ferme automatiquement.

library(xlsx) 
options(java.parameters = "-Xmx4000m") 
a <- list() 
for (i in 1:172) { 
a[[i]] <- matrix(i,30,60) 
} 
n <- paste("sheet", seq_along(fulldata), sep="_") ### name for each sheet 

for (i in 1:172) { 
write.xlsx(a[[i]], "c.xlsx", sheetName=n[[i]], append=TRUE) 
} 

Si j'exécute le code ci-dessus, après 10 minutes, il renvoie une erreur sur le manque de mémoire. je

options(java.parameters = "-Xmx4000m") 

pour augmenter la mémoire à utiliser, mais encore, il dit manque de mémoire.
Les deux fonctionnent très bien avec de petites données mais cela ne fonctionne pas quand j'essaie d'exporter 172 feuilles à la fois. J'ai besoin de toutes les 172 feuilles à inclure dans un fichier Excel.

Répondre

0

La création de feuilles à l'aide de la relimitation peut aider à résoudre le problème de mémoire.

library(xlsx) 

# Create the list of matrices 
a <- list() 
for (i in 1:172) { 
    a[[i]] <- matrix(i,30,60) 
} 

# Set names for the matrices 
names(a) <- seq_along(a) 

# Create a workbook object 
wb <- createWorkbook() 

# Add each matrix to it's own worksheet inside of the workbook 
lapply(seq_along(a), function(matrices, matrix.names, i){ 
         ws <- createSheet(wb, matrix.names[[i]]) 
         addDataFrame(matrices[[i]], ws) 
        }, matrices = a, matrix.names = names(a)) 

# Set the file path to save the workbook to 
(output.path <- file.path(tempdir(), "output.xlsx")) 

# Save the workbook 
saveWorkbook(wb, output.path)