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")
答案 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()
也会安排关闭连接。