Hi List, I'd imagine this is a question that has been answered before, but I can't seem to track it down, sorry for the duplication if it has.
I am writing an interface for a C library and want to return an S4 class from the 'constructing' method. One of the slots of the argument to be returned will be filled with one of the arguments passed to the function. My question is about whether I can directly pass arguments to the function directly to slots of the returned object (or to a return value more generally for that matter), or whether I have to copy them. If it is the latter, then how may I do this. The question is phrased in the following (simplified) code. int constructThingy(int thingysInteger); SEXP constructThingy(SEXP thingysInteger) { SEXP ans, TClass, ti; if(!isInteger(thingysInteger)) error("thingysIntegermust be an integer."); if(constructThingy(INTEGER(thingysInteger)[0])) error("error in getting a thingy"); TClass = MAKE_CLASS("thingy"); PROTECT(ans = NEW_OBJECT(TClass)); // *****QUESTION STARTS HERE***** // CAN I SAY: SET_SLOT(ans, Rf_install("myInteger"), thingysInteger); // IF NOT, CAN I SAY SET_SLOT(ans, Rf_install("myInteger"), AS_INTEGER(thingysInteger)); // OR DO I NEED TO SAY PROTECT(ti = allocVector(INTSXP, 1)); INTEGER(pns)[0] = INTEGER(thingysInteger)[0]; SET_SLOT(ans, Rf_install("myInteger"), ti); // *****END OF QUESTION***** UNPROTECT(1); // or UNPROTECT(2) in latter case. return ans; } I think this is the same as asking whether the following is OK: SEXP func(SEXP arg) { return arg; } Thanks in advance, Simon ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel