Generate renv lockfile from log file

 library(logrx)
 library(stringr)
 library(dplyr)
 library(tidyr)
 library(renv)

Axecute a script and get the log file.

scriptPath <- tempfile()
 
logDir <- tempdir()
 writeLines(
 c(
 "print('hello logrx')",
 "library(dplyr)",
 "count(iris, Species)"
 ),
 con = scriptPath
)
 
filePath <- file.path(logDir, "log_out_parse")
 
 axecute(scriptPath, log_name = "log_out_parse", log_path = logDir, show_repo_url = TRUE)

Later on read (and parse) previous log file as list of objects.

parsedFile <- read_log_file(filePath)

Create a renv lockfile based on the used packages mentioned in the log file.

pkgs <- parsedFile$`Used Package and Functions` %>%
 transmute(package_name = str_extract(library, "(?<=package\\:).+"))
 
used_pkgs <- parsedFile$`Session Information`$Packages %>%
 filter(package %in% pkgs$package_name)
 
repo_urls <- parsedFile$`Repo URLs`
 
temp_lockfile <- tempfile(fileext = ".lockfile")
 
 # Create lockfile based on used packages
x <- renv::lockfile_create(
 packages = c(
 Package = used_pkgs$package
 )
)
 
 # Update repo URL for lockfile
lockfile_repos <- repo_urls$Name
 names(lockfile_repos) <- repo_urls$URL
x <- renv::lockfile_modify(
 lockfile = x,
 repos = lockfile_repos
)
 
 # Write lockfile
renv::lockfile_write(
 lockfile = x,
 file = temp_lockfile,
 type = "custom",
)
 
 # Update package versions based on session info
renv::record(
 records = list(
 digest = list(
 Package = used_pkgs$package,
 Version = used_pkgs$version,
 Source = "Repository",
 Repository = used_pkgs$source
 )
 ),
 lockfile = temp_lockfile
)
 
 # Open the lockfile you just created to confirm it looks as expected
 # uncomment the lines below to open the lockfile in RStudio
 # if (require("rstudioapi") && rstudioapi::isAvailable()) {
 # rstudioapi::documentOpen(temp_lockfile)
 # }

AltStyle によって変換されたページ (->オリジナル) /