我正在运行一个加载多个文件的脚本。当达到50个加载的文件时,我得到一个错误“所有连接都在使用中”。
我认为我必须关闭连接,但我遇到了以下问题。
con = file(paste('/home/rstudio/userstats/',cuserid,'.tsv',sep=""))
userstats_current = read.table(con, sep="\t", header=0, quote="", stringsAsFactors=F)
close(con)
Error in close.connection(con) : invalid connection但是,如果我键入以下内容,则一切正常:
con = file(paste('/home/rstudio/userstats/',cuserid,'.tsv',sep=""))
close(con)当应用read.table时,连接是否会发生变化?我如何设法关闭这些连接?
更新
感谢您的回复。问题是,当我运行foreach循环时,即使在一段时间后,我仍然收到所有连接的错误。
registerDoMC(2)
matrix <- foreach(i=1:nrow(sample), .combine=rbind) %dopar% {....}发布于 2013-05-21 19:53:40
该错误是由于在文件不存在时运行read.table而导致的。对光盘上不存在的文件进行多次read.table请求时,不会释放连接(与文件确实存在时不同)。
为了克服这个问题,我使用了if (file.exists(文件名)){read.table(文件名)},这似乎已经解决了这个问题。谢谢你们帮我解决了这个问题。
发布于 2014-01-17 07:53:26
通过url()命令进行http调用时,可能会遇到类似的错误
read.table(url("http://...."),....)当您尝试连接但收到500 Server错误时,可能会发生这种情况。在这种情况下,read.table可能无法正确关闭连接。在这种类型的多次循环之后,您将累积http CLOSE_WAIT套接字,您可以使用'netstat -a‘查看它,从而导致'all connection in use’错误。
这个问题的解决方案是使用RCurl包来执行URL连接,这在堆栈溢出问题中进行了描述:
https://stackoverflow.com/questions/16653135
复制相似问题