3  Creating the package infrastructure

A package starts life as a directory with some files and subdirectories that R expects. There is nothing to stop you building the whole thing from scratch. But it is so much easier to get some help from usethis.

The create_package function takes the path of the project you want to write, creates this directory, add adds some files and subdirectories.

The name of the directory will become the name of the package. Choose carefully as it is easier to get it right now than change it later. There are special rules for naming packages

Try to avoid name clashes with existing packages, especially those on CRAN. The function available::available() can tell you if your name is valid and if it clashes with an existing package.


Once you have chosen your name, you can create the skeleton of your package.

# Choose a path on your computer
# My package will be called DemoPackage
package_path = "/home/gbsrt/Documents/teaching/DemoPackage"
usethis::create_package(path = package_path)

When you run this, it will open a new RStudio session. The files tab should look something like this.

Screenshot of the RStudio files tab showing files generated by usethis::create_package

Figure 3.1: Files generated by usethis::create_package

Almost everything concerned with setting up a package is easier with the usethis package. We are going to be using this package a lot, so you might want to load it now.


The DESCRIPTION file contains the information used by CRAN to make the package page there (see for example devtools).

Start by editing the title, author and description fields of the DESCRIPTION files. The title field must be in title case (they really do check this when you submit to CRAN).

Package: DemoPackage
Title: What the Package Does (One Line, Title Case)
    person(given = "First",
           family = "Last",
           role = c("aut", "cre"),
           email = "first.last@example.com",
           comment = c(ORCID = "YOUR-ORCID-ID"))
Description: What the package does (one paragraph).
License: `use_mit_license()`, `use_gpl3_license()` or friends to pick a
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.1

When you have finished, be sure to save the file otherwise your changes will be over-written.

3.2 Choose a licence

You need to set a licence for your package otherwise, legally, no-one will be allowed to make a copy and use it.

Frequently used open source licences for R packages are

I generally use the MIT licence. Data packages probably should use a CC0 licence.

For more information about licences, see the R package book and Choose a License

3.3 git and GitHub

You don’t have to use git and GitHub when writing a package, but there are many advantages if you are do.

You are probably aware of some of these

  • Version control
  • Collaboration
  • Issue tracking - for bug reports or feature requests
  • Distribution - people can install your package directly from GitHub.

A fourth is that you can use GitHub actions. GitHub actions will perform some action on your repo. For example, with usethis::use_github_action_check_standard() we can check the package works on the latest version of R on linux, macOS and Windows every time we push a commit. This is essential if you want your package to be released on CRAN, but useful anyway, as it can find problems that are not apparent on your own computer.

See the Biostats git and GitHub tutorial for how to make a GitHub repo for your package. To set up GitHub actions, just run the following command, then commit the files it generates and push.