Re: [Rd] on the usage of do.call

From: Matt Shotwell <shotwelm_at_musc.edu>
Date: Tue, 02 Nov 2010 15:08:47 -0400

On Tue, 2010-11-02 at 11:28 -0400, Christophe Dutang wrote:
> Hello all,
>
> I don't know if it is possible, but I would like to use do.call in C code in
> my package. The function do.call is defined as
> > do.call
> function (what, args, quote = FALSE, envir = parent.frame())
> {
> if (!is.list(args))
> stop("second argument must be a list")
> if (quote) {
> enquote <- function(x) as.call(list(as.name("quote"),
> x))
> args <- lapply(args, enquote)
> }
> .Internal(do.call(what, args, envir))
> }
> <environment: namespace:base>
> >
>
> In <src>/main/names.c, the function do.call is linked to the C function
> do_docall (line 499). (.Internal calls the good function line 1194.)
>
> And the do_docall function is defined in <src>/main/coerce.c line 2217 and
> declared as
> SEXP attribute_hidden do_docall(SEXP call, SEXP op, SEXP args, SEXP rho)
> in Internal.h.

The 'attribute_hidden' declaration indicates do_docall was not intended for use by package developers. That's also why it's not part of the installed headers. See 'Writing R Extensions', the section titled 'Controlling Visibility'.

> The problem is that I do not guess the exact meaning of theses arguments,
> and the header file Internal.h is not found when included in my C file.

I'm not sure there are any biolerplate descriptions of this common prototype. The are some hints in "R Internals" chapter 2 and the source file /src/main/names.c.

> As this header is not listed in R-exts.pdf section 6.17, I think I cannot
> use the do_docall function.
>
> Does anyone face this problem? or have an idea on how to solve it?

Some ideas, in good-to-bad order:

  1. look for a solution not involving do.call
  2. modularize your C code, such that do.call may be used at R level
  3. use call() at R level, pass result + envir to C code for later eval()
  4. emulate do_docall in custom C code

> Thanks in advance
>
>
> Christophe
>
>
>

-- 
Matthew S. Shotwell
Graduate Student 
Division of Biostatistics and Epidemiology
Medical University of South Carolina

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Tue 02 Nov 2010 - 19:16:02 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 02 Nov 2010 - 21:20:15 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive