On 04/10/2009 6:07 PM, Yihui Xie wrote:
Thanks a lot, Charlie. What a coincidence -- I'm also working on
Sweave functions. parse() and deparse() can make the code more tidy
(they are used in source() and RweaveLatexRuncode()),

RweaveLatex
function ()
{
    list(setup = RweaveLatexSetup, runcode = RweaveLatexRuncode,
        writedoc = RweaveLatexWritedoc, finish = RweaveLatexFinish,
        checkopts = RweaveLatexOptions)
}
<environment: namespace:utils>

but we can either (1) let R automatically 'tidy up' our code and
remove all the comments or (2) keep the comments but leave the
original code untouched.

I worked out a trick to preserve the comments while tidying up the R
code, and I want to replace parse() and deparse() with my customized
functions, in which case Sweave will keep the comments.

However, my functions will need base::parse() and base::deparse() to
help me, therefore my real difficulty is, how to let Sweave use my
functions to parse and deparse R code without really modifying them in
the base enviroment? I'm using the command 'R CMD Sweave'.

I think it's really unlikely that you need to modify those two functions. If you leave the source references turned on, the standard parse will tell you where all the code is; you can then write it out in any way you like, calling the standard deparse on bits and pieces, and mixing in the comments as you like.

The disadvantage of replacing parse or deparse is the maintenance: if the standard ones change, you have to decide whether to incorporate those changes or not, in every case. Neither parse nor deparse change a lot, but there have still been 2-3 dozen changes in the last year.

Now, if you choose instead to modify the original sources, in most cases Subversion will correctly merge the new changes in. So that's better than a wholesale replacement, but still not as good as simply working with the output of the standard functions.

> If there is
> no neat approach, I'll change my question to: how to write a package,
> say, Sweave2, that can be run using command line 'R CMD Sweave2 file'?

Currently you can do that by writing Sweave2 as a Perl script and installing it in the RHOME/bin directory, but that may change: we are working hard to do away with the need for Perl.

Duncan Murdoch


Regards,
Yihui
--
Yihui Xie <xieyi...@gmail.com>
Phone: 515-294-6609 Web: http://yihui.name
Department of Statistics, Iowa State University
3211 Snedecor Hall, Ames, IA



2009/10/4 cls59 <ch...@sharpsteen.net>:


Yihui Xie wrote:
Hi everyone,

I want to modify two base R functions 'parse' and 'deparse'
immediately after R has started, so I added some code in the file
'Rprofile.site' under the 'etc' directory. Here is a simple example:

parse=function(...){
    base::parse(...)
}

I'll get an error when I start R as follows:

Error: cannot change value of locked binding for 'parse'

Is there a solution for my problem? Please note that I *have to*
override the function names. Thanks very much!



Hi Yihui,

I have had cause to do some some similar things to Sweave functions-- maybe
the following will help:

 # Find out where the function lives.
 env <- as.environment( 'package:base' )

 # Crack the binding.
 unlockBinding( 'parse', env )

 # Replace the function.
 assignInNamespace( 'parse', function(...){

  # Your function here, or an object that contains it.

  }, ns = 'base' )

 # Relock the binding.
 lockBinding( 'parse', env )


Note that the above is *very* dark voodoo-- it may cause unforeseen
consequences.

Good luck!

-Charlie

-----
Charlie Sharpsteen
Undergraduate
Environmental Resources Engineering
Humboldt State University

______________________________________________
R-help@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@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.

Reply via email to