Re: [R] Problem with scoping a variable value

From: Philippe Grosjean <phgrosjean_at_sciviews.org>
Date: Fri 17 Feb 2006 - 18:06:28 EST

Paul Roebuck wrote:

> On Thu, 16 Feb 2006, Tolga Uzuner wrote:
> 
> 

>>I have a function which has a variable called show as an input:
>>
>>richardson.grad <- function(func, x, d=0.01, eps=1e-4, r=6, show=F){
>># do some things
>> if(show) {
>>
>> cat("\n","first order approximations", "\n")
>> print(a.mtr, 12)
>>
>>
>> }
>>#do more things and return
>>}
>>
>>The show variable is being used as a flag to show intermediate results.
>>
>>Interestingly enough, I have downloaded a package recently which defines
>>the show variable as a function:
>>
>> > show
>>standardGeneric for "show" defined from package "methods"
>>
>>function (object)
>>standardGeneric("show")
>><environment: 01676F7C>
>>Methods may be defined for arguments: object
>>
>> >
>>
>>Now, all of a sudden, the function I had defined earlier is scoping up
>>to this new value, and is thus not working:
>>
>> > richardson.grad(function(x) x^2,2)
>>Error in if (show) { : argument is not interpretable as logical
>> >
>>
>>I could always redefine show in richardson.grad to be something else but
>>something seems wrong: why is richardson.grad not looking up show's
>>value in the function ? How would I fix this ?
> 
> 
> You didn't spell out the logical value 'FALSE' which may
> be causing your problem. Consider this alternative also...
> 
> richardson.grad <- function(func,
>                             x,
>                             d = 0.01,
>                             eps = 1e-4,
>                             r = 6,
>                             verbose = getOption("verbose")) {
>     ## do some things
>     if (verbose) {
>          cat("\n", "first order approximations:", "\n")
>          print(a.mtr, 12)
>     }
>     ## do more things and return
> }

This is definitely the best solution, and Paul is right: you have to use   FALSE in preference to F (FALSE is a reserved word, F is not in R).

Now, you should know that show() *is* a generic function (it is the default method for S4 objects), and it is a very bad idea to use it as named argument for functions. I would suggest to use Paul's suggestion instead, or to change it as 'show.it = FALSE', as a minimum. Best,

Philippe Grosjean



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Fri Feb 17 18:10:38 2006

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 14:08:37 EST