It appears that my previous post may lack clarity. So, I've created three examples of mathematical function objects. (One) using a standard closure with lexical scoping, (two) using S3 with an attribute and (three) using S4 with a slot. Each example constructs the function object via a constructor (of some form), plots it, then prints the attribute/etc. However, the third example with S4 is incomplete.
Any suggestions welcome. ----begin code---- plotf <- function (f) { x <- seq (-1, 1,, 200) plot (x, f (x), type="l") } #standard closure, with lexical scoping quad.lex <- function (p = c (0, 0, 1) ) { function (x) p [1] + p [2] * x + p [3] * x^2 } #s3-based function object, with attribute quad.s3 <- function (p = c (0, 0, 1) ) { f <- function (x) { this <- sys.function () p <- attr (this, "p") p [1] + p [2] * x + p [3] * x^2 } attr (f, "p") <- p f } #s4-based function object, with slot setClass ("Quad.S4", slots = list (p="numeric") ) Quad.S4 <- function (p = c (0, 0, 1) ) { #? } f.lex <- quad.lex () plotf (f.lex) environment (f.lex)$p f.s3 <- quad.s3 () plotf (f.s3) attr (f.s3, "p") f.s4 <- Quad.S4 () #plotf (f.s4) #f.s4@p On Sat, Feb 13, 2021 at 10:53 AM Abby Spurdle (/əˈbi/) <spurdl...@gmail.com> wrote: > > Dear All, > > I was wondering if it's possible to create S4 function objects? > (Or S4 closures, if you prefer). > > i.e. > An R object, that is both an S4 object, and a function. > > This would allow one to write: > > > f <- constructor4.functionobj () > > f () > > f...@slot.of.f > > I've searched for this, but I can't find any examples. > > If it's possible, then that leads to the question of if/how the body > of f() could directly access the value of the slot? > > > f <- function () > > t...@slot.of.f > > I should note that the more common approach of storing values in a > function's environment, doesn't work well for top-level objects. > This approach is dependent on immutability of the function's data, and > I'm reluctant to create such constraints. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.