gpt4 book ai didi

r - 在 S4 类的插槽上分派(dispatch) S4 方法

转载 作者:行者123 更新时间:2023-12-01 08:12:32 24 4
gpt4 key购买 nike

我想创建一个 S4 方法“myMethod”,它不仅在函数的第一个参数的类上调度,而且在此类的一个槽的值上调度。

例如

我的对象:
@slot1="A"
@...

我希望 myMethod(myObject) 为 slot1="A"和 slot2="B"返回不同的东西。

我可以避免在“myObject”的代码中对“if”进行硬编码吗?

最佳答案

一个并非完全不常见的模式是使用小类来提供多重分派(dispatch)

setClass("Base")
A = setClass("A", contains="Base")
B = setClass("B", contains="Base")
My = setClass("My", representation(slot1="Base"))

setGeneric("do", function(x, y, ...) standardGeneric("do"))
setMethod("do", "My", function(x, y, ...) do(x, x@slot1, ...))

然后是处理重新调度的方法

setMethod("do", c("My", "A"), function(x, y, ...) "My-A")
setMethod("do", c("My", "B"), function(x, y, ...) "My-B")

在行动中:

>     My = setClass("My", representation(slot1="Base"))
> a = My(slot1=A())
> b = My(slot1=B())
> do(a)
[1] "My-A"
> do(b)
[1] "My-B"

关于r - 在 S4 类的插槽上分派(dispatch) S4 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16417426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com