2012-12-30 13 views
8

में पीएनजी डिवाइस खोलने में असमर्थ, मैं आर में एक समारोह के साथ झुका रहा हूं, जहां लंबी कहानी छोटी है, मेरे पास for -loop है, और प्रत्येक चरण में, मैं png का उपयोग करके एक साजिश बचाता हूं, फिर तुरंत readPNG ताकि मैं आरजीबी जानकारी निकाल सकूं। मैं फिर एक दूसरी साजिश बना देता हूं, फिर readPNG यह इसलिए मैं दो छवियों के आरजीबी की तुलना कर सकता हूं। समस्या यह है कि मुझे png() डिवाइस को शुरू करने में असमर्थ होने के बारे में एक त्रुटि संदेश प्राप्त होता है, या कई लूप के बाद फ़ाइल लिखने के लिए फ़ाइल खोलने के लिए (कुछ हद तक लूप के रूप में कम हो सकता है, या कुछ हजार)।लूप

यहाँ वास्तव में कोड सरल है, लेकिन यह नंगे अनिवार्य है, और उत्पन्न त्रुटि संदेश:

testfun<-function(beg,fini) 
{ 
library(png) 
setwd("D://mydirectory") 
for (i in beg:fini) 
{ 
    png("test.png",width=277,height=277) #candidate image 
    par(mai=c(0,0,0,0)) 
    plot(1,type="n",ann=FALSE,xlim=c(0,255),ylim=c(0,255), 
     xaxt="n",yaxt="n",frame.plot=F) 
    polygon(x=c(10,60,60),y=c(10,10,60),col="red") 
    graphics.off() 

    image<-readPNG("test.png") 
    #code where I get rgb values for original 

    png("test2.png",width=277,height=277) #candidate image with diferent params 
    par(mai=c(0,0,0,0)) 
    plot(1,type="n",ann=FALSE,xlim=c(0,255),ylim=c(0,255), 
     xaxt="n",yaxt="n",frame.plot=F) 
    polygon(x=c(10,60,60),y=c(10,10,60),col="blue") 
    graphics.off() 

    image<-readPNG("test2.png") 
    #code where I get rgb values for second image, and compare 
} 
} 

और त्रुटि संदेश:

Error in png("test.png", width = 277, height = 277) : 
    unable to start png() device 
In addition: Warning messages: 
1: In png("test.png", width = 277, height = 277) : 
    Unable to open file 'test.png' for writing 
2: In png("test.png", width = 277, height = 277) : opening device failed 

मूल रूप से मैं dev.off() के रूप में था, लेकिन graphics.off() तो सोचा कि शायद लूप इतना तेज था कि एक डिवाइस को बंद करना फिर से खोलने की आवश्यकता से पहले पर्याप्त तेज़ नहीं था और यह किसी भी तरह 'भ्रमित' हो रहा था। मैंने प्रत्येक graphics.off के बाद Sys.sleep(0.1) का उपयोग करने का भी प्रयास किया, लेकिन इससे कोई मदद नहीं मिली। क्या मुझे कुछ बेवकूफ और स्पष्ट याद आ रही है, या यह सिर्फ एक डिवाइस बग है?

+0

@your अंतिम सवाल (स्लैश, एम्पेरसैंड्स, अक्षर लोप आदि के लिए देखो) सुनिश्चित करें कि फ़ाइल नाम कानूनी है निहित : dev.off के साथ कोई समस्या नहीं है, कोड अनुक्रम में निष्पादित किया गया है। तो हालांकि सब कुछ तेज़ होता है, पहले डिवाइस मारे जाते हैं और फिर एक नया डिवाइस खुला होता है। –

+3

क्या आप इस कोड को एक इंटरैक्टिव कंसोल में चलाते हैं, या उदाहरण का उपयोग करते हैं 'Rscript'। और, 'png' एक और अधिक न्यूनतम कोड के साथ काम करता है, उदा। : 'पीएनजी (" bla.png "); साजिश (1:10); dev.off()'। –

+0

मैं टिन-आर से फ़ंक्शन भेजता हूं, फिर इसे Rgui से कॉल करें। पीएनजी अपने आप ठीक काम करता है। लेकिन मैंने अभी एक सरल परीक्षण लिखा था जहां मेरे पास एक लूप में आपके द्वारा सुझाए गए कोड थे। इसे 10 बार, कोई समस्या नहीं है। इसे 100 बार चलाएं, और यह मिला: पीएनजी में त्रुटि ("test3.png"): पीएनजी() डिवाइस शुरू करने में असमर्थ इसके अलावा: चेतावनी संदेश: 1: पीएनजी ("test3.png") में असमर्थ: असमर्थ लिखने के लिए खुली फ़ाइल 'test3.png' 2: पीएनजी ("test3.png") में: डिवाइस खोलने में विफल रहा (क्षमा करें, मैं इस पर नया हूं और एक टिप्पणी स्वरूपण अभी भी मुझे परेशानी पैदा कर रहा है।) – Herc

उत्तर

15

मुझे एक ही समस्या आई है, हालांकि एक लूप स्थिति में नहीं। मेरे मामले में, ऐसा इसलिए था क्योंकि मैं .png आउटपुट को उस निर्देशिका में इंगित कर रहा था जो मौजूद नहीं था।

png('./tweets/graphics/unique words.png', width=12, height=8, units='in', res=300) 

एक बार जब मैंने निर्देशिका बनाई, और इसे सही तरीके से संदर्भित किया, तो त्रुटि दूर हो गई और मुझे मेरी .png छवि मिली।

+0

आप नहीं जानते कि आप मेरे लिए कितने सहायक हैं! मेमोरी रिसाव को समझने की कोशिश कर रहे घंटों का समय बताता है कि अन्य उत्तरों का उल्लेख किया जा रहा था और यह बहुत आसान था ... धन्यवाद! –

+0

'png() ' – dudu

4

मुझे लूप में भूखंडों को सहेजते समय भी यह समस्या थी। @Dino आग मुझे एक संकेत दिया था, मेरे पाश-उत्पन्न फ़ाइल नाम में एक अमान्य वर्ण ...

+0

का उपयोग करने से पहले बस अपने wd को' setwd() 'के साथ सेट करें क्या यह कोई उत्तर या टिप्पणी है? बाद में –

+0

की तरह लगता है इसे किसी भी तरह से phrased किया जा सकता है, यह मेरे लिए जवाब था। अगर आपको लगता है कि यह अनुचित है तो मैं इसे हटा सकता हूं। मैंने इसे संपादित किया है। – Alex

+3

जवाब पुलिस एलेक्स को अनदेखा करें। यह मेरे लिए एक जवाब था। –