From murdoch@dunc@n @end|ng |rom gm@||@com  Mon Oct  2 20:53:52 2023
From: murdoch@dunc@n @end|ng |rom gm@||@com (Duncan Murdoch)
Date: Mon, 2 Oct 2023 14:53:52 -0400
Subject: [Rd] Problems caused by dev.off() behaviour
Message-ID: <affab490-cd9f-46e7-ab9f-37a4b13d2557@gmail.com>

I found some weird behaviour and reported it as
https://bugs.r-project.org/show_bug.cgi?id=18604 and
https://github.com/yihui/knitr/issues/2297, but it turns out it was user 
error.

The dev.off() function was behaving as documented, but it behaves in an 
unexpected (by me) way, and that caused the "bugs".

The issue is that

    dev.off()

doesn't always result in the previous graphics device being made 
current.  If there are two or more other open graphics devices, it won't 
choose the previous one, it will choose the next one.

I'm letting people know because this might affect other people too.  If 
you use dev.off(), don't assume it restores the previous device!

Here's my little workaround alternative:

   safe.dev.off  <- function(which = dev.cur(), prev = dev.prev()) {
     force(prev)
     dev.off(which)
     dev.set(prev)
   }

Use it just like dev.off(), but it *will* restore the previous device.

Duncan Murdoch



[Rd] Problems caused by dev.off() behaviour
Duncan Murdoch