你在使用R编程时采用了哪些最佳实践?

35

编写 R 程序的一些好的实践方法是什么?

由于 R 是一种我不经常使用的特定目的语言,我通常只是匆忙地拼凑一些快速脚本来完成我的需求。

但是,有哪些编写干净高效的 R 代码的技巧呢?


一个相关的感兴趣的问题:https://dev59.com/bHM_5IYBdhLWcg3wn0vT(SO 真的应该更好地找到这些问题,它显示 jQuery 和 Windows 7 的问题为“相关”)。 - Frank
5个回答

22

您已经通过表述您的方法是“快速脚本解决方案”向我们提供了一些提示。如果您想要最佳实践和结构,请简单地按照CRAN的既定最佳实践

  • 创建一个包,这将为您打开运行R CMD check的大门,这非常有用。
  • 正如许多人所说,拥有一个包在代码编写阶段也有所帮助,因为您被迫记录代码;这是一件好事(TM)。
  • 一旦您有了一个包,在文档的\examples{}部分中添加代码,因为这将在R CMD check期间运行,并为回归测试提供了一个简单的入口。
  • 一旦您熟悉了回归测试,请开始使用像RUnit这样的包;那真的是最佳实践。
  • JD指向Google样式指南也是一个好选择。那不是唯一的样式指南,例如Henrik的R编码约定比它早几年;还有 Hadley基于Google样式指南的演绎
  • 否则,老生常谈的“做您的同事和合作者所做的”也适用。

15

我推荐使用Josh Reich的"Load, Clean, Func, Do"工作流程,可以从这个之前的问题中了解更多。

此外,我建议遵循编码指南,比如Google的R风格指南。使用编码风格指南可以使以后阅读代码变得更加容易。


3
我希望那个风格指南不要支持“点”命名法(例如some.variable.name)。虽然它已经有了悠久的历史,并且大多数R代码都是这样编写的,但我并不喜欢它。 - doug
1
我同意Doug的观点。我自己使用驼峰命名法。风格指南和版本控制一样,不是关于你选择哪一个,而是选择一个并使用它。 - JD Long

7

我完全同意现有答案的观点,尤其是在包的使用方面。包需要很高的纪律性、文档和结构化,这些都能帮助强制执行最佳实践(还有 R CMD CHECK)。您还可以使用codetools 包来帮助解决这个问题。使用 roxygen 包进行文档编写。

除此之外,我建议您不仅向量化代码,更要尤其注意向量化您的函数。这意味着您应该能够提供向量参数并获得向量返回(即使从数据库调用等情况中也是如此)。长期来看,这将真正提高您的代码效率和清晰度。

最后,我真的喜欢使用类似 Sweave 的东西,以清晰的可重复研究方式组织我的代码,每当写报告时。同时我也推荐使用 cache 包。


谢谢你的回答,Shane。 你有使用“codetools”包的例子吗? - Tal Galili

3

为了提高效率,应优先使用向量运算而非for循环。


2
一般来说,这是良好的编程实践,但使用诸如SVN之类的版本控制系统来管理您的代码更加可取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接