问题标签 [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.

0 投票
1 回答
2127 浏览

oop - 什么是 S1 和 S2 课程?

在 R 中有 S3、S4 和 R 2.12,参考类(非官方称为 S5 类)。

是否有 S1(或 S2)类之类的东西?如果是这样,它们是什么?如果不是,为什么要从 S3 开始?

0 投票
2 回答
394 浏览

oop - is.object 和 S3 类系统

使用该class函数可以确定对象的类:

我也明白我们可以使用is.object命令来确定一个对象是否有一个类。然而,有些对象类型是隐式的,即

声明 R 中的所有变量都是对象并且is.object仅对非隐式类进行测试是否正确?

此外,类型如何适应这一点。天真地,我认为以下代码会产生错误:

x仍然有“双”类型,仍然一切正常。类型可以被认为是所有其他对象都继承自的超类吗?

0 投票
1 回答
1954 浏览

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 对象转换为列表的通用方法?S3Classmethodswin

0 投票
6 回答
49105 浏览

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 风格指南超链接现在在这里

0 投票
1 回答
93 浏览

r - R使用面向对象编程(S3和S4)将多个函数转换为一个对象

我试图了解如何将函数转换为 R 中的面向对象编程。例如,如何使用 S3(然后是 S4)将下面的数据和 2 个函数转换为一个对象?(也许其他一些简单的数据和函数可以更好地作为示例?)

以及如何使用 OOP 执行以下功能。

0 投票
1 回答
102 浏览

r - 来自不同包的具有相同名称的 R S4 类

假设有两个包。

Package_A 有这个类:

Package_B 有一个类似的类:

所以用户已经在他们的工作环境中加载了这两个包:

在这个用户的工作环境中,R 如何解决创建“Person”对象的困惑:

在此用户的工作环境中,R 如何解析调用正确的方法:

0 投票
0 回答
41 浏览

r - 为 Ops 分组通用方法(用于时间序列)

我尝试在一个 S3 类上定义一个类 Ops 继承,该类是一个列表,并且在列表中有一个时间序列。

由于 S3 double dispatch,它不适用于简单的方法。因为我不想覆盖 Ops.ts(它是为了一个包),所以我必须找到一些东西。

对我来说这似乎很奇怪,因为 Ops 是 S4 组通用的。它不应该调用可用的 S4 方法,然后,如果没有,就转到 S3 吗?会发生什么以及如何解决?

0 投票
0 回答
20 浏览

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 方法不兼容,这使得它相当无用。

0 投票
1 回答
14 浏览

r - 避免在 S4 R 类系统中向上转换

我正在尝试使用 S4 在 R 中创建隐式居中/缩放矩阵(以期为大型稀疏矩阵执行此操作)。

我可以创建一个隐式缩放矩阵,它可以正确地与向量进行左右乘法:

和一个隐式居中的矩阵:

但是如果我想结合这些呢?我认为以下会起作用

据我所知,问题在于

即当X_centered_scaled被创建时X_centered被向上转换为 amatrix而不是保持 a centered_matrix。有什么办法可以避免这种情况发生吗?当然,我可以制作一个matrix_centered_scaled类,但我喜欢将这两个链接在一起的优雅,它提供了只使用一个或另一个的选项。

0 投票
1 回答
116 浏览

r - 定义从函数继承的 S4 类

我正在尝试编写一个专门返回与输入长度相同的数字向量的 S4 类。我想我很接近了;我现在遇到的问题是我只能从我的 GlobalEnv 中的函数创建新类。

让类直接从函数继承的好处是能够将它们用作常规函数:

为什么在全局环境之外传递函数时会出错?