问题标签 [r-s4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oop - 什么是 S1 和 S2 课程?
在 R 中有 S3、S4 和 R 2.12,参考类(非官方称为 S5 类)。
是否有 S1(或 S2)类之类的东西?如果是这样,它们是什么?如果不是,为什么要从 S3 开始?
oop - is.object 和 S3 类系统
使用该class
函数可以确定对象的类:
我也明白我们可以使用is.object
命令来确定一个对象是否有一个类。然而,有些对象类型是隐式的,即
声明 R 中的所有变量都是对象并且is.object
仅对非隐式类进行测试是否正确?
此外,类型如何适应这一点。天真地,我认为以下代码会产生错误:
但x
仍然有“双”类型,仍然一切正常。类型可以被认为是所有其他对象都继承自的超类吗?
oop - 如何让 S3 方法与 S4 对象一起工作?
我正在编写一个 S3 方法,我想使用任何R 对象,包括 S4 对象。
我不明白的第一件事是 S4 类似乎不是从 S4 基类派生的,所以鉴于f <- function(x) UseMethod("f")
我不能只声明一个f.S4
调度方法并让它拾取所有 S4 对象。(虽然如果你unclass
是一个 S4 对象,它似乎被赋予了 class S4
。)我应该如何管理调度?
似乎处理这些 S4 对象的最简单方法是将它们转换为列表。不幸的是,as.list
抛出一个错误(“没有将这个 S4 类强制为向量的方法”)。
这是我的测试 S4 对象:
包中的函数S3Part
和函数看起来很有希望,但是当我在. 所以,问题 2 是:是否有将 S4 对象转换为列表的通用方法?S3Class
methods
win
r - R中的“S3方法”是什么意思?
由于我对 R 相当陌生,因此我不知道 S3 方法和对象是什么。我发现有 S3 和 S4 对象系统,如果可能的话,有些人建议使用 S3 而不是 S4(请参阅http://google-styleguide.googlecode.com/svn/trunk/google-r-style 上的 Google 的 R 样式指南。 html )*。但是,我不知道 S3 方法/对象的确切定义。
更新:截至 2019 年,谷歌的 R 风格指南超链接现在在这里。
r - R使用面向对象编程(S3和S4)将多个函数转换为一个对象
我试图了解如何将函数转换为 R 中的面向对象编程。例如,如何使用 S3(然后是 S4)将下面的数据和 2 个函数转换为一个对象?(也许其他一些简单的数据和函数可以更好地作为示例?)
以及如何使用 OOP 执行以下功能。
r - 来自不同包的具有相同名称的 R S4 类
假设有两个包。
Package_A 有这个类:
Package_B 有一个类似的类:
所以用户已经在他们的工作环境中加载了这两个包:
在这个用户的工作环境中,R 如何解决创建“Person”对象的困惑:
在此用户的工作环境中,R 如何解析调用正确的方法:
r - 为 Ops 分组通用方法(用于时间序列)
我尝试在一个 S3 类上定义一个类 Ops 继承,该类是一个列表,并且在列表中有一个时间序列。
由于 S3 double dispatch,它不适用于简单的方法。因为我不想覆盖 Ops.ts(它是为了一个包),所以我必须找到一些东西。
对我来说这似乎很奇怪,因为 Ops 是 S4 组通用的。它不应该调用可用的 S4 方法,然后,如果没有,就转到 S3 吗?会发生什么以及如何解决?
r - 获取内部 R 函数以使用我的 S4 方法
我创建了一个自定义 S4 类,想法是它代表一个始终排序的向量,所以我不想sort()
对它做任何事情。所以我sort()
为我的班级定义了一个存根版本:
然后,我想计算我班级的分位数。R 的quantile()
函数内部调用sort()
. 但是,sort()
used 内部quantile()
不知道我的 S4 方法,因为它使用UseMethod()
(S3 调度程序)而不是 standardGeneric()
S4 调度程序进行调度。如下所示:
这将返回一个调用堆栈,如下所示:
由于sort.default
被调用,很明显我的自定义sort
实现没有被使用。
有没有一种简单的方法可以让 R 在这里使用我的 S4 方法?我意识到我也可以定义sort.MyClass
(S3 方式),但如果我这样做,那么拥有 S4 方法有什么意义呢?似乎 S4 与核心 R 方法不兼容,这使得它相当无用。
r - 避免在 S4 R 类系统中向上转换
我正在尝试使用 S4 在 R 中创建隐式居中/缩放矩阵(以期为大型稀疏矩阵执行此操作)。
我可以创建一个隐式缩放矩阵,它可以正确地与向量进行左右乘法:
和一个隐式居中的矩阵:
但是如果我想结合这些呢?我认为以下会起作用
据我所知,问题在于
即当X_centered_scaled
被创建时X_centered
被向上转换为 amatrix
而不是保持 a centered_matrix
。有什么办法可以避免这种情况发生吗?当然,我可以制作一个matrix_centered_scaled
类,但我喜欢将这两个链接在一起的优雅,它提供了只使用一个或另一个的选项。
r - 定义从函数继承的 S4 类
我正在尝试编写一个专门返回与输入长度相同的数字向量的 S4 类。我想我很接近了;我现在遇到的问题是我只能从我的 GlobalEnv 中的函数创建新类。
让类直接从函数继承的好处是能够将它们用作常规函数:
为什么在全局环境之外传递函数时会出错?