问题标签 [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.
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”)。
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 - 在 R 中使用 sd 作为通用函数
如果我有一个名为 的类foo
,那么重载该summary
函数很简单
但是,此技术不适用于该sd
功能,即
重载此功能的正确方法是什么?
r - 获取 S3 打印方法的对象名称失败
定义一个 S3 类“bar”的对象和一个打印方法:
现在 print(foo) 这样做:
很好,但自动打印失败:
我猜这与将行评估为顶级表达式的方式有关。快速搜索 R-devel 无济于事。谁知道怎么修它?
我想要这个名字的原因是因为我定义的是一个函数,并且我希望能够将“try foo(2)”放在 print 方法中(从对象的名称中获取“foo”)。是的,您可以在 S3 中对函数进行子类化。我想可能还有其他陷阱..
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 风格指南超链接现在在这里。
oop - R中的矩阵丢失类属性
考虑以下代码:
当 A 是子集时,它会丢失“foo”类标签:
向量也是如此。然而,data.frames 不会发生同样的情况:
通常,将泛型函数应用于对象会保留类属性。不适用于矩阵/数字/整数对象。为什么?这种行为可以避免吗?
r - 从子类调用重写的 s3 方法 (R.oo / R.methodsS3)
我正在使用setMethodS3
包 R.methodsS3 来创建 S3 方法。假设我有两个类,class Parent
和class Child
(R.oo 对象)。 class Child
继承自class Parent
。两者都有方法MyMethod()
。如何从 Child's调用超类MyMethod()
(Parent's ) ?我试过这个$MyMethod(),但它调用了Child'sMyMethod
MyMethod()
MyMethod()
这是一个简化的示例:
r - 在 R 中安全地创建 S3 泛型
Henrik Bengtsson 为互联网提供了一种在 R 中创建 S3 泛型的好方法,而不必担心它们是否已经在 2002 年创建。
他的函数 setGenericsS3 的作用基本上是:
- 检查名称是否正确
- 检查是否存在具有该名称的函数
如果是这样,
- 检查它是否是通用的
- 如果不是,请将其重命名为 .default 并创建一个泛型
如果没有,只需创建泛型。
事实证明,当您自己的包中没有可用的泛型时,此代码对于自动创建泛型非常有用。当我们已经过了这个 R 时代时,我想知道现在在 R 中实现相同目标的正确方法是什么。我在 R 中找不到isS3Generic()
类似的函数,而且 Henrik Bengtsson 的代码早在 R 2.14 中引入的强制性命名空间之前就起源了。我记得我见过其他实现相同目标的方法,但找不到它们。
编辑:我专门寻找 S3。该功能isGeneric()
仅适用于 S4,例如anova
(这是 S3 通用的):