Next update will probably be less function-forward. @drmowinckels.io's #RPackageAdvent2025 thread has got me exited about website and documentation improvements.
Next update will probably be less function-forward. @drmowinckels.io's #RPackageAdvent2025 thread has got me exited about website and documentation improvements.
Link: https://drmo.site/8ny3eU
Link: https://drmo.site/8ny3eU
✨ Apply these tools to your packages
📚 Bookmark for reference
🤝 Share knowledge with community
🚀 Build amazing R packages
Thank you for following #RPackageAdvent2025! Now go make the R ecosystem better! 🎄📦
Keep Learning: r-pkgs.org | usethis.r-lib.org
✨ Apply these tools to your packages
📚 Bookmark for reference
🤝 Share knowledge with community
🚀 Build amazing R packages
Thank you for following #RPackageAdvent2025! Now go make the R ecosystem better! 🎄📦
Keep Learning: r-pkgs.org | usethis.r-lib.org
25 days. Complete modern R package development workflow. From usethis automation to CRAN submission. You have everything you need!
#rstats #CRAN #RPackageAdvent2025 #ThatsAWrap
25 days. Complete modern R package development workflow. From usethis automation to CRAN submission. You have everything you need!
#rstats #CRAN #RPackageAdvent2025 #ThatsAWrap
Final steps for successful CRAN submission.
Pro Tip: Be proactive about communicating any unusual aspects of your package to CRAN reviewers.
#rstats #RPackageAdvent2025
Final steps for successful CRAN submission.
Pro Tip: Be proactive about communicating any unusual aspects of your package to CRAN reviewers.
#rstats #RPackageAdvent2025
Handle user expressions safely in package functions.
Pro Tip: Use {{ }} (embrace) for single arguments, ... for multiple arguments.
Resources: rlang.r-lib.org
#rstats #RPackageAdvent2025
Handle user expressions safely in package functions.
Pro Tip: Use {{ }} (embrace) for single arguments, ... for multiple arguments.
Resources: rlang.r-lib.org
#rstats #RPackageAdvent2025
I think for our next release I'm just going to be working my way through a bunch of the suggestions in your #RPackageAdvent2025 (pkgdown themes!!!), and this one sounds really cool
I think for our next release I'm just going to be working my way through a bunch of the suggestions in your #RPackageAdvent2025 (pkgdown themes!!!), and this one sounds really cool
Create user-friendly messages and progress indicators.
Pro Tip: Use semantic markup like {.fn function_name} and {.val value} for consistent formatting.
Resources: cli.r-lib.org
#RpackageAdvent2025 #rstats
Create user-friendly messages and progress indicators.
Pro Tip: Use semantic markup like {.fn function_name} and {.val value} for consistent formatting.
Resources: cli.r-lib.org
#RpackageAdvent2025 #rstats
Create robust object-oriented interfaces with R's object systems.
Pro Tip: Use S3 for simple classes, S4 for complex validation, S7 for modern OOP.
Resources: rconsortium.github.io/S7
#rstats #RPackageAdvent2025
Create robust object-oriented interfaces with R's object systems.
Pro Tip: Use S3 for simple classes, S4 for complex validation, S7 for modern OOP.
Resources: rconsortium.github.io/S7
#rstats #RPackageAdvent2025
Test your package on multiple platforms before CRAN submission.
Resources: r-hub.github.io/rhub/
#rstats #RPackageAdvent2025
Test your package on multiple platforms before CRAN submission.
Resources: r-hub.github.io/rhub/
#rstats #RPackageAdvent2025
Profile and benchmark your package functions.
Pro Tip: Include benchmarks in your test suite to catch performance regressions.
Resources: bench.r-lib.org
#rstats #RPackageAdvent2025
Profile and benchmark your package functions.
Pro Tip: Include benchmarks in your test suite to catch performance regressions.
Resources: bench.r-lib.org
#rstats #RPackageAdvent2025
Get comprehensive feedback on package quality
goodpractice::gp()
Checks include:
⬩ Function length and complexity
⬩ Namespace usage
⬩ DESCRIPTION completeness
⬩ Code coverage
Resources: github.com/mangothecat/goodpractice
#rstats #RPackageAdvent2025
Get comprehensive feedback on package quality
goodpractice::gp()
Checks include:
⬩ Function length and complexity
⬩ Namespace usage
⬩ DESCRIPTION completeness
⬩ Code coverage
Resources: github.com/mangothecat/goodpractice
#rstats #RPackageAdvent2025
Maintain consistent, readable code style automatically.
Usage:
lintr::lint_package()
styler::style_pkg()
Pro Tip: Add both to pre-commit hooks for automatic code formatting.
Resources: lintr.r-lib.org
#rstats #RPackageAdvent2025
Maintain consistent, readable code style automatically.
Usage:
lintr::lint_package()
styler::style_pkg()
Pro Tip: Add both to pre-commit hooks for automatic code formatting.
Resources: lintr.r-lib.org
#rstats #RPackageAdvent2025
Record real API responses for reliable, fast tests without hitting live APIs.
Pro Tip: Commit cassette files to git for reproducible tests across environments.
Resources: docs.ropensci.org/vcr
#rstats #RPackageAdvent2025
Record real API responses for reliable, fast tests without hitting live APIs.
Pro Tip: Commit cassette files to git for reproducible tests across environments.
Resources: docs.ropensci.org/vcr
#rstats #RPackageAdvent2025
Test functions that depend on external resources using testthat's built-in mocking.
Pro Tip: Use local_mocked_bindings() to mock functions within the test scope only.
Resources: testthat.r-lib.org
#rstats #RPackageAdvent2025
Test functions that depend on external resources using testthat's built-in mocking.
Pro Tip: Use local_mocked_bindings() to mock functions within the test scope only.
Resources: testthat.r-lib.org
#rstats #RPackageAdvent2025
Test complex outputs that are hard to specify exactly.
Pro Tip: Review snapshot changes carefully - they capture everything, including whitespace and formatting.
#rstats #RPackageAdvent2025
Test complex outputs that are hard to specify exactly.
Pro Tip: Review snapshot changes carefully - they capture everything, including whitespace and formatting.
#rstats #RPackageAdvent2025
Modern testing with the latest testthat features.
Setup:
usethis::use_testthat(3)
Pro Tip: Use test_that() with descriptive names that explain what should happen.
Resources: testthat.r-lib.org
#rstats #RPackageAdvent2025
Modern testing with the latest testthat features.
Setup:
usethis::use_testthat(3)
Pro Tip: Use test_that() with descriptive names that explain what should happen.
Resources: testthat.r-lib.org
#rstats #RPackageAdvent2025
Track how much of your code is tested.
use #nocov for code you don't want to cover (like basic R functions etc)
Pro Tip: Focus on testing critical functions thoroughly rather than chasing 100%.
Resources: covr.r-lib.org
#rstats #RPackageAdvent2025
Track how much of your code is tested.
use #nocov for code you don't want to cover (like basic R functions etc)
Pro Tip: Focus on testing critical functions thoroughly rather than chasing 100%.
Resources: covr.r-lib.org
#rstats #RPackageAdvent2025
Create dynamic READMEs that stay up-to-date with your code.
Setup:
usethis::use_readme_rmd()
Include these sections:
• Installation instructions
• Basic usage example
• Lifecycle badges
• Build status badges
#rstats #RPackageAdvent2025
Create dynamic READMEs that stay up-to-date with your code.
Setup:
usethis::use_readme_rmd()
Include these sections:
• Installation instructions
• Basic usage example
• Lifecycle badges
• Build status badges
#rstats #RPackageAdvent2025
Keep users informed about package changes.
Create NEWS.md:
usethis::use_news_md()
Pro Tip: Follow semantic versioning: MAJOR.MINOR.PATCH for breaking.feature.bugfix changes.
#rstats #RPackageAdvent2025
Keep users informed about package changes.
Create NEWS.md:
usethis::use_news_md()
Pro Tip: Follow semantic versioning: MAJOR.MINOR.PATCH for breaking.feature.bugfix changes.
#rstats #RPackageAdvent2025
Communicate changes to users gracefully with lifecycle badges.
Setup:
usethis::use_lifecycle()
Pro Tip: Use lifecycle stages: experimental → stable → superseded → deprecated.
Resources: lifecycle.r-lib.org
#rstats #RPackageAdvent2025
Communicate changes to users gracefully with lifecycle badges.
Setup:
usethis::use_lifecycle()
Pro Tip: Use lifecycle stages: experimental → stable → superseded → deprecated.
Resources: lifecycle.r-lib.org
#rstats #RPackageAdvent2025
Create comprehensive tutorials and examples for your package.
usethis::use_vignette("getting-started")
● Start with a clear problem statement
● Show realistic examples
● Keep computational time under 5 minutes
#rstats #RPackageAdvent2025
Create comprehensive tutorials and examples for your package.
usethis::use_vignette("getting-started")
● Start with a clear problem statement
● Show realistic examples
● Keep computational time under 5 minutes
#rstats #RPackageAdvent2025
@drmowinckels.io is currently posting an amazing series on this: check out #RPackageAdvent2025
@drmowinckels.io is currently posting an amazing series on this: check out #RPackageAdvent2025
Transform your package documentation into a polished website.
Advanced customization:
Auto-deployment:
usethis::use_github_action("pkgdown")
Pro Tip: Group functions logically in the reference section for better navigation.
#rstats #RPackageAdvent2025
Transform your package documentation into a polished website.
Advanced customization:
Auto-deployment:
usethis::use_github_action("pkgdown")
Pro Tip: Group functions logically in the reference section for better navigation.
#rstats #RPackageAdvent2025