I'm trying to define a hybrid initialize function that can either takes a numeric argument or an object of the same class (similar to "copy-constructor" in other languages). My attempt:
setRefClass("Temp",
fields=list(
x="numeric",
y="ANY"),
methods=list(initialize=function(object){
if (class(object) == "numeric"){
.self$x <- object
.self$y <- NULL
}
else if (class(object) == "Temp"){
print("Copy")
.self <- object
#.self <- object$copy()
}
else{
stop(paste0("Class '",class(object),"' unknown"))
}
}
))
So if object is numeric, it is assigned to .self$x and .self$y is initialized to NULL. If object has class "Temp", then initialize should construct a deep copy of object.
However, .self <- object doesn't do anything. If I run
temp1 <- new("Temp",1)
temp2 <- new("Temp",temp1)
Then temp2 is initialized to default values. If instead I use .self <- object$copy(), then I get
Error in .Object$initialize(...) : argument "object" is missing, with no default
which probably happens because $copy() calls initialize().
What is the correct code for what I tried to achieve with .self<-object?