我正在运行一个加载多个文件的脚本。在达到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% {....}
答案 0 :(得分:2)
错误是由文件不存在时运行read.table引起的。在多次read.table请求时,不会释放光盘连接上不存在的文件(与文件存在时不同)。
为了克服我使用if(file.exists(filename)){read.table(filename)}的问题,这似乎解决了这个问题。谢谢大家帮我解决这个问题。
答案 1 :(得分:0)
通过url()命令
进行http调用时,可能会遇到类似的错误read.table(url("http://...."),....)
当您尝试连接但获得500服务器错误时,可能会发生这种情况。在这种情况下,read.table可能无法正确关闭连接。在这种循环之后,你将累积http CLOSE_WAIT套接字,你可以使用'netstat -a'查看,导致'所有正在使用的连接'错误。
解决方法是使用RCurl包来执行您的URL连接,这在Stack Overflow问题中有所描述:
堆栈溢出: read data from internet