Helper code for creating library.
Erik.Leppo@tetratech.com 2017-09-26
Copied from ContDataQC so some parts are not needed. 2017-12-04.
Package related code.
# 1. change wd to vignettes setwd(file.path("C:","Users","Erik.Leppo","OneDrive - Tetra Tech, Inc" ,"MyDocs_OneDrive","GitHub","ContDataQC","vignettes")) # # 2. Add data for vignette examples # Parameters Selection.Operation <- c("GetGageData","QCRaw", "Aggregate", "SummaryStats") Selection.Type <- c("Air","Water","AW","Gage","AWG","AG","WG") Selection.SUB <- c("Data1_RAW","Data2_QC","Data3_Aggregated","Data4_Stats") myDir.BASE <- getwd() # # Create data directories myDir.create <- paste0("./",Selection.SUB[1]) ifelse(dir.exists(myDir.create)==FALSE,dir.create(myDir.create),"Directory already exists") myDir.create <- paste0("./",Selection.SUB[2]) ifelse(dir.exists(myDir.create)==FALSE,dir.create(myDir.create),"Directory already exists") myDir.create <- paste0("./",Selection.SUB[3]) ifelse(dir.exists(myDir.create)==FALSE,dir.create(myDir.create),"Directory already exists") myDir.create <- paste0("./",Selection.SUB[4]) ifelse(dir.exists(myDir.create)==FALSE,dir.create(myDir.create),"Directory already exists") # # Save example data (assumes directory ./Data1_RAW/ exists) myData <- data_raw_test2_AW_20130426_20130725 write.csv(myData,paste0("./",Selection.SUB[1],"/test2_AW_20130426_20130725.csv")) myData <- data_raw_test2_AW_20130725_20131015 write.csv(myData,paste0("./",Selection.SUB[1],"/test2_AW_20130725_20131015.csv")) myData <- data_raw_test2_AW_20140901_20140930 write.csv(myData,paste0("./",Selection.SUB[1],"/test2_AW_20140901_20140930.csv")) myData <- data_raw_test4_AW_20160418_20160726 write.csv(myData,paste0("./",Selection.SUB[1],"/test4_AW_20160418_20160726.csv")) myFile <- "config.TZ.Central.R" file.copy(file.path(path.package("ContDataQC"),"extdata",myFile) ,file.path(getwd(),Selection.SUB[1],myFile))
Knit the vignette in the vignette folder to ensure all of the code works and is properly displayed. This can take 2 to 5 min.
Use the code below to "build" the vignette and then use it in the pkg.
# generate Vignette library(baytrends) library(devtools) devtools::build_vignettes() # create vignette folder and default file #devtools::use_vignette("ContDataQC_Vignette")
devtools::build() more useful and build_vignettes()
http://www.dominikschauer.com/how-to-create-an-r-package-including-documentation-vignettes-and-a-manual/
myLibrary <- "baytrends" setwd(paste0("./", myLibrary)) system("R CMD Rd2pdf . --title=Package baytrends --output=./manual.pdf --force --no-clean --internals")
Use the code below to create the package. Assumes you are in the development package directory
Delete Namespace, Collate section of DESCRIPTION, and \man\*
Need to remove end of line after Collate. Need first entry on the same line as "Collate:".
# Library Name myLibrary <- "baytrends" # Load Library #library(devtools) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # NEWS #setwd(file.path(".", myLibrary)) # Render then Copy NEWS so picked up in help rmarkdown::render("NEWS.rmd", "all") file.copy("NEWS.md", "NEWS", overwrite = TRUE) file.remove("NEWS.html") #file.remove("NEWS.md") #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # Library Name # myLibrary <- "baytrends" # # Load Library # library(devtools) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Create Package # create(myLibrary) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Document, Install, and Reload Library ## Generate Documentation #setwd(paste0("./", myLibrary)) devtools::document() ## Install New Package (locally) setwd("..") # return to root directory first devtools::install(myLibrary, quick=FALSE, reload=TRUE, build_vignettes = TRUE) # blank line above ensures no "updates" to packages. # ## Reload library # library(myLibrary, character.only = TRUE) # change wd back to package setwd(file.path(".", myLibrary)) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After creating the package reload it after restarting R within RStudio (Ctrl + Shift + F10).
# Restart R within RStudio: Ctrl + Shift + F10 library("baytrends") help(package="baytrends")
Use pkgdown
to build website. Will need to rebuild the package to include the new material.
Can use GitHub Actions to build instead of doing manually.
library(pkgdown) pkgdown::build_site()
Downstream dependancies
# Downstream dependencies devtools::revdep("baytrends")
# Check for errors (or press Cmd + Shift + E in RStudio) #http://r-pkgs.had.co.nz/check.html devtools::check()
If use RStudio, Build - Check Package, the output is easier to read.
Check failures (single vector so not very useful) but puts it all in one place. Have to run after using Check.
library(devtools) dir.check <- "C:\\Users\\Erik.Leppo\\OneDrive - Tetra Tech, Inc\\MyDocs_OneDrive\\GitHub\\baytrends.Rcheck" # check_failures(dir.check)
check on Linux
https://r-hub.github.io/rhub/index.html https://r-hub.github.io/rhub/articles/rhub.html
library(rhub) # validate email validate_email() # run check (interactive for platform) check() # recommended prior to CRAN submission check_for_cran() # win and linux check_on_linux()
Run all Examples.
# point to directory devtools::run_examples(pkg = ".")
Alternate is testthat::test_examples() but is redundant with R CMD check.
code coverage
#library(covr) covr::report()
Go straight to index.
help(package="baytrends")
browseVignettes("baytrends")
Then click on "HTML" to open.
example(analysisOrganizeData)
Run all tests.
devtools::test()
All data should have already been created.
https://testthat.r-lib.org/
https://r-pkgs.org/tests.html
Set up folders with devtools::test()
. This is also the command to run tests.
Create test file usethis::use_test("name")
badger package creates the text for pkg readme file.
Also
https://shields.io/
https://github.com/badges/shields
Can make some badges dynamic, static ones below
pkg_GH <- "tetratech/baytrends" pkg_lic <- "GPL-3" # GitHub Action, CI usethis::use_github_actions() usethis::use_github_actions_badge() # badger::badge_github_actions(pkg_GH) # Code coverage usethis::use_github_action("test-coverage") # GitHub Action, pkgdown usethis::use_github_action("pkgdown") # Badges # lifecycle badger::badge_lifecycle("stable", "green") # stable/green, maturing/dormant/blue # maintained # license badger::badge_license(pkg_lic) # code quality badger::badge_codefactor(pkg_GH) # code testing coverage badger::badge_codecov(pkg_GH) # cmd check badger::badge_github_actions(pkg_GH)
Need to use testthat but not to that stage yet.
RStudio, Build - Test Package.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Upload to Github via GitHub Desktop utility # 0. download from web via "clone or download" via "Open in Desktop" (GitHub Desktop) if not already in GitHub Desktop # 1. Make changes in download/clone folder. (done above) # 3. Open GH Desktop commit changes then sync. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # install from GitHub (via devtools) devtools::install_github(paste0("leppott/",myLibrary)) # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # remove installed packages (if needed for troubleshooting) search() # find #detach(3) # remove by number #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # to build package #https://thepoliticalmethodologist.com/2014/08/14/building-and-maintaining-r-packages-with-devtools-and-roxygen2/ # To build the package as a compressed file in your working directory, run build(current.code, path=getwd()). # to save internal data for examples # example #http://r-pkgs.had.co.nz/data.html#data-sysdata # have to be at root directory (above package) #devtools::use_data(NV.predictors,NV.bugs,pkg="MMIcalcNV",internal=TRUE,overwrite=TRUE) ## verify with data() # To save RMD files # http://stackoverflow.com/questions/30377213/how-to-include-rmarkdown-file-in-r-package # /pkg/inst/rmd/ # system.file("rmd/file.Rmd", package="packagename") # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #https://hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch/ # Create Package # create(myLibrary)
# Parameters Selection.Operation <- c("GetGageData","QCRaw", "Aggregate", "SummaryStats") Selection.Type <- c("Air","Water","AW","Gage","AWG","AG","WG") Selection.SUB <- c("Data1_RAW","Data2_QC","Data3_Aggregated","Data4_Stats") myDir.BASE <- getwd() # # Summary Stats, File ## Have to use "file" version. ## Base version builds file name and expects "DATA" prefix # Gage File + Other File myData.Operation <- "SummaryStats" #Selection.Operation[4] myFile <- c("Data4Stats_01187300_Gage_20130101_20141231.csv" ,"Data4Stats_test2_Aw_20130101_20141231.csv") myDir.import <- file.path(".","data-raw") myDir.export <- file.path(".","Data4_Stats") #Leave off myReport.format and get default (docx). ContDataQC(myData.Operation , fun.myDir.import=myDir.import , fun.myDir.export=myDir.export , fun.myFile=myFile)
SiteID, Date, Time, Date.Time, Parameters, Flag.Parameters
Only one flag per parameter. Do not need individual test flags.
"F" (fail) flags are changed to NA so they are dropped from the statistics that calculated.
Mocked up 2 files.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.