2011-06-10 16 views
18
getCommentary=function(){ 
    Commentary=readLines(file("C:\\Commentary\\com.txt")) 
    return(Commentary) 
    close(readLines) 
    closeAllConnections() 
} 

मुझे नहीं पता कि इस फ़ंक्शन में क्या गलत है। जब मैं आर में इस चलाने के लिए, यह मुझे निम्न चेतावनी दे रही रखता है:चेतावनी: अप्रयुक्त कनेक्शन बंद करना

Warning message: 
closing unused connection 5 ("C:\\Commentary\\com.txt") 

उत्तर

34

readLines() एक समारोह है, आप इसे नहीं close() है। आप file() फ़ंक्शन द्वारा खोले गए कनेक्शन को बंद करना चाहते हैं। इसके अलावा, आप आईएन से पहले किसी भी कनेक्शन को बंद कर सकते हैं। जहां तक ​​कार्य का संबंध है, return() कथन के बाद की रेखाएं मौजूद नहीं हैं।

एक विकल्प file() कॉल द्वारा लौटाई गई वस्तु को सहेजना है, क्योंकि आपको केवल उन सभी कनेक्शन को बंद नहीं करना चाहिए जो आपके कार्य को खुलते हैं।

R> cat("foobar\n", file = "foo.txt") 
R> con <- file("foo.txt") 
R> out <- readLines(con) 
R> out 
[1] "foobar" 
R> close(con) 

अपने समारोह लिखने के लिए, तथापि, मैं शायद एक अलग कील ले जाएगा:: यहाँ विचार वर्णन करने के लिए एक गैर समारोह संस्करण है

getCommentary <- function(filepath) { 
    con <- file(filepath) 
    on.exit(close(con)) 
    Commentary <-readLines(con) 
    Commentary 
} 

साथ, इस प्रकार इस्तेमाल किया जाता है एक उदाहरण फ़ाइल के रूप में ऊपर बनाया पाठ फ़ाइल को पढ़ने के लिए

R> getCommentary("foo.txt") 
[1] "foobar" 

से मैं on.exit() ताकि एक बार con बनाई गई है इस्तेमाल किया, समारोह समाप्त हो जाता है, तो, w के लिए जो भी कारण है, कनेक्शन बंद हो जाएगा। तुम सिर्फ अंतिम पंक्ति, उदा .:

Commentary <-readLines(con) 
    close(con) 
    Commentary 
} 

समारोह readLines() फोन पर असफल और उसे समाप्त कर सकता से पहले सिर्फ एक close(con) बयान को यह छोड़ दिया है, तो कनेक्शन बंद नहीं किया जा होगा। on.exit() कनेक्शन को बंद करने की व्यवस्था करेगा, भले ही फ़ंक्शन प्रारंभ हो जाए।

+3

या फ़ाइल का उपयोग न करें। पढ़ें पथ एक पथ के साथ काम करता है। – hadley

+2

@ हैडली की टिप्पणी बुद्धिमान है (असहज रूप से): आधार व्यवहार को प्राथमिकता दें जो स्वयं से निपटने के लिए कनेक्शन प्रबंधित करने के लिए अच्छी तरह से निर्मित है। ऐसा कहकर, मैंने सामान्य मामले के लिए 'on.exit' के चित्रण के लिए उपर्युक्त उत्तर दिया, जहां वह बुद्धिमान सलाह लागू नहीं होती है। –

+0

@MattTenenbaum: तो अगर मैं 'var1 <- readLines (" filename.txt ", एन्कोडिंग =" यूटीएफ -8 ") का उपयोग कर फ़ाइल खोलता हूं। मुझे इसे सही बंद करने की ज़रूरत नहीं है? – discipulus

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