r - 如何处理 R 中的未知方法/泛型

标签 r oop r-s4 r6

许多语言都有特殊的方式来处理未知方法 ( examples )。我最熟悉的是Python的__getattr__。如果有人调用您尚未为类定义的方法,__getattr__ 将充当包罗万象的角色并执行某些操作

我一直在阅读 S4 和 R6 的一些内容,但我还没有找到如何在 R 中做到这一点。这可能吗?

最佳答案

不,没有像在 python 中那样从类定义内部执行此操作的标准方法。

在Python中你会做类似MyObject.my_method()的事情,而在R中使用S3或S4这将是my_method(MyObject)所以它看起来和my_function(MyObject)一模一样。唯一的区别是,在底层,您调用的函数将调用分派(dispatch)给适当的方法。为多个类定义这些方法如下:

mean <- function (x, ...) UseMethod("mean", x)
mean.numeric <- function(x, ...) sum(x) / length(x)
mean.data.frame <- function(x, ...) sapply(x, mean, ...)
mean.matrix <- function(x, ...) apply(x, 2, mean)
mean.default <- function(x, ...) {
  # do something
}

但是,如果您在尚未定义方法的类上调用mean函数,则由函数来处理此问题,而不是由类来处理。

然后你有 RC 和 S6 对象,它们具有更像 python 的语法 (MyObject$my_method()),但是它们只会抛出一个错误:您使用的类没有相应的字段或方法。

Error in envRefInferField(x, what, getClass(class(x)), selfEnv) : 
  "my_method" is not a valid field or method name for reference class “MyObject”

Here some infos about OO-programing in R .

关于r - 如何处理 R 中的未知方法/泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56668510/

相关文章:

r - 无法让aggregate()按组进行回归工作

r - R 中的 cv.lars 错误

r - 平局打破模式,第二列中的值 -R

java - 在Java中销毁对同一对象的多个引用

c# - 在 OOP 中创建接口(interface)基础设施背后的哲学是什么?

R:数据点与高斯函数的稳健拟合

javascript - new 与 Object.create() 之间的真正区别是什么

自定义 S4 类的 R 绘图方法

r - 与 S4 类相比,使用 setOldClass 时重载运算符无法按预期工作

R编程: Use of setMethod to override the 'summary' function for a group of classes