froggeR

R-CMD-check Lifecycle: stable License: MIT CRAN status CRAN downloads

froggeR: Leap into structured Quarto projects

R has strong conventions for packages, but analytical projects have not always had the same structure. My own projects were no exception. Scripts, Quarto documents, stylesheets, and data files piled up in root directories like laundry on a chair. Inspired by the research compendium (Marwick, Boettiger, & Mullen, 2018), {froggeR} gives your Quarto projects a predictable layout: R/ for scripts, analysis/ for Quarto (and .Rmd) documents, data/ for data files, www/ for assets. The same conventions carry over whether you’re writing an analysis, building an R package, or picking up a new language.

install.packages("froggeR")
froggeR::init(path = "my_project")

Why {froggeR}?

{froggeR} gives every project a consistent layout so you spend time analyzing, not organizing:


Installation

install.packages("froggeR")

Project Creation

Initialize a complete project with a single command:

froggeR::init(path = "my_new_project")

This creates:

my_new_project/
├── R/
│   ├── _data_dictionary.R    # Variable labels and metadata
│   ├── _libraries.R          # Centralized package loading
│   └── _load.R               # Sources everything. Your entry point.
├── analysis/ 
│   ├── index.qmd             # Main Quarto document
│   └── references.bib        # Bibliography
├── www/
│   ├── custom.scss           # Custom styling
│   └── tables.js             # Table enhancements
├── logos/                    # Brand logos
├── data/                     # Data files (gitignored)
├── _brand.yml                # Quarto brand configuration
├── _quarto.yml               # Quarto project configuration
├── _variables.yml            # Author metadata
├── .gitignore                # Opinionated git protection
├── .pre-commit-config.yaml   # Pre-commit hook configuration
└── README.md

Configuration & Reusability

{froggeR} stores configuration at two levels: global (system-wide) and project-local. Set it up once, and every future project inherits your settings.

froggeR::write_variables() # Create/edit _variables.yml (author metadata)
froggeR::write_brand()     # Create/edit _brand.yml (colors, logos, typography)

Both functions create the file if it does not exist, or open it for editing if it does. New files start from your global config or the remote template. When you’re happy, persist to global config:

froggeR::save_variables()  # Save project metadata for reuse
froggeR::save_brand()      # Save project branding for reuse

Global settings populate every new project created with init(). Edit the project copy directly when you need something specific.

Templated Quarto Documents

Quickly generate new Quarto documents with pre-formatted headers:

froggeR::write_quarto(filename = "monthly_report")

Your saved metadata automatically populates author information and branding.

Enhanced Git Protection

{froggeR} includes a .gitignore that covers R artifacts, Quarto build files, data files, and common sensitive patterns:

froggeR::write_ignore()

One set of rules. Comprehensive by default. If your project needs additional exclusions, edit .gitignore directly.

Custom Styling Made Easy

Generate a SCSS template for custom document styling:

froggeR::write_scss()
froggeR::write_scss("tables")

Provides a formatted stylesheet with:

Customize your document’s appearance by uncommenting desired styles.


Function Reference

Function Description
init() Initialize a complete project from the latest remote template
write_quarto() Create a Quarto document in analysis/
write_variables() Create a _variables.yml metadata file
write_brand() Create a _brand.yml brand configuration file
save_variables() Save project _variables.yml to global config
save_brand() Save project _brand.yml to global config
write_ignore() Create an opinionated .gitignore
write_scss() Create a custom.scss styling template in www/

Getting Help


Contributing

We welcome contributions and ideas! Here’s how you can help:


License

{froggeR} is licensed under the MIT License. See the LICENSE file for details.


Developed by Kyle Grealis