[Rd] interrupting Sweave leaves open sink connection

Michael Sumner mdsumner at gmail.com
Mon Oct 28 23:24:57 CET 2013


Thanks very much, confirmed in Windows in R-patched (r64110) and
R-devel (r64116).

Cheers, Mike.

On Wed, Oct 23, 2013 at 10:48 PM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> On 13-10-22 10:45 PM, Duncan Murdoch wrote:
>>
>> On 13-10-22 9:45 PM, Michael Sumner wrote:
>>>
>>> Hello, if I interrupt Sweave while it's processing a file it seemingly
>>> leaves an open sink connection that hides printed output.
>>>
>>> Can this be changed to reset the sink on exit?  I've been baffled by
>>> this for years.
>>>
>>> This is seen in Windows (R Under development (unstable) (2013-10-20
>>> r64082))  and an older Linux (R version 3.0.0 (2013-04-03)).
>>>
>>> Run the code below in two parts with a manual interrupt to 1) to see it.
>>
>>
>> That's a bug in the Rweave driver.  It runs the code in try() so that it
>> can catch errors and undo the sink, but try() doesn't catch user
>> interrupts, so it never gets undone.
>>
>> Shouldn't be too hard to fix...
>
>
> It should now be fixed in R-devel and R-patched.
>
> Likely the reason this went unfixed for so long is that the more common way
> to use Sweave is in a separate R session.  If you run it in the current R
> session, the results aren't necessarily reproducible, because they may
> depend on whatever variables you have in your workspace.  It's better to run
> it on its own.  One way is to use the command line version
>
> R CMD Sweave ...
>
> but it can also be done by piping specific commands into an R session. I do
> it that way, because it lets me run some project management code, and lets
> me patch the Synctex information so it points to the .Rnw file.
>
> Duncan Murdoch
>
>
>>
>> Duncan Murdoch
>>
>>>
>>> Cheers, MIke.
>>>
>>> ## 1)
>>>
>>> ## this code creates a temporary file to run Sweave
>>>
>>> ## interrupt this code before Sweave() finishes
>>>
>>> txt <-  c("\\documentclass[a4paper]{article}", "\\title{Sweave bail
>>> out}",
>>> "\\author{M. Sumner}", "\\begin{document}", "\\maketitle", "",
>>> "Run a loop and bail out when Sweave()ing.", "", "<<>>=",
>>> "for (i in seq_len(1e6)) {", "    if (i %% 1000 == 0)
>>> print(sprintf(\"%i\", i))",
>>> "    Sys.sleep(0.5)", "}", "@", "", "\\end{document}")
>>>
>>> f <- tempfile()
>>> writeLines(txt, f)
>>>
>>> Sweave(f)
>>>
>>> ## 2)
>>> ## now no printed output is seen
>>> print(1)
>>> ##
>>>
>>> sink(NULL)
>>>
>>> ## now it's back
>>> print(1)
>>> ## [1] 1
>>>
>>> ## tidy up
>>> ## unlink(f)
>>>
>>>
>>>
>>>
>>>
>>
>



-- 
Michael Sumner
Hobart, Australia
e-mail: mdsumner at gmail.com



More information about the R-devel mailing list