[Rd] can R_do_slot_assign change slot type

Douglas Bates bates at stat.wisc.edu
Tue Mar 22 14:09:30 CET 2005


Vadim Ogranovich wrote:
> Hi,
>  
> It seems that R_do_slot_assign can change the type of an S4 class slot.
> For example I have a class
>  
> setClass("ostream", representation(id = "integer", keepOpen =
> "logical"))
> 
> and inside a C-function I was able to assign a RAW vector to the id
> slot. Is this intentional? I remember reading somewhere that the slot
> type is guaranteed by R. Maybe this doesn't extend to C code?
>  
>  
> Now, in the above example I actually don't know the eventual type of the
> 'id' slot, it will be set up in some C code that intializes the class
> instance. What is the right way to define the representation in such a
> case?
>  
> Thanks,
> Vadim

I think it would be more accurate to say that the SET_SLOT macro in C 
(which is preferred to using direct calls to the R_do_slot_assign 
function) does not check the type of the value being assigned.  I 
imagine this is for efficiency - you don't really want to have that code 
looking up the definition of the class of the target every time it is 
called.

Yes, this does provide you with rope with which to hang yourself. 
That's what programming in C is all about.  ;-)  If you are concerned 
about validity of objects from an S4 class, create explicit checks using 
validObject in your R code.



More information about the R-devel mailing list