[R] Sweave() within a function: objects not found

Duncan Murdoch murdoch at stats.uwo.ca
Wed Nov 11 18:29:14 CET 2009


On 11/11/2009 12:09 PM, Pfaff, Bernhard Dr. wrote:
> Dear list subscriber,
> 
> suppose, I do have a minimal Sweave file 'test.Rnw':
> \documentclass{article}
> \begin{document}
> <<printx>>=
> x
> @ 
> \end{document}
> 
> 
> Within R, I define the following function:
> 
> f <- function(x){
>   Sweave("test.Rnw")
> }
> 
> The call:
> 
> f(x = 1:10)
> 
> results in the following error message:
> 
>> f(x = 1:10)
> Writing to file test.tex
> Processing code chunks ...
>  1 : echo term verbatim (label=printx)
> 
> Error:  chunk 1 (label=printx) 
> Error in eval(expr, envir, enclos) : object 'x' not found
> 
> In principle, I could assign x to the global environment and then the Sweave file will be processed correctly:
> 
>> f2 <- function(x){
> +   attach(list(x = x))
> +   Sweave("test.Rnw")
> + }
>> f2(x = 1:10)
> Writing to file test.tex
> Processing code chunks ...
>  1 : echo term verbatim (label=printx)
> 
> You can now run LaTeX on 'test.tex'
>> 
> 
> Kind of a dum question, but how could it be achieved that Sweave recognizes the objects within this function call?

The way you did it is close.  You can attach all the local variables by 
using

attach(environment())

though global variables will take precedence, because attach puts the 
environment 2nd in the search list.  And you'd better remember to detach 
them.

I'd say it's better to make Sweave files self-contained, so that you can 
run R CMD Sweave outside of R, and get the right results.  But if you 
really want to do this, then you can write your own Sweave driver and 
replace the default  RweaveEvalWithOpt  with a function that looks 
elsewhere for variables.

Duncan Murdoch

> 
> Any pointers are most welcome,
> Bernhard
> 
>> sessionInfo()
> R version 2.10.0 (2009-10-26) 
> i386-pc-mingw32 
> 
> locale:
> [1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252   
> [3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                   
> [5] LC_TIME=German_Germany.1252    
> 
> attached base packages:
> [1] stats     graphics  datasets  utils     grDevices methods   base     
> 
> other attached packages:
> [1] fortunes_1.3-6
>> 
> 
> Dr. Bernhard Pfaff
> Director
> Global Quantitative Equity
> 
> Invesco Asset Management Deutschland GmbH
> An der Welle 5
> D-60322 Frankfurt am Main
> 
> Tel: +49 (0)69 29807 230
> Fax: +49 (0)69 29807 178
> www.institutional.invesco.com
> Email: bernhard_pfaff at fra.invesco.com
> 
> Geschäftsführer: Karl Georg Bayer, Bernhard Langer, Dr. Jens Langewand, Alexander Lehmann, Christian Puschmann
> Handelsregister: Frankfurt am Main, HRB 28469
> Sitz der Gesellschaft: Frankfurt am Main
> 
> *****************************************************************
> Confidentiality Note: The information contained in this ...{{dropped:10}}
> 
> ______________________________________________
> 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.




More information about the R-help mailing list