[R] Is it Possible to Create S4 Function Objects?
Hervé Pagès
hp@ge@@on@g|thub @end|ng |rom gm@||@com
Sun Feb 21 23:36:23 CET 2021
Hi Abby,
Something along the line of:
setClass("S4Function",
contains="function",
representation(name="character", more_stuff="ANY")
)
seems to do what you want:
f <- new("S4Function", function(a) a^2, name="square")
# 'f' is both an S4 object and a function:
is.object(f)
# [1] TRUE
is.function(f)
# [1] TRUE
f using name
# [1] "square"
f(11)
# [1] 121
Hope this helps,
H.
On 2/12/21 1:53 PM, Abby Spurdle (/əˈbi/) 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.
>
> ______________________________________________
> R-help using 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.
>
--
Hervé Pagès
Bioconductor Core Team
hpages.on.github using gmail.com
More information about the R-help
mailing list