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@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel