On Fri, 10 Oct 2003 [EMAIL PROTECTED] wrote:

> Full_Name: Jörg Polzehl
> Version: 1.8.0
> OS: Windows XP
> Submission from: (NULL) (62.141.176.1)
> 
> 
> I encountered a problem when playing with the mle library and specifying
> negative
> starting values for the parameters. 
> The reason seems to be an incorrect behaviour of  function formals:
> 
>  glike<-function(a=1,b=1,c=1) a
> > formals(glike)
> $a
> [1] 1
> $b
> [1] 1
> $c
> [1] 1
> > unlist(formals(glike))
> a b c 
> 1 1 1 
> >  glike<-function(a=1,b=1,c= -1) a
> > formals(glike)
> $a
> [1] 1
> $b
> [1] 1
> $c
> -1
> > unlist(formals(glike))
> $a
> [1] 1
> $b
> [1] 1
> $c
> -1

formals is doing what it is supposed to do, returning the formal
argument list of the function specified.  The problem is using unlist,
which:

        Given a list structure 'x', 'unlist' simplifies it to produce a
        vector which contains all the atomic components which occur in
        'x'.

If all default argument expressions are atomic components of the same
mode then unlist can simplify. For

        > formals(function(x=g(2)) x)
        $x
        g(2)
        > unlist(formals(function(x=g(2)) x))
        $x
        g(2)

unlist cannot simplify, so it returns the original generic vector.
For your example the first two default argument expressions are
numeric values,

        > mode(formals(function(a=1,b=1,c= -1) a)$a)
        [1] "numeric"
        > mode(formals(function(a=1,b=1,c= -1) a)$b)
        [1] "numeric"

but the third is not:

        > mode(formals(function(a=1,b=1,c= -1) a)$c)
        [1] "call"
        > as.list(formals(function(a=1,b=1,c= -1) a)$c)
        [[1]]
        `-`
        
        [[2]]
        [1] 1

The entries in formals are the default argument expressions as
produced by the parser. Positive numbers are parsed to numeric
constants, but the expression -1 is parsed to a call of the unary
minus function applied to the positive value 1.

Bottom line: both formals and unlist are working as documented; code
that uses unlist(formals(...)) ans expects the result to be a numeric
vector needs to be changed.

Best,

luke

-- 
Luke Tierney
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
   Actuarial Science
241 Schaeffer Hall                  email:      [EMAIL PROTECTED]
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

Reply via email to