xlsx
Paket, okuma ve hatta orta büyük elektronik tablolar için, maalesef R. adlı Excel tabloları yazmak için kullanılabilir java.lang.OutOfMemoryError
oluşabilir. Özellikle,
.Jcall'da hata ("RJavaTools", "Ljava / lang / Object;", "invokeMethod", cl,:
java.lang.OutOfMemoryError: Java yığın alanı.Jcall'da hata ("RJavaTools", "Ljava / lang / Object;", "newInstance", .jfindClass (class),:
java.lang.OutOfMemoryError: GC ek yük sınırı aşıldı
(Diğer ilgili istisnalar da mümkündür ancak daha nadirdir.)
Elektronik tabloları okurken bu hatayla ilgili benzer bir soru soruldu.
Büyük bir xlsx dosyasını R'ye mi aktarıyorsunuz?
Excel elektronik tablolarını CSV'ye göre veri depolama ortamı olarak kullanmanın ana avantajı, aynı dosyada birden çok sayfa saklayabilmenizdir, bu nedenle burada her çalışma sayfasına bir veri çerçevesi yazılacak veri çerçevelerinin bir listesini ele alıyoruz. Bu örnek veri kümesi, her biri 200.000 satıra kadar iki sütun içeren 40 veri çerçevesi içerir. Sorunlu olması yeterince büyük olacak şekilde tasarlanmıştır, ancak değiştirerek boyutunu değiştirebilir n_sheets
ve 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))
Bunu dosyaya yazmanın doğal yöntemi, kullanarak bir çalışma kitabı oluşturmak createWorkbook
ve ardından her veri çerçevesi çağrısı createSheet
ve addDataFrame
. Son olarak çalışma kitabı dosyaya yazılabilir saveWorkbook
. Nereye düştüğünü görmeyi kolaylaştırmak için döngüye mesajlar ekledim.
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")
Bunu 8GB RAM'e sahip bir makinede 64 bit olarak GC overhead limit exceeded
çalıştırdığınızda addDataFrame
, ilk kez çalışırken hatayı atar .
Kullanarak Excel elektronik tablolarına büyük veri kümelerini nasıl yazabilirim xlsx
?
xlsx
paket için paket değiştirilerek tüm bu sorun artık çözülebilir .openxlsx
Rcpp