[Rd] warning upon automatic close of connection
Gabor Grothendieck
ggrothendieck at gmail.com
Fri Sep 21 14:22:55 CEST 2007
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/
>
More information about the R-devel
mailing list