# Google's R Style Guide R is a high-level programming language used primarily for statistical computing and graphics. The goal of the R Programming Style Guide is to make our R code easier to read, share, and verify. The Google R Style Guide is a fork of the [Tidyverse Style Guide](https://style.tidyverse.org/) by Hadley Wickham [license](https://creativecommons.org/licenses/by-sa/2.0/). Google modifications were developed in collaboration with the internal R user community. The rest of this document explains Google's primary differences with the Tidyverse guide, and why these differences exist. ## Syntax ### Naming conventions Google prefers identifying functions with `BigCamelCase` to clearly distinguish them from other objects. ``` # Good DoNothing <- function() { return(invisible(NULL)) } ``` The names of private functions should begin with a dot. This helps communicate both the origin of the function and its intended use. ``` # Good .DoNothingPrivately <- function() { return(invisible(NULL)) } ``` We previously recommended naming objects with `dot.case`. We're moving away from that, as it creates confusion with S3 methods. ### Don't use attach() The possibilities for creating errors when using `attach()` are numerous. ## Pipes ### Right-hand assignment We do not support using right-hand assignment. ``` # Bad iris %>% dplyr::summarize(max_petal = max(Petal.Width)) -> results ``` This convention differs substantially from practices in other languages and makes it harder to see in code where an object is defined. E.g. searching for `foo <-` is easier than searching for `foo <-` and `-> foo` (possibly split over lines). ### Use explicit returns Do not rely on R's implicit return feature. It is better to be clear about your intent to `return()` an object. ``` # Good AddValues <- function(x, y) { return(x + y) } # Bad AddValues <- function(x, y) { x + y } ``` ### Qualifying namespaces Users should explicitly qualify namespaces for all external functions. ``` # Good purrr::map() ``` We discourage using the `@import` Roxygen tag to bring in all functions into a NAMESPACE. Google has a very big R codebase, and importing all functions creates too much risk for name collisions. While there is a small performance penalty for using `::`, it makes it easier to understand dependencies in your code. There are some exceptions to this rule. * Infix functions (`%name%`) always need to be imported. * Certain `rlang` pronouns, notably `.data`, need to be imported. * Functions from default R packages, including `datasets`, `utils`, `grDevices`, `graphics`, `stats` and `methods`. If needed, you can `@import` the full package. When importing functions, place the `@importFrom` tag in the Roxygen header above the function where the external dependency is used. ## Documentation ### Package-level documentation All packages should have a package documentation file, in a `packagename-package.R` file.