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/)

<

[hidden email]> 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 ()

> >

[hidden email]
>

> 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 ()

> >

[hidden email]
>

> 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.

______________________________________________

[hidden email] mailing list -- To UNSUBSCRIBE and more, see

https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide

http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.