On Fri, Nov 24, 2006 at 11:23:14AM -0800, Ross Boylan wrote: > Using R 2.4, the following fails: > setClass("testc", representation(a="ANY")) > makeC <- function(myarg) new("testc", a=myarg) > makeC() > -> Error in initialize(value, ...) : argument "myarg" is missing, > with no default .... > > I suspect there's something I could do to get the constructor > arguments, modify the list (i.e., delete args that were missing and > insert new ones), and do.call(new, myArgList). Not only am I unsure > how to do that (or if it would work), I'm hoping there's a better way.
I didn't find a way to get all the arguments easily(*), but manually constructing the list works. Here are fragments of the code: mspathCoefficients <- function( aMatrix, params, offset=0, baseConstrVec, covLabels # other args omitted ) { # innerArgs are used with do.call("new, innerArgs) innerArgs <- list( Class = "mspathCoefficients", aMatrix = aMatrix, baseConstrVec = as.integer(baseConstrVec), params = params ) # the next block inserts the covLabels argument # only if it is non-missing if (missing(covLabels)) { # .... } else { innerArgs$covLabels <- covLabels } #... map <- list() # fill in the map # add it to the arguments innerArgs$map <- map do.call("new", innerArgs) } This calls new("mspathCoefficients", ...) with just the non-missing arguments. The constructed object has appropriately "missing" values in the slots (e.g., character(0) given a slot of type "character"). (*) Inside the function, arg <- list(...) will capture the unnamed arguments, but I don't have any. as.list(sys.frame(sys.nframe()) is closer to what I was looking for, though all the values are promises. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel