Thanks for the fix Martin.
Paul
On 04/04/18 02:07, Martin Maechler wrote:
Paul Murrell <p...@stat.auckland.ac.nz>
on Tue, 3 Apr 2018 09:41:56 +1200 writes:
> Hi What you are doing "wrong" is loading a recordedplot
> into the same session that it was created in. The
> saveRDS()/readRDS() works if you save in one R session and
> then read in a different R session. The assumption is
> that if you are still in the same session that created the
> recordedplot you still have the recordedplot (e.g., you
> can just do replayPlot(r) instead of replayPlot(r2). Is
> that a bad assumption ?
Not "bad", really, but somewhat *un*intuitive I believe to most
users, including me.
I would have done the same as Winston to check if saving and
loading of a recorded plot work fine.
Also, the error message we get is not very helpful:
> saveRDS(r, 'recordedplot.rds')
> r <- readRDS('recordedplot.rds')
> png('test2.png')
> replayPlot(r)
Error: NULL value passed as symbol address
{coming from deep down: checkValidSymbolId() in src/main/dotcode.c }
I've pondered a bit and in the end found it easy enough to
tryCatch() the error, and "do the right thing" instead.
As that should typically only happen in exactly such a use case,
the change should be "uniformly >=" the previous state.
Ideally, maybe we (R core) would provide an R level API to a
"TRUE/FALSE" valued version of checkValidSymbolId() or its
caller, so that *from R code* one could check if the
recordedplot 'x' passed to replayPlot() with its external
pointers needs to be fixed up by
x <- restoreRecordedPlot(x)
or not.
But that would be another topic I'd not get envolved deeply just now.
Martin
Paul
On 03/04/18 05:23, Winston Chang wrote:
The documentation for recordPlot says the following:
As of R 3.3.0, it is possible (again) to replay a plot from another R session
using, for example, saveRDS and readRDS.
However, I haven't been able to save and restore a plot displaylist
and have it work within the same R session, using R 3.4.3 or 3.3.3.
Here's an example:
# Save displaylist for a simple plot
png('test.png')
dev.control(displaylist ="enable")
plot(1:5, 1:5)
r <- recordPlot()
dev.off()
# Replay plot. This works.
png('test1.png')
replayPlot(r)
dev.off()
# Save the plot and load it, then try to replay it. This does not work.
saveRDS(r, 'recordedplot.rds')
r2 <- readRDS('recordedplot.rds')
png('test2.png')
replayPlot(r2) ## Error: NULL value passed as symbol address
dev.off()
Is there something that I'm doing wrong here?
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
--
Dr Paul Murrell
Department of Statistics
The University of Auckland
--
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
p...@stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel