问题标签 [r-s3]

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 投票
2 回答
684 浏览

r - 如何在 R 中为自定义 S3 类编写 ac() 函数

我正在用 R 编写一个 S3 类,它只是一个带有一些属性的整数。如果 x1 和 x2 是此类的对象(称为“myclass”),那么我希望 c(x1, x2) 返回 myclass 对象的向量,其中原始类定义和属性完好无损。但是,记录在案的 c() 行为是删除属性,因此我似乎需要编写自己的 c.myclass() 方法。我的问题是,我该怎么做?

问题的一个例子:

这里的结果只是一个数字类项的向量,原来的 n 属性已经消失了。

查看各种包的代码,我有时会看到如下代码,其中我们需要保留类属性,但仅此而已:

不幸的是,我也无法让它发挥作用。调用 c.myclass(x1, x2) 的结果是一个向量,其中向量本身具有类“myclass”,但向量中的每个项目都具有类数字;我真的希望向量中的每个项目都有“myclass”类。在实践中,我还需要升级此方法以保留其他属性(如 myclass 中的属性“n”)。

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 投票
3 回答
1579 浏览

oop - 在 R 中使用 sd 作为通用函数

如果我有一个名为 的类foo,那么重载该summary函数很简单

但是,此技术不适用于该sd功能,即

重载此功能的正确方法是什么?

0 投票
2 回答
647 浏览

r - 获取 S3 打印方法的对象名称失败

定义一个 S3 类“bar”的对象和一个打印方法:

现在 print(foo) 这样做:

很好,但自动打印失败:

我猜这与将行评估为顶级表达式的方式有关。快速搜索 R-devel 无济于事。谁知道怎么修它?

我想要这个名字的原因是因为我定义的是一个函数,并且我希望能够将“try foo(2)”放在 print 方法中(从对象的名称中获取“foo”)。是的,您可以在 S3 中对函数进行子类化。我想可能还有其他陷阱..

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 回答
173 浏览

oop - R中的矩阵丢失类属性

考虑以下代码:

当 A 是子集时,它会丢失“foo”类标签:

向量也是如此。然而,data.frames 不会发生同样的情况:

通常,将泛型函数应用于对象会保留类属性。不适用于矩阵/数字/整数对象。为什么?这种行为可以避免吗?

0 投票
2 回答
558 浏览

r - 从子类调用重写的 s3 方法 (R.oo / R.methodsS3)

我正在使用setMethodS3包 R.methodsS3 来创建 S3 方法。假设我有两个类,class Parentclass Child(R.oo 对象)。 class Child继承自class Parent。两者都有方法MyMethod()。如何从 Child's调用超类MyMethod()(Parent's ) ?我试过这个$MyMethod(),但它调用了Child'sMyMethodMyMethod()MyMethod()

这是一个简化的示例:

0 投票
1 回答
1077 浏览

r - 在 R 中安全地创建 S3 泛型

Henrik Bengtsson 为互联网提供了一种在 R 中创建 S3 泛型的好方法,而不必担心它们是否已经在 2002 年创建。

他的函数 setGenericsS3 的作用基本上是:

  • 检查名称是否正确
  • 检查是否存在具有该名称的函数

如果是这样,

  • 检查它是否是通用的
  • 如果不是,请将其重命名为 .default 并创建一个泛型

如果没有,只需创建泛型。

事实证明,当您自己的包中没有可用的泛型时,此代码对于自动创建泛型非常有用。当我们已经过了这个 R 时代时,我想知道现在在 R 中实现相同目标的正确方法是什么。我在 R 中找不到isS3Generic()类似的函数,而且 Henrik Bengtsson 的代码早在 R 2.14 中引入的强制性命名空间之前就起源了。我记得我见过其他实现相同目标的方法,但找不到它们。

编辑:我专门寻找 S3。该功能isGeneric()仅适用于 S4,例如anova(这是 S3 通用的):