From 86632550c34f59e3b9f18a710ed7758cff4c6b16 Mon Sep 17 00:00:00 2001 From: Jamie Gilbert Date: Wed, 7 Dec 2022 08:49:55 -0800 Subject: [PATCH 1/5] Updated renv lock file for all packages --- inst/shiny/DiagnosticsExplorer/renv.lock | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/inst/shiny/DiagnosticsExplorer/renv.lock b/inst/shiny/DiagnosticsExplorer/renv.lock index bcdcc3e08..c7ddd6eea 100644 --- a/inst/shiny/DiagnosticsExplorer/renv.lock +++ b/inst/shiny/DiagnosticsExplorer/renv.lock @@ -17,6 +17,23 @@ "Requirements": [], "Hash": "8f9ce74c6417d61f0782cbae5fd2b7b0" }, + "CirceR": { + "Package": "CirceR", + "Version": "1.2.0", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteRepo": "CirceR", + "RemoteUsername": "OHDSI", + "RemoteRef": "HEAD", + "RemoteSha": "38bf8b44d87f759dd4ba36835ce30627b3c24e6b", + "Requirements": [ + "R", + "RJSONIO", + "rJava" + ], + "Hash": "b8480aa484ebcee5551cfa77fac4b25c" + }, "DBI": { "Package": "DBI", "Version": "1.1.3", From 05a522a15b89318b5cf786e6e2bae0fd981053f5 Mon Sep 17 00:00:00 2001 From: Jamie Gilbert Date: Mon, 19 Dec 2022 10:02:08 -0800 Subject: [PATCH 2/5] Update action (#1016) * actions that run only in certain circumstances * only run minor checks on pull requests * fix for dodgy function * Reverted R check to old to get it working * Revert "fix for dodgy function" This reverts commit 4b07f8b1c2a1bde0131da7708756f2fe5c71d232. * Removed package dependency snapshot * Use full cdm rather than eunomia which seems to break * Removed function ref --- .github/workflows/R_CMD_check_Hades.yml | 5 +- .github/workflows/R_CMD_check_Hades_minor.yml | 127 ++++++++++++++++++ R/RunDiagnostics.R | 7 +- R/TakePackageDependencySnapshot.R | 98 -------------- man/takepackageDependencySnapshot.Rd | 19 --- 5 files changed, 131 insertions(+), 125 deletions(-) create mode 100644 .github/workflows/R_CMD_check_Hades_minor.yml delete mode 100644 R/TakePackageDependencySnapshot.R delete mode 100644 man/takepackageDependencySnapshot.Rd diff --git a/.github/workflows/R_CMD_check_Hades.yml b/.github/workflows/R_CMD_check_Hades.yml index 266cc52a7..52f905c20 100644 --- a/.github/workflows/R_CMD_check_Hades.yml +++ b/.github/workflows/R_CMD_check_Hades.yml @@ -3,10 +3,11 @@ on: push: branches: - - '**' + - develop + - main pull_request: branches: - - '**' + - main name: R-CMD-check diff --git a/.github/workflows/R_CMD_check_Hades_minor.yml b/.github/workflows/R_CMD_check_Hades_minor.yml new file mode 100644 index 000000000..ba0bce18a --- /dev/null +++ b/.github/workflows/R_CMD_check_Hades_minor.yml @@ -0,0 +1,127 @@ +#Designed to be a fast github actions check - longer running actions to only run on releases +on: + pull_request: + branches: + - '**' + +name: R-CMD-check-minor + +jobs: + R-CMD-check-minor: + runs-on: ${{ matrix.config.os }} + + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + + strategy: + max-parallel: 1 + fail-fast: false + matrix: + config: + - {os: windows-latest, r: 'release'} # Does not appear to have Java 32-bit, hence the --no-multiarch + - {os: macOS-latest, r: 'release'} + + env: + GITHUB_PAT: ${{ secrets.GH_TOKEN }} + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + R_REMOTES_NO_ERRORS_FROM_WARNINGS: true + RSPM: ${{ matrix.config.rspm }} + #CDM5_ORACLE_CDM_SCHEMA: ${{ secrets.CDM5_ORACLE_CDM_SCHEMA }} + #CDM5_ORACLE_OHDSI_SCHEMA: ${{ secrets.CDM5_ORACLE_OHDSI_SCHEMA }} + #CDM5_ORACLE_PASSWORD: ${{ secrets.CDM5_ORACLE_PASSWORD }} + #CDM5_ORACLE_SERVER: ${{ secrets.CDM5_ORACLE_SERVER }} + #CDM5_ORACLE_USER: ${{ secrets.CDM5_ORACLE_USER }} + CDM5_POSTGRESQL_CDM_SCHEMA: ${{ secrets.CDM5_POSTGRESQL_CDM_SCHEMA }} + CDM5_POSTGRESQL_OHDSI_SCHEMA: ${{ secrets.CDM5_POSTGRESQL_OHDSI_SCHEMA }} + CDM5_POSTGRESQL_PASSWORD: ${{ secrets.CDM5_POSTGRESQL_PASSWORD }} + CDM5_POSTGRESQL_SERVER: ${{ secrets.CDM5_POSTGRESQL_SERVER }} + CDM5_POSTGRESQL_USER: ${{ secrets.CDM5_POSTGRESQL_USER }} + #CDM5_SQL_SERVER_CDM_SCHEMA: ${{ secrets.CDM5_SQL_SERVER_CDM_SCHEMA }} + #CDM5_SQL_SERVER_OHDSI_SCHEMA: ${{ secrets.CDM5_SQL_SERVER_OHDSI_SCHEMA }} + #CDM5_SQL_SERVER_PASSWORD: ${{ secrets.CDM5_SQL_SERVER_PASSWORD }} + #CDM5_SQL_SERVER_SERVER: ${{ secrets.CDM5_SQL_SERVER_SERVER }} + #CDM5_SQL_SERVER_USER: ${{ secrets.CDM5_SQL_SERVER_USER }} + #CDM5_REDSHIFT_CDM_SCHEMA: ${{ secrets.CDM5_REDSHIFT_CDM_SCHEMA }} + #CDM5_REDSHIFT_OHDSI_SCHEMA: ${{ secrets.CDM5_REDSHIFT_OHDSI_SCHEMA }} + #CDM5_REDSHIFT_PASSWORD: ${{ secrets.CDM5_REDSHIFT_PASSWORD }} + #CDM5_REDSHIFT_SERVER: ${{ secrets.CDM5_REDSHIFT_SERVER }} + #CDM5_REDSHIFT_USER: ${{ secrets.CDM5_REDSHIFT_USER }} + + steps: + - uses: actions/checkout@v2 + + - uses: r-lib/actions/setup-r@v1 + with: + r-version: ${{ matrix.config.r }} + + - uses: r-lib/actions/setup-tinytex@v1 + + - uses: r-lib/actions/setup-pandoc@v1 + + - name: Query dependencies + run: | + install.packages('remotes') + saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) + writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") + shell: Rscript {0} + + - name: Cache R packages + if: runner.os != 'Windows' + uses: actions/cache@v2 + with: + path: ${{ env.R_LIBS_USER }} + key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} + restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- + + - name: Install system dependencies + if: runner.os == 'Linux' + run: | + while read -r cmd + do + eval sudo $cmd + done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))') + + - name: Install libssh + if: runner.os == 'Linux' + run: | + sudo apt-get install libssh-dev + - name: Install dependencies + run: | + remotes::install_deps(dependencies = TRUE, INSTALL_opts=c("--no-multiarch")) + remotes::install_cran("rcmdcheck") + shell: Rscript {0} + + - name: Install covr + if: runner.os == 'macOS' + run: | + remotes::install_cran("covr") + shell: Rscript {0} + + - name: Remove check folder if exists + if: runner.os == 'macOS' + run: unlink("check", recursive = TRUE) + shell: Rscript {0} + + - name: Check + env: + _R_CHECK_CRAN_INCOMING_REMOTE_: false + run: rcmdcheck::rcmdcheck(args = c("--no-manual", "--no-multiarch"), build_args = c("--no-manual"), error_on = "warning", check_dir = "check") + shell: Rscript {0} + + - name: Upload check results + if: failure() + uses: actions/upload-artifact@v2 + with: + name: ${{ runner.os }}-r${{ matrix.config.r }}-results + path: check + + - name: Upload source package + if: success() && runner.os == 'macOS' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + uses: actions/upload-artifact@v2 + with: + name: package_tarball + path: check/*.tar.gz + + - name: Test coverage + if: runner.os == 'macOS' + run: covr::codecov() + shell: Rscript {0} \ No newline at end of file diff --git a/R/RunDiagnostics.R b/R/RunDiagnostics.R index c2e2b1236..25cbac470 100644 --- a/R/RunDiagnostics.R +++ b/R/RunDiagnostics.R @@ -229,11 +229,6 @@ executeDiagnostics <- function(cohortDefinitionSet, ) %>% RJSONIO::toJSON(digits = 23, pretty = TRUE) - # take package dependency snapshot - packageDependencySnapShotJson <- - takepackageDependencySnapshot() %>% - RJSONIO::toJSON(digits = 23, pretty = TRUE) - exportFolder <- normalizePath(exportFolder, mustWork = FALSE) incrementalFolder <- normalizePath(incrementalFolder, mustWork = FALSE) executionTimePath <- file.path(exportFolder, "taskExecutionTimes.csv") @@ -925,7 +920,7 @@ executeDiagnostics <- function(cohortDefinitionSet, # 2 as.character(attr(delta, "units")), # 3 - packageDependencySnapShotJson, + "{}", # 4 callingArgsJson, # 5 diff --git a/R/TakePackageDependencySnapshot.R b/R/TakePackageDependencySnapshot.R deleted file mode 100644 index 4288acb0c..000000000 --- a/R/TakePackageDependencySnapshot.R +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright 2022 Observational Health Data Sciences and Informatics -# -# This file is part of CohortDiagnostics -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#' Take a snapshot of the R environment -#' -#' @details -#' This function records all versions used in the R environment as used by runCohortDiagnostics. -#' This function was borrowed from OhdsiRTools -#' -#' @return -#' A data frame listing all the dependencies of the root package and their version numbers, in the -#' order in which they should be installed. -#' -takepackageDependencySnapshot <- function() { - splitPackageList <- function(packageList) { - if (is.null(packageList)) { - return(c()) - } else { - return(strsplit( - gsub( - "\\([^)]*\\)", "", gsub(" ", "", gsub("\n", "", packageList)) - ), - "," - )[[1]]) - } - } - - fetchDependencies <- - function(package, - recursive = TRUE, - level = 0) { - description <- utils::packageDescription(package) - packages <- splitPackageList(description$Depends) - packages <- c(packages, splitPackageList(description$Imports)) - packages <- - c(packages, splitPackageList(description$LinkingTo)) - # Note: if we want to include suggests, we'll need to consider circular references packages <- - # c(packages, splitPackageList(description$Suggests)) - packages <- packages[packages != "R"] - packages <- data.frame( - name = packages, - level = rep( - level, - length(packages) - ), - stringsAsFactors = FALSE - ) - if (recursive && nrow(packages) > 0) { - all <- - lapply(packages$name, - fetchDependencies, - recursive = TRUE, - level = level + 1 - ) - dependencies <- do.call("rbind", all) - if (nrow(dependencies) > 0) { - packages <- rbind(packages, dependencies) - packages <- aggregate(level ~ name, packages, max) - } - } - return(packages) - } - - packages <- - fetchDependencies("CohortDiagnostics", recursive = TRUE) - packages <- packages[order(-packages$level), ] - getVersion <- function(package) { - return(utils::packageDescription(package)$Version) - } - versions <- - sapply(c(packages$name, "CohortDiagnostics"), getVersion) - snapshot <- data.frame( - package = names(versions), - version = as.vector(versions), - stringsAsFactors = FALSE - ) - s <- utils::sessionInfo() - rVersion <- data.frame( - package = "R", - version = paste(s$R.version$major, s$R.version$minor, sep = "."), - stringsAsFactors = FALSE - ) - snapshot <- rbind(rVersion, snapshot) - return(snapshot) -} diff --git a/man/takepackageDependencySnapshot.Rd b/man/takepackageDependencySnapshot.Rd deleted file mode 100644 index d146154cc..000000000 --- a/man/takepackageDependencySnapshot.Rd +++ /dev/null @@ -1,19 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TakePackageDependencySnapshot.R -\name{takepackageDependencySnapshot} -\alias{takepackageDependencySnapshot} -\title{Take a snapshot of the R environment} -\usage{ -takepackageDependencySnapshot() -} -\value{ -A data frame listing all the dependencies of the root package and their version numbers, in the -order in which they should be installed. -} -\description{ -Take a snapshot of the R environment -} -\details{ -This function records all versions used in the R environment as used by runCohortDiagnostics. -This function was borrowed from OhdsiRTools -} From bebc36c00919c4bd3a80b33e1901b37b5d005d86 Mon Sep 17 00:00:00 2001 From: Jamie Gilbert Date: Mon, 19 Dec 2022 10:13:28 -0800 Subject: [PATCH 3/5] don't run quick check on main branch --- .github/workflows/R_CMD_check_Hades_minor.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/R_CMD_check_Hades_minor.yml b/.github/workflows/R_CMD_check_Hades_minor.yml index ba0bce18a..ab750dc70 100644 --- a/.github/workflows/R_CMD_check_Hades_minor.yml +++ b/.github/workflows/R_CMD_check_Hades_minor.yml @@ -3,6 +3,7 @@ on: pull_request: branches: - '**' + - '!main' name: R-CMD-check-minor @@ -124,4 +125,4 @@ jobs: - name: Test coverage if: runner.os == 'macOS' run: covr::codecov() - shell: Rscript {0} \ No newline at end of file + shell: Rscript {0} From 33c31b32f0acbf5ca2a239bc6def66e706e9fafb Mon Sep 17 00:00:00 2001 From: Jamie Gilbert Date: Mon, 19 Dec 2022 10:16:52 -0800 Subject: [PATCH 4/5] updated news --- NEWS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.md b/NEWS.md index 30681ca75..7c5d05a72 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +CohortDiagnostics 3.1.2 +======================= +Bug Fixes: + +1. Removed package dependency snapshot capture as it was breaking on newer versions of R + + CohortDiagnostics 3.1.1 ======================= Changes: From 334acd3c1f2515938b10e40b012aa165b35bb035 Mon Sep 17 00:00:00 2001 From: Jamie Gilbert Date: Mon, 19 Dec 2022 16:47:47 -0800 Subject: [PATCH 5/5] Package maintenance --- DESCRIPTION | 4 +- R/CohortCharacterizationDiagnostics.R | 110 ++++++------ R/CohortRelationship.R | 72 ++++---- R/ConceptSets.R | 95 ++++++----- R/DataSourceInformation.R | 15 +- R/ExportCharacterization.R | 17 +- R/InclusionRules.R | 30 ++-- R/Incremental.R | 7 +- R/Private.R | 12 +- R/ResultsDataModel.R | 74 ++++---- R/RunDiagnostics.R | 160 ++++++++++-------- R/Shiny.R | 61 +++---- R/TimeSeries.R | 37 ++-- docs/404.html | 2 +- docs/articles/CreatingAStudyPackage.html | 107 ++++++------ .../DatabaseModeInDiagnosticsExplorer.html | 4 +- docs/articles/RunningCohortDiagnostics.html | 85 ++++++---- ...iewingResultsUsingDiagnosticsExplorer.html | 4 +- docs/articles/WhatIsCohortDiagnostics.html | 4 +- docs/articles/index.html | 2 +- docs/authors.html | 2 +- docs/index.html | 2 +- docs/news/index.html | 7 +- docs/pkgdown.yml | 2 +- docs/reference/CohortDiagnostics-package.html | 2 +- docs/reference/checkInputFileEncoding.html | 2 +- .../createDiagnosticsExplorerZip.html | 2 +- docs/reference/createMergedResultsFile.html | 2 +- docs/reference/createResultsDataModel.html | 2 +- docs/reference/executeDiagnostics.html | 2 +- .../getCdmDataSourceInformation.html | 2 +- docs/reference/getCohortCounts.html | 2 +- docs/reference/getDataMigrator.html | 2 +- .../getDefaultCovariateSettings.html | 2 +- .../getDefaultVocabularyTableNames.html | 2 +- .../getResultsDataModelSpecifications.html | 2 +- docs/reference/index.html | 6 +- docs/reference/launchDiagnosticsExplorer.html | 2 +- docs/reference/migrateDataModel.html | 2 +- .../runCohortRelationshipDiagnostics.html | 2 +- .../runCohortTimeSeriesDiagnostics.html | 2 +- docs/reference/timeExecution.html | 2 +- docs/reference/uploadResults.html | 2 +- extras/CohortDiagnostics.pdf | Bin 122267 -> 120881 bytes inst/doc/RunningCohortDiagnostics.pdf | Bin 190834 -> 190932 bytes ...ViewingResultsUsingDiagnosticsExplorer.pdf | Bin 331131 -> 331035 bytes inst/doc/WhatIsCohortDiagnostics.pdf | Bin 124425 -> 124335 bytes inst/shiny/DiagnosticsExplorer/global.R | 3 +- inst/sql/sql_server/UpdateVersionNumber.sql | 3 +- tests/testthat/helper.R | 11 +- tests/testthat/setup.R | 2 +- tests/testthat/test-Characterization.R | 129 +++++++------- tests/testthat/test-DatabaseMigrations.R | 70 ++++---- tests/testthat/test-ResultsDataModel.R | 4 +- tests/testthat/test-againstCdm.R | 9 +- .../testthat/test-moduleCohortRelationship.R | 148 +++++++++------- tests/testthat/test-moduleTimeSeries.R | 139 ++++++++------- vignettes/CreatingAStudyPackage.Rmd | 107 ++++++------ .../DatabaseModeInDiagnosticsExplorer.Rmd | 5 +- vignettes/RunningCohortDiagnostics.Rmd | 85 ++++++---- ...ViewingResultsUsingDiagnosticsExplorer.Rmd | 5 +- vignettes/WhatIsCohortDiagnostics.Rmd | 5 +- 62 files changed, 925 insertions(+), 757 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index b6714de50..a64d41011 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: CohortDiagnostics Type: Package Title: Diagnostics for OHDSI Cohorts -Version: 3.1.1 -Date: 2022-07-20 +Version: 3.1.2 +Date: 2022-12-19 Authors@R: c( person("Gowtham", "Rao", email = "rao@ohdsi.org", role = c("aut", "cre")), person("Martijn", "Schuemie", email = "schuemie@ohdsi.org", role = c("aut")), diff --git a/R/CohortCharacterizationDiagnostics.R b/R/CohortCharacterizationDiagnostics.R index e55132e98..690c81905 100644 --- a/R/CohortCharacterizationDiagnostics.R +++ b/R/CohortCharacterizationDiagnostics.R @@ -48,12 +48,15 @@ getCohortCharacteristics <- function(connectionDetails = NULL, covariateSettings = covariateSettings, aggregated = TRUE ) - }) + } + ) populationSize <- attr(x = featureExtractionOutput, which = "metaData")$populationSize populationSize <- - dplyr::tibble(cohortId = names(populationSize) %>% as.numeric(), - populationSize = populationSize) + dplyr::tibble( + cohortId = names(populationSize) %>% as.numeric(), + populationSize = populationSize + ) if (!"analysisRef" %in% names(results)) { results$analysisRef <- featureExtractionOutput$analysisRef @@ -82,8 +85,8 @@ getCohortCharacteristics <- function(connectionDetails = NULL, dplyr::mutate(p = sumValue / populationSize) if (nrow(covariates %>% - dplyr::filter(p > 1) %>% - dplyr::collect()) > 0) { + dplyr::filter(p > 1) %>% + dplyr::collect()) > 0) { stop( paste0( "During characterization, population size (denominator) was found to be smaller than features Value (numerator).", @@ -98,37 +101,37 @@ getCohortCharacteristics <- function(connectionDetails = NULL, dplyr::rename(mean = averageValue) %>% dplyr::select(-populationSize) - if (FeatureExtraction::isTemporalCovariateData(featureExtractionOutput)) { - covariates <- covariates %>% - dplyr::select( - cohortId, - timeId, - covariateId, - sumValue, - mean, - sd - ) - if (length(is.na(covariates$timeId)) > 0) { - covariates[is.na(covariates$timeId),]$timeId <- -1 - } - } else { - covariates <- covariates %>% - dplyr::mutate(timeId = 0) %>% - dplyr::select( - cohortId, - timeId, - covariateId, - sumValue, - mean, - sd - ) - } - if ("covariates" %in% names(results)) { - Andromeda::appendToTable(results$covariates, covariates) - } else { - results$covariates <- covariates + if (FeatureExtraction::isTemporalCovariateData(featureExtractionOutput)) { + covariates <- covariates %>% + dplyr::select( + cohortId, + timeId, + covariateId, + sumValue, + mean, + sd + ) + if (length(is.na(covariates$timeId)) > 0) { + covariates[is.na(covariates$timeId), ]$timeId <- -1 } + } else { + covariates <- covariates %>% + dplyr::mutate(timeId = 0) %>% + dplyr::select( + cohortId, + timeId, + covariateId, + sumValue, + mean, + sd + ) } + if ("covariates" %in% names(results)) { + Andromeda::appendToTable(results$covariates, covariates) + } else { + results$covariates <- covariates + } + } if ("covariatesContinuous" %in% names(featureExtractionOutput) && dplyr::pull(dplyr::count(featureExtractionOutput$covariatesContinuous)) > 0) { @@ -151,12 +154,14 @@ getCohortCharacteristics <- function(connectionDetails = NULL, sd ) if (length(is.na(covariates$timeId)) > 0) { - covariates[is.na(covariates$timeId),]$timeId <- -1 + covariates[is.na(covariates$timeId), ]$timeId <- -1 } } else { covariates <- covariates %>% - dplyr::mutate(sumValue = -1, - timeId = 0) %>% + dplyr::mutate( + sumValue = -1, + timeId = 0 + ) %>% dplyr::select( cohortId, timeId, @@ -179,10 +184,12 @@ getCohortCharacteristics <- function(connectionDetails = NULL, } delta <- Sys.time() - startTime - ParallelLogger::logInfo("Cohort characterization took ", - signif(delta, 3), - " ", - attr(delta, "units")) + ParallelLogger::logInfo( + "Cohort characterization took ", + signif(delta, 3), + " ", + attr(delta, "units") + ) return(results) } @@ -221,9 +228,10 @@ executeCohortCharacterization <- function(connection, ) if (!incremental) { - for (outputFile in c(covariateValueFileName, covariateValueContFileName, - covariateRefFileName, analysisRefFileName, timeRefFileName)) { - + for (outputFile in c( + covariateValueFileName, covariateValueContFileName, + covariateRefFileName, analysisRefFileName, timeRefFileName + )) { if (file.exists(outputFile)) { ParallelLogger::logInfo("Not in incremental mode - Removing file", outputFile, " and replacing") unlink(outputFile) @@ -309,10 +317,12 @@ executeCohortCharacterization <- function(connection, } } delta <- Sys.time() - startCohortCharacterization - ParallelLogger::logInfo("Running ", - jobName, - " took", - signif(delta, 3), - " ", - attr(delta, "units")) + ParallelLogger::logInfo( + "Running ", + jobName, + " took", + signif(delta, 3), + " ", + attr(delta, "units") + ) } diff --git a/R/CohortRelationship.R b/R/CohortRelationship.R index 00d10af4c..9ee7e252e 100644 --- a/R/CohortRelationship.R +++ b/R/CohortRelationship.R @@ -122,7 +122,7 @@ runCohortRelationshipDiagnostics <- package = utils::packageName() ) ) - + DatabaseConnector::renderTranslateExecuteSql( connection = connection, tempEmulationSchema = tempEmulationSchema, @@ -135,7 +135,7 @@ runCohortRelationshipDiagnostics <- cohort_database_schema = cohortDatabaseSchema, cohort_table = cohortTable ) - + DatabaseConnector::renderTranslateQuerySqlToAndromeda( connection = connection, tempEmulationSchema = tempEmulationSchema, @@ -210,13 +210,17 @@ executeCohortRelationshipDiagnostics <- function(connection, allCohortIds <- cohortDefinitionSet %>% dplyr::select(cohortId, checksum) %>% - dplyr::rename(targetCohortId = cohortId, - targetChecksum = checksum) %>% + dplyr::rename( + targetCohortId = cohortId, + targetChecksum = checksum + ) %>% dplyr::distinct() combinationsOfPossibleCohortRelationships <- allCohortIds %>% tidyr::crossing(allCohortIds %>% - dplyr::rename(comparatorCohortId = targetCohortId, - comparatorChecksum = targetChecksum)) %>% + dplyr::rename( + comparatorCohortId = targetCohortId, + comparatorChecksum = targetChecksum + )) %>% dplyr::filter(targetCohortId != comparatorCohortId) %>% dplyr::arrange(targetCohortId, comparatorCohortId) %>% dplyr::mutate(checksum = paste0(targetChecksum, comparatorChecksum)) @@ -230,7 +234,7 @@ executeCohortRelationshipDiagnostics <- function(connection, if (nrow(subset) > 0) { if (incremental && - (nrow(cohortDefinitionSet) - (length(subset$targetCohortId %>% unique()))) > 0) { + (nrow(cohortDefinitionSet) - (length(subset$targetCohortId %>% unique()))) > 0) { ParallelLogger::logInfo( sprintf( " - Skipping %s target cohorts in incremental mode because the relationships has already been computed with other cohorts.", @@ -240,12 +244,12 @@ executeCohortRelationshipDiagnostics <- function(connection, } if (incremental && - (nrow(combinationsOfPossibleCohortRelationships) - ( - nrow( - combinationsOfPossibleCohortRelationships %>% + (nrow(combinationsOfPossibleCohortRelationships) - ( + nrow( + combinationsOfPossibleCohortRelationships %>% dplyr::filter(targetCohortId %in% c(subset$targetCohortId)) - ) - )) > 0) { + ) + )) > 0) { ParallelLogger::logInfo( sprintf( " - Skipping %s combinations in incremental mode because these were previously computed.", @@ -333,7 +337,7 @@ executeCohortRelationshipDiagnostics <- function(connection, timeExecution( exportFolder, "runCohortRelationshipDiagnostics", - c(subset[start:end,]$targetCohortId %>% unique(), subset[start:end,]$comparatorCohortId %>% unique()), + c(subset[start:end, ]$targetCohortId %>% unique(), subset[start:end, ]$comparatorCohortId %>% unique()), parent = "executeCohortRelationshipDiagnostics", expr = { output <- @@ -342,10 +346,12 @@ executeCohortRelationshipDiagnostics <- function(connection, cohortDatabaseSchema = cohortDatabaseSchema, tempEmulationSchema = tempEmulationSchema, cohortTable = cohortTable, - targetCohortIds = subset[start:end,]$targetCohortId %>% unique(), - comparatorCohortIds = subset[start:end,]$comparatorCohortId %>% unique(), - relationshipDays = dplyr::tibble(startDay = temporalStartDays, - endDay = temporalEndDays) + targetCohortIds = subset[start:end, ]$targetCohortId %>% unique(), + comparatorCohortIds = subset[start:end, ]$comparatorCohortId %>% unique(), + relationshipDays = dplyr::tibble( + startDay = temporalStartDays, + endDay = temporalEndDays + ) ) } ) @@ -364,26 +370,28 @@ executeCohortRelationshipDiagnostics <- function(connection, ) recordTasksDone( - cohortId = subset[start:end,]$targetCohortId, - comparatorId = subset[start:end,]$comparatorCohortId, - targetChecksum = subset[start:end,]$targetChecksum, - comparatorChecksum = subset[start:end,]$comparatorChecksum, + cohortId = subset[start:end, ]$targetCohortId, + comparatorId = subset[start:end, ]$comparatorCohortId, + targetChecksum = subset[start:end, ]$targetChecksum, + comparatorChecksum = subset[start:end, ]$comparatorChecksum, task = "runCohortRelationship", - checksum = subset[start:end,]$checksum, + checksum = subset[start:end, ]$checksum, recordKeepingFile = recordKeepingFile, incremental = incremental ) deltaIteration <- Sys.time() - startCohortRelationship - ParallelLogger::logInfo(" - Running Cohort Relationship iteration with batchsize ", - batchSize, - " from row number ", - start, - " to ", - end, - " took ", - signif(deltaIteration, 3), - " ", - attr(deltaIteration, "units")) + ParallelLogger::logInfo( + " - Running Cohort Relationship iteration with batchsize ", + batchSize, + " from row number ", + start, + " to ", + end, + " took ", + signif(deltaIteration, 3), + " ", + attr(deltaIteration, "units") + ) } } else { ParallelLogger::logInfo(" - Skipping in incremental mode.") diff --git a/R/ConceptSets.R b/R/ConceptSets.R index 10c42f91f..36d63fae9 100644 --- a/R/ConceptSets.R +++ b/R/ConceptSets.R @@ -125,7 +125,7 @@ combineConceptSetsFromCohorts <- function(cohorts) { conceptSetCounter <- 0 for (i in (1:nrow(cohorts))) { - cohort <- cohorts[i,] + cohort <- cohorts[i, ] sql <- extractConceptSetsSqlFromCohortSql(cohortSql = cohort$sql) json <- @@ -197,13 +197,13 @@ mergeTempTables <- ) sql <- SqlRender::translate(sql, - targetDialect = connection@dbms, - tempEmulationSchema = tempEmulationSchema + targetDialect = connection@dbms, + tempEmulationSchema = tempEmulationSchema ) DatabaseConnector::executeSql(connection, - sql, - progressBar = FALSE, - reportOverallTime = FALSE + sql, + progressBar = FALSE, + reportOverallTime = FALSE ) # Drop temp tables: @@ -212,13 +212,13 @@ mergeTempTables <- sprintf("TRUNCATE TABLE %s;\nDROP TABLE %s;", tempTable, tempTable) sql <- SqlRender::translate(sql, - targetDialect = connection@dbms, - tempEmulationSchema = tempEmulationSchema + targetDialect = connection@dbms, + tempEmulationSchema = tempEmulationSchema ) DatabaseConnector::executeSql(connection, - sql, - progressBar = FALSE, - reportOverallTime = FALSE + sql, + progressBar = FALSE, + reportOverallTime = FALSE ) } } @@ -261,13 +261,13 @@ instantiateUniqueConceptSets <- function(uniqueConceptSets, sqlSubset <- SqlRender::render(sqlSubset, vocabulary_database_schema = vocabularyDatabaseSchema) sqlSubset <- SqlRender::translate(sqlSubset, - targetDialect = connection@dbms, - tempEmulationSchema = tempEmulationSchema + targetDialect = connection@dbms, + tempEmulationSchema = tempEmulationSchema ) DatabaseConnector::executeSql(connection, - sqlSubset, - progressBar = FALSE, - reportOverallTime = FALSE + sqlSubset, + progressBar = FALSE, + reportOverallTime = FALSE ) } utils::setTxtProgressBar(pb, 1) @@ -298,7 +298,7 @@ getCodeSetIds <- function(criterionList) { return(NULL) } else { return(dplyr::tibble(domain = names(criterionList), codeSetIds = codeSetIds) - %>% filter(!is.na(codeSetIds))) + %>% filter(!is.na(codeSetIds))) } } @@ -386,8 +386,8 @@ runConceptSetDiagnostics <- function(connection, ) uniqueConceptSets <- - conceptSets[!duplicated(conceptSets$uniqueConceptSetId),] %>% - dplyr::select(-cohortId, -conceptSetId) + conceptSets[!duplicated(conceptSets$uniqueConceptSetId), ] %>% + dplyr::select(-cohortId, -conceptSetId) timeExecution( exportFolder, @@ -403,11 +403,11 @@ runConceptSetDiagnostics <- function(connection, tempEmulationSchema = tempEmulationSchema, conceptSetsTable = "#inst_concept_sets" ) - }) + } + ) if ((runIncludedSourceConcepts && nrow(subsetIncluded) > 0) || (runOrphanConcepts && nrow(subsetOrphans) > 0)) { - timeExecution( exportFolder, taskName = "createConceptCountsTable", @@ -422,7 +422,8 @@ runConceptSetDiagnostics <- function(connection, conceptCountsTable = conceptCountsTable, conceptCountsTableIsTemp = conceptCountsTableIsTemp ) - }) + } + ) } if (runIncludedSourceConcepts) { timeExecution( @@ -431,7 +432,6 @@ runConceptSetDiagnostics <- function(connection, cohortIds = NULL, parent = "runConceptSetDiagnostics", expr = { - # Included concepts ------------------------------------------------------------------ ParallelLogger::logInfo("Fetching included source concepts") # TODO: Disregard empty cohorts in tally: @@ -465,7 +465,7 @@ runConceptSetDiagnostics <- function(connection, tempEmulationSchema = tempEmulationSchema, snakeCaseToCamelCase = TRUE ) %>% - tidyr::tibble() + tidyr::tibble() counts <- counts %>% dplyr::rename(uniqueConceptSetId = conceptSetId) %>% @@ -560,7 +560,8 @@ runConceptSetDiagnostics <- function(connection, )) } } - }) + } + ) } if (runBreakdownIndexEvents) { @@ -595,7 +596,6 @@ runConceptSetDiagnostics <- function(connection, cohortIds = cohort$cohortId, parent = "runConceptSetDiagnostics", expr = { - cohortDefinition <- RJSONIO::fromJSON(cohort$json, digits = 23) primaryCodesetIds <- @@ -603,7 +603,7 @@ runConceptSetDiagnostics <- function(connection, cohortDefinition$PrimaryCriteria$CriteriaList, getCodeSetIds ) %>% - dplyr::bind_rows() + dplyr::bind_rows() if (nrow(primaryCodesetIds) == 0) { warning( "No primary event criteria concept sets found for cohort id: ", @@ -612,13 +612,13 @@ runConceptSetDiagnostics <- function(connection, return(tidyr::tibble()) } primaryCodesetIds <- primaryCodesetIds %>% dplyr::filter(domain %in% - c(domains$domain %>% unique())) + c(domains$domain %>% unique())) if (nrow(primaryCodesetIds) == 0) { warning( "Primary event criteria concept sets found for cohort id: ", cohort$cohortId, " but,", "\nnone of the concept sets belong to the supported domains.", "\nThe supported domains are:\n", paste(domains$domain, - collapse = ", " + collapse = ", " ) ) return(tidyr::tibble()) @@ -643,7 +643,7 @@ runConceptSetDiagnostics <- function(connection, primaryCodesetIds <- dplyr::bind_rows(primaryCodesetIds) getCounts <- function(row) { - domain <- domains[domains$domain == row$domain,] + domain <- domains[domains$domain == row$domain, ] sql <- SqlRender::loadRenderTranslateSql( "CohortEntryBreakdown.sql", @@ -681,7 +681,7 @@ runConceptSetDiagnostics <- function(connection, store_table = "#breakdown", snakeCaseToCamelCase = TRUE ) %>% - tidyr::tibble() + tidyr::tibble() if (!is.null(conceptIdTable)) { sql <- "INSERT INTO @concept_id_table (concept_id) SELECT DISTINCT concept_id @@ -711,8 +711,8 @@ runConceptSetDiagnostics <- function(connection, counts <- lapply(split(primaryCodesetIds, 1:nrow(primaryCodesetIds)), getCounts) %>% - dplyr::bind_rows() %>% - dplyr::arrange(conceptCount) + dplyr::bind_rows() %>% + dplyr::arrange(conceptCount) if (nrow(counts) > 0) { counts$cohortId <- cohort$cohortId @@ -724,7 +724,8 @@ runConceptSetDiagnostics <- function(connection, return(dplyr::tibble()) } return(counts) - }) + } + ) } data <- @@ -794,7 +795,7 @@ runConceptSetDiagnostics <- function(connection, # [OPTIMIZATION idea] can we modify the sql to do this for all uniqueConceptSetId in one query using group by? data <- list() for (i in (1:nrow(uniqueConceptSets))) { - conceptSet <- uniqueConceptSets[i,] + conceptSet <- uniqueConceptSets[i, ] ParallelLogger::logInfo( "- Finding orphan concepts for concept set '", conceptSet$conceptSetName, @@ -807,7 +808,6 @@ runConceptSetDiagnostics <- function(connection, parent = "runConceptSetDiagnostics", cohortIds = paste("concept_set-", conceptSet$name), expr = { - data[[i]] <- .findOrphanConcepts( connection = connection, cdmDatabaseSchema = cdmDatabaseSchema, @@ -835,7 +835,8 @@ runConceptSetDiagnostics <- function(connection, reportOverallTime = FALSE ) } - }) + } + ) sql <- "TRUNCATE TABLE @orphan_concept_table;\nDROP TABLE @orphan_concept_table;" DatabaseConnector::renderTranslateExecuteSql( @@ -940,16 +941,16 @@ runConceptSetDiagnostics <- function(connection, tempEmulationSchema = tempEmulationSchema, snakeCaseToCamelCase = TRUE ) %>% - dplyr::tibble() %>% - dplyr::rename(uniqueConceptSetId = codesetId) %>% - dplyr::inner_join(conceptSets, - by = "uniqueConceptSetId" - ) %>% - dplyr::select( - cohortId, - conceptSetId, - conceptId - ) + dplyr::tibble() %>% + dplyr::rename(uniqueConceptSetId = codesetId) %>% + dplyr::inner_join(conceptSets, + by = "uniqueConceptSetId" + ) %>% + dplyr::select( + cohortId, + conceptSetId, + conceptId + ) resolvedConceptIds <- makeDataExportable( x = resolvedConceptIds, diff --git a/R/DataSourceInformation.R b/R/DataSourceInformation.R index 72f66db48..de9e2b785 100644 --- a/R/DataSourceInformation.R +++ b/R/DataSourceInformation.R @@ -49,9 +49,11 @@ getCdmDataSourceInformation <- } } - if (!DatabaseConnector::existsTable(connection = connection, - databaseSchema = cdmDatabaseSchema, - tableName = "cdm_source")) { + if (!DatabaseConnector::existsTable( + connection = connection, + databaseSchema = cdmDatabaseSchema, + tableName = "cdm_source" + )) { warning("CDM Source table not found in CDM. Metadata on CDM source will be limited.") return(NULL) } @@ -90,9 +92,10 @@ getCdmDataSourceInformation <- sourceReleaseDate <- as.Date(NA) if ("sourceReleaseDate" %in% colnames(cdmDataSource)) { if (class(cdmDataSource$sourceReleaseDate) != "Date") { - try(sourceReleaseDate <- - max(as.Date(cdmDataSource$sourceReleaseDate)), - silent = TRUE + try( + sourceReleaseDate <- + max(as.Date(cdmDataSource$sourceReleaseDate)), + silent = TRUE ) } else { sourceReleaseDate <- max(as.Date(cdmDataSource$sourceReleaseDate)) diff --git a/R/ExportCharacterization.R b/R/ExportCharacterization.R index ead0585b8..d4d344ed7 100644 --- a/R/ExportCharacterization.R +++ b/R/ExportCharacterization.R @@ -55,7 +55,8 @@ exportCharacterization <- function(characteristics, sd = round(sd, digits = 4) ) %>% dplyr::select(-cohortEntries, -cohortSubjects) %>% - dplyr::distinct() %>% makeDataExportable( + dplyr::distinct() %>% + makeDataExportable( tableName = "temporal_covariate_value", minCellCount = minCellCount, databaseId = databaseId @@ -74,7 +75,7 @@ exportCharacterization <- function(characteristics, covariateId = covariateRef$covariateId ) - analysisRef <- makeDataExportable( + analysisRef <- makeDataExportable( x = characteristics$analysisRef, tableName = "temporal_analysis_ref", minCellCount = minCellCount @@ -109,12 +110,12 @@ exportCharacterization <- function(characteristics, if (!"covariatesContinuous" %in% names(characteristics)) { ParallelLogger::logInfo("No continuous characterization output for submitted cohorts") } else if (dplyr::pull(dplyr::count(characteristics$covariateRef)) > 0) { - characteristics$filteredCovariatesContinous <- makeDataExportable( - x = characteristics$covariatesContinuous, - tableName = "temporal_covariate_value_dist", - minCellCount = minCellCount, - databaseId = databaseId - ) + characteristics$filteredCovariatesContinous <- makeDataExportable( + x = characteristics$covariatesContinuous, + tableName = "temporal_covariate_value_dist", + minCellCount = minCellCount, + databaseId = databaseId + ) if (dplyr::pull(dplyr::count(characteristics$filteredCovariatesContinous)) > 0) { writeToCsv( diff --git a/R/InclusionRules.R b/R/InclusionRules.R index 21e08056e..5fb8dbea0 100644 --- a/R/InclusionRules.R +++ b/R/InclusionRules.R @@ -44,21 +44,23 @@ getInclusionStats <- function(connection, ParallelLogger::logInfo("Exporting inclusion rules with CohortGenerator") timeExecution(exportFolder, - "getInclusionStatsCohortGenerator", - parent = "getInclusionStats", - expr = - { - CohortGenerator::insertInclusionRuleNames( - connection = connection, - cohortDefinitionSet = subset, - cohortDatabaseSchema = cohortDatabaseSchema, - cohortInclusionTable = cohortTableNames$cohortInclusionTable - ) + "getInclusionStatsCohortGenerator", + parent = "getInclusionStats", + expr = { + CohortGenerator::insertInclusionRuleNames( + connection = connection, + cohortDefinitionSet = subset, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortInclusionTable = cohortTableNames$cohortInclusionTable + ) - stats <- CohortGenerator::getCohortStats(connection = connection, - cohortTableNames = cohortTableNames, - cohortDatabaseSchema = cohortDatabaseSchema) - }) + stats <- CohortGenerator::getCohortStats( + connection = connection, + cohortTableNames = cohortTableNames, + cohortDatabaseSchema = cohortDatabaseSchema + ) + } + ) if (!is.null(stats)) { if ("cohortInclusionTable" %in% (names(stats))) { cohortInclusion <- makeDataExportable( diff --git a/R/Incremental.R b/R/Incremental.R index a54246030..34373f55b 100644 --- a/R/Incremental.R +++ b/R/Incremental.R @@ -179,7 +179,6 @@ writeToCsv.default <- function(data, fileName, incremental = FALSE, ...) { delim = "," ) } - } writeToCsv.tbl_Andromeda <- @@ -210,8 +209,8 @@ writeToCsv.tbl_Andromeda <- addChunk <- function(chunk) { if ("timeId" %in% colnames(chunk)) { - if (nrow(chunk[is.na(chunk$timeId),]) > 0) { - chunk[is.na(chunk$timeId),]$timeId <- 0 + if (nrow(chunk[is.na(chunk$timeId), ]) > 0) { + chunk[is.na(chunk$timeId), ]$timeId <- 0 } } else { chunk$timeId <- 0 @@ -266,7 +265,7 @@ saveIncremental <- function(data, fileName, ...) { lazy = FALSE ) if ((nrow(previousData)) > 0) { - if("database_id" %in% colnames(previousData)) { + if ("database_id" %in% colnames(previousData)) { previousData$database_id <- as.character(previousData$database_id) } diff --git a/R/Private.R b/R/Private.R index a1ed136e4..188b074ea 100644 --- a/R/Private.R +++ b/R/Private.R @@ -324,11 +324,13 @@ timeExecution <- function(exportFolder, eval(expr) execTime <- Sys.time() - start } - executionTimes <- data.frame(task = taskName, - startTime = start, - cohortIds = paste(cohortIds, collapse = ";"), - executionTime = execTime, - parent = paste(parent, collapse = "")) + executionTimes <- data.frame( + task = taskName, + startTime = start, + cohortIds = paste(cohortIds, collapse = ";"), + executionTime = execTime, + parent = paste(parent, collapse = "") + ) readr::write_csv(executionTimes, file = executionTimePath, append = file.exists(executionTimePath)) return(executionTimes) diff --git a/R/ResultsDataModel.R b/R/ResultsDataModel.R index 90b50118f..c908ab3ef 100644 --- a/R/ResultsDataModel.R +++ b/R/ResultsDataModel.R @@ -49,7 +49,7 @@ fixTableMetadataForBackwardCompatibility <- function(table, tableName) { if (!"metadata" %in% colnames(table)) { data <- list() for (i in (1:nrow(table))) { - data[[i]] <- table[i,] + data[[i]] <- table[i, ] colnamesDf <- colnames(data[[i]]) metaDataList <- list() for (j in (1:length(colnamesDf))) { @@ -99,7 +99,7 @@ checkFixColumnNames <- expectedNames <- tableSpecs %>% dplyr::select(columnName) %>% dplyr::anti_join(dplyr::filter(optionalNames, !columnName %in% observeredNames), - by = "columnName" + by = "columnName" ) %>% dplyr::arrange(columnName) %>% dplyr::pull() @@ -206,7 +206,7 @@ checkAndFixDuplicateRows <- specifications = getResultsDataModelSpecifications()) { primaryKeys <- specifications %>% dplyr::filter(tableName == !!tableName & - primaryKey == "Yes") %>% + primaryKey == "Yes") %>% dplyr::select(columnName) %>% dplyr::pull() duplicatedRows <- duplicated(table[, primaryKeys]) @@ -219,7 +219,7 @@ checkAndFixDuplicateRows <- sum(duplicatedRows) ) ) - return(table[!duplicatedRows,]) + return(table[!duplicatedRows, ]) } else { return(table) } @@ -233,7 +233,7 @@ appendNewRows <- if (nrow(data) > 0) { primaryKeys <- specifications %>% dplyr::filter(tableName == !!tableName & - primaryKey == "Yes") %>% + primaryKey == "Yes") %>% dplyr::select(columnName) %>% dplyr::pull() newData <- newData %>% @@ -245,14 +245,18 @@ appendNewRows <- # Private function for testing migrations in isolation .createDataModel <- function(connection, databaseSchema, tablePrefix) { sqlParams <- getPrefixedTableNames(tablePrefix) - sql <- do.call(SqlRender::loadRenderTranslateSql, - c(sqlParams, - list( - sqlFilename = "CreateResultsDataModel.sql", - packageName = utils::packageName(), - dbms = connection@dbms, - results_schema = databaseSchema - ))) + sql <- do.call( + SqlRender::loadRenderTranslateSql, + c( + sqlParams, + list( + sqlFilename = "CreateResultsDataModel.sql", + packageName = utils::packageName(), + dbms = connection@dbms, + results_schema = databaseSchema + ) + ) + ) DatabaseConnector::executeSql(connection, sql) } @@ -276,9 +280,11 @@ createResultsDataModel <- function(connectionDetails = NULL, on.exit(DatabaseConnector::disconnect(connection)) .createDataModel(connection, databaseSchema, tablePrefix) - migrateDataModel(connectionDetails = connectionDetails, - databaseSchema = databaseSchema, - tablePrefix = tablePrefix) + migrateDataModel( + connectionDetails = connectionDetails, + databaseSchema = databaseSchema, + tablePrefix = tablePrefix + ) } naToEmpty <- function(x) { @@ -360,7 +366,7 @@ uploadResults <- function(connectionDetails, primaryKey <- specifications %>% filter(tableName == !!tableName & - primaryKey == "Yes") %>% + primaryKey == "Yes") %>% select(columnName) %>% pull() @@ -459,8 +465,8 @@ uploadResults <- function(connectionDetails, if (!is.null(env$primaryKeyValuesInDb)) { primaryKeyValuesInChunk <- unique(chunk[env$primaryKey]) duplicates <- inner_join(env$primaryKeyValuesInDb, - primaryKeyValuesInChunk, - by = env$primaryKey + primaryKeyValuesInChunk, + by = env$primaryKey ) if (nrow(duplicates) != 0) { if ("database_id" %in% env$primaryKey || @@ -527,7 +533,6 @@ uploadResults <- function(connectionDetails, deleteFromServer <- function(connection, schema, tableName, keyValues, tablePrefix) { - createSqlStatement <- function(i) { sql <- paste0( "DELETE FROM ", @@ -537,7 +542,7 @@ deleteFromServer <- tableName, "\nWHERE ", paste(paste0( - colnames(keyValues), " = '", keyValues[i,], "'" + colnames(keyValues), " = '", keyValues[i, ], "'" ), collapse = " AND "), ";" ) @@ -591,9 +596,9 @@ deleteAllRecordsForDatabaseId <- function(connection, database_id = databaseId, ) DatabaseConnector::renderTranslateExecuteSql(connection, - sql, - progressBar = FALSE, - reportOverallTime = FALSE + sql, + progressBar = FALSE, + reportOverallTime = FALSE ) } } @@ -615,10 +620,11 @@ migrateDataModel <- function(connectionDetails, databaseSchema, tablePrefix = "" ParallelLogger::logInfo("Updating version number") updateVersionSql <- SqlRender::loadRenderTranslateSql("UpdateVersionNumber.sql", - packageName = utils::packageName(), - database_schema = databaseSchema, - table_prefix = tablePrefix, - dbms = connectionDetails$dbms) + packageName = utils::packageName(), + database_schema = databaseSchema, + table_prefix = tablePrefix, + dbms = connectionDetails$dbms + ) connection <- DatabaseConnector::connect(connectionDetails = connectionDetails) on.exit(DatabaseConnector::disconnect(connection)) @@ -638,9 +644,11 @@ migrateDataModel <- function(connectionDetails, databaseSchema, tablePrefix = "" #' @returns Instance of ResultModelManager::DataMigrationManager that has interface for converting existing data models #' @export getDataMigrator <- function(connectionDetails, databaseSchema, tablePrefix = "") { - ResultModelManager::DataMigrationManager$new(connectionDetails = connectionDetails, - databaseSchema = databaseSchema, - tablePrefix = tablePrefix, - migrationPath = "migrations", - packageName = utils::packageName()) + ResultModelManager::DataMigrationManager$new( + connectionDetails = connectionDetails, + databaseSchema = databaseSchema, + tablePrefix = tablePrefix, + migrationPath = "migrations", + packageName = utils::packageName() + ) } diff --git a/R/RunDiagnostics.R b/R/RunDiagnostics.R index 25cbac470..0746b4175 100644 --- a/R/RunDiagnostics.R +++ b/R/RunDiagnostics.R @@ -227,7 +227,7 @@ executeDiagnostics <- function(cohortDefinitionSet, incremental = callingArgs$incremental, temporalCovariateSettings = callingArgs$temporalCovariateSettings ) %>% - RJSONIO::toJSON(digits = 23, pretty = TRUE) + RJSONIO::toJSON(digits = 23, pretty = TRUE) exportFolder <- normalizePath(exportFolder, mustWork = FALSE) incrementalFolder <- normalizePath(incrementalFolder, mustWork = FALSE) @@ -248,25 +248,25 @@ executeDiagnostics <- function(cohortDefinitionSet, errorMessage <- checkmate::makeAssertCollection() checkmate::assertList(cohortTableNames, null.ok = FALSE, types = "character", add = errorMessage, names = "named") checkmate::assertNames(names(cohortTableNames), - must.include = c( - "cohortTable", - "cohortInclusionTable", - "cohortInclusionResultTable", - "cohortInclusionStatsTable", - "cohortSummaryStatsTable", - "cohortCensorStatsTable" - ), - add = errorMessage + must.include = c( + "cohortTable", + "cohortInclusionTable", + "cohortInclusionResultTable", + "cohortInclusionStatsTable", + "cohortSummaryStatsTable", + "cohortCensorStatsTable" + ), + add = errorMessage ) checkmate::assertDataFrame(cohortDefinitionSet, add = errorMessage) checkmate::assertNames(names(cohortDefinitionSet), - must.include = c( - "json", - "cohortId", - "cohortName", - "sql" - ), - add = errorMessage + must.include = c( + "json", + "cohortId", + "cohortName", + "sql" + ), + add = errorMessage ) cohortTable <- cohortTableNames$cohortTable @@ -357,26 +357,32 @@ executeDiagnostics <- function(cohortDefinitionSet, # All temporal covariate settings objects must be covariateSettings checkmate::assert_true(all(lapply(temporalCovariateSettings, class) == c("covariateSettings")), add = errorMessage) - requiredCharacterisationSettings <- c("DemographicsGender", "DemographicsAgeGroup", "DemographicsRace", - "DemographicsEthnicity", "DemographicsIndexYear", "DemographicsIndexMonth", - "ConditionEraGroupOverlap", "DrugEraGroupOverlap", "CharlsonIndex", - "Chads2", "Chads2Vasc") + requiredCharacterisationSettings <- c( + "DemographicsGender", "DemographicsAgeGroup", "DemographicsRace", + "DemographicsEthnicity", "DemographicsIndexYear", "DemographicsIndexMonth", + "ConditionEraGroupOverlap", "DrugEraGroupOverlap", "CharlsonIndex", + "Chads2", "Chads2Vasc" + ) presentSettings <- temporalCovariateSettings[[1]][requiredCharacterisationSettings] if (!all(unlist(presentSettings))) { warning( "For cohort charcterization to display standardized results the following covariates must be present in your temporalCovariateSettings: \n\n", - paste(requiredCharacterisationSettings, collapse = ", ")) + paste(requiredCharacterisationSettings, collapse = ", ") + ) } - requiredTimeDistributionSettings <- c("DemographicsPriorObservationTime", - "DemographicsPostObservationTime", - "DemographicsTimeInCohort") + requiredTimeDistributionSettings <- c( + "DemographicsPriorObservationTime", + "DemographicsPostObservationTime", + "DemographicsTimeInCohort" + ) presentSettings <- temporalCovariateSettings[[1]][requiredTimeDistributionSettings] if (!all(unlist(presentSettings))) { warning( "For time distributions diagnostics to display standardized results the following covariates must be present in your temporalCovariateSettings: \n\n", - paste(requiredTimeDistributionSettings, collapse = ", ")) + paste(requiredTimeDistributionSettings, collapse = ", ") + ) } # forcefully set ConditionEraGroupStart and drugEraGroupStart to NULL @@ -384,26 +390,32 @@ executeDiagnostics <- function(cohortDefinitionSet, temporalCovariateSettings[[1]]$ConditionEraGroupStart <- NULL temporalCovariateSettings[[1]]$DrugEraGroupStart <- NULL - checkmate::assert_integerish(x = temporalCovariateSettings[[1]]$temporalStartDays, - any.missing = FALSE, - min.len = 1, - add = errorMessage) - checkmate::assert_integerish(x = temporalCovariateSettings[[1]]$temporalEndDays, - any.missing = FALSE, - min.len = 1, - add = errorMessage) + checkmate::assert_integerish( + x = temporalCovariateSettings[[1]]$temporalStartDays, + any.missing = FALSE, + min.len = 1, + add = errorMessage + ) + checkmate::assert_integerish( + x = temporalCovariateSettings[[1]]$temporalEndDays, + any.missing = FALSE, + min.len = 1, + add = errorMessage + ) checkmate::reportAssertions(collection = errorMessage) # Adding required temporal windows required in results viewer requiredTemporalPairs <- - list(c(-365, 0), - c(-30, 0), - c(-365, -31), - c(-30, -1), - c(0, 0), - c(1, 30), - c(31, 365), - c(-9999, 9999)) + list( + c(-365, 0), + c(-30, 0), + c(-365, -31), + c(-30, -1), + c(0, 0), + c(1, 30), + c(31, 365), + c(-9999, 9999) + ) for (p1 in requiredTemporalPairs) { found <- FALSE for (i in 1:length(temporalCovariateSettings[[1]]$temporalStartDays)) { @@ -439,17 +451,17 @@ executeDiagnostics <- function(cohortDefinitionSet, sort() cohortTableColumnNamesExpected <- getResultsDataModelSpecifications() %>% - dplyr::filter(tableName == "cohort") %>% - dplyr::pull(columnName) %>% - SqlRender::snakeCaseToCamelCase() %>% - sort() + dplyr::filter(tableName == "cohort") %>% + dplyr::pull(columnName) %>% + SqlRender::snakeCaseToCamelCase() %>% + sort() cohortTableColumnNamesRequired <- getResultsDataModelSpecifications() %>% - dplyr::filter(tableName == "cohort") %>% - dplyr::filter(isRequired == "Yes") %>% - dplyr::pull(columnName) %>% - SqlRender::snakeCaseToCamelCase() %>% - sort() + dplyr::filter(tableName == "cohort") %>% + dplyr::filter(isRequired == "Yes") %>% + dplyr::pull(columnName) %>% + SqlRender::snakeCaseToCamelCase() %>% + sort() expectedButNotObsevered <- setdiff(x = cohortTableColumnNamesExpected, y = cohortTableColumnNamesObserved) @@ -529,8 +541,8 @@ executeDiagnostics <- function(cohortDefinitionSet, } } vocabularyVersion <- getVocabularyVersion(connection, vocabularyDatabaseSchema) - - }) + } + ) cohortDefinitionSet$checksum <- computeChecksum(cohortDefinitionSet$sql) @@ -565,7 +577,8 @@ executeDiagnostics <- function(cohortDefinitionSet, snakeCaseToCamelCase = TRUE, tempEmulationSchema = tempEmulationSchema ) - }) + } + ) # Database metadata --------------------------------------------- saveDatabaseMetaData( databaseId = databaseId, @@ -595,7 +608,8 @@ executeDiagnostics <- function(cohortDefinitionSet, minCellCount = minCellCount, databaseId = databaseId ) - }) + } + ) if (nrow(cohortCounts) > 0) { instantiatedCohorts <- cohortCounts %>% @@ -634,7 +648,8 @@ executeDiagnostics <- function(cohortDefinitionSet, minCellCount = minCellCount, recordKeepingFile = recordKeepingFile ) - }) + } + ) } # Concept set diagnostics ----------------------------------------------- @@ -669,7 +684,8 @@ executeDiagnostics <- function(cohortDefinitionSet, conceptIdTable = "#concept_ids", recordKeepingFile = recordKeepingFile ) - }) + } + ) } # Time series ---------------------------------------------------------------------- @@ -695,7 +711,8 @@ executeDiagnostics <- function(cohortDefinitionSet, recordKeepingFile = recordKeepingFile, observationPeriodDateRange = observationPeriodDateRange ) - }) + } + ) } @@ -722,7 +739,8 @@ executeDiagnostics <- function(cohortDefinitionSet, recordKeepingFile = recordKeepingFile, incremental = incremental ) - }) + } + ) } # Incidence rates -------------------------------------------------------------------------------------- @@ -747,7 +765,8 @@ executeDiagnostics <- function(cohortDefinitionSet, recordKeepingFile = recordKeepingFile, incremental = incremental ) - }) + } + ) } # Cohort relationship --------------------------------------------------------------------------------- @@ -772,7 +791,8 @@ executeDiagnostics <- function(cohortDefinitionSet, recordKeepingFile = recordKeepingFile, incremental = incremental ) - }) + } + ) } # Temporal Cohort characterization --------------------------------------------------------------- @@ -808,7 +828,8 @@ executeDiagnostics <- function(cohortDefinitionSet, timeRefFileName = file.path(exportFolder, "temporal_time_ref.csv"), minCharacterizationMean = minCharacterizationMean ) - }) + } + ) } # Store information from the vocabulary on the concepts used ------------------------- @@ -816,8 +837,7 @@ executeDiagnostics <- function(cohortDefinitionSet, exportFolder, "exportConceptInformation", parent = "executeDiagnostics", - expr = - { + expr = { exportConceptInformation( connection = connection, cdmDatabaseSchema = cdmDatabaseSchema, @@ -826,15 +846,15 @@ executeDiagnostics <- function(cohortDefinitionSet, incremental = incremental, exportFolder = exportFolder ) - }) + } + ) # Delete unique concept ID table --------------------------------- ParallelLogger::logTrace("Deleting concept ID table") timeExecution( exportFolder, "DeleteConceptIdTable", parent = "executeDiagnostics", - expr = - { + expr = { sql <- "TRUNCATE TABLE @table;\nDROP TABLE @table;" DatabaseConnector::renderTranslateExecuteSql( connection = connection, @@ -844,7 +864,8 @@ executeDiagnostics <- function(cohortDefinitionSet, progressBar = FALSE, reportOverallTime = FALSE ) - }) + } + ) # Writing metadata file ParallelLogger::logInfo("Retrieving metadata information and writing metadata") @@ -991,7 +1012,8 @@ executeDiagnostics <- function(cohortDefinitionSet, parent = "executeDiagnostics", expr = { writeResultsZip(exportFolder, databaseId) - }) + } + ) ParallelLogger::logInfo( "Computing all diagnostics took ", diff --git a/R/Shiny.R b/R/Shiny.R index fa4031824..d00937df1 100644 --- a/R/Shiny.R +++ b/R/Shiny.R @@ -58,7 +58,6 @@ launchDiagnosticsExplorer <- function(sqliteDbPath = "MergedCohortDiagnosticsDat port = 80, launch.browser = FALSE, enableAnnotation = TRUE) { - if (is.null(shinyConfigPath)) { if (is.null(connectionDetails)) { sqliteDbPath <- normalizePath(sqliteDbPath) @@ -110,34 +109,36 @@ launchDiagnosticsExplorer <- function(sqliteDbPath = "MergedCohortDiagnosticsDat on.exit(options("CD-shiny-config" = NULL)) } - ensure_installed(c("checkmate", - "DatabaseConnector", - "dplyr", - "plyr", - "ggplot2", - "ggiraph", - "gtable", - "htmltools", - "lubridate", - "pool", - "purrr", - "scales", - "shiny", - "shinydashboard", - "shinyWidgets", - "shinyjs", - "shinycssloaders", - "stringr", - "SqlRender", - "tidyr", - "CirceR", - "rmarkdown", - "reactable", - "markdownInput", - "markdown", - "jsonlite", - "ggh4x", - "yaml")) + ensure_installed(c( + "checkmate", + "DatabaseConnector", + "dplyr", + "plyr", + "ggplot2", + "ggiraph", + "gtable", + "htmltools", + "lubridate", + "pool", + "purrr", + "scales", + "shiny", + "shinydashboard", + "shinyWidgets", + "shinyjs", + "shinycssloaders", + "stringr", + "SqlRender", + "tidyr", + "CirceR", + "rmarkdown", + "reactable", + "markdownInput", + "markdown", + "jsonlite", + "ggh4x", + "yaml" + )) appDir <- system.file("shiny", "DiagnosticsExplorer", package = utils::packageName()) @@ -229,7 +230,7 @@ createMergedResultsFile <- createDiagnosticsExplorerZip <- function(outputZipfile = file.path(getwd(), "DiagnosticsExplorer.zip"), sqliteDbPath = "MergedCohortDiagnosticsData.sqlite", shinyDirectory = system.file(file.path("shiny", "DiagnosticsExplorer"), - package = "CohortDiagnostics" + package = "CohortDiagnostics" ), overwrite = FALSE) { outputZipfile <- normalizePath(outputZipfile, mustWork = FALSE) diff --git a/R/TimeSeries.R b/R/TimeSeries.R index f35c23e33..682442dd2 100644 --- a/R/TimeSeries.R +++ b/R/TimeSeries.R @@ -124,8 +124,8 @@ runCohortTimeSeriesDiagnostics <- function(connectionDetails = NULL, by = clock::duration_months(3) ) ) %>% - dplyr::mutate(periodEnd = clock::add_months(x = periodBegin, n = 3) - 1) %>% - dplyr::mutate(calendarInterval = "q") + dplyr::mutate(periodEnd = clock::add_months(x = periodBegin, n = 3) - 1) %>% + dplyr::mutate(calendarInterval = "q") calendarMonth <- dplyr::tibble( @@ -135,8 +135,8 @@ runCohortTimeSeriesDiagnostics <- function(connectionDetails = NULL, by = clock::duration_months(1) ) ) %>% - dplyr::mutate(periodEnd = clock::add_months(x = periodBegin, n = 1) - 1) %>% - dplyr::mutate(calendarInterval = "m") + dplyr::mutate(periodEnd = clock::add_months(x = periodBegin, n = 1) - 1) %>% + dplyr::mutate(calendarInterval = "m") calendarYear <- dplyr::tibble( @@ -146,8 +146,8 @@ runCohortTimeSeriesDiagnostics <- function(connectionDetails = NULL, by = clock::duration_years(1) ) ) %>% - dplyr::mutate(periodEnd = clock::add_years(x = periodBegin, n = 1) - 1) %>% - dplyr::mutate(calendarInterval = "y") + dplyr::mutate(periodEnd = clock::add_years(x = periodBegin, n = 1) - 1) %>% + dplyr::mutate(calendarInterval = "y") timeSeriesDateRange <- dplyr::tibble( periodBegin = timeSeriesMinDate, @@ -162,9 +162,9 @@ runCohortTimeSeriesDiagnostics <- function(connectionDetails = NULL, calendarYear, timeSeriesDateRange ) %>% # calendarWeek - dplyr::distinct() %>% - dplyr::arrange(periodBegin, periodEnd, calendarInterval) %>% - dplyr::mutate(timeId = dplyr::row_number()) + dplyr::distinct() %>% + dplyr::arrange(periodBegin, periodEnd, calendarInterval) %>% + dplyr::mutate(timeId = dplyr::row_number()) ParallelLogger::logTrace(" - Inserting calendar periods") DatabaseConnector::insertTable( @@ -428,7 +428,7 @@ runCohortTimeSeriesDiagnostics <- function(connectionDetails = NULL, ) resultsInAndromeda$ageGroupGender <- resultsInAndromeda$ageGroupGender %>% - dplyr::mutate(seriesType = !!seriesId) + dplyr::mutate(seriesType = !!seriesId) Andromeda::appendToTable( resultsInAndromeda$allData, resultsInAndromeda$ageGroupGender @@ -452,7 +452,7 @@ runCohortTimeSeriesDiagnostics <- function(connectionDetails = NULL, dplyr::collect() %>% # temporal solution till fix of bug in andromeda on handling dates # periodBegin gets converted to integer dplyr::inner_join(resultsInAndromeda$calendarPeriods %>% dplyr::collect(), - by = c("timeId") + by = c("timeId") ) %>% dplyr::arrange( cohortId, @@ -520,7 +520,6 @@ executeTimeSeriesDiagnostics <- function(connection, recordKeepingFile, observationPeriodDateRange, batchSize = getOption("CohortDiagnostics-TimeSeries-batch-size", default = 20)) { - if (all(!runCohortTimeSeries, !runDataSourceTimeSeries)) { warning( "Both Datasource time series and cohort time series are set to FALSE. Skippping executeTimeSeriesDiagnostics." @@ -566,7 +565,7 @@ executeTimeSeriesDiagnostics <- function(connection, ) } - cohortIds <- subset[start:end,]$cohortId %>% unique() + cohortIds <- subset[start:end, ]$cohortId %>% unique() timeExecution( exportFolder, "runCohortTimeSeriesDiagnostics", @@ -598,12 +597,12 @@ executeTimeSeriesDiagnostics <- function(connection, data = data, fileName = outputFile, incremental = TRUE, - cohortId = subset[start:end,]$cohortId %>% unique() + cohortId = subset[start:end, ]$cohortId %>% unique() ) recordTasksDone( - cohortId = subset[start:end,]$cohortId %>% unique(), + cohortId = subset[start:end, ]$cohortId %>% unique(), task = "runCohortTimeSeries", - checksum = subset[start:end,]$checksum, + checksum = subset[start:end, ]$checksum, recordKeepingFile = recordKeepingFile, incremental = incremental ) @@ -623,8 +622,10 @@ executeTimeSeriesDiagnostics <- function(connection, recordKeepingFile = recordKeepingFile ) - if (all(nrow(subset) == 0, - incremental)) { + if (all( + nrow(subset) == 0, + incremental + )) { ParallelLogger::logInfo("Skipping Data Source Time Series in Incremental mode.") return(NULL) } diff --git a/docs/404.html b/docs/404.html index 653fa5c34..3dd8ed2c3 100644 --- a/docs/404.html +++ b/docs/404.html @@ -32,7 +32,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/articles/CreatingAStudyPackage.html b/docs/articles/CreatingAStudyPackage.html index d7205370b..2950d8852 100644 --- a/docs/articles/CreatingAStudyPackage.html +++ b/docs/articles/CreatingAStudyPackage.html @@ -33,7 +33,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 @@ -97,7 +97,7 @@

Creating a study package

Gowtham A. Rao

-

2022-12-06

+

2022-12-19

Source: vignettes/CreatingAStudyPackage.Rmd @@ -186,7 +186,7 @@

option A: Using Hydra and ROhdsiW # please ensure you have the latest version of Hydra. As of 08/13/2021 - CohortDiagnostics support for Hydra is still in develop branch. # please check hydra release notes and update hydra remotes::install_github("OHDSI/Hydra", ref = "develop") -outputFolder <- "d:/temp/output" # location where you study package will be created +outputFolder <- "d:/temp/output" # location where you study package will be created ########## Please populate the information below ##################### @@ -208,62 +208,68 @@

option A: Using Hydra and ROhdsiW baseUrl <- Sys.getenv("baseUrl") # if you have security enabled, please authorize the use - example below # ROhdsiWebApi::authorizeWebApi(baseUrl, 'windows') -cohortIds <- c(22040, - 22042, - 22041, - 22039, - 22038, - 22037, - 22036, - 22035, - 22034, - 22033, - 22031, - 22032, - 22030, - 22028, - 22029) +cohortIds <- c( + 22040, + 22042, + 22041, + 22039, + 22038, + 22037, + 22036, + 22035, + 22034, + 22033, + 22031, + 22032, + 22030, + 22028, + 22029 +) ################# end of user input ############## webApiCohorts <- ROhdsiWebApi::getCohortDefinitionsMetaData(baseUrl = baseUrl) -studyCohorts <- webApiCohorts %>% - dplyr::filter(.data$id %in% cohortIds) +studyCohorts <- webApiCohorts %>% + dplyr::filter(.data$id %in% cohortIds) # compile them into a data table cohortDefinitionsArray <- list() for (i in (1:nrow(studyCohorts))) { - cohortDefinition <- - ROhdsiWebApi::getCohortDefinition(cohortId = studyCohorts$id[[i]], - baseUrl = baseUrl) - cohortDefinitionsArray[[i]] <- list( - id = studyCohorts$id[[i]], - createdDate = studyCohorts$createdDate[[i]], - modifiedDate = studyCohorts$createdDate[[i]], - logicDescription = studyCohorts$description[[i]], - name = stringr::str_trim(stringr::str_squish(cohortDefinition$name)), - expression = cohortDefinition$expression - ) + cohortDefinition <- + ROhdsiWebApi::getCohortDefinition( + cohortId = studyCohorts$id[[i]], + baseUrl = baseUrl + ) + cohortDefinitionsArray[[i]] <- list( + id = studyCohorts$id[[i]], + createdDate = studyCohorts$createdDate[[i]], + modifiedDate = studyCohorts$createdDate[[i]], + logicDescription = studyCohorts$description[[i]], + name = stringr::str_trim(stringr::str_squish(cohortDefinition$name)), + expression = cohortDefinition$expression + ) } tempFolder <- tempdir() unlink(x = tempFolder, recursive = TRUE, force = TRUE) dir.create(path = tempFolder, showWarnings = FALSE, recursive = TRUE) -specifications <- list(id = 1, - version = version, - name = name, - packageName = packageName, - skeletonVersion = skeletonVersion, - createdBy = createdBy, - createdDate = createdDate, - modifiedBy = modifiedBy, - modifiedDate = modifiedDate, - skeletonType = skeletonType, - organizationName = organizationName, - description = description, - cohortDefinitions = cohortDefinitionsArray) +specifications <- list( + id = 1, + version = version, + name = name, + packageName = packageName, + skeletonVersion = skeletonVersion, + createdBy = createdBy, + createdDate = createdDate, + modifiedBy = modifiedBy, + modifiedDate = modifiedDate, + skeletonType = skeletonType, + organizationName = organizationName, + description = description, + cohortDefinitions = cohortDefinitionsArray +) jsonFileName <- paste0(file.path(tempFolder, "CohortDiagnosticsSpecs.json")) write(x = specifications %>% RJSONIO::toJSON(pretty = TRUE, digits = 23), file = jsonFileName) @@ -280,13 +286,13 @@

option A: Using Hydra and ROhdsiW #### get the skeleton from github # download.file(url = "https://github.com/OHDSI/SkeletonCohortDiagnosticsStudy/archive/refs/heads/main.zip", # destfile = file.path(tempFolder, 'skeleton.zip')) -# unzip(zipfile = file.path(tempFolder, 'skeleton.zip'), +# unzip(zipfile = file.path(tempFolder, 'skeleton.zip'), # overwrite = TRUE, # exdir = file.path(tempFolder, "skeleton") # ) # fileList <- list.files(path = file.path(tempFolder, "skeleton"), full.names = TRUE, recursive = TRUE, all.files = TRUE) -# DatabaseConnector::createZipFile(zipFile = file.path(tempFolder, 'skeleton.zip'), -# files = fileList, +# DatabaseConnector::createZipFile(zipFile = file.path(tempFolder, 'skeleton.zip'), +# files = fileList, # rootFolder = list.dirs(file.path(tempFolder, 'skeleton'), recursive = FALSE)) ############################################################## @@ -301,13 +307,14 @@

option A: Using Hydra and ROhdsiW hydraSpecificationFromFile <- Hydra::loadSpecifications(fileName = jsonFileName) unlink(x = outputFolder, recursive = TRUE) dir.create(path = outputFolder, showWarnings = FALSE, recursive = TRUE) -Hydra::hydrate(specifications = hydraSpecificationFromFile, - outputFolder = outputFolder +Hydra::hydrate( + specifications = hydraSpecificationFromFile, + outputFolder = outputFolder ) # for advanced user using skeletons outside of Hydra # Hydra::hydrate(specifications = hydraSpecificationFromFile, -# outputFolder = outputFolder, +# outputFolder = outputFolder, # skeletonFileName = file.path(tempFolder, 'skeleton.zip') # ) diff --git a/docs/articles/DatabaseModeInDiagnosticsExplorer.html b/docs/articles/DatabaseModeInDiagnosticsExplorer.html index c0e4afcb6..409421e5e 100644 --- a/docs/articles/DatabaseModeInDiagnosticsExplorer.html +++ b/docs/articles/DatabaseModeInDiagnosticsExplorer.html @@ -33,7 +33,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 @@ -97,7 +97,7 @@

Database mode in Diagnostics Explorer

Gowtham Rao

-

2022-12-06

+

2022-12-19

Source: vignettes/DatabaseModeInDiagnosticsExplorer.Rmd diff --git a/docs/articles/RunningCohortDiagnostics.html b/docs/articles/RunningCohortDiagnostics.html index 19b970613..645569673 100644 --- a/docs/articles/RunningCohortDiagnostics.html +++ b/docs/articles/RunningCohortDiagnostics.html @@ -33,7 +33,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 @@ -97,7 +97,7 @@

Running Cohort Diagnostics

Gowtham Rao and James P. Gilbert

-

2022-12-06

+

2022-12-19

Source: vignettes/RunningCohortDiagnostics.Rmd @@ -122,8 +122,8 @@

pre-requisitesROhdsiWebApi package to download cohort definitions from an ATLAS instance:

-remotes::install_github('OHDSI/Eunomia')
-remotes::install_github('OHDSI/ROhdsiWebApi')
+remotes::install_github("OHDSI/Eunomia") +remotes::install_github("OHDSI/ROhdsiWebApi")
@@ -139,10 +139,12 @@

Configuring the connection to
 library(CohortDiagnostics)
 
-connectionDetails <- createConnectionDetails(dbms = "postgresql",
-                                             server = "localhost/ohdsi",
-                                             user = "joe",
-                                             password = "supersecret")
+connectionDetails <- createConnectionDetails( + dbms = "postgresql", + server = "localhost/ohdsi", + user = "joe", + password = "supersecret" +)

For the purposes of this example, we will use the Eunomia test CDM package that is in an Sqlite database stored locally.

@@ -181,10 +183,12 @@ 

Loading cohort references from the OMOP Common Data Model format.

 library(CohortDiagnostics)
-cohortDefinitionSet <- CohortGenerator::getCohortDefinitionSet(settingsFileName = "Cohorts.csv",
-                                                               jsonFolder = "cohorts",
-                                                               sqlFolder = "sql/sql_server",
-                                                               packageName = "CohortDiagnostics")
+cohortDefinitionSet <- CohortGenerator::getCohortDefinitionSet( + settingsFileName = "Cohorts.csv", + jsonFolder = "cohorts", + sqlFolder = "sql/sql_server", + packageName = "CohortDiagnostics" +)

Looking at this data.frame of Cohorts you will see the sql and json for these cohorts:

@@ -204,11 +208,13 @@ 

Loading cohort references from We # Set up url baseUrl <- "https://atlas.hosting.com/WebAPI" # list of cohort ids -cohortIds <- c(18345,18346) +cohortIds <- c(18345, 18346) -cohortDefinitionSet <- ROhdsiWebApi::exportCohortDefinitionSet(baseUrl = baseUrl, - cohortIds = cohortIds, - generateStats = TRUE)

+cohortDefinitionSet <- ROhdsiWebApi::exportCohortDefinitionSet( + baseUrl = baseUrl, + cohortIds = cohortIds, + generateStats = TRUE +)

Consult the ROhdsiWebApi documentation for details on authentication to your atlas instance. Please note that in order to generate inclusion rules statistics (a useful diagnostic tool) the parameter @@ -226,18 +232,22 @@

Using CohortGenerator to i cohortTableNames <- CohortGenerator::getCohortTableNames(cohortTable = cohortTable) # Next create the tables on the database -CohortGenerator::createCohortTables(connectionDetails = connectionDetails, - cohortTableNames = cohortTableNames, - cohortDatabaseSchema = "main", - incremental = FALSE) +CohortGenerator::createCohortTables( + connectionDetails = connectionDetails, + cohortTableNames = cohortTableNames, + cohortDatabaseSchema = "main", + incremental = FALSE +) # Generate the cohort set -CohortGenerator::generateCohortSet(connectionDetails= connectionDetails, - cdmDatabaseSchema = cdmDatabaseSchema, - cohortDatabaseSchema = cohortDatabaseSchema, - cohortTableNames = cohortTableNames, - cohortDefinitionSet = cohortDefinitionSet, - incremental = FALSE) +CohortGenerator::generateCohortSet( + connectionDetails = connectionDetails, + cdmDatabaseSchema = cdmDatabaseSchema, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTableNames = cohortTableNames, + cohortDefinitionSet = cohortDefinitionSet, + incremental = FALSE +)

Note, that the above code will delete an existing table. However, incremental mode can be used when setting the parameter incremental = TRUE.

@@ -259,13 +269,14 @@

Executing cohort diagnostics
 executeDiagnostics(cohortDefinitionSet,
-                   connectionDetails = connectionDetails,
-                   cohortTable = cohortTable,
-                   cohortDatabaseSchema = cohortDatabaseSchema,
-                   cdmDatabaseSchema = cdmDatabaseSchema,
-                   exportFolder = exportFolder,
-                   databaseId = "MyCdm",
-                   minCellCount = 5)
+ connectionDetails = connectionDetails, + cohortTable = cohortTable, + cohortDatabaseSchema = cohortDatabaseSchema, + cdmDatabaseSchema = cdmDatabaseSchema, + exportFolder = exportFolder, + databaseId = "MyCdm", + minCellCount = 5 +)

Cohort Statistics Table Clean up @@ -274,9 +285,11 @@

Cohort Statistics Table Clean up
-CohortGenerator::dropCohortStatsTables(connectionDetails = connectionDetails,
-                                       cohortDatabaseSchema = cohortDatabaseSchema,
-                                       cohortTableNames = cohortTableNames)
+CohortGenerator::dropCohortStatsTables( + connectionDetails = connectionDetails, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTableNames = cohortTableNames +)

diff --git a/docs/articles/ViewingResultsUsingDiagnosticsExplorer.html b/docs/articles/ViewingResultsUsingDiagnosticsExplorer.html index 50bf23ffe..04af855d1 100644 --- a/docs/articles/ViewingResultsUsingDiagnosticsExplorer.html +++ b/docs/articles/ViewingResultsUsingDiagnosticsExplorer.html @@ -33,7 +33,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2
@@ -97,7 +97,7 @@

Viewing results using Diagnostics Explorer

Gowtham Rao

-

2022-12-06

+

2022-12-19

Source: vignettes/ViewingResultsUsingDiagnosticsExplorer.Rmd diff --git a/docs/articles/WhatIsCohortDiagnostics.html b/docs/articles/WhatIsCohortDiagnostics.html index 2e10d13f1..28dcf0f6b 100644 --- a/docs/articles/WhatIsCohortDiagnostics.html +++ b/docs/articles/WhatIsCohortDiagnostics.html @@ -33,7 +33,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 @@ -97,7 +97,7 @@

What is Cohort Diagnostics?

Gowtham Rao

-

2022-12-06

+

2022-12-19

Source: vignettes/WhatIsCohortDiagnostics.Rmd diff --git a/docs/articles/index.html b/docs/articles/index.html index 561bf2513..1b44b4839 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/authors.html b/docs/authors.html index 7d9c1e724..23ae44098 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/index.html b/docs/index.html index 2bb5d9bcd..f996a2927 100644 --- a/docs/index.html +++ b/docs/index.html @@ -39,7 +39,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/news/index.html b/docs/news/index.html index a6b61a274..d57c4df65 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 @@ -72,6 +72,11 @@

Changelog

Source: NEWS.md +
+ +

Bug Fixes:

+
  1. Removed package dependency snapshot capture as it was breaking on newer versions of R
  2. +

Changes:

diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 227a7fe6e..0b8c7f096 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -7,5 +7,5 @@ articles: RunningCohortDiagnostics: RunningCohortDiagnostics.html ViewingResultsUsingDiagnosticsExplorer: ViewingResultsUsingDiagnosticsExplorer.html WhatIsCohortDiagnostics: WhatIsCohortDiagnostics.html -last_built: 2022-12-06T21:26Z +last_built: 2022-12-20T00:46Z diff --git a/docs/reference/CohortDiagnostics-package.html b/docs/reference/CohortDiagnostics-package.html index 117984ced..49e7e7bff 100644 --- a/docs/reference/CohortDiagnostics-package.html +++ b/docs/reference/CohortDiagnostics-package.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2
diff --git a/docs/reference/checkInputFileEncoding.html b/docs/reference/checkInputFileEncoding.html index 188894a1a..65764abf8 100644 --- a/docs/reference/checkInputFileEncoding.html +++ b/docs/reference/checkInputFileEncoding.html @@ -18,7 +18,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/createDiagnosticsExplorerZip.html b/docs/reference/createDiagnosticsExplorerZip.html index c86032d9d..e80a6695b 100644 --- a/docs/reference/createDiagnosticsExplorerZip.html +++ b/docs/reference/createDiagnosticsExplorerZip.html @@ -20,7 +20,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/createMergedResultsFile.html b/docs/reference/createMergedResultsFile.html index 986542882..a9f04e857 100644 --- a/docs/reference/createMergedResultsFile.html +++ b/docs/reference/createMergedResultsFile.html @@ -19,7 +19,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/createResultsDataModel.html b/docs/reference/createResultsDataModel.html index bd171264b..1ef9b5d09 100644 --- a/docs/reference/createResultsDataModel.html +++ b/docs/reference/createResultsDataModel.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/executeDiagnostics.html b/docs/reference/executeDiagnostics.html index 5da955790..c902b770b 100644 --- a/docs/reference/executeDiagnostics.html +++ b/docs/reference/executeDiagnostics.html @@ -22,7 +22,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/getCdmDataSourceInformation.html b/docs/reference/getCdmDataSourceInformation.html index e90a48a1a..cda6a62fb 100644 --- a/docs/reference/getCdmDataSourceInformation.html +++ b/docs/reference/getCdmDataSourceInformation.html @@ -18,7 +18,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/getCohortCounts.html b/docs/reference/getCohortCounts.html index cae29104e..124bebee4 100644 --- a/docs/reference/getCohortCounts.html +++ b/docs/reference/getCohortCounts.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/getDataMigrator.html b/docs/reference/getDataMigrator.html index eb9ed6fb4..a5dc48237 100644 --- a/docs/reference/getDataMigrator.html +++ b/docs/reference/getDataMigrator.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/getDefaultCovariateSettings.html b/docs/reference/getDefaultCovariateSettings.html index cb45443c6..cfa9ea96f 100644 --- a/docs/reference/getDefaultCovariateSettings.html +++ b/docs/reference/getDefaultCovariateSettings.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/getDefaultVocabularyTableNames.html b/docs/reference/getDefaultVocabularyTableNames.html index 8c736f259..e99b3359d 100644 --- a/docs/reference/getDefaultVocabularyTableNames.html +++ b/docs/reference/getDefaultVocabularyTableNames.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/getResultsDataModelSpecifications.html b/docs/reference/getResultsDataModelSpecifications.html index 4e0bcae52..a60460a6c 100644 --- a/docs/reference/getResultsDataModelSpecifications.html +++ b/docs/reference/getResultsDataModelSpecifications.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/index.html b/docs/reference/index.html index d5c87ca1f..efaccf446 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 @@ -135,10 +135,6 @@

