diff --git a/.github/workflows/Test_module.yaml b/.github/workflows/Test_module.yaml index 69df176..9e8174c 100644 --- a/.github/workflows/Test_module.yaml +++ b/.github/workflows/Test_module.yaml @@ -18,9 +18,12 @@ jobs: fail-fast: false matrix: config: - - {os: windows-latest, r: 'release', rspm: "https://cloud.r-project.org"} - - {os: macOS-latest, r: 'release', rspm: "https://cloud.r-project.org"} - #- {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} + - {os: windows-latest, r: '4.2.3', rtools: '42', rspm: "https://cloud.r-project.org"} + - {os: macOS-latest, r: '4.2.3', rtools: '42', rspm: "https://cloud.r-project.org"} + - {os: ubuntu-20.04, r: '4.2.3', rtools: '42', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} + - {os: windows-latest, r: 'release', rtools: '', rspm: "https://cloud.r-project.org"} + - {os: macOS-latest, r: 'release', rtools: '', rspm: "https://cloud.r-project.org"} + - {os: ubuntu-20.04, r: 'release', rtools: '', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} env: GITHUB_PAT: ${{ secrets.GH_TOKEN }} @@ -43,12 +46,13 @@ jobs: CDM5_SQL_SERVER_USER: ${{ secrets.CDM5_SQL_SERVER_USER }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: r-lib/actions/setup-r@v2 with: r-version: ${{ matrix.config.r }} - + rtools-version: ${{ matrix.config.rtools }} + - name: Install system requirements if: runner.os == 'Linux' run: | @@ -56,7 +60,8 @@ jobs: sudo apt-get install -y default-jdk sudo apt-get install -y libcurl4-openssl-dev sudo apt-get install -y libssl-dev - + sudo apt-get install -y libglpk-dev + - uses: r-lib/actions/setup-renv@v2 with: cache-version: 4 diff --git a/Main.R b/Main.R index 64ac9ff..435d4ca 100644 --- a/Main.R +++ b/Main.R @@ -169,3 +169,47 @@ execute <- function(jobContext) { } + + +uploadResultsCallback <- function(jobContext) { + connectionDetails <- jobContext$moduleExecutionSettings$resultsConnectionDetails + moduleInfo <- ParallelLogger::loadSettingsFromJson("MetaData.json") + tablePrefix <- moduleInfo$TablePrefix + schema <- jobContext$moduleExecutionSettings$resultsDatabaseSchema + + resultsFolder <- jobContext$moduleExecutionSettings$resultsSubFolder + + conn <- DatabaseConnector::connect(connectionDetails) + on.exit(DatabaseConnector::disconnect(conn)) + + databaseSchemaSettings <- PatientLevelPrediction::createDatabaseSchemaSettings( + resultSchema = schema, + tablePrefix = tablePrefix, + targetDialect = connectionDetails$dbms + ) + + PatientLevelPrediction::insertCsvToDatabase( + csvFolder = resultsFolder, + conn = conn, + databaseSchemaSettings = databaseSchemaSettings, + modelSaveLocation = file.path(resultsFolder, 'dbmodels'), + csvTableAppend = '' + ) + +} + +createDataModelSchema <- function(jobContext) { + connectionDetails <- jobContext$moduleExecutionSettings$resultsConnectionDetails + moduleInfo <- ParallelLogger::loadSettingsFromJson("MetaData.json") + tablePrefix <- moduleInfo$TablePrefix + schema <- jobContext$moduleExecutionSettings$resultsDatabaseSchema + + PatientLevelPrediction::createPlpResultTables( + connectionDetails = connectionDetails, + targetDialect = connectionDetails$dbms, + resultSchema = schema, + deleteTables = F, + createTables = T, + tablePrefix = tablePrefix + ) +} diff --git a/MetaData.json b/MetaData.json index f1759c9..c03651d 100644 --- a/MetaData.json +++ b/MetaData.json @@ -1,6 +1,6 @@ { "Name": "PatientLevelPredictionModule", - "Version": "0.1.0", + "Version": "0.2.0", "Dependencies": ["CohortGeneratorModule"], "TablePrefix": "plp_" } diff --git a/NEWS.md b/NEWS.md index 491c663..2802f7c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +PatientLevelPredictionModule 0.2.0 +======================= + +- Updated module to use HADES wide lock file and updated to use renv v1.0.2 +- Added functions and tests for creating the results data model for use by Strategus upload functionality +- Added additional GitHub Action tests to unit test the module functionality on HADES supported R version (v4.2.3) and the latest release of R + PatientLevelPredictionModule 0.1.0 ======================= diff --git a/SettingsFunctions.R b/SettingsFunctions.R index c82aa34..f61859f 100644 --- a/SettingsFunctions.R +++ b/SettingsFunctions.R @@ -18,7 +18,7 @@ createPatientLevelPredictionModuleSpecifications <- function(modelDesignList) { specifications <- list( module = "PatientLevelPredictionModule", - version = "0.1.0", + version = "0.2.0", remoteRepo = "github.com", remoteUsername = "ohdsi", settings = modelDesignList diff --git a/renv.lock b/renv.lock index 01a68ad..fd7ee4b 100644 --- a/renv.lock +++ b/renv.lock @@ -1,124 +1,187 @@ { "R": { - "Version": "4.2.2", + "Version": "4.2.3", "Repositories": [ { "Name": "CRAN", - "URL": "https://cran.rstudio.com" + "URL": "https://packagemanager.posit.co/cran/latest" } ] }, "Packages": { "Andromeda": { "Package": "Andromeda", - "Version": "0.6.1", + "Version": "0.6.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "RSQLite", - "cli", - "dbplyr", - "dplyr", - "hms", - "methods", - "pillar", - "rlang", - "tidyselect", - "zip" - ], - "Hash": "ae741b16de25b2ab0a87b9f38e159282" + "Repository": "CRAN" }, "BH": { "Package": "BH", "Version": "1.81.0-1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "68122010f01c4dcfbe58ce7112f2433d" + "Repository": "CRAN" + }, + "BeastJar": { + "Package": "BeastJar", + "Version": "1.10.6", + "Source": "Repository", + "Repository": "CRAN" + }, + "BigKnn": { + "Package": "BigKnn", + "Version": "1.0.2", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "BigKnn", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.0.2" + }, + "Capr": { + "Package": "Capr", + "Version": "2.0.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "Capr", + "RemoteUsername": "ohdsi", + "RemoteRef": "v2.0.0" + }, + "Characterization": { + "Package": "Characterization", + "Version": "0.1.1", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "Characterization", + "RemoteUsername": "ohdsi", + "RemoteRef": "v0.1.1" + }, + "CirceR": { + "Package": "CirceR", + "Version": "1.3.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "CirceR", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.3.0" + }, + "CohortDiagnostics": { + "Package": "CohortDiagnostics", + "Version": "3.2.3", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "CohortDiagnostics", + "RemoteUsername": "ohdsi", + "RemoteRef": "v3.2.3" + }, + "CohortExplorer": { + "Package": "CohortExplorer", + "Version": "0.0.11", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "CohortExplorer", + "RemoteUsername": "ohdsi", + "RemoteRef": "v0.0.11" }, "CohortGenerator": { "Package": "CohortGenerator", "Version": "0.8.0", "Source": "GitHub", - "Remotes": "ohdsi/CirceR, ohdsi/Eunomia, ohdsi/ROhdsiWebApi", "RemoteType": "github", "RemoteHost": "api.github.com", "RemoteRepo": "CohortGenerator", - "RemoteUsername": "OHDSI", - "RemoteRef": "HEAD", - "RemoteSha": "30fe75d61cc8414f6021786502410fe7f66a3ac2", - "Requirements": [ - "DatabaseConnector", - "ParallelLogger", - "R", - "R6", - "RJSONIO", - "SqlRender", - "bit64", - "checkmate", - "digest", - "dplyr", - "jsonlite", - "lubridate", - "readr", - "rlang", - "stringi" - ], - "Hash": "77386c387906530c81c16ffd2ddd1845" + "RemoteUsername": "ohdsi", + "RemoteRef": "v0.8.0" + }, + "CohortIncidence": { + "Package": "CohortIncidence", + "Version": "3.1.5", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "CohortIncidence", + "RemoteUsername": "ohdsi", + "RemoteRef": "v3.1.5" + }, + "CohortMethod": { + "Package": "CohortMethod", + "Version": "5.1.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "CohortMethod", + "RemoteUsername": "ohdsi", + "RemoteRef": "v5.1.0" + }, + "CompQuadForm": { + "Package": "CompQuadForm", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "CRAN" }, "Cyclops": { "Package": "Cyclops", "Version": "3.2.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Andromeda", - "BH", - "Matrix", - "R", - "Rcpp", - "RcppEigen", - "bit64", - "dplyr", - "methods", - "rlang", - "survival" - ], - "Hash": "319ed4c34c5b150ebba5e0faadc53847" + "Repository": "CRAN" }, "DBI": { "Package": "DBI", "Version": "1.1.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "b2866e62bab9378c3cc9476a1954226b" + "Repository": "CRAN" + }, + "DT": { + "Package": "DT", + "Version": "0.27", + "Source": "Repository", + "Repository": "CRAN" + }, + "DataQualityDashboard": { + "Package": "DataQualityDashboard", + "Version": "2.1.2", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "DataQualityDashboard", + "RemoteUsername": "ohdsi", + "RemoteRef": "v2.1.2" }, "DatabaseConnector": { "Package": "DatabaseConnector", - "Version": "6.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "SqlRender", - "bit64", - "checkmate", - "dbplyr", - "digest", - "methods", - "rJava", - "readr", - "rlang", - "stringr", - "urltools", - "utils" - ], - "Hash": "6510b8da97ce041473c0d356fd28d859" + "Version": "6.2.3", + "Source": "Repository", + "Repository": "CRAN" + }, + "DeepPatientLevelPrediction": { + "Package": "DeepPatientLevelPrediction", + "Version": "1.1.2", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "DeepPatientLevelPrediction", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.1.2" + }, + "EmpiricalCalibration": { + "Package": "EmpiricalCalibration", + "Version": "3.1.1", + "Source": "Repository", + "Repository": "CRAN" + }, + "EnsemblePatientLevelPrediction": { + "Package": "EnsemblePatientLevelPrediction", + "Version": "1.0.2", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "EnsemblePatientLevelPrediction", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.0.2" }, "Eunomia": { "Package": "Eunomia", @@ -127,2060 +190,1293 @@ "RemoteType": "github", "RemoteHost": "api.github.com", "RemoteRepo": "Eunomia", - "RemoteUsername": "OHDSI", - "RemoteRef": "HEAD", - "RemoteSha": "1220fdbe550762ff131f66f05f74f2610a4e85ca", - "Requirements": [ - "DatabaseConnector", - "RSQLite", - "SqlRender", - "readr" - ], - "Hash": "ce80ed391a97e9eb5d34cac0f503c288" + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.0.2" + }, + "EvidenceSynthesis": { + "Package": "EvidenceSynthesis", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "CRAN" }, "FeatureExtraction": { "Package": "FeatureExtraction", - "Version": "3.2.0", + "Version": "3.3.0", "Source": "GitHub", - "Remotes": "ohdsi/Eunomia", "RemoteType": "github", "RemoteHost": "api.github.com", "RemoteRepo": "FeatureExtraction", "RemoteUsername": "ohdsi", - "RemoteRef": "HEAD", - "RemoteSha": "5363f5f4cdaf8b31ce9f193861169047b11ea41c", - "Requirements": [ - "Andromeda", - "DBI", - "DatabaseConnector", - "ParallelLogger", - "R", - "RSQLite", - "SqlRender", - "cli", - "dplyr", - "jsonlite", - "methods", - "pillar", - "rJava", - "readr", - "rlang" - ], - "Hash": "2e6f81230989e15003feaf3dad0628ee" + "RemoteRef": "v3.3.0" }, - "IterativeHardThresholding": { - "Package": "IterativeHardThresholding", - "Version": "1.0.2", + "HDInterval": { + "Package": "HDInterval", + "Version": "0.2.4", + "Source": "Repository", + "Repository": "CRAN" + }, + "Hades": { + "Package": "Hades", + "Version": "1.11.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "Hades", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.11.0" + }, + "Hydra": { + "Package": "Hydra", + "Version": "0.4.0", "Source": "GitHub", "RemoteType": "github", "RemoteHost": "api.github.com", - "RemoteRepo": "IterativeHardThresholding", - "RemoteUsername": "OHDSI", - "RemoteRef": "HEAD", - "RemoteSha": "88534248e04851212ca7412aef40a8763f1bfd03", - "Requirements": [ - "Cyclops", - "ParallelLogger", - "R" - ], - "Hash": "62cb95edfe27ca41e7191deff4256770" + "RemoteRepo": "Hydra", + "RemoteUsername": "ohdsi", + "RemoteRef": "v0.4.0" + }, + "IterativeHardThresholding": { + "Package": "IterativeHardThresholding", + "Version": "1.0.2", + "Source": "Repository", + "Repository": "CRAN" }, "KMsurv": { "Package": "KMsurv", "Version": "0.1-5", "Source": "Repository", - "Repository": "CRAN", - "Hash": "aee647d15e5541ad44d157f7b78fda01" + "Repository": "CRAN" }, "MASS": { "Package": "MASS", - "Version": "7.3-58.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "methods", - "stats", - "utils" - ], - "Hash": "762e1804143a332333c054759f89a706" + "Version": "7.3-58.2", + "Source": "Repository", + "Repository": "CRAN" }, "Matrix": { "Package": "Matrix", - "Version": "1.5-1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "grid", - "lattice", - "methods", - "stats", - "utils" - ], - "Hash": "539dc0c0c05636812f1080f473d2c177" + "Version": "1.5-3", + "Source": "Repository", + "Repository": "CRAN" }, "MatrixModels": { "Package": "MatrixModels", "Version": "0.5-1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "methods", - "stats" - ], - "Hash": "963ab8fbaf980a5b081ed40419081439" + "Repository": "CRAN" + }, + "MethodEvaluation": { + "Package": "MethodEvaluation", + "Version": "2.2.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "MethodEvaluation", + "RemoteUsername": "ohdsi", + "RemoteRef": "v2.2.0" + }, + "OhdsiSharing": { + "Package": "OhdsiSharing", + "Version": "0.2.2", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "OhdsiSharing", + "RemoteUsername": "ohdsi", + "RemoteRef": "v0.2.2" + }, + "OhdsiShinyModules": { + "Package": "OhdsiShinyModules", + "Version": "1.1.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "OhdsiShinyModules", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.1.0" }, "PRROC": { "Package": "PRROC", "Version": "1.3.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "5506f0a5a0661ac39bfcfca702f1f282" + "Repository": "CRAN" }, "ParallelLogger": { "Package": "ParallelLogger", "Version": "3.1.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "jsonlite", - "methods", - "snow", - "utils", - "xml2" - ], - "Hash": "8d893bed8c8bfe21217464dd3f9ec3e9" + "Repository": "CRAN" }, "PatientLevelPrediction": { "Package": "PatientLevelPrediction", - "Version": "6.3.1", + "Version": "6.3.4", "Source": "GitHub", - "Remotes": "ohdsi/BigKnn, ohdsi/Eunomia, ohdsi/FeatureExtraction,\n ohdsi/IterativeHardThresholding, ohdsi/ShinyAppBuilder,\n ohdsi/ResultModelManager", "RemoteType": "github", "RemoteHost": "api.github.com", "RemoteRepo": "PatientLevelPrediction", - "RemoteUsername": "OHDSI", - "RemoteRef": "HEAD", - "RemoteSha": "66d3cf12602ee7d381f7c66c56457a7b9bf9b878", - "Requirements": [ - "Andromeda", - "Cyclops", - "DatabaseConnector", - "FeatureExtraction", - "Matrix", - "PRROC", - "ParallelLogger", - "R", - "SqlRender", - "dplyr", - "ggplot2", - "gridExtra", - "memuse", - "mgcv", - "pROC", - "polspline", - "reticulate", - "rlang", - "survival", - "tibble", - "tidyr", - "utils" - ], - "Hash": "8cf5a4a146a1a0956f25e1c90e63f008" + "RemoteUsername": "ohdsi", + "RemoteRef": "v6.3.4" + }, + "PheValuator": { + "Package": "PheValuator", + "Version": "2.2.2", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "PheValuator", + "RemoteUsername": "ohdsi", + "RemoteRef": "v2.2.2" + }, + "PhenotypeLibrary": { + "Package": "PhenotypeLibrary", + "Version": "3.12.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "PhenotypeLibrary", + "RemoteUsername": "ohdsi", + "RemoteRef": "v3.12.0" }, "R6": { "Package": "R6", "Version": "2.5.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" + "Repository": "CRAN" }, "RColorBrewer": { "Package": "RColorBrewer", "Version": "1.1-3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "45f0398006e83a5b10b72a90663d8d8c" + "Repository": "CRAN" }, "RJSONIO": { "Package": "RJSONIO", "Version": "1.3-1.8", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods" - ], - "Hash": "cd79d1874fb20217463451f8c310c526" + "Repository": "CRAN" + }, + "ROhdsiWebApi": { + "Package": "ROhdsiWebApi", + "Version": "1.3.3", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "ROhdsiWebApi", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.3.3" }, "RSQLite": { "Package": "RSQLite", "Version": "2.3.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "bit64", - "blob", - "cpp11", - "memoise", - "methods", - "pkgconfig", - "plogr" - ], - "Hash": "264c1861d7ac1dc71ecb5ac5c4c1318a" + "Repository": "CRAN" }, "Rcpp": { "Package": "Rcpp", "Version": "1.0.10", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods", - "utils" - ], - "Hash": "e749cae40fa9ef469b6050959517453c" + "Repository": "CRAN" }, "RcppEigen": { "Package": "RcppEigen", "Version": "0.3.3.9.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "Rcpp", - "stats", - "utils" - ], - "Hash": "1e035db628cefb315c571202d70202fe" + "Repository": "CRAN" }, "RcppTOML": { "Package": "RcppTOML", "Version": "0.2.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp" - ], - "Hash": "c232938949fcd8126034419cc529333a" + "Repository": "CRAN" }, "ResultModelManager": { "Package": "ResultModelManager", - "Version": "0.3.0", + "Version": "0.4.0", "Source": "GitHub", "RemoteType": "github", "RemoteHost": "api.github.com", "RemoteRepo": "ResultModelManager", - "RemoteUsername": "OHDSI", - "RemoteRef": "HEAD", - "RemoteSha": "cb066fcd44393b4608a3cfa6a8f46d14b20a9daa", - "Requirements": [ - "DBI", - "DatabaseConnector", - "ParallelLogger", - "R", - "R6", - "SqlRender", - "checkmate", - "dplyr", - "lubridate", - "pool", - "readr", - "rlang", - "zip" - ], - "Hash": "668c6c12be5114e94bd733d3a421d94a" + "RemoteUsername": "ohdsi", + "RemoteRef": "v0.4.0" + }, + "SelfControlledCaseSeries": { + "Package": "SelfControlledCaseSeries", + "Version": "4.2.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "SelfControlledCaseSeries", + "RemoteUsername": "ohdsi", + "RemoteRef": "v4.2.0" + }, + "SelfControlledCohort": { + "Package": "SelfControlledCohort", + "Version": "1.6.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "SelfControlledCohort", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.6.0" + }, + "ShinyAppBuilder": { + "Package": "ShinyAppBuilder", + "Version": "1.1.1", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "ShinyAppBuilder", + "RemoteUsername": "ohdsi", + "RemoteRef": "v1.1.1" }, "SparseM": { "Package": "SparseM", "Version": "1.81", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "methods", - "stats", - "utils" - ], - "Hash": "2042cd9759cc89a453c4aefef0ce9aae" + "Repository": "CRAN" }, "SqlRender": { "Package": "SqlRender", - "Version": "1.13.0", + "Version": "1.15.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "checkmate", - "rJava", - "rlang" - ], - "Hash": "e021c3d72ef96ad8f0f3a9a926fc5487" + "Repository": "CRAN" }, "abind": { "Package": "abind", "Version": "1.4-5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods", - "utils" - ], - "Hash": "4f57884290cc75ab22f4af9e9d4ca862" + "Repository": "CRAN" + }, + "anytime": { + "Package": "anytime", + "Version": "0.3.9", + "Source": "Repository", + "Repository": "CRAN" + }, + "askpass": { + "Package": "askpass", + "Version": "1.1", + "Source": "Repository", + "Repository": "CRAN" + }, + "assertthat": { + "Package": "assertthat", + "Version": "0.2.1", + "Source": "Repository", + "Repository": "CRAN" }, "backports": { "Package": "backports", "Version": "1.4.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c39fbec8a30d23e721980b8afb31984c" + "Repository": "CRAN" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-3", + "Source": "Repository", + "Repository": "CRAN" }, "bit": { "Package": "bit", "Version": "4.0.5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "d242abec29412ce988848d0294b208fd" + "Repository": "CRAN" }, "bit64": { "Package": "bit64", "Version": "4.0.5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit", - "methods", - "stats", - "utils" - ], - "Hash": "9fe98599ca456d6552421db0d6772d8f" + "Repository": "CRAN" }, "blob": { "Package": "blob", - "Version": "1.2.3", + "Version": "1.2.4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods", - "rlang", - "vctrs" - ], - "Hash": "10d231579bc9c06ab1c320618808d4ff" + "Repository": "CRAN" }, "boot": { "Package": "boot", "Version": "1.3-28.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "stats" - ], - "Hash": "9a052fbcbe97a98ceb18dbfd30ebd96e" + "Repository": "CRAN" }, "brio": { "Package": "brio", "Version": "1.1.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "976cf154dfb043c012d87cddd8bca363" + "Repository": "CRAN" }, "broom": { "Package": "broom", "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "backports", - "dplyr", - "ellipsis", - "generics", - "glue", - "lifecycle", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyr" - ], - "Hash": "f62b2504021369a2449c54bbda362d30" + "Repository": "CRAN" + }, + "bslib": { + "Package": "bslib", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "CRAN" }, "cachem": { "Package": "cachem", "Version": "1.0.7", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "cda74447c42f529de601fe4d4050daef" + "Repository": "CRAN" }, "callr": { "Package": "callr", "Version": "3.7.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "9b2191ede20fa29828139b9900922e51" + "Repository": "CRAN" }, "car": { "Package": "car", - "Version": "3.1-1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "R", - "abind", - "carData", - "grDevices", - "graphics", - "lme4", - "mgcv", - "nlme", - "nnet", - "pbkrtest", - "quantreg", - "scales", - "stats", - "utils" - ], - "Hash": "0bd175a135f51af0545d4ed4f5632026" + "Version": "3.1-2", + "Source": "Repository", + "Repository": "CRAN" }, "carData": { "Package": "carData", "Version": "3.0-5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "ac6cdb8552c61bd36b0e54d07cf2aab7" + "Repository": "CRAN" }, "checkmate": { "Package": "checkmate", "Version": "2.1.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "backports", - "utils" - ], - "Hash": "147e4db6909d8814bb30f671b49d7e06" + "Repository": "CRAN" }, "cli": { "Package": "cli", - "Version": "3.6.0", + "Version": "3.6.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "3177a5a16c243adc199ba33117bd9657" + "Repository": "CRAN" }, "clipr": { "Package": "clipr", "Version": "0.8.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "utils" - ], - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + "Repository": "CRAN" + }, + "clock": { + "Package": "clock", + "Version": "0.6.1", + "Source": "Repository", + "Repository": "CRAN" + }, + "coda": { + "Package": "coda", + "Version": "0.19-4", + "Source": "Repository", + "Repository": "CRAN" }, "colorspace": { "Package": "colorspace", "Version": "2.1-0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "methods", - "stats" - ], - "Hash": "f20c47fd52fae58b4e377c37bb8c335b" + "Repository": "CRAN" }, "commonmark": { "Package": "commonmark", - "Version": "1.8.1", + "Version": "1.9.0", + "Source": "Repository", + "Repository": "CRAN" + }, + "coro": { + "Package": "coro", + "Version": "1.0.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b6e3e947d1d7ebf3d2bdcea1bde63fe7" + "Repository": "CRAN" }, "corrplot": { "Package": "corrplot", "Version": "0.92", "Source": "Repository", - "Repository": "CRAN", - "Hash": "fcf11a91936fd5047b2ee9bc00595e36" + "Repository": "CRAN" + }, + "covr": { + "Package": "covr", + "Version": "3.6.2", + "Source": "Repository" }, "cowplot": { "Package": "cowplot", "Version": "1.1.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "ggplot2", - "grDevices", - "grid", - "gtable", - "methods", - "rlang", - "scales" - ], - "Hash": "b418e8423699d11c7f2087c2bfd07da2" + "Repository": "CRAN" }, "cpp11": { "Package": "cpp11", "Version": "0.4.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "ed588261931ee3be2c700d22e94a29ab" + "Repository": "CRAN" }, "crayon": { "Package": "crayon", "Version": "1.5.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "e8a1e41acf02548751f45c718d55aa6a" + "Repository": "CRAN" + }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN" }, "curl": { "Package": "curl", "Version": "5.0.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "e4f97056611e8e6b8b852d13b7400cf1" + "Repository": "CRAN" }, "data.table": { "Package": "data.table", "Version": "1.14.8", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "b4c06e554f33344e044ccd7fdca750a9" + "Repository": "CRAN" }, "dbplyr": { "Package": "dbplyr", - "Version": "2.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "R6", - "blob", - "cli", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "purrr", - "rlang", - "tibble", - "tidyr", - "tidyselect", - "utils", - "vctrs", - "withr" - ], - "Hash": "6e432b1a334fc06786e2ee8627e8cbea" + "Version": "2.3.2", + "Source": "Repository", + "Repository": "CRAN" }, "desc": { "Package": "desc", "Version": "1.4.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "rprojroot", - "utils" - ], - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" + "Repository": "CRAN" }, "diffobj": { "Package": "diffobj", "Version": "0.3.5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "crayon", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + "Repository": "CRAN" }, "digest": { "Package": "digest", "Version": "0.6.31", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "8b708f296afd9ae69f450f9640be8990" + "Repository": "CRAN" }, "dplyr": { "Package": "dplyr", - "Version": "1.1.0", + "Version": "1.1.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "d3c34618017e7ae252d46d79a1b9ec32" + "Repository": "CRAN" }, "ellipsis": { "Package": "ellipsis", "Version": "0.3.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" + "Repository": "CRAN" }, "evaluate": { "Package": "evaluate", "Version": "0.20", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4b68aa51edd89a0e044a66e75ae3cc6c" + "Repository": "CRAN" }, "exactRankTests": { "Package": "exactRankTests", "Version": "0.8-35", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "790c46974d99ff51442f4d134b2d70eb" + "Repository": "CRAN" }, "fansi": { "Package": "fansi", "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "utils" - ], - "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" + "Repository": "CRAN" }, "farver": { "Package": "farver", "Version": "2.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "8106d78941f34855c440ddb946b8f7a5" + "Repository": "CRAN" }, "fastmap": { "Package": "fastmap", "Version": "1.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "f7736a18de97dea803bde0a2daaafb27" + "Repository": "CRAN" + }, + "filelock": { + "Package": "filelock", + "Version": "1.0.2", + "Source": "Repository", + "Repository": "CRAN" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "CRAN" }, "fs": { "Package": "fs", "Version": "1.6.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "f4dcd23b67e33d851d2079f703e8b985" + "Repository": "CRAN" }, "generics": { "Package": "generics", "Version": "0.1.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "15e9634c0fcd294799e9b2e929ed1b86" + "Repository": "CRAN" }, "ggplot2": { "Package": "ggplot2", "Version": "3.4.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "R", - "cli", - "glue", - "grDevices", - "grid", - "gtable", - "isoband", - "lifecycle", - "mgcv", - "rlang", - "scales", - "stats", - "tibble", - "vctrs", - "withr" - ], - "Hash": "d494daf77c4aa7f084dbbe6ca5dcaca7" + "Repository": "CRAN" }, "ggpubr": { "Package": "ggpubr", "Version": "0.6.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cowplot", - "dplyr", - "ggplot2", - "ggrepel", - "ggsci", - "ggsignif", - "glue", - "grid", - "gridExtra", - "magrittr", - "polynom", - "purrr", - "rlang", - "rstatix", - "scales", - "stats", - "tibble", - "tidyr", - "utils" - ], - "Hash": "c957612b8bb1ee9ab7b2450d26663e7e" + "Repository": "CRAN" }, "ggrepel": { "Package": "ggrepel", "Version": "0.9.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "ggplot2", - "grid", - "rlang", - "scales", - "withr" - ], - "Hash": "92edfac53774706b4d6099f3ee6f6306" + "Repository": "CRAN" }, "ggsci": { "Package": "ggsci", "Version": "3.0.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "ggplot2", - "grDevices", - "scales" - ], - "Hash": "93664e03010c3f4b570c890dda99ade5" + "Repository": "CRAN" }, "ggsignif": { "Package": "ggsignif", "Version": "0.6.4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "ggplot2" - ], - "Hash": "a57f0f5dbcfd0d77ad4ff33032f5dc79" + "Repository": "CRAN" }, "ggtext": { "Package": "ggtext", "Version": "0.1.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "ggplot2", - "grid", - "gridtext", - "rlang", - "scales" - ], - "Hash": "c5ba8f5056487403a299b91984be86ca" + "Repository": "CRAN" }, "glue": { "Package": "glue", "Version": "1.6.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" + "Repository": "CRAN" }, "gridExtra": { "Package": "gridExtra", "Version": "2.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grDevices", - "graphics", - "grid", - "gtable", - "utils" - ], - "Hash": "7d7f283939f563670a697165b2cf5560" + "Repository": "CRAN" }, "gridtext": { "Package": "gridtext", "Version": "0.1.5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "curl", - "grDevices", - "grid", - "jpeg", - "markdown", - "png", - "rlang", - "stringr", - "xml2" - ], - "Hash": "05e4f5fffb1eecfeaac9ea0b7f255fef" + "Repository": "CRAN" }, "gtable": { "Package": "gtable", - "Version": "0.3.1", + "Version": "0.3.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grid" - ], - "Hash": "36b4265fb818f6a342bed217549cd896" + "Repository": "CRAN" }, "here": { "Package": "here", "Version": "1.0.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "rprojroot" - ], - "Hash": "24b224366f9c2e7534d2344d10d59211" + "Repository": "CRAN" }, "highr": { "Package": "highr", "Version": "0.10", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "06230136b2d2b9ba5805e1963fa6e890" + "Repository": "CRAN" }, "hms": { "Package": "hms", - "Version": "1.1.2", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "CRAN" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.5", + "Source": "Repository", + "Repository": "CRAN" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "ellipsis", - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "41100392191e1244b887878b533eea91" + "Repository": "CRAN" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.9", + "Source": "Repository", + "Repository": "CRAN" + }, + "httr": { + "Package": "httr", + "Version": "1.4.5", + "Source": "Repository", + "Repository": "CRAN" }, "isoband": { "Package": "isoband", "Version": "0.2.7", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grid", - "utils" - ], - "Hash": "0080607b4a1a7b28979aecef976d8bc2" + "Repository": "CRAN" }, "jpeg": { "Package": "jpeg", "Version": "0.1-10", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "031a0b683d001a7519202f0628fc0358" + "Repository": "CRAN" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Repository": "CRAN" }, "jsonlite": { "Package": "jsonlite", "Version": "1.8.4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods" - ], - "Hash": "a4269a09a9b865579b2635c77e572374" + "Repository": "CRAN" + }, + "keyring": { + "Package": "keyring", + "Version": "1.3.1", + "Source": "Repository", + "Repository": "CRAN" }, "km.ci": { "Package": "km.ci", "Version": "0.5-6", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "survival" - ], - "Hash": "41d857f78edf8f5db59608b6a42b6005" + "Repository": "CRAN" }, "knitr": { "Package": "knitr", "Version": "1.42", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "tools", - "xfun", - "yaml" - ], - "Hash": "8329a9bcc82943c8069104d4be3ee22d" + "Repository": "CRAN" }, "labeling": { "Package": "labeling", "Version": "0.4.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "graphics", - "stats" - ], - "Hash": "3d5108641f47470611a32d0bdf357a72" + "Repository": "CRAN" }, "later": { "Package": "later", "Version": "1.3.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Rcpp", - "rlang" - ], - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" + "Repository": "CRAN" }, "lattice": { "Package": "lattice", "Version": "0.20-45", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "stats", - "utils" - ], - "Hash": "b64cdbb2b340437c4ee047a1f4c4377b" + "Repository": "CRAN" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "CRAN" }, "lifecycle": { "Package": "lifecycle", "Version": "1.0.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "rlang" - ], - "Hash": "001cecbeac1cff9301bdc3775ee46a86" + "Repository": "CRAN" }, "lightgbm": { "Package": "lightgbm", "Version": "3.3.5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "R6", - "data.table", - "graphics", - "jsonlite", - "methods", - "utils" - ], - "Hash": "e6c3413a4762e6c0cb3a2d32da82a994" + "Repository": "CRAN" }, "lme4": { "Package": "lme4", - "Version": "1.1-31", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "Matrix", - "R", - "Rcpp", - "RcppEigen", - "boot", - "graphics", - "grid", - "lattice", - "methods", - "minqa", - "nlme", - "nloptr", - "parallel", - "splines", - "stats", - "utils" - ], - "Hash": "67581bdc21e3d5e6881cf47c0c3113eb" + "Version": "1.1-32", + "Source": "Repository", + "Repository": "CRAN" }, "lubridate": { "Package": "lubridate", "Version": "1.9.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "generics", - "methods", - "timechange" - ], - "Hash": "e25f18436e3efd42c7c590a1c4c15390" + "Repository": "CRAN" }, "magrittr": { "Package": "magrittr", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "7ce2733a9826b3aeb1775d56fd305472" + "Repository": "CRAN" }, "markdown": { "Package": "markdown", "Version": "1.5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "commonmark", - "utils", - "xfun" - ], - "Hash": "d209cfd1f4ff7260eae5a7f07da3aa4f" + "Repository": "CRAN" + }, + "mathjaxr": { + "Package": "mathjaxr", + "Version": "1.6-0", + "Source": "Repository", + "Repository": "CRAN" }, "maxstat": { "Package": "maxstat", "Version": "0.7-25", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "exactRankTests", - "graphics", - "mvtnorm", - "stats" - ], - "Hash": "c166f04bd2bbd830ab34b7329104c019" + "Repository": "CRAN" }, "memoise": { "Package": "memoise", "Version": "2.0.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" + "Repository": "CRAN" }, "memuse": { "Package": "memuse", "Version": "4.2-3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods", - "utils" - ], - "Hash": "5cfd074e79d5443c523360bbe203d904" + "Repository": "CRAN" + }, + "meta": { + "Package": "meta", + "Version": "6.2-1", + "Source": "Repository", + "Repository": "CRAN" + }, + "metadat": { + "Package": "metadat", + "Version": "1.2-0", + "Source": "Repository", + "Repository": "CRAN" + }, + "metafor": { + "Package": "metafor", + "Version": "4.0-0", + "Source": "Repository", + "Repository": "CRAN" }, "mgcv": { "Package": "mgcv", - "Version": "1.8-41", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "graphics", - "methods", - "nlme", - "splines", - "stats", - "utils" - ], - "Hash": "6b3904f13346742caa3e82dd0303d4ad" + "Version": "1.8-42", + "Source": "Repository", + "Repository": "CRAN" + }, + "mime": { + "Package": "mime", + "Version": "0.12", + "Source": "Repository", + "Repository": "CRAN" }, "minqa": { "Package": "minqa", "Version": "1.2.5", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Rcpp" - ], - "Hash": "587ce77fd3c7bada7eadb2d18b62930d" + "Repository": "CRAN" }, "munsell": { "Package": "munsell", "Version": "0.5.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "colorspace", - "methods" - ], - "Hash": "6dfe8bf774944bd5595785e3229d8771" + "Repository": "CRAN" }, "mvtnorm": { "Package": "mvtnorm", "Version": "1.1-3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods", - "stats" - ], - "Hash": "7a7541cc284cb2ba3ba7eae645892af5" + "Repository": "CRAN" }, "nlme": { "Package": "nlme", - "Version": "3.1-160", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "lattice", - "stats", - "utils" - ], - "Hash": "02e3c6e7df163aafa8477225e6827bc5" + "Version": "3.1-162", + "Source": "Repository", + "Repository": "CRAN" }, "nloptr": { "Package": "nloptr", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "testthat" - ], - "Hash": "277c67a08f358f42b6a77826e4492f79" + "Repository": "CRAN" }, "nnet": { "Package": "nnet", "Version": "7.3-18", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "170da2130d5332bea7d6ede01875ba1d" + "Repository": "CRAN" }, "numDeriv": { "Package": "numDeriv", "Version": "2016.8-1.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "df58958f293b166e4ab885ebcad90e02" + "Repository": "CRAN" + }, + "openssl": { + "Package": "openssl", + "Version": "2.0.6", + "Source": "Repository", + "Repository": "CRAN" + }, + "openxlsx": { + "Package": "openxlsx", + "Version": "4.2.5.2", + "Source": "Repository", + "Repository": "CRAN" }, "pROC": { "Package": "pROC", "Version": "1.18.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "methods", - "plyr" - ], - "Hash": "417fd0d40479932c19faf2747817c473" + "Repository": "CRAN" + }, + "pbapply": { + "Package": "pbapply", + "Version": "1.7-0", + "Source": "Repository", + "Repository": "CRAN" }, "pbkrtest": { "Package": "pbkrtest", "Version": "0.5.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "Matrix", - "R", - "broom", - "dplyr", - "lme4", - "methods", - "numDeriv", - "parallel" - ], - "Hash": "3b5b99f4d3f067bb9c1d59317d071370" + "Repository": "CRAN" }, "pillar": { "Package": "pillar", - "Version": "1.8.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "f2316df30902c81729ae9de95ad5a608" + "Version": "1.9.0", + "Source": "Repository", + "Repository": "CRAN" }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" + "Repository": "CRAN" }, "pkgload": { "Package": "pkgload", "Version": "1.3.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "crayon", - "desc", - "fs", - "glue", - "methods", - "rlang", - "rprojroot", - "utils", - "withr" - ], - "Hash": "6b0c222c5071efe0f3baf3dae9aa40e2" + "Repository": "CRAN" }, "plogr": { "Package": "plogr", "Version": "0.2.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "09eb987710984fc2905c7129c7d85e65" + "Repository": "CRAN" + }, + "plotly": { + "Package": "plotly", + "Version": "4.10.1", + "Source": "Repository", + "Repository": "CRAN" }, "plyr": { "Package": "plyr", "Version": "1.8.8", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp" - ], - "Hash": "d744387aef9047b0b48be2933d78e862" + "Repository": "CRAN" }, "png": { "Package": "png", "Version": "0.1-8", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "bd54ba8a0a5faded999a7aab6e46b374" + "Repository": "CRAN" }, "polspline": { "Package": "polspline", "Version": "1.1.22", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "graphics", - "stats" - ], - "Hash": "0246363e45df2deb6fa484cbc009dc4e" + "Repository": "CRAN" }, "polynom": { "Package": "polynom", "Version": "1.4-1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "graphics", - "stats" - ], - "Hash": "ceb5c2a59ba33d42d051285a3e8a5118" + "Repository": "CRAN" }, "pool": { "Package": "pool", "Version": "1.0.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "DBI", - "R", - "R6", - "later", - "methods", - "rlang", - "withr" - ], - "Hash": "52d086ff1a2ccccbae6d462cb0773835" + "Repository": "CRAN" }, "praise": { "Package": "praise", "Version": "1.0.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a555924add98c99d2f411e37e7d25e9f" + "Repository": "CRAN" }, "prettyunits": { "Package": "prettyunits", "Version": "1.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" + "Repository": "CRAN" }, "processx": { "Package": "processx", "Version": "3.8.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "a33ee2d9bf07564efb888ad98410da84" + "Repository": "CRAN" }, "progress": { "Package": "progress", "Version": "1.2.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" + "Repository": "CRAN" + }, + "promises": { + "Package": "promises", + "Version": "1.2.0.1", + "Source": "Repository", + "Repository": "CRAN" }, "ps": { "Package": "ps", - "Version": "1.7.2", + "Version": "1.7.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "68dd03d98a5efd1eb3012436de45ba83" + "Repository": "CRAN" }, "purrr": { "Package": "purrr", "Version": "1.0.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "lifecycle", - "magrittr", - "rlang", - "vctrs" - ], - "Hash": "d71c815267c640f17ddbf7f16144b4bb" + "Repository": "CRAN" }, "quantreg": { "Package": "quantreg", "Version": "5.94", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "Matrix", - "MatrixModels", - "R", - "SparseM", - "graphics", - "methods", - "stats", - "survival" - ], - "Hash": "b8b2b861526c344a7e16e5991fa5a4ab" + "Repository": "CRAN" }, "rJava": { "Package": "rJava", "Version": "1.0-6", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "0415819f6baa75d86d52483f7292b623" + "Repository": "CRAN" }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "5e3c5dc0b071b21fa128676560dbe94d" + "Repository": "CRAN" + }, + "rateratio.test": { + "Package": "rateratio.test", + "Version": "1.1", + "Source": "Repository", + "Repository": "CRAN" + }, + "reactR": { + "Package": "reactR", + "Version": "0.4.4", + "Source": "Repository", + "Repository": "CRAN" + }, + "reactable": { + "Package": "reactable", + "Version": "0.4.4", + "Source": "Repository", + "Repository": "CRAN" }, "readr": { "Package": "readr", "Version": "2.1.4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "clipr", - "cpp11", - "crayon", - "hms", - "lifecycle", - "methods", - "rlang", - "tibble", - "tzdb", - "utils", - "vroom" - ], - "Hash": "b5047343b3825f37ad9d3b5d89aa1078" + "Repository": "CRAN" }, "rematch2": { "Package": "rematch2", "Version": "2.1.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "tibble" - ], - "Hash": "76c9e04c712a05848ae7a23d2f170a40" + "Repository": "CRAN" }, "renv": { "Package": "renv", - "Version": "0.17.0", + "Version": "1.0.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "utils" - ], - "Hash": "ce3065fc1a0b64a859f55ac3998d6927" + "Repository": "CRAN" }, "reticulate": { "Package": "reticulate", - "Version": "1.28", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "Rcpp", - "RcppTOML", - "graphics", - "here", - "jsonlite", - "methods", - "png", - "rappdirs", - "utils", - "withr" - ], - "Hash": "86c441bf33e1d608db773cb94b848458" + "Version": "1.31", + "Source": "Repository", + "Repository": "CRAN" }, "rlang": { "Package": "rlang", - "Version": "1.0.6", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "CRAN" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.21", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "4ed1f8336c8d52c3e750adcdc57228a7" + "Repository": "CRAN" }, "rprojroot": { "Package": "rprojroot", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "1de7ab598047a87bba48434ba35d497d" + "Repository": "CRAN" }, "rstatix": { "Package": "rstatix", "Version": "0.7.2", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "broom", - "car", - "corrplot", - "dplyr", - "generics", - "magrittr", - "purrr", - "rlang", - "stats", - "tibble", - "tidyr", - "tidyselect", - "utils" - ], - "Hash": "5045fbb71b143878d8c51975d1d7d56d" + "Repository": "CRAN" + }, + "sass": { + "Package": "sass", + "Version": "0.4.5", + "Source": "Repository", + "Repository": "CRAN" }, "scales": { "Package": "scales", "Version": "1.2.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "RColorBrewer", - "farver", - "labeling", - "lifecycle", - "munsell", - "rlang", - "viridisLite" - ], - "Hash": "906cb23d2f1c5680b8ce439b44c6fa63" + "Repository": "CRAN" + }, + "shiny": { + "Package": "shiny", + "Version": "1.7.4", + "Source": "Repository", + "Repository": "CRAN" + }, + "shinyWidgets": { + "Package": "shinyWidgets", + "Version": "0.7.6", + "Source": "Repository", + "Repository": "CRAN" + }, + "shinycssloaders": { + "Package": "shinycssloaders", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "CRAN" + }, + "shinydashboard": { + "Package": "shinydashboard", + "Version": "0.7.2", + "Source": "Repository", + "Repository": "CRAN" }, "snow": { "Package": "snow", "Version": "0.4-4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "40b74690debd20c57d93d8c246b305d4" + "Repository": "CRAN" + }, + "sodium": { + "Package": "sodium", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "CRAN" + }, + "sourcetools": { + "Package": "sourcetools", + "Version": "0.1.7-1", + "Source": "Repository", + "Repository": "CRAN" }, "stringi": { "Package": "stringi", "Version": "1.7.12", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "ca8bd84263c77310739d2cf64d84d7c9" + "Repository": "CRAN" }, "stringr": { "Package": "stringr", "Version": "1.5.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "stringi", - "vctrs" - ], - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" + "Repository": "CRAN" }, "survMisc": { "Package": "survMisc", "Version": "0.5.6", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "KMsurv", - "data.table", - "ggplot2", - "grDevices", - "graphics", - "grid", - "gridExtra", - "km.ci", - "knitr", - "stats", - "survival", - "utils", - "xtable", - "zoo" - ], - "Hash": "2367feed5d6f99ee1e380da3eac55ab6" + "Repository": "CRAN" }, "survival": { "Package": "survival", - "Version": "3.4-0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "graphics", - "methods", - "splines", - "stats", - "utils" - ], - "Hash": "04411ae66ab4659230c067c32966fc20" + "Version": "3.5-3", + "Source": "Repository", + "Repository": "CRAN" }, "survminer": { "Package": "survminer", "Version": "0.4.9", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "broom", - "dplyr", - "ggplot2", - "ggpubr", - "ggtext", - "grid", - "gridExtra", - "magrittr", - "maxstat", - "methods", - "purrr", - "rlang", - "scales", - "stats", - "survMisc", - "survival", - "tibble", - "tidyr" - ], - "Hash": "3f29f006a8eb499eff91d8b72325756e" + "Repository": "CRAN" + }, + "sys": { + "Package": "sys", + "Version": "3.4.1", + "Source": "Repository", + "Repository": "CRAN" }, "testthat": { "Package": "testthat", "Version": "3.1.7", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "brio", - "callr", - "cli", - "desc", - "digest", - "ellipsis", - "evaluate", - "jsonlite", - "lifecycle", - "magrittr", - "methods", - "pkgload", - "praise", - "processx", - "ps", - "rlang", - "utils", - "waldo", - "withr" - ], - "Hash": "7eb5fd202a61d2fb78af5869b6c08998" + "Repository": "CRAN" }, "tibble": { "Package": "tibble", - "Version": "3.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "fansi", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "37695ff125982007d42a59ad10982ff2" + "Version": "3.2.1", + "Source": "Repository", + "Repository": "CRAN" }, "tidyr": { "Package": "tidyr", "Version": "1.3.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "cpp11", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" + "Repository": "CRAN" }, "tidyselect": { "Package": "tidyselect", "Version": "1.2.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "79540e5fcd9e0435af547d885f184fd5" + "Repository": "CRAN" }, "timechange": { "Package": "timechange", "Version": "0.2.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "8548b44f79a35ba1791308b61e6012d7" + "Repository": "CRAN" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.44", + "Source": "Repository", + "Repository": "CRAN" + }, + "tippy": { + "Package": "tippy", + "Version": "0.1.0", + "Source": "Repository", + "Repository": "CRAN" + }, + "torch": { + "Package": "torch", + "Version": "0.9.1", + "Source": "Repository", + "Repository": "CRAN" + }, + "torchopt": { + "Package": "torchopt", + "Version": "0.1.3", + "Source": "Repository", + "Repository": "CRAN" }, "triebeard": { "Package": "triebeard", "Version": "0.4.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Rcpp" - ], - "Hash": "642507a148b0dd9b5620177e0a044413" + "Repository": "CRAN" }, "tzdb": { "Package": "tzdb", "Version": "0.3.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "b2e1cbce7c903eaf23ec05c58e59fb5e" + "Repository": "CRAN" }, "urltools": { "Package": "urltools", "Version": "1.7.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "methods", - "triebeard" - ], - "Hash": "e86a704261a105f4703f653e05defa3e" + "Repository": "CRAN" }, "utf8": { "Package": "utf8", "Version": "1.2.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "1fe17157424bb09c48a8b3b550c753bc" + "Repository": "CRAN" }, "vctrs": { "Package": "vctrs", - "Version": "0.5.2", + "Version": "0.6.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "e4ffa94ceed5f124d429a5a5f0f5b378" + "Repository": "CRAN" }, "viridisLite": { "Package": "viridisLite", "Version": "0.4.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "62f4b5da3e08d8e5bcba6cac15603f70" + "Repository": "CRAN" }, "vroom": { "Package": "vroom", "Version": "1.6.1", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bit64", - "cli", - "cpp11", - "crayon", - "glue", - "hms", - "lifecycle", - "methods", - "progress", - "rlang", - "stats", - "tibble", - "tidyselect", - "tzdb", - "vctrs", - "withr" - ], - "Hash": "7015a74373b83ffaef64023f4a0f5033" + "Repository": "CRAN" }, "waldo": { "Package": "waldo", "Version": "0.4.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cli", - "diffobj", - "fansi", - "glue", - "methods", - "rematch2", - "rlang", - "tibble" - ], - "Hash": "035fba89d0c86e2113120f93301b98ad" + "Repository": "CRAN" }, "withr": { "Package": "withr", "Version": "2.5.0", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "stats" - ], - "Hash": "c0e49a9760983e81e55cdd9be92e7182" + "Repository": "CRAN" }, "xfun": { "Package": "xfun", - "Version": "0.37", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "stats", - "tools" - ], - "Hash": "a6860e1400a8fd1ddb6d9b4230cc34ab" - }, - "xgboost": { - "Package": "xgboost", - "Version": "1.7.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "data.table", - "jsonlite", - "methods" - ], - "Hash": "4f00baeb6a030e7f058994e2796cdf82" + "Version": "0.38", + "Source": "Repository", + "Repository": "CRAN" }, "xml2": { "Package": "xml2", "Version": "1.3.3", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "40682ed6a969ea5abfd351eb67833adc" + "Repository": "CRAN" }, "xtable": { "Package": "xtable", "Version": "1.8-4", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" + "Repository": "CRAN" }, "yaml": { "Package": "yaml", "Version": "2.3.7", "Source": "Repository", - "Repository": "CRAN", - "Hash": "0d0056cc5383fbc240ccd0cb584bf436" + "Repository": "CRAN" }, "zip": { "Package": "zip", "Version": "2.2.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "c42bfcec3fa6a0cce17ce1f8bc684f88" + "Repository": "CRAN" }, "zoo": { "Package": "zoo", "Version": "1.8-11", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "lattice", - "stats", - "utils" - ], - "Hash": "874a5b77fe0cfacf2a3450069ae70926" + "Repository": "CRAN" } } } diff --git a/renv/activate.R b/renv/activate.R index 360dd52..2969c73 100644 --- a/renv/activate.R +++ b/renv/activate.R @@ -2,11 +2,27 @@ local({ # the requested version of renv - version <- "0.17.0" + version <- "1.0.2" + attr(version, "sha") <- NULL # the project directory project <- getwd() + # use start-up diagnostics if enabled + diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") + if (diagnostics) { + start <- Sys.time() + profile <- tempfile("renv-startup-", fileext = ".Rprof") + utils::Rprof(profile) + on.exit({ + utils::Rprof(NULL) + elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) + writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) + writeLines(sprintf("- Profile: %s", profile)) + print(utils::summaryRprof(profile)) + }, add = TRUE) + } + # figure out whether the autoloader is enabled enabled <- local({ @@ -60,21 +76,75 @@ local({ # load bootstrap tools `%||%` <- function(x, y) { - if (is.environment(x) || length(x)) x else y + if (is.null(x)) y else x + } + + catf <- function(fmt, ..., appendLF = TRUE) { + + quiet <- getOption("renv.bootstrap.quiet", default = FALSE) + if (quiet) + return(invisible()) + + msg <- sprintf(fmt, ...) + cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") + + invisible(msg) + + } + + header <- function(label, + ..., + prefix = "#", + suffix = "-", + n = min(getOption("width"), 78)) + { + label <- sprintf(label, ...) + n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) + if (n <= 0) + return(paste(prefix, label)) + + tail <- paste(rep.int(suffix, n), collapse = "") + paste0(prefix, " ", label, " ", tail) + + } + + startswith <- function(string, prefix) { + substring(string, 1, nchar(prefix)) == prefix } bootstrap <- function(version, library) { + friendly <- renv_bootstrap_version_friendly(version) + section <- header(sprintf("Bootstrapping renv %s", friendly)) + catf(section) + # attempt to download renv - tarball <- tryCatch(renv_bootstrap_download(version), error = identity) - if (inherits(tarball, "error")) - stop("failed to download renv ", version) + catf("- Downloading renv ... ", appendLF = FALSE) + withCallingHandlers( + tarball <- renv_bootstrap_download(version), + error = function(err) { + catf("FAILED") + stop("failed to download:\n", conditionMessage(err)) + } + ) + catf("OK") + on.exit(unlink(tarball), add = TRUE) # now attempt to install - status <- tryCatch(renv_bootstrap_install(version, tarball, library), error = identity) - if (inherits(status, "error")) - stop("failed to install renv ", version) + catf("- Installing renv ... ", appendLF = FALSE) + withCallingHandlers( + status <- renv_bootstrap_install(version, tarball, library), + error = function(err) { + catf("FAILED") + stop("failed to install:\n", conditionMessage(err)) + } + ) + catf("OK") + + # add empty line to break up bootstrapping from normal output + catf("") + return(invisible()) } renv_bootstrap_tests_running <- function() { @@ -83,31 +153,32 @@ local({ renv_bootstrap_repos <- function() { + # get CRAN repository + cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") + # check for repos override repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) + if (!is.na(repos)) { + + # check for RSPM; if set, use a fallback repository for renv + rspm <- Sys.getenv("RSPM", unset = NA) + if (identical(rspm, repos)) + repos <- c(RSPM = rspm, CRAN = cran) + return(repos) + } + # check for lockfile repositories repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) if (!inherits(repos, "error") && length(repos)) return(repos) - # if we're testing, re-use the test repositories - if (renv_bootstrap_tests_running()) { - repos <- getOption("renv.tests.repos") - if (!is.null(repos)) - return(repos) - } - # retrieve current repos repos <- getOption("repos") # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- getOption( - "renv.repos.cran", - "https://cloud.r-project.org" - ) + repos[repos == "@CRAN@"] <- cran # add in renv.bootstrap.repos if set default <- c(FALLBACK = "https://cloud.r-project.org") @@ -146,33 +217,34 @@ local({ renv_bootstrap_download <- function(version) { - # if the renv version number has 4 components, assume it must - # be retrieved via github - nv <- numeric_version(version) - components <- unclass(nv)[[1]] - - # if this appears to be a development version of 'renv', we'll - # try to restore from github - dev <- length(components) == 4L - - # begin collecting different methods for finding renv - methods <- c( - renv_bootstrap_download_tarball, - if (dev) - renv_bootstrap_download_github - else c( - renv_bootstrap_download_cran_latest, - renv_bootstrap_download_cran_archive + sha <- attr(version, "sha", exact = TRUE) + + methods <- if (!is.null(sha)) { + + # attempting to bootstrap a development version of renv + c( + function() renv_bootstrap_download_tarball(sha), + function() renv_bootstrap_download_github(sha) ) - ) + + } else { + + # attempting to bootstrap a release version of renv + c( + function() renv_bootstrap_download_tarball(version), + function() renv_bootstrap_download_cran_latest(version), + function() renv_bootstrap_download_cran_archive(version) + ) + + } for (method in methods) { - path <- tryCatch(method(version), error = identity) + path <- tryCatch(method(), error = identity) if (is.character(path) && file.exists(path)) return(path) } - stop("failed to download renv ", version) + stop("All download methods failed") } @@ -236,8 +308,6 @@ local({ type <- spec$type repos <- spec$repos - message("* Downloading renv ", version, " ... ", appendLF = FALSE) - baseurl <- utils::contrib.url(repos = repos, type = type) ext <- if (identical(type, "source")) ".tar.gz" @@ -254,13 +324,10 @@ local({ condition = identity ) - if (inherits(status, "condition")) { - message("FAILED") + if (inherits(status, "condition")) return(FALSE) - } # report success and return - message("OK (downloaded ", type, ")") destfile } @@ -317,8 +384,6 @@ local({ urls <- file.path(repos, "src/contrib/Archive/renv", name) destfile <- file.path(tempdir(), name) - message("* Downloading renv ", version, " ... ", appendLF = FALSE) - for (url in urls) { status <- tryCatch( @@ -326,14 +391,11 @@ local({ condition = identity ) - if (identical(status, 0L)) { - message("OK") + if (identical(status, 0L)) return(destfile) - } } - message("FAILED") return(FALSE) } @@ -356,7 +418,7 @@ local({ if (!file.exists(tarball)) { # let the user know we weren't able to honour their request - fmt <- "* RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." + fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." msg <- sprintf(fmt, tarball) warning(msg) @@ -365,10 +427,7 @@ local({ } - fmt <- "* Bootstrapping with tarball at path '%s'." - msg <- sprintf(fmt, tarball) - message(msg) - + catf("- Using local tarball '%s'.", tarball) tarball } @@ -395,8 +454,6 @@ local({ on.exit(do.call(base::options, saved), add = TRUE) } - message("* Downloading renv ", version, " from GitHub ... ", appendLF = FALSE) - url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) name <- sprintf("renv_%s.tar.gz", version) destfile <- file.path(tempdir(), name) @@ -406,26 +463,105 @@ local({ condition = identity ) - if (!identical(status, 0L)) { - message("FAILED") + if (!identical(status, 0L)) return(FALSE) - } - message("OK") + renv_bootstrap_download_augment(destfile) + return(destfile) } + # Add Sha to DESCRIPTION. This is stop gap until #890, after which we + # can use renv::install() to fully capture metadata. + renv_bootstrap_download_augment <- function(destfile) { + sha <- renv_bootstrap_git_extract_sha1_tar(destfile) + if (is.null(sha)) { + return() + } + + # Untar + tempdir <- tempfile("renv-github-") + on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) + untar(destfile, exdir = tempdir) + pkgdir <- dir(tempdir, full.names = TRUE)[[1]] + + # Modify description + desc_path <- file.path(pkgdir, "DESCRIPTION") + desc_lines <- readLines(desc_path) + remotes_fields <- c( + "RemoteType: github", + "RemoteHost: api.github.com", + "RemoteRepo: renv", + "RemoteUsername: rstudio", + "RemotePkgRef: rstudio/renv", + paste("RemoteRef: ", sha), + paste("RemoteSha: ", sha) + ) + writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) + + # Re-tar + local({ + old <- setwd(tempdir) + on.exit(setwd(old), add = TRUE) + + tar(destfile, compression = "gzip") + }) + invisible() + } + + # Extract the commit hash from a git archive. Git archives include the SHA1 + # hash as the comment field of the tarball pax extended header + # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) + # For GitHub archives this should be the first header after the default one + # (512 byte) header. + renv_bootstrap_git_extract_sha1_tar <- function(bundle) { + + # open the bundle for reading + # We use gzcon for everything because (from ?gzcon) + # > Reading from a connection which does not supply a 'gzip' magic + # > header is equivalent to reading from the original connection + conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) + on.exit(close(conn)) + + # The default pax header is 512 bytes long and the first pax extended header + # with the comment should be 51 bytes long + # `52 comment=` (11 chars) + 40 byte SHA1 hash + len <- 0x200 + 0x33 + res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) + + if (grepl("^52 comment=", res)) { + sub("52 comment=", "", res) + } else { + NULL + } + } + renv_bootstrap_install <- function(version, tarball, library) { # attempt to install it into project library - message("* Installing renv ", version, " ... ", appendLF = FALSE) dir.create(library, showWarnings = FALSE, recursive = TRUE) + output <- renv_bootstrap_install_impl(library, tarball) + + # check for successful install + status <- attr(output, "status") + if (is.null(status) || identical(status, 0L)) + return(status) + + # an error occurred; report it + header <- "installation of renv failed" + lines <- paste(rep.int("=", nchar(header)), collapse = "") + text <- paste(c(header, lines, output), collapse = "\n") + stop(text) + + } + + renv_bootstrap_install_impl <- function(library, tarball) { # invoke using system2 so we can capture and report output bin <- R.home("bin") exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" - r <- file.path(bin, exe) + R <- file.path(bin, exe) args <- c( "--vanilla", "CMD", "INSTALL", "--no-multiarch", @@ -433,19 +569,7 @@ local({ shQuote(path.expand(tarball)) ) - output <- system2(r, args, stdout = TRUE, stderr = TRUE) - message("Done!") - - # check for successful install - status <- attr(output, "status") - if (is.numeric(status) && !identical(status, 0L)) { - header <- "Error installing renv:" - lines <- paste(rep.int("=", nchar(header)), collapse = "") - text <- c(header, lines, output) - writeLines(text, con = stderr()) - } - - status + system2(R, args, stdout = TRUE, stderr = TRUE) } @@ -655,34 +779,62 @@ local({ } - renv_bootstrap_validate_version <- function(version) { + renv_bootstrap_validate_version <- function(version, description = NULL) { - loadedversion <- utils::packageDescription("renv", fields = "Version") - if (version == loadedversion) - return(TRUE) + # resolve description file + # + # avoid passing lib.loc to `packageDescription()` below, since R will + # use the loaded version of the package by default anyhow. note that + # this function should only be called after 'renv' is loaded + # https://github.com/rstudio/renv/issues/1625 + description <- description %||% packageDescription("renv") - # assume four-component versions are from GitHub; - # three-component versions are from CRAN - components <- strsplit(loadedversion, "[.-]")[[1]] - remote <- if (length(components) == 4L) - paste("rstudio/renv", loadedversion, sep = "@") + # check whether requested version 'version' matches loaded version of renv + sha <- attr(version, "sha", exact = TRUE) + valid <- if (!is.null(sha)) + renv_bootstrap_validate_version_dev(sha, description) else - paste("renv", loadedversion, sep = "@") + renv_bootstrap_validate_version_release(version, description) + + if (valid) + return(TRUE) + + # the loaded version of renv doesn't match the requested version; + # give the user instructions on how to proceed + remote <- if (!is.null(description[["RemoteSha"]])) { + paste("rstudio/renv", description[["RemoteSha"]], sep = "@") + } else { + paste("renv", description[["Version"]], sep = "@") + } + + # display both loaded version + sha if available + friendly <- renv_bootstrap_version_friendly( + version = description[["Version"]], + sha = description[["RemoteSha"]] + ) fmt <- paste( "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", - "Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", - "Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", + "- Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", + "- Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", sep = "\n" ) - - msg <- sprintf(fmt, loadedversion, version, remote) - warning(msg, call. = FALSE) + catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) FALSE } + renv_bootstrap_validate_version_dev <- function(version, description) { + expected <- description[["RemoteSha"]] + is.character(expected) && startswith(expected, version) + } + + renv_bootstrap_validate_version_release <- function(version, description) { + expected <- description[["Version"]] + is.character(expected) && identical(expected, version) + } + renv_bootstrap_hash_text <- function(text) { hashfile <- tempfile("renv-hash-") @@ -706,7 +858,7 @@ local({ hooks <- getHook("renv::autoload") for (hook in hooks) if (is.function(hook)) - tryCatch(hook(), error = warning) + tryCatch(hook(), error = warnify) # load the project renv::load(project) @@ -847,6 +999,53 @@ local({ } + renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { + sha <- sha %||% attr(version, "sha", exact = TRUE) + parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) + paste(parts, collapse = "") + } + + renv_bootstrap_exec <- function(project, libpath, version) { + if (!renv_bootstrap_load(project, libpath, version)) + renv_bootstrap_run(version, libpath) + } + + renv_bootstrap_run <- function(version, libpath) { + + # perform bootstrap + bootstrap(version, libpath) + + # exit early if we're just testing bootstrap + if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) + return(TRUE) + + # try again to load + if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { + return(renv::load(project = getwd())) + } + + # failed to download or load renv; warn the user + msg <- c( + "Failed to find an renv installation: the project will not be loaded.", + "Use `renv::activate()` to re-initialize the project." + ) + + warning(paste(msg, collapse = "\n"), call. = FALSE) + + } + + + renv_bootstrap_in_rstudio <- function() { + commandArgs()[[1]] == "RStudio" + } + + # Used to work around buglet in RStudio if hook uses readline + renv_bootstrap_flush_console <- function() { + tryCatch({ + tools <- as.environment("tools:rstudio") + tools$.rs.api.sendToConsole("", echo = FALSE, focus = FALSE) + }, error = function(cnd) {}) + } renv_json_read <- function(file = NULL, text = NULL) { @@ -986,35 +1185,17 @@ local({ # construct full libpath libpath <- file.path(root, prefix) - # attempt to load - if (renv_bootstrap_load(project, libpath, version)) - return(TRUE) - - # load failed; inform user we're about to bootstrap - prefix <- paste("# Bootstrapping renv", version) - postfix <- paste(rep.int("-", 77L - nchar(prefix)), collapse = "") - header <- paste(prefix, postfix) - message(header) - - # perform bootstrap - bootstrap(version, libpath) - - # exit early if we're just testing bootstrap - if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) - return(TRUE) - - # try again to load - if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { - message("* Successfully installed and loaded renv ", version, ".") - return(renv::load()) + if (renv_bootstrap_in_rstudio()) { + # RStudio only updates console once .Rprofile is finished, so + # instead run code on sessionInit + setHook("rstudio.sessionInit", function(...) { + renv_bootstrap_exec(project, libpath, version) + renv_bootstrap_flush_console() + }) + } else { + renv_bootstrap_exec(project, libpath, version) } - # failed to download or load renv; warn the user - msg <- c( - "Failed to find an renv installation: the project will not be loaded.", - "Use `renv::activate()` to re-initialize the project." - ) - - warning(paste(msg, collapse = "\n"), call. = FALSE) + invisible() }) diff --git a/renv/settings.json b/renv/settings.json new file mode 100644 index 0000000..ffdbb32 --- /dev/null +++ b/renv/settings.json @@ -0,0 +1,19 @@ +{ + "bioconductor.version": null, + "external.libraries": [], + "ignored.packages": [], + "package.dependency.fields": [ + "Imports", + "Depends", + "LinkingTo" + ], + "ppm.enabled": null, + "ppm.ignored.urls": [], + "r.version": null, + "snapshot.type": "implicit", + "use.cache": true, + "vcs.ignore.cellar": true, + "vcs.ignore.library": true, + "vcs.ignore.local": true, + "vcs.manage.ignores": true +} diff --git a/tests/test-eunomia.R b/tests/test-eunomia.R index b4536f5..deff9fd 100644 --- a/tests/test-eunomia.R +++ b/tests/test-eunomia.R @@ -11,6 +11,24 @@ jobContext <- readRDS("tests/testJobContext.rds") jobContext$moduleExecutionSettings$workSubFolder <- workFolder jobContext$moduleExecutionSettings$resultsSubFolder <- resultsfolder jobContext$moduleExecutionSettings$connectionDetails <- connectionDetails +jobContext$moduleExecutionSettings$resultsConnectionDetails <- connectionDetails +jobContext$moduleExecutionSettings$resultsDatabaseSchema <- jobContext$moduleExecutionSettings$workDatabaseSchema + +test_that("Test createDataModelSchema", { + source("Main.R") + createDataModelSchema(jobContext) + + # Verify that the table(s) are created + connection <- DatabaseConnector::connect( + connectionDetails = jobContext$moduleExecutionSettings$resultsConnectionDetails + ) + on.exit(DatabaseConnector::disconnect(connection)) + tableList <- DatabaseConnector::getTableNames( + connection = connection + ) + resultsTablesCreated <- tableList[grep(getModuleInfo()$TablePrefix, tableList)] + expect_true(length(resultsTablesCreated) > 0) +}) test_that("Run module", { source("Main.R")