diff --git a/.Rbuildignore b/.Rbuildignore index b66ab898..afbc8f5c 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -17,8 +17,8 @@ ^R/secure.global.ranking.md$ ^_pkgdown\.yml$ ^docs$ -^dsBase_6.3.5.tar.gz$ -^dsBase_6.3.5-permissive.tar.gz$ +^dsBase_7.0-dev-feat_performance\.tar\.gz$ +^dsBase_7.0-dev-feat_performance-permissive\.tar\.gz$ ^dsDanger_6.3.4.tar.gz$ ^\.circleci$ ^\.circleci/config\.yml$ diff --git a/DESCRIPTION b/DESCRIPTION index ebe2ac0e..dcfc6501 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: dsBaseClient Title: 'DataSHIELD' Client Side Base Functions -Version: 6.3.5 +Version: 7.0.0.9000 Description: Base 'DataSHIELD' functions for the client side. 'DataSHIELD' is a software package which allows you to do non-disclosive federated analysis on sensitive data. 'DataSHIELD' analytic functions have been designed to only share non disclosive summary statistics, with built in automated output diff --git a/NAMESPACE b/NAMESPACE index e9ea7926..6b5fedc7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -73,6 +73,7 @@ export(ds.matrixDimnames) export(ds.matrixInvert) export(ds.matrixMult) export(ds.matrixTranspose) +export(ds.mdPattern) export(ds.mean) export(ds.meanByClass) export(ds.meanSdGp) diff --git a/R/ds.colnames.R b/R/ds.colnames.R index 5950d99b..a4b98b1a 100644 --- a/R/ds.colnames.R +++ b/R/ds.colnames.R @@ -6,9 +6,9 @@ #' #' Server function called: \code{colnamesDS} #' @param x a character string providing the name of the input data frame or matrix. -#' @param datasources a list of \code{\link{DSConnection-class}} objects obtained after login. +#' @param datasources a list of \code{\link[DSI]{DSConnection-class}} objects obtained after login. #' If the \code{datasources} argument is not specified -#' the default set of connections will be used: see \code{\link{datashield.connections_default}}. +#' the default set of connections will be used: see \code{\link[DSI]{datashield.connections_default}}. #' @return \code{ds.colnames} returns the column names of #' the specified server-side data frame or matrix. #' @author DataSHIELD Development Team diff --git a/R/ds.mdPattern.R b/R/ds.mdPattern.R new file mode 100644 index 00000000..af59498e --- /dev/null +++ b/R/ds.mdPattern.R @@ -0,0 +1,305 @@ +#' +#' @title Display missing data patterns with disclosure control +#' @description This function is a client-side wrapper for the server-side mdPatternDS +#' function. It generates a missing data pattern matrix similar to mice::md.pattern but +#' with disclosure control applied to prevent revealing small cell counts. +#' @details The function calls the server-side mdPatternDS function which uses +#' mice::md.pattern to analyze missing data patterns. Patterns with counts below the +#' disclosure threshold (default: nfilter.tab = 3) are suppressed to maintain privacy. +#' +#' \strong{Output Format:} +#' - Each row represents a missing data pattern +#' - Pattern counts are shown in row names (e.g., "150", "25") +#' - Columns show 1 if the variable is observed, 0 if missing +#' - Last column shows the total number of missing values per pattern +#' - Last row shows the total number of missing values per variable +#' +#' \strong{Disclosure Control:} +#' +#' Suppressed patterns (count below threshold) are indicated by: +#' - Row name: "suppressed()" where N is the threshold +#' - All pattern values set to NA +#' - Summary row also suppressed to prevent back-calculation +#' +#' \strong{Pooling Behavior (type='combine'):} +#' +#' When pooling across studies, the function uses a \emph{conservative approach} +#' for disclosure control: +#' +#' 1. Identifies identical missing patterns across studies +#' 2. \strong{EXCLUDES suppressed patterns from pooling} - patterns suppressed in +#' ANY study are not included in the pooled count +#' 3. Sums counts only for non-suppressed identical patterns +#' 4. Re-validates pooled counts against disclosure threshold +#' +#' \strong{Important:} This conservative approach means: +#' - Pooled counts may be \emph{underestimates} if some studies had suppressed patterns +#' - This prevents disclosure through subtraction (e.g., if study A shows count=5 +#' and pool shows count=7, one could deduce study B has count=2, violating disclosure) +#' - Different patterns across studies are preserved separately in the pooled result +#' +#' @param x a character string specifying the name of a data frame or matrix on the +#' server-side containing the data to analyze. +#' @param type a character string specifying the output type. If 'split' (default), +#' returns separate patterns for each study. If 'combine', attempts to pool patterns +#' across studies. +#' @param datasources a list of \code{\link[DSI]{DSConnection-class}} objects obtained +#' after login. If the \code{datasources} argument is not specified, the default set of +#' connections will be used: see \code{\link[DSI]{datashield.connections_default}}. +#' @return For type='split': A list with one element per study, each containing: +#' \describe{ +#' \item{pattern}{The missing data pattern matrix for that study} +#' \item{valid}{Logical indicating if all patterns meet disclosure requirements} +#' \item{message}{A message describing the validity status} +#' } +#' +#' For type='combine': A list containing: +#' \describe{ +#' \item{pattern}{The pooled missing data pattern matrix across all studies} +#' \item{valid}{Logical indicating if all pooled patterns meet disclosure requirements} +#' \item{message}{A message describing the validity status} +#' } +#' @author Xavier Escribà montagut for DataSHIELD Development Team +#' @export +#' @examples +#' \dontrun{ +#' ## Version 6, for version 5 see the Wiki +#' +#' # Connecting to the Opal servers +#' +#' require('DSI') +#' require('DSOpal') +#' require('dsBaseClient') +#' +#' builder <- DSI::newDSLoginBuilder() +#' builder$append(server = "study1", +#' url = "http://192.168.56.100:8080/", +#' user = "administrator", password = "datashield_test&", +#' table = "CNSIM.CNSIM1", driver = "OpalDriver") +#' builder$append(server = "study2", +#' url = "http://192.168.56.100:8080/", +#' user = "administrator", password = "datashield_test&", +#' table = "CNSIM.CNSIM2", driver = "OpalDriver") +#' logindata <- builder$build() +#' +#' connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") +#' +#' # Get missing data patterns for each study separately +#' patterns_split <- ds.mdPattern(x = "D", type = "split", datasources = connections) +#' +#' # View results for study1 +#' print(patterns_split$study1$pattern) +#' # var1 var2 var3 +#' # 150 1 1 1 0 <- 150 obs complete +#' # 25 0 1 1 1 <- 25 obs missing var1 +#' # 25 0 0 25 <- Summary: 25 missing per variable +#' +#' # Get pooled missing data patterns across studies +#' patterns_pooled <- ds.mdPattern(x = "D", type = "combine", datasources = connections) +#' print(patterns_pooled$pattern) +#' +#' # Example with suppressed patterns: +#' # If study1 has a pattern with count=2 (suppressed) and study2 has same pattern +#' # with count=5 (valid), the pooled result will show count=5 (conservative approach) +#' # A warning will indicate: "Pooled counts may underestimate the true total" +#' +#' # Clear the Datashield R sessions and logout +#' datashield.logout(connections) +#' } +#' +ds.mdPattern <- function(x = NULL, type = 'split', datasources = NULL){ + + # Look for DS connections + if(is.null(datasources)){ + datasources <- datashield.connections_find() + } + + # Ensure datasources is a list of DSConnection-class + if(!(is.list(datasources) && all(unlist(lapply(datasources, function(d) {methods::is(d,"DSConnection")}))))){ + stop("The 'datasources' were expected to be a list of DSConnection-class objects", call.=FALSE) + } + + if(is.null(x)){ + stop("Please provide the name of a data frame or matrix!", call.=FALSE) + } + + # Get study names + study_names <- names(datasources) + + # Call the server side function + cally <- call("mdPatternDS", x) + results <- DSI::datashield.aggregate(datasources, cally) + + # Process results based on type + if(type == "split"){ + # Return individual study results + return(results) + + } else if(type == "combine"){ + # Pool results across studies + + # First check if any study has invalid patterns + any_invalid <- any(sapply(results, function(r) !r$valid)) + invalid_studies <- names(results)[sapply(results, function(r) !r$valid)] + + if(any_invalid){ + warning( + "Disclosure control: Some studies have suppressed patterns (below threshold).\n", + " Studies with suppressed patterns: ", paste(invalid_studies, collapse=", "), "\n", + " These patterns are EXCLUDED from pooling to prevent disclosure.\n", + " Pooled counts may underestimate the true total.", + call. = FALSE + ) + } + + # Extract patterns from each study + patterns_list <- lapply(results, function(r) r$pattern) + + # Check if all patterns have the same variables (columns) + n_vars <- sapply(patterns_list, ncol) + if(length(unique(n_vars)) > 1){ + stop("Cannot pool patterns: studies have different numbers of variables", call.=FALSE) + } + + var_names <- colnames(patterns_list[[1]]) + if(length(patterns_list) > 1){ + for(i in 2:length(patterns_list)){ + if(!identical(colnames(patterns_list[[i]]), var_names)){ + warning("Variable names differ across studies. Pooling by position.") + break + } + } + } + + # Pool the patterns + pooled_pattern <- .pool_md_patterns(patterns_list, study_names) + + # Check validity of pooled results + # Get threshold from first study's results or use a default check + nfilter.tab <- getOption("default.nfilter.tab") + if(is.null(nfilter.tab)) nfilter.tab <- 3 + + n_patterns <- nrow(pooled_pattern) - 1 + pooled_valid <- TRUE + + if(n_patterns > 0){ + # Pattern counts are in row names + pattern_counts <- as.numeric(rownames(pooled_pattern)[1:n_patterns]) + pattern_counts <- pattern_counts[!is.na(pattern_counts) & pattern_counts > 0] + + if(any(pattern_counts < nfilter.tab)){ + pooled_valid <- FALSE + } + } + + pooled_message <- ifelse(pooled_valid, + "Valid: all pooled pattern counts meet disclosure requirements", + "Some pooled pattern counts may be below threshold") + + return(list( + pattern = pooled_pattern, + valid = pooled_valid, + message = pooled_message, + studies = study_names + )) + + } else { + stop("Argument 'type' must be either 'split' or 'combine'", call.=FALSE) + } +} + +#' @title Pool missing data patterns across studies +#' @description Internal function to pool md.pattern results from multiple studies +#' @param patterns_list List of pattern matrices from each study +#' @param study_names Names of the studies +#' @return Pooled pattern matrix +#' @keywords internal +.pool_md_patterns <- function(patterns_list, study_names){ + + # Initialize with first study's pattern structure + pooled <- patterns_list[[1]] + n_vars <- ncol(pooled) + n_rows <- nrow(pooled) - 1 # Exclude summary row + + # Create a list to store unique patterns + unique_patterns <- list() + pattern_counts <- list() + + # Process each study + for(i in seq_along(patterns_list)){ + pattern <- patterns_list[[i]] + study_n_patterns <- nrow(pattern) - 1 + + if(study_n_patterns > 0){ + for(j in 1:study_n_patterns){ + # Get pattern (columns show 1/0 for observed/missing) + pat_vector <- pattern[j, 1:(n_vars-1)] + # Pattern count is in row name + pat_count_str <- rownames(pattern)[j] + pat_count <- suppressWarnings(as.numeric(pat_count_str)) + + # Skip if suppressed (non-numeric row name like "suppressed(<3)") + if(is.na(pat_count)){ + next + } + + # Convert pattern to string for comparison + pat_string <- paste(pat_vector, collapse="_") + + # Check if this pattern already exists + if(pat_string %in% names(unique_patterns)){ + # Add to existing count + pattern_counts[[pat_string]] <- pattern_counts[[pat_string]] + pat_count + } else { + # New pattern + unique_patterns[[pat_string]] <- pat_vector + pattern_counts[[pat_string]] <- pat_count + } + } + } + } + + # Build pooled pattern matrix + if(length(unique_patterns) == 0){ + # No valid patterns + pooled[1:n_rows, ] <- NA + } else { + # Sort patterns by count (descending) + sorted_idx <- order(unlist(pattern_counts), decreasing = TRUE) + sorted_patterns <- unique_patterns[sorted_idx] + sorted_counts <- pattern_counts[sorted_idx] + + # Create new pooled matrix + n_pooled_patterns <- length(sorted_patterns) + pooled <- matrix(NA, nrow = n_pooled_patterns + 1, ncol = n_vars) + colnames(pooled) <- colnames(patterns_list[[1]]) + + # Set row names (counts for patterns, empty for summary) + row_names <- c(as.character(unlist(sorted_counts)), "") + rownames(pooled) <- row_names + + # Fill in patterns + for(i in 1:n_pooled_patterns){ + pooled[i, 1:(n_vars-1)] <- sorted_patterns[[i]] + # Calculate number of missing for this pattern + pooled[i, n_vars] <- sum(sorted_patterns[[i]] == 0) + } + } + + # Calculate summary row (total missing per variable) + # Sum across studies + summary_row <- rep(0, n_vars) + for(i in seq_along(patterns_list)){ + study_summary <- patterns_list[[i]][nrow(patterns_list[[i]]), ] + # Only add if not suppressed + if(!all(is.na(study_summary))){ + summary_row <- summary_row + ifelse(is.na(study_summary), 0, study_summary) + } + } + + # Add summary row + pooled[nrow(pooled), ] <- summary_row + + return(pooled) +} + diff --git a/armadillo_azure-pipelines.yml b/armadillo_azure-pipelines.yml index b7f98439..b22d7e4d 100644 --- a/armadillo_azure-pipelines.yml +++ b/armadillo_azure-pipelines.yml @@ -58,10 +58,10 @@ schedules: - master always: true - cron: "0 2 * * *" - displayName: Nightly build - v6.3.5-dev + displayName: Nightly build - v7.0-dev-feat/performance branches: include: - - v6.3.5-dev + - v7.0-dev-feat/performance always: true ######################################################################################### @@ -235,7 +235,7 @@ jobs: curl -u admin:admin -X GET http://localhost:8080/packages - curl -u admin:admin --max-time 300 -v -H 'Content-Type: multipart/form-data' -F "file=@dsBase_6.3.5-permissive.tar.gz" -X POST http://localhost:8080/install-package + curl -u admin:admin --max-time 300 -v -H 'Content-Type: multipart/form-data' -F "file=@dsBase_7.0-dev-feat_performance-permissive.tar.gz" -X POST http://localhost:8080/install-package sleep 60 docker container restart dsbaseclient_armadillo_1 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index db3d7a18..a6e17a48 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -44,10 +44,10 @@ schedules: - master always: true - cron: "0 2 * * *" - displayName: Nightly build - v6.3.5-dev + displayName: Nightly build - v7.0-dev-feat/performance branches: include: - - v6.3.5-dev + - v7.0-dev-feat/performance always: true ######################################################################################### @@ -216,7 +216,7 @@ jobs: - bash: | R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o)" - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v6.3.5-dev'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = '7.0-dev-feat_performance'); opal.logout(opal)" sleep 60 diff --git a/docker-compose_armadillo.yml b/docker-compose_armadillo.yml index 26bd8b85..37c44cda 100644 --- a/docker-compose_armadillo.yml +++ b/docker-compose_armadillo.yml @@ -3,7 +3,7 @@ services: hostname: armadillo ports: - 8080:8080 - image: datashield/armadillo_citest:5.9.4 + image: datashield/armadillo_citest:5.11.0 environment: LOGGING_CONFIG: 'classpath:logback-file.xml' AUDIT_LOG_PATH: '/app/logs/audit.log' @@ -16,6 +16,7 @@ services: default: hostname: default - image: datashield/rock-omicron-karma-permissive:devel + image: datashield/rock-quebrada-lamda:latest +# image: datashield/rserver-panda-lamda:devel environment: DEBUG: "FALSE" diff --git a/docker-compose_opal.yml b/docker-compose_opal.yml index 1a048f51..a62dec67 100644 --- a/docker-compose_opal.yml +++ b/docker-compose_opal.yml @@ -20,6 +20,6 @@ services: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=foobar rock: - image: datashield/rock-lemon-donkey-permissive:draft + image: datashield/rock-quebrada-lamda-permissive:latest environment: DEBUG: "FALSE" diff --git a/docs/404.html b/docs/404.html index 479a45c9..eaa2175a 100644 --- a/docs/404.html +++ b/docs/404.html @@ -32,7 +32,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -78,7 +78,7 @@

Page not found (404)

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 4d74b589..a0698c65 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -260,7 +260,7 @@

NA

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/authors.html b/docs/authors.html index e587e3d9..a4610f7f 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -102,12 +102,12 @@

Citation

Burton P, Wilson R, Butters O, Ryser-Welch P, Westerberg A, Abarrategui L, Villegas-Diaz R, Avraam D, Marcon Y, Bishop T, Gaye A, Escribà-Montagut X, Wheater S (????). dsBaseClient: 'DataSHIELD' Client Side Base Functions. -R package version 6.3.5. +R package version 7.0.0.9000.

@Manual{,
   title = {dsBaseClient: 'DataSHIELD' Client Side Base Functions},
   author = {Paul Burton and Rebecca Wilson and Olly Butters and Patricia Ryser-Welch and Alex Westerberg and Leire Abarrategui and Roberto Villegas-Diaz and Demetris Avraam and Yannick Marcon and Tom Bishop and Amadou Gaye and Xavier Escribà-Montagut and Stuart Wheater},
-  note = {R package version 6.3.5},
+  note = {R package version 7.0.0.9000},
 }

Gaye A, Marcon Y, Isaeva J, LaFlamme P, Turner A, Jones E, Minion J, Boyd A, Newby C, Nuotio M, Wilson R, Butters O, Murtagh B, Demir I, Doiron D, Giepmans L, Wallace S, Budin-Ljøsne I, Schmidt C, Boffetta P, Boniol M, Bota M, Carter K, deKlerk N, Dibben C, Francis R, Hiekkalinna T, Hveem K, Kvaløy K, Millar S, Perry I, Peters A, Phillips C, Popham F, Raab G, Reischl E, Sheehan N, Waldenberger M, Perola M, van den Heuvel E, Macleod J, Knoppers B, Stolk R, Fortier I, Harris J, Woffenbuttel B, Murtagh M, Ferretti V, Burton P (2014). “DataSHIELD: taking the analysis to the data, not the data to the analysis.” @@ -168,7 +168,7 @@

Citation

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/index.html b/docs/index.html index 9d248ac5..d9e32652 100644 --- a/docs/index.html +++ b/docs/index.html @@ -33,7 +33,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -175,7 +175,7 @@

Developers

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 2aca1415..da8b56e5 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,5 +1,5 @@ pandoc: 3.1.3 -pkgdown: 2.1.3 +pkgdown: 2.2.0 pkgdown_sha: ~ articles: {} -last_built: 2025-11-05T10:48Z +last_built: 2025-11-16T12:17Z diff --git a/docs/reference/checkClass.html b/docs/reference/checkClass.html index c8977cdb..3dbe0638 100644 --- a/docs/reference/checkClass.html +++ b/docs/reference/checkClass.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -82,7 +82,7 @@

Details

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/colPercent.html b/docs/reference/colPercent.html index 4e68d9c8..e526cfed 100644 --- a/docs/reference/colPercent.html +++ b/docs/reference/colPercent.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -80,7 +80,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/computeWeightedMeans.html b/docs/reference/computeWeightedMeans.html index 7184e19b..e68d34ee 100644 --- a/docs/reference/computeWeightedMeans.html +++ b/docs/reference/computeWeightedMeans.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -88,7 +88,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/dot-pool_md_patterns.html b/docs/reference/dot-pool_md_patterns.html new file mode 100644 index 00000000..e62ca744 --- /dev/null +++ b/docs/reference/dot-pool_md_patterns.html @@ -0,0 +1,90 @@ + +Pool missing data patterns across studies — .pool_md_patterns • dsBaseClient + + +
+
+ + + +
+
+ + +
+

Internal function to pool md.pattern results from multiple studies

