r - 如何处理 R 中的未知方法/泛型
问题描述
许多语言都有处理未知方法的特殊方法(示例)。我最熟悉的是 Python 的__getattr__
. 如果有人调用了您尚未为该类定义的方法,则__getattr__
充当包罗万象并执行某些操作。
我一直在阅读 S4 和 R6 的一些内容,但我还没有找到如何在 R 中做到这一点。这可能吗?
解决方案
不,没有像在 python 中那样从类定义中执行此操作的标准方法。
在 python 中,你会MyObject.my_method()
在 R 中使用S3 或 S4执行类似操作,这样my_method(MyObject)
它看起来就像my_function(MyObject)
. 唯一的区别是,您调用的函数将调用分派给适当的方法。为多个类定义这些方法如下:
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”
推荐阅读
- python - 包 __init__.py 导入所有子文件,但只从另一个脚本加载一个?
- python - 将一些数据帧信息传输到新矩阵
- jquery - Ajax 与 jquery 验证不显眼和部分视图
- hl7-fhir - FHIR v5.0 规范发布了吗?
- javascript - js如何转成字符串
- java - HTTPS请求的Spring Boot RestTemplate问题
- visual-studio - 关于很久以前删除的 Qt 版本的 Visual Studio Qt 插件错误
- javascript - Raspberry Pi 4 的 NodeJ 已过时,我无法更新
- node.js - 如何在 ubuntu 中使用 apt-get 在我选择的存储库中安装 nodejs?
- mysql - 如何为给定键连接 4 个表(MYSQL)