cfbseedR (development version)
-
cfb_simulations()now aborts with a clear error when a team appearing in a game that still has to be simulated is missing fromteams. Previously the missing team produced anNArating,rnorm()returnedNA, and theNApropagated through every remaining week - so the run either returned a season in which no team won a game, or failed much later with an unrelated complaint thatplayoff_seedsexceeded the number of teams. The check is deliberately limited to games awaiting a result: a PLAYED game against an unlisted opponent remains valid, exactly as it is incfb_standings(), because standings only read results while simulation has to generate them. An unplayed game whosehome_teamoraway_teamisNAis rejected the same way and for the same reason -standings_validate_games()checks that those columns exist and rejectsNAresults, but neverNAteam names.
cfbseedR 0.2.0
CRAN release: 2026-09-09
2026-season rules refresh (researched against official conference and CFP sources, 2026-08-26).
-
cfb_playoff_seeds()gains a season-keyedautobidpolicy. The new default"2026"implements the current CFP automatic-qualifier rule: the ACC / Big 12 / Big Ten / SEC champions are in regardless of ranking, the highest-ranked Group-of-6 team is in whether or not it won its conference, and Notre Dame is in when ranked inside the field.autobid = "2025"keeps the 2024-2025 rule (5 highest-ranked champions).cfb_simulations()passes the policy through. - The conference tiebreaker registry is now season-scoped: each conference registers dated epochs, resolved per season (current rules for plain
simids). The ACC’s all-new 2026 policy (head-to-head, then SportSource Team Success Ranking, then a draw, with the alternate-game-count candidate-pool rule and the postseason-eligibility filter) applies from 2026; earlier ACC seasons keep the 2024 cascade. - New official registry entries: American, Conference USA, and Mountain West (head-to-head / CFP-ranked-final-week clause / metric-composite procedures), and the Sun Belt (division format). The MAC entry now matches its published three-step procedure. The re-formed Pac-12 has not published a procedure and stays on the generic fallback.
- New rung primitives:
cfp_ranked_final_week(fed bytiebreaker_data$cfp_rankings; the best-ranked tied team advances only if it won its final conference game) anddiv_pct(win pct vs same-division opponents). -
cfb_simulations()gainstiebreaker_data(external tiebreaker inputs, held static across simulations) so simulated standings use the same official rungs ascfb_standings(). - The CUSA registry gains the policy’s late
aprrung (fed bytiebreaker_data$apr); the CFP auto-bid policy matches both short and full conference spellings (e.g."Southeastern Conference"). - CRAN preparation: every test skips on CRAN, every example is wrapped in
\donttest{}, and the packaging metadata (LICENSE, cph, CITATION,.Rbuildignore,.gitattributes) was reviewed. -
teamsgains two optional columns:conf_division(division-format ranking - the two division champions takeconf_rank1-2, as in the 2026 Sun Belt) andpostseason_eligible(an ineligible team cannot occupy a championship-game berth while its games still count).
nflseedR surface parity
-
Parallel simulation.
cfb_simulations()gainschunks(default 8): simulations are split into contiguous blocks and dispatched withfurrr::future_map(), so setting a parallel plan (future::plan("multisession")) spreads them across cores. Progress is reported throughprogressr. A given seed reproduces exactly for a fixedchunks, and a parallel plan gives bit-identical results to a sequential one – but the RNG stream differs from a single unchunked pass, so output for the same seed changes if you changechunks. -
summary()for simulations.cfbseedR_simulationobjects were classed but had no methods, sosummary()fell back to R’s generic list summary. There is now asummary.cfbseedR_simulation()gt method rendering theoveralltable grouped by conference, the counterpart of nflseedR’ssummary.nflseedR_simulation(). -
fmt_pct_special()formats probabilities the way simulation summaries want them:<1%instead of a flat0%,>99.9%instead of a false100%. Ported from nflseedR. -
Exported example data.
cfb_games_exampleandcfb_teams_examplereplace theread.csv(system.file(...))dance in examples, mirroring nflseedR’ssims_games_example/sims_teams_example. -
verbosityoncfb_simulations(), matchingcfb_standings()andnfl_simulations();"NONE"silences it completely. The simulation’s tiebreak notes are now attached to the returned standings as well – they were previously computed and discarded. -
ranks = "NONE"oncfb_standings()skips the conference-rank cascade entirely when you only need records, after nflseedR’sranksargument. - New Imports: furrr, future, progressr. New Suggests: gt, scales (both only needed for
summary()andfmt_pct_special()).
cfbseedR 0.1.0
Initial release.
-
cfb_standings()computes overall and conference standings with a documented generic tiebreaker cascade (win pct, head-to-head, common opponents, SOV, SOS, point differential, coin flip) gated bytiebreaker_depth. -
cfb_playoff_seeds()implements 12-team College Football Playoff straight seeding (5 highest-ranked conference champions guaranteed). -
cfb_simulations()simulates seasons week by week with a pluggablecompute_resultsfunction and returns a classedcfbseedR_simulationlist with standings, games, and aggregated probabilities. -
cfbseedR_compute_results()is the default ELO-based results generator, a faithful adaptation ofnflseedR_compute_results(). -
cfb_games_from_schedule()mapscfbfastR::load_cfb_schedules()output to the engine games schema. -
simulations_verify_fct()verifies customcompute_resultsfunctions.
Adapted from nflseedR (MIT) by Sebastian Carl and Lee Sharpe.