[Rd] interrupting Sweave leaves open sink connection

Duncan Murdoch murdoch.duncan at gmail.com
Wed Oct 23 04:45:04 CEST 2013


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...

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)
>
>
>
>
>



More information about the R-devel mailing list