[R] lang2(...) with two and more arguments
Douglas Bates
bates at stat.wisc.edu
Tue Nov 4 16:28:33 CET 2003
Timur Elzhov <Timur.Elzhov at jinr.ru> writes:
> On Tue, Nov 03, 2003 at 17:06:37 +0100, you wrote:
>
> >> REAL(x)[0] = 10;
> >> REAL(y)[0] = 20;
> >> SETCADR(R_fcall, x);
> >> SETCADR(R_fcall, y);
> >> ...
> >> .Call("f", c, new.env()) returns
> >> `.Primitive("c")(20)'
> > Hmmm. This is definitely not right:
> >
> > SETCADR(R_fcall, x);
> > SETCADR(R_fcall, y);
> >
> > sets the same location first to x, and then to y. I suspect you need
> >
> > SETCADDR(R_fcall, y);
> >
> > but no guarantees...
> This returns message `bad value'.
>
> Ok! the question is: How can I create a call with, say, 10
> arguments? I mean C code, of course :)
Better look at your example more closely. lang2 is used to create a
function call with *one* argument. lang2 itself takes two arguments:
the name (i.e. an SEXP of type name) of the function and an SEXP to
the argument.
You create a function call of two arguments with lang3 and a function
call of three arguments with lang4. After that I think you have to
cons up a (lisp-like) list yourself.
This discussion probably belongs on r-devel not r-help.
More information about the R-help
mailing list