我正在发布一个开放的问题来寻找在R中创建新类的优点或缺点.据我所知,在R,S3,S4,R5(或RC)中创建类时,基本上有四种不同的范例. )和R6.
S3是R使用的大多数核心库,并且似乎有一些优点可以坚持使用泛型方法调度的简单,轻度结构化模式.我想避免使用这个对于不是很清楚,我其他的原因,如封装,方法的定义等.例如,它构建一个类时,显得相当麻烦,因为一般的方法定义的外阶级,以及那种性质的事物.
S4似乎没有任何好处,但它确实有一个穷人的类型安全概念,它可以使明显的错误更加明显.但是,我仍然认为S4类很难维护,因为我不确定封装等内容以及这些类涉及的内容.让我感到困惑的另一件事是,命名空间几乎没有概念.
R5似乎有点类似于我习惯的方法,其中方法的定义绑定到类,而不是调度函数.在这里,我会更多地考虑使用我将习惯的类来组织对象.一个可能的缺点是R5也是由S4构建的.
R6似乎是由个人重写的R5,它为混合添加了更多的OOP功能,例如私有和公共函数和属性,但是我很难找到对这些类的任何支持,因为有关它们的信息似乎很少谷歌搜索.
正如你所知,我正在努力研究R中的OO概念,我似乎无法弄清楚通常与OOP相关的以下方面:
我想知道是否有人可以提供一个答案,可以描述R社区中首选的类系统,以及如何最好地考虑何时使用类.
Rob*_*ski 51
您似乎已经了解了各种OOP类型的一些定义和用法.我会就何时适合使用哪一个发表意见.
在以下两种情况下适用的情况下使用S3类:(a)您的对象是静态的而不是自修改的,以及(b)您不关心多参数方法签名,即您的方法纯粹根据其第一个参数进行调度,对象的S3类.此外,S3类是一个很好的解决方案,当你可以忍受这些限制,并希望超载许多运算符.
如果您的对象是静态的而不是自我修改的,则使用S4类,但是您需要关注多参数方法签名.根据我的经验,S4 OOP一直比它的价值更麻烦,尽管它在某种程度上"保证"了类型的安全性.
如果对象是自修改的,请使用引用类.否则,您将不得不定义许多替换方法(例如,some_method<-使用语法调用some_method(obj) <- value).这很笨拙且计算速度慢,因为R每次都会创建对象的完整副本.R6是一个很好的替代品,虽然我没有发现它对我的目的是必要的.
大多数R新手都认为它很混乱; 有这么多OOP实施的原因是因为没有达成共识.
这是不正确的.
由于其统计特性,R中的大多数异构结构(即应该是对象的东西)最终成为统计算法的结果:lm,glmnet,gbm等对象.它通常足以捆绑这个信息和总结它提供预期的接口:print,summary,等.
由于其作为统计操场的遗产,这使用户不必考虑更高级的概念,如继承和分配/解除分配,并为更多的贡献者打开了竞争环境.这意味着在R中创建复杂项目(例如,Web服务器,文本解析器,图形界面等)比在像Ruby这样的典型对象驱动语言中创建更麻烦,但缺乏统一的OOP类型是通过易用性来平衡.
考虑它的最后一种方法是不同的方法就像物质中的相变:固体,气体,液体.不是一致地处理所有异构结构(即,类似OOP的东西),一些结构在一种结构下比另一种结构更自然地下降.如果我在S3类中包装一个简单的列表以便与重载print方法很好地显示,那么为此目的设置一个完整的引用类将是相当愚蠢的.
| 归档时间: |
|
| 查看次数: |
7080 次 |
| 最近记录: |