Alexander Shenkin
2012-Apr-04 19:25 UTC
[R] Rgui maintains open file handles after Sweave error
Hello Folks, When I run the document below through sweave, rgui.exe/rsession.exe leaves a file handle open to the sweave-001.pdf graphic (as verified by process explorer). Pdflatex.exe then crashes (with a Permission Denied error) because the graphic file is locked. This only seems to happen when there is an error in the sweave document. When there are no errors, no file handles are left open. However, once a file handle is stuck open, I can find no other way of closing it save for quitting out of R. Any help would be greatly appreciated! It would be nice to be able to write flawless sweave every time, but flawed as I am, I am having to restart R continuously. Thanks, Allie OS: Windows 7 Pro x64 SP1> sessionInfo()R version 2.14.2 (2012-02-29) Platform: i386-pc-mingw32/i386 (32-bit) test.Rnw: \documentclass{article} \title {file handle test} \author{test author} \usepackage{Sweave} \begin {document} \maketitle \SweaveOpts{prefix.string=sweave} \begin{figure} \begin{center} <<fig=TRUE, echo=FALSE>> df = data.frame(a=rnorm(100), b=rnorm(100), group = c("g1", "g2", "g3", "g4")) plot(df$a, df$y, foo) @ \caption{test figure one} \label{fig:one} \end{center} \end{figure} \end{document} Sweave command run: Sweave("test.Rnw", syntax="SweaveSyntaxNoweb") Sweave.sty: \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{Sweave}{} \RequirePackage{ifthen} \newboolean{Sweave at gin} \setboolean{Sweave at gin}{true} \newboolean{Sweave at ae} \setboolean{Sweave at ae}{true} \DeclareOption{nogin}{\setboolean{Sweave at gin}{false}} \DeclareOption{noae}{\setboolean{Sweave at ae}{false}} \ProcessOptions \RequirePackage{graphicx,fancyvrb} \IfFileExists{upquote.sty}{\RequirePackage{upquote}}{} \ifthenelse{\boolean{Sweave at gin}}{\setkeys{Gin}{width=0.8\textwidth}}{}% \ifthenelse{\boolean{Sweave at ae}}{% \RequirePackage[T1]{fontenc} \RequirePackage{ae} }{}% \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl} \DefineVerbatimEnvironment{Soutput}{Verbatim}{} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl} \newenvironment{Schunk}{}{} \newcommand{\Sconcordance}[1]{% \ifx\pdfoutput\undefined% \csname newcount\endcsname\pdfoutput\fi% \ifcase\pdfoutput\special{#1}% \else\immediate\pdfobj{#1}\fi}
Henrik Bengtsson
2012-Apr-04 19:45 UTC
[R] Rgui maintains open file handles after Sweave error
See ?closeAllConnections Suggestion to the maintainer of Sweave: "atomify" the figure generation, e.g. use { pdf(); on.exit(dev.off()); {...}; } or similar, instead of { pdf(); {...}; dev.off(); } possibly by leaving a copy of the fault figure file for troubleshooting. /Henrik On Wed, Apr 4, 2012 at 12:25 PM, Alexander Shenkin <ashenkin at ufl.edu> wrote:> Hello Folks, > > When I run the document below through sweave, rgui.exe/rsession.exe > leaves a file handle open to the sweave-001.pdf graphic (as verified by > process explorer). ?Pdflatex.exe then crashes (with a Permission Denied > error) because the graphic file is locked. > > This only seems to happen when there is an error in the sweave document. > ?When there are no errors, no file handles are left open. ?However, once > a file handle is stuck open, I can find no other way of closing it save > for quitting out of R. > > Any help would be greatly appreciated! ?It would be nice to be able to > write flawless sweave every time, but flawed as I am, I am having to > restart R continuously. > > Thanks, > Allie > > > OS: Windows 7 Pro x64 SP1 > > >> sessionInfo() > R version 2.14.2 (2012-02-29) > Platform: i386-pc-mingw32/i386 (32-bit) > > > test.Rnw: > > ? ?\documentclass{article} > ? ?\title {file handle test} > ? ?\author{test author} > ? ?\usepackage{Sweave} > ? ?\begin {document} > ? ?\maketitle > > ? ?\SweaveOpts{prefix.string=sweave} > > ? ?\begin{figure} > ? ?\begin{center} > > ? ?<<fig=TRUE, echo=FALSE>>> ? ? ? ?df = data.frame(a=rnorm(100), b=rnorm(100), group = c("g1", > "g2", "g3", "g4")) > ? ? ? ?plot(df$a, df$y, foo) > ? ?@ > > ? ?\caption{test figure one} > ? ?\label{fig:one} > ? ?\end{center} > ? ?\end{figure} > ? ?\end{document} > > > > Sweave command run: > > ? ?Sweave("test.Rnw", syntax="SweaveSyntaxNoweb") > > > > Sweave.sty: > > ? ?\NeedsTeXFormat{LaTeX2e} > ? ?\ProvidesPackage{Sweave}{} > > ? ?\RequirePackage{ifthen} > ? ?\newboolean{Sweave at gin} > ? ?\setboolean{Sweave at gin}{true} > ? ?\newboolean{Sweave at ae} > ? ?\setboolean{Sweave at ae}{true} > > ? ?\DeclareOption{nogin}{\setboolean{Sweave at gin}{false}} > ? ?\DeclareOption{noae}{\setboolean{Sweave at ae}{false}} > ? ?\ProcessOptions > > ? ?\RequirePackage{graphicx,fancyvrb} > ? ?\IfFileExists{upquote.sty}{\RequirePackage{upquote}}{} > > ? ?\ifthenelse{\boolean{Sweave at gin}}{\setkeys{Gin}{width=0.8\textwidth}}{}% > ? ?\ifthenelse{\boolean{Sweave at ae}}{% > ? ? ?\RequirePackage[T1]{fontenc} > ? ? ?\RequirePackage{ae} > ? ?}{}% > > ? ?\DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl} > ? ?\DefineVerbatimEnvironment{Soutput}{Verbatim}{} > ? ?\DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl} > > ? ?\newenvironment{Schunk}{}{} > > ? ?\newcommand{\Sconcordance}[1]{% > ? ? ?\ifx\pdfoutput\undefined% > ? ? ?\csname newcount\endcsname\pdfoutput\fi% > ? ? ?\ifcase\pdfoutput\special{#1}% > ? ? ?\else\immediate\pdfobj{#1}\fi} > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Alexander Shenkin
2012-Apr-04 19:52 UTC
[R] Rgui maintains open file handles after Sweave error
Thanks for the reply, Henrik. Process Explorer still shows the file handle as being open, but R only shows the following:> showConnections(all=TRUE)description class mode text isopen can read can write 0 "stdin" "terminal" "r" "text" "opened" "yes" "no" 1 "stdout" "terminal" "w" "text" "opened" "no" "yes" 2 "stderr" "terminal" "w" "text" "opened" "no" "yes">On 4/4/2012 2:45 PM, Henrik Bengtsson wrote:> See ?closeAllConnections > > Suggestion to the maintainer of Sweave: "atomify" the figure > generation, e.g. use { pdf(); on.exit(dev.off()); {...}; } or similar, > instead of { pdf(); {...}; dev.off(); } possibly by leaving a copy of > the fault figure file for troubleshooting. > > /Henrik > > On Wed, Apr 4, 2012 at 12:25 PM, Alexander Shenkin <ashenkin at ufl.edu> wrote: >> Hello Folks, >> >> When I run the document below through sweave, rgui.exe/rsession.exe >> leaves a file handle open to the sweave-001.pdf graphic (as verified by >> process explorer). Pdflatex.exe then crashes (with a Permission Denied >> error) because the graphic file is locked. >> >> This only seems to happen when there is an error in the sweave document. >> When there are no errors, no file handles are left open. However, once >> a file handle is stuck open, I can find no other way of closing it save >> for quitting out of R. >> >> Any help would be greatly appreciated! It would be nice to be able to >> write flawless sweave every time, but flawed as I am, I am having to >> restart R continuously. >> >> Thanks, >> Allie >> >> >> OS: Windows 7 Pro x64 SP1 >> >> >>> sessionInfo() >> R version 2.14.2 (2012-02-29) >> Platform: i386-pc-mingw32/i386 (32-bit) >> >> >> test.Rnw: >> >> \documentclass{article} >> \title {file handle test} >> \author{test author} >> \usepackage{Sweave} >> \begin {document} >> \maketitle >> >> \SweaveOpts{prefix.string=sweave} >> >> \begin{figure} >> \begin{center} >> >> <<fig=TRUE, echo=FALSE>>>> df = data.frame(a=rnorm(100), b=rnorm(100), group = c("g1", >> "g2", "g3", "g4")) >> plot(df$a, df$y, foo) >> @ >> >> \caption{test figure one} >> \label{fig:one} >> \end{center} >> \end{figure} >> \end{document} >> >> >> >> Sweave command run: >> >> Sweave("test.Rnw", syntax="SweaveSyntaxNoweb") >> >> >> >> Sweave.sty: >> >> \NeedsTeXFormat{LaTeX2e} >> \ProvidesPackage{Sweave}{} >> >> \RequirePackage{ifthen} >> \newboolean{Sweave at gin} >> \setboolean{Sweave at gin}{true} >> \newboolean{Sweave at ae} >> \setboolean{Sweave at ae}{true} >> >> \DeclareOption{nogin}{\setboolean{Sweave at gin}{false}} >> \DeclareOption{noae}{\setboolean{Sweave at ae}{false}} >> \ProcessOptions >> >> \RequirePackage{graphicx,fancyvrb} >> \IfFileExists{upquote.sty}{\RequirePackage{upquote}}{} >> >> \ifthenelse{\boolean{Sweave at gin}}{\setkeys{Gin}{width=0.8\textwidth}}{}% >> \ifthenelse{\boolean{Sweave at ae}}{% >> \RequirePackage[T1]{fontenc} >> \RequirePackage{ae} >> }{}% >> >> \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl} >> \DefineVerbatimEnvironment{Soutput}{Verbatim}{} >> \DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl} >> >> \newenvironment{Schunk}{}{} >> >> \newcommand{\Sconcordance}[1]{% >> \ifx\pdfoutput\undefined% >> \csname newcount\endcsname\pdfoutput\fi% >> \ifcase\pdfoutput\special{#1}% >> \else\immediate\pdfobj{#1}\fi} >> >> ______________________________________________ >> R-help at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code.
Duncan Murdoch
2012-Apr-05 16:22 UTC
[R] Rgui maintains open file handles after Sweave error
On 04/04/2012 3:25 PM, Alexander Shenkin wrote:> Hello Folks, > > When I run the document below through sweave, rgui.exe/rsession.exe > leaves a file handle open to the sweave-001.pdf graphic (as verified by > process explorer). Pdflatex.exe then crashes (with a Permission Denied > error) because the graphic file is locked. > > This only seems to happen when there is an error in the sweave document. > When there are no errors, no file handles are left open. However, once > a file handle is stuck open, I can find no other way of closing it save > for quitting out of R. > > Any help would be greatly appreciated! It would be nice to be able to > write flawless sweave every time, but flawed as I am, I am having to > restart R continuously.I'd suggest a different workflow, in which you run a new copy of R every time you want to Sweave a document. The files will be closed when that copy dies, and the results are less likely to be affected by the current state of your workspace (assuming you don't load an old workspace in the new copy). For example, when I'm working on a Sweave document, I spend my time in my text editor, and get it to run R to process the file whenever I want to see what the output looks like. The only real disadvantages to this approach that I can think of are that you need to figure out how to tell your text editor to run R (and that might be hard if you're using a poor editor like Windows Notebook, but is usually easy), and it will run a tiny bit slower because you need to start up R every time. Duncan Murdoch> Thanks, > Allie > > > OS: Windows 7 Pro x64 SP1 > > > > sessionInfo() > R version 2.14.2 (2012-02-29) > Platform: i386-pc-mingw32/i386 (32-bit) > > > test.Rnw: > > \documentclass{article} > \title {file handle test} > \author{test author} > \usepackage{Sweave} > \begin {document} > \maketitle > > \SweaveOpts{prefix.string=sweave} > > \begin{figure} > \begin{center} > > <<fig=TRUE, echo=FALSE>>> df = data.frame(a=rnorm(100), b=rnorm(100), group = c("g1", > "g2", "g3", "g4")) > plot(df$a, df$y, foo) > @ > > \caption{test figure one} > \label{fig:one} > \end{center} > \end{figure} > \end{document} > > > > Sweave command run: > > Sweave("test.Rnw", syntax="SweaveSyntaxNoweb") > > > > Sweave.sty: > > \NeedsTeXFormat{LaTeX2e} > \ProvidesPackage{Sweave}{} > > \RequirePackage{ifthen} > \newboolean{Sweave at gin} > \setboolean{Sweave at gin}{true} > \newboolean{Sweave at ae} > \setboolean{Sweave at ae}{true} > > \DeclareOption{nogin}{\setboolean{Sweave at gin}{false}} > \DeclareOption{noae}{\setboolean{Sweave at ae}{false}} > \ProcessOptions > > \RequirePackage{graphicx,fancyvrb} > \IfFileExists{upquote.sty}{\RequirePackage{upquote}}{} > > \ifthenelse{\boolean{Sweave at gin}}{\setkeys{Gin}{width=0.8\textwidth}}{}% > \ifthenelse{\boolean{Sweave at ae}}{% > \RequirePackage[T1]{fontenc} > \RequirePackage{ae} > }{}% > > \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl} > \DefineVerbatimEnvironment{Soutput}{Verbatim}{} > \DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl} > > \newenvironment{Schunk}{}{} > > \newcommand{\Sconcordance}[1]{% > \ifx\pdfoutput\undefined% > \csname newcount\endcsname\pdfoutput\fi% > \ifcase\pdfoutput\special{#1}% > \else\immediate\pdfobj{#1}\fi} > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.