R中有没有关于面向对象编程的好教程?
如果它包括以下内容,那就太好了:
- 如何定义一个类;
- S3 和 S4 课程之间的差异;
- 运算符重载(我希望能够写出我想到的类的实例
a+b
和a
位置)。b
R中有没有关于面向对象编程的好教程?
如果它包括以下内容,那就太好了:
a+b
和a
位置)。b
除了@suncoolsu 的出色回应之外,还有 Christophe Genolini 的A (Not So) Short Introduction to S4。它可在 CRAN 网站上找到。
Hadley Wickham 的“ Advanced R ”有一些很好的介绍和参考。我正在复制此部分以获得更好的索引。
选择一个系统
三个 OO 系统对于一种语言来说很多,但对于大多数 R 编程来说,S3 就足够了。在 R 中,您通常为诸如 print()、summary() 和 plot() 等预先存在的通用函数创建相当简单的对象和方法。S3 非常适合这项任务,而我用 R 编写的大部分 OO 代码都是 S3。S3 有点古怪,但它用最少的代码完成了工作。
如果您正在创建更复杂的相关对象系统,S4 可能更合适。一个很好的例子是 Douglas Bates 和 Martin Maechler 的 Matrix 包。它旨在有效地存储和计算许多不同类型的稀疏矩阵。从 1.1.3 版开始,它定义了 102 个类和 20 个通用函数。这个包写得很好,注释也很好,随附的小插图 (vignette("Intro2Matrix", package = "Matrix")) 很好地概述了包的结构。S4 也被 Bioconductor 包广泛使用,它需要对生物对象之间复杂的相互关系进行建模。Bioconductor 为学习 S4 提供了许多很好的资源。如果你掌握了S3,S4相对容易上手;想法都是一样的,只是更正式,更严格,
如果你用主流的 OO 语言编程,RC 看起来会很自然。但是因为它们可以通过可变状态引入副作用,所以它们更难理解。例如,当您通常在 R 中调用 f(a, b) 时,您可以假设 a 和 b 不会被修改。但是如果 a 和 b 是 RC 对象,它们可能会被修改。通常,在使用 RC 对象时,您希望尽可能减少副作用,并且仅在绝对需要可变状态时使用它们。大多数功能应该仍然是“功能性的”,并且没有副作用。这使得代码更容易推理,也更容易让其他 R 程序员理解。
他参考了“ S4 编程实用教程”。
如果您遵循他的指示,还有许多其他有趣的资源。
John M. Chambers 在“面向对象编程、函数式编程和 R”中说:
R 也受到函数式编程思想的强烈影响,特别是希望将函数式编程与面向对象编程相结合
会添加一些与问题不直接相关但遵循相同想法的内容:“DataFrames in Spark for Large Scale Data Science”。由于这使 Scala 和 R 更接近,因此可能会产生很好的 OO/功能协同作用。