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

Bu işlevin neyin yanlış olduğunu bilmiyorum. Ben Ar bu çalıştırdığınızda, bana aşağıdaki uyarıyı veren tutar:Uyarı: kullanılmayan bağlantıyı kapatın n

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

cevap

34

readLines() bir işlevdir, değil close() bunu. file() işlevi tarafından açılan bağlantıyı kapatmak istiyorsunuz. Ayrıca, numaralı telefondannumaralı telefon numaralarından herhangi bir bağlantıyı kapatmış olursunuz. İşlevle ilgili olarak, return() ifadesinden sonraki satırlar mevcut değil.

file() çağrısı tarafından döndürülen nesneyi kaydetmenin bir yolu, tüm bağlantıları kapatmamanız gerektiğinden yalnızca işlevinizin açılmasını sağlar.

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

ancak, muhtemelen biraz farklı bir yol alacaktı, işlevinizi yazmak için:: İşte fikir göstermek için olmayan bir fonksiyon versiyonu

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

ile, aşağıdaki şekilde hangisi kullanılır örnek dosyası olarak yukarıda oluşturulan metin dosyası fonksiyonu sona ererse w için, bu yüzden bir kere con oluşturulur on.exit() kullanılan

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

okuma Nefret nedeni, bağlantı kapatılacak. bağlantı kapatıldı olmaz bu yüzden, sadece son satırı, ör .:

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

fonksiyon readLines() çağrı başarısız ve sonlandırmak edemeden sadece close(con) açıklamaya bu bırakıldığında. on.exit(), işlev sonlandırılsa bile bağlantının kapatılmasını ayarlayacaktır.

+3

Veya dosyayı kullanmayın. Oku satırları bir yolla çalışır. – hadley

+2

@ hadley'ın yorumu bilgedir (şaşırtıcı değil): Kendileriyle başa çıkmak için bağlantıları yönetmek için iyi yapılandırılmış temel davranışı tercih edin. Bunu söyledikten sonra, bu akıllıca tavsiyenin geçerli olmadığı genel durum için, 'on.exit' örneğinin yukarıdaki cevabına oy verdim. –

+0

@MattTenenbaum: Eğer bir dosyayı "var1 <- readLines" ("filename.txt", = "UTF-8") 'yi kullanarak açabilirsem. Onu kapatmak zorunda değil miyim? – discipulus