Kasper, Thanks! I that was the clue I was looking for. Simple change to the code makes it work perfectly as you describe. I also have constructor function for Model beyond the minimal example. I also like you reference to Bioconductor as that is the model I am trying to follow.
Glenn setGeneric("Omega", function(object) {standardGeneric("Omega")}) setMethod("Omega", signature = "FRMModelFunction", definition = function(object){object@Omega}) setClass("FRMModelFunction", representation( Omega = "function")) Model <- new("FRMModelFunction", Omega = function(x = numeric()) {return(max(0, min(1, x)))} ) > On Mar 28, 2016, at 2:14 PM, Kasper Daniel Hansen > <kasperdanielhan...@gmail.com> wrote: > > This syntax > Omega(x = 1) > seems weird. How do you know that this call should refer back to the Model > object and not some other hypothetical Model2 object? The code you're > defining should make something like this work > Omega(Model)(x=1) > where you can see the direct dependence on the Model object. > > (unrelated: One experience from Bioconductor, is that it is good to have > explicit constructors for S4 objects instead of using new("...").) > > Best, > Kasper > > On Mon, Mar 28, 2016 at 2:09 PM, Glenn Schultz <glennmschu...@me.com > <mailto:glennmschu...@me.com>> wrote: > All, > I am creating a mortgage prepayment model package. The idea is to create a > class FRMModelFunction and each slot in the class is a function that may be > use in the prepayment. So I would like to create a generic and method that > will allow me to call the slot by name. However, I think that I am missing > something in my setup > > If I run the below code I can do the following > > Omega(Model) which returns the function > > Omega <- Omega(Model) which then assigns the function and allows me to pass > values and get a result from Omega(x = 1) > > However I can also get a result by directly accessing the slot > > Model@Omega(x=1) > > What I want to do is set a generic and method so that I can do the following > > Omega(x=1) > > The below is close but still not what I would like to have. Is what I have > described possible and if so what have I missed? > > Glenn > > > setGeneric("Omega", function(object,...) {standardGeneric("Omega")}) > > setMethod("Omega", signature = "FRMModelFunction", > definition = function(object){object@Omega}) > > setClass("FRMModelFunction", > representation( > Omega = "function")) > > Model <- new("FRMModelFunction", > Omega = function(x = numeric()) {return(max(0, min(1, x)))} > ) > ______________________________________________ > R-package-devel@r-project.org <mailto:R-package-devel@r-project.org> mailing > list > https://stat.ethz.ch/mailman/listinfo/r-package-devel > <https://stat.ethz.ch/mailman/listinfo/r-package-devel> > [[alternative HTML version deleted]] ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel