An introductory video can be found here
The goal of the rfold
package is to allow R
developers to work with
many R
directories within an R
package. A considerable limitation
regarding R
packages development, is that one cannot create other
directories/sub directories (other than the R
directory) and bind them
to the package ecosystem.
Using rfold
, you can create as many directories/sub directories
(outside of your R
directory).
The rfold()
function will list all the .R
scripts available outside
of the R
folder, assign their names to .Rbuildignore
file and
transfer them within the main R
directory, giving you all the
flexibility you need to organize your package into many
directories/sub-directories.
Using rfold
, you can arrange your test file the way you want, you can
for example put your test and R scripts in one folder. To do so, you
need to append the test-
word to the name of your test files. For
example, test-myapi.R
. This way rfold
will recognize it as a test
file and move it within the correct folder.
At the moment, rfold
works only with the testthat
framework, feel
free to open an issue if other test framework should be supported
You can install the development version of rfold
with:
install.packages("rfold")
Just use rfold::rfold()
before building or documenting your package
and you’re all set. If you’re tired of running rfold::rfold()
, then
devtools::load_all()
each time, you can create a function that does
both, for example:
rfold_load_all <- function() {
rfold::rfold()
devtools::load_all()
}
This way, you’ll be sure to work with the last state of your package.
Suppose that within this package, I would decide to have the following structure:
fs::dir_tree()
## .
## +-- api
## | +-- api_call.R
## | \-- test-api_call.R
## +-- DESCRIPTION
## +-- main
## | +-- main1.R
## | +-- main2.R
## | \-- test-main
## | +-- test-file1.R
## | \-- test-file2.R
## +-- man
## +-- NAMESPACE
## +-- R
## +-- README.md
## +-- README.Rmd
## +-- rfoldtester.Rproj
## +-- tests
## | +-- testthat
## | \-- testthat.R
## \-- utilities
## +-- test-utils1.R
## +-- test-utils2.R
## +-- utils1.R
## \-- utils2.R
Running rfold::rfold()
, all the external (external to the R
folder)
.R
scripts will be moved within the R
or tests
folder, depending
on the type of file (note that if the tests
folder is not available,
rfold
will create it for you):
rfold::rfold()
## v Setting active project to 'C:/Users/Administrateur/Desktop/rfoldtester'i Copying the following R files with prefix 'DO_NOT_EDIT_' into the R folder: api/api_call.R, main/main1.R, main/main2.R, utilities/utils1.R, utilities/utils2.R
## i Copying the following tests files with prefix 'DO_NOT_EDIT_' into the tests/testthat folder: api/test-api_call.R, main/test-main/test-file1.R, main/test-main/test-file2.R, utilities/test-utils1.R, utilities/test-utils2.R
As such, we will get now the following structure:
fs::dir_tree()
## .
## +-- api
## | +-- api_call.R
## | \-- test-api_call.R
## +-- DESCRIPTION
## +-- main
## | +-- main1.R
## | +-- main2.R
## | \-- test-main
## | +-- test-file1.R
## | \-- test-file2.R
## +-- man
## +-- NAMESPACE
## +-- R
## | +-- DO_NOT_EDIT_api_call.R
## | +-- DO_NOT_EDIT_main1.R
## | +-- DO_NOT_EDIT_main2.R
## | +-- DO_NOT_EDIT_utils1.R
## | \-- DO_NOT_EDIT_utils2.R
## +-- README.md
## +-- README.Rmd
## +-- rfoldtester.Rproj
## +-- tests
## | +-- testthat
## | | +-- test-DO_NOT_EDIT_api_call.R
## | | +-- test-DO_NOT_EDIT_file1.R
## | | +-- test-DO_NOT_EDIT_file2.R
## | | +-- test-DO_NOT_EDIT_utils1.R
## | | \-- test-DO_NOT_EDIT_utils2.R
## | \-- testthat.R
## \-- utilities
## +-- test-utils1.R
## +-- test-utils2.R
## +-- utils1.R
## \-- utils2.R
Notice, that script names that will be transferred to the R
folder
have their name prefixed with the character DO_NOT_EDIT
. You can tweak
this feature or deactivate it using the script_name_prefix
parameter
of the rfold()
function. Concerning the test
file, they have to
start with test-
word in order to be tested, as such, the
script_name_prefix
will be appended after the test-
part.
The following comment will also be inserted at the top of each script
that will be moved with rfold
: # GENERATED BY FOLD: DO NOT EDIT BY
HAND ####
There’s another parameter available, called folders_to_ignore
which
allows you to ignore certain directories (for example dev
directory)
when running the rfold
function.
Note also that devtools::build()
and devtools::document()
will only
consider the scripts available within your R
folder.
Please note that the rfold project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.