[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