Skip to content

Commit cee8f1a

Browse files
Replace external R style guide
Internally, we've moved to the Tidyverse Style Guide: style.tidyverse.org The new file for Rguide.md reflects this fact and notes where we differ.
1 parent 9c6b371 commit cee8f1a

File tree

3 files changed

+110
-448
lines changed

3 files changed

+110
-448
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ The following Google style guides live outside of this project:
3939
[objc]: objcguide.md
4040
[java]: https://google.github.io/styleguide/javaguide.html
4141
[py]: https://google.github.io/styleguide/pyguide.html
42-
[r]: https://google.github.io/styleguide/Rguide.xml
42+
[r]: https://google.github.io/styleguide/Rguide.md
4343
[sh]: https://google.github.io/styleguide/shell.xml
4444
[htmlcss]: https://google.github.io/styleguide/htmlcssguide.html
4545
[js]: https://google.github.io/styleguide/jsguide.html

Rguide.md

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# Google's R Style Guide
2+
3+
R is a high-level programming language used primarily for statistical computing
4+
and graphics. The goal of the R Programming Style Guide is to make our R code
5+
easier to read, share, and verify.
6+
7+
The Google R Style Guide is a fork of the
8+
[Tidyverse Style Guide](https://style.tidyverse.org/) by Hadley Wickham
9+
[license](https://creativecommons.org/licenses/by-sa/2.0/). Google modifications
10+
were developed in collaboration with the internal R user community. The rest of
11+
this document explains Google's primary differences with the Tidyverse guide,
12+
and why these differences exist.
13+
14+
## Syntax
15+
16+
### Naming conventions
17+
18+
Google prefers identifying functions with `BigCamelCase` to clearly distinguish
19+
them from other objects.
20+
21+
```
22+
# Good
23+
DoNothing <- function() {
24+
return(invisible(NULL))
25+
}
26+
```
27+
28+
The names of private functions should begin with a dot. This helps communicate
29+
both the origin of the function and its intended use.
30+
31+
```
32+
# Good
33+
.DoNothingPrivately <- function() {
34+
return(invisible(NULL))
35+
}
36+
```
37+
38+
We previously recommended naming objects with `dot.case`. We're moving away from
39+
that, as it creates confusion with S3 methods.
40+
41+
### Don't use attach()
42+
43+
The possibilities for creating errors when using `attach()` are numerous.
44+
45+
## Pipes
46+
47+
### Right-hand assignment
48+
49+
We do not support using right-hand assignment.
50+
51+
```
52+
# Bad
53+
iris %>%
54+
dplyr::summarize(max_petal = max(Petal.Width)) -> results
55+
```
56+
57+
This convention differs substantially from practices in other languages and
58+
makes it harder to see in code where an object is defined. E.g. searching for
59+
`foo <-` is easier than searching for `foo <-` and `-> foo` (possibly split over
60+
lines).
61+
62+
### Use explicit returns
63+
64+
Do not rely on R's implicit return feature. It is better to be clear about your
65+
intent to `return()` an object.
66+
67+
```
68+
# Good
69+
AddValues <- function(x, y) {
70+
return(x + y)
71+
}
72+
73+
# Bad
74+
AddValues <- function(x, y) {
75+
x + y
76+
}
77+
```
78+
79+
### Qualifying namespaces
80+
81+
Users should explicitly qualify namespaces for all external functions.
82+
83+
```
84+
# Good
85+
purrr::map()
86+
```
87+
88+
We discourage using the `@import` Roxygen tag to bring in all functions into a
89+
NAMESPACE. Google has a very big R codebase, and importing all functions creates
90+
too much risk for name collisions.
91+
92+
While there is a small performance penalty for using `::`, it makes it easier to
93+
understand dependencies in your code. There are some exceptions to this rule.
94+
95+
* Infix functions (`%name%`) always need to be imported.
96+
* Certain `rlang` pronouns, notably `.data`, need to be imported.
97+
* Functions from default R packages, including `datasets`, `utils`,
98+
`grDevices`, `graphics`, `stats` and `methods`. If needed, you can `@import`
99+
the full package.
100+
101+
When importing functions, place the `@importFrom` tag in the Roxygen header
102+
above the function where the external dependency is used.
103+
104+
## Documentation
105+
106+
### Package-level documentation
107+
108+
All packages should have a package documentation file, in a
109+
`packagename-package.R` file.

0 commit comments

Comments
 (0)