gpt4 book ai didi

r - 用于逻辑操作的 S3 方法

转载 作者:行者123 更新时间:2023-12-04 12:35:10 25 4
gpt4 key购买 nike

假设我有一个 S3 对象:

obj <- list()
obj$A <- "This"
obj$B <- "That"
class(obj) <- "myclass"

我将如何为 myclass 编写方法这样它就引用了 obj$B (例如)当我调用它来创建逻辑向量时

例如,我想要这种行为:
obj == "That" # TRUE 
obj == "This" # FALSE

我要 obj == "That"返回 TRUE ,但我怎么告诉 ==要测试对象的哪一部分?

我如何找到这方面的文档?

最佳答案

你应该考虑写一个 Ops.myclss方法。它使您能够在单个函数中处理所有组方法。

?base::Ops , 和 methods(Ops)例如实现。 Section 5.6 - Group Methods中也有一些信息的 R Language Definition .

这是一个例子 Ops.myclass这是 Ops.Date 的一个稍微修改的版本:

Ops.myclass <-
function (e1, e2)
{
if (nargs() == 1)
stop(gettextf("unary %s not defined for \"myclass\" objects",
.Generic), domain = NA)
boolean <- switch(.Generic, `<` = , `>` = , `==` = , `!=` = ,
`<=` = , `>=` = TRUE, FALSE)
if (!boolean)
stop(gettextf("%s not defined for \"myclass\" objects",
.Generic), domain = NA)
if (inherits(e1, "myclass"))
e1 <- e1$B
if (inherits(e2, "myclass"))
e2 <- e2$B
NextMethod(.Generic)
}

请注意,无论 e1 是否有效,比较都有效。或 e2myclass对象。它也适用于任何扩展 myclass 的类。但不定义自己的 Ops方法(尽管错误消息会令人困惑)。

关于r - 用于逻辑操作的 S3 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802018/

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