计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
manage-renv-dependencies【效率与协作】Manage R pkg deps via renv → reproducible envs. Init, snapshot/restore workflow, troubleshoot common issues, CI/CD integration. Use init dep mgmt for new R project, add/update pkgs, restore env on new machine, troubleshoot restore fails, or integrate renv w/ CI/CD.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Setup + maintain reproducible R pkg envs via renv.
renv.lock (for restore)renv::init()
Creates:
renv/ dir (library, settings, activation script)renv.lock (dep snapshot).Rprofile → activate renv on load→ Project-local lib created. renv/ dir + renv.lock present. .Rprofile updated w/ activation.
If err: Hangs → check network. Fails on specific pkg → install manually first w/ install.packages() + rerun renv::init().
Install pkgs as usual:
install.packages("dplyr")
renv::install("github-user/private-pkg")
Snapshot to record state:
renv::snapshot()
→ renv.lock updated w/ new pkgs + vers. renv::status() shows no out-of-sync.
If err: Snapshot reports validation errs → renv::dependencies() to check which pkgs actually used → renv::snapshot(force = TRUE) to bypass validation.
renv::restore()
→ All pkgs installed at exact vers in renv.lock.
If err: Common issues: GitHub pkgs fail (set GITHUB_PAT in .Renviron), sys deps missing (install w/ apt-get on Linux), timeouts on large pkgs (options(timeout = 600) before restore), or binaries not avail (renv compiles from source → ensure build tools installed).
# Update a specific package
renv::update("dplyr")
# Update all packages
renv::update()
# Snapshot after updates
renv::snapshot()
→ Target pkgs updated to latest compatible vers. renv.lock reflects new vers after snapshot.
If err: Update fails for specific pkg → install directly w/ renv::install("package@version") + snapshot.
renv::status()
→ "No issues found" or clear list of out-of-sync pkgs w/ actionable guidance.
If err: Status reports pkgs used but not recorded → renv::snapshot(). Recorded but not installed → renv::restore().
.Rprofile for Conditional Activationif (file.exists("renv/activate.R")) {
source("renv/activate.R")
}
Ensures project works even if renv not installed (CI envs, collaborators).
→ R sessions activate renv auto when starting in project dir. Sessions w/o renv still start w/o errs.
If err: .Rprofile causes errs → ensure file.exists() guard present. Never call source("renv/activate.R") unconditionally.
Track:
renv.lock # Always commit
renv/activate.R # Always commit
renv/settings.json # Always commit
.Rprofile # Commit (contains renv activation)
Ignore (already in renv's .gitignore):
renv/library/ # Machine-specific
renv/staging/ # Temporary
renv/cache/ # Machine-specific cache
→ renv.lock, renv/activate.R, renv/settings.json tracked by Git. Machine-specific dirs (renv/library/, renv/cache/) ignored.
If err: renv/library/ accidentally committed → remove w/ git rm -r --cached renv/library/ + add to .gitignore.
GitHub Actions → renv cache action:
- uses: r-lib/actions/setup-renv@v2
Automatically restores from renv.lock w/ caching.
→ CI pipeline restores pkgs from renv.lock w/ caching. Subsequent runs faster due to cached pkgs.
If err: CI restore fails → check renv.lock committed + up to date. Private GitHub pkgs → ensure GITHUB_PAT set as repo secret.
renv::status() reports no issuesrenv.lock committed to VCrenv::restore() works on clean checkout.Rprofile conditionally activates renvrenv.lock for dep resolutionrenv::init() in wrong dir: Always verify getwd() firstrenv::snapshot()--vanilla flag: Rscript --vanilla skips .Rprofile → renv won't activaterenv.lock designed to be diffable JSONrenv::install("bioc::PackageName") + ensure BiocManager configuredcreate-r-package — includes renv initsetup-github-actions-ci — CI integration w/ renvsubmit-to-cran — dep mgmt for CRAN pkgs