【问题标题】:R code examples/best practicesR 代码示例/最佳实践
【发布时间】:2010-12-26 16:33:44
【问题描述】:

我是 R 新手,很难将来自各种在线资源的信息拼凑在一起,这些信息与编写 R 代码的“良好”实践有关。我已阅读基本指南,但一直很难找到绝对最新的信息。

  1. 有哪些编写/记录良好的 S3 类示例?
  2. 对应的 S4 类怎么样?
  3. 在评论 .R 类/函数时使用哪些约定?您是否将所有 cmets 都放在 .Rd 文件和 .R 文件中?这些文件的同步是否令人厌烦?

【问题讨论】:

    标签: r coding-style comments s4


    【解决方案1】:

    是否使用 S3、S4 或包主要是样式问题(正如 Dirk 所说),但如果您想要一个结构良好的对象(就像您在任何 OOP 语言)。例如,所有时间序列类都有时间序列对象(我相信它们都是 S3,除了 its),因为它允许它们围绕这些对象的构造和使用强制执行某些行为.与创建包的问题类似:如果您将经常重复使用您的代码或者该代码对其他人有用,那么这样做是一个好主意。这需要更多的努力,但增加的组织结构可以轻松弥补成本。

    关于 S3 与 S4(在 R-Help herehere 上讨论),基本准则是 S3 类更“又快又脏”,而 S4 类放置更多 对对象和类型的严格控制。如果您正在研究 Bioconductor,您通常会使用 S4(例如,请参阅 "S4 classes and methods")。

    我建议阅读以下内容:

    1. "A (Not So) Short Introduction to S4" by Christophe Genolini
    2. "Programmers' niche: A simple class, in S3 and S4" by Thomas Lumley
    3. "Brobdingnag: a ''hello world'' package using S4 methods" by Robin K. S. Hankin
    4. "Converting packages to S4" by Douglas Bates
    5. "How S4 Methods Work" by John Chambers

    对于文档,Hadley 的建议是正确的:Roxygen 将使生活更轻松,并将文档放在代码旁边。除此之外,您可能仍希望在代码中提供其他 cmets超出 Roxygen 或 man 文件所需的内容,在这种情况下,为其他开发人员注释您的代码是一个好习惯。这些 cmets 不会出现在您的包裹中;它们只会在源代码中可见。

    【讨论】:

    • 非常感谢,Shane。其中很多都证实了我一直在阅读的内容,并且一个地方的链接非常有帮助。
    【解决方案2】:

    对于 3. 使用 roxygen - 它的工作方式与 javadoc 类似,可以在源文件中获取 cmets 并构建 Rd 文件。

    【讨论】:

    • 感谢 Hadley,这正是我想要的。
    【解决方案3】:

    这是六个或更多问题捆绑在一起,很难回答。

    所以让我们从内到外尝试:首先尝试解决您的 RODBC 包装器问题。代码表示会自行提示。我会从简单的函数开始,然后可能围绕它构建一个包。这已经为您提供了一些封装。

    其余大部分都是风格。一些著名的 R 代码对 S4 发誓,而其他人则对此发誓。您始终可以阅读其他人的软件包以及 R 本身的代码。而且您始终可以以不同的方式重新实现您的 RODBC 包装器并比较您自己的方法。

    编辑: 反映您更新和缩短的问题:从 CRAN 中挑选一些包,特别是在您使用的包中。我想你会很快根据自己的风格找到一些或多或少有趣的东西。

    【讨论】:

    • 你说的很对。我已经删除了问题的后半部分。很抱歉,谢谢。
    • 我会主张改变问题本身以使其更加集中:而不是“R 代码示例/最佳实践”,而是像“R:何时使用 S3 或 S4 类?”;这将更易于管理。
    【解决方案4】:

    风格多于内容,但Google R style guide 值得一读:

    【讨论】:

    • 确实如此。现在好像是here
    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 2017-03-05
    • 2018-05-17
    • 2014-05-15
    • 1970-01-01
    • 2018-11-28
    • 2012-07-28
    • 2018-08-05
    相关资源
    最近更新 更多