警告:关闭未使用的连接n

时间:2011-06-10 08:51:33

标签: r warnings readline

getCommentary=function(){
    Commentary=readLines(file("C:\\Commentary\\com.txt"))
    return(Commentary)
    close(readLines)
    closeAllConnections()
}

我不知道这个功能有什么问题。当我在R中运行它时,它会不断给我以下警告:

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

1 个答案:

答案 0 :(得分:39)

readLines()是一个函数,你没有close()它。您想要关闭file()功能打开的连接。此外,您在关闭任何连接之前return() 。就函数而言,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被创建,如果函数终止,无论出于何种原因,连接都将被关闭。如果你把它留在最后一行之前的close(con)语句中,例如:

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

该函数可能会在readLines()调用失败并终止,因此不会关闭连接。即使函数提前终止,on.exit()也会安排关闭连接。