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

时间:2009-12-22 08:24:11

标签: r coding-style naming-conventions

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

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

1。使用句点分隔符,例如

  stock.prices <- c(12.01, 10.12)
  col.names    <- c('symbol','price')

优点:在R社区中具有历史优先权,在整个R核心中普遍存在,并由Google's R Style Guide推荐。

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

2。使用下划线

  stock_prices <- c(12.01, 10.12)
  col_names    <- c('symbol','price')

优点:许多编程语言中的常见惯例;受Hadley Wickham's Style Guide青睐,并在ggplot2和plyr包中使用。

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

第3。使用混合大写(camelCase)

  stockPrices <- c(12.01, 10.12)
  colNames    <- c('symbol','price')

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

缺点:具有最近的先例,但历史上并未使用(在R基础或其文档中)。

最后,就好像它不够混乱一样,我应该指出,Google样式指南主张变量的点符号,但函数的混合大写。

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

9 个答案:

答案 0 :(得分:78)

以前的答案很好,所以只需添加一点:

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

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

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

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

答案 1 :(得分:69)

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

enter image description here

结果(也许没有惊喜),lowerCamelCase最常用于函数名称和period.separated名称,最常用于参数。要使用UpperCamelCase,Google's R style guide所倡导的是非常罕见的,他们提倡使用该命名约定有点奇怪。

完整的论文在这里:

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

答案 2 :(得分:32)

总是突然出现!与流行的观点相反,基础R中有许多使用下划线的函数。运行grep("^[^\\.]*$", apropos("_"), value = T)查看所有内容。

我使用编码的官方Hadley style;)

答案 3 :(得分:4)

当camel实际提供有意义的东西时,我喜欢camelCase - 就像数据类型一样。

dfProfitLoss,其中df = dataframe

vdfMergedFiles(),其中函数接收向量并吐出数据帧

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

答案 4 :(得分:3)

这归结为个人偏好,但我遵循谷歌风格指南,因为它与核心团队的风格一致。我还没有在基数R的变量中看到下划线。

答案 5 :(得分:3)

我在这里指出:

How does the verbosity of identifiers affect the performance of a programmer?

值得注意的是,如果您的同事/用户是非母语人士,您的变量名称是多么容易理解......

出于这个原因,我会说下划线和句号比大写更好,但正如你所指出的,在你的剧本中,一致性是必不可少的。

答案 6 :(得分:2)

正如其他人所提到的,下划线会让很多人感到困惑。不,它不是禁止的,但它也不是特别常见。

使用点作为分隔符会使用S3类等有点毛茸茸。

根据我的经验,看起来R的很多高密度的混蛋更喜欢使用camelCase,有一些点使用和一些下划线。

答案 7 :(得分:0)

我偏爱mixedCapitals。

但我经常使用句点来表示变量类型是什么:

mixedCapitals.mat是一个矩阵。 mixedCapitals.lm是一个线性模型。 mixedCapitals.lst是一个列表对象。

等等。

答案 8 :(得分:0)

通常我使用下划线和混合大写(camelCase)重命名我的变量。简单变量使用下划线命名,例如:

PSOE_votes - &gt; PSOE(西班牙政治团体)的票数。

PSOE_states - &gt;分类,表示PSOE获胜的州{Aragon,Andalucia,...)

PSOE_political_force - &gt;分类,表示PSOE(第一,第二,第三)的政治团体之间的位置

PSOE_07 - &gt; 2007年PSOE_votes + PSOE_states + PSOE_political_force联盟(h eader - &gt; vote,states,position

如果我的变量是使用混合大写的一个/两个变量I中应用函数的结果。

示例:

positionXstates &lt; - xtabs(~states + position,PSOE_07)