xlsxपैकेज पढ़ सकते हैं और दुर्भाग्य से आर से एक्सेल स्प्रेडशीट बारे में, यहां तक कि मामूली बड़े स्प्रेडशीट के लिए करने के लिए इस्तेमाल किया जा सकता java.lang.OutOfMemoryErrorहो सकता है। विशेष रूप से,
त्रुटि injcall ("RJavaTools", "Ljava / lang / वस्तु?", "InvokeMethod", cl:
java.lang.OutOfMemoryError: Java हीप स्पेसत्रुटि .jcall ("RJavaTools", "Ljava / lang / Object?", "NewInstance", .jfindClass (वर्ग):
java.lang.OutOfMemoryError: GC ओवरहेड सीमा से अधिक हो गई है।
(अन्य संबंधित अपवाद भी संभव हैं लेकिन दुर्लभ हैं।)
स्प्रेडशीट पढ़ते समय इस त्रुटि के बारे में एक समान प्रश्न पूछा गया था।
आर में एक बड़ा xlsx फ़ाइल आयात करना?
CSV पर डेटा स्टोरेज माध्यम के रूप में एक्सेल स्प्रेडशीट का उपयोग करने का मुख्य लाभ यह है कि आप एक ही फाइल में कई शीट स्टोर कर सकते हैं, इसलिए यहां हम डेटा फ़्रेम की एक सूची को प्रति वर्कशीट में एक डेटा फ्रेम लिखा जाना मानते हैं। इस उदाहरण के डेटासेट में 40 डेटा फ़्रेम होते हैं, जिनमें से प्रत्येक में 200k पंक्तियों के दो कॉलम होते हैं। यह समस्याग्रस्त होने के लिए काफी बड़ा बनाया गया है, लेकिन आप आकार बदलकर बदल सकते हैं n_sheetsऔर 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))
इस फाइल को लिखने की प्राकृतिक विधि का उपयोग करके एक कार्यपुस्तिका बनाना है createWorkbook, फिर प्रत्येक डेटा फ़्रेम कॉलिंग पर लूप createSheetऔर addDataFrame। अंत में कार्यपुस्तिका को फ़ाइल का उपयोग करके लिखा जा सकता है saveWorkbook। मैंने लूप में संदेशों को जोड़ दिया है ताकि यह देखना आसान हो जाए कि यह कहाँ पर गिरता है।
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")
8GB रैम वाली मशीन पर 64-बिट में इसे GC overhead limit exceededचलाने पर addDataFrame, यह पहली बार रन करते समय त्रुटि को फेंक देता है ।
मैं एक्सेल स्प्रेडशीट का उपयोग करके बड़े डेटासेट कैसे लिख सकता हूं xlsx?
xlsxपैकेज के लिए स्वैप करने से दूर किया जा सकता हैopenxlsx, जोRcppजावा के बजाय निर्भर है ।