[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:34:59 CEST 2012


On Sat, Oct 6, 2012 at 12:27 PM, Dan Tenenbaum <dtenenba at fhcrc.org> wrote:
> 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.
>
>

Let me correct myself on this. The files will show up in the installed
package and binary packages, but not if you add a file called
.Rinstignore to the top level directory of your package, with the
contents:

inst/doc/figures

This is documented in the "writing extensions" manual.
Dan


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