On Wed, 9 Mar 2005, Ken Knoblauch wrote:

Thank you very much.  Yes, that was the problem, partial matching.
I saw a warning about that in integrate and some discussion from 1999
in the archives and so added the m0 for integrate but somehow
I wasn't bright enough to see that I had the same problem
in uniroot.

It is perhaps worth pointing out that in R you usually don't need to pass these extra arguments down


 dprime.mAFC <- function(Pc, m) {
             est.dp <- function(dp) {

               pr <- function(x) {
                     dnorm(x - dp) * pnorm(x)^(m - 1)
                         }

               Pc - integrate(pr, lower = -Inf, upper = Inf)$value
             }

     dp.res <- uniroot(est.dp, interval = c(0,5))
     dp.res$root
     }

Because pr() is defined inside est.dp, which is defined inside dprime.mAFC, the arguments are already accessible.

In most cases, passing extra arguments through a higher-order function is not needed in R, as lexical scope allows the function to have access to the information directly. You also don't have to keep thinking up different names for 'm'.

Sorry about no working example, but I'm not sure what I could
have added, if I understand what you mean by working example,
because my function wasn't working.

A set of arguments at which you wanted to evaluate the function, so that a) we could get the same error that you did
b) we could tell when it worked.


        -thomas


best,

ken


Quoting Sundar Dorai-Raj <[EMAIL PROTECTED]>:



Ken Knoblauch wrote on 3/9/2005 10:27 AM:
Hi,

I'm trying to calculate the value of the variable, dp, below, in the
argument to the integral of dnorm(x-dp) * pnorm(x)^(m-1).  This
corresponds to the estimate of the sensitivity of an observer in an
m-alternative forced choice experiment, given the probability of
a correct response, Pc, a Gaussian assumption for the noise and
no bias.  The function that I wrote below gives me an error:

Error in f(x, ...) : recursive default argument reference

The problem seems to be at the statement using uniroot,
because the furntion est.dp works fine outside of the main function.
I've been using R for awhile but there are still many nuances
about the scoping and the use of environments that I'm weak on
and would like to understand better.  I would appreciate any
suggestions or solutions that anyone might offer for fixing
my error.  Thank you.

dprime.mAFC <- function(Pc, m) {
                est.dp <- function(dp, Pc = Pc, m = m) {

                  pr <- function(x, dpt = dp, m0 = m) {
                        dnorm(x - dpt) * pnorm(x)^(m0 - 1)
                            }

                  Pc - integrate(pr, lower = -Inf, upper = Inf,
                  dpt = dp, m0 = m)$value
                }

        dp.res <- uniroot(est.dp, interval = c(0,5), Pc = Pc, m = m)
        dp.res$root
        }


Ken,

Look at the argument list for ?uniroot and think "partial matching".
You're "m" is being interpretted for "maxiter". Simply change to

dp.res <- uniroot(est.dp, interval = c(0,5), Pc = Pc, m0 = m)

and in other places for consistency and the error goes away. Of course,
since you gave no working example, I'm not sure if other errors are
present that I'm missing.

--sundar




____________________ Ken Knoblauch Inserm U 371 Cerveau et Vision 18 avenue du Doyen Lepine 69675 Bron cedex France tel: +33 (0)4 72 91 34 77 fax: +33 (0)4 72 91 34 61 portable: 06 84 10 64 10

______________________________________________
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


Thomas Lumley Assoc. Professor, Biostatistics [EMAIL PROTECTED] University of Washington, Seattle

______________________________________________
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

Reply via email to