Dear R-help,
how could I create an R call in C code using lang2 with 2 and more
arguments? I tried this code:
SEXP f(SEXP fn, SEXP rho)
{
SEXP R_fcall, x, y;
PROTECT(R_fcall = lang2(fn, R_NilValue));
PROTECT(x = allocVector(REALSXP, 1));
PROTECT(y = allocVector(REALSXP, 1));
REAL(x)[0] = 10;
REAL(y)[0] = 20;
SETCADR(R_fcall, x);
SETCADR(R_fcall, y);
UNPROTECT(3);
return R_fcall;
}
.Call("f", c, new.env()) returns
`.Primitive("c")(20)', but not `.Primitive("c")(10,
20)',
as I expected. How can I recieve the disired result?
Thank you very much.
--
WBR,
Timur.
Dear R-help,
how could I create an R call in C code using lang2 with 2 and more
arguments? I tried this code:
SEXP f(SEXP fn, SEXP rho)
{
SEXP R_fcall, x, y;
PROTECT(R_fcall = lang2(fn, R_NilValue));
PROTECT(x = allocVector(REALSXP, 1));
PROTECT(y = allocVector(REALSXP, 1));
REAL(x)[0] = 10;
REAL(y)[0] = 20;
SETCADR(R_fcall, x);
SETCADR(R_fcall, y);
UNPROTECT(3);
return R_fcall;
}
.Call("f", c, new.env()) returns
`.Primitive("c")(20)', but not `.Primitive("c")(10,
20)',
as I expected. How can I recieve the disired result?
Thank you very much.
--
WBR,
Timur.
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 :) Thanks. -- WBR, Timur.