[R] .Internal

Berwin A Turlach berwin at maths.uwa.edu.au
Tue Mar 24 03:47:29 CET 2009

G'day Kevin,

On Mon, 23 Mar 2009 18:48:16 -0400
<rkevinburton at charter.net> wrote:

> Sorry to be so dense but the article that you suggest does not give
> any information on how the arguments are packed up. I look at the
> call:
> val <- .Internal(fmin(function(arg) -f(arg, ...), lower, upper, tol))
> and then with the help of this article I find do_fmin in optimize.c:
> SEXP attribute_hidden do_fmin(SEXP call, SEXP op, SEXP args, SEXP rho)

Sorry for not being clear enough.  Yes, the article tells you how to
find out that do_fmin is (eventually) called when you call optimize on
the command line.  I thought that this was one of your questions.

> Again there doesn't seem to be any coorespondance between lower,
> upper, tol and the arguments to do_fmin. So I am missing a step.

As far as I know, .Internal has the same interface as .External.  So a
study of "Writing R Extensions" should give insight regarding this
step.  In particular Chapter 5 (System and foreign language interfaces)
-> Section 5.10 (Interface functions .Call and .External) -> Section
5.10.2 (Calling .External).

Essentially, all arguments to a C function called via .Internal
or .External are passed as a single SEXP; this allows to pass an
unlimited number of arguments to a C function as all other interfaces
to native routines (.C, .Call, .Fortran) have some limit, albeit a
rather generous one, on the number of arguments that can be passed to
the native routine.

I believe you can think of that single SEXP as a list containing the
individual arguments.  Accessing those arguments one by one involves
macros with names like CDR, CAR, CADR, CADDR, CADDDR, CAD4R and so
forth.  As I understand it, if you are fluent in Lisp (Scheme?) and how
components of a list are referred to in that language, then you have no
problems with understanding the names of those macros.  Since I never
became comfortable with those languages, I restrict myself to .C
and .Call; YMMV.




=========================== Full address =============================
Berwin A Turlach                            Tel.: +65 6516 4416 (secr)
Dept of Statistics and Applied Probability        +65 6516 6650 (self)
Faculty of Science                          FAX : +65 6872 3919       
National University of Singapore     
6 Science Drive 2, Blk S16, Level 7          e-mail: statba at nus.edu.sg
Singapore 117546                    http://www.stat.nus.edu.sg/~statba

More information about the R-help mailing list