[Bioc-devel] To use knitr, how to write the right Makefile for bioconductor devel and released branch?
Dan Tenenbaum
dtenenba at fhcrc.org
Sat Oct 6 21:27:29 CEST 2012
On Fri, Oct 5, 2012 at 9:52 AM, Tengfei Yin <yintengfei at gmail.com> wrote:
> Hi
>
> Here is a following up question about knitr used in Bioconductor, please
> check the released version here
>
> http://www.bioconductor.org/packages/2.11/bioc/html/ggbio.html
>
> many of them are just pdf figures, only one of them is the vignette, but I
> set knitr like this
>
> opts_chunk$set(fig.path='./figures/ggbio-', fig.align='center',
> fig.show='asis')
>
> so it should put all the figure under ./figures subdirectory. I guess it's
> because when sweave running first time, it's produce some graphics and not
> removed when building the package?
>
> Is there a way to remove those pdf which are not vignettes under /inst/doc,
> and also remove extra pdf under ./figures subdirectory, this will make
> package too large.
I don't think there's a way to keep those files out of the source
tarball, which should contain in it everything needed to build the
package, even if it already contains a build vignette. However, these
files will not show up in either the installed package or the mac and
windows binary package.
>
> I am putting something like
> %.pdf: %.Rnw
> rm -f *.pdf
> $(R_HOME)/bin/Rscript -e "library(knitr); knit2pdf('$*.Rnw')"
>
> it caused error in windows built like
>
> rm -f *.pdf
> rm: cannot remove `Rplots.pdf': Device or resource busy
> make: *** [ggbio.pdf] Error 1
> Error in tools::buildVignettes(dir = ".") : running 'make' failed
> Execution halted
>
>
This answer comes from Martin Morgan. I tested it on the 2.11 windows
build machine and it works. I didn't commit the change.
The Makefile clean: target needs to make the inst/doc directory look
like it should when R CMD build finishes, so
PDFS= ggbio.pdf
all: $(PDFS)
clean:
rm -f *.tex *.bbl *.blg *.aux *.out *.log *.spl *tikzDictionary *.toc
rm -rf figures Makefile knit.sh
%.pdf: %.Rnw
"$(R_HOME)"/bin/Rscript -e "library(knitr); knit2pdf('$*.Rnw')"
The following is more of a hack, but... you can minimize unwanted
'Sweave' processing by setting \SweaveOpts{eval=FALSE} in the LaTeX
preamble. This means that chunks are not evaluated in the 'Sweave'
pass (unless they explicitly have eval=TRUE, which they usually
don't). On the other hand opts_chunk$set(eval=TRUE) restores the
default but only in knitr. There will not be any left-over Rplot.pdf.
I'm assuming that knitr respects local chunk options, so
<<eval=FALSE>>= would still suppress chunk evaluation even in knitr.
Index: ggbio.Rnw
===================================================================
--- ggbio.Rnw (revision 70240)
+++ ggbio.Rnw (working copy)
@@ -63,6 +63,8 @@
\author{Tengfei Yin}
\date{\today}
+\SweaveOpts{eval=FALSE}
+
\begin{document}
% \setkeys{Gin}{width=0.6\textwidth}
\maketitle
@@ -70,10 +72,11 @@
\tableofcontents
\newpage
-<<setup, include=FALSE, cache=FALSE>>=
+<<setup, include=FALSE, cache=FALSE, eval=TRUE>>=
library(knitr)
opts_chunk$set(fig.path='./figures/ggbio-',
- fig.align='center', fig.show='asis')
+ fig.align='center', fig.show='asis',
+ eval=TRUE)
options(replace.assign=TRUE,width=90)
Thanks,
Dan
> Thanks
>
> Tengfei
>
>
>
>
>
>
> On Thu, Sep 27, 2012 at 5:08 PM, Tengfei Yin <yintengfei at gmail.com> wrote:
>>
>>
>>
>> On Thu, Sep 27, 2012 at 4:48 PM, Hervé Pagès <hpages at fhcrc.org> wrote:
>>>
>>> Tengfei,
>>>
>>>
>>> On 09/27/2012 01:05 PM, Tengfei Yin wrote:
>>>>
>>>>
>>>>
>>>> On Thu, Sep 27, 2012 at 2:42 PM, Hervé Pagès <hpages at fhcrc.org
>>>> <mailto:hpages at fhcrc.org>> wrote:
>>>>
>>>> Hi Tengfei,
>>>>
>>>> Yes, as Dan said, that should work. Make sure you indent the
>>>> Makefile
>>>> properly though (normally with a tab), or it won't work:
>>>>
>>>>
>>>> ------------------------------__------------------------------__-----------
>>>>
>>>>
>>>> PDFS= ggbio.pdf
>>>>
>>>> all: $(PDFS)
>>>>
>>>> clean:
>>>> rm -f *.tex *.bbl *.blg *.aux *.out *.log *.spl
>>>> *tikzDictionary
>>>>
>>>> %.pdf: %.Rnw
>>>> $(R_HOME)/bin/Rscript -e "library(knitr);
>>>> knit2pdf('$*.Rnw')"
>>>>
>>>> ------------------------------__------------------------------__-----------
>>>>
>>>>
>>>> Also note the use of a regexpr in the call to knit2pdf() so that all
>>>> Sweave files in the folder will be processed.
>>>>
>>>> I would suggest 3 more things:
>>>>
>>>> 1. Add *.toc to the rm command above.
>>>>
>>>> 2. Don't forget to add knitr to the Suggests field of your
>>>> package.
>>>>
>>>> 3. If you've not done it already, add library(knitr) right before
>>>> the
>>>> knit_hooks$... line in the set-options code chunk in each of
>>>> your
>>>> Rnw files, so that people can still run Sweave() on them if
>>>> they
>>>> want.
>>>>
>>>> Cheers,
>>>> H.
>>>>
>>>> Hi Hervé,
>>>>
>>>> Thanks a lot for your suggestion, I haven't done that yet, so I could
>>>> make all those changes.
>>>> Potential issues is that(actually as Martin just mentioned), if my Rnw
>>>> won't be running through sweave(sweave first run on my Rnw) which
>>>> because knitr-specified tag is included in my Rnw file, and Sweave won't
>>>> recognize, for example, may be tag, fig.cap = " with quotes", there is
>>>> no such tag and I guess I cannot use quotes, I guess I am hitting a
>>>> potential problem like that, one solution could be that I have to put a
>>>> fake Rnw first, then remove fake vignette and run knitr on real Rnw file
>>>> somewhere and copy it to the right location to replace the fake
>>>> vignette...
>>>>
>>>> I am experimenting on my machine now... hope that would work, I heard
>>>> from knitr designer that Rcpp did similar things like that.
>>>
>>>
>>> Note that the above Makefile is exactly (except for the package name
>>> itself) the file used in the knitr package (which vignettes are of
>>> course generated with knitr).
>>>
>>> All the details here:
>>>
>>> http://yihui.name/knitr/demo/vignette/
>>>
>>> The above document also covers the issue of "vignettes having to
>>> go through Sweave first anyway", and, as you figured it out, it
>>> seems that the workaround is required only if the syntax of your
>>> vignette is not compatible with Sweave. And yes the workaround
>>> involves putting a fake vignette first and do other kind of dark
>>> voodoo.
>>>
>>> BTW I'm assuming you have a good reason to not use a Sweave-compatible
>>> syntax, otherwise maybe you could reconsider, as that would make
>>> things much easier (and you already get some nice improvements to
>>> the rendering of your vignette, when using knitr in Sweave-compatible
>>> mode).
>>
>>
>> Exactly, I am going to give up to do the dark voodoo...even though I came
>> up with a solution, but not elegant at all
>>
>> looks like R CMD INSTALL run sweave again on my real Rnw to stangle the R
>> file, so in my make file I have to copy a sweavable version of my real Rnw
>> file in the right place, then in this case, the pdf and R code are
>> consistency, but Rnw file are not really, it's just sweavable.
>>
>> At first I hope I can write a Rnw file with knitr without considering the
>> compatibility with Sweave, but I guess that's too tricky, you are right, I
>> already get most I need from knitr, and I can just tweak it to be compatible
>> with sweave, and use above Makefile to get what I need without spending too
>> much time hacking at those stuff.
>>
>> Thanks a lot.
>>
>> Tengfei
>>
>>
>>>
>>> Cheers,
>>> H.
>>>
>>>
>>>
>>>>
>>>> Tengfei
>>>>
>>>>
>>>>
>>>>
>>>> On 09/27/2012 08:08 AM, Dan Tenenbaum wrote:
>>>>
>>>> On Wed, Sep 26, 2012 at 11:41 PM, Tengfei Yin
>>>> <yintengfei at gmail.com <mailto:yintengfei at gmail.com>> wrote:
>>>>
>>>> Dear maintainers and developers,
>>>>
>>>> I am wondering, is there a way to use knitr to built my
>>>> vignette, I am
>>>> trying to write a Makefile under my inst/doc, something like
>>>>
>>>> # Makefile to use knitr for package vignettes
>>>> # put all PDF targets here, separated by spaces
>>>> PDFS= ggbio.pdf
>>>> all: $(PDFS)
>>>> clean:
>>>> rm -f *.tex *.bbl *.blg *.aux *.out *.log *.spl
>>>> *tikzDictionary
>>>> %.pdf: %.Rnw
>>>> $(R_HOME)/bin/Rscript -e "library(knitr);
>>>> knit2pdf('ggbio.Rnw')"
>>>>
>>>> Then I realize the bioc maintained two branch, released and
>>>> development, so
>>>> the R version it used to check each branch must be
>>>> different, I don't
>>>> really know how to specify those in my Makefile, especially
>>>> after next
>>>> Monday, the devel-branch become released version
>>>> automatically, there must
>>>> be a problem if I set up a fixed point to some
>>>> */bin/Rscript?
>>>>
>>>> I don't really know how it works with bioconductor, the
>>>> example above
>>>> should work for cran, but I guess things are very different
>>>> between cran
>>>> and bioc.
>>>>
>>>>
>>>>
>>>> If you use "$(R_HOME)/bin/R" in your Makefile, as you do, the
>>>> correct
>>>> R will be used.
>>>> Dan
>>>>
>>>>
>>>>
>>>> thanks a lot!
>>>>
>>>> Tengfei
>>>>
>>>>
>>>>
>>>> --
>>>> Tengfei Yin
>>>> MCDB PhD student
>>>> 1620 Howe Hall, 2274,
>>>> Iowa State University
>>>> Ames, IA,50011-2274
>>>>
>>>> [[alternative HTML version deleted]]
>>>>
>>>> _________________________________________________
>>>> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org>
>>>> mailing list
>>>> https://stat.ethz.ch/mailman/__listinfo/bioc-devel
>>>> <https://stat.ethz.ch/mailman/listinfo/bioc-devel>
>>>>
>>>>
>>>> _________________________________________________
>>>> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org>
>>>> mailing list
>>>> https://stat.ethz.ch/mailman/__listinfo/bioc-devel
>>>> <https://stat.ethz.ch/mailman/listinfo/bioc-devel>
>>>>
>>>>
>>>> --
>>>> Hervé Pagès
>>>>
>>>> Program in Computational Biology
>>>> Division of Public Health Sciences
>>>> Fred Hutchinson Cancer Research Center
>>>> 1100 Fairview Ave. N, M1-B514
>>>> P.O. Box 19024
>>>> Seattle, WA 98109-1024
>>>>
>>>> E-mail: hpages at fhcrc.org <mailto:hpages at fhcrc.org>
>>>> Phone: (206) 667-5791 <tel:%28206%29%20667-5791>
>>>> Fax: (206) 667-1319 <tel:%28206%29%20667-1319>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Tengfei Yin
>>>> MCDB PhD student
>>>> 1620 Howe Hall, 2274,
>>>> Iowa State University
>>>> Ames, IA,50011-2274
>>>>
>>>>
>>>>
>>>
>>> --
>>> Hervé Pagès
>>>
>>> Program in Computational Biology
>>> Division of Public Health Sciences
>>> Fred Hutchinson Cancer Research Center
>>> 1100 Fairview Ave. N, M1-B514
>>> P.O. Box 19024
>>> Seattle, WA 98109-1024
>>>
>>> E-mail: hpages at fhcrc.org
>>> Phone: (206) 667-5791
>>> Fax: (206) 667-1319
>>
>>
>>
>>
>> --
>> Tengfei Yin
>> MCDB PhD student
>> 1620 Howe Hall, 2274,
>> Iowa State University
>> Ames, IA,50011-2274
>>
>>
>>
>
>
>
> --
> Tengfei Yin
> MCDB PhD student
> 1620 Howe Hall, 2274,
> Iowa State University
> Ames, IA,50011-2274
>
>
>
More information about the Bioc-devel
mailing list