आर

2017-06-14 6 views
5

में/से xlsx फ़ाइलों को पढ़ने/लिखने का तेज़ तरीका this one पर यह एक अनुवर्ती प्रश्न है। .xlsx फ़ाइलों को आर में पढ़ने का सबसे तेज़ तरीका क्या है?आर

मैंका उपयोग 36 .xlsx फ़ाइलों से डेटा में पढ़ने के लिए करता हूं। यह काम करता हैं। हालांकि, समस्या यह है कि यह बहुत समय ले रहा है (30 मिनट से अधिक), विशेष रूप से जब प्रत्येक फ़ाइल में डेटा पर विचार करना बड़ा नहीं होता है (प्रत्येक फ़ाइल में आकार 3 * 3652 का मैट्रिक्स)। इस अंत में, कृपया इस तरह की समस्या से निपटने के लिए बेहतर है? .xlsx को आर में पढ़ने का कोई और आसान तरीका है? या क्या मैं 36 फाइलों को एक सीएसवी फ़ाइल में जल्दी से रख सकता हूं और फिर आर में पढ़ सकता हूं?

इसके अलावा, मुझे अभी एहसास हुआ कि readxl xlsx नहीं लिख सकता है। क्या पढ़ने के बजाए लेखन से निपटने के लिए इसका कोई समकक्ष है?

"उन लोगों के लिए प्रतिक्रिया नीचे इस सवाल का मतदान":

यह सवाल तथाकथित "स्वच्छंद जवाब और स्पैम" के बजाय तथ्य के बारे में है, क्योंकि गति समय है और समय तथ्य है, लेकिन राय।

इसके अलावा अद्यतन:

शायद एक सरल भाषा में हमारे लिए व्याख्या कर सकते हैं क्यों कुछ विधि दूसरों की तुलना में बहुत तेजी से काम करता है। मैं निश्चित रूप से इस बारे में उलझन में हूँ।

+6

उपयोग 'readxl :: read_excel()', यह आमतौर पर तेजी से – scoa

+3

या तो कोशिश 'openxlsx' या' readxl'package है। – Jaap

+3

यह एक बिल्कुल उचित सवाल है जैसे हमने एसओ में अन्य प्रश्नों को देखा है, आर में '.csv' फ़ाइलों को पढ़ने या लिखने का सबसे तेज़ तरीका क्या है। प्रश्नों के उत्तर के लिए बेंचमार्क की आवश्यकता होगी और यह ब्याज की हो सकती है एक बड़े दर्शकों के लिए –

उत्तर

1

यहां एक छोटा बेंचमार्क परीक्षण है। परिणाम: मानक सेटिंग्स का उपयोग करते हुए विभिन्न पंक्तियों (n) और कॉलम (p) में openxlsx::read.xlsx के रूप में औसतन दोगुनी है।

enter image description here

options(scipen=999) # no scientific number format 

nn <- c(1, 10, 100, 1000, 5000, 10000, 20000, 30000) 
pp <- c(1, 5, 10, 20, 30, 40, 50) 

# create some excel files 
l <- list() # save results 
tmp_dir <- tempdir() 

for (n in nn) { 
    for (p in pp) { 
    name <- 
    cat("\n\tn:", n, "p:", p) 
    flush.console() 
    m <- matrix(rnorm(n*p), n, p) 
    file <- paste0(tmp_dir, "/n", n, "_p", p, ".xlsx") 

    # write 
    write.xlsx(m, file) 

    # read 
    elapsed <- system.time(x <- openxlsx::read.xlsx(file))["elapsed"] 
    df <- data.frame(fun = "openxlsx::read.xlsx", n = n, p = p, 
        elapsed = elapsed, stringsAsFactors = F, row.names = NULL) 
    l <- append(l, list(df)) 

    elapsed <- system.time(x <- readxl::read_xlsx(file))["elapsed"] 
    df <- data.frame(fun = "readxl::read_xlsx", n = n, p = p, 
        elapsed = elapsed, stringsAsFactors = F, row.names = NULL) 
    l <- append(l, list(df)) 

    } 
} 

# results 
d <- do.call(rbind, l) 

library(ggplot2) 

ggplot(d, aes(n, elapsed, color= fun)) + 
    geom_line() + geom_point() + 
    facet_wrap(~ paste("columns:", p)) + 
    xlab("Number of rows") + 
    ylab("Seconds")