[R] Sweave - How to use local objects in code chunks

Charles C. Berry cberry at tajo.ucsd.edu
Sun Jan 17 00:07:08 CET 2010


On Sat, 16 Jan 2010, Ista Zahn wrote:

> I don't think it works that way. The .Rnw file should be
> self-contained. Put all the R code in the .Rnw file (or keep it in a
> separate file and source() it into the .Rnw file).

Right. So the issue is to figure out how to do this in a way that allows 
Jan-Henrik access to objects in a function calling Sweave().

One way is to look at the frames/calls that contain the code chunk in 
question.

See

 	?sys.status

for some background.

Then try something like this:

=========================================================

> foo <- function() {fooval <- 1;Sweave("test2.Rnw")}
> cat("@ \n<<ls>>=\nls(env=sys.frame(1))\n@ %def\n",file='test2.Rnw')
> foo()
Writing to file test2.tex
Processing code chunks ...
  1 : echo term verbatim (label=ls)

You can now run LaTeX on 'test2.tex'
> cat(readLines("test2.tex"),sep='\n')
\begin{Schunk}
\begin{Sinput}
> ls(env = sys.frame(1))
\end{Sinput}
\begin{Soutput}
[1] "fooval"
\end{Soutput}
\end{Schunk}

=========================================================

As you see, 'fooval' which was defined in foo() is found in sys.frame(1).

This might be good enough for Jan-Henrik.

But generally, what you need to do is to figure out which frame contains 
the object you want your *.Rnw doc to find (since foo() could have been 
called by another function).

You might write a chunk that will look at sys.calls(), find which element 
corresponds to 'foo()' and go from there.

HTH

Chuck


>
> -Ista
>
>
>
> On Sat, Jan 16, 2010 at 3:35 PM, Jan-Henrik Pötter
> <henrik.poetter at gmx.de> wrote:
>> Hello,
>>
>> I wrote a function create_report that calls the function Sweave.
>> create_report shall be used to create a pdf-report about an lm-Object which
>> is passed as an argument to create_report.
>>
>> I try to use an object sel_model, that is created within the function
>> environment of create_report and later on used within the first code chunk
>> of the file report_template.rnw.
>>
>> When I use following code I get an error message that the object sel_model
>> could not been found. How can I achieve to use objects within code-chunks
>> that are not globally available, but only within my function call of
>> create_report? Is it only possible to use globally available objects within
>> a code chunk?
>>
>>
>>
>> create_report<-function(model_lst){
>>
>> #define parameters
>>
>> sel_model<-model_lst
>>
>> Sweave('report_template.rnw')
>>
>> tools::texi2dvi("report_template.tex", pdf=TRUE)
>>
>> }
>>
>>
>>
>> create_report(p3)
>>
>>
>>
>>
>>
>> this is the file report_template.rnw
>>
>>
>>
>> \documentclass[a4paper]{article}
>>
>> \begin{document}
>>
>>
>>
>> <<echo=FALSE>>=
>>
>> summary(sel_model)
>>
>> @
>>
>> \begin{center}
>>
>> <<fig=TRUE,echo=FALSE>>=
>>
>> plot_fx(sel_model)
>>
>> @
>>
>> \end{center}
>>
>>
>>
>> \end{document}
>>
>>
>>
>>
>>        [[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.
>>
>
>
>
> -- 
> Ista Zahn
> Graduate student
> University of Rochester
> Department of Clinical and Social Psychology
> http://yourpsyche.org
>
> ______________________________________________
> 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.
>

Charles C. Berry                            (858) 534-2098
                                             Dept of Family/Preventive Medicine
E mailto:cberry at tajo.ucsd.edu	            UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901



More information about the R-help mailing list