Re: [R] sweave options with variable

From: Henrik Bengtsson <hb_at_biostat.ucsf.edu>
Date: Sun, 17 Apr 2011 08:58:41 -0700

[Forgot to cc: the list]

Hi.

On Sun, Apr 17, 2011 at 8:04 AM, Kai Ying <yingk_at_iastate.edu> wrote:
> thanks,
>   It can work but not as elegant as I expect because it add extra code to
> every chunk of code.
> I have tried the cache for this purpose it works in most case but have a lot
> of other problems so I decided to control it by myself.
> I guess that sweave running R code before tex, so tex variable do not work
> and need find something run before sweave and set the variable,
> but it seems currently no way do that.

You can do exactly this by embedding your Sweave document with RSP markup, e.g.

<% needRun <- TRUE %>

<<eval=<%=needRun%>>>=
someSlowFunction()
@

To compile this into a valid Sweave document/file, you have to append filename extension *.rsp, e.g. report.Rnw.rsp. Then compile it as:

library("R.rsp");
rsp("report.Rnw.rsp", postprocess=FALSE);

which outputs a file report.Rnw containing:

<<eval=TRUE>>=
someSlowFunction()
@

If you also want to run Sweave on this and generate a PDF you can do everything in one go (using the default postprocess=TRUE):

library("R.rsp");
rsp("report.Rnw.rsp");

RSP is a context-independent markup, i.e. it does not care what format the underlying document has, as long as it is text based.

Hope this helps

/Henrik

> Write my own Sweave driver is too
> hard for me hope in the future someone can refine the sweave driver.
>   best wishes
>
> On Sun, Apr 17, 2011 at 7:30 AM, Duncan Murdoch <murdoch.duncan_at_gmail.com>wrote:
>
>> On 11-04-17 2:41 AM, Kai Ying wrote:
>>
>>> hello:
>>>    Do any one know how to set sweave option by variable, for example I
>>> want
>>> set some of my selected code chunk with:
>>> <<eval=needRun>>= rather than<<eval=TRUE>>=, so  I can change the action
>>> only in the head by change the variable "needRun" one times.
>>> I have tried use "\Def" and "\newcommand", both do not work, so I suppose
>>> it
>>> is related with R/Sweave its self.
>>> thanks for any good suggestion.
>>>
>>>
>> You can't do that, but you can get a similar effect this way:
>>
>> <<echo=FALSE>>=
>> needRun <- TRUE
>> @
>>
>> ...
>>
>> <<thecode,eval=FALSE>>=
>> someSlowFunction()
>> @
>>
>> <<echo=FALSE>>=
>> if (needRun) {
>> <<thecode>>
>> }
>> @
>>
>> Or you could use cacheSweave or weaver for caching, which may do what you
>> want, or write your own Sweave driver to do exactly what you want.
>>
>> Duncan Murdoch
>>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>



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. Received on Sun 17 Apr 2011 - 16:01:13 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sun 17 Apr 2011 - 16:10:31 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive