2012-10-02 11 views
5

मैंने लिनक्स मशीन पर hdf5 पैकेज सफलतापूर्वक स्थापित किया है। अब मैं एक लूप में बड़ी संख्या में एचडीएफ 5 फाइलों से डेटा में पढ़ना चाहता हूं और एक समय श्रृंखला बना सकता हूं। प्रत्येक hdf5 फ़ाइल एक अलग समय के अनुरूप है। कई फाइलों में पढ़ने के बाद (केवल 1000 से अधिक) आर कहता है कि बहुत सी फाइलें खुली हैं। मैं उन्हें बंद करने का एक तरीका ढूंढना चाहता हूं ताकि लूप जारी रहे। यहाँ कोड है:आर में लोड होने के बाद मुझे एक hdf5 फ़ाइल कैसे बंद करनी चाहिए?

fdate <- "200605312355" # the first date for my test loop 
    fmax <- 1400 
    arr <- vector() 

    for (i in 1:fmax){ 
     fname <- paste(fdate,"_.h5") # path of h5 file 
     fid <- hdf5load(fname) # fid = NULL 
     arr[i] <- somevariable$data_array[lon,lat] 
     # would like to close the file here 
     fdate <- newdate(fdate,60*5) # a function that increments the date by seconds. 
    } 

HDF5 पैकेज समारोह hdf5cleanup, जो लगता है कि यह चीजों को साफ कर सकते हैं लग रहा है शामिल है लेकिन यह एक फ़ाइल पहचानकर्ता की आवश्यकता है। उपरोक्त मेरे कोड में फीड शून्य लौटाता है। इसके बजाय फ़ाइल नाम डालने का प्रयास i.e. hdf5cleanup (fname) आर को निरस्त करने के लिए प्रेरित करता है। शायद hdf5load फ़ाइल को बंद करना और विफल रहता है। यदि ऐसा है, तो सिस्टम() कमांड या अन्यथा जारी करके कनेक्शन को बंद करने का कोई तरीका है?

संयोग से, शोकनेक्शन() कुछ भी नहीं देता है, ठीक है, सचमुच केवल हेडर नाम "वर्णन वर्ग मोड टेक्स्ट आइसोपेन पढ़ सकते हैं" लिख सकते हैं।

मेरा प्रश्न संक्षिप्त में: मैं hdf5load() के साथ लोड करने के बाद आर में एक hdf5 फ़ाइल से कनेक्शन कैसे बंद करूं?

+0

मैं 'आर' निरस्त कर रहा हूं, आपको' hdf5' पैकेज के रखरखाव से संपर्क करना चाहिए क्योंकि ऐसा नहीं होना चाहिए। रखरखाव भी फाइलों को बंद करने के लिए आपको सही आमंत्रण बताने में सक्षम हो सकता है। –

उत्तर

2

नोट: टिप्पणियों के मुताबिक, निम्नलिखित उत्तर काम नहीं करेगा। इसे कम से कम अभी तक छोड़ने के लिए, एक असफल मार्ग को आगे बढ़ाने के लिए चिह्नित करना।


मैं hdf5 स्थापित नहीं है, तो मैं जांच नहीं कर सकता है कि अगर यह काम करता है, तो यह अंधेरे में एक शॉट का एक सा है:

fname <- paste(fdate,"_.h5") # path of h5 file 
# fhandle <- open(fname) # Comment pointed out this was not the intended function 
fhandle <- file(description = fname, open = "rb") 
hdf5load(fhandle) # hdf5load returns nothing when load=TRUE (the default) 
arr[i] <- somevariable$data_array[lon,lat] 
close(fhandle) 

प्रलेखन का कहना है कि hdf5load लेता है एक फ़ाइल नाम, लेकिन यह एक फाइलहेडल भी ले सकता है। यदि ऐसा है, तो यह काम कर सकता है।

+0

आपके त्वरित उत्तर के लिए धन्यवाद! ओपन() फ़ंक्शन क्लास 'कनेक्शन' के लिए है, इसलिए यहां काम नहीं करता है। इसने मुझे 'fhandle <- file (description = fname, open = "rb")' – user1714900

+0

"को खोलने का विचार दिया है, मैं फ़ाइल खोल सकता हूं और इसे बंद (fhandle) से बंद कर सकता हूं लेकिन दुर्भाग्य से 'hdf5load (fhandle)' त्रुटि देता है' पहला तर्क पथनाम होना चाहिए। अधिक जानकारी के लिए, hdf5load फ़ंक्शन है: 'फ़ंक्शन (फ़ाइल, लोड = TRUE, verbosity = 0, tidy = FALSE) { कॉल <- sys.call() । बाहरी ("do_hdf5load", कॉल, sys। फ्रेम (sys.parent()), फ़ाइल, लोड, as.integer (verbosity), as.logical (tidy), पैकेज = "hdf5") } ' – user1714900

संबंधित मुद्दे