BenjaminAuder
BenjaminAuder

Reputation: 71

R package: use a custom file/directories structure in pkg/R and pkg/src folders

I'm writing a R package which begins to grow in size, and so would really appreciate to use a custom structure in folders pkg/R/ and (especially) in pkg/src/.

For example, let's say I have two families of algorithms of some type A, and some functions of type B, and a main entry point. Ideally R/ or src/ folders would be organized as follow:

with "ext" in {R,cpp,c,f,...}, and potentially two files having the same name.

Is it possible ? If yes, how can I do that ?

Thanks in advance !


[2012-12-31] EDIT: an idea would be to write a few scripts - maybe inside another R package - to (un)flatten a structured package for tests or diffusion. But there is probably a better solution, so I will wait a bit.

Upvotes: 6

Views: 1423

Answers (2)

JonnyRobbie
JonnyRobbie

Reputation: 614

The official package documentation https://cran.r-project.org/doc/manuals/r-devel/R-exts.html, section 1.1.5 contains this quote:

The R and man subdirectories may contain OS-specific subdirectories named unix or windows.

I've tried creating a simple test package with subdirectories in R-3.5.1 and it did not work properly.

Nor devtools::load_all() nor R CMD build successfully exported code from subdirectories in R.

Upvotes: 0

BenjaminAuder
BenjaminAuder

Reputation: 71

As the 'Writing R extensions' manual indicates here, a Makevars file under pkg/src allows to have nested subfolders for C/C++/Fortran code. (See e.g. RSiena package).

However, I didn't find anything concerning a custom structure in pkg/R. So I wrote a little package (usable, although needing improvements) which accomplish the following tasks:

  • Load/Unload a package having (potentially) nested folders under pkg/R
  • Launch R and/or C unit tests on it [basic framework, to be replaced (e.g. RUnit and check)]
  • Export the package to be CRAN-compatible (flatten R code, generate Makevars file)

I will link it here if it reaches a publishable state. (For the moment I could send it by email).

Upvotes: 1

Related Questions