1

我正在运行一个加载多个文件的脚本。达到 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% {....}
4

2 回答 2

2

该错误是由于在文件不存在时运行 read.table 引起的。对磁盘连接上不存在的文件的多个 read.table 请求不会被释放(与文件确实存在时不同)。

为了克服我使用 if (file.exists(filename)){read.table(filename)} 的问题,这似乎已经解决了这个问题。谢谢大家帮我解决这个问题。

于 2013-05-21T11:53:40.107 回答
0

通过 url() 命令进行 http 调用时,您可能会遇到类似的错误

read.table(url("http://...."),....)

当您尝试连接但收到 500 服务器错误时,可能会发生这种情况。在这种情况下, read.table 可能无法正确关闭连接。经过多次此类循环后,您将累积 http CLOSE_WAIT 套接字,您可以使用“netstat -a”查看,从而导致“所有连接正在使用”错误。

解决方案是使用 RCurl 包来执行 URL 连接,这在 Stack Overflow 问题中有描述:

Stack Overflow: 从互联网读取数据

于 2014-01-16T23:53:26.237 回答