Thank you for help.

So I will look for another implementation not involving do_docall.

Actually, I want to pass a function and a list of arguments as argument. The
example lapply2 in section 5.11 is what I would like to do.

Christophe


2010/11/2 Duncan Murdoch <murdoch.duncan@gmail.com>

> On 02/11/2010 11:28 AM, 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 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.
>>
>> 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?
>>
>
> You would rarely want to use do.call from C.  You should use eval().  See
> the examples in the Writing R Extensions manual, in the section "Evaluating
> R expressions from C".
>
> Duncan Murdoch
>



-- 
Christophe DUTANG
Ph. D. student at ISFA, Lyon, France

	[[alternative HTML version deleted]]