+
+ +
+
.pool_md_patterns(patterns_list, study_names)
+
+ +
+

Arguments

+ + +
patterns_list
+

List of pattern matrices from each study

+ + +
study_names
+

Names of the studies

+ +
+
+

Value

+

Pooled pattern matrix

+
+ +
+ +
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/reference/ds.Boole.html b/docs/reference/ds.Boole.html index 424a951b..dfee7fde 100644 --- a/docs/reference/ds.Boole.html +++ b/docs/reference/ds.Boole.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -204,7 +204,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.abs.html b/docs/reference/ds.abs.html index 4284b6a2..6c7416d1 100644 --- a/docs/reference/ds.abs.html +++ b/docs/reference/ds.abs.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -154,7 +154,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asCharacter.html b/docs/reference/ds.asCharacter.html index 7721c956..3138fd8d 100644 --- a/docs/reference/ds.asCharacter.html +++ b/docs/reference/ds.asCharacter.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -136,7 +136,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asDataMatrix.html b/docs/reference/ds.asDataMatrix.html index 96b4105a..c648b575 100644 --- a/docs/reference/ds.asDataMatrix.html +++ b/docs/reference/ds.asDataMatrix.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -139,7 +139,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asFactor.html b/docs/reference/ds.asFactor.html index 5b3bc937..1066af69 100644 --- a/docs/reference/ds.asFactor.html +++ b/docs/reference/ds.asFactor.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -233,7 +233,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asFactorSimple.html b/docs/reference/ds.asFactorSimple.html index 58feebba..318c0cb5 100644 --- a/docs/reference/ds.asFactorSimple.html +++ b/docs/reference/ds.asFactorSimple.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -107,7 +107,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asInteger.html b/docs/reference/ds.asInteger.html index 1d96dde4..a8880380 100644 --- a/docs/reference/ds.asInteger.html +++ b/docs/reference/ds.asInteger.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -152,7 +152,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asList.html b/docs/reference/ds.asList.html index d9b7f2da..8e1a6575 100644 --- a/docs/reference/ds.asList.html +++ b/docs/reference/ds.asList.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -137,7 +137,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asLogical.html b/docs/reference/ds.asLogical.html index 7baaec48..4399676b 100644 --- a/docs/reference/ds.asLogical.html +++ b/docs/reference/ds.asLogical.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -138,7 +138,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asMatrix.html b/docs/reference/ds.asMatrix.html index 282747ac..bca61673 100644 --- a/docs/reference/ds.asMatrix.html +++ b/docs/reference/ds.asMatrix.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -140,7 +140,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.asNumeric.html b/docs/reference/ds.asNumeric.html index ec5e8a6b..74c90473 100644 --- a/docs/reference/ds.asNumeric.html +++ b/docs/reference/ds.asNumeric.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -151,7 +151,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.assign.html b/docs/reference/ds.assign.html index 572573be..a67e7380 100644 --- a/docs/reference/ds.assign.html +++ b/docs/reference/ds.assign.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -135,7 +135,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.auc.html b/docs/reference/ds.auc.html index 86b7df2f..9e38f92d 100644 --- a/docs/reference/ds.auc.html +++ b/docs/reference/ds.auc.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -93,7 +93,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.boxPlot.html b/docs/reference/ds.boxPlot.html index c04e094a..6e273535 100644 --- a/docs/reference/ds.boxPlot.html +++ b/docs/reference/ds.boxPlot.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -117,7 +117,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.boxPlotGG.html b/docs/reference/ds.boxPlotGG.html index 6c22a5da..00ff6fc3 100644 --- a/docs/reference/ds.boxPlotGG.html +++ b/docs/reference/ds.boxPlotGG.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -112,7 +112,7 @@

Value

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.boxPlotGG_data_Treatment.html b/docs/reference/ds.boxPlotGG_data_Treatment.html index ea589bcb..3c303a3f 100644 --- a/docs/reference/ds.boxPlotGG_data_Treatment.html +++ b/docs/reference/ds.boxPlotGG_data_Treatment.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -99,7 +99,7 @@

Value

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.boxPlotGG_data_Treatment_numeric.html b/docs/reference/ds.boxPlotGG_data_Treatment_numeric.html index 4b47b518..c40d3302 100644 --- a/docs/reference/ds.boxPlotGG_data_Treatment_numeric.html +++ b/docs/reference/ds.boxPlotGG_data_Treatment_numeric.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -79,7 +79,7 @@

Value

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.boxPlotGG_numeric.html b/docs/reference/ds.boxPlotGG_numeric.html index 4d81c769..2026f88d 100644 --- a/docs/reference/ds.boxPlotGG_numeric.html +++ b/docs/reference/ds.boxPlotGG_numeric.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -95,7 +95,7 @@

Value

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.boxPlotGG_table.html b/docs/reference/ds.boxPlotGG_table.html index ba176053..819848c9 100644 --- a/docs/reference/ds.boxPlotGG_table.html +++ b/docs/reference/ds.boxPlotGG_table.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -110,7 +110,7 @@

Value

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.bp_standards.html b/docs/reference/ds.bp_standards.html index 97b649cd..e44dc25a 100644 --- a/docs/reference/ds.bp_standards.html +++ b/docs/reference/ds.bp_standards.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -130,7 +130,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.c.html b/docs/reference/ds.c.html index 5ed8c442..301e4481 100644 --- a/docs/reference/ds.c.html +++ b/docs/reference/ds.c.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -136,7 +136,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.cbind.html b/docs/reference/ds.cbind.html index 73c2a5cf..987a131c 100644 --- a/docs/reference/ds.cbind.html +++ b/docs/reference/ds.cbind.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -210,7 +210,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.changeRefGroup.html b/docs/reference/ds.changeRefGroup.html index c2307d8b..38ff5e9c 100644 --- a/docs/reference/ds.changeRefGroup.html +++ b/docs/reference/ds.changeRefGroup.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -203,7 +203,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.class.html b/docs/reference/ds.class.html index b0ef303f..f2aeb12b 100644 --- a/docs/reference/ds.class.html +++ b/docs/reference/ds.class.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -134,7 +134,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.colnames.html b/docs/reference/ds.colnames.html index f8883e86..196ee293 100644 --- a/docs/reference/ds.colnames.html +++ b/docs/reference/ds.colnames.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -94,28 +94,28 @@

Examples

