[R] Is it Possible to Create S4 Function Objects?
Abby Spurdle (/əˈbi/)
@purd|e@@ @end|ng |rom gm@||@com
Tue Feb 16 00:03:54 CET 2021
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 using p
On Sat, Feb 13, 2021 at 10:53 AM Abby Spurdle (/əˈbi/)
<spurdle.a using 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 using 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 ()
> > this using 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.
More information about the R-help
mailing list