CRAN status R build status Codecov test coverage

{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.

Indeed, this {fusen} package is a real-world example of {fusen} use as it was itself created from the "dev_history.Rmd" templates available in "dev/" folder in its GitHub repository.


You can install the released CRAN version:


You can install the development version of {fusen} from GitHub:

# install.packages("remotes")

You are one Rmd away from building a package!

{fusen} is all about correctly separating and naming chunks.

dev_file <- fusen::add_dev_history(open = TRUE)
fill_description(fields = list(Title = "My Awesome Package"))
usethis::use_mit_license("Sébastien Rochette")
fusen::inflate(rmd = dev_file, name = "my-functionnality", check = TRUE)

That’s it! You built a package!

Let’s test it now:

# Build {pkgdown} to test it
# > See references and articles
# Hide output from package and git

Description of the Rmd template

As I said earlier, this is all about using the correct split and name for your chunks.

Note that the "dev_history.Rmd" template is indeed a working example.

A reproducible example

# Create a new project
tmpdir <- tempdir()
dummypackage <- file.path(tmpdir, "dummypackage")

# {fusen} steps
# Add the template in your package
dev_file <- fusen::add_dev_history(pkg = dummypackage, overwrite = TRUE)
# Description
fusen::fill_description(pkg = dummypackage, fields = list(Title = "Dummy Package"))
# Define License with use_*_license()
usethis::use_mit_license("Sébastien Rochette")
# You may need to execute inflate() in the console directly
fusen::inflate(pkg = dummypackage, rmd = dev_file, name = "exploration")

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

How to maintain a {fusen}? Can I use {fusen} with old-way packages?

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

Who is {fusen} for?

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.

Why is this package named {fusen} ?

A fusen is an origami. It is a 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 one page of Rmd, that you fill in a specific way so that at the end, you can magically inflate() it to let a nice package appear.

Click here to fold your {fusen}…


Code of Conduct

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.