require('dsBaseClient') builder <- DSI::newDSLoginBuilder() - builder$append(server = "study1", - url = "http://192.168.56.100:8080/", - user = "administrator", password = "datashield_test&", + builder$append(server = "study1", + url = "http://192.168.56.100:8080/", + user = "administrator", password = "datashield_test&", table = "CNSIM.CNSIM1", driver = "OpalDriver") - builder$append(server = "study2", - url = "http://192.168.56.100:8080/", - user = "administrator", password = "datashield_test&", + builder$append(server = "study2", + url = "http://192.168.56.100:8080/", + user = "administrator", password = "datashield_test&", table = "CNSIM.CNSIM2", driver = "OpalDriver") builder$append(server = "study3", - url = "http://192.168.56.100:8080/", - user = "administrator", password = "datashield_test&", + url = "http://192.168.56.100:8080/", + user = "administrator", password = "datashield_test&", table = "CNSIM.CNSIM3", driver = "OpalDriver") logindata <- builder$build() - + # Log onto the remote Opal training servers - connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") + connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") # Getting column names of the R objects stored in the server-side ds.colnames(x = "D", datasources = connections[1]) #only the first server ("study1") is used # Clear the Datashield R sessions and logout - datashield.logout(connections) + datashield.logout(connections) } # } @@ -131,7 +131,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.completeCases.html b/docs/reference/ds.completeCases.html index 04b2dfaf..13914f3c 100644 --- a/docs/reference/ds.completeCases.html +++ b/docs/reference/ds.completeCases.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -151,7 +151,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.contourPlot.html b/docs/reference/ds.contourPlot.html index 945616d8..91e6c727 100644 --- a/docs/reference/ds.contourPlot.html +++ b/docs/reference/ds.contourPlot.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -207,7 +207,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.cor.html b/docs/reference/ds.cor.html index f260589a..3b7a100b 100644 --- a/docs/reference/ds.cor.html +++ b/docs/reference/ds.cor.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -160,7 +160,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.corTest.html b/docs/reference/ds.corTest.html index fbde36a3..1bf393c8 100644 --- a/docs/reference/ds.corTest.html +++ b/docs/reference/ds.corTest.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -166,7 +166,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.cov.html b/docs/reference/ds.cov.html index b695efb4..dec6c58f 100644 --- a/docs/reference/ds.cov.html +++ b/docs/reference/ds.cov.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -185,7 +185,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.dataFrame.html b/docs/reference/ds.dataFrame.html index f4365fd4..9a7790b5 100644 --- a/docs/reference/ds.dataFrame.html +++ b/docs/reference/ds.dataFrame.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -203,7 +203,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.dataFrameFill.html b/docs/reference/ds.dataFrameFill.html index c097b7bf..b64d23b3 100644 --- a/docs/reference/ds.dataFrameFill.html +++ b/docs/reference/ds.dataFrameFill.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -154,7 +154,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.dataFrameSort.html b/docs/reference/ds.dataFrameSort.html index 04dc36bd..0fad3dd8 100644 --- a/docs/reference/ds.dataFrameSort.html +++ b/docs/reference/ds.dataFrameSort.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -175,7 +175,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.dataFrameSubset.html b/docs/reference/ds.dataFrameSubset.html index d9fc30e2..eb8a1f3a 100644 --- a/docs/reference/ds.dataFrameSubset.html +++ b/docs/reference/ds.dataFrameSubset.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -220,7 +220,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.densityGrid.html b/docs/reference/ds.densityGrid.html index 9ed18a5e..4055ac5d 100644 --- a/docs/reference/ds.densityGrid.html +++ b/docs/reference/ds.densityGrid.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -124,7 +124,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.dim.html b/docs/reference/ds.dim.html index dc5db17c..4805c721 100644 --- a/docs/reference/ds.dim.html +++ b/docs/reference/ds.dim.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -171,7 +171,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.dmtC2S.html b/docs/reference/ds.dmtC2S.html index e8663e17..046e46df 100644 --- a/docs/reference/ds.dmtC2S.html +++ b/docs/reference/ds.dmtC2S.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -124,7 +124,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.elspline.html b/docs/reference/ds.elspline.html index 7a6d38f8..877fb3e5 100644 --- a/docs/reference/ds.elspline.html +++ b/docs/reference/ds.elspline.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -123,7 +123,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.exists.html b/docs/reference/ds.exists.html index 75f6a0a5..4e434c2d 100644 --- a/docs/reference/ds.exists.html +++ b/docs/reference/ds.exists.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -142,7 +142,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.exp.html b/docs/reference/ds.exp.html index 394d1ee3..e6a3e241 100644 --- a/docs/reference/ds.exp.html +++ b/docs/reference/ds.exp.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -136,7 +136,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.extractQuantiles.html b/docs/reference/ds.extractQuantiles.html index 6d07a76e..a05cd2eb 100644 --- a/docs/reference/ds.extractQuantiles.html +++ b/docs/reference/ds.extractQuantiles.html @@ -26,7 +26,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -180,7 +180,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.forestplot.html b/docs/reference/ds.forestplot.html index b4b06659..f7b71893 100644 --- a/docs/reference/ds.forestplot.html +++ b/docs/reference/ds.forestplot.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -122,7 +122,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.gamlss.html b/docs/reference/ds.gamlss.html index b5b77ee4..63b40ac9 100644 --- a/docs/reference/ds.gamlss.html +++ b/docs/reference/ds.gamlss.html @@ -23,7 +23,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -219,7 +219,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.getWGSR.html b/docs/reference/ds.getWGSR.html index 63175367..c341b2f2 100644 --- a/docs/reference/ds.getWGSR.html +++ b/docs/reference/ds.getWGSR.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -208,7 +208,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.glm.html b/docs/reference/ds.glm.html index 608c5e95..ddd6de57 100644 --- a/docs/reference/ds.glm.html +++ b/docs/reference/ds.glm.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -431,7 +431,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.glmPredict.html b/docs/reference/ds.glmPredict.html index 93aa36b1..e1f5ef23 100644 --- a/docs/reference/ds.glmPredict.html +++ b/docs/reference/ds.glmPredict.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -231,7 +231,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.glmSLMA.html b/docs/reference/ds.glmSLMA.html index 5ec49b4c..6d9d6bad 100644 --- a/docs/reference/ds.glmSLMA.html +++ b/docs/reference/ds.glmSLMA.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -497,7 +497,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.glmSummary.html b/docs/reference/ds.glmSummary.html index 6ac31997..8364a59b 100644 --- a/docs/reference/ds.glmSummary.html +++ b/docs/reference/ds.glmSummary.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -158,7 +158,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.glmerSLMA.html b/docs/reference/ds.glmerSLMA.html index b9c27ccf..30b92225 100644 --- a/docs/reference/ds.glmerSLMA.html +++ b/docs/reference/ds.glmerSLMA.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -383,7 +383,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.heatmapPlot.html b/docs/reference/ds.heatmapPlot.html index 5bf8c534..8820c3a1 100644 --- a/docs/reference/ds.heatmapPlot.html +++ b/docs/reference/ds.heatmapPlot.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -203,7 +203,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.hetcor.html b/docs/reference/ds.hetcor.html index bb4ede2d..624f2d55 100644 --- a/docs/reference/ds.hetcor.html +++ b/docs/reference/ds.hetcor.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -128,7 +128,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.histogram.html b/docs/reference/ds.histogram.html index 531c588b..34035b2d 100644 --- a/docs/reference/ds.histogram.html +++ b/docs/reference/ds.histogram.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -194,7 +194,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.igb_standards.html b/docs/reference/ds.igb_standards.html index b803a071..d7470a1c 100644 --- a/docs/reference/ds.igb_standards.html +++ b/docs/reference/ds.igb_standards.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -145,7 +145,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.isNA.html b/docs/reference/ds.isNA.html index de24c994..587e51a8 100644 --- a/docs/reference/ds.isNA.html +++ b/docs/reference/ds.isNA.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -135,7 +135,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.isValid.html b/docs/reference/ds.isValid.html index 112dfd01..9ba97804 100644 --- a/docs/reference/ds.isValid.html +++ b/docs/reference/ds.isValid.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -135,7 +135,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.kurtosis.html b/docs/reference/ds.kurtosis.html index 22112e44..e765331e 100644 --- a/docs/reference/ds.kurtosis.html +++ b/docs/reference/ds.kurtosis.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -107,7 +107,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.length.html b/docs/reference/ds.length.html index 40517256..654c28af 100644 --- a/docs/reference/ds.length.html +++ b/docs/reference/ds.length.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -161,7 +161,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.levels.html b/docs/reference/ds.levels.html index 76926df3..dfd29416 100644 --- a/docs/reference/ds.levels.html +++ b/docs/reference/ds.levels.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -137,7 +137,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.lexis.html b/docs/reference/ds.lexis.html index 5a112250..131b98ae 100644 --- a/docs/reference/ds.lexis.html +++ b/docs/reference/ds.lexis.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -302,7 +302,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.list.html b/docs/reference/ds.list.html index 0d01a3f5..9e0cd530 100644 --- a/docs/reference/ds.list.html +++ b/docs/reference/ds.list.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -133,7 +133,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.listClientsideFunctions.html b/docs/reference/ds.listClientsideFunctions.html index b0a972f6..defc02cd 100644 --- a/docs/reference/ds.listClientsideFunctions.html +++ b/docs/reference/ds.listClientsideFunctions.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -90,7 +90,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.listDisclosureSettings.html b/docs/reference/ds.listDisclosureSettings.html index b3caf97b..d539d43c 100644 --- a/docs/reference/ds.listDisclosureSettings.html +++ b/docs/reference/ds.listDisclosureSettings.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -166,7 +166,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.listOpals.html b/docs/reference/ds.listOpals.html index 9b5d9f6c..90f473b7 100644 --- a/docs/reference/ds.listOpals.html +++ b/docs/reference/ds.listOpals.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -84,7 +84,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.listServersideFunctions.html b/docs/reference/ds.listServersideFunctions.html index a855cd19..1395e31e 100644 --- a/docs/reference/ds.listServersideFunctions.html +++ b/docs/reference/ds.listServersideFunctions.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -128,7 +128,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.lmerSLMA.html b/docs/reference/ds.lmerSLMA.html index 11dc5eeb..feb1b804 100644 --- a/docs/reference/ds.lmerSLMA.html +++ b/docs/reference/ds.lmerSLMA.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -332,7 +332,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.log.html b/docs/reference/ds.log.html index 6f7e120a..702c219b 100644 --- a/docs/reference/ds.log.html +++ b/docs/reference/ds.log.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -142,7 +142,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.look.html b/docs/reference/ds.look.html index 4c82427f..68d0fbde 100644 --- a/docs/reference/ds.look.html +++ b/docs/reference/ds.look.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -151,7 +151,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.ls.html b/docs/reference/ds.ls.html index ad51a83e..2413c685 100644 --- a/docs/reference/ds.ls.html +++ b/docs/reference/ds.ls.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -202,7 +202,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.lspline.html b/docs/reference/ds.lspline.html index e51efe95..98609889 100644 --- a/docs/reference/ds.lspline.html +++ b/docs/reference/ds.lspline.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -120,7 +120,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.make.html b/docs/reference/ds.make.html index 51957b2d..38bd3b25 100644 --- a/docs/reference/ds.make.html +++ b/docs/reference/ds.make.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -205,7 +205,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrix.html b/docs/reference/ds.matrix.html index ef83c5a9..689d88da 100644 --- a/docs/reference/ds.matrix.html +++ b/docs/reference/ds.matrix.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -250,7 +250,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrixDet.html b/docs/reference/ds.matrixDet.html index d9740874..fd12e5cc 100644 --- a/docs/reference/ds.matrixDet.html +++ b/docs/reference/ds.matrixDet.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -168,7 +168,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrixDet.report.html b/docs/reference/ds.matrixDet.report.html index 6699c5bf..a72b9191 100644 --- a/docs/reference/ds.matrixDet.report.html +++ b/docs/reference/ds.matrixDet.report.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -156,7 +156,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrixDiag.html b/docs/reference/ds.matrixDiag.html index 158ec106..4842f2af 100644 --- a/docs/reference/ds.matrixDiag.html +++ b/docs/reference/ds.matrixDiag.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -159,7 +159,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrixDimnames.html b/docs/reference/ds.matrixDimnames.html index 17152459..0d52dc68 100644 --- a/docs/reference/ds.matrixDimnames.html +++ b/docs/reference/ds.matrixDimnames.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -174,7 +174,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrixInvert.html b/docs/reference/ds.matrixInvert.html index e7eacf26..ef812dc0 100644 --- a/docs/reference/ds.matrixInvert.html +++ b/docs/reference/ds.matrixInvert.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -161,7 +161,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrixMult.html b/docs/reference/ds.matrixMult.html index 722f5f22..cf288087 100644 --- a/docs/reference/ds.matrixMult.html +++ b/docs/reference/ds.matrixMult.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -178,7 +178,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.matrixTranspose.html b/docs/reference/ds.matrixTranspose.html index 1f5459a3..bfe3df4f 100644 --- a/docs/reference/ds.matrixTranspose.html +++ b/docs/reference/ds.matrixTranspose.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -163,7 +163,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.mdPattern.html b/docs/reference/ds.mdPattern.html new file mode 100644 index 00000000..4e2b3b44 --- /dev/null +++ b/docs/reference/ds.mdPattern.html @@ -0,0 +1,205 @@ + +Display missing data patterns with disclosure control — ds.mdPattern • dsBaseClient + + +
+
+ + + +
+
+ + +
+

This function is a client-side wrapper for the server-side mdPatternDS +function. It generates a missing data pattern matrix similar to mice::md.pattern but +with disclosure control applied to prevent revealing small cell counts.

+
+ +
+
ds.mdPattern(x = NULL, type = "split", datasources = NULL)
+
+ +
+

Arguments

+ + +
x
+

a character string specifying the name of a data frame or matrix on the +server-side containing the data to analyze.

+ + +
type
+

a character string specifying the output type. If 'split' (default), +returns separate patterns for each study. If 'combine', attempts to pool patterns +across studies.

+ + +
datasources
+

a list of DSConnection-class objects obtained +after login. If the datasources argument is not specified, the default set of +connections will be used: see datashield.connections_default.

+ +
+
+

Value

+

For type='split': A list with one element per study, each containing:

pattern
+

The missing data pattern matrix for that study

+ +
valid
+

Logical indicating if all patterns meet disclosure requirements

+ +
message
+

A message describing the validity status

+ + +

For type='combine': A list containing:

pattern
+

The pooled missing data pattern matrix across all studies

+ +
valid
+

Logical indicating if all pooled patterns meet disclosure requirements

+ +
message
+

A message describing the validity status

+ + +
+
+

Details

+

The function calls the server-side mdPatternDS function which uses +mice::md.pattern to analyze missing data patterns. Patterns with counts below the +disclosure threshold (default: nfilter.tab = 3) are suppressed to maintain privacy.

+

Output Format: +- Each row represents a missing data pattern +- Pattern counts are shown in row names (e.g., "150", "25") +- Columns show 1 if the variable is observed, 0 if missing +- Last column shows the total number of missing values per pattern +- Last row shows the total number of missing values per variable

+

Disclosure Control:

+

Suppressed patterns (count below threshold) are indicated by: +- Row name: "suppressed(<N>)" where N is the threshold +- All pattern values set to NA +- Summary row also suppressed to prevent back-calculation

+

Pooling Behavior (type='combine'):

+

When pooling across studies, the function uses a conservative approach +for disclosure control:

+

1. Identifies identical missing patterns across studies +2. EXCLUDES suppressed patterns from pooling - patterns suppressed in + ANY study are not included in the pooled count +3. Sums counts only for non-suppressed identical patterns +4. Re-validates pooled counts against disclosure threshold

+

Important: This conservative approach means: +- Pooled counts may be underestimates if some studies had suppressed patterns +- This prevents disclosure through subtraction (e.g., if study A shows count=5 + and pool shows count=7, one could deduce study B has count=2, violating disclosure) +- Different patterns across studies are preserved separately in the pooled result

+
+
+

Author

+

Xavier Escribà montagut for DataSHIELD Development Team

+
+ +
+

Examples

+
if (FALSE) { # \dontrun{
+ ## Version 6, for version 5 see the Wiki
+
+  # Connecting to the Opal servers
+
+  require('DSI')
+  require('DSOpal')
+  require('dsBaseClient')
+
+  builder <- DSI::newDSLoginBuilder()
+  builder$append(server = "study1",
+                 url = "http://192.168.56.100:8080/",
+                 user = "administrator", password = "datashield_test&",
+                 table = "CNSIM.CNSIM1", driver = "OpalDriver")
+  builder$append(server = "study2",
+                 url = "http://192.168.56.100:8080/",
+                 user = "administrator", password = "datashield_test&",
+                 table = "CNSIM.CNSIM2", driver = "OpalDriver")
+  logindata <- builder$build()
+
+  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D")
+
+  # Get missing data patterns for each study separately
+  patterns_split <- ds.mdPattern(x = "D", type = "split", datasources = connections)
+
+  # View results for study1
+  print(patterns_split$study1$pattern)
+  #      var1 var2 var3
+  # 150    1    1    1  0    <- 150 obs complete
+  #  25    0    1    1  1    <- 25 obs missing var1
+  #       25    0    0 25    <- Summary: 25 missing per variable
+
+  # Get pooled missing data patterns across studies
+  patterns_pooled <- ds.mdPattern(x = "D", type = "combine", datasources = connections)
+  print(patterns_pooled$pattern)
+
+  # Example with suppressed patterns:
+  # If study1 has a pattern with count=2 (suppressed) and study2 has same pattern 
+  # with count=5 (valid), the pooled result will show count=5 (conservative approach)
+  # A warning will indicate: "Pooled counts may underestimate the true total"
+
+  # Clear the Datashield R sessions and logout
+  datashield.logout(connections)
+} # }
+
+
+
+
+ +
+ + +
+ +
+

Site built with pkgdown 2.2.0.

+
+ +
+ + + + + + + + diff --git a/docs/reference/ds.mean.html b/docs/reference/ds.mean.html index c0e09b3e..a34248d5 100644 --- a/docs/reference/ds.mean.html +++ b/docs/reference/ds.mean.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -189,7 +189,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.meanByClass.html b/docs/reference/ds.meanByClass.html index ac948092..9f52098e 100644 --- a/docs/reference/ds.meanByClass.html +++ b/docs/reference/ds.meanByClass.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -173,7 +173,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.meanSdGp.html b/docs/reference/ds.meanSdGp.html index c77d43b4..94a474a0 100644 --- a/docs/reference/ds.meanSdGp.html +++ b/docs/reference/ds.meanSdGp.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -218,7 +218,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.merge.html b/docs/reference/ds.merge.html index c294e9a7..b42339e8 100644 --- a/docs/reference/ds.merge.html +++ b/docs/reference/ds.merge.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -236,7 +236,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.message.html b/docs/reference/ds.message.html index b567be6c..0077360b 100644 --- a/docs/reference/ds.message.html +++ b/docs/reference/ds.message.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -148,7 +148,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.metadata.html b/docs/reference/ds.metadata.html index 788bbba8..08b782e4 100644 --- a/docs/reference/ds.metadata.html +++ b/docs/reference/ds.metadata.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -126,7 +126,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.mice.html b/docs/reference/ds.mice.html index 6fcad4e5..4435d2c5 100644 --- a/docs/reference/ds.mice.html +++ b/docs/reference/ds.mice.html @@ -25,7 +25,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -164,7 +164,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.names.html b/docs/reference/ds.names.html index 323a2689..2cbc5feb 100644 --- a/docs/reference/ds.names.html +++ b/docs/reference/ds.names.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -146,7 +146,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.ns.html b/docs/reference/ds.ns.html index f288be72..4542ab75 100644 --- a/docs/reference/ds.ns.html +++ b/docs/reference/ds.ns.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -133,7 +133,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.numNA.html b/docs/reference/ds.numNA.html index 2199a9df..ced8a0da 100644 --- a/docs/reference/ds.numNA.html +++ b/docs/reference/ds.numNA.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -131,7 +131,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.qlspline.html b/docs/reference/ds.qlspline.html index 2484c7de..71b503c1 100644 --- a/docs/reference/ds.qlspline.html +++ b/docs/reference/ds.qlspline.html @@ -20,7 +20,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -132,7 +132,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.quantileMean.html b/docs/reference/ds.quantileMean.html index a66eb1f3..0f9781a5 100644 --- a/docs/reference/ds.quantileMean.html +++ b/docs/reference/ds.quantileMean.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -150,7 +150,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rBinom.html b/docs/reference/ds.rBinom.html index 5f186f71..933ce531 100644 --- a/docs/reference/ds.rBinom.html +++ b/docs/reference/ds.rBinom.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -202,7 +202,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rNorm.html b/docs/reference/ds.rNorm.html index cbd0e12f..eda7910f 100644 --- a/docs/reference/ds.rNorm.html +++ b/docs/reference/ds.rNorm.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -217,7 +217,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rPois.html b/docs/reference/ds.rPois.html index d25d7b34..3127b3bb 100644 --- a/docs/reference/ds.rPois.html +++ b/docs/reference/ds.rPois.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -192,7 +192,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rUnif.html b/docs/reference/ds.rUnif.html index 196bb58c..1008dc8b 100644 --- a/docs/reference/ds.rUnif.html +++ b/docs/reference/ds.rUnif.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -223,7 +223,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.ranksSecure.html b/docs/reference/ds.ranksSecure.html index de76fb47..bc645648 100644 --- a/docs/reference/ds.ranksSecure.html +++ b/docs/reference/ds.ranksSecure.html @@ -18,7 +18,11 @@ dsBaseClient +<<<<<<< HEAD 6.3.5 +======= + 7.0.0-9000 +>>>>>>> origin/v7.0-dev @@ -282,7 +286,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rbind.html b/docs/reference/ds.rbind.html index 20ba102f..2f68e9a8 100644 --- a/docs/reference/ds.rbind.html +++ b/docs/reference/ds.rbind.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -175,7 +175,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.reShape.html b/docs/reference/ds.reShape.html index 322ce21a..e91469c7 100644 --- a/docs/reference/ds.reShape.html +++ b/docs/reference/ds.reShape.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -198,7 +198,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.recodeLevels.html b/docs/reference/ds.recodeLevels.html index d97a8bd5..70c5d8d1 100644 --- a/docs/reference/ds.recodeLevels.html +++ b/docs/reference/ds.recodeLevels.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -148,7 +148,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.recodeValues.html b/docs/reference/ds.recodeValues.html index a1fb4993..6a047e4c 100644 --- a/docs/reference/ds.recodeValues.html +++ b/docs/reference/ds.recodeValues.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -136,7 +136,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rep.html b/docs/reference/ds.rep.html index 617fc994..cff47518 100644 --- a/docs/reference/ds.rep.html +++ b/docs/reference/ds.rep.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -210,7 +210,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.replaceNA.html b/docs/reference/ds.replaceNA.html index cc6cae26..79fb2aa6 100644 --- a/docs/reference/ds.replaceNA.html +++ b/docs/reference/ds.replaceNA.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -174,7 +174,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rm.html b/docs/reference/ds.rm.html index 9cee50f7..4685a78f 100644 --- a/docs/reference/ds.rm.html +++ b/docs/reference/ds.rm.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -144,7 +144,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.rowColCalc.html b/docs/reference/ds.rowColCalc.html index bf5c4bd3..24460263 100644 --- a/docs/reference/ds.rowColCalc.html +++ b/docs/reference/ds.rowColCalc.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -147,7 +147,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.sample.html b/docs/reference/ds.sample.html index fce85af6..c3832a02 100644 --- a/docs/reference/ds.sample.html +++ b/docs/reference/ds.sample.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -238,7 +238,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.scatterPlot.html b/docs/reference/ds.scatterPlot.html index 29a8fb3a..a9017b4f 100644 --- a/docs/reference/ds.scatterPlot.html +++ b/docs/reference/ds.scatterPlot.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -226,7 +226,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.seq.html b/docs/reference/ds.seq.html index dbe318bc..f7a8ae1c 100644 --- a/docs/reference/ds.seq.html +++ b/docs/reference/ds.seq.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -217,7 +217,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.setDefaultOpals.html b/docs/reference/ds.setDefaultOpals.html index 3168244f..b37d6871 100644 --- a/docs/reference/ds.setDefaultOpals.html +++ b/docs/reference/ds.setDefaultOpals.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -97,7 +97,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.setSeed.html b/docs/reference/ds.setSeed.html index 2ad8ed00..86b102af 100644 --- a/docs/reference/ds.setSeed.html +++ b/docs/reference/ds.setSeed.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -160,7 +160,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.skewness.html b/docs/reference/ds.skewness.html index 682adc17..01818e3a 100644 --- a/docs/reference/ds.skewness.html +++ b/docs/reference/ds.skewness.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -158,7 +158,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.sqrt.html b/docs/reference/ds.sqrt.html index 16af5d71..16679f1b 100644 --- a/docs/reference/ds.sqrt.html +++ b/docs/reference/ds.sqrt.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -149,7 +149,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.subset.html b/docs/reference/ds.subset.html index 3f7438ee..9bcfb801 100644 --- a/docs/reference/ds.subset.html +++ b/docs/reference/ds.subset.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -184,7 +184,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.subsetByClass.html b/docs/reference/ds.subsetByClass.html index 1c11feeb..8ac9d4a7 100644 --- a/docs/reference/ds.subsetByClass.html +++ b/docs/reference/ds.subsetByClass.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -146,7 +146,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.summary.html b/docs/reference/ds.summary.html index e8c1eda5..886a3681 100644 --- a/docs/reference/ds.summary.html +++ b/docs/reference/ds.summary.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -143,7 +143,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.table.html b/docs/reference/ds.table.html index c82b5f35..c46ad065 100644 --- a/docs/reference/ds.table.html +++ b/docs/reference/ds.table.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -288,7 +288,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.table1D.html b/docs/reference/ds.table1D.html index ddfbdc28..d7199dfa 100644 --- a/docs/reference/ds.table1D.html +++ b/docs/reference/ds.table1D.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -164,7 +164,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.table2D.html b/docs/reference/ds.table2D.html index d52a5eff..b2bfea29 100644 --- a/docs/reference/ds.table2D.html +++ b/docs/reference/ds.table2D.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -143,7 +143,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.tapply.assign.html b/docs/reference/ds.tapply.assign.html index 96705888..d1ca8e8f 100644 --- a/docs/reference/ds.tapply.assign.html +++ b/docs/reference/ds.tapply.assign.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -216,7 +216,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.tapply.html b/docs/reference/ds.tapply.html index 176ec09e..39c9f854 100644 --- a/docs/reference/ds.tapply.html +++ b/docs/reference/ds.tapply.html @@ -19,7 +19,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -207,7 +207,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.testObjExists.html b/docs/reference/ds.testObjExists.html index f0f24b0f..bc7e9edf 100644 --- a/docs/reference/ds.testObjExists.html +++ b/docs/reference/ds.testObjExists.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -135,7 +135,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.unList.html b/docs/reference/ds.unList.html index 036a61a2..dfb459fa 100644 --- a/docs/reference/ds.unList.html +++ b/docs/reference/ds.unList.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -153,7 +153,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.unique.html b/docs/reference/ds.unique.html index 55f6bb2a..08d6ef9b 100644 --- a/docs/reference/ds.unique.html +++ b/docs/reference/ds.unique.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -126,7 +126,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.var.html b/docs/reference/ds.var.html index a85e61f8..68691eb1 100644 --- a/docs/reference/ds.var.html +++ b/docs/reference/ds.var.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -157,7 +157,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/ds.vectorCalc.html b/docs/reference/ds.vectorCalc.html index 5a79cf20..97fabde9 100644 --- a/docs/reference/ds.vectorCalc.html +++ b/docs/reference/ds.vectorCalc.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -124,7 +124,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/extract.html b/docs/reference/extract.html index 9f6a95da..fda0edae 100644 --- a/docs/reference/extract.html +++ b/docs/reference/extract.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -76,7 +76,7 @@

Details

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/getPooledMean.html b/docs/reference/getPooledMean.html index 6fc7a8f9..43036481 100644 --- a/docs/reference/getPooledMean.html +++ b/docs/reference/getPooledMean.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -83,7 +83,7 @@

Details

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/getPooledVar.html b/docs/reference/getPooledVar.html index 0f2c8a5a..091ac32a 100644 --- a/docs/reference/getPooledVar.html +++ b/docs/reference/getPooledVar.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -83,7 +83,7 @@

Details

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/glmChecks.html b/docs/reference/glmChecks.html index 0b29fa63..dc682998 100644 --- a/docs/reference/glmChecks.html +++ b/docs/reference/glmChecks.html @@ -18,7 +18,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -104,7 +104,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/index.html b/docs/reference/index.html index 94202300..d254fe3b 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -353,6 +353,10 @@

All functions ds.matrixTranspose()

Transposes a server-side matrix

+ +

ds.mdPattern()

+ +

Display missing data patterns with disclosure control

ds.mean()

@@ -417,10 +421,6 @@

All functions ds.rUnif()

Generates Uniform distribution in the server-side

- -

ds.ranksSecure()

- -

Secure ranking of a vector across all sources

ds.rbind()

@@ -542,7 +542,7 @@

All functions
-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/isAssigned.html b/docs/reference/isAssigned.html index 4ece4a7b..41addd07 100644 --- a/docs/reference/isAssigned.html +++ b/docs/reference/isAssigned.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -84,7 +84,7 @@

Details

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/isDefined.html b/docs/reference/isDefined.html index e55aed7f..ba4e5c44 100644 --- a/docs/reference/isDefined.html +++ b/docs/reference/isDefined.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -95,7 +95,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/logical2int.html b/docs/reference/logical2int.html index b9c46a76..670aee30 100644 --- a/docs/reference/logical2int.html +++ b/docs/reference/logical2int.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -78,7 +78,7 @@

Details

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/meanByClassHelper0a.html b/docs/reference/meanByClassHelper0a.html index 1e336220..8f51caa2 100644 --- a/docs/reference/meanByClassHelper0a.html +++ b/docs/reference/meanByClassHelper0a.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -97,7 +97,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/meanByClassHelper0b.html b/docs/reference/meanByClassHelper0b.html index 504d47e3..ec8d6dce 100644 --- a/docs/reference/meanByClassHelper0b.html +++ b/docs/reference/meanByClassHelper0b.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -101,7 +101,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/meanByClassHelper1.html b/docs/reference/meanByClassHelper1.html index e670b1f8..71330015 100644 --- a/docs/reference/meanByClassHelper1.html +++ b/docs/reference/meanByClassHelper1.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -94,7 +94,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/meanByClassHelper2.html b/docs/reference/meanByClassHelper2.html index cfecec98..6ed19694 100644 --- a/docs/reference/meanByClassHelper2.html +++ b/docs/reference/meanByClassHelper2.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -95,7 +95,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/meanByClassHelper3.html b/docs/reference/meanByClassHelper3.html index 77a2c74e..2a925d93 100644 --- a/docs/reference/meanByClassHelper3.html +++ b/docs/reference/meanByClassHelper3.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -94,7 +94,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/meanByClassHelper4.html b/docs/reference/meanByClassHelper4.html index 411a51db..d9e0e16a 100644 --- a/docs/reference/meanByClassHelper4.html +++ b/docs/reference/meanByClassHelper4.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -104,7 +104,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/rowPercent.html b/docs/reference/rowPercent.html index cd88b8fb..1e7def70 100644 --- a/docs/reference/rowPercent.html +++ b/docs/reference/rowPercent.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -80,7 +80,7 @@

Author

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/reference/subsetHelper.html b/docs/reference/subsetHelper.html index 9ed71de2..0e12af20 100644 --- a/docs/reference/subsetHelper.html +++ b/docs/reference/subsetHelper.html @@ -17,7 +17,7 @@ dsBaseClient - 6.3.5 + 7.0.0.9000 @@ -135,7 +135,7 @@

Examples

-

Site built with pkgdown 2.1.3.

+

Site built with pkgdown 2.2.0.

diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 39df9eef..fe21f864 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -6,6 +6,7 @@ /reference/checkClass.html /reference/colPercent.html /reference/computeWeightedMeans.html +/reference/dot-pool_md_patterns.html /reference/ds.Boole.html /reference/ds.abs.html /reference/ds.asCharacter.html @@ -84,6 +85,7 @@ /reference/ds.matrixInvert.html /reference/ds.matrixMult.html /reference/ds.matrixTranspose.html +/reference/ds.mdPattern.html /reference/ds.mean.html /reference/ds.meanByClass.html /reference/ds.meanSdGp.html diff --git a/dsBase_6.3.5-permissive.tar.gz b/dsBase_7.0-dev-feat_performance-permissive.tar.gz similarity index 56% rename from dsBase_6.3.5-permissive.tar.gz rename to dsBase_7.0-dev-feat_performance-permissive.tar.gz index 3703315d..1fca22d0 100644 Binary files a/dsBase_6.3.5-permissive.tar.gz and b/dsBase_7.0-dev-feat_performance-permissive.tar.gz differ diff --git a/dsBase_6.3.5.tar.gz b/dsBase_7.0-dev-feat_performance.tar.gz similarity index 53% rename from dsBase_6.3.5.tar.gz rename to dsBase_7.0-dev-feat_performance.tar.gz index 0ea538d0..43e1ea28 100644 Binary files a/dsBase_6.3.5.tar.gz and b/dsBase_7.0-dev-feat_performance.tar.gz differ diff --git a/man/dot-pool_md_patterns.Rd b/man/dot-pool_md_patterns.Rd new file mode 100644 index 00000000..baabf3e9 --- /dev/null +++ b/man/dot-pool_md_patterns.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ds.mdPattern.R +\name{.pool_md_patterns} +\alias{.pool_md_patterns} +\title{Pool missing data patterns across studies} +\usage{ +.pool_md_patterns(patterns_list, study_names) +} +\arguments{ +\item{patterns_list}{List of pattern matrices from each study} + +\item{study_names}{Names of the studies} +} +\value{ +Pooled pattern matrix +} +\description{ +Internal function to pool md.pattern results from multiple studies +} +\keyword{internal} diff --git a/man/ds.colnames.Rd b/man/ds.colnames.Rd index 3f44ee30..e7391081 100644 --- a/man/ds.colnames.Rd +++ b/man/ds.colnames.Rd @@ -9,9 +9,9 @@ ds.colnames(x = NULL, datasources = NULL) \arguments{ \item{x}{a character string providing the name of the input data frame or matrix.} -\item{datasources}{a list of \code{\link{DSConnection-class}} objects obtained after login. +\item{datasources}{a list of \code{\link[DSI]{DSConnection-class}} objects obtained after login. If the \code{datasources} argument is not specified -the default set of connections will be used: see \code{\link{datashield.connections_default}}.} +the default set of connections will be used: see \code{\link[DSI]{datashield.connections_default}}.} } \value{ \code{ds.colnames} returns the column names of diff --git a/man/ds.mdPattern.Rd b/man/ds.mdPattern.Rd new file mode 100644 index 00000000..b1bacc0b --- /dev/null +++ b/man/ds.mdPattern.Rd @@ -0,0 +1,126 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ds.mdPattern.R +\name{ds.mdPattern} +\alias{ds.mdPattern} +\title{Display missing data patterns with disclosure control} +\usage{ +ds.mdPattern(x = NULL, type = "split", datasources = NULL) +} +\arguments{ +\item{x}{a character string specifying the name of a data frame or matrix on the +server-side containing the data to analyze.} + +\item{type}{a character string specifying the output type. If 'split' (default), +returns separate patterns for each study. If 'combine', attempts to pool patterns +across studies.} + +\item{datasources}{a list of \code{\link[DSI]{DSConnection-class}} objects obtained +after login. If the \code{datasources} argument is not specified, the default set of +connections will be used: see \code{\link[DSI]{datashield.connections_default}}.} +} +\value{ +For type='split': A list with one element per study, each containing: +\describe{ + \item{pattern}{The missing data pattern matrix for that study} + \item{valid}{Logical indicating if all patterns meet disclosure requirements} + \item{message}{A message describing the validity status} +} + +For type='combine': A list containing: +\describe{ + \item{pattern}{The pooled missing data pattern matrix across all studies} + \item{valid}{Logical indicating if all pooled patterns meet disclosure requirements} + \item{message}{A message describing the validity status} +} +} +\description{ +This function is a client-side wrapper for the server-side mdPatternDS +function. It generates a missing data pattern matrix similar to mice::md.pattern but +with disclosure control applied to prevent revealing small cell counts. +} +\details{ +The function calls the server-side mdPatternDS function which uses +mice::md.pattern to analyze missing data patterns. Patterns with counts below the +disclosure threshold (default: nfilter.tab = 3) are suppressed to maintain privacy. + +\strong{Output Format:} +- Each row represents a missing data pattern +- Pattern counts are shown in row names (e.g., "150", "25") +- Columns show 1 if the variable is observed, 0 if missing +- Last column shows the total number of missing values per pattern +- Last row shows the total number of missing values per variable + +\strong{Disclosure Control:} + +Suppressed patterns (count below threshold) are indicated by: +- Row name: "suppressed()" where N is the threshold +- All pattern values set to NA +- Summary row also suppressed to prevent back-calculation + +\strong{Pooling Behavior (type='combine'):} + +When pooling across studies, the function uses a \emph{conservative approach} +for disclosure control: + +1. Identifies identical missing patterns across studies +2. \strong{EXCLUDES suppressed patterns from pooling} - patterns suppressed in + ANY study are not included in the pooled count +3. Sums counts only for non-suppressed identical patterns +4. Re-validates pooled counts against disclosure threshold + +\strong{Important:} This conservative approach means: +- Pooled counts may be \emph{underestimates} if some studies had suppressed patterns +- This prevents disclosure through subtraction (e.g., if study A shows count=5 + and pool shows count=7, one could deduce study B has count=2, violating disclosure) +- Different patterns across studies are preserved separately in the pooled result +} +\examples{ +\dontrun{ + ## Version 6, for version 5 see the Wiki + + # Connecting to the Opal servers + + require('DSI') + require('DSOpal') + require('dsBaseClient') + + builder <- DSI::newDSLoginBuilder() + builder$append(server = "study1", + url = "http://192.168.56.100:8080/", + user = "administrator", password = "datashield_test&", + table = "CNSIM.CNSIM1", driver = "OpalDriver") + builder$append(server = "study2", + url = "http://192.168.56.100:8080/", + user = "administrator", password = "datashield_test&", + table = "CNSIM.CNSIM2", driver = "OpalDriver") + logindata <- builder$build() + + connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") + + # Get missing data patterns for each study separately + patterns_split <- ds.mdPattern(x = "D", type = "split", datasources = connections) + + # View results for study1 + print(patterns_split$study1$pattern) + # var1 var2 var3 + # 150 1 1 1 0 <- 150 obs complete + # 25 0 1 1 1 <- 25 obs missing var1 + # 25 0 0 25 <- Summary: 25 missing per variable + + # Get pooled missing data patterns across studies + patterns_pooled <- ds.mdPattern(x = "D", type = "combine", datasources = connections) + print(patterns_pooled$pattern) + + # Example with suppressed patterns: + # If study1 has a pattern with count=2 (suppressed) and study2 has same pattern + # with count=5 (valid), the pooled result will show count=5 (conservative approach) + # A warning will indicate: "Pooled counts may underestimate the true total" + + # Clear the Datashield R sessions and logout + datashield.logout(connections) +} + +} +\author{ +Xavier Escribà montagut for DataSHIELD Development Team +} diff --git a/opal_azure-pipelines.yml b/opal_azure-pipelines.yml index dab96a79..a9410f69 100644 --- a/opal_azure-pipelines.yml +++ b/opal_azure-pipelines.yml @@ -58,10 +58,10 @@ schedules: - master always: true - cron: "0 2 * * *" - displayName: Nightly build - v6.3.5-dev + displayName: Nightly build - v7.0-dev-feat/performance branches: include: - - v6.3.5-dev + - v7.0-dev-feat/performance always: true ######################################################################################### @@ -235,7 +235,7 @@ jobs: - bash: | R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o)" - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v6.3.5-dev'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = '7.0-dev-feat/performance'); opal.logout(opal)" sleep 60 diff --git a/tests/docker/armadillo/standard/config/application.yml b/tests/docker/armadillo/standard/config/application.yml index 12b78ec8..54e90c36 100644 --- a/tests/docker/armadillo/standard/config/application.yml +++ b/tests/docker/armadillo/standard/config/application.yml @@ -14,17 +14,11 @@ armadillo: # oidc-admin-user: user@yourdomain.org profiles: - name: default - image: datashield/rock-omicron-karma:devel + image: datashield/rock-quebrada-lamda-permissive:latest port: 8085 host: default package-whitelist: # Packages for 'permissive' - dsBase - - dsMediation - - dsMTLBase - - dsSurvival - - dsTidyverse - - dsExposome - - dsOmics - resourcer function-blacklist: [ ] options: diff --git a/tests/testthat/perf_files/armadillo_azure-pipeline.csv b/tests/testthat/perf_files/armadillo_azure-pipeline.csv index e913cff9..03d36d8f 100644 --- a/tests/testthat/perf_files/armadillo_azure-pipeline.csv +++ b/tests/testthat/perf_files/armadillo_azure-pipeline.csv @@ -1,14 +1,14 @@ "refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.1225","0.5","2" -"ds.abs::perf::0","5.820","0.5","2" -"ds.asInteger::perf:0","5.328","0.5","2" -"ds.asList::perf:0","11.71","0.5","2" -"ds.asNumeric::perf:0","5.268","0.5","2" -"ds.assign::perf::0","9.229","0.5","2" -"ds.class::perf::combine:0","10.84","0.5","2" -"ds.colnames::perf:0","7.993","0.5","2" -"ds.exists::perf::combine:0","21.68","0.5","2" -"ds.length::perf::combine:0","21.84","0.5","2" -"ds.mean::perf::combine:0","22.01","0.5","2" -"ds.mean::perf::split:0","22.22","0.5","2" -"void::perf::void::0","48520.0","0.5","2" +"conndisconn::perf::simple0","0.1651","0.5","2" +"ds.abs::perf::0","6.273","0.5","2" +"ds.asInteger::perf:0","5.731","0.5","2" +"ds.asList::perf:0","12.74","0.5","2" +"ds.asNumeric::perf:0","5.637","0.5","2" +"ds.assign::perf::0","10.46","0.5","2" +"ds.class::perf::combine:0","12.69","0.5","2" +"ds.colnames::perf:0","9.518","0.5","2" +"ds.exists::perf::combine:0","25.33","0.5","2" +"ds.length::perf::combine:0","25.45","0.5","2" +"ds.mean::perf::combine:0","25.37","0.5","2" +"ds.mean::perf::split:0","25.74","0.5","2" +"void::perf::void::0","56310.0","0.5","2" diff --git a/tests/testthat/perf_files/default_perf_profile.csv b/tests/testthat/perf_files/default_perf_profile.csv index d75711a3..9f1ae6e5 100644 --- a/tests/testthat/perf_files/default_perf_profile.csv +++ b/tests/testthat/perf_files/default_perf_profile.csv @@ -6,7 +6,7 @@ "ds.asNumeric::perf:0","2.185","0.5","2" "ds.assign::perf::0","5.490","0.5","2" "ds.class::perf::combine:0","4.760","0.5","2" -"ds.colnames::perf:0","4.159","0.5","2" +"ds.colnames::perf:0","4.218","0.5","2" "ds.exists::perf::combine:0","11.09","0.5","2" "ds.length::perf::combine:0","9.479","0.5","2" "ds.mean::perf::combine:0","9.650","0.5","2" diff --git a/tests/testthat/perf_files/opal_azure-pipeline.csv b/tests/testthat/perf_files/opal_azure-pipeline.csv index d75711a3..9f1ae6e5 100644 --- a/tests/testthat/perf_files/opal_azure-pipeline.csv +++ b/tests/testthat/perf_files/opal_azure-pipeline.csv @@ -6,7 +6,7 @@ "ds.asNumeric::perf:0","2.185","0.5","2" "ds.assign::perf::0","5.490","0.5","2" "ds.class::perf::combine:0","4.760","0.5","2" -"ds.colnames::perf:0","4.159","0.5","2" +"ds.colnames::perf:0","4.218","0.5","2" "ds.exists::perf::combine:0","11.09","0.5","2" "ds.length::perf::combine:0","9.479","0.5","2" "ds.mean::perf::combine:0","9.650","0.5","2" diff --git a/tests/testthat/test-arg-ds.foobar.R b/tests/testthat/test-arg-ds.foobar.R index 36d5ac97..19f959f2 100644 --- a/tests/testthat/test-arg-ds.foobar.R +++ b/tests/testthat/test-arg-ds.foobar.R @@ -29,10 +29,9 @@ test_that("setup", { test_that("NULL connections", { calltext <- call("fooBarDS") if (ds.test_env$driver == "ArmadilloDriver") { - expect_error(datashield.aggregate(conns=NULL, expr=calltext), "no applicable method for `@` applied to an object of class \"NULL\"", fixed=TRUE) -# expect_error(datashield.aggregate(conns=NULL, expr=calltext), "trying to get slot \"name\" from an object of a basic class (\"NULL\") with no slots", fixed=TRUE) + expect_error(datashield.aggregate(conns=NULL, expr=calltext), "unable to find an inherited method for function 'dsIsAsync' for signature 'conn = \"NULL\"'", fixed=TRUE) } else if (ds.test_env$driver == "OpalDriver") { - expect_error(datashield.aggregate(conns=NULL, expr=calltext), "no applicable method for `@` applied to an object of class \"NULL\"", fixed=TRUE) + expect_error(datashield.aggregate(conns=NULL, expr=calltext), "unable to find an inherited method for function 'dsIsAsync' for signature 'conn = \"NULL\"'", fixed=TRUE) } else { fail(message = "Unknown driver type", info = ds.test_env$driver) } @@ -70,10 +69,9 @@ test_that("non existent aggregate foobarDS", { test_that("NULL connections", { calltext <- call("fooBarDS") if (ds.test_env$driver == "ArmadilloDriver") { - expect_error(datashield.assign(conns=NULL, symbol="new_obj", value=calltext), "no applicable method for `@` applied to an object of class \"NULL\"", fixed=TRUE) -# expect_error(datashield.assign(conns=NULL, symbol="new_obj", value=calltext), "trying to get slot \"name\" from an object of a basic class (\"NULL\") with no slots", fixed=TRUE) + expect_error(datashield.assign(conns=NULL, symbol="new_obj", value=calltext), "unable to find an inherited method for function 'dsIsAsync' for signature 'conn = \"NULL\"'", fixed=TRUE) } else if (ds.test_env$driver == "OpalDriver") { - expect_error(datashield.assign(conns=NULL, symbol="new_obj", value=calltext), "no applicable method for `@` applied to an object of class \"NULL\"", fixed=TRUE) + expect_error(datashield.assign(conns=NULL, symbol="new_obj", value=calltext), "unable to find an inherited method for function 'dsIsAsync' for signature 'conn = \"NULL\"'", fixed=TRUE) } else { fail(message = "Unknown driver type", info = ds.test_env$driver) } diff --git a/tests/testthat/test-smk-ds.colnames.R b/tests/testthat/test-smk-ds.colnames.R index 7207adc3..b7d289ac 100644 --- a/tests/testthat/test-smk-ds.colnames.R +++ b/tests/testthat/test-smk-ds.colnames.R @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------- # Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2022-2025 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. # # This program and the accompanying materials # are made available under the terms of the GNU Public License v3.0. @@ -12,7 +13,7 @@ # Set up # -context("ds.colnames::smk::setup") +# context("ds.colnames::smk::setup") connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) @@ -24,7 +25,7 @@ test_that("setup", { # Tests # -context("ds.colnames::smk") +# context("ds.colnames::smk") test_that("simple colnames", { myvectors <- c("D$LAB_TSC", "D$LAB_TRIG") ds.dataFrame(x=myvectors, newobj="new_df") @@ -43,11 +44,30 @@ test_that("simple colnames", { expect_equal(res$sim3[2], "LAB_TRIG") }) +test_that("fails if the object does not exist", { + expect_error( + ds.colnames("non_existing_df"), + regexp = "The input object non_existing_df is not defined in sim1, sim2, sim3!", + ignore.case = TRUE + ) +}) + +########################################### +### Remote checks not performed ### +########################################### +# test_that("fails if object is not a data frame or matrix", { +# expect_error( +# ds.colnames("D$LAB_TSC"), +# regexp = "must be of type data.frame or matrix", +# ignore.case = TRUE +# ) +# }) + # # Done # -context("ds.colnames::smk::shutdown") +# context("ds.colnames::smk::shutdown") test_that("shutdown", { ds_expect_variables(c("D", "new_df")) @@ -55,4 +75,4 @@ test_that("shutdown", { disconnect.studies.dataset.cnsim() -context("ds.colnames::smk::done") +# context("ds.colnames::smk::done") diff --git a/tests/testthat/test-smk-ds.listClientsideFunctions.R b/tests/testthat/test-smk-ds.listClientsideFunctions.R index befb7324..fc5ab5e2 100644 --- a/tests/testthat/test-smk-ds.listClientsideFunctions.R +++ b/tests/testthat/test-smk-ds.listClientsideFunctions.R @@ -106,7 +106,6 @@ test_that("check results", { "ds.numNA", "ds.qlspline", "ds.quantileMean", - "ds.ranksSecure", "ds.rbind", "ds.rBinom", "ds.recodeLevels", diff --git a/tests/testthat/test-smk_expt-ds.ranksSecure.R b/tests/testthat/test-smk_expt-ds.ranksSecure.R index edb86cd2..4da33430 100644 --- a/tests/testthat/test-smk_expt-ds.ranksSecure.R +++ b/tests/testthat/test-smk_expt-ds.ranksSecure.R @@ -27,48 +27,48 @@ test_that("setup", { # context("ds.ranksSecure::smk_expt::continous, without NAs, all positive") test_that("continous, without NAs, all positive", { - res.cc <- ds.completeCases("D$LAB_TSC", newobj="CC_LAB_TSC") - expect_equal(res.cc$validity.check, " appears valid in all sources") - - res.num.na <- ds.numNA("CC_LAB_TSC") - expect_length(res.num.na, 3) - expect_equal(res.num.na$sim1, 0) - expect_equal(res.num.na$sim2, 0) - expect_equal(res.num.na$sim3, 0) - - res <- ds.ranksSecure("CC_LAB_TSC") - - expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont.rds') +# res.cc <- ds.completeCases("D$LAB_TSC", newobj="CC_LAB_TSC") +# expect_equal(res.cc$validity.check, " appears valid in all sources") +# +# res.num.na <- ds.numNA("CC_LAB_TSC") +# expect_length(res.num.na, 3) +# expect_equal(res.num.na$sim1, 0) +# expect_equal(res.num.na$sim2, 0) +# expect_equal(res.num.na$sim3, 0) +# +# res <- ds.ranksSecure("CC_LAB_TSC") +# +# expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont.rds') }) # context("ds.ranksSecure::smk_expt::continous, without NAs, with negative") test_that("continous, without NAs, with negative", { - res.cc <- ds.completeCases("D$LAB_TRIG", newobj="CC_LAB_TRIG") - expect_equal(res.cc$validity.check, " appears valid in all sources") - - res.num.na <- ds.numNA("CC_LAB_TRIG") - expect_length(res.num.na, 3) - expect_equal(res.num.na$sim1, 0) - expect_equal(res.num.na$sim2, 0) - expect_equal(res.num.na$sim3, 0) - - res <- ds.ranksSecure("CC_LAB_TRIG") - - expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont_neg.rds') +# res.cc <- ds.completeCases("D$LAB_TRIG", newobj="CC_LAB_TRIG") +# expect_equal(res.cc$validity.check, " appears valid in all sources") +# +# res.num.na <- ds.numNA("CC_LAB_TRIG") +# expect_length(res.num.na, 3) +# expect_equal(res.num.na$sim1, 0) +# expect_equal(res.num.na$sim2, 0) +# expect_equal(res.num.na$sim3, 0) +# +# res <- ds.ranksSecure("CC_LAB_TRIG") +# +# expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont_neg.rds') }) # context("ds.ranksSecure::smk_expt::continous, with NAs, all positive") test_that("continous, with NAs, all positive", { - res <- ds.ranksSecure("D$LAB_TSC") - - expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont_nas.rds') +# res <- ds.ranksSecure("D$LAB_TSC") +# +# expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont_nas.rds') }) # context("ds.ranksSecure::smk_expt::continous, with NAs, with negative") test_that("continous, with NAs, with negative", { - res <- ds.ranksSecure("D$LAB_TRIG") - - expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont_nas_neg.rds') +# res <- ds.ranksSecure("D$LAB_TRIG") +# +# expect_equal_to_reference(res, 'smk_expt-results/ds.ranksSecure-cont_nas_neg.rds') }) # @@ -78,7 +78,7 @@ test_that("continous, with NAs, with negative", { # context("ds.ranksSecure::smk_expt::shutdown") test_that("setup", { - ds_expect_variables(c("D", "CC_LAB_TSC", "CC_LAB_TRIG", "final.quantile.df", "summary.ranks.df", "testvar.ranks")) +# ds_expect_variables(c("D", "CC_LAB_TSC", "CC_LAB_TRIG", "final.quantile.df", "summary.ranks.df", "testvar.ranks")) }) disconnect.studies.dataset.cnsim()