warning upon automatic close of connection
I would like to follow up on the annoying warnings which are generated when connections are automatically closed. This is affecting several of my packages and is quite a nuisance. R does not give you a message every time it garbage collects, at least by default. Perhaps there could be a higher level of warnings that issue information on garbage collection, closed connections, etc. or perhaps the user could have control over it but having it as the default is really a nuisance and I hope this warning can be removed.
On 9/12/07, Seth Falcon <sfalcon at fhcrc.org> wrote:
"Gabor Grothendieck" <ggrothendieck at gmail.com> writes:
I noticed that under R 2.6.0 there is a warning about closing the connection in the code from this post: https://stat.ethz.ch/pipermail/r-help/2007-September/140601.html which is evidently related to the following from the NEWS file: o Connections will be closed if there is no R object referring to them. A warning is issued if this is done, either at garbage collection or if all the connection slots are in use. If we use read.table directly it still happens: # use Lines and Lines2 from cited post library(zoo) DF1 <- read.table(textConnection(Lines), header = TRUE) DF2 <- read.table(textConnection(Lines2), header = TRUE) z1 <- zoo(as.matrix(DF1[-1]), as.Date(DF1[,1], "%d/%m/%Y")) z2 <- zoo(as.matrix(DF2[-1]), as.Date(DF2[,1], "%d/%m/%Y")) both <- merge(z1, z2) plot(na.approx(both))
R.version.string # Vista
[1] "R version 2.6.0 alpha (2007-09-06 r42791)" Is this annoying warning really necessary? I assume we can get rid of it by explicitly naming and closing the connections but surely there should be a way to avoid the warning without going to those lengths.
Up until the change you mention above it really was necessary to name and close all connections. Short scripts run in fresh R sessions may not have had problems with code like you have written above, but longer programs or shorter ones run in a long running R session would run out of connections. Now that connections have weak reference semantics, one can ask whether this behavior should be "standard" and no warning issued.
I would have thought that read.table opens the connection then it would close it itself so no warning would need to be generated.
In your example, read.table is _not_ opening the connection. You are
passing an open connection which has no symbol bound to it:
foo = ""
c = textConnection(foo)
c
description class mode text
"foo" "textConnection" "r" "text"
opened can read can write
"opened" "yes" "no"
But I think passing a closed connection would cause the same sort of
issue. It seems that there are two notions of "closing a connection":
(i) close as the opposite of open, and (ii) clean up the entire
connection object. I haven't looked closely at the code here, so I
could be wrong, but I'm basing this guess on the following:
file("foo")
description class mode text opened can read
"foo" "file" "r" "text" "closed" "yes"
can write
"yes"
## start new R session
for (i in 1:75) file("foo")
gc()
warnings()[1:3]
gc()
used (Mb) gc trigger (Mb) max used (Mb) Ncells 149603 4.0 350000 9.4 350000 9.4 Vcells 101924 0.8 786432 6.0 486908 3.8 There were 50 or more warnings (use warnings() to see the first 50)
warnings()[1:3]
$`closing unused connection 76 (foo)` NULL $`closing unused connection 75 (foo)` NULL $`closing unused connection 74 (foo)` NULL -- Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research Center BioC: http://bioconductor.org/ Blog: http://userprimary.net/user/