Hi R friends,
 
I'm still studying S4 classes and I have a question about slot assignment. Why would I have to use a special setter method [example 2 below] if I can assign data to a slot directly when I call new() [example 1 below]?
 
## first way to do it (the idiosyncratic way?)
setClass(Class = "TestClass", representation = representation(myDf = "data.frame"))
setGeneric(name = "doStuff", def = function(object, ...){standardGeneric("doStuff")})
setMethod(f = "doStuff",
   signature = "TestClass",
   definition = function(object, ...) {
     return( object@myDf )
}) 
df_a <- data.frame(cbind(letters=letters, digits=runif(26)))
instance <- new(Class = "TestClass", myDf = df_a) # direct slot assignment. Is this bad? If so, why?
doStuff(instance)
 
## second way to do it (the R way?)
setClass(Class = "TestClass", representation = representation(myDf = "data.frame"))
setGeneric(name = "doStuff", def = function(object, ...){standardGeneric("doStuff")})
setMethod(f = "doStuff",
   signature = "TestClass",
   definition = function(object, ...) {
     return( object@myDf )
}) 
setGeneric(name = "setDoStuff<-", def = function(object, value){standardGeneric("setDoStuff<-")})
setReplaceMethod(f = "setDoStuff",
   signature = "TestClass",
   definition = function(object, value) {
     object@myDf <- value
     return( object )
}) 
df_b <- data.frame(cbind(letters=LETTERS, digits=runif(26)))
instance <- new(Class = "TestClass")
setDoStuff(instance)<-df_b
doStuff(instance)

Thank you in advance for your replies!

Cheers!!
Albert-Jan

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All right, but apart from the sanitation, the medicine, education, wine, public order, irrigation, roads, a fresh water system, and public health, what have the Romans ever done for us?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


      
	[[alternative HTML version deleted]]

