I think the solution is PROTECT_WITH_INDEX. From the Rinternals.h file /* We sometimes need to coerce a protected value and place the new coerced value under protection. For these cases PROTECT_WITH_INDEX saves an index of the protection location that can be used to replace the protected value using REPROTECT. */ typedef int PROTECT_INDEX; #define PROTECT_WITH_INDEX(x,i) R_ProtectWithIndex(x,i) #define REPROTECT(x,i) R_Reprotect(x,i)
You can see examples in dataentry.c, optim.c and elsewhere. I agree that should be mentioned in R-exts. On Fri, 31 Oct 2003, Jens Oehlschl�gel wrote: > > What is the best way to grow an R return object in writing a C function > using the Rdefines.h macros. > In my application, the final size of the return object is not known during > construction. My understanding is that each time I grow an R object I have to > use PROTECT() again, probably before UNPROTECTing the smaller version. > However, due to the stack character of the PROTECT mechanism, UNPROTECT would not > work to remove the smaller one, after the bigger has been protected. Is this > an indication to use UNPROTECT_PTR ? Or is another approach recommended? > > May be the solution to this is worth a sentence in "Wrtiting R Extensions". > > Thanks for any help > > > Jens Oehlschl�gel > > -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
