[Rd] Name length of function argument? (PR#10357)

Prof Brian Ripley ripley at stats.ox.ac.uk
Sat Oct 20 12:44:52 CEST 2007


Please study the help page before posting.  In the example code given 'p' 
is partially matching the second argument 'par' of optim(), so the unnamed 
first argument matches to the second argument 'fn'.

In the second case, 'f' matches 'par' and 'pp' matches '...', and 'f' is 
of 'type closure'.

On Fri, 19 Oct 2007, deiwiks at icr.gess.ethz.ch wrote:

> Hi,
> I've just been programming a function to calculate the likelihood in a
> probit model.
> The function looks like this
>
> likelihood <- function(Y,X,p) {
> Z <- p[1] +p[2]*X
> P <- Y*pnorm(Z) + (1-Y)*(1-pnorm(Z))
> -prod(P)
> }
>
> out <- optim(likelihood,p=c(0,0),Y=wells$switch,X=wells$dist, hessian=TRUE)
>
> X and Y are vectors containing column data.
> This works fine, however, if I rename p to pp or anything that is longer
> than one character, I get the following error message:
>
> Error in optim(f, pp = c(0, 0), Y=wells$switch, X=wells$dist,
> hessian=TRUE) :
>  cannot coerce type closure to double vector
>
> This seems like a bug... Or can you help me find the mistake I made?

Yes, it is a bug in your code.  From the R FAQ:

    If a command you are familiar with causes an R error message in a case
    where its usual definition ought to be reasonable, it is probably a
    bug.   If a command does the wrong thing, that is a bug.  But be sure
    you know for certain in what it ought to have done.  If you aren't
    familiar with the command, or don't know for certain how the command is
    supposed to work, then it might actually be working right.

Asking a question on R-bugs is an indication that you do not 'know for 
certain'.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list