knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(fusen)
Use the Addin "Add {fusen} chunks"
To add a new family of functions, create a new flat Rmd template
add_flat_template(template = "add")
After you inflate()
the "flat_template.Rmd", your code appears twice in the package. In the "flat_template.Rmd" itself and in the correct place for it to be a package.
Take it as a documentation for the other developers.
Maintaining such a package requires a choice:
Your first inflate()
may not directly work as expected as with any R code that you write. In this case, you can continue to implement your functionality using Option 1.
Advice 1 : Use Option 1 until you find it too complicated to be used ! I assure you, you will find the moment when you say : ok this is not possible anymore...
Advice 2 : Use git as soon as possible, this will avoid losing your work if you made some modifications in the wrong place
=> {fusen} itself is built as is. Each modification is added to the dedicated dev_history file and then inflated
<!-- Do not edit by hand-->
is the minimum. Then you can add <!-- File used to start new functionalities, do not use anymore, go directly to appropriate files in the package -->
, and you can rename the old template with "old-flat_template.Rmd" for instance.=> This is the way I add new functionalities in packages that started in the old way, and in specific cases where inflating is now too complicated, like for function inflate()
and all its unit tests in this very {fusen} package.
The "flat_template.Rmd" template only modifies files related to functions presented inside the template. This does not remove or modify previous functions, tests or vignettes, provided that names are different.
install.packages("fusen")
fusen::add_flat_template("add")
function
chunk. For instance: #' My median #' #' @param x Vector of Numeric values #' @inheritParams stats::median #' #' @return #' Median of vector x #' @export #' #' @examples my_median <- function(x, na.rm = TRUE) { if (!is.numeric(x)) {stop("x should be numeric")} stats::median(x, na.rm = na.rm) }
example
chunk. For instance: my_median(1:12)
test
chunk. For instance:test_that("my_median works properly and show error if needed", { expect_true(my_median(1:12) == 6.5) expect_error(my_median("text")) })
fusen::inflate(flat_file = "dev/flat_additional.Rmd")
fusen::inflate(flat_file = "dev/flat_additional.Rmd", document = FALSE)
to avoid that.devtools::check()
. Use fusen::inflate(flat_file = "dev/flat_additional.Rmd", check = FALSE)
to avoid that.That's it!
You added a new function in your package, along with example, test and a new vignette:
comp.table <- tibble::tibble( `Classical with {devtools}` = c( ' - File > New Project > New directory > Package with devtools + Or `devtools::create()`', ' - Open "DESCRIPTION" file - Write your information - Run function for the desired license in the console + `usethis::use_*_license()`', ' - Create and open a file for your functions in "R/" + `usethis::use_r("my_fonction")` - Write the code of your function - Write a reproducible example for your function - Open DESCRIPTION file and fill the list of dependencies required - Create and open a new file for your tests in "tests/testthat/" + `usethis::use_testthat()` + `usethis::use_test("my_fonction")` - Write some unit tests for your function - Create and open a new file for a vignette in "vignettes/" + `usethis::use_vignette("Vignette title")` - Open DESCRIPTION file and fill the list of "Suggests" dependencies required', ' - Generate documentation + Either `attachment::att_amend_desc()` + Or `roxygen2::roxygenise()` - Check the package + `devtools::check()` => `0 errors, 0 warnings, 0 notes`', '=> For one function, you need to switch regularly between 4 files' ), `With {fusen}` = c( ' - File > New Project > New directory > Package with {fusen} + Or `fusen::create_fusen()`', ' - Fill your information in the opened flat file - Execute the chunk `description`', ' - Write code, examples and test in the unique opened flat file', ' - Inflate your flat file + Execute `fusen::inflate()` in the last "development" chunk', '=> For one function, you need only one file' ) ) if (knitr::is_html_output()) { comp.table <- tibble::as_tibble( lapply(comp.table, function(x) gsub(" ", " ", gsub("\n", "<br/>", x)))) knitr::kable(comp.table, format = "html", escape = FALSE) } else if (knitr::is_latex_output()) { knitr::kable(comp.table, format = "latex", escape = FALSE) } else { knitr::kable(comp.table, format = "markdown", escape = FALSE) }
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.