{fusen} inflates a Rmarkdown file to magically create a package.
If you know how to create a Rmarkdown file, then you know how to build a package.
Fill the flat Rmd template with everything in one place and {fusen} will inflate the identified parts in the correct package files and directories.
This {fusen} package is a real-world example of {fusen} use as it was itself created from the “dev_history” flat templates available in "dev/"
folder in its GitHub repository.
You can install the released CRAN version:
Full documentation for the CRAN version is here: https://thinkr-open.github.io/fusen/
You can install the development version of {fusen} from GitHub:
# From r-universe.dev (No need for GITHUB_PAT)
install.packages("fusen",
repos = c("thinkropen" = "https://thinkr-open.r-universe.dev"))
# With {remotes} using GitHub API
# install.packages("remotes")
remotes::install_github("ThinkR-open/fusen")
Full documentation for the development version is here: https://thinkr-open.github.io/fusen/dev/
{fusen} is all about correctly separating and naming chunks.
teaching
the first time to see how {fusen} works,full
the second time to answer most of your questionscreate_fusen("path/to/new/project", template = "teaching")
description
asking to describe your package and license it
fill_description(fields = list(Title = "My Awesome Package"))
usethis::use_mit_license("Sébastien Rochette")
That’s it! You built a package! A documented and tested package!
Let’s test it now:
# Build {pkgdown} to test it
usethis::use_pkgdown()
pkgdown::build_site()
# > See references and articles
As I said earlier, this is all about using the correct split and name for your chunks.
"dev/flat_template.Rmd"
template to write your documentation and build your functions and test your examples.
function
gets the code of a functionexample
gets the code for examples of using the function. This will be used for function @examples
and will be kept for the vignette.
example-myfunction
, example-myotherfunction
, …tests
gets the code for unit testingdevelopment
gets the code for development purposes, usually only used once like {usethis} functionsNote that the "flat*.Rmd"
files created with templates full
and teaching
are indeed working examples that can directly be inflated.
You can also have a look at {squirrels.fusen} that has been built to present the method. Follow the commits: https://github.com/statnmap/squirrels.fusen/commits/main
There is a dedicated vignette to answer this: https://thinkr-open.github.io/fusen/articles/Maintain-packages-with-fusen.html
Advice : Use git as soon as possible, this will avoid losing your work if you made some modifications in the wrong place
When you write a Rmarkdown file (or a vignette), you create a documentation for your analysis (or package). Inside, you write some functions, you test your functions with examples and you maybe write some unit tests to verify the outputs. This is even more true if you follow this guide : ‘Rmd first’: When development starts with documentation After that, you need to move your functions and scripts in the correct place. Let {fusen} do that for you!
{fusen} is first addressed to people who never wrote a package before but know how to write a Rmarkdown file. Understanding package infrastructure and correctly settling it can be frightening. This package may help them do the first step!
{fusen} is also addressed to more advanced developers who are fed up with switching between R files, tests files, vignettes. In particular, when changing arguments of a function, we need to change examples, unit tests in multiple places. Here, you can do it in one place. No risk to forget one. Think also about code review: everything related to one function is at the same place.
=> See vignette Tips and Tricks: https://thinkr-open.github.io/fusen/articles/tips-and-tricks.html
A fusen is an origami. It is a flat piece of paper that you fold in a specific way so that at the end, you can magically inflate it to let a nice box appear.
Similarly, the {fusen} package uses a flat Rmd template, that you fill in a specific way so that at the end, you can magically inflate()
it to let a nice package appear.
Please note that the {fusen} project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.