Hi there,
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 ?
Thanks in advance,
Tolga
Problem with scoping a variable value
5 messages · Tolga Uzuner, Gabor Grothendieck, Paul Roebuck +1 more
Without a reproducible example one can only guess but perhaps the problem is not show but that you have a variable F. Try writing out F as FALSE.
On 2/16/06, Tolga Uzuner <tolga at coubros.com> wrote:
Hi there,
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 ? Thanks in advance, Tolga
______________________________________________ R-help at 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
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
}
----------------------------------------------------------
SIGSIG -- signature too long (core dumped)
You are a star... that was it. Many thanks, Tolga -----Original Message----- From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com] Sent: 16 February 2006 20:24 To: Tolga Uzuner Cc: r-help at stat.math.ethz.ch Subject: Re: [R] Problem with scoping a variable value Without a reproducible example one can only guess but perhaps the problem is not show but that you have a variable F. Try writing out F as FALSE.
On 2/16/06, Tolga Uzuner <tolga at coubros.com> wrote:
Hi there,
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 ? Thanks in advance, Tolga
______________________________________________ R-help at 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
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