Yes, I think for all practical purposes it (usually?) is. Here's an example.
Suppose I wish to change the default "constant" argument of mad from 1.48 to
2. Then

> z<-formals(mad)
> z$constant<-2
> mad<-as.function(c(z,body(mad)))
> mad
function (x, center = median(x), constant = 2, na.rm = FALSE, 
    low = FALSE, high = FALSE) 
{
    if (na.rm) 
        x <- x[!is.na(x)]
    n <- length(x)
    constant * if ((low || high) && n%%2 == 0) {
        if (low && high) 
            stop("`low' and `high' can't be both TRUE")
        n2 <- n%/%2 + as.integer(high)
        sort(abs(x - center), partial = n2)[n2]
    }
    else median(abs(x - center))
}

If you now attach the workspace/environment containing this newly defined
mad function to the search list before the stats package (which contains the
original mad()) you have effectively changed the default argument without
changing the function.

I hope experts will let us know when this can't be done (perhaps with
.internal functions or non-exported functions in namespaces, though it isn't
clear to me that one couldn't manually export them and do this here, too).

Of course, all the usual warnings about masking existing functions apply.

Cheers,

-- Bert Gunter
Genentech Non-Clinical Statistics
South San Francisco, CA
 
"The business of the statistician is to catalyze the scientific learning
process."  - George E. P. Box
 
 

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of RenE 
> J.V. Bertin
> Sent: Wednesday, November 17, 2004 4:05 PM
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]
> Subject: Re: [R] changing (core) function argument defaults?
> 
> &gt;From: Patrick Connolly &lt;[EMAIL PROTECTED]&gt;
> &gt;To: &quot;RenE J.V. Bertin&quot; &lt;[EMAIL PROTECTED]&gt;
> &gt;Subject: Re: [R] changing (core) function argument defaults?
> &gt;Date: Thu, 18 Nov 2004 11:43:10 +1300
> 
> &gt;
> &gt;On Wed, 20-Oct-2004 at 07:48PM +0200, RenE J.V. Bertin wrote:
> &gt;
> &gt;|&gt; Hello,
> &gt;|&gt;
> &gt;
> &gt;|&gt; Is it possible to change the defaults for the arguments to a
> &gt;|&gt; function, without changing the function code 
> itself?  I'm asking
> &gt;|&gt; because I'd like to override the default dimensions 
> and font 
> family
> &gt;|&gt; for a graphics device. Before 2.0.0, I'd just do 
> that with a small
> &gt;|&gt; edit in the appropriate .R file containing the 
> device function
> &gt;|&gt; definition. I appears to be possible no longer. So 
> rather than
> &gt;|&gt; copying the definition into my own .Rprofile, it 
> would be nice if
> &gt;|&gt; just the defaults could be modified...
> &gt;
> &gt;I didn't notice a response to this question.  I'd like to 
> do something
> &gt;similar and haven't been able to work out how to do it.
> &gt;
> &gt;
> &gt;best
> &gt;
> &gt;--
> &gt;Patrick Connolly
> &gt;HortResearch
> &gt;Mt Albert
> &gt;Auckland
> &gt;New Zealand
> &gt;Ph: +64-9 815 4200 x 7188
> 
> No, I haven't noticed a reply to this question neither.
> 
> Best,
> René Bertin
> 
> ______________________________________________
> [EMAIL PROTECTED] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
>

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to