All functions runCohortTimeSeriesDiagnostics()

Given a set of instantiated cohorts get time series for the cohorts.

- -

takepackageDependencySnapshot()

- -

Take a snapshot of the R environment

timeExecution()

diff --git a/docs/reference/launchDiagnosticsExplorer.html b/docs/reference/launchDiagnosticsExplorer.html index 8db5887fa..594919ca6 100644 --- a/docs/reference/launchDiagnosticsExplorer.html +++ b/docs/reference/launchDiagnosticsExplorer.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/migrateDataModel.html b/docs/reference/migrateDataModel.html index f662c1c13..49ed48fce 100644 --- a/docs/reference/migrateDataModel.html +++ b/docs/reference/migrateDataModel.html @@ -19,7 +19,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/runCohortRelationshipDiagnostics.html b/docs/reference/runCohortRelationshipDiagnostics.html index a6cdb1028..865811640 100644 --- a/docs/reference/runCohortRelationshipDiagnostics.html +++ b/docs/reference/runCohortRelationshipDiagnostics.html @@ -18,7 +18,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/runCohortTimeSeriesDiagnostics.html b/docs/reference/runCohortTimeSeriesDiagnostics.html index 7cb258d32..a2ee8d540 100644 --- a/docs/reference/runCohortTimeSeriesDiagnostics.html +++ b/docs/reference/runCohortTimeSeriesDiagnostics.html @@ -25,7 +25,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/timeExecution.html b/docs/reference/timeExecution.html index 3453e1e6b..4660120fb 100644 --- a/docs/reference/timeExecution.html +++ b/docs/reference/timeExecution.html @@ -17,7 +17,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/docs/reference/uploadResults.html b/docs/reference/uploadResults.html index cd3b0e2c4..c1e45f2a5 100644 --- a/docs/reference/uploadResults.html +++ b/docs/reference/uploadResults.html @@ -19,7 +19,7 @@ CohortDiagnostics - 3.1.1 + 3.1.2 diff --git a/extras/CohortDiagnostics.pdf b/extras/CohortDiagnostics.pdf index 289499bd8fb9984233111d29c22564de7572251b..3a6f10116f38aa0ec144245ea08ab3d114301487 100644 GIT binary patch delta 19772 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 Gg#HcI;f8}F|IAU-;27nYzK!{%m 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 delta 65892 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 Cx--oH diff --git a/inst/doc/ViewingResultsUsingDiagnosticsExplorer.pdf b/inst/doc/ViewingResultsUsingDiagnosticsExplorer.pdf index 73992ab5b134138f4afecc3b37acf3fc0cba4117..ba9aa38a22b9570d5aa011020045415b0170d7a3 100644 GIT binary patch delta 27044 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 diff --git a/inst/doc/WhatIsCohortDiagnostics.pdf b/inst/doc/WhatIsCohortDiagnostics.pdf index 6fb627c36fb18bec6f499810763860fe275a7984..5802d638c336d9f885d4f37aa436fe2ff432f3ee 100644 GIT binary patch delta 25829 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 delta 25918 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 dplyr::filter(cohortId %in% cohortIds) } - + cohortDefinitionSet$checksum <- computeChecksum(cohortDefinitionSet$sql) return(cohortDefinitionSet) @@ -86,7 +85,9 @@ createTestShinyDb <- function(connectionDetails = Eunomia::getEunomiaConnectionD incremental = FALSE ) - createMergedResultsFile(dataFolder = file.path(folder, "export"), - sqliteDbPath = outputPath, - overwrite = TRUE) + createMergedResultsFile( + dataFolder = file.path(folder, "export"), + sqliteDbPath = outputPath, + overwrite = TRUE + ) } diff --git a/tests/testthat/setup.R b/tests/testthat/setup.R index 799c3017c..ca43ec520 100644 --- a/tests/testthat/setup.R +++ b/tests/testthat/setup.R @@ -32,7 +32,7 @@ skipCdmTests <- FALSE if (dbms == "sqlite") { connectionDetails <- Eunomia::getEunomiaConnectionDetails(databaseFile = "testEunomia.sqlite") - withr::defer( + withr::defer( { unlink("testEunomia.sqlite", recursive = TRUE, force = TRUE) }, diff --git a/tests/testthat/test-Characterization.R b/tests/testthat/test-Characterization.R index 8690ad8e7..271b7af50 100644 --- a/tests/testthat/test-Characterization.R +++ b/tests/testthat/test-Characterization.R @@ -5,7 +5,7 @@ test_that("Execute and export characterization", { with_dbc_connection(tConnection, { exportFolder <- tempfile() - recordKeepingFile <- tempfile(fileext="csv") + recordKeepingFile <- tempfile(fileext = "csv") dir.create(exportFolder) on.exit(unlink(exportFolder), add = TRUE) cohortTableNames <- CohortGenerator::getCohortTableNames(cohortTable = cohortTable) @@ -17,16 +17,22 @@ test_that("Execute and export characterization", { incremental = FALSE ) - on.exit({ - CohortGenerator::dropCohortStatsTables(connection = tConnection, - cohortDatabaseSchema = cohortDatabaseSchema, - cohortTableNames = cohortTableNames) + on.exit( + { + CohortGenerator::dropCohortStatsTables( + connection = tConnection, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTableNames = cohortTableNames + ) - DatabaseConnector::renderTranslateExecuteSql(tConnection, - "DROP TABLE @cohortDatabaseSchema.@cohortTable", - cohortDatabaseSchema = cohortDatabaseSchema, - cohortTable = cohortTable) - }, add = TRUE) + DatabaseConnector::renderTranslateExecuteSql(tConnection, + "DROP TABLE @cohortDatabaseSchema.@cohortTable", + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTable = cohortTable + ) + }, + add = TRUE + ) # Generate the cohort set CohortGenerator::generateCohortSet( @@ -50,34 +56,36 @@ test_that("Execute and export characterization", { ) checkmate::expect_file_exists(file.path(exportFolder, "cohort_count.csv")) - executeCohortCharacterization(connection = tConnection, - databaseId = "Testdb", - exportFolder = exportFolder, - cdmDatabaseSchema = cdmDatabaseSchema, - cohortDatabaseSchema = cohortDatabaseSchema, - cohortTable = cohortTable, - covariateSettings = temporalCovariateSettings, - tempEmulationSchema = tempEmulationSchema, - cdmVersion = 5, - cohorts = cohortDefinitionSet[1:3,], - cohortCounts = cohortCounts, - minCellCount = 5, - instantiatedCohorts = cohortDefinitionSet$cohortId, - incremental = TRUE, - recordKeepingFile = recordKeepingFile, - task = "runTemporalCohortCharacterization", - jobName = "Temporal Cohort characterization") - + executeCohortCharacterization( + connection = tConnection, + databaseId = "Testdb", + exportFolder = exportFolder, + cdmDatabaseSchema = cdmDatabaseSchema, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTable = cohortTable, + covariateSettings = temporalCovariateSettings, + tempEmulationSchema = tempEmulationSchema, + cdmVersion = 5, + cohorts = cohortDefinitionSet[1:3, ], + cohortCounts = cohortCounts, + minCellCount = 5, + instantiatedCohorts = cohortDefinitionSet$cohortId, + incremental = TRUE, + recordKeepingFile = recordKeepingFile, + task = "runTemporalCohortCharacterization", + jobName = "Temporal Cohort characterization" + ) + # Check all files are created checkmate::expect_file_exists(file.path(exportFolder, "temporal_covariate_ref.csv")) checkmate::expect_file_exists(file.path(exportFolder, "temporal_analysis_ref.csv")) checkmate::expect_file_exists(file.path(exportFolder, "temporal_covariate_value.csv")) checkmate::expect_file_exists(file.path(exportFolder, "temporal_covariate_value_dist.csv")) checkmate::expect_file_exists(file.path(exportFolder, "temporal_time_ref.csv")) - + recordKeepingFileData <- readr::read_csv(file = recordKeepingFile, col_types = readr::cols()) testthat::expect_equal(object = nrow(recordKeepingFileData), expected = 3) - + # check if subset works subset <- subsetToRequiredCohorts( cohorts = cohortDefinitionSet, @@ -85,43 +93,46 @@ test_that("Execute and export characterization", { incremental = TRUE, recordKeepingFile = recordKeepingFile ) - - #should not have the cohorts that were previously run - testthat::expect_equal(object = nrow(subset %>% - dplyr::filter( - cohortId %in% c(cohortDefinitionSet[1:3, ]$cohortId) - )), - expected = 0) - + + # should not have the cohorts that were previously run + testthat::expect_equal( + object = nrow(subset %>% + dplyr::filter( + cohortId %in% c(cohortDefinitionSet[1:3, ]$cohortId) + )), + expected = 0 + ) + # finish the rest of characterization - executeCohortCharacterization(connection = tConnection, - databaseId = "Testdb", - exportFolder = exportFolder, - cdmDatabaseSchema = cdmDatabaseSchema, - cohortDatabaseSchema = cohortDatabaseSchema, - cohortTable = cohortTable, - covariateSettings = temporalCovariateSettings, - tempEmulationSchema = tempEmulationSchema, - cdmVersion = 5, - cohorts = cohortDefinitionSet, - cohortCounts = cohortCounts, - minCellCount = 5, - instantiatedCohorts = cohortDefinitionSet$cohortId, - incremental = TRUE, - recordKeepingFile = recordKeepingFile, - task = "runTemporalCohortCharacterization", - jobName = "Temporal Cohort characterization") - + executeCohortCharacterization( + connection = tConnection, + databaseId = "Testdb", + exportFolder = exportFolder, + cdmDatabaseSchema = cdmDatabaseSchema, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTable = cohortTable, + covariateSettings = temporalCovariateSettings, + tempEmulationSchema = tempEmulationSchema, + cdmVersion = 5, + cohorts = cohortDefinitionSet, + cohortCounts = cohortCounts, + minCellCount = 5, + instantiatedCohorts = cohortDefinitionSet$cohortId, + incremental = TRUE, + recordKeepingFile = recordKeepingFile, + task = "runTemporalCohortCharacterization", + jobName = "Temporal Cohort characterization" + ) + # Check no time ids are NA/NULL tdata <- readr::read_csv(file.path(exportFolder, "temporal_covariate_value_dist.csv")) expect_false(any(is.na(tdata$time_id) | is.null(tdata$time_id))) - + tdata <- readr::read_csv(file.path(exportFolder, "temporal_covariate_value.csv")) expect_false(any(is.na(tdata$time_id) | is.null(tdata$time_id))) - + # It would make no sense if there were NA values here tdata <- readr::read_csv(file.path(exportFolder, "temporal_time_ref.csv")) expect_false(any(is.na(tdata$time_id) | is.null(tdata$time_id))) - }) }) diff --git a/tests/testthat/test-DatabaseMigrations.R b/tests/testthat/test-DatabaseMigrations.R index 5459eee6f..1df57f481 100644 --- a/tests/testthat/test-DatabaseMigrations.R +++ b/tests/testthat/test-DatabaseMigrations.R @@ -1,20 +1,22 @@ if (dbms == "postgresql") { - resultsDatabaseSchema <- paste0("r", - gsub("[: -]", "", Sys.time(), perl = TRUE), - sample(1:100, 1)) + resultsDatabaseSchema <- paste0( + "r", + gsub("[: -]", "", Sys.time(), perl = TRUE), + sample(1:100, 1) + ) # Always clean up withr::defer( - { - pgConnection <- DatabaseConnector::connect(connectionDetails = connectionDetails) - sql <- "DROP SCHEMA IF EXISTS @resultsDatabaseSchema CASCADE;" - DatabaseConnector::renderTranslateExecuteSql( - sql = sql, - resultsDatabaseSchema = resultsDatabaseSchema, - connection = pgConnection - ) - DatabaseConnector::disconnect(pgConnection) - }, + { + pgConnection <- DatabaseConnector::connect(connectionDetails = connectionDetails) + sql <- "DROP SCHEMA IF EXISTS @resultsDatabaseSchema CASCADE;" + DatabaseConnector::renderTranslateExecuteSql( + sql = sql, + resultsDatabaseSchema = resultsDatabaseSchema, + connection = pgConnection + ) + DatabaseConnector::disconnect(pgConnection) + }, testthat::teardown_env() ) } @@ -27,34 +29,42 @@ test_that("Database Migrations execute without error", { if (dbms == "postgresql") { sql <- "CREATE SCHEMA @resultsDatabaseSchema;" - DatabaseConnector::renderTranslateExecuteSql(sql = sql, - resultsDatabaseSchema = resultsDatabaseSchema, - connection = connection) + DatabaseConnector::renderTranslateExecuteSql( + sql = sql, + resultsDatabaseSchema = resultsDatabaseSchema, + connection = connection + ) } else { resultsDatabaseSchema <- "main" } - migrator <- getDataMigrator(connectionDetails = connectionDetails, - databaseSchema = resultsDatabaseSchema, - tablePrefix = "cd_") + migrator <- getDataMigrator( + connectionDetails = connectionDetails, + databaseSchema = resultsDatabaseSchema, + tablePrefix = "cd_" + ) expect_true(migrator$check()) - .createDataModel(connection = connection, - databaseSchema = resultsDatabaseSchema, - tablePrefix = "cd_") + .createDataModel( + connection = connection, + databaseSchema = resultsDatabaseSchema, + tablePrefix = "cd_" + ) expect_false(all(migrator$getStatus()$executed)) - migrateDataModel(connectionDetails = connectionDetails, - databaseSchema = resultsDatabaseSchema, - tablePrefix = "cd_") + migrateDataModel( + connectionDetails = connectionDetails, + databaseSchema = resultsDatabaseSchema, + tablePrefix = "cd_" + ) expect_true(all(migrator$getStatus()$executed)) ## Reruning migrations should not cause an error - migrateDataModel(connectionDetails = connectionDetails, - databaseSchema = resultsDatabaseSchema, - tablePrefix = "cd_") - + migrateDataModel( + connectionDetails = connectionDetails, + databaseSchema = resultsDatabaseSchema, + tablePrefix = "cd_" + ) }) - diff --git a/tests/testthat/test-ResultsDataModel.R b/tests/testthat/test-ResultsDataModel.R index 7a0af1790..afa790962 100644 --- a/tests/testthat/test-ResultsDataModel.R +++ b/tests/testthat/test-ResultsDataModel.R @@ -296,12 +296,12 @@ test_that("No database file fails upload", { DatabaseConnector::createZipFile(testZipFile, "cohorts/CohortsToCreate.csv") expect_error( - uploadResults( + uploadResults( connectionDetails = connectionDetails, schema = "main", zipFileName = testZipFile, tablePrefix = "cd_" ), - regexp ="database metadata file not found - cannot upload results" + regexp = "database metadata file not found - cannot upload results" ) }) diff --git a/tests/testthat/test-againstCdm.R b/tests/testthat/test-againstCdm.R index ecb45fbef..54a2107ba 100644 --- a/tests/testthat/test-againstCdm.R +++ b/tests/testthat/test-againstCdm.R @@ -95,10 +95,11 @@ test_that("Cohort diagnostics in incremental mode", { } ## Repeat tests with incremental set to false to ensure better code coverage - withr::with_options(list("CohortDiagnostics-TimeSeries-batch-size" = 1, - "CohortDiagnostics-FE-batch-size" = 1, - "CohortDiagnostics-Relationships-batch-size" = 50), - { + withr::with_options(list( + "CohortDiagnostics-TimeSeries-batch-size" = 1, + "CohortDiagnostics-FE-batch-size" = 1, + "CohortDiagnostics-Relationships-batch-size" = 50 + ), { executeDiagnostics( connectionDetails = connectionDetails, cdmDatabaseSchema = cdmDatabaseSchema, diff --git a/tests/testthat/test-moduleCohortRelationship.R b/tests/testthat/test-moduleCohortRelationship.R index 25d317fd4..8b07d5636 100644 --- a/tests/testthat/test-moduleCohortRelationship.R +++ b/tests/testthat/test-moduleCohortRelationship.R @@ -1,20 +1,20 @@ test_that("Testing executeCohortRelationshipDiagnostics", { skip_if(skipCdmTests, "cdm settings not configured") - + # manually create cohort table and load to table # for the logic to work - there has to be some overlap of the comparator cohort over target cohort # note - we will not be testing offset in this test. it is expected to work as it is a simple substraction - + temporalStartDays <- c(0) temporalEndDays <- c(0) - + targetCohort <- dplyr::tibble( cohortDefinitionId = c(1), subjectId = c(1), cohortStartDate = c(as.Date("1900-01-15")), cohortEndDate = c(as.Date("1900-01-31")) ) # target cohort always one row - + comparatorCohort <- # all records here overlap with targetCohort dplyr::tibble( cohortDefinitionId = c(10, 10, 10), @@ -32,7 +32,7 @@ test_that("Testing executeCohortRelationshipDiagnostics", { as.Date("1900-01-31") ) ) - + cohort <- dplyr::bind_rows( targetCohort, comparatorCohort, @@ -41,16 +41,16 @@ test_that("Testing executeCohortRelationshipDiagnostics", { comparatorCohort %>% dplyr::mutate(cohortDefinitionId = 20) ) - + connectionCohortRelationship <- DatabaseConnector::connect(connectionDetails) - + # to do - with incremental = FALSE with_dbc_connection(connectionCohortRelationship, { sysTime <- as.numeric(Sys.time()) * 100000 tableName <- paste0("cr", sysTime) observationTableName <- paste0("op", sysTime) - + DatabaseConnector::insertTable( connection = connectionCohortRelationship, databaseSchema = cohortDatabaseSchema, @@ -62,7 +62,7 @@ test_that("Testing executeCohortRelationshipDiagnostics", { camelCaseToSnakeCase = TRUE, progressBar = FALSE ) - + cohortDefinitionSet <- cohort %>% dplyr::select(cohortDefinitionId) %>% @@ -78,20 +78,26 @@ test_that("Testing executeCohortRelationshipDiagnostics", { ) ))) %>% dplyr::ungroup() %>% - dplyr::mutate(sql = json, - checksum = CohortDiagnostics:::computeChecksum(json)) - - + dplyr::mutate( + sql = json, + checksum = CohortDiagnostics:::computeChecksum(json) + ) + + exportFolder <- tempdir() exportFile <- tempfile() - - unlink(x = exportFolder, - recursive = TRUE, - force = TRUE) - dir.create(path = exportFolder, - showWarnings = FALSE, - recursive = TRUE) - + + unlink( + x = exportFolder, + recursive = TRUE, + force = TRUE + ) + dir.create( + path = exportFolder, + showWarnings = FALSE, + recursive = TRUE + ) + CohortDiagnostics:::executeCohortRelationshipDiagnostics( connection = connectionCohortRelationship, databaseId = "testDataSourceName", @@ -111,16 +117,18 @@ test_that("Testing executeCohortRelationshipDiagnostics", { incremental = TRUE, batchSize = 2 ) - + recordKeepingFileData <- - readr::read_csv(file = paste0(exportFile, "recordKeeping"), - col_types = readr::cols()) - + readr::read_csv( + file = paste0(exportFile, "recordKeeping"), + col_types = readr::cols() + ) + # testing if check sum if written to field called targetChecksum testthat::expect_true("targetChecksum" %in% colnames(recordKeepingFileData)) testthat::expect_true("comparatorChecksum" %in% colnames(recordKeepingFileData)) testthat::expect_true("checksum" %in% colnames(recordKeepingFileData)) - + testthat::expect_equal( object = recordKeepingFileData %>% dplyr::filter(cohortId == 1) %>% @@ -131,22 +139,26 @@ test_that("Testing executeCohortRelationshipDiagnostics", { dplyr::filter(cohortId == 1) %>% dplyr::filter(comparatorId == 10) %>% dplyr::mutate( - checksum2 = paste0(targetChecksum, - comparatorChecksum) + checksum2 = paste0( + targetChecksum, + comparatorChecksum + ) ) %>% dplyr::pull(checksum2) ) - - - + + + ## testing if subset works - allCohortIds <- cohortDefinitionSet %>% + allCohortIds <- cohortDefinitionSet %>% dplyr::filter(cohortId %in% c(1, 10, 2)) %>% dplyr::select(cohortId, checksum) %>% - dplyr::rename(targetCohortId = cohortId, - targetChecksum = checksum) %>% + dplyr::rename( + targetCohortId = cohortId, + targetChecksum = checksum + ) %>% dplyr::distinct() - + combinationsOfPossibleCohortRelationships <- allCohortIds %>% tidyr::crossing( allCohortIds %>% @@ -158,34 +170,36 @@ test_that("Testing executeCohortRelationshipDiagnostics", { dplyr::filter(targetCohortId != comparatorCohortId) %>% dplyr::arrange(targetCohortId, comparatorCohortId) %>% dplyr::mutate(checksum = paste0(targetChecksum, comparatorChecksum)) - + subset <- CohortDiagnostics:::subsetToRequiredCombis( combis = combinationsOfPossibleCohortRelationships, task = "runCohortRelationship", incremental = TRUE, recordKeepingFile = paste0(exportFile, "recordKeeping") ) %>% dplyr::tibble() - + ### subset should not have the combinations in record keeping file shouldBeDfOfZeroRows <- subset %>% dplyr::inner_join( recordKeepingFileData %>% - dplyr::select(cohortId, - comparatorId) %>% + dplyr::select( + cohortId, + comparatorId + ) %>% dplyr::rename( targetCohortId = cohortId, comparatorCohortId = comparatorId ), by = c("targetCohortId", "comparatorCohortId") ) - + testthat::expect_equal( object = nrow(shouldBeDfOfZeroRows), expected = 0, info = "Looks like subset and record keeping file did not match." ) - - + + ## running again by adding cohort 2, to previously run 1 and 10 CohortDiagnostics:::executeCohortRelationshipDiagnostics( connection = connectionCohortRelationship, @@ -206,36 +220,44 @@ test_that("Testing executeCohortRelationshipDiagnostics", { incremental = TRUE, batchSize = 2 ) - + recordKeepingFileData2 <- - readr::read_csv(file = paste0(exportFile, "recordKeeping"), - col_types = readr::cols()) + readr::read_csv( + file = paste0(exportFile, "recordKeeping"), + col_types = readr::cols() + ) # record keeping file should have 6 combinations - for 3 cohorts - testthat::expect_equal(object = nrow(recordKeepingFileData2), - expected = 3 * 2 * 1) - - #record keeping file should have 4 additional combinations + testthat::expect_equal( + object = nrow(recordKeepingFileData2), + expected = 3 * 2 * 1 + ) + + # record keeping file should have 4 additional combinations testthat::expect_equal( object = recordKeepingFileData2 %>% dplyr::anti_join( recordKeepingFileData %>% - dplyr::select(cohortId, - comparatorId), + dplyr::select( + cohortId, + comparatorId + ), by = c("cohortId", "comparatorId") ) %>% nrow(), expected = 4 ) - + # check what happens for an unrelated cohort combination - allCohortIds <- cohortDefinitionSet %>% + allCohortIds <- cohortDefinitionSet %>% dplyr::filter(cohortId %in% c(2, 20)) %>% dplyr::select(cohortId, checksum) %>% - dplyr::rename(targetCohortId = cohortId, - targetChecksum = checksum) %>% + dplyr::rename( + targetCohortId = cohortId, + targetChecksum = checksum + ) %>% dplyr::distinct() - + combinationsOfPossibleCohortRelationships <- allCohortIds %>% tidyr::crossing( allCohortIds %>% @@ -247,34 +269,34 @@ test_that("Testing executeCohortRelationshipDiagnostics", { dplyr::filter(targetCohortId != comparatorCohortId) %>% dplyr::arrange(targetCohortId, comparatorCohortId) %>% dplyr::mutate(checksum = paste0(targetChecksum, comparatorChecksum)) - + subset <- CohortDiagnostics:::subsetToRequiredCombis( combis = combinationsOfPossibleCohortRelationships, task = "runCohortRelationship", incremental = TRUE, recordKeepingFile = paste0(exportFile, "recordKeeping") ) %>% dplyr::tibble() - + ### subset should be two rows in subsets that are not in record keeping file shouldBeTwoRows <- subset %>% dplyr::anti_join( recordKeepingFileData2 %>% - dplyr::select(cohortId, - comparatorId) %>% + dplyr::select( + cohortId, + comparatorId + ) %>% dplyr::rename( targetCohortId = cohortId, comparatorCohortId = comparatorId ), by = c("targetCohortId", "comparatorCohortId") ) - + testthat::expect_equal( object = nrow(shouldBeTwoRows), expected = 2, info = "Looks like subset and record keeping file did not match, Two new cohorts should have run." ) - - }) }) diff --git a/tests/testthat/test-moduleTimeSeries.R b/tests/testthat/test-moduleTimeSeries.R index fa238d77c..e60d299a5 100644 --- a/tests/testthat/test-moduleTimeSeries.R +++ b/tests/testthat/test-moduleTimeSeries.R @@ -1,9 +1,9 @@ test_that("Testing cohort time series execution", { skip_if(skipCdmTests, "cdm settings not configured") - + connectionTimeSeries <- DatabaseConnector::connect(connectionDetails) - + # to do - with incremental = FALSE with_dbc_connection(connectionTimeSeries, { cohort <- dplyr::tibble( @@ -22,11 +22,13 @@ test_that("Testing cohort time series execution", { as.Date("2005-09-15") ) ) - - cohort <- dplyr::bind_rows(cohort, - cohort %>% - dplyr::mutate(cohortDefinitionId = cohortDefinitionId * 1000)) - + + cohort <- dplyr::bind_rows( + cohort, + cohort %>% + dplyr::mutate(cohortDefinitionId = cohortDefinitionId * 1000) + ) + cohortDefinitionSet <- cohort %>% dplyr::select(cohortDefinitionId) %>% @@ -42,25 +44,33 @@ test_that("Testing cohort time series execution", { ) ))) %>% dplyr::ungroup() %>% - dplyr::mutate(sql = json, - checksum = as.character(CohortDiagnostics:::computeChecksum(json))) %>% + dplyr::mutate( + sql = json, + checksum = as.character(CohortDiagnostics:::computeChecksum(json)) + ) %>% dplyr::ungroup() - + exportFolder <- tempdir() exportFile <- tempfile() - - unlink(x = exportFolder, - recursive = TRUE, - force = TRUE) - dir.create(path = exportFolder, - showWarnings = FALSE, - recursive = TRUE) - + + unlink( + x = exportFolder, + recursive = TRUE, + force = TRUE + ) + dir.create( + path = exportFolder, + showWarnings = FALSE, + recursive = TRUE + ) + cohortTable <- - paste0("ct_", - gsub("[: -]", "", Sys.time(), perl = TRUE), - sample(1:100, 1)) - + paste0( + "ct_", + gsub("[: -]", "", Sys.time(), perl = TRUE), + sample(1:100, 1) + ) + DatabaseConnector::insertTable( connection = connectionTimeSeries, databaseSchema = cohortDatabaseSchema, @@ -72,7 +82,7 @@ test_that("Testing cohort time series execution", { camelCaseToSnakeCase = TRUE, progressBar = FALSE ) - + CohortDiagnostics:::executeTimeSeriesDiagnostics( connection = connectionTimeSeries, tempEmulationSchema = tempEmulationSchema, @@ -95,21 +105,23 @@ test_that("Testing cohort time series execution", { ), batchSize = 1 ) - + recordKeepingFileData <- - readr::read_csv(file = paste0(exportFile, "recordKeeping"), - col_types = readr::cols()) - + readr::read_csv( + file = paste0(exportFile, "recordKeeping"), + col_types = readr::cols() + ) + # testing if check sum is written testthat::expect_true("checksum" %in% colnames(recordKeepingFileData)) - + # result timeSeriesResults1 <- readr::read_csv( file = file.path(exportFolder, "time_series.csv"), col_types = readr::cols() ) - + subset <- CohortDiagnostics:::subsetToRequiredCohorts( cohorts = cohortDefinitionSet, task = "runCohortTimeSeries", @@ -117,18 +129,20 @@ test_that("Testing cohort time series execution", { recordKeepingFile = paste0(exportFile, "recordKeeping") ) %>% dplyr::arrange(cohortId) - - testthat::expect_equal(object = subset$cohortId, - expected = c(1000, 2000)) - - + + testthat::expect_equal( + object = subset$cohortId, + expected = c(1000, 2000) + ) + + # delete the previously written results file. To see if the previously executed cohorts will have results after deletion unlink( x = file.path(exportFolder, "time_series.csv"), recursive = TRUE, force = TRUE ) - + CohortDiagnostics:::executeTimeSeriesDiagnostics( connection = connectionTimeSeries, tempEmulationSchema = tempEmulationSchema, @@ -155,12 +169,11 @@ test_that("Testing cohort time series execution", { file = file.path(exportFolder, "time_series.csv"), col_types = readr::cols() ) - + testthat::expect_equal( object = resultsNew$cohort_id %>% unique() %>% sort(), expected = c(1000, 2000) ) - }) }) @@ -175,7 +188,6 @@ test_that("Testing time series logic", { # to do - with incremental = FALSE with_dbc_connection(connectionTimeSeries, { - # manually create cohort table and load to table # Cohort table has a total of four records, with each cohort id having two each # cohort 1 has one subject with two different cohort entries @@ -250,28 +262,32 @@ test_that("Testing time series logic", { test_that("Testing Data source time series execution", { skip_if(skipCdmTests, "cdm settings not configured") - + connectionTimeSeries <- DatabaseConnector::connect(connectionDetails) - + # to do - with incremental = FALSE with_dbc_connection(connectionTimeSeries, { - cohortDefinitionSet = dplyr::tibble( + cohortDefinitionSet <- dplyr::tibble( cohortId = -44819062, # cohort id is identified by an omop concept id https://athena.ohdsi.org/search-terms/terms/44819062 checksum = CohortDiagnostics:::computeChecksum(column = "data source time series") ) - + exportFolder <- tempdir() exportFile <- tempfile() - - unlink(x = exportFolder, - recursive = TRUE, - force = TRUE) - dir.create(path = exportFolder, - showWarnings = FALSE, - recursive = TRUE) - + + unlink( + x = exportFolder, + recursive = TRUE, + force = TRUE + ) + dir.create( + path = exportFolder, + showWarnings = FALSE, + recursive = TRUE + ) + executeTimeSeriesDiagnostics( connection = connectionTimeSeries, tempEmulationSchema = tempEmulationSchema, @@ -290,22 +306,24 @@ test_that("Testing Data source time series execution", { observationPeriodMaxDate = as.Date("2007-12-31") ) ) - + recordKeepingFileData <- - readr::read_csv(file = paste0(exportFile, "recordKeeping"), - col_types = readr::cols()) - + readr::read_csv( + file = paste0(exportFile, "recordKeeping"), + col_types = readr::cols() + ) + # testing if check sum is written testthat::expect_true("checksum" %in% colnames(recordKeepingFileData)) testthat::expect_equal(object = recordKeepingFileData$cohortId, expected = -44819062) - + # result dataSourceTimeSeriesResult <- readr::read_csv( file = file.path(exportFolder, "time_series.csv"), col_types = readr::cols() ) - + subset <- subsetToRequiredCohorts( cohorts = cohortDefinitionSet, task = "runDataSourceTimeSeries", @@ -313,9 +331,10 @@ test_that("Testing Data source time series execution", { recordKeepingFile = paste0(exportFile, "recordKeeping") ) %>% dplyr::arrange(cohortId) - - testthat::expect_equal(object = nrow(subset), - expected = 0) + + testthat::expect_equal( + object = nrow(subset), + expected = 0 + ) }) }) - diff --git a/vignettes/CreatingAStudyPackage.Rmd b/vignettes/CreatingAStudyPackage.Rmd index 8e695ec21..5794b1442 100644 --- a/vignettes/CreatingAStudyPackage.Rmd +++ b/vignettes/CreatingAStudyPackage.Rmd @@ -20,7 +20,8 @@ knitr::opts_chunk$set( cache = FALSE, comment = "#>", error = FALSE, - tidy = FALSE) + tidy = FALSE +) ``` # Introduction @@ -68,7 +69,7 @@ The skeleton cohort diagnostics study package is [here](https://github.com/OHDSI # please ensure you have the latest version of Hydra. As of 08/13/2021 - CohortDiagnostics support for Hydra is still in develop branch. # please check hydra release notes and update hydra remotes::install_github("OHDSI/Hydra", ref = "develop") -outputFolder <- "d:/temp/output" # location where you study package will be created +outputFolder <- "d:/temp/output" # location where you study package will be created ########## Please populate the information below ##################### @@ -90,62 +91,68 @@ library(magrittr) baseUrl <- Sys.getenv("baseUrl") # if you have security enabled, please authorize the use - example below # ROhdsiWebApi::authorizeWebApi(baseUrl, 'windows') -cohortIds <- c(22040, - 22042, - 22041, - 22039, - 22038, - 22037, - 22036, - 22035, - 22034, - 22033, - 22031, - 22032, - 22030, - 22028, - 22029) +cohortIds <- c( + 22040, + 22042, + 22041, + 22039, + 22038, + 22037, + 22036, + 22035, + 22034, + 22033, + 22031, + 22032, + 22030, + 22028, + 22029 +) ################# end of user input ############## webApiCohorts <- ROhdsiWebApi::getCohortDefinitionsMetaData(baseUrl = baseUrl) -studyCohorts <- webApiCohorts %>% - dplyr::filter(.data$id %in% cohortIds) +studyCohorts <- webApiCohorts %>% + dplyr::filter(.data$id %in% cohortIds) # compile them into a data table cohortDefinitionsArray <- list() for (i in (1:nrow(studyCohorts))) { - cohortDefinition <- - ROhdsiWebApi::getCohortDefinition(cohortId = studyCohorts$id[[i]], - baseUrl = baseUrl) - cohortDefinitionsArray[[i]] <- list( - id = studyCohorts$id[[i]], - createdDate = studyCohorts$createdDate[[i]], - modifiedDate = studyCohorts$createdDate[[i]], - logicDescription = studyCohorts$description[[i]], - name = stringr::str_trim(stringr::str_squish(cohortDefinition$name)), - expression = cohortDefinition$expression - ) + cohortDefinition <- + ROhdsiWebApi::getCohortDefinition( + cohortId = studyCohorts$id[[i]], + baseUrl = baseUrl + ) + cohortDefinitionsArray[[i]] <- list( + id = studyCohorts$id[[i]], + createdDate = studyCohorts$createdDate[[i]], + modifiedDate = studyCohorts$createdDate[[i]], + logicDescription = studyCohorts$description[[i]], + name = stringr::str_trim(stringr::str_squish(cohortDefinition$name)), + expression = cohortDefinition$expression + ) } tempFolder <- tempdir() unlink(x = tempFolder, recursive = TRUE, force = TRUE) dir.create(path = tempFolder, showWarnings = FALSE, recursive = TRUE) -specifications <- list(id = 1, - version = version, - name = name, - packageName = packageName, - skeletonVersion = skeletonVersion, - createdBy = createdBy, - createdDate = createdDate, - modifiedBy = modifiedBy, - modifiedDate = modifiedDate, - skeletonType = skeletonType, - organizationName = organizationName, - description = description, - cohortDefinitions = cohortDefinitionsArray) +specifications <- list( + id = 1, + version = version, + name = name, + packageName = packageName, + skeletonVersion = skeletonVersion, + createdBy = createdBy, + createdDate = createdDate, + modifiedBy = modifiedBy, + modifiedDate = modifiedDate, + skeletonType = skeletonType, + organizationName = organizationName, + description = description, + cohortDefinitions = cohortDefinitionsArray +) jsonFileName <- paste0(file.path(tempFolder, "CohortDiagnosticsSpecs.json")) write(x = specifications %>% RJSONIO::toJSON(pretty = TRUE, digits = 23), file = jsonFileName) @@ -162,13 +169,13 @@ write(x = specifications %>% RJSONIO::toJSON(pretty = TRUE, digits = 23), file = #### get the skeleton from github # download.file(url = "https://github.com/OHDSI/SkeletonCohortDiagnosticsStudy/archive/refs/heads/main.zip", # destfile = file.path(tempFolder, 'skeleton.zip')) -# unzip(zipfile = file.path(tempFolder, 'skeleton.zip'), +# unzip(zipfile = file.path(tempFolder, 'skeleton.zip'), # overwrite = TRUE, # exdir = file.path(tempFolder, "skeleton") # ) # fileList <- list.files(path = file.path(tempFolder, "skeleton"), full.names = TRUE, recursive = TRUE, all.files = TRUE) -# DatabaseConnector::createZipFile(zipFile = file.path(tempFolder, 'skeleton.zip'), -# files = fileList, +# DatabaseConnector::createZipFile(zipFile = file.path(tempFolder, 'skeleton.zip'), +# files = fileList, # rootFolder = list.dirs(file.path(tempFolder, 'skeleton'), recursive = FALSE)) ############################################################## @@ -183,17 +190,17 @@ write(x = specifications %>% RJSONIO::toJSON(pretty = TRUE, digits = 23), file = hydraSpecificationFromFile <- Hydra::loadSpecifications(fileName = jsonFileName) unlink(x = outputFolder, recursive = TRUE) dir.create(path = outputFolder, showWarnings = FALSE, recursive = TRUE) -Hydra::hydrate(specifications = hydraSpecificationFromFile, - outputFolder = outputFolder +Hydra::hydrate( + specifications = hydraSpecificationFromFile, + outputFolder = outputFolder ) # for advanced user using skeletons outside of Hydra # Hydra::hydrate(specifications = hydraSpecificationFromFile, -# outputFolder = outputFolder, +# outputFolder = outputFolder, # skeletonFileName = file.path(tempFolder, 'skeleton.zip') # ) unlink(x = tempFolder, recursive = TRUE, force = TRUE) - ``` diff --git a/vignettes/DatabaseModeInDiagnosticsExplorer.Rmd b/vignettes/DatabaseModeInDiagnosticsExplorer.Rmd index 8b6b5d195..f47afb438 100644 --- a/vignettes/DatabaseModeInDiagnosticsExplorer.Rmd +++ b/vignettes/DatabaseModeInDiagnosticsExplorer.Rmd @@ -20,7 +20,8 @@ knitr::opts_chunk$set( cache = FALSE, comment = "#>", error = FALSE, - tidy = FALSE) + tidy = FALSE +) ``` # Database mode @@ -70,4 +71,4 @@ databaseTableName: "database" # If you wish to enable annotation - not currently reccomended in multi-user environments enableAnnotation: FALSE enableAuthorization: FALSE -``` \ No newline at end of file +``` diff --git a/vignettes/RunningCohortDiagnostics.Rmd b/vignettes/RunningCohortDiagnostics.Rmd index 68eb10025..b4926203c 100644 --- a/vignettes/RunningCohortDiagnostics.Rmd +++ b/vignettes/RunningCohortDiagnostics.Rmd @@ -20,12 +20,12 @@ knitr::opts_chunk$set( cache = FALSE, comment = "#>", error = FALSE, - tidy = FALSE) + tidy = FALSE +) # Temp folders used to run the example exportFolder <- tempfile("CohortDiagnosticsTestExport") inclusionStatisticsFolder <- tempfile("inclusionStats") - ``` # Introduction This vignette discusses the process of generating a results set with `CohortDiagnostics` starting with cohort generation. @@ -37,8 +37,8 @@ For this example we will also be using the `Eunomia` test package. Optionally, you may install the `ROhdsiWebApi` package to download cohort definitions from an ATLAS instance: ```{r eval=FALSE} -remotes::install_github('OHDSI/Eunomia') -remotes::install_github('OHDSI/ROhdsiWebApi') +remotes::install_github("OHDSI/Eunomia") +remotes::install_github("OHDSI/ROhdsiWebApi") ``` # Configuring the connection to the server @@ -48,10 +48,12 @@ We need to tell R how to connect to the server where the data are. `CohortDiagno ```{r tidy=FALSE,eval=FALSE} library(CohortDiagnostics) -connectionDetails <- createConnectionDetails(dbms = "postgresql", - server = "localhost/ohdsi", - user = "joe", - password = "supersecret") +connectionDetails <- createConnectionDetails( + dbms = "postgresql", + server = "localhost/ohdsi", + user = "joe", + password = "supersecret" +) ``` For the purposes of this example, we will use the Eunomia test CDM package that is in an Sqlite database stored locally. ```{r results = FALSE,message = FALSE,warning=FALSE, message = FALSE,eval=FALSE} @@ -80,10 +82,12 @@ For example, the cohort diagnostics package includes an example set of cohort sq ```{r results = FALSE,message = FALSE,warning=FALSE,eval=FALSE} library(CohortDiagnostics) -cohortDefinitionSet <- CohortGenerator::getCohortDefinitionSet(settingsFileName = "Cohorts.csv", - jsonFolder = "cohorts", - sqlFolder = "sql/sql_server", - packageName = "CohortDiagnostics") +cohortDefinitionSet <- CohortGenerator::getCohortDefinitionSet( + settingsFileName = "Cohorts.csv", + jsonFolder = "cohorts", + sqlFolder = "sql/sql_server", + packageName = "CohortDiagnostics" +) ``` Looking at this data.frame of Cohorts you will see the sql and json for these cohorts: @@ -102,11 +106,13 @@ The following code demonstrates how to create a set of cohort references from AT # Set up url baseUrl <- "https://atlas.hosting.com/WebAPI" # list of cohort ids -cohortIds <- c(18345,18346) +cohortIds <- c(18345, 18346) -cohortDefinitionSet <- ROhdsiWebApi::exportCohortDefinitionSet(baseUrl = baseUrl, - cohortIds = cohortIds, - generateStats = TRUE) +cohortDefinitionSet <- ROhdsiWebApi::exportCohortDefinitionSet( + baseUrl = baseUrl, + cohortIds = cohortIds, + generateStats = TRUE +) ``` Consult the ROhdsiWebApi documentation for details on authentication to your atlas instance. Please note that in order to generate inclusion rules statistics (a useful diagnostic tool) the parameter `generateStats` @@ -122,18 +128,22 @@ For example, cohortTableNames <- CohortGenerator::getCohortTableNames(cohortTable = cohortTable) # Next create the tables on the database -CohortGenerator::createCohortTables(connectionDetails = connectionDetails, - cohortTableNames = cohortTableNames, - cohortDatabaseSchema = "main", - incremental = FALSE) +CohortGenerator::createCohortTables( + connectionDetails = connectionDetails, + cohortTableNames = cohortTableNames, + cohortDatabaseSchema = "main", + incremental = FALSE +) # Generate the cohort set -CohortGenerator::generateCohortSet(connectionDetails= connectionDetails, - cdmDatabaseSchema = cdmDatabaseSchema, - cohortDatabaseSchema = cohortDatabaseSchema, - cohortTableNames = cohortTableNames, - cohortDefinitionSet = cohortDefinitionSet, - incremental = FALSE) +CohortGenerator::generateCohortSet( + connectionDetails = connectionDetails, + cdmDatabaseSchema = cdmDatabaseSchema, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTableNames = cohortTableNames, + cohortDefinitionSet = cohortDefinitionSet, + incremental = FALSE +) ``` **Note, that the above code will delete an existing table**. However, incremental mode can be used when setting the parameter `incremental = TRUE`. @@ -154,22 +164,25 @@ exportFolder <- "export" Then we execute the function (using the default settings) as follows: ```{r results = FALSE,message = FALSE,warning=FALSE,eval=FALSE} executeDiagnostics(cohortDefinitionSet, - connectionDetails = connectionDetails, - cohortTable = cohortTable, - cohortDatabaseSchema = cohortDatabaseSchema, - cdmDatabaseSchema = cdmDatabaseSchema, - exportFolder = exportFolder, - databaseId = "MyCdm", - minCellCount = 5) + connectionDetails = connectionDetails, + cohortTable = cohortTable, + cohortDatabaseSchema = cohortDatabaseSchema, + cdmDatabaseSchema = cdmDatabaseSchema, + exportFolder = exportFolder, + databaseId = "MyCdm", + minCellCount = 5 +) ``` ## Cohort Statistics Table Clean up The above cohort generation process will create a number of residual tables. As the process is complete, these are no longer required and can be removed. ```{r eval=FALSE} -CohortGenerator::dropCohortStatsTables(connectionDetails = connectionDetails, - cohortDatabaseSchema = cohortDatabaseSchema, - cohortTableNames = cohortTableNames) +CohortGenerator::dropCohortStatsTables( + connectionDetails = connectionDetails, + cohortDatabaseSchema = cohortDatabaseSchema, + cohortTableNames = cohortTableNames +) ``` diff --git a/vignettes/ViewingResultsUsingDiagnosticsExplorer.Rmd b/vignettes/ViewingResultsUsingDiagnosticsExplorer.Rmd index 6a18b152d..ec2110c1e 100644 --- a/vignettes/ViewingResultsUsingDiagnosticsExplorer.Rmd +++ b/vignettes/ViewingResultsUsingDiagnosticsExplorer.Rmd @@ -20,7 +20,8 @@ knitr::opts_chunk$set( cache = FALSE, comment = "#>", error = FALSE, - tidy = FALSE) + tidy = FALSE +) ``` # Viewing the diagnostics @@ -65,4 +66,4 @@ We recommend the use of a database system, when file size of the cohort diagnost # Running over the network -If you want to run the application over the network then set `runOverNetwork = TRUE` while launching the application using 'launchDiagnosticsExplorer()'. This will make the shiny application available over your network (i.e. within your networks firewall). \ No newline at end of file +If you want to run the application over the network then set `runOverNetwork = TRUE` while launching the application using 'launchDiagnosticsExplorer()'. This will make the shiny application available over your network (i.e. within your networks firewall). diff --git a/vignettes/WhatIsCohortDiagnostics.Rmd b/vignettes/WhatIsCohortDiagnostics.Rmd index d41b2a5dc..00d97897a 100644 --- a/vignettes/WhatIsCohortDiagnostics.Rmd +++ b/vignettes/WhatIsCohortDiagnostics.Rmd @@ -20,7 +20,8 @@ knitr::opts_chunk$set( cache = FALSE, comment = "#>", error = FALSE, - tidy = FALSE) + tidy = FALSE +) ``` # Introduction @@ -43,4 +44,4 @@ Features - Break down index events into the specific concepts that triggered them. - Compute overlap between two cohorts. - Characterize cohorts, and compare these characterizations. Perform cohort comparison and temporal comparisons. -- Explore patient profiles of a random sample of subjects in a cohort. \ No newline at end of file +- Explore patient profiles of a random sample of subjects in a cohort.