[R] Best Practices for submitting packages to CRAN

Spencer Graves spencer.graves at structuremonitoring.com
Sat Apr 30 05:41:32 CEST 2011

Two additions to Michael Friendly's comments:

       1.  Have you considered putting your package on R-Forge 
(r-forge.r-project.org)?  They have a facility (which has been broken 
for several months now but will likely be fixed again at some time in 
the future) to test your package more or less daily on 7 different 
combinations of operating system and versions of R.  This has 
occasionally found errors that I could not replicate -- but could 
nevertheless fix!  It also makes it easy for you to have people test a 
new version before you want to release it, e.g., via 
install.packages("fda", repos="http://R-Forge.R-project.org")' for the 
"fda" package.

       2.  In addition to "\dontrun", you can also put tests you DO want 
to perform but don't want to show the user in "\dontshow".  I use this 
latter routinely to do unit tests.  There is an RUnit package, which I 
probably should learn to use but haven't, and there are other unit 
testing facilities with R that others can discuss that can help you 
produce "trustworthy software" (John Chambers 2008 Software for Data 
Analysis, Springer).  Rather than learn these other facilities, I 
routinely program unit tests in the examples section of my help files, 
often using a construct like the following:

myAnswer <- myFun()

correctAnswer <- list(whatever)

all.equal(myAnswer, correctAnswer)

       The code won't pass "R CMD check" until "myAnswer" and 
"correctAnswer" are essentially equal.

       When I find or someone reports a bug, I first program another 
check like this into the help file.  Then I fix the bug.  After that, I 
have confidence that if something other change introduces a problem like 
that, I'll know it before it reaches users other than me.


On 4/29/2011 8:12 PM, Michael Friendly wrote:
> On 4/28/2011 8:43 AM, Singmann wrote:
>> Dear all,
>> I (and a colleague) have been working on our first package (for
>> fitting a
>> certain type of cognitive models:
>> http://www.psychologie.uni-freiburg.de/Members/singmann/R/mptinr) for
>> quite
>> a while now and have the feeling, that it is "good to go". That is,
>> we want
>> to submit it to CRAN. However, I still have two questions before
>> doing so
>> and would appreciate any comments.
>> 1. How often is it appropriate to submit updated versions of your
>> package?
>> Background for this question: Although we think we have tested the
>> package
>> thoroughly, there are some errors that only pop up in daily use. That
>> is, it
>> could happen that, especially shortly after the release, fixes need
>> to be
>> released rather frequently (say, every 2 weeks). On the other hand, I
>> know
>> that humans have to operate CRAN and their time is limited.
>> Therefore, any
>> update will consume their time.
> You'll have to work out your own workflow for this, but a general
> practice might be to release a new version (with an incremented
> version number)  whenever you feel there are significant changes,
> particularly those that are user-visible or change usage.
> This assumes that your package passes R CMD check and R CMD build
> without errors or warnings, with the current version of R.
> If so, most of what happens on CRAN is automatic.  Otherwise
> you may provoke one of the trolls under the CRAN bridge or even
> a human.
> You might find it easier to register the project on R-Forge and
> do updates from there/
>> 2. Is it necessary to put examples that take a considerable amount of
>> time
>> to run (>  1 hour) into a \dontrun block? Background: We have a
>> really slow
>> MCMC function. Some of the examples take ~1 hour to finish. If these
>> examples are run each time the package is checked, it will significantly
>> prolong the checking time. On the other hand, this check will ensure
>> that
>> all changes to the function do not corrupt it.
> Yes, do use \dontrun{ ... } for stuff in examples that is inconvenient
> or difficult to actually run each time during checking.  Sometimes
> people include the output from such dontrun examples as comments
> inside the example as in
> \dontrun{
> 1+1
> ## 2
> }
> But then the responsibility is yours to make sure that the examples
> still work after updates.
>> --
>> View this message in context:
>> http://r.789695.n4.nabble.com/Best-Practices-for-submitting-packages-to-CRAN-tp3480870p3480870.html
>> Sent from the R help mailing list archive at Nabble.com.
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

Spencer Graves, PE, PhD
President and Chief Operating Officer
Structure Inspection and Monitoring, Inc.
751 Emerson Ct.
San José, CA 95126
ph:  408-655-4567

More information about the R-help mailing list