R中的面向对象编程的教程


15

在R中是否有关于面向对象编程的优秀教程?

如果它包含以下内容,那就太好了:

  • 如何定义一个类;
  • S3和S4类之间的差异;
  • 运算符重载(我希望能写a+b在那里a,并b在课堂上,我心目中的情况下)。

Answers:


10

哈德利·威克汉姆(Hadley Wickham)在devtools上提供的Wiki 以简明扼要的形式提供了必要信息的重要资源。但是,如果您需要详尽的资源,R语言手册的OOP部分可能会有所帮助。我相信更多有经验的成员会提出更好的建议。



4

哈德利·威克姆(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软件包广泛使用,需要对生物对象之间的复杂相互关系进行建模。生物导体为学习S4提供了许多很好的资源。如果您掌握了S3,则S4相对来说比较容易拿起;想法都是一样的

如果您使用主流的OO语言编程,那么RC似乎很自然。但是,由于它们可以通过可变状态引入副作用,因此很难理解。例如,当您通常在R中调用f(a,b)时,可以假定a和b将不会被修改。但是,如果a和b是RC对象,则可以在该位置进行修改。通常,在使用RC对象时,您要尽可能减少副作用,并仅在绝对需要可变状态的情况下使用它们。大多数功能仍应是“功能性的”,并且没有副作用。这使得代码更易于推理,其他R程序员也更容易理解。

他引用了“ S4编程实用教程 ”。

如果遵循他的指示,还有许多其他有趣的资源。

约翰·钱伯斯(John M. Chambers)在“面向对象的编程,函数式编程和R”中说道:

R还受到功能编程思想的强烈影响,特别是受到将功能与面向对象编程相结合的需求的强烈影响

将添加与问题不直接相关但沿相同思想的内容:“ Spark中的DataFrames用于大规模数据科学”。由于这使Scala和R更加接近,因此可能会产生巨大的OO /功能协同作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.