Skip to content

Instantly share code, notes, and snippets.

@sinarueeger
Last active August 27, 2022 18:15
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sinarueeger/4516b833f4c588a851b50ebcad6ff1d3 to your computer and use it in GitHub Desktop.
Save sinarueeger/4516b833f4c588a851b50ebcad6ff1d3 to your computer and use it in GitHub Desktop.
Helpers for writing R-packages

Helpers for writing R-packages

Links

Helpful links for developing R packages

Workflow

  1. Cmd + Alt + Shift + R to insert skeleton
  2. Cmd + Shift + L or devtools::load_all(): loads package
  3. Cmd + Shift + D: documents
  4. Cmd + Shift + B: builds
  5. Cmd + Shift + T or devtools::test(): runs tests
  6. devtools::build_vignettes()
  7. Cmd + Shift + E or devtools::check(): Runs R CMD check + some additional stuff
  8. goodpractice::gp()

Workflow

  • inspired by seabbs package.
  • create a file called data-raw/create-package.R:
#install.packages("devtools")
#install.packages("usethis")

usethis::use_description(fields = list(Title = "ggplot2 Extensions for Plotting GWAS Summary Statistics",
                                       `Authors@R` = 'person("Sina", "Rüeger",
                                       email = "sina.rueeger@gmail.com",
                                       role = c("aut", "cre"))',
                                       Description = "Provides Manhattan plot and QQplot as a ggplot2 extension. For high-dimensional GWAS data there is a hex version of the QQplot (which is more of a diagnostics tool)."))

usethis::use_github_links()
usethis::use_version(which = "minor") ## "major", "minor", "patch", "dev"

# initial setup
usethis::use_data_raw()
#usethis::use_cran_badge()
usethis::use_mit_license("Sina Rüeger")
usethis::use_readme_rmd()

## create `testthat` folder
usethis::use_testthat()

## add Roxygen into description file
usethis::use_roxygen_md()

## Suggest & Imports
## adds suggests and imports to DESCRIPTION
usethis::use_package("ggplot2", type = "Import", min_version = "3.1.0" )
usethis::use_package("dplyr", type = "Import", min_version = "0.7.8" )
usethis::use_package("scales", type = "Import", min_version = "1.0.0" )
usethis::use_package("hexbin", type = "Import", min_version = "1.27.2" )

usethis::use_package("ggrastr", type = "Suggests", min_version = "0.1.7" )
usethis::use_package("GWAS.utils", type = "Suggests", min_version = "0.0.0.9000" )
usethis::use_package("skimr", type = "Suggests" )
usethis::use_package("plyr", type = "Suggests", min_version = "1.8.4" )
usethis::use_package("wesanderson", type = "Suggests", min_version = "0.3.6" )
usethis::use_package("vctrs", type = "Suggests", min_version = "0.1.0" )
usethis::use_package("knitr", type = "Suggests", min_version = "0.1.7" )
usethis::use_package("rmarkdown", type = "Suggests")
usethis::use_package("qqman", type = "Suggests")

usethis::use_pipe()

#Vignettes
usethis::use_vignette("gggwas-reasoning", "ggGWAS reasoning" )
usethis::use_vignette("gggwas-internals", "ggGWAS internals")

##Build site, and make pkgdown
devtools::document()
devtools::build_vignettes()
devtools::build()
usethis::use_package_doc()
codemetar::write_codemeta()

## run examples
devtools::run_examples()

Helpers

  1. devtools::use_package(): adds suggests and imports to DESCRIPTION
  2. devtools::use_testthat(): creates testthat folder
  3. usethis::use_test("opensnp"): creates a new test
  4. usethis::use_package_doc(): toplevel package doc
  5. devtools::run_examples(pkg = ".", "stat_gwas_qq.Rd")
  6. usethis::use_data(yourdata): to export data
  7. usethis::use_r(): create new R file
  8. usethis::ui_done("Report saved to {usethis::ui_path(out_path)}")

For vignettes, first run usethis::use_vignette("my-vignette") then devtools::build_vignettes(). Also useful: devtools::install(build_vignettes = TRUE).

Tagging

Version: major.minor.patch.dev, where dev is at least 9000.

  1. $ git tag -a v0.1 -m "<message>"
  2. $ git push origin v0.1

Misc

Occasionally mark all code and run

  • Cmd + I for indenting
  • Cmd + Shift + A for reformatting (spaces etc.)
  • usethis::use_tidy_style() (see styler package)
  • (or run the styler package options in the addins menu, but they will undo some of the stuff from reformatting before)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment