Skip to content

.C and 'temporaries'

2 messages · Thomas Mang, Duncan Murdoch

#
Hello,

Before I get into troubles I ask here:

I make a call to a C function using .C. What I would like to know is if 
the arguments in the .C call can also be 'temporary' objects.

An example will illustrate this:

# here we don't have a temporary
Obj1 = 5
.C("Func", as.integer(Obj1 ), ...) # certainly works

# here we do have a temporary
Obj2 = 5
.C("Func", as.integer(Obj2 + 100), ...) # is this guaranteed to work?


Is the second call valid?
Is it also valid if DUP = FALSE, or only if DUP = TRUE ?

Thanks,
Thomas
#
On 23/12/2008 6:55 PM, Thomas Mang wrote:
Yes.  It makes a copy of the object computed as Obj2 + 100, and passes 
that to Func.
I suspect it is, but I would never use DUP = FALSE.  What the docs say 
is that this will let you modify the temporary object Obj2 + 100, and 
then the results will be returned in the return value of .C.  So it 
should be safe, but it is probably not tested very frequently.  If you 
are worried about the overhead of duplicating the vector, it's probably 
time to learn the .Call interface instead.

Duncan Murdoch