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.