xlsx
Pakiet może być wykorzystany do odczytu i zapisu arkuszy kalkulacyjnych Excel z R. Niestety, nawet dla średnio dużych arkuszy, java.lang.OutOfMemoryError
może wystąpić. W szczególności,
Błąd w .jcall („RJavaTools”, „Ljava / lang / Object;”, „invokeMethod”, cl,:
java.lang.OutOfMemoryError: Java heap spaceBłąd w .jcall ("RJavaTools", "Ljava / lang / Object;", "newInstance", .jfindClass (klasa),:
java.lang.OutOfMemoryError: Przekroczono limit narzutu GC
(Inne powiązane wyjątki są również możliwe, ale rzadsze).
Podobne pytanie padło w związku z tym błędem podczas czytania arkuszy kalkulacyjnych.
Importujesz duży plik xlsx do R?
Główną zaletą używania arkuszy kalkulacyjnych Excel jako nośnika danych w porównaniu z CSV jest to, że można przechowywać wiele arkuszy w tym samym pliku, dlatego tutaj rozważamy listę ramek danych do zapisania po jednej ramce danych na arkusz. Ten przykładowy zestaw danych zawiera 40 ramek danych, każda z dwiema kolumnami po maksymalnie 200 tys. Wierszy. Został zaprojektowany tak, aby był wystarczająco duży, aby był problematyczny, ale możesz zmienić rozmiar, zmieniając n_sheets
i n_rows
.
library(xlsx)
set.seed(19790801)
n_sheets <- 40
the_data <- replicate(
n_sheets,
{
n_rows <- sample(2e5, 1)
data.frame(
x = runif(n_rows),
y = sample(letters, n_rows, replace = TRUE)
)
},
simplify = FALSE
)
names(the_data) <- paste("Sheet", seq_len(n_sheets))
Naturalną metodą zapisywania tego do pliku jest utworzenie skoroszytu za pomocą createWorkbook
, a następnie pętla nad każdym wywołaniem ramki danych createSheet
i addDataFrame
. Wreszcie skoroszyt można zapisać do pliku za pomocą saveWorkbook
. Dodałem wiadomości do pętli, aby łatwiej było zobaczyć, gdzie się przewraca.
wb <- createWorkbook()
for(i in seq_along(the_data))
{
message("Creating sheet", i)
sheet <- createSheet(wb, sheetName = names(the_data)[i])
message("Adding data frame", i)
addDataFrame(the_data[[i]], sheet)
}
saveWorkbook(wb, "test.xlsx")
Uruchomienie tego w wersji 64-bitowej na komputerze z 8 GB pamięci RAM powoduje zgłoszenie GC overhead limit exceeded
błędu podczas addDataFrame
pierwszego uruchomienia.
Jak pisać duże zbiory danych do arkuszy kalkulacyjnych programu Excel za pomocą xlsx
?
xlsx
pakiet naopenxlsx
pakiet, który jest zależnyRcpp
raczej od języka Java.