[Rd] protect

Kasper Daniel Hansen khansen at stat.Berkeley.EDU
Tue May 23 08:39:31 CEST 2006


I have a few simple questions about the usage of PROTECT, more  
specifically how careful one needs to be. Simple yes/no answers are  
fine.

Most of the uses I have seen do protection when memory is allocated.  
But what if one just want to assign a value of another function to a  
variable. Say eg. that foo is a function that returns a SEXP. Would  
the following code be fine?

SEXP bar;
PROTECT(bar = foo());

Also, basically in one use case I would want to return the value of  
foo immediately, but I need to do some cleaning up first, which has  
nothing to do with R (more specifically, I need to close various  
files). Would I then need to protect foo, as in

SEXP bar;
bar = foo();
"close the file in C++"
return bar;

Finally, I am also assigning values to the components of a list.  
Would the following be ok

SEXP bar;
PROTECT(bar = NEW_LIST(2));
SET_VECTOR_ELT(bar, 0, ScalarInteger(test());

(where test is a function returning int, which again has nothing to  
do with R - it interfaces to an extern library), or do I need to  
hedge myself against garbage collection in the SET_VECTOR_ELT macro?

/Kasper



More information about the R-devel mailing list