在R中命名变量的首选样式是什么?

med*_*oll 107 coding-style r naming-conventions

在R代码中,您喜欢命名变量和函数的约定?

据我所知,有几种不同的惯例,所有这些惯例都在喧嚣的和谐中共存:

1.期间分隔符的使用,例如

  stock.prices <- c(12.01, 10.12)
  col.names    <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)

优点: 在R社区中具有历史优先权,在整个R核心中普遍存在,并且由Google的R风格指南推荐.

缺点: 充满了面向对象的内涵,让R新手感到困惑

2.使用下划线

  stock_prices <- c(12.01, 10.12)
  col_names    <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)

优点: 许多编程语言中的常见惯例; 受到Hadley Wickham风格指南的青睐,并在ggplot2和plyr包中使用.

缺点: R程序员历史上没有使用过; 令人烦恼地映射到Emacs-Speaks-Statistics中的'< - '运算符(可以用'ess-toggle-underscore'改编).

3.混合资本化的使用(camelCase)

  stockPrices <- c(12.01, 10.12)
  colNames    <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)

优点:似乎在多个语言社区得到广泛采用.

缺点:有最近的先例,但没有历史使用(在R基础或其文档中).

最后,好像它没有足够的混淆,我应该指出谷歌风格指南争论变量的点符号,但函数的混合大写.

R包中缺乏一致的样式在几个层面上存在问题.从开发人员的角度来看,它使维护和扩展其他代码变得困难(尤其是其风格与您自己的风格不一致).从R用户的角度来看,不一致的语法通过将概念表达的方式相乘来加深R的学习曲线(例如,日期转换函数asDate(),as.date()或as_date()?不,它就是.日期()).

Dir*_*tel 79

以前的答案很好,所以在这里添加一点:

  • 下划线对ESS用户来说真的很烦人; 鉴于ESS被广泛使用,你将不会在ESS用户编写的代码中看到许多下划线(并且该集包括一堆R Core以及CRAN作者,尽管有像Hadley这样的感知);

  • 点也是邪恶的,因为它们可以通过简单的方法调度混淆; 我相信我曾经在R列表中读过这样的评论:点是历史文物,不再鼓励;

  • 所以我们有一个明显的赢家仍然站在最后一轮:camelCase.我也不确定我是否真的同意"在R社区中缺乏先例"这一主张.

是的:实用主义和一致性胜过教条.所以无论是什么作品,并由同事和共同作者使用.毕竟,我们还有白色空间和大括号争论:)

  • +1好吧说![如果只有核心团队会提出明确的风格指南; 我觉得这样可以更加相信他们已经隐含的用法.] (6认同)
  • 谢谢大拇指.至于'规范风格的文件':希望一起不会这样,或者我会骑着粉红色的小马.也许你可以从创作开始,你可以坚持到R Wiki,我们都可以编辑,采用并坚持它.正如他们所说的那样,希望永无止境...... (2认同)

Ras*_*åth 70

我做了一个关于CRAN上实际使用的命名约定的调查,这些命令约定被R Journal接受了:)这是一个总结结果的图表:

在此输入图像描述

事实证明(也许没有惊喜)lowerCamelCase最常用于函数名称和period.separated名称,最常用于参数.要使用UpperCamelCase,谷歌的R风格指南所倡导的却是非常罕见的,他们提倡使用该命名约定有点奇怪.

全文如下:

http://journal.r-project.org/archive/2012-2/RJournal_2012-2_Baaaath.pdf

  • @ e9t因为名称可以匹配许多命名对话.`print`匹配除UpperCamel和.OTHER_style之外的所有约定. (9认同)
  • 为什么百分比不能达到100%呢? (2认同)

had*_*ley 33

一路下来!与流行的观点相反,基础R中有许多使用下划线的函数.跑去grep("^[^\\.]*$", apropos("_"), value = T)看看他们.

我使用Hadley官方编码风格 ;)

  • 哈德利,我的心说支持你的下划线叛乱,但我的头说要尊重社区标准,并对camelCase说"是".:(但也许自我一致性就是最重要的. (6认同)
  • 好吧,它在R 2.10.0中是16,所以每个版本增加60%;)我主要喜欢它们因为它们让我想起Ruby; camelCase让我想起了Java. (3认同)

Rob*_*ert 5

当骆驼实际上提供了一些有意义的东西——比如数据类型时,我喜欢camelCase。

dfProfitLoss,其中 df = 数据帧

或者

vdfMergedFiles(),该函数接受一个向量并吐出一个数据帧

虽然我认为 _ 确实增加了可读性,但在名称中使用 .-_ 或其他字符似乎有太多问题。特别是如果您使用多种语言工作。