diff --git a/.Rbuildignore b/.Rbuildignore index 16f8accd..595fc8b1 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -3,20 +3,8 @@ ^\.Rproj\.user$ ^LICENSE.md$ ^azure-pipelines\.yml$ -^opal_azure-pipelines\.yml$ -^armadillo_azure-pipelines\.yml$ ^azure-pipelines_site\.pp$ ^azure-pipelines_site-dsdanger\.pp$ ^azure-pipelines_check\.Rout$ ^azure-pipelines_test\.Rout$ -^tests/docker/armadillo/standard/log/.gitkeep$ ^checkDocumentationUpdated\.sh$ -^docker-compose_armadillo\.yml$ -^docker-compose_opal\.yml$ -^docker-compose\.yml$ -^R/secure.global.ranking.md$ -^_pkgdown\.yml$ -^docs$ -^dsBase_6.3.1.tar.gz$ -^dsBase_6.3.1-permissive.tar.gz$ -^dsDanger_6.3.1.tar.gz$ diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 6d14bcea..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (c) 2024 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. - -version: 2.1 - -jobs: - dsbaseclient: - docker: - - image: cimg/base:current - resource_class: small - steps: - - checkout - - setup_remote_docker: - docker_layout_caching: true - - run: | - echo "Building" - echo " Repo Name: " $CIRCLE_PROJECT_REPONAME - echo " Branch: " $CIRCLE_BRANCH - echo " Tag: " $CIRCLE_TAG - - run: - command: | - sudo apt-get update -y - sudo apt-get install -y r-base-core cmake - - run: - command: | - sudo apt-get install -y libxml2-dev libcurl4-openssl-dev libssl-dev libgsl-dev libgit2-dev - sudo apt-get install -y libharfbuzz-dev libfribidi-dev libmagick++-dev libudunits2-dev - - run: - command: | - sudo Rscript -e "install.packages('devtools', dependencies=TRUE)" - sudo Rscript -e "install.packages('covr', dependencies=TRUE)" - - sudo Rscript -e "install.packages('fields', dependencies=TRUE)" - sudo Rscript -e "install.packages('meta', dependencies=TRUE)" - sudo Rscript -e "install.packages('metafor', dependencies=TRUE)" - sudo Rscript -e "install.packages('ggplot2', dependencies=TRUE)" - sudo Rscript -e "install.packages('gridExtra', dependencies=TRUE)" - sudo Rscript -e "install.packages('data.table', dependencies=TRUE)" - sudo Rscript -e "install.packages('panelaggregation', dependencies=TRUE)" - - sudo Rscript -e "install.packages('DSI', dependencies=TRUE)" - sudo Rscript -e "install.packages('DSOpal', dependencies=TRUE)" - sudo Rscript -e "install.packages('DSLite', dependencies=TRUE)" - sudo Rscript -e "install.packages('MolgenisAuth', dependencies=TRUE)" - sudo Rscript -e "install.packages('MolgenisArmadillo', dependencies=TRUE)" - sudo Rscript -e "install.packages('DSMolgenisArmadillo', dependencies=TRUE)" - sudo Rscript -e "install.packages('DescTools', dependencies=TRUE)" - sudo Rscript -e "install.packages('e1071', dependencies=TRUE)" - - sudo Rscript -e "install.packages('RANN', dependencies=TRUE)" - sudo Rscript -e "install.packages('stringr', dependencies=TRUE)" - sudo Rscript -e "install.packages('lme4', dependencies=TRUE)" - sudo Rscript -e "install.packages('dplyr', dependencies=TRUE)" - sudo Rscript -e "install.packages('reshape2', dependencies=TRUE)" - sudo Rscript -e "install.packages('polycor', dependencies=TRUE)" - sudo Rscript -e "install.packages('splines', dependencies=TRUE)" - sudo Rscript -e "install.packages('gamlss', dependencies=TRUE)" - sudo Rscript -e "install.packages('gamlss.dist', dependencies=TRUE)" - sudo Rscript -e "install.packages('mice', dependencies=TRUE)" - sudo Rscript -e "install.packages('childsds', dependencies=TRUE)" - sudo Rscript -e "install.packages('xml2', dependencies=TRUE)" - sudo Rscript -e "install.packages('covr', dependencies=TRUE)" - - run: - command: | - sudo Rscript -e 'library(covr); options("default_driver"="DSLiteDriver"); covr::codecov(token="'$CODECOV_TOKEN'", quiet=FALSE)' -workflows: - build: - jobs: - - dsbaseclient diff --git a/.gitignore b/.gitignore index 60d56797..646e99a1 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,3 @@ inst/tests/test-template.R azure-pipelines.Rout tests/testthat/connection_to_datasets/local_settings.csv -tests/docker/armadillo/standard/logs/ -tests/docker/armadillo/standard/data/ diff --git a/DESCRIPTION b/DESCRIPTION index 01e80961..519cc704 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,24 +1,20 @@ Package: dsBaseClient Title: DataSHIELD Client Functions -Version: 6.3.1 -Author: DataSHIELD Developers -Maintainer: DataSHIELD Developers +Version: 6.1.1 +Author: DataSHIELD Developers +Maintainer: DataSHIELD Developers Description: DataSHIELD client functions for the client side. License: GPL-3 Depends: R (>= 3.5.0), - DSI (>= 1.3.0) + DSI (>= 1.2.0) Imports: fields, metafor, - meta, ggplot2, gridExtra, data.table, panelaggregation, - methods, - dplyr -Suggests: - testthat -RoxygenNote: 7.3.2 + methods +RoxygenNote: 7.1.1 Encoding: UTF-8 diff --git a/NAMESPACE b/NAMESPACE index a112b9c9..d1e89215 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -5,16 +5,13 @@ export(ds.abs) export(ds.asCharacter) export(ds.asDataMatrix) export(ds.asFactor) -export(ds.asFactorSimple) export(ds.asInteger) export(ds.asList) export(ds.asLogical) export(ds.asMatrix) export(ds.asNumeric) export(ds.assign) -export(ds.auc) export(ds.boxPlot) -export(ds.bp_standards) export(ds.c) export(ds.cbind) export(ds.changeRefGroup) @@ -31,12 +28,8 @@ export(ds.dataFrameSort) export(ds.dataFrameSubset) export(ds.densityGrid) export(ds.dim) -export(ds.dmtC2S) -export(ds.elspline) export(ds.exists) export(ds.exp) -export(ds.forestplot) -export(ds.gamlss) export(ds.getWGSR) export(ds.glm) export(ds.glmPredict) @@ -44,9 +37,7 @@ export(ds.glmSLMA) export(ds.glmSummary) export(ds.glmerSLMA) export(ds.heatmapPlot) -export(ds.hetcor) export(ds.histogram) -export(ds.igb_standards) export(ds.isNA) export(ds.isValid) export(ds.kurtosis) @@ -62,7 +53,6 @@ export(ds.lmerSLMA) export(ds.log) export(ds.look) export(ds.ls) -export(ds.lspline) export(ds.make) export(ds.matrix) export(ds.matrixDet) @@ -77,18 +67,13 @@ export(ds.meanByClass) export(ds.meanSdGp) export(ds.merge) export(ds.message) -export(ds.metadata) -export(ds.mice) export(ds.names) -export(ds.ns) export(ds.numNA) -export(ds.qlspline) export(ds.quantileMean) export(ds.rBinom) export(ds.rNorm) export(ds.rPois) export(ds.rUnif) -export(ds.ranksSecure) export(ds.rbind) export(ds.reShape) export(ds.recodeLevels) @@ -114,8 +99,6 @@ export(ds.tapply) export(ds.tapply.assign) export(ds.testObjExists) export(ds.unList) -export(ds.unique) export(ds.var) export(ds.vectorCalc) import(DSI) -import(data.table) diff --git a/R/ds.Boole.R b/R/ds.Boole.R index 1c5cf4f4..bce51492 100644 --- a/R/ds.Boole.R +++ b/R/ds.Boole.R @@ -24,7 +24,7 @@ #' #' @param V1 A character string specifying the name of the vector to which the Boolean operator #' is to be applied. -#' @param V2 A character string specifying the name of the vector to compare with \code{V1}. +#' @param V2 A character string specifying the name of the vector to compare with \code{V1}. #' @param Boolean.operator A character string specifying one of six possible Boolean operators: #' \code{'==', '!=', '>', '>=', '<'} and \code{'<='}. #' @param numeric.output logical. If TRUE the output variable should be of class numeric (\code{1/0}). @@ -177,7 +177,7 @@ ds.Boole<-function(V1=NULL, V2=NULL, Boolean.operator=NULL, numeric.output=TRUE, newobj <- paste0(V1,"_Boole") } - # CALL THE MAIN SERVER SIDE FUNCTION +# CALL THE MAIN SERVER SIDE FUNCTION calltext <- call("BooleDS", V1, V2, BO.n, na.assign,numeric.output) DSI::datashield.assign(datasources, newobj, calltext) @@ -209,7 +209,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.abs.R b/R/ds.abs.R index 5b57b0ed..c70942dc 100644 --- a/R/ds.abs.R +++ b/R/ds.abs.R @@ -86,15 +86,26 @@ ds.abs <- function(x=NULL, newobj=NULL, datasources=NULL){ stop("Please provide the name of the input object!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) # call the internal function that checks the input object(s) is(are) of the same class in all studies. if(!('numeric' %in% typ) && !('integer' %in% typ)){ - stop("Only objects of type 'numeric' or 'integer' are allowed.", call.=FALSE) + stop("Only objects of type 'numeric' or 'integer' are allowed.", call.=FALSE) } # create a name by default if the user did not provide a name for the new variable diff --git a/R/ds.asCharacter.R b/R/ds.asCharacter.R index 72acbd45..ffe40bdb 100644 --- a/R/ds.asCharacter.R +++ b/R/ds.asCharacter.R @@ -1,4 +1,3 @@ -#' #' @title Converts a server-side R object into a character class #' @description Converts the input object into a character class. #' This function is based on the native R function \code{as.character}. @@ -14,7 +13,8 @@ #' the default set of connections will be used: see \code{\link{datashield.connections_default}}. #' @return \code{ds.asCharacter} returns the object converted into a class character #' that is written to the server-side. Also, two validity messages are returned to the client-side -#' indicating the name of the \code{newobj} which has been created in each data source and if +#' indicating the name of the \code{newobj} which +#' has been created in each data source and if #' it is in a valid form. #' @examples #' \dontrun{ @@ -54,7 +54,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.asCharacter <- function(x.name=NULL, newobj=NULL, datasources=NULL){ # look for DS connections @@ -70,9 +69,7 @@ ds.asCharacter <- function(x.name=NULL, newobj=NULL, datasources=NULL){ if(is.null(x.name)){ stop("Please provide the name of the input vector!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, x.name) + # create a name by default if user did not provide a name for the new variable if(is.null(newobj)){ @@ -110,7 +107,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.asDataMatrix.R b/R/ds.asDataMatrix.R index 83b1037f..cefe0e54 100644 --- a/R/ds.asDataMatrix.R +++ b/R/ds.asDataMatrix.R @@ -55,7 +55,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.asDataMatrix <- function(x.name=NULL, newobj=NULL, datasources=NULL){ # look for DS connections @@ -71,17 +70,17 @@ ds.asDataMatrix <- function(x.name=NULL, newobj=NULL, datasources=NULL){ if(is.null(x.name)){ stop("Please provide the name of the input vector!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, x.name) - + + # create a name by default if user did not provide a name for the new variable if(is.null(newobj)){ newobj <- "asdatamatrix.newobj" } - # call the server side function that does the job + # call the server side function that does the job + calltext <- call("asDataMatrixDS", x.name) + DSI::datashield.assign(datasources, newobj, calltext) @@ -109,7 +108,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.asFactor.R b/R/ds.asFactor.R index 7d6246d5..df08c5bd 100644 --- a/R/ds.asFactor.R +++ b/R/ds.asFactor.R @@ -1,53 +1,16 @@ #' @title Converts a server-side numeric vector into a factor -#' @description This function assigns a server-side numeric vector into a factor class. +#' @description This function assigns a server-side numeric vector into a factor type. #' @details Converts a numeric vector into a factor type which is represented either as a vector #' or as a matrix of dummy variables depending on the argument \code{fixed.dummy.vars}. #' The matrix of dummy variables also depends on the argument -#' \code{baseline.level}. -#' -#' ds.asFactor.R and its associated serverside functions asFactorDS1 and asFactorDS2 -#' are to be used when you have variable that has up to 40 unique levels across -#' all sources combined. If one of the sources does not contain any subjects at a -#' particular level, that level will still be created as an empty category. In the -#' end all sources thus include a factor variable with consistent factor levels -#' across all sources - one level for every unique value that occurs in at least one -#' source. This is important when you wish to fit models using ds.glm because the factor -#' levels must be consistent across all studies or the model will not fit. -#' -#' But in order for this to be possible, all sources have to share all of the unique values -#' their source holds for the variable. This allows the client to create a single vector -#' containing all of the unique factor levels across ALL sources. But this is potentially -#' disclosive if there are too many levels. There are therefore two checks on the number of -#' levels in each source. One is simply a test of whether the number of levels exceeds -#' a value specified by the Roption value 'nfilter.max.levels' which is set by default -#' to 40, but the data custodian for the source can choose any alternative value he/she -#' chooses. The second test is of whether the levels are too dense: ie do the number of -#' levels exceed a specified proportion of the full length of the relevant vector -#' in the particular source. The max density is set by the Roption value 'nfilter.levels' -#' which takes the default value 0.33 but can again be modified by the data custodian. -#' -#' In combination, these two checks mean that if a factor has 35 levels in a given study -#' where the total length of the variable to be converted to a factor is 1000 individuals, -#' the ds.asFactor function will process that variable appropriately. But if it had had -#' 45 levels it would have been blocked by 'nfilter.max.levels' and if the total length of -#' the variable in that study had only been 70 subjects it would have been blocked by -#' the density criterion held in 'nfilter.levels'. -#' -#' If you have a factor with more than 40 levels in each source - perhaps most commonly -#' an ID of some sort that you need to provide as an argument to eg a tapply function. -#' Then you cannot use ds.asFactor. Typically in these circumstance you simply want -#' to create a factor that is appropriate for each source but you do not need to ensure -#' that all levels are consistent across all sources. In that case, you can use the -#' ds.asFactorSimple function which does no more than coerce a numeric or character -#' variable to a factor. Because you do not need to share unique factor levels -#' between sources, there is then no disclosure issue. -#' +#' \code{baseline.level}. +#' #' To understand how the matrix of the dummy variable is created let's assume that we have the vector #' \code{(1, 2, 1, 3, 4, 4, 1, 3, 4, 5)} of ten integer numbers. #' If we set the argument \code{fixed.dummy.vars = TRUE}, #' \code{baseline.level = 1} and \code{forced.factor.levels = c(1,2,3,4,5)}. #' The input vector is converted to the following matrix of dummy variables: -#' +#' #' \tabular{rrrrr}{ #' \strong{DV2} \tab \strong{DV3} \tab \strong{DV4} \tab \strong{DV5} \cr #' 0 \tab 0 \tab 0 \tab 0\cr @@ -63,7 +26,7 @@ #' } #' #' For the same example if the \code{baseline.level = 3} then the matrix is: -#' +#' #' \tabular{rrrr}{ #' \strong{DV1} \tab \strong{DV2} \tab \strong{DV4} \tab \strong{DV5} \cr #' 1 \tab 0 \tab 0 \tab 0\cr @@ -77,7 +40,7 @@ #' 0 \tab 0 \tab 1 \tab 0\cr #' 0 \tab 0 \tab 0 \tab 1 #' } -#' +#' #' In the first instance the first row of the matrix has zeros in all entries indicating #' that the first data point belongs to level 1 (as the baseline level is equal to 1). #' The second row has 1 at the first (\code{DV2}) column and zeros elsewhere, @@ -89,7 +52,7 @@ #' Also as we can see the fourth row of the second matrix has all its elements equal #' to zero indicating that the #' fourth data point belongs to level 3 (as the baseline level, in that case, is 3). -#' +#' #' If the \code{baseline.level} is set to be equal to a value #' that is not one of the levels of the factor then a #' matrix of dummy variables is created having as many columns as the number of levels. @@ -99,7 +62,7 @@ #' if we set the \code{baseline.level} equal to a value that does not #' belong to those five levels (\code{baseline.level=8}) #' the matrix of dummy variables is: -#' +#' #' \tabular{rrrrr}{ #' \strong{DV1} \tab \strong{DV2} \tab \strong{DV3} \tab \strong{DV4} \tab \strong{DV5}\cr #' 1 \tab 0 \tab 0 \tab 0 \tab 0\cr @@ -113,8 +76,9 @@ #' 0 \tab 0 \tab 0 \tab 1 \tab 0\cr #' 0 \tab 0 \tab 0 \tab 0 \tab 1 #' } -#' -#' +#' +#' + #' Server functions called: \code{asFactorDS1} and \code{asFactorDS2} #' @param input.var.name a character string which provides #' the name of the variable to be converted to a factor. @@ -137,17 +101,17 @@ #' variable in ascending order and a validity #' message with the name of the created object on the client-side and #' the output matrix or vector in the server-side. -#' +#' #' @examples #' \dontrun{ -#' +#' #' ## Version 6, for version 5 see 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/", @@ -162,7 +126,7 @@ #' 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") #' @@ -180,9 +144,11 @@ #' fixed.dummy.vars = TRUE, #create a matrix of dummy variables #' baseline.level = 1, #' datasources = connections[1])#only the first Opal server is used ("study1") -#' +#' #' # Clear the Datashield R sessions and logout #' datashield.logout(connections) +#' +#' #' } #' @author DataSHIELD Development Team #' @export @@ -270,7 +236,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.asFactorSimple.R b/R/ds.asFactorSimple.R deleted file mode 100644 index dce56a8a..00000000 --- a/R/ds.asFactorSimple.R +++ /dev/null @@ -1,112 +0,0 @@ -#' -#' @title Converts a numeric vector into a factor -#' @description ds.asFactorSimple calls the assign function asFactorSimpleDS and -#' thereby coerces a numeric or character vector into a factor -#' @details The function converts the input variable into a factor. Unlike -#' ds.asFactor and its serverside functions, ds.asFactorSimple does no more than -#' coerce the class of a variable to make it a factor on the serverside in each data source. -#' It does not check for or enforce consistency of factor levels across sources or allow you to -#' force an arbitrary set of levels unless those levels actually exist in the sources. -#' Furthermore, it does not allow you to create an array of -#' binary dummy variables that is equivalent to a factor. If you need to do any -#' of these things you will have to use the ds.asFactor function. -#' @param input.var.name a character string which provides -#' the name of the variable to be converted to a factor. -#' @param newobj.name a character string that provides the name for the output variable -#' that is stored on the data servers. Default \code{asfactor.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @return an output vector of class factor to the serverside. In addition, returns a validity -#' message with the name of the created object on the client-side and if creation fails an -#' error message which can be viewed using datashield.errors(). -#' @author DataSHIELD Development Team -#' @export -#' -ds.asFactorSimple <- function(input.var.name=NULL, newobj.name=NULL, 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) - } - - # check if user has provided the name of the column that holds the input variable - if(is.null(input.var.name)){ - stop("Please provide the name of the variable that is to be converted to a factor e.g. 'varname'", call.=FALSE) - } - - # check if user has provided the name of the input variable in a correct character format - if(!is.character(input.var.name)){ - stop("Please provide the name of the variable that is to be converted to a factor in character format e.g. 'varname'", call.=FALSE) - } - - # if no output variable specified then provide a default name - if(is.null(newobj.name)){ - newobj.name <- "asfactor.newobj" - } - - -#Call the only serverside function required for this simple version of asFactor - calltext0 <- call("asFactorSimpleDS", input.var.name) - DSI::datashield.assign(datasources, newobj.name, calltext0) - -########################################################################################################## -#MODULE 5: CHECK KEY DATA OBJECTS SUCCESSFULLY CREATED # - # -#SET APPROPRIATE PARAMETERS FOR THIS PARTICULAR FUNCTION # -test.obj.name<-newobj.name # - # -# CALL SEVERSIDE FUNCTION # -calltext <- call("testObjExistsDS", test.obj.name) # -object.info<-DSI::datashield.aggregate(datasources, calltext) # - # -# CHECK IN EACH SOURCE WHETHER OBJECT NAME EXISTS # -# AND WHETHER OBJECT PHYSICALLY EXISTS WITH A NON-NULL CLASS # -num.datasources<-length(object.info) # - # - # -obj.name.exists.in.all.sources<-TRUE # -obj.non.null.in.all.sources<-TRUE # - # -for(j in 1:num.datasources){ # - if(!object.info[[j]]$test.obj.exists){ # - obj.name.exists.in.all.sources<-FALSE # - } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # - obj.non.null.in.all.sources<-FALSE # - } # - } # - # -if(obj.name.exists.in.all.sources && obj.non.null.in.all.sources){ # - # - return.message<- # - paste0("Data object <", test.obj.name, "> correctly created in all specified data sources") # - # - return(list(return.message=return.message)) # - # - }else{ # - # - return.message.1<- # - paste0("Error: A valid data object <", test.obj.name, "> does NOT exist in ALL specified data sources")# - # - return.message.2<- # - paste0("It is either ABSENT and/or has no valid content/class,see return.info above") # - # - return.message<-list(return.message.1,return.message.2) # - # - return.info<-object.info # - # -return(list(return.info=return.info,return.message=return.message)) # - # - } # -#END OF MODULE 5 # -########################################################################################################## - - -} -#ds.asFactorSimple \ No newline at end of file diff --git a/R/ds.asInteger.R b/R/ds.asInteger.R index 139ceb6c..e0bae427 100644 --- a/R/ds.asInteger.R +++ b/R/ds.asInteger.R @@ -84,9 +84,6 @@ ds.asInteger <- function(x.name=NULL, newobj=NULL, datasources=NULL){ if(is.null(x.name)){ stop("Please provide the name of the input vector!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, x.name) # create a name by default if user did not provide a name for the new variable if(is.null(newobj)){ @@ -120,7 +117,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.asList.R b/R/ds.asList.R index 5383c506..2772e1b5 100644 --- a/R/ds.asList.R +++ b/R/ds.asList.R @@ -1,4 +1,3 @@ -#' #' @title Converts a server-side R object into a list #' @description Coerces an R object into a list. #' This function is based on the native R function \code{as.list}. @@ -8,14 +7,15 @@ #' @param x.name a character string providing the name of the input object to be coerced to #' a list. #' @param newobj a character string that provides the name for the output object -#' that is stored on the data servers. Default \code{aslist.newobj}. +#' that is stored on the data servers. Default \code{aslist.newobj}. #' @param datasources a list of \code{\link{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}}. #' @return \code{ds.asList} returns the R object converted into a list #' which is written to the server-side. Also, two validity messages are returned to the -#' client-side indicating the name of the \code{newobj} which has been created in each data -#' source and if it is in a valid form. +#' client-side indicating the name of the \code{newobj} which +#' has been created in each data source and if +#' it is in a valid form. #' @examples #' \dontrun{ #' ## Version 6, for version 5 see the Wiki @@ -55,7 +55,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.asList <- function(x.name=NULL, newobj=NULL, datasources=NULL){ # look for DS connections @@ -72,8 +71,6 @@ ds.asList <- function(x.name=NULL, newobj=NULL, datasources=NULL){ stop("Please provide the name of the input vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x.name) # create a name by default if user did not provide a name for the new variable if(is.null(newobj)){ @@ -84,7 +81,7 @@ ds.asList <- function(x.name=NULL, newobj=NULL, datasources=NULL){ calltext <- call("asListDS", x.name, newobj) - out.message <- DSI::datashield.aggregate(datasources, calltext) + out.message<-DSI::datashield.aggregate(datasources, calltext) # print(out.message) #Don't include assign function completion module as it can print out an unhelpful diff --git a/R/ds.asLogical.R b/R/ds.asLogical.R index de2920bf..937c771f 100644 --- a/R/ds.asLogical.R +++ b/R/ds.asLogical.R @@ -55,7 +55,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.asLogical <- function(x.name=NULL, newobj=NULL, datasources=NULL){ # look for DS connections @@ -71,17 +70,17 @@ ds.asLogical <- function(x.name=NULL, newobj=NULL, datasources=NULL){ if(is.null(x.name)){ stop("Please provide the name of the input vector!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, x.name) + # create a name by default if user did not provide a name for the new variable if(is.null(newobj)){ newobj <- "aslogical.newobj" } - # call the server side function that does the job + # call the server side function that does the job + calltext <- call("asLogicalDS", x.name) + DSI::datashield.assign(datasources, newobj, calltext) @@ -109,7 +108,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.asMatrix.R b/R/ds.asMatrix.R index 04186109..b4f9a9ce 100644 --- a/R/ds.asMatrix.R +++ b/R/ds.asMatrix.R @@ -2,8 +2,8 @@ #' @description Coerces an R object into a matrix. #' This converts all columns into character class. #' @details This function is based on the native R function \code{as.matrix}. -#' If this function is applied to a data frame, all columns are converted into a character class. -#' If you wish to convert a data frame to a matrix but maintain all data columns in their +#' If this function is applied to a data frame, all columns are converted into a character class. +#' If you wish to convert a data frame to a matrix but maintain all data columns in their #' original class you should use the function \code{ds.asDataMatrix}. #' #' Server function called: \code{asMatrixDS} @@ -17,7 +17,8 @@ #' @return \code{ds.asMatrix} returns the object converted into a matrix #' that is written to the server-side. Also, two validity messages are returned #' to the client-side indicating the name of the \code{newobj} which -#' has been created in each data source and if it is in a valid form. +#' has been created in each data source and if +#' it is in a valid form. #' @examples #' \dontrun{ #' ## Version 6, for version 5 see the Wiki @@ -56,7 +57,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.asMatrix <- function(x.name=NULL, newobj=NULL, datasources=NULL){ # look for DS connections @@ -72,17 +72,17 @@ ds.asMatrix <- function(x.name=NULL, newobj=NULL, datasources=NULL){ if(is.null(x.name)){ stop("Please provide the name of the input vector!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, x.name) + # create a name by default if user did not provide a name for the new variable if(is.null(newobj)){ newobj <- "asmatrix.newobj" } - # call the server side function that does the job + # call the server side function that does the job + calltext <- call("asMatrixDS", x.name) + DSI::datashield.assign(datasources, newobj, calltext) @@ -110,7 +110,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.asNumeric.R b/R/ds.asNumeric.R index 0c4e9a03..b6c7e204 100644 --- a/R/ds.asNumeric.R +++ b/R/ds.asNumeric.R @@ -3,12 +3,12 @@ #' @description Coerces an R object into a numeric class. #' This function is based on the native R function \code{as.numeric}. #' @details This function is based on the native R function \code{as.numeric}. -#' However, it behaves differently with some specific classes of variables. For example, if the input -#' object is of class factor, it first converts its values into characters and then convert those to -#' numerics. This behavior is important for the case where the input object is of class factor having -#' numbers as levels. In that case, the native R -#' \code{as.numeric} function returns the underlying level codes and not the values as numbers. -#' For example \code{as.numeric} in R converts the factor vector: \cr +#' The only difference is that the DataSHIELD +#' function first converts the values of the input object into characters and then convert +#' those to numerics. This addition is important for the case where the input object is of class +#' factor having numbers as levels. In that case, the native R \code{as.numeric} function returns +#' the underlying level codes and not the values as numbers. For example \code{as.numeric} in R +#' converts the factor vector: \cr #' 0 1 1 2 1 0 1 0 2 2 2 1 \cr #' Levels: 0 1 2 \cr #' to the following numeric vector: @@ -25,7 +25,7 @@ #' @param datasources a list of \code{\link{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}}. -#' @return \code{ds.asNumeric} returns the R object converted into a numeric class +#' @return \code{ds.asNumeric} returns the R object converted into a numeric class #' that is written to the server-side. Also, two validity messages are returned #' to the client-side indicating the name of the \code{newobj} which #' has been created in each data source and if @@ -69,7 +69,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.asNumeric <- function(x.name=NULL, newobj=NULL, datasources=NULL){ # look for DS connections @@ -85,9 +84,6 @@ ds.asNumeric <- function(x.name=NULL, newobj=NULL, datasources=NULL){ if(is.null(x.name)){ stop("Please provide the name of the input vector!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, x.name) # create a name by default if user did not provide a name for the new variable if(is.null(newobj)){ @@ -123,7 +119,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.auc.R b/R/ds.auc.R deleted file mode 100644 index b971651a..00000000 --- a/R/ds.auc.R +++ /dev/null @@ -1,47 +0,0 @@ -#' -#' @title Calculates the Area under the curve (AUC) -#' @description This function calculates the C-statistic or AUC -#' for logistic regression models. -#' @details The AUC determines the discriminative ability of a model. -#' @param pred the name of the vector of the predicted values -#' @param y the name of the outcome variable. Note that this variable should include -#' the complete cases that are used in the regression model. -#' @param datasources a list of \code{\link{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}}. -#' @return returns the AUC and its standard error -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.auc <- function(pred=NULL, y=NULL, datasources=NULL){ - - # look for DS connections - if(is.null(datasources)){ - datasources <- DSI::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) - } - - # verify that 'pred' was set - if(is.null(pred)){ - stop("Please provide the name of the vector with predicted values", call.=FALSE) - } - - # verify that 'y' was set - if(is.null(y)){ - stop("Please provide the name of the outcome variable", call.=FALSE) - } - - # check if the pred and y objects are defined in all the studies - defined.pred <- isDefined(datasources, pred) - defined.y <- isDefined(datasources, y) - - cally <- call('aucDS', pred, y) - output <- DSI::datashield.aggregate(datasources, cally) - - return(output) - -} \ No newline at end of file diff --git a/R/ds.boxPlot.R b/R/ds.boxPlot.R index ad2de1d8..d51c1fcf 100644 --- a/R/ds.boxPlot.R +++ b/R/ds.boxPlot.R @@ -94,52 +94,16 @@ ds.boxPlot <- function(x, variables = NULL, group = NULL, group2 = NULL, xlabel 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) } - - # Ensure type is 'pooled' or 'split' - if((length(type) == 1) && (! any(type %in% c("pooled", "split")))){ - stop("[type] can only be set to 'pooled' or 'split'") - } - - # Check if x is defined and that it is of class "numeric" or "data.frame" + isDefined(datasources, x) cls <- checkClass(datasources, x) - if(!any(c("numeric", "data.frame") %in% cls)){ - stop("The selected object is not a data frame nor a numerical vector") - } - - # If x is a "data.frame" check that the variables exist, and if they are "numeric" - # also check if the grouping variables [group, group2] exist and are of class factor - if("data.frame" %in% cls){ - # Check that all variables exist - lapply(variables, function(i){ - isDefined(datasources, paste0(x, "$", i)) - }) - # Check all variables are of class "numeric" - variable_classes <- unlist(lapply(variables, function(i){ - checkClass(datasources, paste0(x, "$", i)) - })) - if(!all(variable_classes == "numeric")){ - stop("[", paste(variables[variable_classes != "numeric"], collapse = ", "), "] variable(s) are not of class 'numeric'") - } - # Check if grouping variables exist - if(!is.null(group)){isDefined(datasources, paste0(x, "$", group))} - if(!is.null(group2)){isDefined(datasources, paste0(x, "$", group2))} - # Check if groupings are of class "factor" - if(!is.null(group)){ - group_class <- checkClass(datasources, paste0(x, "$", group)) - if(group_class != "factor"){stop("[", group, "] is not of class 'factor'")} - } - if(!is.null(group2)){ - group_class2 <- checkClass(datasources, paste0(x, "$", group2)) - if(group_class2 != "factor"){stop("[", group2, "] is not of class 'factor'")} - } - } - # Once all checks are passed, call the appropiate server functions - if("data.frame" %in% cls){ + if(any(cls %in% c("data.frame"))){ ds.boxPlotGG_table(x, variables, group, group2, xlabel, ylabel, type, datasources) } - else if("numeric" %in% cls){ + else if(any(cls %in% c("numeric"))){ ds.boxPlotGG_numeric(x, xlabel, ylabel, type, datasources) } + else(stop("The selected object is not a data frame nor a numerical vector")) + } diff --git a/R/ds.boxPlotGG_numeric.R b/R/ds.boxPlotGG_numeric.R index 7300c128..383a1090 100644 --- a/R/ds.boxPlotGG_numeric.R +++ b/R/ds.boxPlotGG_numeric.R @@ -1,4 +1,5 @@ #' @title Draw boxplot with information from a numeric vector +#' #' #' @param x \code{character} Name of the numeric vector on the server side that holds the information to be plotted #' @param xlabel \code{caracter} (default \code{"x axis"}) Label to put on the x axis of the plot diff --git a/R/ds.bp_standards.R b/R/ds.bp_standards.R deleted file mode 100644 index 49374497..00000000 --- a/R/ds.bp_standards.R +++ /dev/null @@ -1,79 +0,0 @@ -#' -#' @title Calculates Blood pressure z-scores -#' @description The function calculates blood pressure z-scores in two steps: -#' Step 1. Calculates z-score of height according to CDC growth chart (Not the -#' WHO growth chart!). Step 2. Calculates z-score of BP according to the fourth -#' report on BP management, USA -#' @param sex the name of the sex variable. The variable should be coded as 1 for males -#' and 2 for females. If it is coded differently (e.g. 0/1), then you can use the -#' ds.recodeValues function to recode the categories to 1/2 before the use of -#' ds.bp_standards -#' @param age the name of the age variable in years. -#' @param height the name of the height variable in cm. -#' @param bp the name of the blood pressure variable. -#' @param systolic logical. If TRUE (default) the function assumes conversion of -#' systolic blood pressure. If FALSE the function assumes conversion of diastolic -#' blood pressure. -#' @param newobj a character string that provides the name for the output object -#' that is stored on the data servers. Default name is set to \code{bp.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @return assigns a new object on the server-side. The assigned object is a list -#' with two elements: the 'Zbp' which is the zscores of the blood pressure and 'perc' -#' which is the percentiles of the BP zscores. -#' @references The fourth report on the diagnosis, evaluation, and treatment of high -#' blood pressure in children and adolescents: -#' https://www.nhlbi.nih.gov/sites/default/files/media/docs/hbp_ped.pdf -#' @author Demetris Avraam for DataSHIELD Development Team -#' @import data.table -#' @export -ds.bp_standards <- function(sex=NULL, age=NULL, height=NULL, bp=NULL, systolic=TRUE, - newobj=NULL, datasources=NULL){ - - # look for DS connections - if(is.null(datasources)){ - datasources <- DSI::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) - } - - # verify that 'sex' was set - if(is.null(sex)){ - stop("Please provide the name of the sex variable", call.=FALSE) - } - - # verify that 'age' was set - if(is.null(age)){ - stop("Please provide the name of the age in months variable", call.=FALSE) - } - - # verify that 'height' was set - if(is.null(height)){ - stop("Please provide the name of the height in cm variable", call.=FALSE) - } - - # verify that 'bp' was set - if(is.null(bp)){ - stop("Please provide the name of the blood pressure variable", call.=FALSE) - } - - # check if the input objects are defined in all the studies - defined.sex <- isDefined(datasources, sex) - defined.age <- isDefined(datasources, age) - defined.height <- isDefined(datasources, height) - defined.bp <- isDefined(datasources, bp) - - # if no output object specified then provide a default name - if(is.null(newobj)){ - newobj <- "bp.newobj" - } - - # call the server-side assign function - cally <- call('bp_standardsDS', sex, age, height, bp, systolic) - DSI::datashield.assign(datasources, newobj, cally) - -} \ No newline at end of file diff --git a/R/ds.c.R b/R/ds.c.R index 01257aec..a0682095 100644 --- a/R/ds.c.R +++ b/R/ds.c.R @@ -54,7 +54,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.c <- function(x=NULL, newobj=NULL, datasources=NULL){ # look for DS connections @@ -76,8 +75,21 @@ ds.c <- function(x=NULL, newobj=NULL, datasources=NULL){ newobj <- "c.newobj" } + # the input variable might be given as column table (i.e. D$object) + # or just as a vector not attached to a table (i.e. object) + # we have to make sure the function deals with each case + xnames <- extract(x) + varnames <- xnames$elements + obj2lookfor <- xnames$holders + # check if the input object(s) is(are) defined in all the studies - lapply(x, function(k){isDefined(datasources, obj=k)}) + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } # call the internal function that checks the input object(s) is(are) of the same class in all studies. for(i in 1:length(x)){ diff --git a/R/ds.cbind.R b/R/ds.cbind.R index fdd1b34b..7ce1ab2b 100644 --- a/R/ds.cbind.R +++ b/R/ds.cbind.R @@ -130,11 +130,24 @@ ds.cbind <- function(x=NULL, DataSHIELD.checks=FALSE, force.colnames=NULL, newob if(is.null(x)){ stop("Please provide a vector of character strings holding the name of the input elements!", call.=FALSE) } + + # the input variable might be given as column table (i.e. D$vector) + # or just as a vector not attached to a table (i.e. vector) + # we have to make sure the function deals with each case + xnames <- extract(x) + varnames <- xnames$elements + obj2lookfor <- xnames$holders if(DataSHIELD.checks){ # check if the input object(s) is(are) defined in all the studies - lapply(x, function(k){isDefined(datasources, obj=k)}) + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } # call the internal function that checks the input object(s) is(are) of the same legal class in all studies. for(i in 1:length(x)){ @@ -259,7 +272,7 @@ ds.cbind <- function(x=NULL, DataSHIELD.checks=FALSE, force.colnames=NULL, newob if(!object.info[[j]]$test.obj.exists){ obj.name.exists.in.all.sources <- FALSE } - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ obj.non.null.in.all.sources <- FALSE } } diff --git a/R/ds.changeRefGroup.R b/R/ds.changeRefGroup.R index 1b8ad556..db0afd6d 100644 --- a/R/ds.changeRefGroup.R +++ b/R/ds.changeRefGroup.R @@ -132,8 +132,19 @@ ds.changeRefGroup <- function(x=NULL, ref=NULL, newobj=NULL, reorderByRef=FALSE, newobj <- "changerefgroup.newobj" } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) diff --git a/R/ds.class.R b/R/ds.class.R index 285b4045..d25df5ce 100644 --- a/R/ds.class.R +++ b/R/ds.class.R @@ -4,7 +4,7 @@ #' This function is similar to the R function \code{class}. #' @details Same as the native R function \code{class}. #' -#' Server function called: \code{classDS} +#' Server function called: \code{class} #' @param x a character string providing the name of the input R object. #' @param datasources a list of \code{\link{DSConnection-class}} objects obtained after login. #' If the \code{datasources} argument is not specified @@ -51,7 +51,7 @@ #' datashield.logout(connections) #' } #' @export -#' + ds.class <- function(x=NULL, datasources=NULL) { # look for DS connections @@ -68,7 +68,7 @@ ds.class <- function(x=NULL, datasources=NULL) { stop("Please provide the name of the input object!", call.=FALSE) } - # check if the input object is defined in all the studies + # check if the input object(s) is(are) defined in all the studies defined <- isDefined(datasources, x) cally <- call('classDS', x) diff --git a/R/ds.colnames.R b/R/ds.colnames.R index 5950d99b..c5466023 100644 --- a/R/ds.colnames.R +++ b/R/ds.colnames.R @@ -4,7 +4,7 @@ #' This function is similar to R function \code{colnames}. #' @details The input is restricted to the object of type \code{data.frame} or \code{matrix}. #' -#' Server function called: \code{colnamesDS} +#' Server function called: \code{colnames} #' @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. #' If the \code{datasources} argument is not specified @@ -48,7 +48,7 @@ #' datashield.logout(connections) #' } #' @export -#' + ds.colnames <- function(x=NULL, datasources=NULL) { # look for DS connections diff --git a/R/ds.completeCases.R b/R/ds.completeCases.R index fed43208..d9e4faeb 100644 --- a/R/ds.completeCases.R +++ b/R/ds.completeCases.R @@ -86,12 +86,10 @@ ds.completeCases <- function(x1=NULL, newobj=NULL, datasources=NULL){ if(is.null(x1)){ return("Error: x1 must be a character string naming a serverside data.frame, matrix or vector") } - - # check if the input object is defined in all the studies - isDefined(datasources, x1) # rename target object for transfer (not strictly necessary as string will pass parser anyway) # but maintains consistency with other functions + x1.transmit <- x1 # if no value specified for output object, then specify a default @@ -132,7 +130,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.contourPlot.R b/R/ds.contourPlot.R index 7973c1d1..8c91964f 100644 --- a/R/ds.contourPlot.R +++ b/R/ds.contourPlot.R @@ -45,7 +45,7 @@ #' created but grids with low counts are replaced with grids with zero counts. If \code{method} is #' set to \code{'deterministic'} the contour of the scaled centroids of each k nearest neighbour of the #' original variables is created, where the value of \code{k} is set by the user. If the -#' \code{method} is set to \code{'probabilistic'}, then the contour of 'noisy' variables is generated. +#' \code{method} is set to \code{'probabilistic'}, then the contour of \code{'noisy'} variables is generated. #' @param k the number of the nearest neighbours for which their centroid is calculated. For more information #' see details. #' @param noise the percentage of the initial variance that is used as the variance of the embedded @@ -100,7 +100,6 @@ #' #' } #' @export -#' ds.contourPlot <- function(x=NULL, y=NULL, type='combine', show='all', numints=20, method="smallCellsRule", k=3, noise=0.25, datasources=NULL){ # look for DS connections @@ -119,10 +118,28 @@ ds.contourPlot <- function(x=NULL, y=NULL, type='combine', show='all', numints=2 if(is.null(y)){ stop("y=NULL. Please provide the names of two numeric vectors!", call.=FALSE) } - - # check if the input objects are defined in all the studies - isDefined(datasources, x) - isDefined(datasources, y) + + # the argument method must be either "smallCellsRule" or "deterministic" or "probabilistic" + if(method != 'smallCellsRule' & method != 'deterministic' & method != 'probabilistic'){ + stop('Function argument "method" has to be either "smallCellsRule" or "deterministic" or "probabilistic"', call.=FALSE) + } + + # the input variable might be given as column table (i.e. D$object) + # or just as a vector not attached to a table (i.e. object) + # we have to make sure the function deals with each case + objects <- c(x, y) + xnames <- extract(objects) + varnames <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } # call the internal function that checks the input object(s) is(are) of the same class in all studies. typ.x <- checkClass(datasources, x) @@ -137,13 +154,10 @@ ds.contourPlot <- function(x=NULL, y=NULL, type='combine', show='all', numints=2 message(paste0(y, " is of type ", typ.y, "!")) stop("The input objects must be integer or numeric vectors.", call.=FALSE) } - - # the argument method must be either "smallCellsRule" or "deterministic" or "probabilistic" - if(method != 'smallCellsRule' & method != 'deterministic' & method != 'probabilistic'){ - stop('Function argument "method" has to be either "smallCellsRule" or "deterministic" or "probabilistic"', call.=FALSE) - } - # extract the variable names to be used as labels in the plot + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case xnames <- extract(x) x.lab <- xnames[[length(xnames)]] ynames <- extract(y) diff --git a/R/ds.cor.R b/R/ds.cor.R index 1a5c86d6..b464ccc8 100644 --- a/R/ds.cor.R +++ b/R/ds.cor.R @@ -94,7 +94,7 @@ ds.cor <- function(x=NULL, y=NULL, type="split", datasources=NULL){ if(is.null(x)){ stop("x=NULL. Please provide the name of a matrix or dataframe or the names of two numeric vectors!", call.=FALSE) }else{ - isDefined(datasources, x) + defined <- isDefined(datasources, x) } # check the type of the input objects @@ -104,7 +104,7 @@ ds.cor <- function(x=NULL, y=NULL, type="split", datasources=NULL){ if(is.null(y)){ stop("If x is a numeric vector, y must be a numeric vector!", call.=FALSE) }else{ - isDefined(datasources, y) + defined2 <- isDefined(datasources, y) typ2 <- checkClass(datasources, y) } } @@ -189,7 +189,7 @@ ds.cor <- function(x=NULL, y=NULL, type="split", datasources=NULL){ n4 <- "Correlation Matrix" names(results) <- c(n1, n2, n3, n4) }else{ - stop('Function argument "type" has to be either "combine" or "split"', call.=FALSE) + stop('Function argument "type" has to be either "combine" or "split"') } } diff --git a/R/ds.corTest.R b/R/ds.corTest.R index 7be1f992..bf992d70 100644 --- a/R/ds.corTest.R +++ b/R/ds.corTest.R @@ -1,28 +1,15 @@ #' #' @title Tests for correlation between paired samples in the server-side -#' @description This is similar to the R stats function \code{cor.test}. -#' @details Runs a two-sided correlation test between paired samples, using one of -#' Pearson's product moment correlation coefficient, Kendall's tau or Spearman's rho. -#' Server function called: \code{corTestDS} -#' @param x a character string providing the name of a numerical vector. -#' @param y a character string providing the name of a numerical vector. -#' @param method a character string indicating which correlation coefficient is to be -#' used for the test. One of "pearson", "kendall", or "spearman", can be abbreviated. -#' Default is set to "pearson". -#' @param exact a logical indicating whether an exact p-value should be computed. Used for -#' Kendall's tau and Spearman's rho. See ‘Details’ of R stats function \code{cor.test} for -#' the meaning of NULL (the default). -#' @param conf.level confidence level for the returned confidence interval. Currently -#' only used for the Pearson product moment correlation coefficient if there are at least -#' 4 complete pairs of observations. Default is set to 0.95. -#' @param type a character string that represents the type of analysis to carry out. -#' This must be set to \code{'split'} or \code{'combine'}. Default is set to \code{'split'}. If -#' \code{type} is set to "combine" then an approximated pooled correlation is estimated based on -#' Fisher's z transformation. +#' @description This is similar to the R base function \code{cor.test}. +#' @details Runs a two-sided Pearson test with a 0.95 confidence level. +#' +#' Server function called: \code{cor.test} +#' @param x a character string providing the name of a numerical vector. +#' @param y a character string providing the name of a numerical vector. #' @param datasources a list of \code{\link{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}}. -#' @return \code{ds.corTest} returns to the client-side the results of the correlation test. +#' @return \code{ds.corTest} returns to the client-side the results of the Pearson test. #' @author DataSHIELD Development Team #' @export #' @examples @@ -63,7 +50,8 @@ #' #' } #' -ds.corTest <- function(x=NULL, y=NULL, method="pearson", exact=NULL, conf.level=0.95, type='split', datasources=NULL){ +#' +ds.corTest <- function(x=NULL, y=NULL, datasources=NULL){ # look for DS connections if(is.null(datasources)){ @@ -82,65 +70,32 @@ ds.corTest <- function(x=NULL, y=NULL, method="pearson", exact=NULL, conf.level= stop("y=NULL. Please provide the names of the 2nd numeric vector!", call.=FALSE) } - if(!(method %in% c("pearson", "kendall", "spearman"))){ - stop('Function argument "method" has to be either "pearson", "kendall" or "spearman"', call.=FALSE) + # the input variable might be given as column table (i.e. D$object) + # or just as a vector not attached to a table (i.e. object) + # we have to make sure the function deals with each case + objects <- c(x,y) + xnames <- extract(objects) + varnames <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } } - - # check if the input objects are defined in all the studies - isDefined(datasources, x) - isDefined(datasources, y) - # call the internal function that checks the input objects are of the same class in all studies. - typ <- checkClass(datasources, x) - typ <- checkClass(datasources, y) + # call the internal function that checks the input object(s) is(are) of the same class in all studies. + for(i in 1:length(objects)){ + typ <- checkClass(datasources, objects[i]) + } # call the server side function - cally <- call("corTestDS", x, y, method, exact, conf.level) - out <- DSI::datashield.aggregate(datasources, cally) + cally <- call("corTestDS", x, y) + res.local <- DSI::datashield.aggregate(datasources, cally) - if(type=="split"){ - return(out) - }else{ - if(type=="combine"){ - ni <- c() - Zi <- c() - varZi <- c() - for(i in 1:length(datasources)){ - ni[i] <- out[[i]][[1]] # sample size - ri <- out[[i]][[2]]$estimate # the estimated measure of association - Zi[i] <- 0.5*log((1+ri)/(1-ri)) # Fishers Z transformation - varZi[i] <- 1/(ni[i]-3) # variance of the correlation - } - # pooled correlation and variance - Zpooled <- 0 - varZpooled <- 0 - for(i in 1:length(datasources)){ - Zpooled <- Zpooled + (ni[i]-3)*Zi[i] - varZpooled <- varZpooled + (ni[i]-3)*varZi[i] - } - Zpooled <- Zpooled/(sum(ni)-3*length(datasources)) - varZpooled <- varZpooled/(sum(ni)-3*length(datasources)) - pval <- 2*(1-stats::pnorm(Zpooled/sqrt(varZpooled))) - corr <- tanh(Zpooled) - if(method=="pearson"){ - zlcl = Zpooled - stats::qnorm(1-(1-conf.level)/2)*sqrt(varZpooled) - zucl = Zpooled + stats::qnorm(1-(1-conf.level)/2)*sqrt(varZpooled) - lcl= tanh(zlcl) # lower confidence level - ucl= tanh(zucl) # upper confidence level - out <- list(corr, c(lcl, ucl), pval) - names(out) <- c(paste0(method, " correlation estimate"), - paste0(conf.level, " percent confidence interval"), - "p-value") - return(out) - }else{ - out <- list(corr, pval) - names(out) <- c(paste0(method, " correlation estimate"), - "p-value") - return(out) - } - }else{ - stop('Function argument "type" has to be either "combine" or "split"', call.=FALSE) - } - } + return(res.local) } diff --git a/R/ds.cov.R b/R/ds.cov.R index 58aedc94..172ea48d 100644 --- a/R/ds.cov.R +++ b/R/ds.cov.R @@ -111,7 +111,7 @@ ds.cov <- function(x=NULL, y=NULL, naAction='pairwise.complete', type="split", d if(is.null(x)){ stop("x=NULL. Please provide the name of a matrix or dataframe or the names of two numeric vectors!", call.=FALSE) }else{ - isDefined(datasources, x) + defined <- isDefined(datasources, x) } # check the type of the input objects @@ -121,7 +121,7 @@ ds.cov <- function(x=NULL, y=NULL, naAction='pairwise.complete', type="split", d if(is.null(y)){ stop("If x is a numeric vector, y must be a numeric vector!", call.=FALSE) }else{ - isDefined(datasources, y) + defined2 <- isDefined(datasources, y) typ2 <- checkClass(datasources, y) } } diff --git a/R/ds.dataFrame.R b/R/ds.dataFrame.R index e71c1daf..fb3daced 100644 --- a/R/ds.dataFrame.R +++ b/R/ds.dataFrame.R @@ -110,11 +110,24 @@ ds.dataFrame <- function(x=NULL, row.names=NULL, check.rows=FALSE, check.names=T if(is.null(newobj)){ newobj <- "dataframe.newobj" } + + # the input variable might be given as column table (i.e. D$vector) + # or just as a vector not attached to a table (i.e. vector) + # we have to make sure the function deals with each case + xnames <- extract(x) + varnames <- xnames$elements + obj2lookfor <- xnames$holders if(DataSHIELD.checks){ # check if the input object(s) is(are) defined in all the studies - lapply(x, function(k){isDefined(datasources, obj=k)}) + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } # call the internal function that checks the input object(s) is(are) of the same legal class in all studies. for(i in 1:length(x)){ @@ -257,7 +270,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.dataFrameFill.R b/R/ds.dataFrameFill.R index eef95117..b8cde33d 100644 --- a/R/ds.dataFrameFill.R +++ b/R/ds.dataFrameFill.R @@ -96,9 +96,14 @@ ds.dataFrameFill <- function(df.name=NULL, newobj=NULL, datasources=NULL){ newobj <- "dataframefill.newobj" } - # check if the input dataframe is defined in all the studies + # check if the input object is defined in all the studies defined <- isDefined(datasources, df.name) + # if the input object is not defined in any study then return an error message + if(defined == FALSE){ + stop("The dataframe is not defined in all the studies!", call.=FALSE) + } + # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, df.name) @@ -107,8 +112,11 @@ ds.dataFrameFill <- function(df.name=NULL, newobj=NULL, datasources=NULL){ stop("The input vector must be of type 'data.frame' or a 'matrix'!", call.=FALSE) } - column.names <- lapply(datasources, function(dts){DSI::datashield.aggregate(dts, call("colnamesDS", df.name))}) - + column.names <- list() + for (i in 1:length(datasources)){ + column.names[[i]] <- dsBaseClient::ds.colnames(df.name, datasources=datasources[i])[[1]] + } + allNames <- unique(unlist(column.names)) # if the datasets share the same variables then the function stops @@ -129,18 +137,10 @@ ds.dataFrameFill <- function(df.name=NULL, newobj=NULL, datasources=NULL){ }else{ allNames.transmit <- NULL } - - defined.list <- lapply(allNames, function(x){isDefined(datasources=datasources, obj=paste0(df.name, '$', x), error.message=FALSE)}) - defined.vect1 <- lapply(defined.list, function(x){unlist(x)}) - defined.vect2 <- lapply(defined.vect1, function(x){which(x == FALSE)}) - + # get the class of each variable in the dataframes - class.list <- lapply(allNames, function(x){lapply(datasources, function(dts){DSI::datashield.aggregate(dts, call('classDS', paste0(df.name, '$', x)))})}) + class.list <- lapply(allNames, function(x){dsBaseClient::ds.class(paste0(df.name, '$', x), datasources=datasources)}) class.vect1 <- lapply(class.list, function(x){unlist(x)}) - # the loop below is to avoid autocompletion of variable name - for (i in 1:length(allNames.transmit)){ - if(length(defined.vect2[[i]])>0){class.vect1[[i]][defined.vect2[[i]]]<-'NULL'} - } class.vect2 <- lapply(class.vect1, function(x){x[which(x != 'NULL')[[1]]]}) class.vect2 <- unname(unlist(class.vect2)) @@ -193,7 +193,7 @@ ds.dataFrameFill <- function(df.name=NULL, newobj=NULL, datasources=NULL){ if(!object.info[[j]]$test.obj.exists){ obj.name.exists.in.all.sources <- FALSE } - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ obj.non.null.in.all.sources <- FALSE } } diff --git a/R/ds.dataFrameSort.R b/R/ds.dataFrameSort.R index d170dd87..4fb203e4 100644 --- a/R/ds.dataFrameSort.R +++ b/R/ds.dataFrameSort.R @@ -82,7 +82,6 @@ #' } #' @author DataSHIELD Development Team #' @export -#' ds.dataFrameSort<-function(df.name=NULL, sort.key.name=NULL, sort.descending=FALSE, sort.method="default", newobj=NULL, datasources=NULL){ @@ -96,31 +95,37 @@ ds.dataFrameSort<-function(df.name=NULL, sort.key.name=NULL, sort.descending=FAL stop("The 'datasources' were expected to be a list of DSConnection-class objects", call.=FALSE) } - if(is.null(sort.method)){ - sort.method <- "default" + if(is.null(sort.method)) + { + sort.method<-"default" } - if(sort.method!="numeric"&&sort.method!="n"&&sort.method!="alphabetic"&&sort.method!="a"){ - sort.method <- "default" + if(sort.method!="numeric"&&sort.method!="n"&&sort.method!="alphabetic"&&sort.method!="a") + { + sort.method<-"default" } - if(sort.method=="n"){ - sort.method <- "numeric" + if(sort.method=="n") + { + sort.method<-"numeric" } - if(sort.method=="a"){ - sort.method <- "alphabetic" + if(sort.method=="a") + { + sort.method<-"alphabetic" } - if(is.null(sort.descending)){ - sort.descending <- FALSE + if(is.null(sort.descending)) + { + sort.descending<-FALSE } if(is.null(newobj)){ - newobj <- "dataframesort.newobj" + newobj<-"dataframesort.newobj" } - # Call to assign function + + #Call to assign function calltext <- call("dataFrameSortDS", df.name, sort.key.name, sort.descending, sort.method) datashield.assign(datasources, newobj, calltext) @@ -149,7 +154,7 @@ ds.dataFrameSort<-function(df.name=NULL, sort.key.name=NULL, sort.descending=FAL if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.dataFrameSubset.R b/R/ds.dataFrameSubset.R index 3b6dff97..0de0cf99 100644 --- a/R/ds.dataFrameSubset.R +++ b/R/ds.dataFrameSubset.R @@ -266,7 +266,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.densityGrid.R b/R/ds.densityGrid.R index 33e1bb6d..6945e186 100644 --- a/R/ds.densityGrid.R +++ b/R/ds.densityGrid.R @@ -102,14 +102,28 @@ ds.densityGrid <- function(x=NULL, y=NULL, numints=20, type='combine', datasourc stop("Please provide the name of the numeric vector 'y'!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) - isDefined(datasources, y) - - # call the internal function that checks the input objects are of the same class in all studies. - typ <- checkClass(datasources, x) - typ <- checkClass(datasources, y) - + # the input variable might be given as column table (i.e. D$object) + # or just as a vector not attached to a table (i.e. object) + # we have to make sure the function deals with each case + objects <- c(x, y) + xnames <- extract(objects) + varnames <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } + + # call the internal function that checks the input object(s) is(are) of the same class in all studies. + for(i in 1:length(objects)){ + typ <- checkClass(datasources, objects[i]) + } + # name of the studies to be used in the plots' titles stdnames <- names(datasources) diff --git a/R/ds.dim.R b/R/ds.dim.R index 613bd984..b2919f76 100644 --- a/R/ds.dim.R +++ b/R/ds.dim.R @@ -107,7 +107,11 @@ ds.dim <- function(x=NULL, type='both', checks=FALSE, datasources=NULL) { if(checks){ # message(" -- Verifying the variables in the model") # # check if the input object(s) is(are) defined in all the studies # - defined <- isDefined(datasources, x) # # + defined <- isDefined(datasources, x) # + # throw a message and stop if input is not table structure # + if(! defined){ # + stop("The input object is not defined in all studies!", call.=FALSE) # + } # # call the internal function that checks the input object is suitable in all studies # typ <- checkClass(datasources, x) # # throw a message and stop if input is not table structure # diff --git a/R/ds.dmtC2S.R b/R/ds.dmtC2S.R deleted file mode 100644 index 1f91efbf..00000000 --- a/R/ds.dmtC2S.R +++ /dev/null @@ -1,213 +0,0 @@ -#' @title Copy a clientside data.frame, matrix or tibble to the serverside -#' @description Creates a data.frame, matrix or tibble on the serverside -#' that is equivalent to that same data.frame, matrix or tibble (DMT) on the clientside. -#' @details ds.dmtC2S calls assign function dmtC2SDS. To keep the -#' function simple (though less flexible), a number of the parameters specifying -#' the DMT to be generated on the serverside are fixed by the -#' characteristics of the DMT to be copied rather than explicitly -#' specifying them as selected arguments. In consequence, -#' they have been removed from the list of arguments and are instead given invariant -#' values in the first few lines of code. These include: from="clientside.dmt", -#' nrows.scalar=NULL, ncols.scalar=NULL, byrow = FALSE. The specific value -#' "clientside.dmt" for the argument simply -#' means that the required information is generated from -#' the characteristics of a clientside DMT. The -#' and are fixed empirically by the number of rows and columns of -#' the DMT to be copied. specifies writing the serverside DMT by -#' columns or by rows and this is defaulted to byrow=FALSE i.e. "by column". -#' @param dfdata is a character string that specifies the name of the DMT -#' to be copied from the clientside to the serverside -#' @param newobj A character string specifying the name of the DMT on the serverside -#' to which the output is to be written. If no argument is specified or it is NULL -#' the name of the copied DMT defaults to "dmt.copied.C2S". -#' @param datasources specifies the particular 'connection object(s)' to use. -#' e.g. if you have several data sets in the sources you are working with -#' called opals.a, opals.w2, and connection.xyz, you can choose which of -#' these to work with. The call 'datashield.connections_find()' lists all of -#' the different datasets available and if one of these is called 'default.connections' -#' that will be the dataset used by default if no other dataset is specified. If you -#' wish to change the connections you wish to use by default the call -#' datashield.connections_default('opals.a') will set 'default.connections' -#' to be 'opals.a' and so in the absence of specific instructions to the contrary -#' (e.g. by specifiying a particular dataset to be used via the -#' argument) all subsequent function calls will be to the datasets held in opals.a. -#' If the argument is specified, it should be set without -#' inverted commas: e.g. datasources=opals.a or datasources=default.connections. -#' The argument also allows you to apply a function solely to a subset -#' of the studies/sources you are working with. For example, the second source -#' in a set of three, can be specified using a call such as datasources=connection.xyz[2]. -#' On the other hand, if you wish to specify solely the first and third sources, the -#' appropriate call will be datasources=connections.xyz[c(1,3)] -#' @return the object specified by the argument (or default name "dmt.copied.C2S") -#' which is written as a data.frame/matrix/tibble to the serverside. -#' @author Paul Burton for DataSHIELD Development Team - 3rd June, 2021 -#' @export -#' -ds.dmtC2S <- function(dfdata=NA, newobj=NULL, datasources=NULL){ - - # if no opal login details are provided look for 'opal' objects in the environment - 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) - } - - # check if a value has been provided for dfdata - if(is.null(dfdata)){ - return("Error: dfdata must be a character string, a numeric vector or a scalar") - } - - # if no value specified for output object, then specify a default - if(is.null(newobj)){ - newobj <- "dmt.copied.C2S" - } - -#Generate values for arguments reflecting the key characteristics of the -#clientside matrix/data frame to be copied to the serverside -from<-"clientside.dmt" -nrows.scalar<-NULL -ncols.scalar<-NULL -byrow <- FALSE - -#Code that appropriately identifies and differentiates -#between matrices and data.frames - - if(is.data.frame(dfdata)) - { - inout.object<-"DF" - } - - if(is.matrix(dfdata)) - { - inout.object<-"MAT" - } - -if(dplyr::is.tbl(dfdata)) -{ - inout.object<-"TBL" -} - - - if(!is.matrix(dfdata) && !is.data.frame(dfdata) && !dplyr::is.tbl(dfdata)) - { - cat("\n FAILED: must either be a data.frame, matrix or tibble") - return('Please respecify') - } - - inout.object.transmit<-paste0(as.character(inout.object),collapse=",") - -#Create definite matrix version called dfdata.mat - dfdata.mat<-as.matrix(dfdata) - - - ########################################################################### -#Allow attributes of dmt to be copied to set key arguments - nrows.scalar<-dim(dfdata.mat)[1] - ncols.scalar<-dim(dfdata.mat)[2] - - nrows.transmit<-paste0(as.character(nrows.scalar),collapse=",") - ncols.transmit<-paste0(as.character(ncols.scalar),collapse=",") - -#Allow different columns of a matrix or different variables in -#a data.frame to have different classes - colclass.vector<-rep("",ncols.scalar) - - if(!dplyr::is.tbl(dfdata)) - { - for(k in 1:ncols.scalar) - { - # colclass.vector[k]<-class(dfdata.mat[,k]) - { - colclass.vector[k]<-class(dfdata[,k]) - } - } - } - - if(dplyr::is.tbl(dfdata)) - { - for(k in 1:ncols.scalar) - { -# colclass.vector[k]<-class(dfdata.mat[,k]) - { - colclass.vector[k]<-"numeric" - } - } - } - - - -colclass.transmit<-paste0(as.character(colclass.vector),collapse=",") - - -#maintain column/row names if any -colnames.vector<-colnames(dfdata.mat) -if(is.null(colnames.vector)) -{ -colnames.vector<-as.character(1:ncols.scalar) -} - -colnames.transmit<-paste0(as.character(colnames.vector),collapse=",") - - -rownames.vector<-rownames(dfdata.mat) -rownames.transmit<-paste0(as.character(rownames.vector),collapse=",") - -dfdata.mat.transmit<-paste0(as.character(dfdata.mat),collapse=",") - -#convert all of dfdata.mat.transmit into single elements along a character vector - dfdata.mat.transmit.elements<-unlist(strsplit(dfdata.mat.transmit, split="")) - -#identify and strip " " (i.e. spaces in the individual values in -#the elements of a vector which otherwise get blocked by parser). This -#is only needed when the elements (separate vectors) of a matrix have -#effectively been created in a text editor. However, if this code is -#not built in to check and correct for it, the resultant error is very -#difficult to identify and manage. - -length.all<-length(dfdata.mat.transmit.elements) -length.no.spaces<-length(dfdata.mat.transmit.elements[dfdata.mat.transmit.elements!=" "]) - -dfdata.mat.transmit.elements.no.spaces<-rep("",length.no.spaces) - -string.pos<-0 - -for(n in 1:length.all) -{ - if(dfdata.mat.transmit.elements[n]==" ") - { - string.pos<-string.pos - } - else - { - string.pos<-string.pos+1 - dfdata.mat.transmit.elements.no.spaces[string.pos]<-dfdata.mat.transmit.elements[n] - } - -} - -#convert to single long string with no gaps -dfdata.mat.transmit.elements.no.spaces.split<-strsplit(dfdata.mat.transmit.elements.no.spaces,split="") - -#rename back to dfdata.mat.transmit -dfdata.mat.transmit<-paste0(dfdata.mat.transmit.elements.no.spaces.split,collapse="") - - -# CALL THE MAIN SERVER SIDE FUNCTION - -calltext <- call("dmtC2SDS", dfdata.mat.transmit, inout.object.transmit, from, - nrows.transmit, ncols.transmit, colnames.transmit, colclass.transmit, byrow) - - -datashield.assign(datasources, newobj, calltext) - -} - -############################################################################################################# - -#ds.dmtC2S - - - diff --git a/R/ds.elspline.R b/R/ds.elspline.R deleted file mode 100644 index 1fc4cffe..00000000 --- a/R/ds.elspline.R +++ /dev/null @@ -1,64 +0,0 @@ -#' -#' @title Basis for a piecewise linear spline with meaningful coefficients -#' @description This function is based on the native R function \code{elspline} from the -#' \code{lspline} package. This function computes the basis of piecewise-linear spline -#' such that, depending on the argument marginal, the coefficients can be interpreted as -#' (1) slopes of consecutive spline segments, or (2) slope change at consecutive knots. -#' @details If marginal is FALSE (default) the coefficients of the spline correspond to -#' slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -#' the slope of the first segment. The consecutive coefficients correspond to the change -#' in slope as compared to the previous segment. -#' Function elspline wraps lspline and computes the knot positions such that they cut the -#' range of x into n equal-width intervals. -#' @param x the name of the input numeric variable -#' @param n integer greater than 2, knots are computed such that they cut n equally-spaced -#' intervals along the range of x -#' @param marginal logical, how to parametrize the spline, see Details -#' @param names character, vector of names for constructed variables -#' @param newobj a character string that provides the name for the output -#' variable that is stored on the data servers. Default \code{elspline.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @return an object of class "lspline" and "matrix", which its name is specified by the -#' \code{newobj} argument (or its default name "elspline.newobj"), is assigned on the serverside. -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.elspline <- function(x, n, marginal = FALSE, names = NULL, newobj = NULL, 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 the input variable x!", call.=FALSE) - } - - # check if the input object is defined in all the studies - defined <- isDefined(datasources, x) - - if(is.null(n)){ - stop("Argument 'n' is missing, with no default!", call.=FALSE) - } - - if(n < 2){ - stop("'n' must be a value greater than or equal to 2!", call.=FALSE) - } - - # create a name by default if user did not provide a name for the new variable - if(is.null(newobj)){ - newobj <- "elspline.newobj" - } - - # now do the business - calltext <- call("elsplineDS", x, n, marginal, names) - DSI::datashield.assign(datasources, newobj, calltext) - -} \ No newline at end of file diff --git a/R/ds.exp.R b/R/ds.exp.R index 2fd9da3b..3791c921 100644 --- a/R/ds.exp.R +++ b/R/ds.exp.R @@ -71,15 +71,26 @@ ds.exp <- function(x=NULL, newobj=NULL, datasources=NULL){ stop("Please provide the name of the input object!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) # call the internal function that checks the input object(s) is(are) of the same class in all studies. if(!('numeric' %in% typ) && !('integer' %in% typ)){ - stop(" Only objects of type 'numeric' and 'integer' are allowed.", call.=FALSE) + stop(" Only objects of type 'numeric' and 'integer' are allowed.", call.=FALSE) } # create a name by default if user did not provide a name for the new variable diff --git a/R/ds.extractQuantiles.R b/R/ds.extractQuantiles.R deleted file mode 100644 index ba39dd51..00000000 --- a/R/ds.extractQuantiles.R +++ /dev/null @@ -1,241 +0,0 @@ -# ds.extractQuantiles -#' @title Secure ranking of a vector across all sources and use of these ranks -#' to estimate global quantiles across all studies -#' @description Takes the global ranks and quantiles held in the serverside data -#' data frame that is written by ranksSecureDS4 and named as specified by the -#' argument () and converts these values into a series of -#' quantile values that identify, for example, which value of V2BR across all of -#' the studies corresponds to the median or to the 95% quantile. There is no -#' indication in which study the V2BR corresponding to a particular quantile -#' falls and, in fact, the relevant value may fall in more than one study and -#' may appear multiple times in any one study. Finally, the output data -#' frame containing this information is written to the clientside and to the -#' serverside at each study separately. -#' @details ds.extractQuantiles is a clientside function which should usually -#' be called from within the clientside function ds.ranksSecure.If you try to -#' call ds.extractQuantiles directly(i.e. not by running ds.ranksSecure) you -#' are almost certainly going to have to set up quite a few vectors and scalars -#' that are normally set by ds.ranksSecure and this is likely to be difficult. -#' ds.extractQuantiles itself calls two serverside functions extractQuantilesDS1 -#' and extractQuantilesDS2. For more details about the cluster of functions that -#' collectively enable secure global ranking and estimation of global quantiles -#' see the associated document entitled "secure.global.ranking.docx". In -#' particular this explains how ds.extractQuantiles works. Also see the header -#' file for ds.ranksSecure. -#' @param extract.quantiles one of a restricted set of character strings. -#' The value of this argument is set in choosing the value of the argument -#' in ds.ranksSecure. In summary: to mitigate -#' disclosure risk only the following set of quantiles can be -#' generated: c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50,0.60,0.6667, -#' 0.70,0.75,0.80,0.90,0.95,0.975). The allowable formats for the argument -#' are of the general form: "0.025-0.975" where the first number is the lowest -#' quantile to be estimated and the second number is the equivalent highest -#' quantile to estimate. These two quantiles are then estimated along with -#' all allowable quantiles in between. The allowable argument values are then: -#' "0.025-0.975", "0.05-0.95", "0.10-0.90", "0.20-0.80". Two alternative values -#' are "quartiles" i.e. c(0.25,0.50,0.75), and "median" i.e. c(0.50). The -#' default value is "0.05-0.95". For more details, see the associated document -#' "secure.global.ranking.docx". Also see the header file for ds.ranksSecure. -#' @param extract.summary.output.ranks.df a character string which specifies -#' the optional name for the summary data.frame written to the serverside on -#' each data source that contains 5 of the key output variables from the ranking -#' procedure pertaining to that particular data source. If no name has been -#' specified by the argument in ds.ranksSecure, the -#' default name is allocated as "summary.ranks.df".The only reason the -#' argument needs specifying in -#' ds.extractQuantiles is because, ds.extractQuantiles is the last function -#' called by ds.ranksSecure and almost the final command of ds.extractQuantiles -#' to print out the name of the data frame containing the summarised ranking -#' information generated by ds.ranksSecure and the order in which the -#' data frame is laid out. This therefore appears as the last output produced -#' when ds.ranksSecure is run, and when this happens it is clear this relates to -#' the main output of ds.ranksSecure not of ds.extractQuantiles. -#' @param extract.ranks.sort.by a character string taking two possible values. -#' These are "ID.orig" and "vals.orig". This is set via the argument -#' in ds.ranksSecure. For more details see the associated -#' document entitled "secure.global.ranking.docx". Also see the header -#' file for ds.ranksSecure. -#' @param extract.rm.residual.objects logical value. Default = TRUE: at the beginning -#' and end of each run of ds.ranksSecure delete all extraneous objects that are -#' otherwise left behind. These are not usually needed, but could be of value -#' if one were investigating a problem with the ranking. FALSE: do not delete -#' the residual objects -#' @param extract.datasources specifies the particular opal object(s) to use. -#' This is set via the argument in ds.ranksSecure. For more details -#' see the associated document entitled "secure.global.ranking.docx". Also see -#' the header file for ds.ranksSecure. -#' @return the final main output of ds.extractQuantiles is a data frame object -#' named "final.quantile.df". This contains two vectors. The first named -#' "evaluation.quantiles" lists the full set of quantiles you have requested -#' for evaluation as specified by the argument "quantiles.for.estimation" in -#' ds.ranksSecure and explained in more detail above under the information for -#' the argument "extract.quantiles" in this function. The second vector is -#' called "final.quantile.vector" which details the values of V2BR that -#' correspond to the evaluation quantiles in vector 1. The information in the -#' data frame "final.quantile.df" is generic: there is no information -#' identifying in which study each value of V2BR falls. This data frame is -#' written to the clientside (as it is non-disclosive) and is also copied to -#' the serverside in every study. This means it is easily accessible from -#' anywhere in the DataSHIELD environment. For more details -#' see the associated document entitled "secure.global.ranking.docx". -#' @author Paul Burton 11th November, 2021 - - ds.extractQuantiles <- function(extract.quantiles, - extract.summary.output.ranks.df, - extract.ranks.sort.by, - extract.rm.residual.objects, - extract.datasources=NULL){ - - # look for DS connections - if(is.null(extract.datasources)){ - datasources <- datashield.connections_find() - } - -datasources.in.current.function<-datasources - - # 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) - } - - numstudies<-length(datasources) - - - #AFTER RUNNING ds.ranksSecure USE extractQuantilesDS1 (serverside aggregate) - #FUNCTION TO CREATE STUDY SPECIFIC BOUNDS OF NEAREST - #QUANTILES ABOVE AND BELOW EACH EVALUATION THRESHOLD AND TO WRITE - #EVALUATON QUANTILES AND STUDY-SPECIFIC BOUNDS AROUND EACH VALUE AS A - #NEW OBJECT. EVALUATION QUANTILES ARE SET ON SERVERSIDE AND CANNOT BE CHANGED - #FROM CLIENTSIDE. FULL RANGE POSSIBLE IS: - # c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50, - # 0.60,0.6667,0.70,0.75,0.80,0.90,0.95,0.975) - - - calltext8 <- call("extractQuantilesDS1",extract.quantiles, - extract.summary.output.ranks.df) - closest.bounds.df<-DSI::datashield.aggregate(datasources,calltext8) - - - - - lower.bound.matrix<-matrix(NA,nrow=nrow(closest.bounds.df[[1]]),ncol=numstudies) - upper.bound.matrix<-matrix(NA,nrow=nrow(closest.bounds.df[[1]]),ncol=numstudies) - - for(ss in 1:numstudies) - { - lower.bound.matrix[,ss]<-closest.bounds.df[[ss]]$lower.bound - upper.bound.matrix[,ss]<-closest.bounds.df[[ss]]$upper.bound - } - - numvals<-length(lower.bound.matrix[,1]) - - lower.bound.vector<-rep(NA,numvals) - upper.bound.vector<-rep(NA,numvals) - - for(vv in 1:numvals){ - lower.bound.vector[vv]<-max(lower.bound.matrix[vv,]) - upper.bound.vector[vv]<-min(upper.bound.matrix[vv,]) - } - - evaluation.quantiles<-closest.bounds.df[[1]]$evaluation.quantiles - - - global.bounds.df<-data.frame(cbind(evaluation.quantiles,lower.bound.vector,upper.bound.vector)) - - colnames(global.bounds.df)[1]<-"evaluation.quantiles" - - global.bounds.df - - #CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN global.bounds.df TO SERVERSIDE - dsBaseClient::ds.dmtC2S(dfdata=global.bounds.df,newobj="global.bounds.df",datasources = datasources.in.current.function) - - calltext9 <- call("extractQuantilesDS2",extract.summary.output.ranks.df) - R.global.bounds<-DSI::datashield.aggregate(datasources,calltext9) - - - numvals<-length(R.global.bounds[[1]]$relevant.study.specific.input.values.lower) - - for(xx in 1:numvals){ - all.lower.values.na<-1 - all.upper.values.na<-1 - for(tt in 1:length(R.global.bounds)){ - if(!is.na(R.global.bounds[[tt]]$relevant.study.specific.input.values.lower[xx]))all.lower.values.na<-0 - if(!is.na(R.global.bounds[[tt]]$relevant.study.specific.input.values.upper[xx]))all.upper.values.na<-0 - } - if(all.lower.values.na==1||all.upper.values.na==1){ - error.message<- - paste0("FAILED: one of the extreme quantile estimates is NA probably because of a cluster of values at one end of the range of possible values. Try setting a narrower range of quantile values via the argument") - stop(error.message, call. = FALSE) - } - - } - - - final.quantile.value.vector.lower<-rep(NA,numvals) - final.quantile.value.vector.upper<-rep(NA,numvals) - - - for(vv in 1:numvals){ - for(ss in 1:numstudies){ - if(!is.na(R.global.bounds[[ss]]$relevant.study.specific.input.values.lower[vv]) ) - { - final.quantile.value.vector.lower[vv]<-R.global.bounds[[ss]]$relevant.study.specific.input.values.lower[vv] - } - - - if(!is.na(R.global.bounds[[ss]]$relevant.study.specific.input.values.upper[vv]) ) - { - final.quantile.value.vector.upper[vv]<-R.global.bounds[[ss]]$relevant.study.specific.input.values.upper[vv] - } - } - } - - final.quantile.vector<-rep(NA,numvals) - - for(ww in 1:numvals) - { - final.quantile.vector[ww]<-signif(mean(final.quantile.value.vector.lower[ww],final.quantile.value.vector.upper[ww]),6) - - } - - - final.quantile.df<-data.frame(cbind(evaluation.quantiles,final.quantile.vector)) - - final.quantile.df - - #CLEAN UP UNWANTED RESIDUAL OBJECTS FROM THE RUNNING OF ds.extractQuantiles - - if(extract.rm.residual.objects) - { - #UNLESS THE IS FALSE, - #CLEAR UP ANY UNWANTED RESIDUAL OBJECTS - - rm.names.eQ<-c("global.bounds.df") - - #make transmittable via parser - rm.names.eQ.transmit <- paste(rm.names.eQ,collapse=",") - - calltext.rm.eQ <- call("rmDS", rm.names.eQ.transmit) - - rm.output.eQ <- DSI::datashield.aggregate(datasources, calltext.rm.eQ) - - } - - #CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN final.quantile.df TO SERVERSIDE - dsBaseClient::ds.dmtC2S(dfdata=final.quantile.df,newobj="final.quantile.df",datasources = datasources.in.current.function) - - cat("\n\n\n"," FINAL RANKING PROCEDURES COMPLETE: - PRIMARY RANKING OUTPUT IS IN DATA FRAME",extract.summary.output.ranks.df, -" - WHICH IS SORTED BY",extract.ranks.sort.by," AND HAS BEEN - WRITTEN TO THE SERVERSIDE. VALUES OF V2BR CORRESPONDING TO - KEY QUANTILES HAVE BEEN WRITTEN TO BOTH CLIENTSIDE AND - SERVERSIDE AS final.quantile.df\n\n\n\n") - - - return(final.quantile.df) -} - -########################################## -#ds.extractQuantiles - diff --git a/R/ds.forestplot.R b/R/ds.forestplot.R deleted file mode 100644 index 3b487387..00000000 --- a/R/ds.forestplot.R +++ /dev/null @@ -1,72 +0,0 @@ -#' @title Forestplot for SLMA models -#' @description Draws a foresplot of the coefficients for Study-Level Meta-Analysis performed with -#' DataSHIELD -#' -#' @param mod \code{list} List outputed by any of the SLMA models of DataSHIELD (\code{ds.glmerSLMA}, -#' \code{ds.glmSLMA}, \code{ds.lmerSLMA}) -#' @param variable \code{character} (default \code{NULL}) Variable to meta-analyze and visualize, by setting this -#' argument to \code{NULL} (default) the first independent variable will be used. -#' @param method \code{character} (Default \code{"ML"}) Method to estimate the between study variance. -#' See details from \code{?meta::metagen} for the different options. -#' @param layout \code{character} (default \code{"JAMA"}) Layout of the plot. -#' See details from \code{?meta::metagen} for the different options. -#' -#' @export -#' -#' @examples -#' \dontrun{ -#' # Run a logistic regression -#' -#' 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") -#' builder$append(server = "study3", -#' 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") -#' -#' # Fit the logistic regression model -#' -#' mod <- ds.glmSLMA(formula = "DIS_DIAB~GENDER+PM_BMI_CONTINUOUS+LAB_HDL", -#' data = "D", -#' family = "binomial", -#' datasources = connections) -#' -#' # Plot the results of the model -#' ds.forestplot(mod) -#' } -#' - -ds.forestplot <- function(mod, variable = NULL, method = "ML", layout = "JAMA"){ - - # Extract meta-information from mod object - betas <- mod$output.summary$input.beta.matrix.for.SLMA - ses <- mod$output.summary$input.se.matrix.for.SLMA - variables <- rownames(betas) - names <- names(mod$output.summary)[1:mod$num.valid.studies] - - if(is.null(variable)){ # If variable is NULL, use first variable that is not the intercept - if(variables[1] == "(Intercept)"){variable <- variables[2]} else {variable <- variables[1]} - } else { # Check supplied variable exists - if(!(variable %in% variables)){ - stop("[", variable, "] is not valid. Valid variables [", paste(variables, collapse = ", "), "]") - } - } - - # Perform meta-analysis using the meta package - res <- meta::metagen(TE = betas[variable,], seTE = ses[variable,], studlab = names, method.tau = method) - - # Plot the resulting forestplot using the meta package - meta::forest(res, layout = layout) - -} diff --git a/R/ds.gamlss.R b/R/ds.gamlss.R deleted file mode 100644 index bd9d82f3..00000000 --- a/R/ds.gamlss.R +++ /dev/null @@ -1,182 +0,0 @@ -#' -#' @title Generalized Additive Models for Location Scale and Shape -#' @description This function calls the gamlssDS that is a wrapper function from -#' the gamlss R package. The function returns an object of class "gamlss", which -#' is a generalized additive model for location, scale and shape (GAMLSS). The -#' function also saves the residuals as an object on the server-side with a name -#' specified by the newobj argument. In addition, if the argument centiles is set -#' to TRUE, the function calls the centiles function from the gamlss package and -#' returns the sample percentages below each centile curve. -#' @details For additional details see the help header of gamlss and centiles -#' functions in native R gamlss package. -#' @param formula a formula object, with the response on the left of an ~ operator, -#' and the terms, separated by + operators, on the right. Nonparametric smoothing -#' terms are indicated by pb() for penalised beta splines, cs for smoothing splines, -#' lo for loess smooth terms and random or ra for random terms, -#' e.g. 'y~cs(x,df=5)+x1+x2*x3'. -#' @param sigma.formula a formula object for fitting a model to the sigma parameter, -#' as in the formula above, e.g. sigma.formula='~cs(x,df=5)'. -#' @param nu.formula a formula object for fitting a model to the nu parameter, -#' e.g. nu.formula='~x'. -#' @param tau.formula a formula object for fitting a model to the tau parameter, -#' e.g. tau.formula='~cs(x,df=2)'. -#' @param family a gamlss.family object, which is used to define the distribution -#' and the link functions of the various parameters. The distribution families -#' supported by gamlss() can be found in gamlss.family. Functions such as 'BI()' -#' (binomial) produce a family object. Also can be given without the parentheses -#' i.e. 'BI'. Family functions can take arguments, as in 'BI(mu.link=probit)'. -#' @param data a data frame containing the variables occurring in the formula. -#' If this is missing, the variables should be on the parent environment. -#' @param method a character indicating the algorithm for GAMLSS. Can be either -#' 'RS', 'CG' or 'mixed'. If method='RS' the function will use the Rigby and -#' Stasinopoulos algorithm, if method='CG' the function will use the Cole and -#' Green algorithm, and if method='mixed' the function will use the RS algorithm -#' twice before switching to the Cole and Green algorithm for up to 10 extra -#' iterations. -#' @param mu.fix logical, indicate whether the mu parameter should be kept fixed -#' in the fitting processes. -#' @param sigma.fix logical, indicate whether the sigma parameter should be kept -#' fixed in the fitting processes. -#' @param nu.fix logical, indicate whether the nu parameter should be kept fixed -#' in the fitting processes. -#' @param tau.fix logical, indicate whether the tau parameter should be kept fixed -#' in the fitting processes. -#' @param control this sets the control parameters of the outer iterations algorithm -#' using the gamlss.control function. This is a vector of 7 numeric values: (i) c.crit -#' (the convergence criterion for the algorithm), (ii) n.cyc (the number of cycles of -#' the algorithm), (iii) mu.step (the step length for the parameter mu), (iv) sigma.step -#' (the step length for the parameter sigma), (v) nu.step (the step length for the -#' parameter nu), (vi) tau.step (the step length for the parameter tau), (vii) gd.tol -#' (global deviance tolerance level). The default values for these 7 parameters are -#' set to c(0.001, 20, 1, 1, 1, 1, Inf). -#' @param i.control this sets the control parameters of the inner iterations of the -#' RS algorithm using the glim.control function. This is a vector of 4 numeric values: -#' (i) cc (the convergence criterion for the algorithm), (ii) cyc (the number of -#' cycles of the algorithm), (iii) bf.cyc (the number of cycles of the backfitting -#' algorithm), (iv) bf.tol (the convergence criterion (tolerance level) for the -#' backfitting algorithm). The default values for these 4 parameters are set to -#' c(0.001, 50, 30, 0.001). -#' @param centiles logical, indicating whether the function centiles() will be used to -#' tabulate the sample percentages below each centile curve. Default is set to FALSE. -#' @param xvar the unique explanatory variable used in the centiles() function. This -#' variable is used only if the centiles argument is set to TRUE. A restriction in -#' the centiles function is that it applies to models with one explanatory variable -#' only. -#' @param newobj a character string that provides the name for the output object -#' that is stored on the data servers. Default \code{gamlss_res}. -#' @param datasources a list of \code{\link{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}}. -#' @return a gamlss object with all components as in the native R gamlss function. -#' Individual-level information like the components y (the response response) and -#' residuals (the normalised quantile residuals of the model) are not disclosed to -#' the client-side. -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.gamlss <- function(formula = NULL, sigma.formula = '~1', nu.formula = '~1', - tau.formula = '~1', family = 'NO()', data = NULL, method = 'RS', - mu.fix = FALSE, sigma.fix = FALSE, nu.fix = FALSE, - tau.fix = FALSE, control = c(0.001, 20, 1, 1, 1, 1, Inf), - i.control = c(0.001, 50, 30, 0.001), centiles = FALSE, - xvar = NULL, newobj = NULL, datasources = NULL){ - - # look for DS connections - if(is.null(datasources)){ - datasources <- DSI::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) - } - - # verify that 'formula' was set - if(is.null(formula)){ - stop(" Please provide a valid formula!", call.=FALSE) - } - - formula <- gsub("(", "left_parenthesis", formula, fixed = TRUE) - formula <- gsub(")", "right_parenthesis", formula, fixed = TRUE) - formula <- gsub("~", "tilde_symbol", formula, fixed = TRUE) - formula <- gsub("=", "equal_symbol", formula, fixed = TRUE) - formula <- gsub(",", "comma_symbol", formula, fixed = TRUE) - formula <- gsub(" ", "", formula, fixed = TRUE) - - sigma.formula <- gsub("(", "left_parenthesis", sigma.formula, fixed = TRUE) - sigma.formula <- gsub(")", "right_parenthesis", sigma.formula, fixed = TRUE) - sigma.formula <- gsub("~", "tilde_symbol", sigma.formula, fixed = TRUE) - sigma.formula <- gsub("=", "equal_symbol", sigma.formula, fixed = TRUE) - sigma.formula <- gsub(",", "comma_symbol", sigma.formula, fixed = TRUE) - sigma.formula <- gsub(" ", "", sigma.formula, fixed = TRUE) - - nu.formula <- gsub("(", "left_parenthesis", nu.formula, fixed = TRUE) - nu.formula <- gsub(")", "right_parenthesis", nu.formula, fixed = TRUE) - nu.formula <- gsub("~", "tilde_symbol", nu.formula, fixed = TRUE) - nu.formula <- gsub("=", "equal_symbol", nu.formula, fixed = TRUE) - nu.formula <- gsub(",", "comma_symbol", nu.formula, fixed = TRUE) - nu.formula <- gsub(" ", "", nu.formula, fixed = TRUE) - - tau.formula <- gsub("(", "left_parenthesis", tau.formula, fixed = TRUE) - tau.formula <- gsub(")", "right_parenthesis", tau.formula, fixed = TRUE) - tau.formula <- gsub("~", "tilde_symbol", tau.formula, fixed = TRUE) - tau.formula <- gsub("=", "equal_symbol", tau.formula, fixed = TRUE) - tau.formula <- gsub(",", "comma_symbol", tau.formula, fixed = TRUE) - tau.formula <- gsub(" ", "", tau.formula, fixed = TRUE) - - family <- gsub("(", "left_parenthesis", family, fixed = TRUE) - family <- gsub(")", "right_parenthesis", family, fixed = TRUE) - family <- gsub("=", "equal_symbol", family, fixed = TRUE) - family <- gsub(",", "comma_symbol", family, fixed = TRUE) - family <- gsub(" ", "", family, fixed = TRUE) - - # check if method is either 'RS', 'CG' or 'mixed - if(!(method %in% c("RS", "CG", "mixed"))){ - stop("Argument 'method' must be either 'RS', 'CG' or 'mixed'", call.=FALSE) - } - - control <- paste0(as.character(control), collapse=",") - - i.control <- paste0(as.character(i.control), collapse=",") - - # # check if weights are defined, if yes check if are defined as a vector on the - # # clientside or as a vector exists on the serverside - # if(!is.null(weights)){ - # if(source.weights == 'clientside'){ - # if(class(weights) != 'numeric'){ - # stop("weights should be a numeric vector", call.=FALSE) - # } - # weights <- paste0(as.character(weights), collapse=",") - # }else{ - # if(source.weights == 'serverside'){ - # isDefined(datasources, weights) - # }else{ - # stop("weights should be either NULL (default), or a numeric vector specified - # on the clientside, or the name of a numeric vector exists on the - # serverside", call.=FALSE) - # } - # } - # }else{ - # weights <- NULL - # source.weights <- NULL - # } - - if(centiles==TRUE & is.null(xvar)){ - stop("Provide the name of the explanatory variable in 'xvar' argument", call.=FALSE) - } - - if(is.null(newobj)){ - newobj <- 'gamlss_res' - } - - calltext <- call('gamlssDS', formula=formula, sigma.formula=sigma.formula, - nu.formula=nu.formula, tau.formula=tau.formula, - family=family, data=data, method=method, mu.fix=mu.fix, - sigma.fix=sigma.fix, nu.fix=nu.fix, tau.fix=tau.fix, - control=control, i.control=i.control, centiles=centiles, - xvar=xvar, newobj=newobj) - study.summary <- DSI::datashield.aggregate(datasources, calltext) - - return(study.summary) - -} diff --git a/R/ds.getWGSR.R b/R/ds.getWGSR.R index f883549a..cc3fb0ec 100644 --- a/R/ds.getWGSR.R +++ b/R/ds.getWGSR.R @@ -124,11 +124,6 @@ ds.getWGSR <- function(sex=NULL, firstPart=NULL, secondPart=NULL, index=NULL, st stop("Please provide the column name of the 'secondPart' variable!", call.=FALSE) } - # check if the input objects are defined in all the studies - isDefined(datasources, sex) - isDefined(datasources, firstPart) - isDefined(datasources, secondPart) - # if 'firstPart' or 'secondPart' are not numeric return an error message typ.firstPart <- checkClass(datasources, firstPart) typ.secondPart <- checkClass(datasources, secondPart) @@ -190,7 +185,7 @@ ds.getWGSR <- function(sex=NULL, firstPart=NULL, secondPart=NULL, index=NULL, st if(!object.info[[j]]$test.obj.exists){ obj.name.exists.in.all.sources <- FALSE } - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ obj.non.null.in.all.sources <- FALSE } } diff --git a/R/ds.glm.R b/R/ds.glm.R index e27cb472..da0d2cff 100644 --- a/R/ds.glm.R +++ b/R/ds.glm.R @@ -46,7 +46,7 @@ #' #' In the \code{family} argument can be specified three types of models to fit: #' -#' \describe{ +#' \itemize{ #' \item{\code{"gaussian"}}{: conventional linear model with normally distributed errors} #' \item{\code{"binomial"}}{: conventional unconditional logistic regression model} #' \item{\code{"poisson"}}{: Poisson regression model which is the most used in survival analysis. @@ -190,7 +190,7 @@ #' @return \code{family}: error family and link function. #' @return \code{formula}: model formula, see description of formula as an input parameter (above). #' @return \code{coefficients}: a matrix with 5 columns: -#' \describe{ +#' \itemize{ #' \item{First}{: the names of all of the regression parameters (coefficients) in the model} #' \item{second}{: the estimated values} #' \item{third}{: corresponding standard errors of the estimated values} @@ -322,9 +322,9 @@ #' } #' ds.glm <- function(formula=NULL, data=NULL, family=NULL, offset=NULL, weights=NULL, checks=FALSE, maxit=20, CI=0.95, - viewIter=FALSE, viewVarCov=FALSE, viewCor=FALSE, datasources=NULL){ + viewIter=FALSE, viewVarCov=FALSE, viewCor=FALSE, datasources=NULL) { - # look for DS connections + # look for DS connections if(is.null(datasources)){ datasources <- datashield.connections_find() } @@ -339,10 +339,11 @@ ds.glm <- function(formula=NULL, data=NULL, family=NULL, offset=NULL, weights=NU stop(" Please provide a valid regression formula!", call.=FALSE) } - # check if user gave offset or weights directly in formula, if so the argument 'offset' or 'weights' - # to provide name of offset or weights variable - if(sum(as.numeric(grepl('offset', formula, ignore.case=TRUE)))>0 || - sum(as.numeric(grepl('weights', formula, ignore.case=TRUE)))>0){ +# check if user gave offset or weights directly in formula, if so the argument 'offset' or 'weights' +# to provide name of offset or weights variable + if(sum(as.numeric(grepl('offset', formula, ignore.case=TRUE)))>0 || + sum(as.numeric(grepl('weights', formula, ignore.case=TRUE)))>0) + { cat("\n\n WARNING: you may have specified an offset or regression weights") cat("\n as part of the model formula. In ds.glm (unlike the usual glm in R)") cat("\n you must specify an offset or weights separately from the formula") @@ -351,6 +352,7 @@ ds.glm <- function(formula=NULL, data=NULL, family=NULL, offset=NULL, weights=NU formula <- stats::as.formula(formula) + # check that 'family' was set if(is.null(family)){ stop(" Please provide a valid 'family' argument!", call.=FALSE) @@ -365,92 +367,106 @@ ds.glm <- function(formula=NULL, data=NULL, family=NULL, offset=NULL, weights=NU if(checks){ message(" -- Verifying the variables in the model") # call the function that checks the variables in the formula are defined (exist) on the server site and are not missing at complete - glmChecks(formula, data, offset, weights, datasources) + + glmChecks(formula, data, offset, weights, datasources) }else{ #message("WARNING:'checks' is set to FALSE; variables in the model are not checked and error messages may not be intelligible!") } - # MOVE ITERATION COUNT BEFORE ASSIGNMENT OF beta.vect.next - # Iterations need to be counted. Start off with the count at 0 - # and increment by 1 at each new iteration - iteration.count <- 0 +#MOVE ITERATION COUNT BEFORE ASSIGNMENT OF beta.vect.next +#Iterations need to be counted. Start off with the count at 0 + #and increment by 1 at each new iteration + iteration.count<-0 # number of 'valid' studies (those that passed the checks) and vector of beta values numstudies <- length(datasources) - # ARBITRARY LENGTH FOR START BETAs AT THIS STAGE BUT IN LEGAL TRANSMISSION FORMAT ("0,0,0,0,0") - beta.vect.next <- rep(0,5) - beta.vect.temp <- paste0(as.character(beta.vect.next), collapse=",") - # IDENTIFY THE CORRECT DIMENSION FOR START BETAs VIA CALLING FIRST COMPONENT OF glmDS - cally1 <- call('glmDS1', formula, family, weights, offset, data) - study.summary.0 <- DSI::datashield.aggregate(datasources, cally1) +#ARBITRARY LENGTH FOR START BETAs AT THIS STAGE BUT IN LEGAL TRANSMISSION FORMAT ("0,0,0,0,0") + beta.vect.next <- rep(0,5) + beta.vect.temp <- paste0(as.character(beta.vect.next), collapse=",") - at.least.one.study.data.error <- 0 - for(hh in 1:numstudies) { - if(study.summary.0[[hh]]$errorMessage!="No errors"){ - at.least.one.study.data.error <- 1 - } - } +#IDENTIFY THE CORRECT DIMENSION FOR START BETAs VIA CALLING FIRST COMPONENT OF glmDS - num.par.glm <- NULL - coef.names <- NULL + cally1 <- call('glmDS1', formula, family, weights, offset, data) - if(at.least.one.study.data.error==0){ - num.par.glm <- study.summary.0[[1]][[1]][[2]] - coef.names <- study.summary.0[[1]][[2]] - } + study.summary.0 <- DSI::datashield.aggregate(datasources, cally1) + +at.least.one.study.data.error<-0 - y.invalid <- NULL - Xpar.invalid <- NULL - w.invalid <- NULL - o.invalid <- NULL - glm.saturation.invalid <- NULL - errorMessage <- NULL - - for(ss in 1:numstudies){ - y.invalid<-c(y.invalid,study.summary.0[[ss]][[3]]) - Xpar.invalid<-rbind(Xpar.invalid,study.summary.0[[ss]][[4]]) - w.invalid<-c(w.invalid,study.summary.0[[ss]][[5]]) - o.invalid<-c(o.invalid,study.summary.0[[ss]][[6]]) - glm.saturation.invalid <-c(glm.saturation.invalid,study.summary.0[[ss]][[7]]) - errorMessage<-c(errorMessage,study.summary.0[[ss]][[8]]) +for(hh in 1:numstudies) { + if(study.summary.0[[hh]]$errorMessage!="No errors"){ + at.least.one.study.data.error<-1 } +} + + +num.par.glm<-NULL +coef.names<-NULL + +if(at.least.one.study.data.error==0){ +num.par.glm<-study.summary.0[[1]][[1]][[2]] +coef.names<-study.summary.0[[1]][[2]] +} + +y.invalid<-NULL +Xpar.invalid<-NULL +w.invalid<-NULL +o.invalid<-NULL +glm.saturation.invalid<-NULL +errorMessage<-NULL + + for(ss in 1:numstudies) + { + y.invalid<-c(y.invalid,study.summary.0[[ss]][[3]]) + Xpar.invalid<-rbind(Xpar.invalid,study.summary.0[[ss]][[4]]) + w.invalid<-c(w.invalid,study.summary.0[[ss]][[5]]) + o.invalid<-c(o.invalid,study.summary.0[[ss]][[6]]) + glm.saturation.invalid <-c(glm.saturation.invalid,study.summary.0[[ss]][[7]]) + errorMessage<-c(errorMessage,study.summary.0[[ss]][[8]]) + } + +y.invalid<-as.matrix(y.invalid) +sum.y.invalid<-sum(y.invalid) +dimnames(y.invalid)<-list(names(datasources),"Y VECTOR") + +Xpar.invalid<-as.matrix(Xpar.invalid) +sum.Xpar.invalid<-sum(Xpar.invalid) +dimnames(Xpar.invalid)<-list(names(datasources),coef.names) + + +w.invalid<-as.matrix(w.invalid) +sum.w.invalid<-sum(w.invalid) +dimnames(w.invalid)<-list(names(datasources),"WEIGHT VECTOR") + +o.invalid<-as.matrix(o.invalid) +sum.o.invalid<-sum(o.invalid) +dimnames(o.invalid)<-list(names(datasources),"OFFSET VECTOR") + +glm.saturation.invalid<-as.matrix(glm.saturation.invalid) +sum.glm.saturation.invalid<-sum(glm.saturation.invalid) +dimnames(glm.saturation.invalid)<-list(names(datasources),"MODEL OVERPARAMETERIZED") + +errorMessage<-as.matrix(errorMessage) +dimnames(errorMessage)<-list(names(datasources),"ERROR MESSAGES") + - y.invalid <- as.matrix(y.invalid) - sum.y.invalid <- sum(y.invalid) - dimnames(y.invalid) <- list(names(datasources), "Y VECTOR") - - Xpar.invalid <- as.matrix(Xpar.invalid) - sum.Xpar.invalid <- sum(Xpar.invalid) - dimnames(Xpar.invalid) <- list(names(datasources), coef.names) - - w.invalid <- as.matrix(w.invalid) - sum.w.invalid <- sum(w.invalid) - dimnames(w.invalid) <- list(names(datasources), "WEIGHT VECTOR") - - o.invalid <- as.matrix(o.invalid) - sum.o.invalid <- sum(o.invalid) - dimnames(o.invalid) <- list(names(datasources),"OFFSET VECTOR") - - glm.saturation.invalid <- as.matrix(glm.saturation.invalid) - sum.glm.saturation.invalid <- sum(glm.saturation.invalid) - dimnames(glm.saturation.invalid) <- list(names(datasources), "MODEL OVERPARAMETERIZED") - - errorMessage <- as.matrix(errorMessage) - dimnames(errorMessage) <- list(names(datasources), "ERROR MESSAGES") - - output.blocked.information.1 <- "MODEL FITTING TERMINATED AT FIRST ITERATION:" - output.blocked.information.2 <- "Any values of 1 in the following tables denote potential disclosure risks" - output.blocked.information.3 <- "please use the argument to include only valid studies." - output.blocked.information.4 <- "Errors by study are as follows:" - - if(sum.y.invalid>0||sum.Xpar.invalid>0||sum.w.invalid>0||sum.o.invalid>0||sum.glm.saturation.invalid>0||at.least.one.study.data.error==1){ - message("\n\nMODEL FITTING TERMINATED AT FIRST ITERATION:\n", - "Any values of 1 in the following tables denote potential disclosure risks\n", - "please use the argument to include only valid studies.\n", - "Errors by study are as follows:\n") + +output.blocked.information.1<-"MODEL FITTING TERMINATED AT FIRST ITERATION:" +output.blocked.information.2<-"Any values of 1 in the following tables denote potential disclosure risks" +output.blocked.information.3<-"please use the argument to include only valid studies." +output.blocked.information.4<-"Errors by study are as follows:" + + + + +if(sum.y.invalid>0||sum.Xpar.invalid>0||sum.w.invalid>0||sum.o.invalid>0||sum.glm.saturation.invalid>0||at.least.one.study.data.error==1) + { + message("\n\nMODEL FITTING TERMINATED AT FIRST ITERATION:\n", + "Any values of 1 in the following tables denote potential disclosure risks\n", + "please use the argument to include only valid studies.\n", + "Errors by study are as follows:\n") print(as.matrix(y.invalid)) print(as.matrix(Xpar.invalid)) print(as.matrix(w.invalid)) @@ -458,36 +474,44 @@ ds.glm <- function(formula=NULL, data=NULL, family=NULL, offset=NULL, weights=NU print(as.matrix(glm.saturation.invalid)) print(as.matrix(errorMessage)) - return(list( - output.blocked.information.1, - output.blocked.information.2, - output.blocked.information.3, - output.blocked.information.4, - y.vector.error=y.invalid, - X.matrix.error=Xpar.invalid, - weight.vector.error=w.invalid, - offset.vector.error=o.invalid, - glm.overparameterized=glm.saturation.invalid, - errorMessage=errorMessage - )) + + + + return(list( + output.blocked.information.1, + output.blocked.information.2, + output.blocked.information.3, + output.blocked.information.4, + y.vector.error=y.invalid, + X.matrix.error=Xpar.invalid, + weight.vector.error=w.invalid, + offset.vector.error=o.invalid, + glm.overparameterized=glm.saturation.invalid, + errorMessage=errorMessage + )) stop("DATA ERROR") - } + } + + - beta.vect.next <- rep(0, num.par.glm) + beta.vect.next <- rep(0,num.par.glm) beta.vect.temp <- paste0(as.character(beta.vect.next), collapse=",") - # Provide arbitrary starting value for deviance to enable subsequent calculation of the - # change in deviance between iterations - dev.old <- 9.99e+99 - # Convergence state needs to be monitored. - converge.state <- FALSE + #Provide arbitrary starting value for deviance to enable subsequent calculation of the + #change in deviance between iterations + dev.old<-9.99e+99 + + #Convergence state needs to be monitored. + converge.state<-FALSE + + #Define a convergence criterion. This value of epsilon corresponds to that used + #by default for GLMs in R (see section S3 for details) + epsilon<-1.0e-08 + + f<-NULL - # Define a convergence criterion. This value of epsilon corresponds to that used - # by default for GLMs in R (see section S3 for details) - epsilon <- 1.0e-08 - f <- NULL while(!converge.state && iteration.count < maxit) { @@ -495,32 +519,38 @@ ds.glm <- function(formula=NULL, data=NULL, family=NULL, offset=NULL, weights=NU message("Iteration ", iteration.count, "...") - # NOW CALL SECOND COMPONENT OF glmDS TO GENERATE SCORE VECTORS AND INFORMATION MATRICES - cally2 <- call('glmDS2', formula, family, beta.vect.temp, offset, weights, data) - study.summary <- DSI::datashield.aggregate(datasources, cally2) +#NOW CALL SECOND COMPONENT OF glmDS TO GENERATE SCORE VECTORS AND INFORMATION MATRICES + cally2 <- call('glmDS2', formula, family, beta.vect.temp, offset, weights, data) + + study.summary <- DSI::datashield.aggregate(datasources, cally2) + - # INTEGRATE RETURNED OUTPUT - .select <- function(l, field){ - lapply(l, function(obj) {obj[[field]]}) - } - disclosure.risk.total <- Reduce(f="+", .select(study.summary, 'disclosure.risk')) - disclosure.risk <- NULL - errorMessage2 <- NULL + +#INTEGRATE RETURNED OUTPUT + .select <- function(l, field) { + lapply(l, function(obj) {obj[[field]]}) + } + + disclosure.risk.total<-Reduce(f="+", .select(study.summary, 'disclosure.risk')) + + disclosure.risk<-NULL + errorMessage2<-NULL for(ss2 in 1:numstudies){ - disclosure.risk <- c(disclosure.risk,study.summary[[ss]][[9]]) - errorMessage2 <- c(errorMessage2,study.summary[[ss]][[10]]) + disclosure.risk<-c(disclosure.risk,study.summary[[ss]][[9]]) + errorMessage2<-c(errorMessage2,study.summary[[ss]][[10]]) } - disclosure.risk <- as.matrix(disclosure.risk) - dimnames(disclosure.risk) <- list(names(datasources), "RISK OF DISCLOSURE") + disclosure.risk<-as.matrix(disclosure.risk) + dimnames(disclosure.risk)<-list(names(datasources),"RISK OF DISCLOSURE") + - errorMessage2 <- as.matrix(errorMessage2) - dimnames(errorMessage2) <- list(names(datasources), "ERROR MESSAGES") + errorMessage2<-as.matrix(errorMessage2) + dimnames(errorMessage2)<-list(names(datasources),"ERROR MESSAGES") - if(disclosure.risk.total>0){ + if(disclosure.risk.total>0){ message("Potential disclosure risk in y.vect, X.mat, w.vect or offset \n", "or model overparameterized in at least one study.\n", "In addition clientside function appears to have been modified\n", diff --git a/R/ds.glmPredict.R b/R/ds.glmPredict.R index ff0d7647..49cdb54d 100644 --- a/R/ds.glmPredict.R +++ b/R/ds.glmPredict.R @@ -1,4 +1,4 @@ -#' +#ds.glmPredict #' @title Applies predict.glm() to a serverside glm object #' @description Applies native R's predict.glm() function to a serverside #' glm object previously created using ds.glmSLMA. @@ -16,7 +16,7 @@ #' Because no critical information is passed to the clientside, there are no #' disclosure issues associated with this action. Any standard DataSHIELD functions #' can then be applied to the newobj to interpret the output. For example, it could -#' be used as the basis for regression diagnostic plots. Second, the call +#' be used as the basis for regression diagnostic plots. Second, the call #' to the aggregate function creates a non-disclosive summary of all the #' information held in the newobj created by the assign function #' and returns this summary to the clientside. For example, the full list of @@ -122,10 +122,10 @@ #' if k terms are being summarised. #' @author Paul Burton, for DataSHIELD Development Team 13/08/20 #' @export -#' -ds.glmPredict <- function(glmname = NULL, newdataname = NULL, output.type = "response", + +ds.glmPredict <- function(glmname=NULL,newdataname=NULL,output.type="response", se.fit = FALSE, dispersion = NULL, terms = NULL, - na.action = "na.pass", newobj = NULL, datasources = NULL){ + na.action = "na.pass", newobj=NULL, datasources=NULL){ # look for DS connections if(is.null(datasources)){ @@ -139,29 +139,32 @@ ds.glmPredict <- function(glmname = NULL, newdataname = NULL, output.type = "res # check that is set if(is.null(glmname)){ - stop(" is not set, please specify it as a character string containing the name of a valid glm class object on the serverside", call.=FALSE) + error.message<-" is not set, please specify it as a character string containing the name of a valid glm class object on the serverside" + return(error.message) } - - # check if the glm object is defined in all the studies - isDefined(datasources, glmname) # check that is correctly set - if((output.type!="link") && (output.type!="response") && (output.type!="terms")){ - stop(" is not correctly set, please specify it as one of three character strings: 'link', 'response', or 'terms'", call.=FALSE) + if((output.type!="link")&&(output.type!="response")&&(output.type!="terms")){ + error.message<-" is not correctly set, please specify it as one of three character strings: 'link', 'response', or 'terms'" + return(error.message) } # check that is correctly set if((na.action!="na.fail")&&(na.action!="na.omit")&&(na.action!="na.exclude")&&(na.action!="na.pass")){ - stop(" is not correctly set, please specify it as one of four character strings: 'na.fail', 'na.omit', 'na.exclude' or 'na.pass'", call.=FALSE) + error.message<-" is not correctly set, please specify it as one of four character strings: 'na.fail', 'na.omit', 'na.exclude' or 'na.pass'" + return(error.message) } - # provide value for newobj if none specified - if(is.null(newobj)){ - newobj<-"predict_glm" + #provide value for newobj if none specified + if(is.null(newobj)) + { + newobj<-"predict_glm" } - calltext <- call("glmPredictDS.as", glmname, newdataname, output.type, se.fit, dispersion, terms, na.action) - DSI::datashield.assign(datasources, newobj, calltext) + calltext<-call("glmPredictDS.as", glmname, newdataname, output.type, + se.fit, dispersion, terms, na.action) + + DSI::datashield.assign(datasources, newobj, calltext) ############################################################################################################# #DataSHIELD CLIENTSIDE MODULE: CHECK KEY DATA OBJECTS SUCCESSFULLY CREATED # diff --git a/R/ds.glmSLMA.R b/R/ds.glmSLMA.R index 421d7783..a0791f89 100644 --- a/R/ds.glmSLMA.R +++ b/R/ds.glmSLMA.R @@ -91,7 +91,7 @@ #' relatively widely. #' #' The standard models include: -#' \describe{ +#' \itemize{ #' \item{\code{"gaussian"}}{: conventional linear model with normally distributed errors} #' \item{\code{"binomial"}}{: conventional unconditional logistic regression model} #' \item{\code{"poisson"}}{: Poisson regression model which is often used in epidemiological @@ -179,8 +179,6 @@ #' @param maxit a numeric scalar denoting the maximum number of iterations that #' are permitted before \code{ds.glmSLMA} declares that the model has failed to converge. #' For more information see \strong{Details}. -#' @param notify.of.progress specifies if console output should be produced to indicate -#' progress. Default FALSE. #' @param datasources a list of \code{\link{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}}. @@ -199,7 +197,7 @@ #' a series of other list objects that represent inferences aggregated across studies. #' @return the study specific items include: #' @return \code{coefficients}: a matrix with 5 columns: -#' \describe{ +#' \itemize{ #' \item{First}{: the names of all of the regression parameters (coefficients) in the model} #' \item{second}{: the estimated values} #' \item{third}{: corresponding standard errors of the estimated values} @@ -375,7 +373,7 @@ #' #' @export ds.glmSLMA<-function(formula=NULL, family=NULL, offset=NULL, weights=NULL, combine.with.metafor=TRUE, - newobj=NULL,dataName=NULL,checks=FALSE, maxit=30, notify.of.progress=FALSE, datasources=NULL) { + newobj=NULL,dataName=NULL,checks=FALSE, maxit=30, datasources=NULL) { # look for DS connections if(is.null(datasources)){ @@ -615,10 +613,7 @@ if(at.least.one.study.data.error) if(is.null(newobj)){ newobj <- "new.glm.obj" } - - if (notify.of.progress) { - cat("\n\nSAVING SERVERSIDE glm OBJECT AS: <",newobj,">\n\n") - } + cat("\n\nSAVING SERVERSIDE glm OBJECT AS: <",newobj,">\n\n") calltext.2 <- call('glmSLMADS.assign', formula, family, offset, weights, dataName) @@ -875,7 +870,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if("ABSENT" %in% object.info[[j]]$test.obj.class){ # + if(object.info[[j]]$test.obj.class[1]=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.glmSummary.R b/R/ds.glmSummary.R index 38df8163..f934d605 100644 --- a/R/ds.glmSummary.R +++ b/R/ds.glmSummary.R @@ -1,6 +1,6 @@ -#' -#' @title Summarize a glm object on the serverside -#' @description Summarize a glm object on the serverside to create a +#ds.glmSummary +#' @title summarize a glm object on the serverside +#' @description summarize a glm object on the serverside to create a #' summary_glm object. Also identify and return components of #' both the glm object and the summary_glm object #' that can safely be sent to the clientside without a risk of disclosure @@ -58,7 +58,7 @@ #' On the other hand, if you wish to specify solely the first and third sources, the #' appropriate call will be datasources=connections.xyz[c(1,3)] #' @return ds.glmSummary writes a new object to the serverside with name given by -#' the newobj argument or if that argument is missing or null it is called "summary_glm.newobj". +#' the newobj argument or if that argument is missing or null it is called "summary_glm". #' In addition, ds.glmSummary returns an object containing two lists to the clientside #' the two lists are named "glm.obj" and "glm.summary.obj" which contain all of the #' elements of the original glm object and the summary_glm object on the serverside @@ -75,10 +75,10 @@ #' and for ds.glmSLMA in DataSHIELD. #' @author Paul Burton, for DataSHIELD Development Team 17/07/20 #' @export -#' -ds.glmSummary <- function(x.name, newobj=NULL, datasources=NULL) { - # if no connections are specified look for connection objects in the environment +ds.glmSummary<-function(x.name, newobj=NULL, datasources=NULL) { + +# if no connections are specified look for connection objects in the environment if(is.null(datasources)){ datasources <- datashield.connections_find() } @@ -88,26 +88,29 @@ ds.glmSummary <- function(x.name, newobj=NULL, datasources=NULL) { stop("The 'datasources' were expected to be a list of DSConnection-class objects", call.=FALSE) } - # check if a value has been provided for x +# check if a value has been provided for x if(is.null(x.name)||!is.character(x.name)){ - stop("Error: x.name must denote a character string naming the glm object on the serverside to be summarised", call.=FALSE) + return("Error: x.name must denote a character string naming the glm object on the + serverside to be summarised") } - - # check if the input object is defined in all the studies - isDefined(datasources, x.name) - # create a name by default if the user did not provide a name for the new object +# PREPARE AND CALL THE ASSIGN FUNCTION TO PREPARE THE summary_glm OBJECT ON THE SERVERSIDE + +#FORCE newobj TO BE CORRECT IN CASE USER TRIES TO SPECIFY A VALUE FOR IT +#NAME OF ALL THREE newobj OBJECTS IS DEFINED FULLY BY x.name + if (is.null(newobj)) { - newobj <- "summary_glm.newobj" + newobj<- "summary_glm.newobj" } - - # PREPARE AND CALL THE ASSIGN FUNCTION TO PREPARE THE summary_glm OBJECT ON THE SERVERSIDE + calltext1 <- call("glmSummaryDS.as", x.name) + DSI::datashield.assign(datasources,newobj,calltext1) - # LOOK BELOW CLIENTSIDE MODULE FOR NEXT BLOCK OF CODE - # PREPARE AND CALL THE SECOND ASSIGN FUNCTION TO PREPARE AN ABBREVIATED - # summary_glm OBJECT ON THE SERVERSIDE THAT CAN SAFELY BE RETURNED TO CLIENT +# LOOK BELOW CLIENTSIDE MODULE FOR NEXT BLOCK OF CODE +# PREPARE AND CALL THE SECOND ASSIGN FUNCTION TO PREPARE AN ABBREVIATED +# summary_glm OBJECT ON THE SERVERSIDE THAT CAN SAFELY BE RETURNED TO CLIENT + ############################################################################################################# #DataSHIELD CLIENTSIDE MODULE: CHECK KEY DATA OBJECTS SUCCESSFULLY CREATED # @@ -133,7 +136,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # @@ -199,3 +202,4 @@ if(obj.name.exists.in.all.sources && obj.non.null.in.all.sources){ # return(output.list) } #ds.glmSummary + diff --git a/R/ds.glmerSLMA.R b/R/ds.glmerSLMA.R index 92178322..6981a68d 100644 --- a/R/ds.glmerSLMA.R +++ b/R/ds.glmerSLMA.R @@ -44,7 +44,7 @@ #' #' #' In the \code{family} argument can be specified two types of models to fit: -#' \describe{ +#' \itemize{ #' \item{\code{"binomial"}}{: logistic regression models} #' \item{\code{"poisson"}}{: poisson regression models} #' } @@ -104,7 +104,7 @@ #' @param control_value numeric representing the new value which you want to allocate the #' control parameter corresponding to the \code{control-type}. #' For more information see \strong{Details}. -#' @param nAGQ an integer value indicating the number of points per axis for evaluating the adaptive +#' @param nAGQ an integer value indicating the number of points per axis for evaluating the adaptive #' Gauss-Hermite approximation to the log-likelihood. Defaults 1, corresponding to the Laplace approximation. #' For more information see R \code{glmer} function help. #' @param verbose an integer value. If \eqn{verbose > 0} the output is generated during the optimization of @@ -133,7 +133,7 @@ #' The list of elements returned by \code{ds.glmerSLMA} is mentioned below: #' #' @return \code{coefficients}: a matrix with 5 columns: -#' \describe{ +#' \itemize{ #' \item{First}{: the names of all of the regression parameters (coefficients) in the model} #' \item{second}{: the estimated values} #' \item{third}{: corresponding standard errors of the estimated values} @@ -242,12 +242,11 @@ #' #' @author DataSHIELD Development Team #' @export -#' -ds.glmerSLMA <- function(formula=NULL, offset=NULL, weights=NULL, combine.with.metafor=TRUE, dataName=NULL, +ds.glmerSLMA <- function(formula=NULL, offset=NULL, weights=NULL, combine.with.metafor=TRUE,dataName=NULL, checks=FALSE, datasources=NULL, family=NULL, control_type = NULL, control_value = NULL, nAGQ = 1L, verbose = 0, start_theta = NULL, start_fixef = NULL, notify.of.progress=FALSE, - assign=FALSE, newobj=NULL){ + assign=FALSE, newobj=NULL) { # look for DS connections if(is.null(datasources)){ @@ -361,11 +360,8 @@ ds.glmerSLMA <- function(formula=NULL, offset=NULL, weights=NULL, combine.with.m newobj <- "new.glmer.obj" } + cat("\n\nSAVING SERVERSIDE glmerMod OBJECT AS: <",newobj,">\n\n") - if (notify.of.progress) { - cat("\n\nSAVING SERVERSIDE glmerMod OBJECT AS: <",newobj,">\n\n") - } - calltext.2 <- call('glmerSLMADS.assign', formula, offset, weights, dataName, family, control_type, control_value.transmit, nAGQ, verbose, theta, fixef) @@ -627,4 +623,4 @@ ds.glmerSLMA <- function(formula=NULL, offset=NULL, weights=NULL, combine.with.m } -# ds.glmerSLMA +# ds.glmerSLMA \ No newline at end of file diff --git a/R/ds.heatmapPlot.R b/R/ds.heatmapPlot.R index e2d656c1..2df81768 100644 --- a/R/ds.heatmapPlot.R +++ b/R/ds.heatmapPlot.R @@ -11,19 +11,19 @@ #' minimum and maximum value. This was done to reduce the risk of potential disclosure. #' #' In the argument \code{type} can be specified two types of graphics to display: -#' \describe{ +#' \itemize{ #' \item{\code{'combine'}}{: a combined heat map plot is displayed} #' \item{\code{'split'}}{: each heat map is plotted separately} #' } #' #' In the argument \code{show} can be specified two options: -#' \describe{ +#' \itemize{ #' \item{\code{'all'}}{: the ranges of the variables are used as plot limits} #' \item{\code{'zoomed'}}{: the plot is zoomed to the region where the actual data are} #' } #' #' In the argument \code{method} can be specified 3 different heat map to be created: -#' \describe{ +#' \itemize{ #' \item{\code{'smallCellsRule'}}{: the heat map of the actual variables is #' created but grids with low counts are replaced with grids with zero counts} #' \item{\code{'deterministic'}}{: the heat map of the scaled centroids of each @@ -148,8 +148,7 @@ #' #' } #' -ds.heatmapPlot <- function(x=NULL, y=NULL, type="combine", show="all", numints=20, - method="smallCellsRule", k=3, noise=0.25, datasources=NULL){ +ds.heatmapPlot <- function(x=NULL, y=NULL, type="combine", show="all", numints=20, method="smallCellsRule", k=3, noise=0.25, datasources=NULL){ # look for DS connections if(is.null(datasources)){ @@ -169,9 +168,27 @@ ds.heatmapPlot <- function(x=NULL, y=NULL, type="combine", show="all", numints=2 stop("y=NULL. Please provide the names of the 2nd numeric vector!", call.=FALSE) } - # check if the input objects are defined in all the studies - isDefined(datasources, x) - isDefined(datasources, y) + # the argument method must be either "smallCellsRule" or "deterministic" or "probabilistic" + if(method != 'smallCellsRule' & method != 'deterministic' & method != 'probabilistic'){ + stop('Function argument "method" has to be either "smallCellsRule" or "deterministic" or "probabilistic"', call.=FALSE) + } + + # the input variable might be given as column table (i.e. D$object) + # or just as a vector not attached to a table (i.e. object) + # we have to make sure the function deals with each case + objects <- c(x, y) + xnames <- extract(objects) + varnames <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } # call the internal function that checks the input object(s) is(are) of the same class in all studies. typ.x <- checkClass(datasources, x) @@ -186,13 +203,10 @@ ds.heatmapPlot <- function(x=NULL, y=NULL, type="combine", show="all", numints=2 message(paste0(y, " is of type ", typ.y, "!")) stop("The input objects must be integer or numeric vectors.", call.=FALSE) } - - # the argument method must be either "smallCellsRule" or "deterministic" or "probabilistic" - if(method != 'smallCellsRule' & method != 'deterministic' & method != 'probabilistic'){ - stop('Function argument "method" has to be either "smallCellsRule" or "deterministic" or "probabilistic"', call.=FALSE) - } - # prepare the axis labels + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case xnames <- extract(x) x.lab <- xnames[[length(xnames)]] ynames <- extract(y) diff --git a/R/ds.hetcor.R b/R/ds.hetcor.R deleted file mode 100644 index 1b0e77f6..00000000 --- a/R/ds.hetcor.R +++ /dev/null @@ -1,56 +0,0 @@ -#' -#' @title Heterogeneous Correlation Matrix -#' @description This function is based on the hetcor function from the R package \code{polycor}. -#' @details Computes a heterogenous correlation matrix, consisting of Pearson product-moment -#' correlations between numeric variables, polyserial correlations between numeric and ordinal -#' variables, and polychoric correlations between ordinal variables. -#' @param data the name of a data frame consisting of factors, ordered factors, logical variables, -#' character variables, and/or numeric variables, or the first of several variables. -#' @param ML if TRUE, compute maximum-likelihood estimates; if FALSE (default), compute quick -#' two-step estimates. -#' @param std.err if TRUE (default), compute standard errors. -#' @param bins number of bins to use for continuous variables in testing bivariate normality; -#' the default is 4. -#' @param pd if TRUE (default) and if the correlation matrix is not positive-definite, an attempt -#' will be made to adjust it to a positive-definite matrix, using the nearPD function in the Matrix -#' package. Note that default arguments to nearPD are used (except corr=TRUE); for more control call -#' nearPD directly. -#' @param use if "complete.obs", remove observations with any missing data; if "pairwise.complete.obs", -#' compute each correlation using all observations with valid data for that pair of variables. -#' @param datasources a list of \code{\link{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}}. -#' @return Returns an object of class "hetcor" from each study, with the following components: the -#' correlation matrix; the type of each correlation: "Pearson", "Polychoric", or "Polyserial"; the -#' standard errors of the correlations, if requested; the number (or numbers) of observations on which -#' the correlations are based; p-values for tests of bivariate normality for each pair of variables; -#' the method by which any missing data were handled: "complete.obs" or "pairwise.complete.obs"; TRUE -#' for ML estimates, FALSE for two-step estimates. -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.hetcor <- function(data=NULL, ML=TRUE, std.err=TRUE, bins=4, pd=TRUE, use="complete.obs", 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(data)){ - stop("Please provide the name of the input object!", call.=FALSE) - } - - # check if the input object is defined in all the studies - defined <- isDefined(datasources, data) - - calltext <- call('hetcorDS', data, ML, std.err, bins, pd, use) - output <- DSI::datashield.aggregate(datasources, calltext) - - return(output) - -} \ No newline at end of file diff --git a/R/ds.histogram.R b/R/ds.histogram.R index 5b497758..d34a9a79 100644 --- a/R/ds.histogram.R +++ b/R/ds.histogram.R @@ -6,13 +6,13 @@ #' the single plots. #' #' In the argument \code{type} can be specified two types of graphics to display: -#' \describe{ +#' \itemize{ #' \item{\code{'combine'}}{: a histogram that merges the single plot is displayed.} #' \item{\code{'split'}}{: each histogram is plotted separately.} #' } #' #' In the argument \code{method} can be specified 3 different histograms to be created: -#' \describe{ +#' \itemize{ #' \item{\code{'smallCellsRule'}}{: the histogram of the actual variable is #' created but bins with low counts are removed.} #' \item{\code{'deterministic'}}{: the histogram of the scaled centroids of each @@ -48,7 +48,7 @@ #' By default the value of noise is set to be equal to 0.25. #' #' In the argument \code{vertical.axis} can be specified two types of histograms: -#' \describe{ +#' \itemize{ #' \item{\code{'Frequency'}}{: the histogram of the frequencies #' is returned.} #' \item{\code{'Density'}}{: the histogram of the densities @@ -167,8 +167,19 @@ ds.histogram <- function(x=NULL, type="split", num.breaks=10, method="smallCells stop("Please provide the name of the input vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) @@ -204,13 +215,9 @@ ds.histogram <- function(x=NULL, type="split", num.breaks=10, method="smallCells ranges <- unique(unlist(DSI::datashield.aggregate(datasources, as.symbol(cally1)))) # produce the 'global' range - range.arg <- c(min(ranges, na.rm=TRUE), max(ranges, na.rm=TRUE)) + range.arg <- c(min(ranges,na.rm=TRUE), max(ranges, na.rm=TRUE)) min <- range.arg[1] max <- range.arg[2] - - # get the axis label - xnames <- extract(x) - varname <- xnames$elements # call the server-side function that generates the histogram object to plot call <- paste0("histogramDS2(", x, ",", num.breaks, ",", min, ",", max, ",", method.indicator, ",", k, ",", noise, ")") diff --git a/R/ds.igb_standards.R b/R/ds.igb_standards.R deleted file mode 100644 index c3d74f40..00000000 --- a/R/ds.igb_standards.R +++ /dev/null @@ -1,85 +0,0 @@ -#' -#' @title Converts birth measurements to intergrowth z-scores/centiles -#' @description Converts birth measurements to INTERGROWTH z-scores/centiles (generic) -#' @param gagebrth the name of the "gestational age at birth in days" variable. -#' @param z z-score(s) to convert (must be between 0 and 1). Default value is 0. -#' This value is used only if \code{fun} is set to "igb_zscore2value". -#' @param p centile(s) to convert (must be between 0 and 100). Default value is p=50. -#' This value is used only if \code{fun} is set to "igb_centile2value". -#' @param val the name of the anthropometric variable to convert. -#' @param var the name of the measurement to convert ("lencm", "wtkg", "hcircm", "wlr"). -#' @param sex the name of the sex factor variable. The variable should be coded as Male/Female. -#' If it is coded differently (e.g. 0/1), then you can use the ds.recodeValues function to -#' recode the categories to Male/Female before the use of ds.igb_standards. -#' @param fun the name of the function to be used. This can be one of: "igb_centile2value", -#' "igb_zscore2value", "igb_value2zscore" (default), "igb_value2centile". -#' @param newobj a character string that provides the name for the output variable -#' that is stored on the data servers. Default name is set to \code{igb.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @note For gestational ages between 24 and 33 weeks, the INTERGROWTH very early preterm -#' standard is used. -#' @references International standards for newborn weight, length, and head circumference by -#' gestational age and sex: the Newborn Cross-Sectional Study of the INTERGROWTH-21st Project -#' Villar, José et al. The Lancet, Volume 384, Issue 9946, 857-868 -#' INTERGROWTH-21st very preterm size at birth reference charts. Lancet 2016 -#' doi.org/10.1016/S0140-6736(16) 00384-6. Villar, José et al. -#' @return assigns the converted measurement as a new object on the server-side -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.igb_standards <- function(gagebrth=NULL, z=0, p=50, val=NULL, var=NULL, sex=NULL, - fun='igb_value2zscore', newobj=NULL, 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) - } - - # check if user has provided the name of the input variables - if(is.null(gagebrth)){ - stop("Please provide the name of the gagebrth variable", call.=FALSE) - } - if(is.null(sex)){ - stop("Please provide the name of the sex variable", call.=FALSE) - } - - # check if the input objects are defined in all the studies - isDefined(datasources, gagebrth) - isDefined(datasources, sex) - - # check if the provided fun is valid - if(!(fun %in% c("igb_centile2value","igb_zscore2value","igb_value2zscore","igb_value2centile"))){ - stop("Please provide a valid fun", call.=FALSE) - } - - # check if val is provided if fun is either igb_value2zscore or igb_value2centile - if(fun %in% c("igb_value2zscore","igb_value2centile")){ - if(is.null(val)){ - stop("Please provide the name of the val variable", call.=FALSE) - }else{ - isDefined(datasources, val) - } - } - - # check if the provided var is valid - if(!(var %in% c("lencm", "wtkg", "hcircm", "wlr"))){ - stop("Please provide a valid var", call.=FALSE) - } - - # if no output variable specified then provide a default name - if(is.null(newobj)){ - newobj <- "igb.newobj" - } - - # call the server-side assign function - cally <- call('igb_standardsDS', gagebrth, z, p, val, var, sex, fun) - DSI::datashield.assign(datasources, newobj, cally) - -} \ No newline at end of file diff --git a/R/ds.isNA.R b/R/ds.isNA.R index 28ff808e..a5e992b6 100644 --- a/R/ds.isNA.R +++ b/R/ds.isNA.R @@ -54,7 +54,6 @@ #' datashield.logout(connections) #' #' } -#' ds.isNA <- function(x=NULL, datasources=NULL){ # look for DS connections @@ -71,8 +70,19 @@ ds.isNA <- function(x=NULL, datasources=NULL){ stop("Please provide the name of the input vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) @@ -84,18 +94,14 @@ ds.isNA <- function(x=NULL, datasources=NULL){ # name of the studies to be used in the plots' titles stdnames <- names(datasources) - - # name of the variable - xnames <- extract(x) - varname <- xnames$elements # keep of the results of the checks for each study track <- list() - # call server side function 'isNaDS' to check, in each study, if the vector is empty + # call server side function 'isNA.ds' to check, in each study, if the vector is empty for(i in 1: length(datasources)){ - cally <- call("isNaDS", x) - out <- DSI::datashield.aggregate(datasources[i], cally) + cally <- paste0("isNaDS(", x, ")") + out <- DSI::datashield.aggregate(datasources[i], as.symbol(cally)) if(out[[1]]){ track[[i]] <- TRUE message("The variable ", varname, " in ", stdnames[i], " is missing at complete (all values are 'NA').") diff --git a/R/ds.isValid.R b/R/ds.isValid.R index 34a94223..b826e972 100644 --- a/R/ds.isValid.R +++ b/R/ds.isValid.R @@ -53,6 +53,8 @@ #' # clear the Datashield R sessions and logout #' datashield.logout(connections) #' +#' +#' #' } #' ds.isValid <- function(x=NULL, datasources=NULL){ @@ -71,8 +73,19 @@ ds.isValid <- function(x=NULL, datasources=NULL){ stop("Please provide the name of the input vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) @@ -85,6 +98,5 @@ ds.isValid <- function(x=NULL, datasources=NULL){ # call the server side function that does the job and return its output cally <- paste0('isValidDS(', x, ')') output <- DSI::datashield.aggregate(datasources, as.symbol(cally)) - return(output) } diff --git a/R/ds.kurtosis.R b/R/ds.kurtosis.R index c262201b..df9e7d61 100644 --- a/R/ds.kurtosis.R +++ b/R/ds.kurtosis.R @@ -49,12 +49,22 @@ ds.kurtosis <- function(x=NULL, method=1, type='both', datasources=NULL){ if(type == 'combine' | type == 'combined' | type == 'combines' | type == 'c') type <- 'combine' if(type == 'split' | type == 'splits' | type == 's') type <- 'split' if(type == 'both' | type == 'b' ) type <- 'both' - if(type != 'combine' & type != 'split' & type != 'both'){ + if(type != 'combine' & type != 'split' & type != 'both') stop('Function argument "type" has to be either "both", "combine" or "split"', call.=FALSE) - } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) diff --git a/R/ds.length.R b/R/ds.length.R index a288de72..ec186161 100644 --- a/R/ds.length.R +++ b/R/ds.length.R @@ -76,46 +76,69 @@ #' ds.length <- function(x=NULL, type='both', checks='FALSE', 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 the input object!", call.=FALSE) - } + ################################################################################################################## + #MODULE 1: IDENTIFY DEFAULT CONNECTIONS # + # 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) # + } # + ################################################################################################################## + + ##################################################################################### + #MODULE 2: SET UP KEY VARIABLES ALLOWING FOR DIFFERENT INPUT FORMATS # + if(is.null(x)){ # + stop("Please provide the name of the input vector!", call.=FALSE) # + } # + # the input variable might be given as a variable in a data frame (i.e. D$x) # + # or just as a vector not attached to a table (i.e. x) # + # we have to make sure the function deals with each case # + xnames <- extract(x) # + varname <- xnames$elements # + obj2lookfor <- xnames$holders # + ##################################################################################### + - # beginning of optional checks - the process stops and reports as soon as one check fails - if(checks){ - - # check if the input object is defined in all the studies - isDefined(datasources, x) - - # call the internal function that checks the input object is suitable in all studies - typ <- checkClass(datasources, x) - + ############################################################################################### + #MODULE 3: GENERIC OPTIONAL CHECKS TO ENSURE CONSISTENT STRUCTURE OF KEY VARIABLES # + #IN DIFFERENT SOURCES # + # beginning of optional checks - the process stops and reports as soon as one # + #check fails # + # + if(checks){ # + message(" -- Verifying the variables in the model") # + # + # check if the input object(s) is(are) defined in all the studies # + if(is.na(obj2lookfor)){ # + defined <- isDefined(datasources, varname) # + }else{ # + defined <- isDefined(datasources, obj2lookfor) # + } # + # + # call the internal function that checks the input object is suitable in all studies # + typ <- checkClass(datasources, x) # # the input object must be a vector or a list if(!('character' %in% typ) & !('factor' %in% typ) & !('integer' %in% typ) & !('logical' %in% typ) & !('numeric' %in% typ) & !('list' %in% typ)){ stop("The input object must be a character, factor, integer, logical or numeric vector or a list.", call.=FALSE) - } - - } + } # + } # + ############################################################################################### ################################################################################################### - # MODULE: EXTEND "type" argument to include "both" and enable valid alisases # + #MODULE 4: EXTEND "type" argument to include "both" and enable valid alisases # if(type == 'combine' | type == 'combined' | type == 'combines' | type == 'c') type <- 'combine' # if(type == 'split' | type == 'splits' | type == 's') type <- 'split' # if(type == 'both' | type == 'b' ) type <- 'both' # - if(type != 'combine' & type != 'split' & type != 'both'){ # + if(type != 'combine' & type != 'split' & type != 'both') # stop('Function argument "type" has to be either "both", "combine" or "split"', call.=FALSE) # - } - - # call the server-side function + # + #MODIFY FUNCTION CODE TO DEAL WITH ALL THREE TYPES # + ################################################################################################### + cally <- call("lengthDS", x) lengths <- DSI::datashield.aggregate(datasources, cally) diff --git a/R/ds.levels.R b/R/ds.levels.R index 1943ea0c..03124c87 100644 --- a/R/ds.levels.R +++ b/R/ds.levels.R @@ -56,7 +56,7 @@ #' #' } #' -ds.levels <- function(x=NULL, datasources=NULL){ +ds.levels <- function(x=NULL, datasources=NULL) { # look for DS connections if(is.null(datasources)){ @@ -72,8 +72,19 @@ ds.levels <- function(x=NULL, datasources=NULL){ stop("Please provide the name of the input vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) @@ -83,10 +94,8 @@ ds.levels <- function(x=NULL, datasources=NULL){ stop("The input object must be a factor.", call.=FALSE) } - # call the server-side function cally <- paste0("levelsDS(", x, ")") - output <- DSI::datashield.aggregate(datasources, as.symbol(cally)) + levels_all <- DSI::datashield.aggregate(datasources, as.symbol(cally)) - return(output) - + return(levels_all) } diff --git a/R/ds.lexis.R b/R/ds.lexis.R index d692a65d..05dd4140 100644 --- a/R/ds.lexis.R +++ b/R/ds.lexis.R @@ -227,8 +227,9 @@ ds.lexis<-function(data=NULL, intervalWidth=NULL, idCol=NULL, entryCol=NULL, exi stop("Please provide the name of the column that holds the exit times (i.e. end of follow up time)!", call.=FALSE) } + # if no valid value provided for 'intervalWidth' instruct user to specify one - if(any(is.null(intervalWidth))||any(is.na(intervalWidth))||any(intervalWidth==0)){ + if(is.null(intervalWidth)||is.na(intervalWidth)||intervalWidth==0){ stop("Please provide a (non-zero) single numeric value or vector to identify the survival time intervals", call.=FALSE) } @@ -237,18 +238,20 @@ ds.lexis<-function(data=NULL, intervalWidth=NULL, idCol=NULL, entryCol=NULL, exi expandDF <- "lexis.newobj" } - # FIRST CALL TO SERVER SIDE TO IDENTIFY THE MAXIMUM FOLLOW UP TIME IN ANY - # SOURCE. THE MAXIMUM I EACH SOURCE IS MASKED BY A RANDOM POSITIVE INCREMENT +#FIRST CALL TO SERVER SIDE TO IDENTIFY THE MAXIMUM FOLLOW UP TIME IN ANY +#SOURCE. THE MAXIMUM I EACH SOURCE IS MASKED BY A RANDOM POSITIVE INCREMENT calltext1 <- call("lexisDS1", exitCol) - maxtime <- DSI::datashield.aggregate(datasources, calltext1) - num.studies <- length(datasources) + maxtime<-DSI::datashield.aggregate(datasources, calltext1) + + num.studies<-length(datasources) for(ss in 1:num.studies){ - # print(maxtime[ss][[1]]$max.time) +# print(maxtime[ss][[1]]$max.time) + if(is.null(maxtime[ss][[1]]$max.time)){ - return(list(maxtime=maxtime)) - } + return(list(maxtime=maxtime)) + } } nummax<-length(maxtime) diff --git a/R/ds.list.R b/R/ds.list.R index 239399db..9d07de97 100644 --- a/R/ds.list.R +++ b/R/ds.list.R @@ -67,8 +67,21 @@ ds.list <- function(x=NULL, newobj=NULL, datasources=NULL){ stop("x=NULL. Please provide the names of the objects to coerce into a list!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$object) + # or just as a vector not attached to a table (i.e. object) + # we have to make sure the function deals with each case + xnames <- extract(x) + varnames <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } # call the internal function that checks the input object(s) is(are) of the same class in all studies. for(i in 1:length(x)){ @@ -79,10 +92,6 @@ ds.list <- function(x=NULL, newobj=NULL, datasources=NULL){ if(is.null(newobj)){ newobj <- "list.newobj" } - - # get the variable names - xnames <- extract(x) - varnames <- xnames$elements # get the names of the list elements if the user has not specified any if(is.null(names)){ diff --git a/R/ds.lmerSLMA.R b/R/ds.lmerSLMA.R index af57b8e5..f86fe634 100644 --- a/R/ds.lmerSLMA.R +++ b/R/ds.lmerSLMA.R @@ -124,7 +124,7 @@ #' @return \code{ds.lmerSLMA} returns a list of elements mentioned #' below separately for each study. #' @return \code{coefficients}: a matrix with 5 columns: -#' \describe{ +#' \itemize{ #' \item{First}{: the names of all of the regression parameters (coefficients) in the model} #' \item{second}{: the estimated values} #' \item{third}{: corresponding standard errors of the estimated values} @@ -302,9 +302,7 @@ ds.lmerSLMA <- function(formula=NULL, offset=NULL, weights=NULL, combine.with.me newobj <- "new.lmer.obj" } - if (notify.of.progress) { - cat("\n\nSAVING SERVERSIDE lmerMod OBJECT AS: <",newobj,">\n\n") - } + cat("\n\nSAVING SERVERSIDE lmerMod OBJECT AS: <",newobj,">\n\n") calltext.2 <- call('lmerSLMADS.assign', formula, offset, weights, dataName, REML, control_type, control_value.transmit, optimizer, verbose) diff --git a/R/ds.log.R b/R/ds.log.R index faed3f10..56ef6691 100644 --- a/R/ds.log.R +++ b/R/ds.log.R @@ -71,8 +71,19 @@ ds.log <- function(x=NULL, base=exp(1), newobj=NULL, datasources=NULL){ stop("Please provide the name of the input vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) diff --git a/R/ds.ls.R b/R/ds.ls.R index 8cfbf3ca..f540097b 100644 --- a/R/ds.ls.R +++ b/R/ds.ls.R @@ -127,20 +127,24 @@ ds.ls <- function(search.filter=NULL, env.to.search=1L, search.GlobalEnv=TRUE, d stop("The 'datasources' were expected to be a list of DSConnection-class objects", call.=FALSE) } - # make default to .GlobalEnv unambiguous - if(search.GlobalEnv||is.null(env.to.search)){ - env.to.search<-1L - } +#make default to .GlobalEnv unambiguous + +if(search.GlobalEnv||is.null(env.to.search)) +{ +env.to.search<-1L +} + + - # make code compatible with ds.passParser - transmit.object <- search.filter - transmit.object.temp1 <- NULL +#make code compatible with ds.passParser +transmit.object<-search.filter +transmit.object.temp1<-NULL - # set up character replacement - input.string<-"*" - replacement.string<-"_:A:_" - replacement.string.split<-unlist(strsplit(replacement.string,split="")) - length.rs<-length(replacement.string.split) +#set up character replacement +input.string<-"*" +replacement.string<-"_:A:_" +replacement.string.split<-unlist(strsplit(replacement.string,split="")) +length.rs<-length(replacement.string.split) #Search for *s in code and convert to transmittable code if(!is.null(transmit.object)) @@ -186,14 +190,17 @@ if(!is.null(transmit.object)) transmit.object.final<-paste(transmit.object.temp1,collapse="") }else{ - transmit.object.final<-NULL + transmit.object.final<-NULL } + # call the server side function - calltext <- call("lsDS", search.filter=transmit.object.final, env.to.search) + calltext <- call("lsDS",search.filter=transmit.object.final, env.to.search) + output <- datashield.aggregate(datasources, calltext) return(output) - -} + } #ds.ls + + diff --git a/R/ds.lspline.R b/R/ds.lspline.R deleted file mode 100644 index 5c5cee79..00000000 --- a/R/ds.lspline.R +++ /dev/null @@ -1,57 +0,0 @@ -#' -#' @title Basis for a piecewise linear spline with meaningful coefficients -#' @description This function is based on the native R function \code{lspline} from the -#' \code{lspline} package. This function computes the basis of piecewise-linear spline -#' such that, depending on the argument marginal, the coefficients can be interpreted as -#' (1) slopes of consecutive spline segments, or (2) slope change at consecutive knots. -#' @details If marginal is FALSE (default) the coefficients of the spline correspond to -#' slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -#' the slope of the first segment. The consecutive coefficients correspond to the change -#' in slope as compared to the previous segment. -#' @param x the name of the input numeric variable -#' @param knots numeric vector of knot positions -#' @param marginal logical, how to parametrize the spline, see Details -#' @param names character, vector of names for constructed variables -#' @param newobj a character string that provides the name for the output -#' variable that is stored on the data servers. Default \code{lspline.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @return an object of class "lspline" and "matrix", which its name is specified by the -#' \code{newobj} argument (or its default name "lspline.newobj"), is assigned on the serverside. -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.lspline <- function(x, knots = NULL, marginal = FALSE, names = NULL, newobj = NULL, 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 the input variable x!", call.=FALSE) - } - - # check if the input object is defined in all the studies - defined <- isDefined(datasources, x) - - if(is.null(knots)){ - stop("Please provide a vector of knots!", call.=FALSE) - } - - # create a name by default if user did not provide a name for the new variable - if(is.null(newobj)){ - newobj <- "lspline.newobj" - } - - # now do the business - calltext <- call("lsplineDS", x, knots, marginal, names) - DSI::datashield.assign(datasources, newobj, calltext) - -} \ No newline at end of file diff --git a/R/ds.make.R b/R/ds.make.R index eb341d8e..1b126126 100644 --- a/R/ds.make.R +++ b/R/ds.make.R @@ -184,7 +184,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.matrix.R b/R/ds.matrix.R index d2e8f611..fa3c578f 100644 --- a/R/ds.matrix.R +++ b/R/ds.matrix.R @@ -143,9 +143,9 @@ #' } #' #' @export -#' -ds.matrix <- function(mdata = NA, from="clientside.scalar", nrows.scalar=NULL, ncols.scalar=NULL, byrow = FALSE, - dimnames = NULL, newobj=NULL, datasources=NULL){ +ds.matrix<-function(mdata = NA, from="clientside.scalar",nrows.scalar=NULL, ncols.scalar=NULL, byrow = FALSE, + dimnames = NULL, newobj=NULL, datasources=NULL){ + # look for DS connections if(is.null(datasources)){ @@ -163,7 +163,8 @@ ds.matrix <- function(mdata = NA, from="clientside.scalar", nrows.scalar=NULL, n } # if no value spcified for output object, then specify a default - if(is.null(newobj)){ + if(is.null(newobj)) + { newobj <- "matrix.newobj" } @@ -176,12 +177,15 @@ ds.matrix <- function(mdata = NA, from="clientside.scalar", nrows.scalar=NULL, n return('Please respecify') } - if(from=="serverside.vector"||from=="serverside.scalar"){ - mdata.transmit <- mdata + if(from=="serverside.vector"||from=="serverside.scalar") + { + mdata.transmit<-mdata } - if(from=="clientside.scalar"){ - mdata.transmit <- paste0(as.character(mdata), collapse=",") + + if(from=="clientside.scalar") + { + mdata.transmit<-paste0(as.character(mdata),collapse=",") } #process and to make transmittable depending on specified from @@ -236,7 +240,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.matrixDet.R b/R/ds.matrixDet.R index 90ac58cf..66490205 100644 --- a/R/ds.matrixDet.R +++ b/R/ds.matrixDet.R @@ -5,7 +5,8 @@ #' possible if the number of columns and rows of the matrix are the same. #' #' @details Calculates the determinant of a square matrix on the server-side. -#' This function is similar to the native R \code{determinant} function. +#' This function is similar to the native R \code{determinant} function. +#' #' #' Server function called: \code{matrixDetDS2} #' @param M1 a character string specifying the name of the matrix. @@ -97,24 +98,25 @@ ds.matrixDet<-function(M1=NULL, newobj=NULL, logarithm=FALSE, datasources=NULL){ if(is.null(M1)){ return("Error: Please provide the name of the matrix representing M1") } - - # check if the input object is defined in all the studies - isDefined(datasources, M1) # if no value or invalid value specified for logarithm, then specify a default - if(is.null(logarithm)){ - logarithm<-FALSE + if(is.null(logarithm)) + { + logarithm<-FALSE } - if(logarithm!=TRUE){ - logarithm<-FALSE + if(logarithm!=TRUE) + { + logarithm<-FALSE } + # if no value specified for output object, then specify a default if(is.null(newobj)){ newobj <- "matrixdet.newobj" } + # CALL THE MAIN SERVER SIDE ASSIGN FUNCTION calltext <- call("matrixDetDS2", M1, logarithm) DSI::datashield.assign(datasources, newobj, calltext) @@ -147,7 +149,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.matrixDiag.R b/R/ds.matrixDiag.R index 9c9ec6e9..1a283ce1 100644 --- a/R/ds.matrixDiag.R +++ b/R/ds.matrixDiag.R @@ -263,7 +263,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.matrixDimnames.R b/R/ds.matrixDimnames.R index d8376210..79f4fedb 100644 --- a/R/ds.matrixDimnames.R +++ b/R/ds.matrixDimnames.R @@ -138,7 +138,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.matrixInvert.R b/R/ds.matrixInvert.R index f7745ebb..1d354956 100644 --- a/R/ds.matrixInvert.R +++ b/R/ds.matrixInvert.R @@ -133,7 +133,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.matrixMult.R b/R/ds.matrixMult.R index 89ce42ab..835c51cf 100644 --- a/R/ds.matrixMult.R +++ b/R/ds.matrixMult.R @@ -157,7 +157,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.matrixTranspose.R b/R/ds.matrixTranspose.R index 46556d46..5548524a 100644 --- a/R/ds.matrixTranspose.R +++ b/R/ds.matrixTranspose.R @@ -136,7 +136,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.mean.R b/R/ds.mean.R index e26ef636..4503fe6a 100644 --- a/R/ds.mean.R +++ b/R/ds.mean.R @@ -102,43 +102,68 @@ #' ds.mean <- function(x=NULL, type='split', checks=FALSE, save.mean.Nvalid=FALSE, 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 the input object!", call.=FALSE) - } - - # beginning of optional checks - the process stops and reports as soon as one check fails # - if(checks){ - - # check if the input object is defined in all the studies - isDefined(datasources, x) - - # call the internal function that checks the input object is of the same class in all studies. - typ <- checkClass(datasources, x) - - # the input object must be a numeric or an integer vector - if(!('integer' %in% typ) & !('numeric' %in% typ)){ - stop("The input object must be an integer or a numeric vector.", call.=FALSE) - } -} +################################################################################################################### +#MODULE 1: IDENTIFY DEFAULT DS CONNECTIONS # + # 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) # + } # +################################################################################################################### + +##################################################################################### +#MODULE 2: SET UP KEY VARIABLES ALLOWING FOR DIFFERENT INPUT FORMATS # + if(is.null(x)){ # + stop("Please provide the name of the input vector!", call.=FALSE) # + } # + # the input variable might be given as a variable in a data frame (i.e. D$x) # + # or just as a vector not attached to a table (i.e. x) # + # we have to make sure the function deals with each case # + xnames <- extract(x) # + varname <- xnames$elements # + obj2lookfor <- xnames$holders # +##################################################################################### + +############################################################################################### +#MODULE 3: GENERIC OPTIONAL CHECKS TO ENSURE CONSISTENT STRUCTURE OF KEY VARIABLES # +#IN DIFFERENT SOURCES # + # beginning of optional checks - the process stops and reports as soon as one # + #check fails # + # + if(checks){ # + message(" -- Verifying the variables in the model") # + # + # check if the input object(s) is(are) defined in all the studies # + if(is.na(obj2lookfor)){ # + defined <- isDefined(datasources, varname) # + }else{ # + defined <- isDefined(datasources, obj2lookfor) # + } # + # + # call the internal function that checks the input object is suitable in all studies # + varClass <- checkClass(datasources, x) # + # the input object must be a numeric or an integer vector # + if(!('integer' %in% varClass) & !('numeric' %in% varClass)){ # + stop("The input object must be an integer or a numeric vector.", call.=FALSE) # + } # +} # +############################################################################################### ################################################################################################### -#MODULE: EXTEND "type" argument to include "both" and enable valid alisases # +#MODULE 4: EXTEND "type" argument to include "both" and enable valid alisases # if(type == 'combine' | type == 'combined' | type == 'combines' | type == 'c') type <- 'combine' # if(type == 'split' | type == 'splits' | type == 's') type <- 'split' # if(type == 'both' | type == 'b' ) type <- 'both' # -if(type != 'combine' & type != 'split' & type != 'both'){ # +if(type != 'combine' & type != 'split' & type != 'both') # stop('Function argument "type" has to be either "both", "combine" or "split"', call.=FALSE) # -} + # +#MODIFY FUNCTION CODE TO DEAL WITH ALL THREE TYPES # +################################################################################################### + cally <- paste0("meanDS(", x, ")") ss.obj <- DSI::datashield.aggregate(datasources, as.symbol(cally)) diff --git a/R/ds.meanSdGp.R b/R/ds.meanSdGp.R index 14a3fb91..eb90441d 100644 --- a/R/ds.meanSdGp.R +++ b/R/ds.meanSdGp.R @@ -6,6 +6,7 @@ #' and the standard error of the mean (SEM) of a continuous variable broken down into subgroups #' defined by a single factor. #' + #' There are important differences between \code{ds.meanSdGp} function compared to #' the function \code{ds.meanByClass}: #' @@ -146,12 +147,31 @@ ds.meanSdGp <- function(x=NULL, y=NULL, type='both', do.checks=FALSE, datasource stop("Please provide the name of the input vector!", call.=FALSE) } - if(do.checks){ + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + ynames <- extract(y) + xvarname <- xnames$elements + yvarname <- ynames$elements + xobj2lookfor <- xnames$holders + yobj2lookfor <- ynames$holders + xvariable <- xvarname + yvariable <- yvarname - # check if the input objects are defined in all the studies - isDefined(datasources, x) - isDefined(datasources, y) - + if(do.checks) + { + # check if the input object(s) is(are) defined in all the studies + if(is.na(xobj2lookfor)){ + defined <- isDefined(datasources, xvarname) + }else{ + defined <- isDefined(datasources, xobj2lookfor) + } + if(is.na(yobj2lookfor)){ + defined <- isDefined(datasources, yvarname) + }else{ + defined <- isDefined(datasources, yobj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ1 <- checkClass(datasources, x) typ2 <- checkClass(datasources, y) @@ -159,15 +179,9 @@ ds.meanSdGp <- function(x=NULL, y=NULL, type='both', do.checks=FALSE, datasource # names of the studies stdnames <- names(datasources) - - # variable names - xnames <- extract(x) - ynames <- extract(y) - xvarname <- xnames$elements - yvarname <- ynames$elements - # call the server side function that calculates mean and standard deviation - # by group in each study + # call the server side function that calculates mean and DS by group in each study + calltext <- paste0("meanSdGpDS(", x, ",", y, ")") output <- DSI::datashield.aggregate(datasources, as.symbol(calltext)) diff --git a/R/ds.merge.R b/R/ds.merge.R index ae7d9f00..be2ad7ad 100644 --- a/R/ds.merge.R +++ b/R/ds.merge.R @@ -134,10 +134,6 @@ ds.merge <- function(x.name=NULL,y.name=NULL, by.x.names=NULL, by.y.names=NULL,a if(is.null(y.name)){ stop("Please provide the name (eg 'name2') of second dataframe to be merged (called y) ", call.=FALSE) } - - # check if the input objects are defined in all the studies - isDefined(datasources, x.name) - isDefined(datasources, y.name) # names of columns to merge on (may be more than one) if(is.null(by.x.names)){ @@ -154,7 +150,7 @@ ds.merge <- function(x.name=NULL,y.name=NULL, by.x.names=NULL, by.y.names=NULL,a # suffixes if(is.null(suffixes)){ - stop("Please provide the suffixes to append to disambiguate duplicate column names (default = c('.x','.y'))", call.=FALSE) + stop("Please provide the suffixes to append to disambiguate duplicate column names (default = c('.x','.y/))", call.=FALSE) } # make transmittable via parser @@ -195,7 +191,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.metadata.R b/R/ds.metadata.R deleted file mode 100644 index 214bde6a..00000000 --- a/R/ds.metadata.R +++ /dev/null @@ -1,96 +0,0 @@ -#' -#' @title Gets the metadata associated with a variable held on the server -#' @description This function gets the metadata of a variable -#' stored on the server. -#' @details -#' Server function \code{metadataDS} is called examines the attributes associated with the variable -#' which are non-disclosive. -#' @param x a character string specifying the name of the object. -#' @param datasources a list of \code{\link{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}}. -#' @return \code{ds.metadata} returns to the client-side the metadata of associated to an object -#' held at the server. -#' @author Stuart Wheater, DataSHIELD Development Team -#' @export -#' @examples -#' \dontrun{ -#' -#' # 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") -#' builder$append(server = "study3", -#' url = "http://192.168.56.100:8080/", -#' user = "administrator", password = "datashield_test&", -#' table = "CNSIM.CNSIM3", driver = "OpalDriver") -#' logindata <- builder$build() -#' -#' connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") -#' -#' # Example 1: Get the metadata associated with variable 'D' -#' ds.metadata(x = 'D$LAB_TSC', datasources = connections) -#' -#' # clear the Datashield R sessions and logout -#' DSI::datashield.logout(connections) -#' } -#' -ds.metadata = function(x=NULL, datasources=NULL) -{ - - ##################################################################################### - #MODULE 1: IDENTIFY DEFAULT CONNECTIONS # - # look for DS connections # - if (is.null(datasources)){ # - datasources <- datashield.connections_find() # - } # - ##################################################################################### - - ############################################################################################################### - #MODULE 2: ENSURE CORRECT DATASOURCES # - # 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) # - } # - ############################################################################################################### - - ##################################################################################### - #MODULE 3: SET UP KEY VARIABLES ALLOWING FOR DIFFERENT INPUT FORMATS # - if (is.null(x)){ # - stop("Please provide the name of the object!", call.=FALSE) # - } # - ##################################################################################### - - ##################################################################################### - #MODULE 4: CHECK CONSISTANCY OF VARIABLE NAME (SINGLE) # - if ((! is.character(x)) || (length(x) != 1)){ # - stop("Please provide the name of the object!", call.=FALSE) # - } # - ##################################################################################### - - ##################################################################################### - #MODULE 5: CHECK ALL SERVICES HAVE SPECIFIED VARIABLES DEFINED # - defined = all(unlist(isDefined(datasources, x))) # - if (! defined){ # - stop("Variable not defined in all servers", call.=FALSE) # - } # - ##################################################################################### - - cally <- call("metadataDS", x) - metadatas <- DSI::datashield.aggregate(datasources, cally) - - return(metadatas) - -} -#ds.metadata diff --git a/R/ds.mice.R b/R/ds.mice.R deleted file mode 100644 index f5e84f72..00000000 --- a/R/ds.mice.R +++ /dev/null @@ -1,108 +0,0 @@ -#' -#' @title Multivariate Imputation by Chained Equations -#' @description This function calls the miceDS that is a wrapper function of the mice -#' from the mice R package. The function creates multiple imputations (replacement values) -#' for multivariate missing data. The method is based on Fully Conditional Specification, -#' where each incomplete variable is imputed by a separate model. The MICE algorithm can -#' impute mixes of continuous, binary, unordered categorical and ordered categorical data. -#' In addition, MICE can impute continuous two-level data, and maintain consistency between -#' imputations by means of passive imputation. It is recommended that the imputation is -#' done in each datasource separately. Otherwise the user should make sure that the input -#' data have the same columns in all datasources and in the same order. -#' @details For additional details see the help header of mice function in native R mice -#' package. -#' @param data a data frame or a matrix containing the incomplete data. -#' @param m Number of multiple imputations. The default is m=5. -#' @param maxit A scalar giving the number of iterations. The default is 5. -#' @param method Can be either a single string, or a vector of strings with length -#' ncol(data), specifying the imputation method to be used for each column in data. If -#' specified as a single string, the same method will be used for all blocks. The default -#' imputation method (when no argument is specified) depends on the measurement level of -#' the target column, as regulated by the defaultMethod argument in native R mice function. -#' Columns that need not be imputed have the empty method "". -#' @param predictorMatrix A numeric matrix of ncol(data) rows and ncol(data) columns, -#' containing 0/1 data specifying the set of predictors to be used for each target column. -#' Each row corresponds to a variable to be imputed. A value of 1 means that the column -#' variable is used as a predictor for the target variables (in the rows). By default, the -#' predictorMatrix is a square matrix of ncol(data) rows and columns with all 1's, except -#' for the diagonal. -#' @param post A vector of strings with length ncol(data) specifying expressions as strings. -#' Each string is parsed and executed within the sampler() function to post-process imputed -#' values during the iterations. The default is a vector of empty strings, indicating no -#' post-processing. Multivariate (block) imputation methods ignore the post parameter. -#' @param seed either NA (default) or "fixed". If seed is set to "fixed" then a fixed -#' seed random number generator which is study-specific is used. -#' @param newobj_mids a character string that provides the name for the output mids object -#' that is stored on the data servers. Default \code{mids_object}. -#' @param newobj_df a character string that provides the name for the output dataframes -#' that are stored on the data servers. Default \code{imputationSet}. For example, if m=5, and -#' newobj_df="imputationSet", then five imputed dataframes are saved on the servers with names -#' imputationSet.1, imputationSet.2, imputationSet.3, imputationSet.4, imputationSet.5. -#' @param datasources a list of \code{\link{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}}. -#' @return a list with three elements: the method, the predictorMatrix and the post. -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.mice <- function(data=NULL, m=5, maxit=5, method=NULL, predictorMatrix=NULL, post=NULL, - seed=NA, newobj_mids=NULL, newobj_df=NULL, datasources=NULL){ - - # look for DS connections - if(is.null(datasources)){ - datasources <- DSI::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) - } - - # verify that 'data' was set - if(is.null(data)){ - stop("Please provide the name of the dataframe or matrix that contains the incomplete data!", call.=FALSE) - } - - # check if the 'data' are defined in all the studies - defined.data <- isDefined(datasources, data) - - if(!is.null(method)){ - method <- paste0(as.character(method), collapse=",") - } - - if(!is.null(post)){ - post <- gsub("[", "left_square_bracket", post, fixed = TRUE) - post <- gsub("]", "right_square_bracket", post, fixed = TRUE) - post <- gsub("<-", "equalR_symbol", post, fixed = TRUE) - post <- gsub("=", "equal_symbol", post, fixed = TRUE) - post <- gsub("(", "left_parenthesis", post, fixed = TRUE) - post <- gsub(")", "right_parenthesis", post, fixed = TRUE) - post <- gsub(",", "comma_symbol", post, fixed = TRUE) - post <- gsub(" ", "", post, fixed = TRUE) - post <- paste0(as.character(post), collapse="separ_comma") - } - - if(is.matrix(predictorMatrix)){ - ncol.pred.mat <- ncol(predictorMatrix) - predictorMatrix <- paste0(as.character(predictorMatrix), collapse=",") - }else{ - ncol.pred.mat <- NULL - } - - if(is.null(newobj_mids)){ - newobj_mids <- 'mids_object' - } - - if(is.null(newobj_df)){ - newobj_df <- 'imputationSet' - } - - calltext <- call('miceDS', data=data, m=m, maxit=maxit, method=method, post=post, seed=seed, - predictorMatrix=predictorMatrix, ncol.pred.mat=ncol.pred.mat, - newobj_mids=newobj_mids, newobj_df=newobj_df) - study.summary <- DSI::datashield.aggregate(datasources, calltext) - - return(study.summary) - -} - diff --git a/R/ds.names.R b/R/ds.names.R index 59af0990..e97e48a8 100644 --- a/R/ds.names.R +++ b/R/ds.names.R @@ -6,7 +6,7 @@ #' for example, it only works to extract names that already exist, #' not to create new names for objects. The function is restricted to objects of #' type list, but this includes objects that have a primary class other than list but which -#' return TRUE to the native R function \code{is.list}. As an example this includes +#' return TRUE to the native R function {is.list}. As an example this includes #' the multi-component object created by fitting a generalized linear model #' using ds.glmSLMA. The resultant object saved on each server separately #' is formally of class "glm" and "ls" but responds TRUE to is.list(), @@ -81,12 +81,10 @@ ds.names <- function(xname=NULL, datasources=NULL){ if(is.null(xname)){ stop("Please provide the name of the input list!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, xname) - calltext <- call("namesDS", xname) - output <- datashield.aggregate(datasources, calltext) + calltext<-call("namesDS", xname) + output<-datashield.aggregate(datasources,calltext) return(output) } + #ds.names diff --git a/R/ds.ns.R b/R/ds.ns.R deleted file mode 100644 index cc11be6a..00000000 --- a/R/ds.ns.R +++ /dev/null @@ -1,57 +0,0 @@ -#' -#' @title Generate a Basis Matrix for Natural Cubic Splines -#' @description This function is based on the native R function \code{ns} from the -#' \code{splines} package. This function generate the B-spline basis matrix for a natural -#' cubic spline. -#' @details \code{ns} is native R is based on the function \code{splineDesign}. It generates -#' a basis matrix for representing the family of piecewise-cubic splines with the specified -#' sequence of interior knots, and the natural boundary conditions. These enforce the constraint -#' that the function is linear beyond the boundary knots, which can either be supplied or default -#' to the extremes of the data. -#' A primary use is in modeling formula to directly specify a natural spline term in a model. -#' @param x the predictor variable. Missing values are allowed. -#' @param df degrees of freedom. One can supply df rather than knots; ns() then chooses -#' df - 1 - intercept knots at suitably chosen quantiles of x (which will ignore missing values). -#' The default, df = NULL, sets the number of inner knots as length(knots). -#' @param knots breakpoints that define the spline. The default is no knots; together with the -#' natural boundary conditions this results in a basis for linear regression on x. Typical values -#' are the mean or median for one knot, quantiles for more knots. See also Boundary.knots. -#' @param intercept if TRUE, an intercept is included in the basis; default is FALSE. -#' @param Boundary.knots boundary points at which to impose the natural boundary conditions and -#' anchor the B-spline basis (default the range of the data). If both knots and Boundary.knots -#' are supplied, the basis parameters do not depend on x. Data can extend beyond Boundary.knots. -#' @param newobj a character string that provides the name for the output -#' variable that is stored on the data servers. Default \code{ns.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @return A matrix of dimension length(x) * df where either df was supplied or if knots were -#' supplied, df = length(knots) + 1 + intercept. Attributes are returned that correspond to the -#' arguments to ns, and explicitly give the knots, Boundary.knots etc for use by predict.ns(). -#' The object is assigned at each serverside. -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.ns <- function(x, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = NULL, - newobj=NULL, 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) - } - - # create a name by default if user did not provide a name for the new variable - if(is.null(newobj)){ - newobj <- "ns.newobj" - } - - # now do the business - calltext <- call("nsDS", x, df, knots, intercept, Boundary.knots) - DSI::datashield.assign(datasources, newobj, calltext) - -} \ No newline at end of file diff --git a/R/ds.numNA.R b/R/ds.numNA.R index c1757c87..8460f3e1 100644 --- a/R/ds.numNA.R +++ b/R/ds.numNA.R @@ -52,7 +52,7 @@ #' #' } #' -ds.numNA <- function(x=NULL, datasources=NULL){ +ds.numNA <- function(x=NULL, datasources=NULL) { # look for DS connections if(is.null(datasources)){ @@ -68,11 +68,13 @@ ds.numNA <- function(x=NULL, datasources=NULL){ stop("Please provide the name of a vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) - - # call the internal function that checks the input object is of the same class in all studies. - typ <- checkClass(datasources, x) + # check if the input object(s) is(are) defined in all the studies + inputElts <- extract(x) + if(is.na(inputElts[[1]])){ + defined <- isDefined(datasources, inputElts[[2]]) + }else{ + defined <- isDefined(datasources, inputElts[[1]]) + } # call the server side function cally <- paste0("numNaDS(", x, ")") diff --git a/R/ds.qlspline.R b/R/ds.qlspline.R deleted file mode 100644 index 0302ccc4..00000000 --- a/R/ds.qlspline.R +++ /dev/null @@ -1,65 +0,0 @@ -#' -#' @title Basis for a piecewise linear spline with meaningful coefficients -#' @description This function is based on the native R function \code{qlspline} from the -#' \code{lspline} package. This function computes the basis of piecewise-linear spline -#' such that, depending on the argument marginal, the coefficients can be interpreted as -#' (1) slopes of consecutive spline segments, or (2) slope change at consecutive knots. -#' @details If marginal is FALSE (default) the coefficients of the spline correspond to -#' slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -#' the slope of the first segment. The consecutive coefficients correspond to the change -#' in slope as compared to the previous segment. -#' Function qlspline wraps lspline and calculates the knot positions to be at quantiles -#' of x. If q is a numerical scalar greater or equal to 2, the quantiles are computed at -#' seq(0, 1, length.out = q + 1)[-c(1, q+1)], i.e. knots are at q-tiles of the distribution -#' of x. Alternatively, q can be a vector of values in [0; 1] specifying the quantile -#' probabilities directly (the vector is passed to argument probs of quantile). -#' @param x the name of the input numeric variable -#' @param q numeric, a single scalar greater or equal to 2 for a number of equal-frequency -#' intervals along x or a vector of numbers in (0; 1) specifying the quantiles explicitly. -#' @param na.rm logical, whether NA should be removed when calculating quantiles, passed -#' to na.rm of quantile. Default set to TRUE -#' @param marginal logical, how to parametrize the spline, see Details -#' @param names character, vector of names for constructed variables -#' @param newobj a character string that provides the name for the output -#' variable that is stored on the data servers. Default \code{qlspline.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @return an object of class "lspline" and "matrix", which its name is specified by the -#' \code{newobj} argument (or its default name "qlspline.newobj"), is assigned on the serverside. -#' @author Demetris Avraam for DataSHIELD Development Team -#' @export -#' -ds.qlspline <- function(x, q, na.rm = TRUE, marginal = FALSE, names = NULL, newobj = NULL, 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 the input variable x!", call.=FALSE) - } - - # check if the input object is defined in all the studies - defined <- isDefined(datasources, x) - - if(is.null(q)){ - stop("Argument 'q' is missing, with no default!", call.=FALSE) - } - - # create a name by default if user did not provide a name for the new variable - if(is.null(newobj)){ - newobj <- "qlspline.newobj" - } - - # now do the business - calltext <- call("qlsplineDS", x, q, na.rm, marginal, names) - DSI::datashield.assign(datasources, newobj, calltext) - -} \ No newline at end of file diff --git a/R/ds.quantileMean.R b/R/ds.quantileMean.R index 43e32696..ef326cda 100644 --- a/R/ds.quantileMean.R +++ b/R/ds.quantileMean.R @@ -81,12 +81,19 @@ ds.quantileMean <- function(x=NULL, type='combine', datasources=NULL){ stop("Please provide the name of the input vector!", call.=FALSE) } - if (! all(type %in% c("combine", "split"))) { - stop('Function argument "type" has to be either "combine" or "split"', call.=FALSE) - } + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders - # check if the input object is defined in all the studies - isDefined(datasources, x) + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) @@ -105,7 +112,7 @@ ds.quantileMean <- function(x=NULL, type='combine', datasources=NULL){ cally2 <- call('lengthDS', x) lengths <- DSI::datashield.aggregate(datasources, cally2) cally3 <- paste0("numNaDS(", x, ")") - numNAs <- DSI::datashield.aggregate(datasources, as.symbol(cally3)) + numNAs <- DSI::datashield.aggregate(datasources, cally3) global.quantiles <- rep(0, length(quants[[1]])-1) global.mean <- 0 for(i in 1: length(datasources)){ @@ -126,7 +133,7 @@ ds.quantileMean <- function(x=NULL, type='combine', datasources=NULL){ if(type=="split"){ return(quants) }else{ - stop('Function argument "type" has to be either "combine" or "split"', call.=FALSE) + stop('Function argument "type" has to be either "combine" or "split"') } } } diff --git a/R/ds.rBinom.R b/R/ds.rBinom.R index be5d9220..b7b0127a 100644 --- a/R/ds.rBinom.R +++ b/R/ds.rBinom.R @@ -271,7 +271,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.rNorm.R b/R/ds.rNorm.R index 0f53ab92..d8d9fa98 100644 --- a/R/ds.rNorm.R +++ b/R/ds.rNorm.R @@ -274,7 +274,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.rPois.R b/R/ds.rPois.R index 5fc262ff..11f83e64 100644 --- a/R/ds.rPois.R +++ b/R/ds.rPois.R @@ -247,7 +247,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.rUnif.R b/R/ds.rUnif.R index 42691488..e8570e74 100644 --- a/R/ds.rUnif.R +++ b/R/ds.rUnif.R @@ -285,7 +285,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.ranksSecure.R b/R/ds.ranksSecure.R deleted file mode 100644 index 5a3affca..00000000 --- a/R/ds.ranksSecure.R +++ /dev/null @@ -1,588 +0,0 @@ -# ds.ranksSecure -#' @title Secure ranking of a vector across all sources -#' @description Securely generate the ranks of a numeric vector and estimate -#' true qlobal quantiles across all data sources simultaneously -#' @details ds.ranksSecure is a clientside function which calls a series of -#' other clientside and serverside functions to securely generate the global -#' ranks of a numeric vector "V2BR" (vector to be ranked) -#' in order to set up analyses on V2BR based on -#' non-parametric methods, some types of survival analysis and to derive true -#' global quantiles (such as the median, lower (25%) and upper (75%) quartiles, -#' and the 95% and 97.5% quantiles) across all sources simultaneously. These -#' global quantiles are, in general, different to the mean or median of the -#' equivalent quantiles calculated independently in each data source separately. -#' For more details about the cluster of functions that collectively -#' enable secure global ranking and estimation of global quantiles see the -#' associated document entitled "secure.global.ranking.docx". -#' @param input.var.name a character string in a format that can pass through -#' the DataSHIELD R parser which specifies the name of the vector to be ranked. -#' Needs to have same name in each data source. -#' @param quantiles.for.estimation one of a restricted set of character strings. -#' To mitigate disclosure risk only the following set of quantiles can be -#' generated: c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50,0.60,0.6667, -#' 0.70,0.75,0.80,0.90,0.95,0.975). The allowable formats for the argument -#' are of the general form: "0.025-0.975" where the first number is the lowest -#' quantile to be estimated and the second number is the equivalent highest -#' quantile to estimate. These two quantiles are then estimated along with -#' all allowable quantiles in between. The allowable argument values are then: -#' "0.025-0.975", "0.05-0.95", "0.10-0.90", "0.20-0.80". Two alternative values -#' are "quartiles" i.e. c(0.25,0.50,0.75), and "median" i.e. c(0.50). The -#' default value is "0.05-0.95". If the sample size is so small that an extreme -#' quartile could be disclosive the function will be terminated and an error -#' message returned telling you that you might try using an argument with a -#' narrower set of quantiles. This disclosure trap will be triggered if the -#' total number of subjects across all studies divided by the total number -#' of quantile values being estimated is less than or equal to nfilter.tab -#' (the minimum cell size in a contingency table). -#' @param generate.quantiles a logical value indicating whether the -#' ds.ranksSecure function should carry on to estimate the key quantile -#' values specified by argument or should stop -#' once the global ranks have been created and written to the serverside. -#' Default is TRUE and as the key quantiles are generally non-disclosive this -#' is usually the setting to use. But, if there is some abnormal configuration -#' of the clusters of values that are being ranked such that some values are -#' treated as being missing and the processing stops, then setting -#' generate.quantiles to FALSE allows the generation of ranks to complete so -#' they can then be used for non-parameteric analysis, even if the key values -#' cannot be estimated. A real example of an unusual configuration was in a -#' reasonably large dataset of survival times, where a substantial proportion -#' of survival profiles were censored at precisely 10 years. This meant that -#' the 97.5% percentile could not be separated from the 95% percentile and so -#' the former was allocated the value NA. This stopped processing of the ranks -#' which could then be enabled by setting generate.quantiles to FALSE. However, -#' if this problem is detected an error message is returned which indicates that -#' in some cases (as in this case in fact) the problem can be circumvented -#' by selecting a narrow range of key quantiles to estimate. In this case, in -#' fact, this simply required changing the argument -#' from "0.025-0.975" to "0.05-0.95". -#' @param output.ranks.df a character string in a format that can pass through -#' the DataSHIELD R parser which specifies an optional name for the -#' data.frame written to the serverside on each data source that contains -#' 11 of the key output variables from the ranking procedure pertaining to that -#' particular data source. This includes the global ranks and quantiles of each -#' value of the V2BR (i.e. the values are ranked across all studies -#' simultaneously). If no name is specified, the default name -#' is allocated as "full.ranks.df". This data.frame contains disclosive -#' information and cannot therefore be passed to the clientside. -#' @param summary.output.ranks.df a character string in a format that can pass through -#' the DataSHIELD R parser which specifies an optional name for the summary -#' data.frame written to the serverside on each data source that contains -#' 5 of the key output variables from the ranking procedure pertaining to that -#' particular data source. This again includes the global ranks and quantiles of each -#' value of the V2BR (i.e. the values are ranked across all studies -#' simultaneously). If no name is specified, the default name -#' is allocated as "summary.ranks.df" This data.frame contains disclosive -#' information and cannot therefore be passed to the clientside. -#' @param ranks.sort.by a character string taking two possible values. These -#' are "ID.orig" and "vals.orig". These define the order in which the -#' output.ranks.df and summary.output.ranks.df data frames are presented. If -#' the argument is set as "ID.orig" the order of rows in the output data frames -#' are precisely the same as the order of original input vector that is being -#' ranked (i.e. V2BR). This means the ranks can simply be cbinded to the -#' matrix, data frame or tibble that originally included V2BR so it also -#' includes the corresponding ranks. If it is set as "vals.orig" the output -#' data frames are in order of increasing magnitude of the original values of -#' V2BR. Default value is "ID.orig". -#' @param shared.seed.value an integer value which is used to set the -#' random seed generator in each study. Initially, the seed is set to be the -#' same in all studies, so the order and parameters of the repeated -#' encryption procedures are precisely the same in each study. Then a -#' study-specific modification of the seed in each study ensures that the -#' procedures initially generating the masking pseudodata (which are then -#' subject to the same encryption procedures as the real data) are different -#' in each study. For further information about the shared seed and how we -#' intend to transmit it in the future, please see the detailed associated -#' header document. -#' @param synth.real.ratio an integer value specifying the ratio between the -#' number of masking pseudodata values generated in each study compared to -#' the number of real data values in V2BR. -#' @param NA.manage character string taking three possible values: "NA.delete", -#' "NA.low","NA.hi". This argument determines how missing values are managed -#' before ranking. "NA.delete" results in all missing values being removed -#' prior to ranking. This means that the vector of ranks in each study is -#' shorter than the original vector of V2BR values by an amount corresponding -#' to the number of missing values in V2BR in that study. Any rows containing -#' missing values in V2BR are simply removed before the ranking procedure is -#' initiated so the order of rows without missing data is unaltered. "NA.low" -#' indicates that all missing values should be converted to a new value that -#' has a meaningful magnitude that is lower (more negative or less positive) -#' than the lowest non-missing value of V2BR in any of the studies. This means, -#' for example, that if there are a total of M values of V2BR that are missing -#' across all studies, there will be a total of M observations that are ranked -#' lowest each with a rank of (M+1)/2. So if 7 are missing the lowest 7 ranks -#' will be 4,4,4,4,4,4,4 and if 4 are missing the first 4 ranks will be -#' 2.5,2.5,2.5,2.5. "NA.hi" indicates that all missing values should be -#' converted to a new value that has a meaningful magnitude that is higher(less -#' negative or more positive)than the highest non-missing value of V2BR in any -#' of the studies. This means, for example, that if there are a total of M -#' values of V2BR that are missing across all studies and N non-missing -#' values, there will be a total of M observations that are ranked -#' highest each with a rank of (2N-M+1)/2. So if there are a total of 1000 -#' V2BR values and 9 are missing the highest 9 ranks will be 996, 996 ... 996. -#' If NA.manage is either "NA.low" or "NA.hi" the final rank vector in each -#' study will have the same length as the V2BR vector in that same study. -#' 2.5,2.5,2.5,2.5. The default value of the "NA.manage" argument is "NA.delete" -#' @param rm.residual.objects logical value. Default = TRUE: at the beginning -#' and end of each run of ds.ranksSecure delete all extraneous objects that are -#' otherwise left behind. These are not usually needed, but could be of value -#' if one were investigating a problem with the ranking. FALSE: do not delete -#' the residual objects -#' @param monitor.progress logical value. Default = FALSE. If TRUE, function -#' outputs information about its progress. -#' @param datasources specifies the particular opal object(s) to use. If the -#' argument is not specified (NULL) the default set of opals -#' will be used. If is specified, it should be set without -#' inverted commas: e.g. datasources=opals.em. If you wish to -#' apply the function solely to e.g. the second opal server in a set of three, -#' the argument can be specified as: e.g. datasources=opals.em[2]. -#' If you wish to specify the first and third opal servers in a set you specify: -#' e.g. datasources=opals.em[c(1,3)]. -#' @return the data frame objects specified by the arguments output.ranks.df -#' and summary.output.ranks.df. These are written to the serverside in each -#' study. Provided the sort order is consistent these data frames can be cbinded -#' to any other data frame, matrix or tibble object containing V2BR or to the -#' V2BR vector itself, allowing the global ranks and quantiles to be -#' analysed rather than the actual values of V2BR. The last call within -#' the ds.ranksSecure function is to another clientside function -#' ds.extractQuantile (for further details see header for that function). -#' This returns an additional data frame "final.quantile.df" of which the first -#' column is the vector of key quantiles to be estimated as specified by the -#' argument and the second column is the list of -#' precise values of V2BR which correspond to these key quantiles. Because -#' the serverside functions associated with ds.ranksSecure and -#' ds.extractQuantile block potentially disclosive output (see information -#' for parameter quantiles.for.estimation) the "final.quantile.df" is returned -#' to the client allowing the direct reporting of V2BR values corresponding to -#' key quantiles such as the quartiles, the median and 95th percentile etc. In -#' addition a copy of the same data frame is also written to the serverside in -#' each study allowing the value of key quantiles such as the median to be -#' incorporated directly in calculations or transformations on the serverside -#' regardless in which study (or studies) those key quantile values have -#' occurred. -#' @author Paul Burton 4th November, 2021 -#' @export -ds.ranksSecure <- function(input.var.name=NULL, quantiles.for.estimation="0.05-0.95", - generate.quantiles=TRUE, - output.ranks.df=NULL, summary.output.ranks.df = NULL, - ranks.sort.by="ID.orig", shared.seed.value=10, - synth.real.ratio=2,NA.manage="NA.delete", - rm.residual.objects=TRUE, monitor.progress=FALSE, - datasources=NULL){ - - # look for DS connections - if(is.null(datasources)){ - datasources <- datashield.connections_find() - } - - datasources.in.current.function<-datasources - - # 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) - } - - # check if user has provided the name of the column that holds the input variable - if(is.null(input.var.name)){ - stop("Please provide the name of the variable to be ranked across all sources collectively e.g. 'varname'", call.=FALSE) - } - - # check if user has provided the name of the input variable in a correct character format - if(!is.character(input.var.name)){ - stop("Please provide the name of the variable that is to be converted to a factor in character format e.g. 'varname'", call.=FALSE) - } - - # look for output df names and provide defaults if required - if(is.null(output.ranks.df)){ - output.ranks.df<-"full.ranks.df" - } - - if(is.null(summary.output.ranks.df)){ - summary.output.ranks.df<-"summary.ranks.df" - } - - if(is.null(synth.real.ratio)){ - synth.real.ratio<-10 - } - -#CLEAN UP RESIDUAL OBJECTS FROM PREVIOUS RUNS OF THE FUNCTION - if(rm.residual.objects) - { - #UNLESS THE IS FALSE, - #CLEAR UP ANY UNWANTED RESIDUAL OBJECTS FROM THE - #PREVIOUS RUNNING OF THE ds.ranksSecure FUNCTION IN THE - #CASE THAT PREVIOUS CALL STOPPED PREMATURELY AND SO THE - #FINAL CLEARING UP STEP WAS NOT INITIATED. - - rm.names<-c("blackbox.output.df", "blackbox.ranks.df", - "global.bounds.df", "global.ranks.quantiles.df", - "input.mean.sd.df", "input.ranks.sd.df", - output.ranks.df, "min.max.df", "numstudies.df", - "sR4.df", "sR5.df") - - #make transmittable via parser - rm.names.transmit <- paste(rm.names,collapse=",") - - calltext.rm <- call("rmDS", rm.names.transmit) - - rm.output <- DSI::datashield.aggregate(datasources, calltext.rm) - } - - if(monitor.progress){ -cat("\n\nStep 1 of 8 complete: - Cleaned up residual output from - previous runs of ds.ranksSecure - - - ") - - - } - - #CALL AN INITIALISING SERVER SIDE FUNCTION (ASSIGN) - #TO IDENTIFY QUANTILES OF ORIGINAL VARIABLES IN EACH STUDY - #TO CREATE A STARTING CONFIGURATION THAT IS ALMOST CERTAINLY >1 WITH A SPAN OF 10 - - cally0 <- paste0('quantileMeanDS(', input.var.name, ')') - initialise.input.var <- DSI::datashield.aggregate(datasources, as.symbol(cally0)) - - - numstudies<-length(initialise.input.var) - numvals<-length(initialise.input.var[[1]]) - - q5.val<-NULL - q95.val<-NULL - mean.val<-NULL - - for(rr in 1:numstudies){ - q5.val<-c(q5.val,initialise.input.var[[rr]][1]) - q95.val<-c(q95.val,initialise.input.var[[rr]][numvals-1]) - mean.val<-c(mean.val,initialise.input.var[[rr]][numvals]) - } - - min.q5<-min(q5.val) - max.q95<-max(q95.val) - - max.sd.input.var<-(max.q95-min.q5)/(2*1.65) - mean.input.var<-mean(mean.val) - - input.mean.sd.df<-data.frame(cbind(mean.input.var,max.sd.input.var)) - - - #CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN VALUES TO SERVERSIDE - dsBaseClient::ds.dmtC2S(dfdata=input.mean.sd.df,newobj="input.mean.sd.df") - -if(monitor.progress){ -cat("\n\nStep 2 of 8 complete: - Estimated mean and sd of - v2br to standardise initial values - - - ") - } - -#CALL minMaxRandDS FUNCTION (AGGREGATE) TO CREATE MIN AND MAX VALUES -#FOR INPUT VARIABLE WITH RANDOM NOISE ON TOP. ACTUAL VALUE DOESN'T -#MATTER AS IT IS ONLY TO ALLOCATE LOW AND HIGH VALUES TO NA WHEN -#THEY ARE TO BE INCLUDED IN THE RANKING - - calltext0 <- call("minMaxRandDS",input.var.name) - rand.min.max<-DSI::datashield.aggregate(datasources, calltext0) - - - numstudies<-length(rand.min.max) - - rand.min.min<-NULL - rand.max.max<-NULL - - for(ss in 1:numstudies){ - rand.min.min<-c(rand.min.min,rand.min.max[[ss]][1]) - rand.max.max<-c(rand.max.max,rand.min.max[[ss]][2]) - } - - min.min.final<-min(rand.min.min) - max.max.final<-min(rand.max.max) - - min.max.df<-data.frame(cbind(min.min.final,max.max.final)) - -#CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN VALUES TO SERVERSIDE -dsBaseClient::ds.dmtC2S(dfdata=min.max.df,newobj="min.max.df") - -if(monitor.progress){ -cat("\n\nStep 3 of 8 complete: - Generated ultra max and ultra min values to allocate to - missing values if is NA.hi or NA.low - - - ") -} - -print(input.mean.sd.df) - - - #CALL THE FIRST SERVER SIDE FUNCTION (ASSIGN) - #WRITES ENCRYPTED DATA TO SERVERSIDE OBJECT "blackbox.output.df" - calltext1 <- call("blackBoxDS", input.var.name=input.var.name, - #max.sd.input.var=input.mean.sd.df$max.sd.input.var, - #mean.input.var=input.mean.sd.df$mean.input.var, - shared.seedval=shared.seed.value,synth.real.ratio,NA.manage) - DSI::datashield.assign(datasources, "blackbox.output.df", calltext1) - -if(monitor.progress){ -cat("\n\nStep 4 of 8 complete: - Pseudo data synthesised,first set of rank-consistent - transformations complete and blackbox.output.df created - - - ") - } - - #CALL THE SECOND SERVER SIDE FUNCTION (AGGREGATE) - #RETURN ENCRYPTED DATA IN "blackbox.output.df" TO CLIENTSIDE - calltext2 <- call("ranksSecureDS1") - blackbox.output<-DSI::datashield.aggregate(datasources, calltext2) - - numstudies<-length(blackbox.output) - - studyid<-rep(1,nrow(blackbox.output[[1]])) - - sR3.df<-data.frame(cbind(blackbox.output[[1]],studyid)) - - - if(numstudies>=1) - { - for(ss in 2:numstudies) - { - studyid<-rep(ss,nrow(blackbox.output[[ss]])) - - temp.df<-data.frame(cbind(blackbox.output[[ss]],studyid)) - sR3.df<-rbind(sR3.df,temp.df) - } - } - colnames(sR3.df)<-c(colnames(blackbox.output[[1]]),"studyid") - - ord.global.val<-order(sR3.df$encrypted.var) - sR3.df<-sR3.df[ord.global.val,] - global.rank<-rank(sR3.df$encrypted.var) - sR3.sort.global.val.df<-data.frame(cbind(sR3.df,global.rank)) - - - #CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN df TO SERVERSIDE - for(ss in 1:3) - { - sR4.df<-sR3.sort.global.val.df[sR3.sort.global.val.df$studyid==ss,] - dsBaseClient::ds.dmtC2S(dfdata=sR4.df,newobj="sR4.df", - datasources = datasources.in.current.function[ss]) - } - - numstudies.df<-data.frame(numstudies) - - #CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN numstudies TO SERVERSIDE - dsBaseClient::ds.dmtC2S(dfdata=numstudies.df,newobj="numstudies.df", - datasources = datasources.in.current.function) - - - #CALL THE THIRD SERVER SIDE FUNCTION (ASSIGN) - #SELECTS ENCRYPTED DATA FOR REAL SUBJECTS IN EACH - #STUDY SPECIFIC sR4.df AND WRITES AS sR5.df ON SERVERSIDE - calltext3 <- call("ranksSecureDS2") - DSI::datashield.assign(datasources,"sR5.df",calltext3) - - ds.make("sR5.df$global.rank","testvar.ranks") - -if(monitor.progress){ -cat("\n\nStep 5 of 8 complete: - Global ranks generated and pseudodata stripped out. Now ready - to proceed to transformation of global ranks - - - ") - } - - input.ranks.name<-"testvar.ranks" - - cally2 <- paste0('quantileMeanDS(', input.ranks.name, ')') - initialise.input.ranks <- DSI::datashield.aggregate(datasources, as.symbol(cally2)) - - - numstudies<-length(initialise.input.ranks) - numvals<-length(initialise.input.ranks[[1]]) - - q5.val<-NULL - q95.val<-NULL - mean.ranks<-NULL - - for(rr in 1:numstudies){ - q5.val<-c(q5.val,initialise.input.ranks[[rr]][1]) - q95.val<-c(q95.val,initialise.input.ranks[[rr]][numvals-1]) - mean.ranks<-c(mean.ranks,initialise.input.ranks[[rr]][numvals]) - } - - min.q5<-min(q5.val) - max.q95<-max(q95.val) - - max.sd.input.ranks<-(max.q95-min.q5)/(2*1.65) - mean.input.ranks<-mean(mean.ranks) - - input.ranks.sd.df<-data.frame(cbind(mean.input.ranks,max.sd.input.ranks)) - - - #CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN VALUES TO SERVERSIDE - dsBaseClient::ds.dmtC2S(dfdata=input.ranks.sd.df,newobj="input.ranks.sd.df") - - - - #CALLS FOURTH SERVER SIDE FUNCTION (ASSIGN) - #THAT IS A MODIFIED VERSION OF blackBoxDS THAT - #ENCRYPTS JUST THE RANKS OF THE REAL DATA AND WRITES - #TO blackbox.ranks.df ON THE SERVERSIDE - #THIS VERSION (blackBoxDS2) CREATES NO SYNTHETIC DATA TO - #CONCEAL VALUES - - - calltext4 <- call("blackBoxRanksDS","testvar.ranks", - shared.seedval=shared.seed.value) - - DSI::datashield.assign(datasources, "blackbox.ranks.df", calltext4) - -if(monitor.progress){ -cat("\n\nStep 6 of 8 complete: - Rank-consistent transformations of global ranks complete - and blackbox.ranks.df created - - - ") - } - - - - #CALL THE FIFTH SERVER SIDE FUNCTION (AGGREGATE) - #SEND NON-DISCLOSIVE ELEMENTS OF (ENCRYPTED) DATA IN "blackbox.ranks.df" - #TO CLIENTSIDE - - calltext5 <- call("ranksSecureDS3") - blackbox.ranks.output<-DSI::datashield.aggregate(datasources, calltext5) - - numstudies<-length(blackbox.ranks.output) - - sR6.df<-blackbox.ranks.output[[1]] - - - if(numstudies>=1) - { - for(ss in 2:numstudies) - { - sR6.df<-rbind(sR6.df,blackbox.ranks.output[[ss]]) - } - } - sR6.df<-data.frame(sR6.df) - colnames(sR6.df)<-c(colnames(blackbox.ranks.output[[1]])) - - - #Rank encrypted ranks across all studies - real.ranks.global<-rank(sR6.df$encrypted.ranks) - real.quantiles.global<-real.ranks.global/length(real.ranks.global) - sR7.df<-cbind(sR6.df,real.ranks.global,real.quantiles.global) - ord.by.real.ranks.global<-order(sR7.df$real.ranks.global) - sR7.df.by.real.ranks.global<-sR7.df[ord.by.real.ranks.global,] - - - - #CALL CLIENTSIDE FUNCTION ds.dmtC2S TO RETURN sR7.df TO SERVERSIDE - for(ss in 1:3) - { - sR7.df.study.specific<-sR7.df.by.real.ranks.global[sR7.df.by.real.ranks.global$studyid==ss,] - dsBaseClient::ds.dmtC2S(dfdata=sR7.df.study.specific,newobj="global.ranks.quantiles.df", - datasources = datasources.in.current.function[ss]) - } - - - - - #CALL THE SIXTH SERVER SIDE FUNCTION (ASSIGN) - #TAKE ALLOCATED GLOBAL RANKS FROM sR7.df APPEND TO blackbox.ranks.df - #TO CREATE sR9.df - - calltext6 <- call("ranksSecureDS4",ranks.sort.by) - DSI::datashield.assign(datasources,output.ranks.df,calltext6) - - - calltext7 <- call("ranksSecureDS5", output.ranks.df) - DSI::datashield.assign(datasources,summary.output.ranks.df, calltext7) - - if(monitor.progress){ -cat("\n\nStep 7 of 8 complete: - Final global ranking of values in v2br complete and - written to each serverside as appropriate - - - ",summary.output.ranks.df) - } - - - - #CLEAN UP UNWANTED RESIDUAL OBJECTS FROM THE RUNNING OF ds.ranksSecure - #EXCEPT FOR OBJECTS CREATED BY ds.extractQuantiles - - if(rm.residual.objects) - { - #UNLESS THE IS FALSE, - #CLEAR UP ANY UNWANTED RESIDUAL OBJECTS - - rm.names.rS<-c("blackbox.output.df", "blackbox.ranks.df", - "global.ranks.quantiles.df","input.mean.sd.df", "input.ranks.sd.df", - output.ranks.df, "min.max.df", "numstudies.df", - "sR4.df", "sR5.df") - - #make transmittable via parser - rm.names.rS.transmit <- paste(rm.names.rS,collapse=",") - - calltext.rm.rS <- call("rmDS", rm.names.rS.transmit) - -# rm.output.rS <- - DSI::datashield.aggregate(datasources, calltext.rm.rS) - - } - -if(monitor.progress && rm.residual.objects){ -cat("\n\nStep 8 of 8 complete: - Cleaned up residual output from running ds.ranksSecure - - - ") - } - - if(monitor.progress && !rm.residual.objects){ - cat("\n\nStep 8 of 8 complete: - Residual output from running ds.ranksSecure NOT deleted - - - ") - } - - - -if(!generate.quantiles){ - cat("\n\n\n"," FINAL RANKING PROCEDURES COMPLETE: - PRIMARY RANKING OUTPUT IS IN DATA FRAME",summary.output.ranks.df, - " - WHICH IS SORTED BY",ranks.sort.by," AND HAS BEEN - WRITTEN TO THE SERVERSIDE\n\n\n\n") - - info.message<-"As the argument was set to FALSE no quantiles have been estimated.Please set argument to TRUE if you want to estimate quantiles such as median, quartiles and 90th percentile" - cat("\n\n",info.message,"\n\n") - return(info.message) - } - -final.quantile.df<- - ds.extractQuantiles( - quantiles.for.estimation, - summary.output.ranks.df, - ranks.sort.by, - rm.residual.objects, - extract.datasources=NULL) - - return(final.quantile.df) -} - -########################################## -#ds.ranksSecure diff --git a/R/ds.rbind.R b/R/ds.rbind.R index 85bca1d5..f1cd4614 100644 --- a/R/ds.rbind.R +++ b/R/ds.rbind.R @@ -79,9 +79,7 @@ #' #' @author DataSHIELD Development Team #' @export -#' -ds.rbind<-function(x=NULL, DataSHIELD.checks=FALSE, force.colnames=NULL, newobj=NULL, - datasources=NULL, notify.of.progress=FALSE){ +ds.rbind<-function(x=NULL,DataSHIELD.checks=FALSE,force.colnames=NULL,newobj=NULL,datasources=NULL,notify.of.progress=FALSE){ # look for DS connections if(is.null(datasources)){ @@ -97,25 +95,37 @@ ds.rbind<-function(x=NULL, DataSHIELD.checks=FALSE, force.colnames=NULL, newobj= stop("Please provide a vector of character strings holding the name of the input elements!", call.=FALSE) } + # the input variable might be given as column table (i.e. D$vector) + # or just as a vector not attached to a table (i.e. vector) + # we have to make sure the function deals with each case + xnames <- extract(x) + varnames <- xnames$elements + obj2lookfor <- xnames$holders - if(DataSHIELD.checks){ - - # check if the input object(s) is(are) defined in all the studies - lapply(x, function(k){isDefined(datasources, obj=k)}) +if(DataSHIELD.checks) +{ + # check if the input object(s) is(are) defined in all the studies + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } - # call the internal function that checks the input object(s) is(are) of the same legal class in all studies. - for(i in 1:length(x)){ - typ <- checkClass(datasources, x[i]) - if(!('data.frame' %in% typ) & !('matrix' %in% typ) & !('factor' %in% typ) & !('character' %in% typ) & !('numeric' %in% typ) & !('integer' %in% typ) & !('logical' %in% typ)){ - stop(" Only objects of type 'data.frame', 'matrix', 'numeric', 'integer', 'character', 'factor' and 'logical' are allowed.", call.=FALSE) - } + # call the internal function that checks the input object(s) is(are) of the same legal class in all studies. + for(i in 1:length(x)){ + typ <- checkClass(datasources, x[i]) + if(!('data.frame' %in% typ) & !('matrix' %in% typ) & !('factor' %in% typ) & !('character' %in% typ) & !('numeric' %in% typ) & !('integer' %in% typ) & !('logical' %in% typ)){ + stop(" Only objects of type 'data.frame', 'matrix', 'numeric', 'integer', 'character', 'factor' and 'logical' are allowed.", call.=FALSE) } } - + } # check newobj not actively declared as null if(is.null(newobj)){ newobj <- "rbind.newobj" - } +} + #CREATE THE VECTOR OF COLUMN NAMES if(!is.null(force.colnames)){ @@ -178,21 +188,31 @@ for(j in length(colname.vector):2) } } } - num.duplicates.c <- as.character(num.duplicates) +num.duplicates.c<-as.character(num.duplicates) - for(m in 1:length(colname.vector)){ - if(num.duplicates[m]!="0"){ - colname.vector[m] <- paste0(colname.vector[m],".",num.duplicates.c[m]) - } - } - } - # prepare name vectors for transmission - x.names.transmit <- paste(x, collapse=",") - colnames.transmit <- paste(colname.vector, collapse=",") - # call the server side function - calltext <- call("rbindDS", x.names.transmit, colnames.transmit) + +for(m in 1:length(colname.vector)) +{ +if(num.duplicates[m]!="0") + { + + colname.vector[m]<-paste0(colname.vector[m],".",num.duplicates.c[m]) + } +} +} + +#prepare name vectors for transmission + x.names.transmit<-paste(x,collapse=",") + colnames.transmit<-paste(colname.vector,collapse=",") + + ############################### + # call the server side function + + calltext <- call("rbindDS", x.names.transmit,colnames.transmit) + + DSI::datashield.assign(datasources, newobj, calltext) @@ -222,7 +242,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.reShape.R b/R/ds.reShape.R index 2a4840e9..ac1f948d 100644 --- a/R/ds.reShape.R +++ b/R/ds.reShape.R @@ -98,6 +98,7 @@ ds.reShape <- function(data.name=NULL, varying=NULL, v.names=NULL, timevar.name= stop("Please provide the name of the list that holds the input vectors!", call.=FALSE) } + if (!is.character(sep) || (nchar(sep) != 1)){ stop("'sep' must be a character string", call.=FALSE) } @@ -149,7 +150,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.recodeLevels.R b/R/ds.recodeLevels.R index 671401e4..cedfc61f 100644 --- a/R/ds.recodeLevels.R +++ b/R/ds.recodeLevels.R @@ -125,7 +125,7 @@ ds.recodeLevels <- function(x=NULL, newCategories=NULL, newobj=NULL, datasources numstudies <- length(stdnames) # do the business - cally <- paste0("recodeLevelsDS(", x, ", vectorDS(","'",paste(newCategories,collapse="','"),"')",")") + cally <- paste0("recodeLevelsDS(", x, ", c(","'",paste(newCategories,collapse="','"),"')",")") DSI::datashield.assign(datasources, newobj, as.symbol(cally)) # check that the new object has been created and display a message accordingly diff --git a/R/ds.recodeValues.R b/R/ds.recodeValues.R index 9643d33e..6eab2699 100644 --- a/R/ds.recodeValues.R +++ b/R/ds.recodeValues.R @@ -78,8 +78,7 @@ #' } #' @export #' -ds.recodeValues <- function(var.name=NULL, values2replace.vector=NULL, new.values.vector=NULL, - missing=NULL, newobj=NULL, datasources=NULL, notify.of.progress=FALSE){ +ds.recodeValues <- function(var.name=NULL, values2replace.vector=NULL, new.values.vector=NULL, missing=NULL, newobj=NULL, datasources=NULL, notify.of.progress=FALSE){ # look for DS connections if(is.null(datasources)){ @@ -96,9 +95,6 @@ ds.recodeValues <- function(var.name=NULL, values2replace.vector=NULL, new.value stop("Please provide the name of the variable to be recoded: eg 'xxx'", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, var.name) - # check user has provided the vector specifying the set of values to be replaced if(is.null(values2replace.vector)){ stop("Please provide a vector in the 'values2replace.vector' argument specifying @@ -124,18 +120,28 @@ ds.recodeValues <- function(var.name=NULL, values2replace.vector=NULL, new.value if(any(is.na(values2replace.vector))){ stop("To recode NAs you need to use the 'missing' argument", call.=FALSE) } + +# # DETERMINE WHETHER new.values.vector CONTAINS NON-NUMERIC ELEMENTS (IF SO CAN ONLY GET NUMERIC OUTPUT +# # BY force.output.format="numeric" AND NON-NUMERICS WILL THEN BE SET AS NaN) +# +# # is new.values.vector all NA? +# nvv.all.NA <- (sum(is.na(new.values.vector))==length(new.values.vector)) +# nvv.numeric <- is.numeric(new.values.vector) +# +# numeric.output.format.possible <- (nvv.all.NA||nvv.numeric) +# +# # is values2replace.vector numeric? +# v2r.numeric <- is.numeric(values2replace.vector) if(!is.null(values2replace.vector) & !is.null(new.values.vector)){ values2replace.transmit <- paste0(as.character(values2replace.vector), collapse=",") - new.values.transmit <- paste0(as.character(new.values.vector), collapse=",") + new.values.transmit <- paste0(as.character(new.values.vector),collapse=",") }else{ values2replace.transmit <- NULL new.values.transmit <- NULL } - if(is.null(newobj)){ - newobj <- paste0(var.name, "_recoded") - } + if(is.null(newobj)){newobj <- paste0(var.name, "_recoded")} calltext <- call("recodeValuesDS", var.name, values2replace.transmit, new.values.transmit, missing) DSI::datashield.assign(datasources, newobj, calltext) @@ -164,7 +170,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.rep.R b/R/ds.rep.R index 0e526149..0b0d9b0a 100644 --- a/R/ds.rep.R +++ b/R/ds.rep.R @@ -310,7 +310,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.replaceNA.R b/R/ds.replaceNA.R index 3345b7de..987d46aa 100644 --- a/R/ds.replaceNA.R +++ b/R/ds.replaceNA.R @@ -13,10 +13,10 @@ #' appended to table structure so that the table holds both the vector with and without #' missing values. #' -#' Server function called: \code{replaceNaDS} -#' @param x a character string specifying the name of the vector. -#' @param forNA a list or a vector that contains the replacement value(s), for each study. -#' The length of the list or vector must be equal to the number of servers (studies). +#' Server function called: \code{numNaDS} +#' @param x a character string specifying the the name of the vector. +#' @param forNA a list that contains the replacement value(s), a vector one or more values +#' for each study. The length of the list must be equal to the number of servers (studies). #' @param newobj a character string that provides the name for the output object #' that is stored on the data servers. Default \code{replacena.newobj}. #' @param datasources a list of \code{\link{DSConnection-class}} objects obtained after login. @@ -53,43 +53,30 @@ #' 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") #' -#' # Example 1: Replace missing values in variable 'LAB_HDL' by the mean value -#' # in each study +#' # Replace missing values in variable 'LAB_HDL' by the mean value in each study #' #' # Get the mean value of 'LAB_HDL' for each study -#' mean <- ds.mean(x = "D$LAB_HDL", -#' type = "split", -#' datasources = connections) +#' +#' mean<-ds.mean(x = "D$LAB_HDL", +#' type = "split", +#' datasources = connections) #' #' # Replace the missing values using the mean for each study +#' #' ds.replaceNA(x = "D$LAB_HDL", #' forNA = list(mean[[1]][1], mean[[1]][2], mean[[1]][3]), #' newobj = "HDL.noNA", #' datasources = connections) -#' -#' # Example 2: Replace missing values in categorical variable 'PM_BMI_CATEGORICAL' -#' # with 999s -#' -#' # First check how many NAs there are in 'PM_BMI_CATEGORICAL' in each study -#' ds.table(rvar = "D$PM_BMI_CATEGORICAL", -#' useNA = "always") -#' -#' # Replace the missing values with 999s -#' ds.replaceNA(x = "D$PM_BMI_CATEGORICAL", -#' forNA = c(999,999,999), -#' newobj = "bmi999") -#' -#' # Check if the NAs have been replaced correctly -#' ds.table(rvar = "bmi999", -#' useNA = "always") -#' +#' #' # Clear the Datashield R sessions and logout #' datashield.logout(connections) #' } -#' -ds.replaceNA <- function(x=NULL, forNA=NULL, newobj=NULL, datasources=NULL){ + + + +ds.replaceNA <- function(x=NULL, forNA=NULL, newobj=NULL, datasources=NULL) { # look for DS connections if(is.null(datasources)){ @@ -104,9 +91,6 @@ ds.replaceNA <- function(x=NULL, forNA=NULL, newobj=NULL, datasources=NULL){ if(is.null(x)){ stop("Please provide the name of a vector!", call.=FALSE) } - - # check if the input object is defined in all the studies - isDefined(datasources, x) # check if replacement values have been provided if(is.null(forNA)){ @@ -117,12 +101,20 @@ ds.replaceNA <- function(x=NULL, forNA=NULL, newobj=NULL, datasources=NULL){ } } + # check if the input object(s) is(are) defined in all the studies + inputElts <- extract(x) + if(is.na(inputElts[[1]])){ + defined <- isDefined(datasources, inputElts[[2]]) + }else{ + defined <- isDefined(datasources, inputElts[[1]]) + } + for(i in 1:length(datasources)){ # get the number of missing values for each study and if the number of # replacement values is not 1 and is greater or smaller than the actual # number of missing values stop the process and tell the analyst - cally <- call("numNaDS", x) - numNAs <- DSI::datashield.aggregate(datasources[i], cally) + cally <- paste0("numNaDS(", x, ")") + numNAs <- DSI::datashield.aggregate(datasources[i], as.symbol(cally)) if(length(forNA[[i]]) != 1 & length(forNA[[i]]) != numNAs[[1]]){ message("The number of replacement values must be of length 1 or of the same length as the number of missing values.") stop(paste0("This is not the case in ", names(datasources)[i]), call.=FALSE) @@ -136,16 +128,16 @@ ds.replaceNA <- function(x=NULL, forNA=NULL, newobj=NULL, datasources=NULL){ # call the server side function and doo the replacement for each server for(i in 1:length(datasources)){ message(paste0("--Processing ", names(datasources)[i], "...")) - cally <- paste0("replaceNaDS(", x, paste0(", vectorDS(",paste(forNA[[i]],collapse=","),")"), ")") + cally <- paste0("replaceNaDS(", x, paste0(", c(",paste(forNA[[i]],collapse=","),")"), ")") DSI::datashield.assign(datasources[i], newobj, as.symbol(cally)) # check that the new object has been created and display a message accordingly finalcheck <- isAssigned(datasources[i], newobj) # if the input vector is within a table structure append the new vector to that table - inputElts <- extract(x) if(!(is.na(inputElts[[1]]))){ - ds.dataFrame(c(inputElts[[1]], newobj), newobj = inputElts[[1]], DataSHIELD.checks = FALSE, datasources = datasources[i]) + cally <- paste0("cbind(", inputElts[[1]], ",", newobj, ")") + DSI::datashield.assign(datasources[i], inputElts[[1]], as.symbol(cally)) } } diff --git a/R/ds.rm.R b/R/ds.rm.R index 77b693db..1bc83669 100644 --- a/R/ds.rm.R +++ b/R/ds.rm.R @@ -67,31 +67,31 @@ #' @export ds.rm<-function(x.names=NULL, 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.names)) { stop("Please provide the names of the objects to be deleted (eg 'object.name') as the x.names argument", call.=FALSE) } - + #make transmittable via parser x.names.transmit <- paste(x.names,collapse=",") - + # call the server side function #PLEASE NOTE THIS IS - SURPRISINGLY - AN AGGREGATE FUNCTION: see details in header - + calltext <- call("rmDS", x.names.transmit) - + output = DSI::datashield.aggregate(datasources, calltext) - + return(output) } -#ds.rm \ No newline at end of file +#ds.rm diff --git a/R/ds.rowColCalc.R b/R/ds.rowColCalc.R index b63190bf..3d6028d3 100644 --- a/R/ds.rowColCalc.R +++ b/R/ds.rowColCalc.R @@ -64,7 +64,6 @@ #' #' } #' @export -#' ds.rowColCalc <- function(x=NULL, operation=NULL, newobj=NULL, datasources=NULL){ # look for DS connections diff --git a/R/ds.sample.R b/R/ds.sample.R index d2a08ab3..249fc97c 100644 --- a/R/ds.sample.R +++ b/R/ds.sample.R @@ -4,8 +4,8 @@ #' on the serverside #' or - as a special case - randomly permutes a vector, dataframe or matrix. #' @details Clientside function ds.sample calls serverside -#' assign function sampleDS. Based on the native R function \code{sample()} but deals -#' slightly differently with data.frames and matrices. Specifically the \code{sample()} +#' assign function sampleDS. Based on the native R function {sample()} but deals +#' slightly differently with data.frames and matrices. Specifically the {sample()} #' function in R identifies the length of an object and then samples n components #' of that length. But length(data.frame) in native R returns the number of columns #' not the number of rows. So if you have a data.frame with 71 rows and 10 columns, @@ -63,11 +63,11 @@ #' that is a randomly permuted sample of the vector 1:923, or (if [replace] #' = FALSE, a full random permutation of that same vector. For further details #' of using ds.sample with x set as an integer/numeric please see help for -#' the \code{sample} function in native R. But if x is set as a character string +#' the {sample} function in native R. But if x is set as a character string #' denoting a vector, matrix or data.frame on the serverside, please note -#' that although \code{ds.sample} effectively calls \code{sample} on the serverside -#' it behaves somewhat differently to \code{sample} - for the reasons identified -#' at the top of 'details' and so help for \code{sample} should be used as a guide +#' that although {ds.sample} effectively calls {sample} on the serverside +#' it behaves somewhat differently to {sample} - for the reasons identified +#' at the top of 'details' and so help for {sample} should be used as a guide #' only. #' @param size a numeric/integer scalar indicating the size of the sample to #' be drawn. If the [x] argument is a vector, matrix or data.frame on the @@ -102,18 +102,18 @@ #' @param replace a Boolean indicator (TRUE or FALSE) specifying whether the #' sample should be drawn with or without replacement. Default is FALSE so #' the sample is drawn without replacement. For further details see -#' help for \code{sample} in native R. +#' help for {sample} in native R. #' @param prob a character string containing the name of a numeric vector #' of probability weights on the serverside that is associated with each of the #' elements of the vector to be sampled enabling the drawing of a sample #' with some elements given higher probability of being drawn than others. -#' For further details see help for \code{sample} in native R. +#' For further details see help for {sample} in native R. #' @param newobj This a character string providing a name for the output #' data.frame which defaults to 'newobj.sample' if no name is specified. #' @param datasources specifies the particular opal object(s) to use. If the #' argument is not specified the default set of opals will be used. The default opals #' are called default.opals and the default can be set using the function -#' \code{ds.setDefaultOpals}. If the is to be specified, it should be set without +#' {ds.setDefaultOpals}. If the is to be specified, it should be set without #' inverted commas: e.g. datasources=opals.em or datasources=default.opals. If you wish to #' apply the function solely to e.g. the second opal server in a set of three, #' the argument can be specified as: e.g. datasources=opals.em[2]. @@ -261,7 +261,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.scatterPlot.R b/R/ds.scatterPlot.R index 81828648..d1721402 100644 --- a/R/ds.scatterPlot.R +++ b/R/ds.scatterPlot.R @@ -127,7 +127,7 @@ #' #' } #' -ds.scatterPlot <- function(x=NULL, y=NULL, method='deterministic', k=3, noise=0.25, type="split", return.coords=FALSE, datasources=NULL){ +ds.scatterPlot <- function (x=NULL, y=NULL, method='deterministic', k=3, noise=0.25, type="split", return.coords=FALSE, datasources=NULL){ if(is.null(x)){ stop("Please provide the name of the x-variable", call.=FALSE) @@ -147,9 +147,22 @@ ds.scatterPlot <- function(x=NULL, y=NULL, method='deterministic', k=3, noise=0. stop("The 'datasources' were expected to be a list of DSConnection-class objects", call.=FALSE) } - # check if the input objects are defined in all the studies - isDefined(datasources, x) - isDefined(datasources, y) + # the input variable might be given as column table (i.e. D$object) + # or just as a vector not attached to a table (i.e. object) + # we have to make sure the function deals with each case + objects <- c(x, y) + xnames <- extract(objects) + varnames <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + for(i in 1:length(varnames)){ + if(is.na(obj2lookfor[i])){ + defined <- isDefined(datasources, varnames[i]) + }else{ + defined <- isDefined(datasources, obj2lookfor[i]) + } + } # call the internal function that checks the input object(s) is(are) of the same class in all studies. typ.x <- checkClass(datasources, x) @@ -165,7 +178,9 @@ ds.scatterPlot <- function(x=NULL, y=NULL, method='deterministic', k=3, noise=0. stop("The input objects must be integer or numeric vectors.", call.=FALSE) } - # get the axes labels + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case xnames <- extract(x) x.lab <- xnames[[length(xnames)]] ynames <- extract(y) diff --git a/R/ds.seq.R b/R/ds.seq.R index 1f0b722a..ca247ad4 100644 --- a/R/ds.seq.R +++ b/R/ds.seq.R @@ -216,7 +216,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.skewness.R b/R/ds.skewness.R index ed3b05d9..17cf2085 100644 --- a/R/ds.skewness.R +++ b/R/ds.skewness.R @@ -104,8 +104,19 @@ ds.skewness <- function(x=NULL, method=1, type='both', datasources=NULL){ if(type != 'combine' & type != 'split' & type != 'both') stop('Function argument "type" has to be either "both", "combine" or "split"', call.=FALSE) - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) diff --git a/R/ds.sqrt.R b/R/ds.sqrt.R index 22a03937..fd35a471 100644 --- a/R/ds.sqrt.R +++ b/R/ds.sqrt.R @@ -84,8 +84,19 @@ ds.sqrt <- function(x=NULL, newobj=NULL, datasources=NULL){ stop("Please provide the name of the input object!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks the input object is of the same class in all studies. typ <- checkClass(datasources, x) diff --git a/R/ds.summary.R b/R/ds.summary.R index b4d3061c..e543fb7c 100644 --- a/R/ds.summary.R +++ b/R/ds.summary.R @@ -80,8 +80,19 @@ ds.summary <- function(x=NULL, datasources=NULL){ stop("Please provide the name of the input vector!", call.=FALSE) } - # check if the input object is defined in all the studies - isDefined(datasources, x) + # the input variable might be given as column table (i.e. D$x) + # or just as a vector not attached to a table (i.e. x) + # we have to make sure the function deals with each case + xnames <- extract(x) + varname <- xnames$elements + obj2lookfor <- xnames$holders + + # check if the input object(s) is(are) defined in all the studies + if(is.na(obj2lookfor)){ + defined <- isDefined(datasources, varname) + }else{ + defined <- isDefined(datasources, obj2lookfor) + } # call the internal function that checks if the input object is of the same class in all studies. typ <- checkClass(datasources, x) diff --git a/R/ds.table.R b/R/ds.table.R index f5a623d4..22e27b88 100644 --- a/R/ds.table.R +++ b/R/ds.table.R @@ -1,11 +1,10 @@ -#' #' @title Generates 1-, 2-, and 3-dimensional contingency tables with option #' of assigning to serverside only and producing chi-squared statistics -#' @description Creates 1-dimensional, 2-dimensional and 3-dimensional -#' tables using the \code{table} function in native R. -#' @details The \code{ds.table} function selects numeric, integer or factor +#' @description creates 1-dimensional, 2-dimensional and 3-dimensional +#' tables using the {table} function in native R. +#' @details the {ds.table} function selects numeric, integer or factor #' variables on the serverside which define a contingency table with up to -#' three dimensions. The native R \code{table} function basically operates on +#' three dimensions. The native R {table} function basically operates on #' factors and if variables are specified that are integers or numerics #' they are first coerced to factors. If the 1-dimensional, 2-dimensional or #' 3-dimensional table generated from a given study satisfies appropriate @@ -36,7 +35,7 @@ #' table returned to the clientside, it means that the true count #' in that same cell is held as the 13th element of the true count #' vector saved on the serverside. This means that a data analyst -#' can still make use of the counts from a call to the \code{ds.table} +#' can still make use of the counts from a call to the {ds.table} #' function to drive their ongoing analysis even when one or #' more non-zero cell counts fall below the specified threshold #' for potential disclosure risk. @@ -47,15 +46,15 @@ #' to advance analysis, it does not create a direct risk of disclosure. #' #' The argument identifies the variable defining the rows -#' in each of the 2-dimensional tables produced in the output. +#' in each of the 2 dimensional tables produced in the output. #' #' The -#' argument identifies the variable defining the columns in the 2-dimensional +#' argument identifies the variable defining the columns in the 2 dimensional #' tables produced in the output. #' #' In creating a 3-dimensional table the #' ('separate tables') argument identifies the variable that -#' indexes the set of two dimensional tables in the output \code{ds.table}. +#' indexes the set of two dimensional tables in the output {ds.table}. #' #' As a minor technicality, it should be noted that #' if a 1-dimensional table is required, one only need specify a value @@ -67,7 +66,7 @@ #' for one dimensional tables are actually two dimensional: with #' rows defined by and with one column for each of the studies. #' -#' The output list generated by \code{ds.table} contains tables based on counts +#' The output list generated by {ds.table} contains tables based on counts #' named "table.name_counts" and other tables reporting corresponding #' column proportions ("table.name_col.props") or row proportions #' ("table.name_row.props"). In one dimensional tables in the output the @@ -77,7 +76,7 @@ #' distribution of the variable. #' #' If the argument is set to TRUE, chisq tests -#' are applied to every 2-dimensional table in the output and reported +#' are applied to every 2 dimensional table in the output and reported #' as "chisq.test_table.name". The argument #' defaults to FALSE. #' @@ -88,54 +87,54 @@ #' and because it is debatable whether this warning is really #' statistically important, the argument #' can be set to TRUE to block the warnings. However, it is defaulted to FALSE. -#' @param rvar is a character string (in inverted commas) specifying the +#' @param rvar is a character string (in inverted commas) specifiying the #' name of the variable defining the rows in all of the 2 dimensional #' tables that form the output. Please see 'details' above for more #' information about one-dimensional tables when a variable name is provided #' by but and are both NULL -#' @param cvar is a character string specifying the +#' @param cvar is a character string specifiying the #' name of the variable defining the columns in all of the 2 dimensional #' tables that form the output. -#' @param stvar is a character string specifying the +#' @param stvar is a character string specifiying the #' name of the variable that indexes the separate two dimensional #' tables in the output if the call specifies a 3 dimensional table. -#' @param report.chisq.tests if TRUE, chi-squared tests +#' @param report.chisq.tests if TRUE, chisquared tests #' are applied to every 2 dimensional table in the output and reported #' as "chisq.test_table.name". Default = FALSE. -#' @param exclude this argument is passed through to the \code{table} function in -#' native R which is called by \code{tableDS}. The help for \code{table} in native R +#' @param exclude this argument is passed through to the {table} function in +#' native R which is called by {tableDS}. The help for {table} in native R #' indicates that 'exclude' specifies any levels that should be deleted for #' all factors in rvar, cvar or stvar. If the argument #' does not include NA and if the argument is not specified, -#' it implies = "always" in DataSHIELD. If you read the help for \code{table} in native R +#' it implies = "ifany". If you read the help for {table} in native R #' including the 'details' and the 'examples' (particularly 'd.patho') you -#' will see that the response of \code{table} to different combinations of the +#' will see that the response of {table} to different combinations of the #' and arguments can be non-intuitive. This is particularly -#' so if there is more than one type of missing (e.g. missing by observation +#' so if there is more than one type of missing (eg. missing by observation #' as well as missing because of an NaN response to a mathematical #' function - such as log(-3.0)). In DataSHIELD, if you are in one #' of these complex settings (which should not be very common) and #' you cannot interpret the output that has been approached #' you might try: (1) making sure that the variable producing the strange results #' is of class factor rather than integer or numeric - although integers and -#' numerics are coerced to factors by \code{ds.table} they can occasionally behave less +#' numerics are coerced to factors by {ds.table} they can occasionally behave less #' well when the NA setting is complex; (2) specify both an argument -#' e.g. exclude = c("NaN","3") and a argument e.g. useNA= "no"; +#' e.g. exclude =c("NaN","3") and a argument e.g. useNA= "no"; #' (3) if you are excluding multiple levels e.g exclude = c("NA","3") -#' then you can reduce this to one e.g. exclude = c("NA") and then remove +#' then you can reduce this to one e.g. exclude= c("NA") and then remove #' the 3s by deleting rows of data, or converting the 3s to a different value. -#' @param useNA this argument is passed through to the \code{table} function in -#' native R which is called by \code{tableDS}. In DataSHIELD, this argument can take -#' two values: "no" or "always" which indicate whether to include NA values in the table. +#' @param useNA this argument is passed through to the {table} function in +#' native R which is called by {tableDS}. The help for {table} in native R +#' indicates that it specifies whether to include NA values in the table. #' For further information, please see the help for the argument (above) -#' and/or the help for the \code{table} function in native R. Default value is set to "always". +#' and/or the help for the {table} function in native R. #' @param suppress.chisq.warnings if set to TRUE, the default warnings are -#' suppressed that would otherwise be produced by the \code{table} function in +#' suppressed that would otherwise be produced by the {table} function in #' native R whenever an expected cell count in one or more cells is less than 5. #' Default is FALSE. Further details can be found under 'details' and the #' help provided for the argument (above). #' @param table.assign is a Boolean argument set by default to FALSE. If it is -#' FALSE the \code{ds.table} function acts as a standard aggregate function - +#' FALSE the {ds.table} function acts as a standard aggregate function - #' it returns the table that is specified in its call to the clientside #' where it can be visualised and worked with by the analyst. But if #' is TRUE, the same table object is also written to @@ -161,7 +160,7 @@ #' a positive integer represented as a character string: e.g. "173". This #' the has the effect of the standard value of 'nfilter.tab' (often 1, 3, 5 or 10 #' depending what value the data custodian has selected for this particular -#' data set), to this new value (here, 173). CRUCIALLY, the \code{ds.table} function +#' data set), to this new value (here, 173). CRUCIALLY, the {ds.table} function #' only allows the standard value to be INCREASED. So if the standard value has #' been set as 5 (as one of the R options set in the serverside connection), "6" and #' "4981" would be allowable values for the argument but "4" or @@ -174,9 +173,9 @@ #' there is an error for some other reason). #' #' The clientside output from -#' \code{ds.table} includes error messages that identify when the creation of a +#' {ds.table} includes error messages that identify when the creation of a #' table from a particular study has failed and why. If table.assign=TRUE, -#' \code{ds.table} also writes the requested table as an object named by +#' {ds.table} also writes the requested table as an object named by #' the argument or set to 'newObj' by default. #' #' Further information @@ -184,12 +183,17 @@ #' table object written to the serverside can be seen under 'details' (above). #' @author Paul Burton and Alex Westerberg for DataSHIELD Development Team, 01/05/2020 #' @export -#' -ds.table <- function(rvar=NULL, cvar=NULL, stvar=NULL, report.chisq.tests=FALSE, - exclude=NULL, useNA ="always", suppress.chisq.warnings=FALSE, - table.assign=FALSE, newobj=NULL, datasources=NULL, - force.nfilter=NULL){ - +ds.table<-function(rvar=NULL, cvar=NULL, stvar=NULL, + report.chisq.tests=FALSE, + exclude = NULL, + useNA = c("ifany"), + suppress.chisq.warnings=FALSE, + table.assign=FALSE, + newobj=NULL, + datasources=NULL, + force.nfilter=NULL) + + { # if no connection login details are provided look for 'connection' objects in the environment if(is.null(datasources)){ datasources <- datashield.connections_find() @@ -200,32 +204,23 @@ ds.table <- function(rvar=NULL, cvar=NULL, stvar=NULL, report.chisq.tests=FALSE, stop("The 'datasources' were expected to be a list of DSConnection-class objects", call.=FALSE) } - # check if a value has been provided for rvar + # check if a value has been provided for xvar if(is.null(rvar)){ return("Error: rvar must have a value which is a character string naming the row variable for the table") } - - # check if the input object is defined in all the studies - isDefined(datasources, rvar) + if(!is.null(cvar)&&!is.character(cvar)){ return("Error: if cvar is not null, it must have a value which is a character string naming the column variable for the table") } - - if(!is.null(cvar)){ - isDefined(datasources, cvar) - } if(!is.null(stvar)&&!is.character(stvar)){ return("Error: if stvar is not null, it must have a value which is a character string naming the variable coding separate tables for the table") } - - if(!is.null(stvar)){ - isDefined(datasources, stvar) - } - if(useNA!="no" && useNA!="always"){ - stop("useNA must be either 'no' or 'always'.") + + if(useNA!="no"&&useNA!="ifany"&&useNA!="always"){ + return("Error: useNA must take one of the three values: 'no', 'ifany', or 'always'. Default is 'ifany'") } if(!is.null(force.nfilter)&&!is.character(force.nfilter)){ @@ -405,7 +400,7 @@ list.temp<-NULL for(ns in 1:numsources.orig) { - if("character" %in% class(table.out[[ns]])) + if(class(table.out[[ns]])=="character") { valid.output[ns]<-0 error.messages[[ns]]<-table.out[[ns]] diff --git a/R/ds.tapply.R b/R/ds.tapply.R index 457ecfe4..f15cac54 100644 --- a/R/ds.tapply.R +++ b/R/ds.tapply.R @@ -61,7 +61,8 @@ #' Server function called: \code{tapplyDS} #' @param X.name a character string specifying the name of the variable to be summarized. #' @param INDEX.names a character string specifying the name of a single factor -#' or a list or vector of names of up to two factors to index the variable to be summarized. +#' or a vector of names of factors to +#' index the variable to be summarized. #' For more information see \strong{Details}. #' @param FUN.name a character string specifying the name of one of the allowable #' summarizing functions. This can be set as: @@ -139,9 +140,6 @@ ds.tapply <- function(X.name=NULL, INDEX.names=NULL, FUN.name=NULL, datasources= if(is.null(X.name)){ return("Error: Please provide the name of the variable to be summarized, as a character string") } - - # check if the X object is defined in all the studies - isDefined(datasources, X.name) ###INDEX.names # check if user has provided the name of the column(s) that holds INDEX.names @@ -151,20 +149,10 @@ ds.tapply <- function(X.name=NULL, INDEX.names=NULL, FUN.name=NULL, datasources= Err.3 <- "In either case the argument must be specified in inverted commas" return(list(Error.message=Err.1, Err.cont2=Err.2, Err.cont3=Err.3)) } - - # check if the vector or list of INDEX.names includes up to two names - if(length(INDEX.names) > 2){ - stop("The 'INDEX.names' can include the names of up to two factors", call.=FALSE) - } - - # check if the INDEX objects are defined in all the studies - for(i in 1:length(INDEX.names)){ - isDefined(datasources, INDEX.names[i]) - } - # make INDEX.names transmitable + #make INDEX.names transmitable if(!is.null(INDEX.names)){ - INDEX.names.transmit <- paste(INDEX.names, collapse=",") + INDEX.names.transmit <- paste(INDEX.names,collapse=",") }else{ INDEX.names.transmit <- NULL } @@ -177,7 +165,9 @@ ds.tapply <- function(X.name=NULL, INDEX.names=NULL, FUN.name=NULL, datasources= # CALL THE PRIMARY SERVER SIDE FUNCTION calltext <- call("tapplyDS", X.name, INDEX.names.transmit, FUN.name) + output <- DSI::datashield.aggregate(datasources, calltext) + return(output) } diff --git a/R/ds.tapply.assign.R b/R/ds.tapply.assign.R index 6f506532..acb8e4a5 100644 --- a/R/ds.tapply.assign.R +++ b/R/ds.tapply.assign.R @@ -61,7 +61,8 @@ #' Server function called: \code{ds.tapply.assign} #' @param X.name a character string specifying the name of the variable to be summarized. #' @param INDEX.names a character string specifying the name of a single factor -#' or a vector of names of up to two factors to index the variable to be summarized. +#' or a vector of names of factors to +#' index the variable to be summarized. #' For more information see \strong{Details}. #' @param FUN.name a character string specifying the name of one of the allowable #' summarizing functions. This can be set as: @@ -144,10 +145,7 @@ ds.tapply.assign <- function(X.name=NULL, INDEX.names=NULL, FUN.name=NULL, newob if(is.null(X.name)){ return("Error: Please provide the name of the variable to be summarized, as a character string") } - - # check if the X object is defined in all the studies - isDefined(datasources, X.name) - + ###INDEX.names # check if user has provided the name of the column(s) that holds INDEX.names if(is.null(INDEX.names)){ @@ -156,24 +154,14 @@ ds.tapply.assign <- function(X.name=NULL, INDEX.names=NULL, FUN.name=NULL, newob Err.3 <- "In either case the argument must be specified in inverted commas" return(list(Error.message=Err.1, Err.cont2=Err.2, Err.cont3=Err.3)) } - - # check if the vector or list of INDEX.names includes up to two names - if(length(INDEX.names) > 2){ - stop("The 'INDEX.names' can include the names of up to two factors", call.=FALSE) - } - - # check if the INDEX objects are defined in all the studies - for(i in 1:length(INDEX.names)){ - isDefined(datasources, INDEX.names[i]) - } - - # make INDEX.names transmitable + + #make INDEX.names transmitable if(!is.null(INDEX.names)){ - INDEX.names.transmit <- paste(INDEX.names, collapse=",") + INDEX.names.transmit <- paste(INDEX.names,collapse=",") }else{ INDEX.names.transmit <- NULL } - + ###FUN.name # check if user has provided a valid summarizing function if(is.null(FUN.name)){ @@ -214,7 +202,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.testObjExists.R b/R/ds.testObjExists.R index bf84065d..3a3aa756 100644 --- a/R/ds.testObjExists.R +++ b/R/ds.testObjExists.R @@ -96,7 +96,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # @@ -137,7 +137,7 @@ if(obj.name.exists.in.all.sources && obj.non.null.in.all.sources){ # if(!object.info[[j]]$test.obj.exists){ obj.name.exists.in.all.sources <- FALSE } - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ obj.non.null.in.all.sources <- FALSE } } diff --git a/R/ds.unList.R b/R/ds.unList.R index 773246fd..df951261 100644 --- a/R/ds.unList.R +++ b/R/ds.unList.R @@ -120,7 +120,7 @@ for(j in 1:num.datasources){ # if(!object.info[[j]]$test.obj.exists){ # obj.name.exists.in.all.sources<-FALSE # } # - if(is.null(object.info[[j]]$test.obj.class) || ("ABSENT" %in% object.info[[j]]$test.obj.class)){ # + if(is.null(object.info[[j]]$test.obj.class) || object.info[[j]]$test.obj.class=="ABSENT"){ # obj.non.null.in.all.sources<-FALSE # } # } # diff --git a/R/ds.unique.R b/R/ds.unique.R deleted file mode 100644 index 29797dee..00000000 --- a/R/ds.unique.R +++ /dev/null @@ -1,74 +0,0 @@ -#' -#' @title Perform 'unique' on a variable on the server-side -#' @description Perform 'unique', from the 'base' package on a specified variable on the server-side -#' @details Will create a vector or list which has no duplicate values. -#' -#' Server function called: \code{uniqueDS} -#' @param x.name a character string providing the name of the varable, in the server, to perform \code{unique} upon -#' @param newobj a character string that provides the name for the output object -#' that is stored on the data servers. Default \code{unique.newobj}. -#' @param datasources a list of \code{\link{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}}. -#' @return \code{ds.unique} returns the vector of unique R objects which are written to the server-side. -#' @examples -#' \dontrun{ -#' # 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") -#' builder$append(server = "study3", -#' url = "http://192.168.56.100:8080/", -#' user = "administrator", password = "datashield_test&", -#' table = "CNSIM.CNSIM3", driver = "OpalDriver") -#' logindata <- builder$build() -#' -#' connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") -#' -#' # Create a vector with combined objects -#' ds.unique(x.name = "D$LAB_TSC", newobj = "new.vect", datasources = connections) -#' -#' # Clear the Datashield R sessions and logout -#' datashield.logout(connections) -#' } -#' @author Stuart Wheater, DataSHIELD Development Team -#' @export -#' -ds.unique <- function(x.name = NULL, newobj = NULL, 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.name)) { - stop("x.name=NULL. Please provide the names of the objects to de-duplicated!", call. = FALSE) - } - - # create a name by default if user did not provide a name for the new variable - if (is.null(newobj)) { - newobj <- "unique.newobj" - } - - # call the server side function that does the job - cally <- call('uniqueDS', x.name) - DSI::datashield.assign(datasources, newobj, cally) - - # check that the new object has been created and display a message accordingly - finalcheck <- isAssigned(datasources, newobj) -} diff --git a/R/ds.var.R b/R/ds.var.R index 0a74d4eb..932cec8f 100644 --- a/R/ds.var.R +++ b/R/ds.var.R @@ -80,31 +80,47 @@ ds.var <- function(x=NULL, type='split', checks=FALSE, datasources=NULL){ ################################################################################################################# - #MODULE 1: IDENTIFY DEFAULT CONNECTIONS # + #MODULE 1: IDENTIFY DEFAULT CONNECTIONS # # look for DS connections # - if(is.null(datasources)){ # - datasources <- datashield.connections_find() # - } # + if(is.null(datasources)){ # + datasources <- datashield.connections_find() # + } # # - # ensure datasources is a list of DSConnection-class # + # 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 the input object!", call.=FALSE) - } - - # check if the input object is defined in all the studies - isDefined(datasources, x) - - # beginning of optional checks - the process stops and reports as soon as one check fails - if(checks){ + ##################################################################################### + #MODULE 2: SET UP KEY VARIABLES ALLOWING FOR DIFFERENT INPUT FORMATS # + if(is.null(x)){ # + stop("Please provide the name of the input vector!", call.=FALSE) # + } # + # the input variable might be given as a variable in a data frame (i.e. D$x) # + # or just as a vector not attached to a table (i.e. x) # + # we have to make sure the function deals with each case # + xnames <- extract(x) # + varname <- xnames$elements # + obj2lookfor <- xnames$holders # + ##################################################################################### - # check if the input object is defined in all the studies - isDefined(datasources, x) - + ############################################################################################### + #MODULE 3: GENERIC OPTIONAL CHECKS TO ENSURE CONSISTENT STRUCTURE OF KEY VARIABLES # + #IN DIFFERENT SOURCES # + # beginning of optional checks - the process stops and reports as soon as one # + #check fails # + # + if(checks){ # + message(" -- Verifying the variables in the model") # + # + # check if the input object(s) is(are) defined in all the studies # + if(is.na(obj2lookfor)){ # + defined <- isDefined(datasources, varname) # + }else{ # + defined <- isDefined(datasources, obj2lookfor) # + } # + # # call the internal function that checks the input object is suitable in all studies # varClass <- checkClass(datasources, x) # # the input object must be a numeric or an integer vector # @@ -115,7 +131,7 @@ ds.var <- function(x=NULL, type='split', checks=FALSE, datasources=NULL){ ############################################################################################### ################################################################################################### - #MODULE: EXTEND "type" argument to include "both" and enable valid alisases # + #MODULE 4: EXTEND "type" argument to include "both" and enable valid alisases # if(type == 'combine' | type == 'combined' | type == 'combines' | type == 'c') type <- 'combine' # if(type == 'split' | type == 'splits' | type == 's') type <- 'split' # if(type == 'both' | type == 'b' ) type <- 'both' # diff --git a/R/isDefined.R b/R/isDefined.R index a0206257..4a6cf60a 100644 --- a/R/isDefined.R +++ b/R/isDefined.R @@ -1,42 +1,41 @@ #' -#' @title Checks if the objects are defined in all studies +#' @title Checks if the objecs are defined in studies #' @description This is an internal function. #' @details In DataSHIELD an object included in analysis must be defined (i.e. exists) #' in all the studies. If not the process should halt. -#' @param datasources a list of \code{\link{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}}. -#' @param obj a character vector, the name of the object(s) to look for. -#' @param error.message a Boolean which specifies if the function should stop and return -#' an error message when the input object is not defined in one or more studies or to -#' return a list of TRUE/FALSE indicating in which studies the object is defined +#' @param datasources a list of \code{\link{DSConnection-class}} objects obtained after login. If the +#' the default set of connections will be used: see \link{datashield.connections_default}. +#' @param obj a character vector, the name of the objects to look for. #' @keywords internal -#' @return returns an error message if \code{error.message} argument is set to TRUE (default) -#' and if the input object is not defined in one or more studies, or a Boolean value if -#' \code{error.message} argument is set to FALSE. -#' @author Demetris Avraam for DataSHIELD Development Team +#' @return a boolean vector. #' -isDefined <- function(datasources=NULL, obj=NULL, error.message=TRUE){ +isDefined <- function(datasources=NULL, obj=NULL){ + stdnames <- names(datasources) + + inputnames <- c() inputobj <- unlist(obj) - - for(i in 1:length(inputobj)){ - - extractObj <- extract(inputobj[i]) - - if(is.na(extractObj$holders)){ - cally <- call('exists', extractObj$elements) - out <- DSI::datashield.aggregate(datasources, cally) - }else{ - dfname <- as.name(extractObj$holders) - cally <- call('exists', extractObj$elements, dfname) - out <- DSI::datashield.aggregate(datasources, cally) - } - - if(error.message==TRUE & any(out==FALSE)){ - stop("The input object ", inputobj[i], " is not defined in ", paste(names(which(out==FALSE)), collapse=", "), "!" , call.=FALSE) + for(i in 1:length(inputobj )){ + chnames <- extract(inputobj[i]) + if(is.na(chnames[[1]])){ + inputnames <- append(inputnames, chnames[[2]]) }else{ - return(out) + inputnames <- append(inputnames, chnames[[1]]) } } + + myObjects <- inputnames + results <- c() + for(i in 1:length(myObjects)){ + cally <- call('exists', myObjects[i]) + x <- DSI::datashield.aggregate(datasources, cally) + results <- append(results, mean(unlist(x))) + } + if(mean(results) != 1){ + idx <- which(results == FALSE) + stop("The input object(s) ", paste(myObjects[idx],collapse=", ")," is(are) not defined on one or more of the studies!", call.=FALSE) + }else{ + return(TRUE) + } + } diff --git a/R/secure.global.ranking.md b/R/secure.global.ranking.md deleted file mode 100644 index e53ff0f2..00000000 --- a/R/secure.global.ranking.md +++ /dev/null @@ -1,87 +0,0 @@ -Additional information detailing the cluster of functions that enable secure global ranking and estimation of key global quantiles. -=================================================================================================================================== - -This functionality is based on two pivotal clientside functions: ds.ranksSecure and ds.extractQuantiles -------------------------------------------------------------------------------------------------------- - -**ds.ranksSecure** is a clientside function which calls a series of other clientside and serverside functions to securely generate the global ranks of a numeric vector "V2BR" (vector to be ranked) in order to set up analyses on V2BR based on non-parametric methods, for some types of survival analysis and to derive key global quantiles (e.g. the median, lower (25%) and upper (75%) quartiles, and the 95% and 97.5% quantiles) across all sources simultaneously. In general, these global quantiles are different to the equivalent quantiles calculated independently in each data source separately and then summarised by their mean or median across the data sources.. - -The ranking procedure progresses in a series of steps controlled by ds.ranksSecure and each step is enacted by a series of secondary functions which are a mixture of clientside and serverside aggregate (both assign and aggregate functions). The analytic steps are as follows: - -(1) The quantileMeanDS (serverside aggregate) function is called to generate the global mean of V2BR (mean.input.var) and a deliberately non-conservative estimate of its standard deviation (max.sd.input.var) in order to intelligently prime the first stage of the encryption process (see below). - -(2) The ds.dmtC2S (clientside) function returns the estimates of the global mean and standard deviation of V2BR to the serverside at each study. - -(3) The minMaxRandDS (serverside aggregate) function uses a pseudo-random procedure based on a non-identifiable and non-repeatable seed to create a "random" maximum value in each study that is **definitely more positive** (by an indeterminate amount) than the actual maximum of V2BR in that study and an equivalent random minimum that is **definitely more negative** than the actual minimum. These are returned to the clientside from each study and an algorithm embedded in the code of ds.ranksSecure identifies the maximum (most positive) maximum **across all studies** and the corresponding minimum minimum (most negative) **across all studies**. - -(4) The ds.dmtC2S (clientside) function returns the maximum maximum and minimum minimum to -the serverside so all studies share the same values. These will not now be used unless there is an explicit decision to declare missings (NAs) as high or low via the argument NA.manage ="NA.hi" or NA.manage = "NA.low" in which case the NAs in all studies will be replaced by the shared -maximum maximum (if NA.manage = "NA.hi") or the shared minimum minimum if NA.manage = "NA.low"). In the former case all NAs will appear as the highest ranked values in every study (with the same values and ranking in all studies), in the latter case they will be the lowest ranked values in all studies (but will again be the same in all studies). Please note that the precise values of the maximum maximum or minimum minimum do not matter (hence the effect of the analysis can precisely be replicated even though it invokes a non-repeatable seed (see above). This is because the actual analysis will ultimately be based on ranks and the top and bottom rankings related to the maximum maximum and the minimum minimum will always be the same regardless of the actual quantitative values of the maximum maximum and minimum minimum - -(5) This is one of the most fundamental steps. In it, the blackBoxDS (serverside assign) function is called with a series of the key arguments specified in the original call to ds.ranksSecure (see details of parameters in the function header) or else referring to objects newly created by the serverside functions described above. These arguments include: input.var.name, max.sd.input.var, mean.input.var, shared.seedval=shared.seed.value, synth.real.ratio, and NA.manage=NA.manage). The function blackBoxDS first generates a set of randomly synthesised pseudo-data that span -the distribution of the real data, but with substantial overlap,. The number of pseudo-observations generated is determined by the synth.real.ratio argument which defaults to 2, so twice as many pseudo data are generated in each study as there originally real data. - -If the original data are not real but rounded to a given precision, blackBoxDS identifies the predominant form of rounding eg integers, tens, thousands, 0.001, 0.1 etc. Then rather than generating synthetic data at complete random (ie in double precision), blackBoxDS instead generates a vector of appropriately rounded terms: eg if the predominant rounding is tens, part of the random rounding vector may be something like …. 50,-30,0,100,40,90,-80 .... . The corresponding vector of synthetic data is then obtained by adding a random sample of the original data (in an indeterminate random order) to the random rounding data. Thus, if a sample of the original real data is ….. 10,20,‑60,0,30.23,-60,120.4 ... and the random rounding vector is as above, the relevant component of the resultant synthetic data will be … 60,-10,-60,100,70.23,30,40.4 ... . This approach ensures the nature of the rounding in the synthetic data is broadly the same as in the original data. This is important because the degree of rounding influences the number of ties expected and if (in an illustrative extreme setting) the original data were all integers while the synthetic data were double-precision, most ties (even after encryption) would be identifiable as real data. This is a crucial strategy to mitigate disclosure risk in the step when encrypted original and synthetic data are co-located on the client server (see below) - -Next, blackBoxDS uses the global estimates of mean and standard deviation (as described above) to approximately (but deliberately not precisely) centralise the real- and pseudo- data. Next, blackBoxDS sequentially applies 7 rounds of transformation to both the real and pseudo data. With data held in either double precision or any level of rounding every transformation algorithm faithfully maintains the rank order of the data. The first algorithm simply applies a probit transformation which converts the original approximately centralised real and pseudo data from values typically running from -k through 0 up to +k to proportions which are all strictly greater than 0 and less than 1. This is not strictly encryption because it is a known deterministic transformation that could easily be reversed but it sets up the data in a way that makes it easy to ensure that a range of encrypting transformations can then be applied that will definitely maintain the original rank order and cannot be replicated without knowing the order in which the transforming functions were applied and the value of the random parameters with which each transformation is associated. - -To be specific, the next 6 rounds of encryption each invoke one of three monotonic functions with a single randomly selected parameter (lambda) associated with each transformation. Each value of lambda is drawn (independently) from a pseudo-random uniform(0.0001,1) distribution. So if the current element of the variable being transformed is x[i] the transformed value is obtained as x[i+1]<- x[i]^lambda (under algorithm 1); x[i+1]<- x[i]+lambda (under algorithm 2); and x[i+1]<- x[i]*lambda (under algorithm 3). The three algorithms are each applied twice in the block of six, but their order of application is randomly selected as well as the values of lambda. The randomisation process generating the values of lambda and the order of sequential application of the three algorithms is initialised via a seed shared across the different studies so each study applies the various algorithms in the same order with the same lambda as all the other studies. - -At present this shared seed is simply determined by the argument . Even knowing that seed it would be exceedingly difficult to recover the original starting values of the input.var without having direct access to the real data on a server. This is because although the process generating the random order of the transformation procedures and the values of lambda for each transformation are the same in each study (initialised by the shared seed), the procedure leading to random generation of the pseudo-data is deliberately different in each study (the shared seed being first modified by a function that depends on the precise numeric characteristics of the variable being ranked [V2BR], before the randomisation sequence is started). This makes it more -difficult for the analyst (working on the DataSHIELD client) to distinguish between encrypted real and encrypted pseudo-observations when they are transferred to the client (see below). Furthermore, when (at the very end of the running of ds.rankSecure) the encrypted real data appear alone on the client server (also see below) the data will first have been through a procedure that converts encrypted real values to ranks and encrypted ranks and this makes reverse engineering -near impossible even knowing the shared seed. However, to increase security yet further in the immediate future we will be implementing a new function (already prototyped) that allows a number (the shared seed) to be securely shared across the studies without the client analyst being able to infer its value, even in theory. - -Before moving to the next main step in the function (where data are transferred to the client) blackBoxDS checks that the ranks in the original data, the probit transformed data and the data following each of the six rounds of random transformation are all identical. This means the ranks, -including ties in the ranks are precisely the same for all of these eight vectors, in all studies. If they -are not the same a message is returned that suggests that, amongst other information, suggests you might try a different shared random seed. This is in case some exceedingly unlikely transformation has led to, for example, an NA. To date no example has arisen where this has happened. If it repeatedly fails despite using different seeds, it suggests there is something more fundamentally wrong with the data or analysis code which should be explored and corrected. Finally, blackBoxDS writes the key components of its output to a data.frame called **"blackbox.output.df"** on the server side. This contains 8 columns in each study: column 1 = vector containing all original real values and synthesised values in the given study; column 2 = the equivalent vector containing values after all 7 seven rounds of transformation are complete; column 3 = the ranks of values in column 1 but as the data frame is sorted (ascending) by the values in column 1, it simply runs 1:Ns where Ns is the total number of real and synthetic values in the given study; column 4 = ranks of column 2 which also runs 1:Ns because of the sorting of the data frame; column 5 holds the original sequential IDs for the data vector consisting of values 1:Ns ordered in alignment with a vector containing all real values of input.var in their original order stacked over all synthetic values in their order of synthesis. The values 1:Ns in column 5 appear in a haphazard order, but by by re-sorting based on column 5 all of -the data frame values relating to the real data and synthetic data can easily be separated and extracted in their original order; column 6 is a vector of 0s and 1s denoting whether each row relates to a real value or a synthetic value; column 7 is the same as column 3 and 4 (ie 1:Ns) but it is called “ID.by.val” and can be used as the basis for re-sorting the data.frame back to value order (ascending) based on column 1 if it has been temporarily re-sorted to a different order. Please note , columns 3, 4 and 7 are technically redundant and it is possible that only column 7 will be kept in later versions of this function; column 8 is called SOURCE.ID which is a vector in which all elements take the value s in study s, where s denotes that the specified study is the sth listed study amongst the datasources used. - -(6) Next the ranksSecureDS1(serverside aggregate) function extracts columns 2 and 7 of the serverside data frame **"blackbox.output.df"** and transmits them to the clientside. These -are the 7-fold transformed ('final-encrypted') original and synthetic values from each study in ascending order and the 1:Ns IDs sitting beside them. Although they carry equivalent information pertaining to ranking as the original real/synthesised data their encryption ensures they are non-disclosive, and it is in any case impossible to separate the real and synthetic data. - -Code in ds.ranksSecure next takes the 2 column data frame consisting of the final-encrypted values and values 1:Ns from study s and adds an extra column consisting solely of the value s. These three column study-specific data frames from each study are then stacked using the rbind() function. The resultant data frame is then reordered based on the global ranks of column 1 and a fourth column is added with values 1:M where M is the sum of the number of real and synthetic values (Ns) across all studies s combined. This fourth column therefore holds the global ranks of the original values of input.var (the input variable) across all studies as well as the intervening global ranks for the synthetic data. Ranks are modified as would be expected if there are ties: eg if a short vector to be ranked was c(10,3,8,3,2) it would generate ranks c(5,2.5,4,2.5,1). - -The function ds.ranksSecure next creates a subset of the 4 column data frame for each study s. This contains values from study s only by selecting rows in which there is a values of s in column 3. - -(7) The ds.dmtC2S (clientside) function then returns each of the 4 column study-specific data frames (to be called sR4.df on the server) to the corresponding serverside for study s. It should be noted that each of these data frames is still in the original order (1:Ns) based on ascending sorting of the original input variable (real and synthetic) in study s which is also - by definition - in the order of the corresponding global ranks across ALL studies. Because the variable (numstudies) which denotes the number of studies, which was used earlier, has been lost as serverside functions are called, run, and closed the ds.dmtC2S (clientside) function is also used to retransmit the value of numstudies to the serverside. - -(8) Next the ranksSecureDS2 (serverside assign) is used to cbind the **blackbox.output.df** data frame to **sR4.df** in each study and then to select just the rows with real (rather than synthetic) data. Because of the original sort (ascending) by the value of the encrypted input.var, blackbox.output.df and sR4.df in any given study have the same number of rows in the same order. In effect, this means that ranksSecureDS2 might most simply be viewed as stamping the global ranks on to **blackbox.output.df** and restricting the resultant data frame to include only the rows corresponding to real data. This is written as the data frame **"sR5.df"** on to the serverside for each separate study, and this forms the basis of the next major component of the ranking analysis. Note that at this stage, the global ranks (based on real and synthetic data) of all the real data are in precisely the same order as their equivalent global ranks would be if they were based solely on the real data. But the numeric value of the actual ranks will in general differ in the two settings (see below). - -(9) The key component of **sR5.df** is the vector of global ranks in column 9 which is designated **sR5.df$global.rank**. The next step in analysis is based on a modified version of blackBoxDS (called blackBoxRankDS, which is also a serverside assign function). The input.var to this modified function is now declared as **sR5.df$global.rank** and blackBoxRankDS undertakes multiple rank-consistent transformations of this input variable in an equivalent way to blackBoxDS when applied to the original input.var. Following the transformation procedure the global ranks become one of the key components of a data frame designated blackbox.ranks.df that still remains in the order of the earlier processing steps (ascending on value of input.val, with any ties left in the same order as before). - -Unlike the blackBoxDS function, blackBoxRanksDS does not generate any synthetic data. This means that when the encrypted ranks are transferred to the clientside in the next step, they are not obscured by any pseudo-data. But, because these are encrypted ranks, not encrypted quantitative values, even if someone could reverse engineer the encryption all they would get are ranks rather than actual values (and in principle we already know that the ranks 1:M [incorporating possible ties] exist across all the studies and deriving the actual ranks by reverse engineering would tell a hacker nothing particularly disclosive about the original values of real data. The use of ranks rather than quantitative values would not have been possible when the original encrypted values were transmitted to the clientside (see step 6) because in order to globally rank the data it was at some stage necessary for (encrypted) quantitative values to be compared from all studies simultaneously. If only study-specific ranks had been transferred to the clientside all we would know would be that the ranks in each study ran from 1:Ns and it would be impossible to know, for example, whether the actual quantitative value corresponding to a given rank in one study was the same, higher or lower than the value corresponding to the same rank in another study. - -(10) The next step referred to under step nine is based on the ranksSecureDS3 (serverside aggregate) function. This extracts the column of encrypted global ranks from **blackbox.ranks.df** and -cbinds them to an ID vector 1:NRs (where NRs is the original number of real - not real+synthetic - observations in study s). This means that even tied ranks have unique ID values for re-sorting and checking the quality of linkage etc. The function ranksSecureDS3 also cbinds a studyid vector (all elements having the same value, s) to the encrypted global ranks vector and the ID vector. The resultant data frames from each study are copied into the clientside and then stacked across all studies using the rbind() function and the combined data frame is sorted by the encrypted -global ranks. A new global.real.rank is then allocated using the R's standard ranking function: global.real.rank <- rank(global.rank). In essence this converts the original global ranks (which were based on ranking the data including both real and synthetic data (and so ran sequentially from 1:M [with appropriate allocation for ties]) into new global ranks based only on the real data. These run from 1:MR where MR = the sum of NRs over all studies s. These two sets of ranks have precisely the same order, but the original range of real + synthetic ranks contains many values that are absent from the global.real.rank vector and so the numeric values of the two sets of ranks differ. - -(11) As before (see step 7) the ds.dmtC2S (clientside) function is now used to return the key information in the clientside data frame to the serverside. The key information includes the encrypted global ranks (the global.real.ranks vector) and the studyid vector. Only rows where studyid=s are passed to the serverside in study s. In addition, by dividing the global.real.ranks by the total number of real observations across all studies (ie MR) an extra column is created called global.real.quantile. Together these three vector form a data frame called "global.ranks.quantiles.df" which is what ds.dmtC2S actually passes to the serverside. - -(12) The global.ranks.quantiles.df data frame returned to each study is still ordered by the value of the original real input.var data (ascending) – i.e. with the same order and the same number of rows as **blackbox.ranks.df** at the end of step 10 . In the current step, the ranksSecureDS4 (serverside Assign) function cbinds the serverside data frame blackbox.ranks.df to the global.ranks.quantiles.df data frame. This combined data frame is then sorted either by the quantitative value of the original input data (ascending) – i.e. the order is left unchanged from that of **blackbox.ranks.df** - or by the order of the original sequential ID applied to the real values of input.var - ie in the same order as the original real data. Which of these two sort orders is applied is determined by the argument in ds.ranksSecure which can take the value "ID.orig" or "vals.orig". The former results in a data frame in the same order as the original input data, the latter in a data frame in which the absolute magnitude of the original input.var and corresponding ranks -increase consistently down the data frame. Regardless how it is sorted, this data frame is then written to the serverside as the data frame output.ranks.df, which can be named as desired by the character string associated with the argument . - -(13) Next, ranksSecureDS5 (serverside assign function) takes the comprehensive data frame -output.ranks.df and creates a new object summary.output.ranks.df (for which a desired name can be specified by the character string associated with the argument ). This summary data frame contains only the most essential elements of the final ranking output. To be specific, in each study s, this consists of five columns: [1] ID.seq.real.orig, contains the values of the original sequential ID for the input data in study s. This will run sequentially from 1:NRs if ranks.sort.by = "ID.orig". On the other hand, It will generally appear haphazard if ranks.sort.by = "vals.orig"; [2] input.var.real.orig, contains the values of the original (real) values -of input.var in study s. These will be in increasing order if ranks.sort.by="vals.orig" but the order will be the same as in the original input data if ranks.sort.by="ID.orig"; [3] final.ranks.global, contains the global ranks (i.e. based upon the real data values across ALL studies) that correspond to the values in input.var.real.orig and will therefore be in order of increasing value if ranks.sort.by = "vals.orig" but will typically appear haphazard if ranks.sort.by = "ID.orig"; [4] final.quantiles.global, -contains the quantile values corresponding to the final.global.ranks held in column 3. In association with column 2, these may now be used to estimate the true data values corresponding to key quantiles (across all studies) such as the median, quartiles and 5% and 95%; [5] studyid, all elements take the value s in study s. **The data frame summary.output.ranks.df** which is written to the serverside server at each study (and contains the ranking data relating only to that study) may be viewed as the primary output from the whole ranking procedure. All other outputs from the analysis (including the more comprehensive data frame output.ranks.df) are tidied up by deletion at the end of the running of the function unless ds.ranksSecure’s argument rm.residual.objects is set to FALSE. - -(14) All or selected columns from the summary.output.ranks.df data frame can now be cbinded to the original input.var variable or to the data frame from which input.var was obtained in order to add its corresponding global ranks or global quantiles. These ranks can form the basis of a wide range of non-parametric analyses - -**ds.extractQuantiles** -(15) In addition to undertaking a standard non-parametric analysis based on the ranks generated by ds.ranksSecure, what is also sometimes needed is to calculate and quote the actual values (in V2BR) for key quantiles across all studies. This is enabled by the client function ds.extractQuantiles which is called at the end of ds.ranksSecure. - -(16) Given that we have calculated the global quantile corresponding to every observation in every study, it would appear that this procedure should be straightforward. But, in practice, there is a challenge. Specifically, If we wish to calculate, for example, the global median, then based on the serverside information in a study in which the summary.output.ranks.df data frame contains a value of precisely 0.500 in the final.quantiles.global column we can infer that the true global median is the corresponding element in the input.var.real.orig column reflects. But, in a study in which the vector final.values.quantile does not contain the precise value 0.500 the global median will be indeterminant. Similarly, if the true median actually falls at a value in the middle of a large tied cluster, it is conceivable it could take the quantile value 0.49 or 0.52 in several studies and no study will contain a final.values.quantile of 0.500. So if all studies (and the client) are to have access to all the key quantile values, we need to identify these key values in a more sophisticated way. - -(17) One of the arguments for ds.secureRanks is this identifies the key quantile estimates to be estimated and returned. The broadest range is selected -by quantiles.for.estimation="0.025-0.975". This indicates estimation of the following quantiles:c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50,0.60, 0.6667,0.70,0.75,0.80,0.90,0.95,0.975). The alternative allowable options for the argument all represent narrower subsets of these values (see below for information about the parameter: quantiles.for.estimation). Two serverside aggregate functions (extractQuantilesDS1 and then extractQuantilesDS2) sequentially process the information in the -summary.output.ranks.df data frame to generate the precise values of the input.var that correspond to each of the selected key quantile values, and these values are then available to the client because they are generated by an aggregate function and the final results are also written to each data server as the data frame final.quantile.df which contains two columns. The first of these is the vector evaluation.quantiles which lists all of the key quantile values targeted by the argument while the second is final.quantile.vector which contains the precise values of input.var that correspond to the key quantiles in the first column. - -The precise values in final.quantile.vector are identified in a two stage process (hence the two serverside functions). The first function (extractQuantilesDS1) identifies the lowest value of final.quantiles.global in each study that lies at or above each key target quantile value in the evaluation.quantiles vector. For convenience, these may be called: min.at.or.above.key.value_t,s for target quantile t in study s. The function extractQuantilesDS1 also identifies max.at.or.below.key.value_t,s which is the corresponding maximum value in study s at or below the target value. These vectors are sent to the client which identifies, for each target value, the minimum value of min.at.or.above.key.value_t,s across all studies and the studies in which -that value falls. Similarly, the max value of max.at.or.below.key.value_t,s across all studies is also estimated. Please note, that it is possible that in relation to any given threshold t, these values may appear once in different studies, and either or both can appear in several (or even all) studies. But that doesn’t matter. Wherever the minimum minimum or maximum maximum value for a given -threshold sits the corresponding value of input.input var is identified and recorded. Whenever one of these values occurs multiple times, we simply take the mean of the corresponding values of input.var which are, by definition, all the same and so the mean is the same as any individual value. - -This process results in a list of two input.var values that span each threshold. One is the minimum -minimum value of the values that lie at or above the threshold and the other is the maximum maximum of the values that lie below the threshold. We then take the mean of these two values and that is declared as the value of input.var that corresponds to the particular threshold of interest. If the data are such that the precise value of the threshold appears somewhere in the final.quantiles.global column of at least one study (e.g. 0.500 for the median or 0.750 for the upper quartile) the input.var values corresponding to the minimum minimum and maximum maximum values are the same and both precisely equal to the value required for that given quantile. So their mean is clearly the correct value. If the precise value for the required quantile does not appear in -the final.quantiles.global column in any study, then the required value of the input.var corresponding to the required threshold is derived as the mean of the closest two values on either side of the threshold regardless which studies they actually fall in. From a heuristic perspective this would appear to be a reasonable approach to estimating a value for a required quantile whenever it falls between two different values. - -At this point a data frame is created called **final.quantile.df** in which the first column is the vector of quantile values to be estimated as indicated by the argument and the second column is the vector of input.var values that correspond to those values based on the methods described above. This is the primary output from ds.extractQuantile and so is not deleted even if ds.ranksSecure’s argument rm.residual.objects is set to TRUE (the default). diff --git a/README.md b/README.md index 936e913c..a1dcf4a1 100644 --- a/README.md +++ b/README.md @@ -3,31 +3,35 @@ dsBaseClient DataSHIELD client side base R library. + + + | Branch | dsBase status | dsBase tests | dsBaseClient status | dsBaseClient tests | | -------- | ------------- | ------------ | ------------------- | ------------------ | -| Master | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=master)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=3&branchName=master) | | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=master)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=master) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/master/latest/) | -| 6.0 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.0)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=3&branchName=v6.0) | | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.0)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.0) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.0/latest/) | -| 6.0.1 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.0.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=3&branchName=v6.0.1) | | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.0.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.0.1) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.0.1/latest/) | -| 6.1 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=3&branchName=v6.1) | [Tests](https://datashield.github.io/testStatus/dsBase/v6.1/latest/) | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.1) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.1/latest/) | -| 6.1.1 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.1.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=3&branchName=v6.1.1) | [Tests](https://datashield.github.io/testStatus/dsBase/v6.1.1/latest/) | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.1.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.1.1) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.1.1/latest/) | -| 6.2 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.2)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=3&branchName=v6.2) | [Tests](https://datashield.github.io/testStatus/dsBase/v6.2/latest/) | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.2)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.2) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.2/latest/) | +| Master | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=master)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=master) | | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=master)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=master) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/master/latest/) | +| 6.0 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.0)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.0) | | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.0)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.0) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.0/latest/) | +| 6.0.1 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.0.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.0.1) | | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.0.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.0.1) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.0.1/latest/) | +| 6.1 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.1) | [Tests](https://datashield.github.io/testStatus/dsBase/v6.1/latest/) | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.1) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.1/latest/) | +| 6.1.1 | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.1.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.1.1) | [Tests](https://datashield.github.io/testStatus/dsBase/v6.1.1/latest/) | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.1.1)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.1.1) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.1.1/latest/) | +| v6.2-dev | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBase?branchName=v6.2-dev)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.2-dev) | [Tests](https://datashield.github.io/testStatus/dsBase/v6.2-dev/latest/) | [![Build Status](https://dev.azure.com/datashield-testing/datashield/_apis/build/status/datashield.dsBaseClient?branchName=v6.2-dev)](https://dev.azure.com/datashield-testing/datashield/_build/latest?definitionId=1&branchName=v6.2-dev) | [Tests](https://datashield.github.io/testStatus/dsBaseClient/v6.2-dev/latest/) | [![License](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.html) + + + About ===== -DataSHIELD is a software package which allows you to do non-disclosive federated analysis on sensitive data. Our website (https://www.datashield.org) has in depth descriptions of what it is, how it works and how to install it. A key point to highlight is that DataSHIELD has a client-server infrastructure, so the dsBase package (https://github.com/datashield/dsBase) needs to be used in conjuction with the dsBaseClient package (https://github.com/datashield/dsBaseClient) - trying to use one without the other makes no sense. - -Detailed instructions on how to install DataSHIELD are at https://www.datashield.org/wiki. +DataSHIELD is a software package which allows you to do non-disclosive federated analysis on sensitive data. Our website (https://www.datashield.ac.uk) has in depth descriptions of what it is, how it works and how to install it. A key point to highlight is that DataSHIELD has a client-server infrastructure, so the dsBase package (https://github.com/datashield/dsBase) needs to be used in conjuction with the dsBaseClient package (https://github.com/datashield/dsBaseClient) - trying to use one without the other makes no sense. -Discussion and help with using DataSHIELD can be obtained from The DataSHIELD Forum https://datashield.discourse.group/ +Detailed instructions on how to install DataSHIELD are at https://www.datashield.ac.uk/wiki. The code here is organised as: -The code here is organised as: | Location | What is it? | | ---------------------------- | ------------| | obiba CRAN | Where you probably should install DataSHIELD from. | | releases | Stable releases. | | master branch | Mostly in sync with the latest release, changes rarely. | +| v6.2-dev branch (or similar) | Bleeding edge development. We make no claims that this branch is fully functional at any given time. | diff --git a/_pkgdown.yml b/_pkgdown.yml deleted file mode 100644 index 4c98f6e5..00000000 --- a/_pkgdown.yml +++ /dev/null @@ -1,3 +0,0 @@ -template: - params: - bootswatch: simplex diff --git a/armadillo_azure-pipelines.yml b/armadillo_azure-pipelines.yml deleted file mode 100644 index 192bf470..00000000 --- a/armadillo_azure-pipelines.yml +++ /dev/null @@ -1,642 +0,0 @@ -######################################################################################### -# DataSHIELD Azure test suite. -# Starts with a vanilla Armadillo docker composition, installs dsBase -# and dsBaseClient (as well as dependencies - including a fully functional -# Armadillo server). -# Does checks and tests then saves results to testStatus repo. -# -# Inside the root directory $(Pipeline.Workspace) will be a file tree like: -# /dsBaseClient <- Checked out version of datashield/dsBaseClient -# /testStatus <- Checked out version of datashield/testStatus -# /logs <- Where results of tests and lots are collated -# -# As of May 2020 this takes ~ 70 mins to run. -# As of Nov 2020 this takes ~ 120 mins to run. -# As of Mar 2024 this takes ~ 300+ mins to run! -# As of Mar 2024 this takes ~ 300+ mins to run! -# As of Jun 2024 this takes ~ 360+ mins to run! -# -# The only things that should ever be changed are the repo branches in the resources. -# -######################################################################################### - - -##################################################################################### -# These should all be constant, except test_filter. This can be used to test subsets -# of test files in the testthat directory. Options are like: -# '*' <- Run all tests -# 'ds.asNumeric*' <- Run all ds.asNumeric tests, i.e. all the arg, smk etc tests. -# '*_smk_*' <- Run all the smoke tests for all functions. -variables: - datetime: $[format('{0:yyyyMMddHHmmss}', pipeline.startTime)] - repoName: $(Build.Repository.Name) - projectName: 'dsBaseClient' - branchName: $(Build.SourceBranchName) - test_filter: '*' - _r_check_system_clock_: 0 - - -######################################################################################### -# Need to define all the GH repos and their access tokens, see: -# https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml -resources: - repositories: - - repository: testStatusRepo - type: github - endpoint: datashield-testing - name: datashield/testStatus - ref: master - - -######################################################################################### -# When and under what condition to run the pipeline. -schedules: - - cron: "0 0 * * 0" - displayName: Weekly build - master - branches: - include: - - master - always: true - - cron: "0 2 * * *" - displayName: Nightly build - v6.3.1-dev - branches: - include: - - v6.3.1-dev - always: true - -######################################################################################### -# Jobs - -jobs: -- job: build_and_run_tests - timeoutInMinutes: 360 - pool: - vmImage: ubuntu-22.04 - - steps: - ##################################################################################### - # Checkout the source code to a subfolder. - # This may give an error in the logs like: - # [warning]Unable move and reuse existing repository to required location - # This is an Azure bug - https://github.com/microsoft/azure-pipelines-yaml/issues/403 - - checkout: self - path: 'dsBaseClient' - - - checkout: testStatusRepo - path: 'testStatus' - persistCredentials: true - condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) - - - ##################################################################################### - # The MySQL install that comes with the VM doesn't seem compatable with our set up - # so we delete it. - # If previous steps have failed then don't run. - - bash: | - - # Work-around for tempory Bazel's apt repository issue. - curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - - - # Purge the default mysql installed on the VM as it is incompatible with our stuff. - sudo service mysql stop - sudo apt-get update - sudo apt-get remove --purge mysql-client mysql-server mysql-common -y - sudo apt-get purge mysql-client mysql-server mysql-common -y - sudo apt-get autoremove -y - sudo apt-get autoclean -y - sudo rm -rf /var/lib/mysql/ - - displayName: 'Uninstall default MySQL' - condition: succeeded() - - - ##################################################################################### - # The Azure VMs have 2 CPUs, so configure R to use both when compile/install packages. - # If previous steps have failed then don't run. - - bash: | - - echo "options(Ncpus=4)" >> ~/.Rprofile - - displayName: 'Tweak local R env using .Rprofile' - condition: succeeded() - - - ##################################################################################### - # Install R and all the dependencies dsBaseClient requires. - # If previous steps have failed then don't run. - - bash: | - - sudo apt-get update -qq - sudo apt-get install --no-install-recommends software-properties-common dirmngr - wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc - sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" - sudo apt-get upgrade -y - - sudo apt-get install -qq libxml2-dev libcurl4-openssl-dev libssl-dev libgsl-dev libgit2-dev r-base -y - sudo apt-get install -qq libharfbuzz-dev libfribidi-dev libmagick++-dev -y - sudo R -q -e "install.packages(c('devtools','covr'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('fields','meta','metafor','ggplot2','gridExtra','data.table','panelaggregation'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('DSI','DSOpal','DSLite'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('MolgenisAuth', 'MolgenisArmadillo', 'DSMolgenisArmadillo'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('DescTools','e1071'), dependencies=TRUE, repos='https://cloud.r-project.org')" - - sudo R -q -e "library('devtools'); devtools::install_github(repo='datashield/dsDangerClient', ref='6.3.1', dependencies = TRUE)" - - # XML grep for coverage report merging - sudo apt-get install -qq xml-twig-tools -y - - displayName: 'Install all dependencies for dsBaseClient' - condition: succeeded() - - - ##################################################################################### - # Check that the man files in the repo match what is in the function headers. i.e. has - # devtools::document() been run before commiting? - # If previous steps have failed then don't run. - # If this step fails still mark as failed, but don't stop the rest of the steps running. - - bash: | - - # Concatenate all the files in the man dir into one long string and md5sum it. - orig_sum=$(find man -type f | sort -u | xargs cat | md5sum) - - # Rebuild the documentation. - R -e "devtools::document()" - - # Concatenate all the files in the man dir into one long string and md5sum it. - new_sum=$(find man -type f | sort -u | xargs cat | md5sum) - - if [ "$orig_sum" != "$new_sum" ]; then - echo "Your committed manual files (man/*.Rd) are out of sync with the documentation in the R files." - echo "Run devtools::document() locally then commit again." - exit 1 - else - echo "Documentation up to date." - exit 0 - fi - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Check manual updated before being committed' - condition: succeeded() - continueOnError: true - - - ##################################################################################### - # Run devtools::check on the checked out source code. - # If previous steps have failed then don't run. - # If this step fails still mark as failed, but don't stop the rest of the steps running. - - bash: | - - R -q -e "library('devtools'); devtools::check(args = c('--no-examples'))" | tee azure-pipelines_check.Rout - grep --quiet "^0 errors" azure-pipelines_check.Rout && grep --quiet " 0 warnings" azure-pipelines_check.Rout && grep --quiet " 0 notes" azure-pipelines_check.Rout - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Devtools checks' - condition: succeeded() - continueOnError: true - - ##################################################################################### - # - # Armadillo phase - # - ##################################################################################### - - ##################################################################################### - # Deploy docker for Opal. - # If previous steps have failed then don't run. - - task: DockerCompose@1 - inputs: - action: Run Services - dockerComposeFile: ../dsBaseClient/docker-compose_armadillo.yml - projectName: dsbaseclient - qualifyImageNames: true - buildImages: true - abortOnContainerExit: true - detached: true - displayName: 'Install Armadillo servers (armadillo, rserver, minio)' - condition: succeeded() - - - ##################################################################################### - # Install test datasets. - # If previous steps have failed then don't run. - - bash: | - sleep 60 - - R -q -f "molgenis_armadillo-upload_testing_datasets.R" - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files - displayName: 'Install test datasets to Armadillo' - condition: succeeded() - - - ##################################################################################### - # Install dsBase. - # If previous steps have failed then don't run. - - bash: | - - 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.1-permissive.tar.gz" -X POST http://localhost:8080/install-package - sleep 60 - - docker container restart dsbaseclient_armadillo_1 - sleep 30 - - curl -u admin:admin -X POST http://localhost:8080/whitelist/dsBase - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Install dsBase to Armadillo' - condition: succeeded() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code. This is wrapped up with - # code coverage. The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. - # TODO: Why is DSLite needed for this to run?! - - bash: | - - # There is an issue with the way we are using packages. The wrapped up test command - # below fails in a way that implies that it is not installed. I cannot figure out - # why this is case. As a work around we can run some of the functions below. My - # best guess is that there is an implicit build or similar that happens. Although - # I cannot replicate that directly with build etc directly. - - sudo R --verbose -e 'devtools::check()' - - mkdir $(Pipeline.Workspace)/logs - - # run the coverage tool and output to coveragelist.csv - # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter - # R output and messages are redirected by sink() to test_console_output.txt - # junit reporter output is to test_results.xml - # - # "_-|arg-|smk-|datachk-|disc-|math-|expt-|expt_smk-" - # testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) - sudo R -q -e ' - library(covr); - dsbase.res <- covr::package_coverage( - type = c("none"), - code = c( - '"'"' - library(testthat); - output_file <- file("test_console_output_dsbase.txt"); - sink(output_file); - sink(output_file, type = "message"); - library(testthat); - junit_rep <- JunitReporter$new(file = "test_results_dsbase.xml"); - progress_rep <- ProgressReporter$new(max_failures = 999999); - multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - options("default_driver" = "ArmadilloDriver"); - testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) - '"'"' - ) - ); - base::saveRDS(dsbase.res, "test_results_dsbase.rds")' - - # display the test console output - cat test_console_output_dsbase.txt - - grep --quiet " FAIL 0 " test_console_output_dsbase.txt - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Code coverage and JUnit report output, with dsBase' - condition: succeeded() - - - ##################################################################################### - # Parse the JUnit file to see if there are any errors/warnings. If there are then - # echo them so finding bugs should be easier. - # This should run even if previous steps have failed. - - bash: | - - # Strip out when error and failure = 0 and count the number of times it does not. - issue_count=$(sed 's/failures="0" errors="0"//' test_results_dsbase.xml | sed 's/errors="0" failures="0"//' | grep --count errors=) - echo "Number of testsuites with issues: "$issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results_dsbase.xml | sed 's/errors="0" failures="0"//' | grep errors= > issues.log - cat issues.log - exit $issue_count - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Check for errors & Failures in JUnit file' - condition: succeededOrFailed() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code for discctrl reporting. - # The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. - #- bash: | - - # junit reporter output is to test_results_discctrl.xml - # sudo R -q -e ' - # library(testthat); - # output_file <- file("test_console_output_discctrl.txt"); - # sink(output_file); - # sink(output_file, type = "message"); - # junit_rep <- JunitReporter$new(file = "test_results_discctrl.xml"); - # progress_rep <- ProgressReporter$new(max_failures = 999999); - # multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - # options("default_driver" = "ArmadilloDriver"); - # testthat::test_package("$(projectName)", filter = "_-|discctrl-", reporter = multi_rep, stop_on_failure = FALSE)' - - # cat test_console_output_discctrl.txt - - # if [ -e test_results_discctrl.xml ]; then - # mv test_results_discctrl.xml $(Pipeline.Workspace)/logs - # else - # touch $(Pipeline.Workspace)/logs/test_results_discctrl.xml - # fi - - # workingDirectory: $(Pipeline.Workspace)/dsBaseClient - # displayName: 'discctrl report output' - # condition: succeededOrFailed() - - - ##################################################################################### - # Install dsDanger on Opal server - # If previous steps have failed then don't run - - bash: | - curl -u admin:admin http://localhost:8080/whitelist - - curl -u admin:admin -v -H 'Content-Type: multipart/form-data' -F "file=@dsDanger_6.3.1.tar.gz" -X POST http://localhost:8080/install-package - - docker container restart dsbaseclient_armadillo_1 - sleep 60 - - curl -u admin:admin -X POST http://localhost:8080/whitelist/dsDanger - - curl -u admin:admin http://localhost:8080/whitelist - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Install dsDanger package on Armadillo server' - condition: succeeded() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code. This is wrapped up with - # code coverage. The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. - - bash: | - - # See, 'Code coverage and JUnit report output' for issues with the approach and improvement needed. - sudo R --verbose -e 'devtools::check()' - - pwd - mkdir $(Pipeline.Workspace)/logs - - # run the coverage tool and output to coveragelist.csv - # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter - # R output and messages are redirected by sink() to test_console_output.txt - # junit reporter output is to test_results.xml - sudo R -q -e ' - library(covr); - dsdanger.res <- covr::package_coverage( - type = c("none"), - code = c( - '"'"' - library(testthat); - output_file <- file("test_console_output_dsdanger.txt"); - sink(output_file); - sink(output_file, type = "message"); - library(testthat); - junit_rep <- JunitReporter$new(file = "test_results_dsdanger.xml"); - progress_rep <- ProgressReporter$new(max_failures = 999999); - multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - options("default_driver" = "ArmadilloDriver"); - testthat::test_package("$(projectName)", filter = "__dgr-|datachk_dgr-|smk_dgr-|arg_dgr-|disc_dgr-|smk_expt_dgr-|expt_dgr-|math_dgr-", reporter = multi_rep, stop_on_failure = FALSE) - '"'"' - ) - ); - base::saveRDS(dsdanger.res, "test_results_dsdanger.rds")' - - # Merge coverage results - cat test_results_dsbase.txt test_results_dsdanger.txt > $(Pipeline.Workspace)/logs/test_console_output.txt - xml_grep --pretty_print indented --wrap "testsuites" --descr "" --cond "testsuite" test_results_dsbase.xml test_results_dsdanger.xml > test_results.xml - - # Create 'coveragelist.csv' - sudo R -q -e ' - library(covr); - dsbase.res <- base::readRDS("test_results_dsbase.rds") - write.csv( - coverage_to_list( - dsbase.res - ), - "coveragelist.csv" - )' - - # display the test console output - cat test_console_output_dsdanger.txt - - mv coveragelist.csv $(Pipeline.Workspace)/logs - mv test_results.xml $(Pipeline.Workspace)/logs - - grep --quiet " FAIL 0 " test_console_output_dsdanger.txt - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Code coverage and JUnit report output, with dsBase and dsDanger' - condition: succeeded() - - - ##################################################################################### - # Parse the JUnit file to see if there are any errors/warnings. If there are then - # echo them so finding bugs should be easier. - # This should run even if previous steps have failed. - - bash: | - - # Strip out when error and failure = 0 and count the number of times it does not. - issue_count=$(sed 's/failures="0" errors="0"//' test_results.xml | sed 's/errors="0" failures="0"//' | grep --count errors=) - echo "Number of testsuites with issues: "$issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results.xml | sed 's/errors="0" failures="0"//' | grep errors= > issues.log - cat issues.log - exit $issue_count - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Check for errors & Failures in JUnit file' - condition: succeededOrFailed() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code for bug reporting. - # The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. -# - bash: | - - # junit reporter output is to test_results_bug.xml - # sudo R -q -e ' - # library(testthat); - # output_file <- file("test_console_output_bug.txt"); - # sink(output_file); - # sink(output_file, type = "message"); - # junit_rep <- JunitReporter$new(file = "test_results_bug.xml"); - # progress_rep <- ProgressReporter$new(max_failures = 999999); - # multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - # options("default_driver" = "ArmadilloDriver"); - # testthat::test_package("$(projectName)", filter = "__bug-|datachk_bug-|smk_bug-|arg_bug-|disc_bug-|smk_expt_bug-|expt_bug-|math_bug-", reporter = multi_rep, stop_on_failure = FALSE)' - - # cat test_console_output_bug.txt - - # if [ -e test_results_bug.xml ]; then - # mv test_results_bug.xml $(Pipeline.Workspace)/logs - # else - # touch $(Pipeline.Workspace)/logs/test_results_bug.xml - # fi - -# workingDirectory: $(Pipeline.Workspace)/dsBaseClient -# displayName: 'Bug report output' -# condition: succeededOrFailed() - - - ##################################################################################### - # Parse the JUnit file to see if there are any errors/warnings. If there are then - # echo them so finding bugs should be easier. - # This should run even if previous steps have failed. - - bash: | - - # Strip out when error and failure = 0 and count the number of times it does not. - issue_count=$(sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep --count errors=) - echo "Number of testsuites with issues: "$issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep errors= > issues.log - cat issues.log - no_issue_count=$(sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep -v --count errors=) - echo - echo "Number of testsuites with no issues: "$no_issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep " no_issues.log - cat no_issues.log - exit 0 - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Bug summary report output' - condition: succeededOrFailed() - - ##################################################################################### - # Windup phase - ##################################################################################### - - ##################################################################################### - # Output some important version numbers to file. This gets added to the testStatus - # commit so it can be parsed and used on the status table. - - bash: | - - echo 'branch:'$(branchName) >> $(datetime).txt - echo 'os:'$(lsb_release -ds) >> $(datetime).txt - echo 'R:'$(R --version | head -n 1) >> $(datetime).txt - echo 'opal:'$(opal system --opal localhost:8443 --user administrator --password "datashield_test&" --version) >> $(datetime).txt - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Write versions to file' - condition: succeededOrFailed() - - - ##################################################################################### - # Checkout the testStatus repo, add the results from here, push back to GH. - # TODO: Automatically pull in better email/name info from somewhere. - # TODO: More debug info in commit message - - bash: | - - # Git needs some config set to be able to push to a repo. - git config --global user.email "you@example.com" - git config --global user.name "Azure pipeline" - - # This repo is checked out in detatched head state, so reconnect it here. - git checkout master - - # It is possible that other commits have been made to the testStatus repo since it - # was checked out. i.e. other pipeline runs might have finished. - git pull - - # Make the directories if they dont already exist - mkdir --parents logs/$(projectName)/$(branchName) - mkdir --parents docs/$(projectName)/$(branchName)/latest - - cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/ - cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/$(datetime).csv - - cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/ - cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/$(datetime).xml - - cp $(Pipeline.Workspace)/logs/$(datetime).txt logs/$(projectName)/$(branchName)/ - - # Run the script to parse the results and build the html pages. - # status.py JUnit_file.xml coverage_file.csv output_file.html local_repo_path remote_repo_name branch - source/status.py logs/$(projectName)/$(branchName)/$(datetime).xml logs/$(projectName)/$(branchName)/$(datetime).csv logs/$(projectName)/$(branchName)/$(datetime).txt status.html $(Pipeline.Workspace)/$(projectName) $(projectName) $(branchName) - - cp status.html docs/$(projectName)/$(branchName)/latest/index.html - git add logs/$(projectName)/$(branchName)/coveragelist.csv - git add logs/$(projectName)/$(branchName)/test_results.xml - git add logs/$(projectName)/$(branchName)/$(datetime).xml - git add logs/$(projectName)/$(branchName)/$(datetime).csv - git add logs/$(projectName)/$(branchName)/$(datetime).txt - git add docs/$(projectName)/$(branchName)/latest/index.html - - git commit -m "Azure auto test for $(projectName)/$(branchName) @ $(datetime)" -m "Debug info:\nProjectName:$(projectName)\nBranchName:$(branchName)\nDataTime:$(datetime)" - git push - exit 0 - - workingDirectory: $(Pipeline.Workspace)/testStatus - displayName: 'Parse test results' - condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) - - - ##################################################################################### - # Output the environment information to the console. This is useful for debugging. - # Always do this, even if some of the above has failed or the job has been cacelled. - - bash: | - - echo 'BranchName: '$(branchName) - echo 'ProjectName: '$(projectName) - echo 'RepoName: '$(repoName) - - echo -e "\n#############################" - echo -e "ls /: ######################" - ls $(Pipeline.Workspace) - - echo -e "\n#############################" - echo -e "lscpu: ######################" - lscpu - - echo -e "\n#############################" - echo -e "memory: #####################" - free -m - - echo -e "\n#############################" - echo -e "env: ########################" - env - - echo -e "\n#############################" - echo -e "Puppet version: #############" - /opt/puppetlabs/bin/puppet --version - /opt/puppetlabs/puppet/bin/r10k version - - echo -e "\n#############################" - echo -e "Rprofile: ###################" - cat $(Pipeline.Workspace)/dsBaseClient/.Rprofile - - echo -e "\n#############################" - echo -e "R installed.packages(): #####" - R -e 'installed.packages()' - - echo -e "\n#############################" - echo -e "R sessionInfo(): ############" - R -e 'sessionInfo()' - - sudo apt install tree -y - pwd - echo -e "\n#############################" - echo -e "File tree: ##################" - tree $(Pipeline.Workspace) - - displayName: 'Environment info' - condition: always() diff --git a/azure-pipelines.yml b/azure-pipelines.yml index faea6e89..c48e5e2c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,20 +1,17 @@ ######################################################################################### # DataSHIELD Azure test suite. -# Starts with a vanilla Opal docker composition, installs dsBase -# and dsBaseClient (as well as dependencies - including a fully functional -# Opal server). +# Starts with a vanilla Ubuntu VM, installs dsBase and dsBaseClient (as well as +# dependencies - including a fully functional Opal server). # Does checks and tests then saves results to testStatus repo. # # Inside the root directory $(Pipeline.Workspace) will be a file tree like: +# /datashield-infrastructure <- Checked out version of datashield/datashield-infrastructure # /dsBaseClient <- Checked out version of datashield/dsBaseClient # /testStatus <- Checked out version of datashield/testStatus # /logs <- Where results of tests and lots are collated # # As of May 2020 this takes ~ 70 mins to run. # As of Nov 2020 this takes ~ 120 mins to run. -# As of Mar 2024 this takes ~ 300+ mins to run! -# As of Mar 2024 this takes ~ 300+ mins to run! -# As of Jun 2024 this takes ~ 360+ mins to run! # # The only things that should ever be changed are the repo branches in the resources. # @@ -36,6 +33,7 @@ variables: _r_check_system_clock_: 0 + ######################################################################################### # Need to define all the GH repos and their access tokens, see: # https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml @@ -47,6 +45,12 @@ resources: name: datashield/testStatus ref: master + - repository: datashield-infrastructureRepo + type: github + endpoint: datashield-testing + name: datashield/datashield-infrastructure + ref: master + ######################################################################################### # When and under what condition to run the pipeline. @@ -58,20 +62,18 @@ schedules: - master always: true - cron: "0 2 * * *" - displayName: Nightly build - v6.3.1-dev + displayName: Nightly build - v6.2-dev branches: include: - - v6.3.1-dev + - v6.2-dev always: true -######################################################################################### -# Jobs - jobs: - job: build_and_run_tests - timeoutInMinutes: 360 + timeoutInMinutes: 150 pool: - vmImage: ubuntu-22.04 + vmImage: 'Ubuntu 16.04' + steps: ##################################################################################### @@ -82,18 +84,22 @@ jobs: - checkout: self path: 'dsBaseClient' + - checkout: datashield-infrastructureRepo + path: 'datashield-infrastructure' + - checkout: testStatusRepo path: 'testStatus' persistCredentials: true condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) + ##################################################################################### # The MySQL install that comes with the VM doesn't seem compatable with our set up # so we delete it. # If previous steps have failed then don't run. - bash: | - + # Work-around for tempory Bazel's apt repository issue. curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - @@ -105,7 +111,7 @@ jobs: sudo apt-get autoremove -y sudo apt-get autoclean -y sudo rm -rf /var/lib/mysql/ - + displayName: 'Uninstall default MySQL' condition: succeeded() @@ -115,7 +121,7 @@ jobs: # If previous steps have failed then don't run. - bash: | - echo "options(Ncpus=4)" >> ~/.Rprofile + echo "options(Ncpus=2)" >> ~/.Rprofile displayName: 'Tweak local R env using .Rprofile' condition: succeeded() @@ -126,25 +132,17 @@ jobs: # If previous steps have failed then don't run. - bash: | - sudo apt update -qq - sudo apt install --no-install-recommends software-properties-common dirmngr - wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc - sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" - -# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 -# sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu focal-cran40/" -# sudo add-apt-repository ppa:cran/libgit2 + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 + sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu xenial-cran40/" + sudo add-apt-repository ppa:cran/libgit2 sudo apt-get update sudo apt-get install -qq libxml2-dev libcurl4-openssl-dev libssl-dev libgsl-dev libgit2-dev r-base -y - sudo apt-get install -qq libharfbuzz-dev libfribidi-dev libmagick++-dev -y sudo R -q -e "install.packages(c('devtools','covr'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('fields','meta','metafor','ggplot2','gridExtra','data.table','panelaggregation'), dependencies=TRUE, repos='https://cloud.r-project.org')" + sudo R -q -e "install.packages(c('fields','metafor','ggplot2','gridExtra','data.table', 'panelaggregation'), dependencies=TRUE, repos='https://cloud.r-project.org')" sudo R -q -e "install.packages(c('DSI','DSOpal','DSLite'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('MolgenisAuth', 'MolgenisArmadillo', 'DSMolgenisArmadillo'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('DescTools','e1071'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "library('devtools'); devtools::install_github(repo='datashield/dsDangerClient', ref='6.3.1', dependencies = TRUE)" + sudo R -q -e "install.packages(c('DescTools','e1071'), dependencies=TRUE, repos='https://cloud.r-project.org')" # XML grep for coverage report merging sudo apt-get install -qq xml-twig-tools -y @@ -198,53 +196,30 @@ jobs: condition: succeeded() continueOnError: true - ##################################################################################### - # - # Opal phase - # - ##################################################################################### ##################################################################################### - # Deploy docker for Opal. - # If previous steps have failed then don't run. - - task: DockerCompose@1 - inputs: - action: Run Services - dockerComposeFile: ../dsBaseClient/docker-compose_opal.yml - projectName: dsbaseclient - qualifyImageNames: true - buildImages: true - abortOnContainerExit: true - detached: true - displayName: 'Install Opal servers (opal, rserver, mongodb)' - condition: succeeded() - - - ##################################################################################### - # Install test datasets. + # Install dsBase. This uses the datashield-infrastructure repo (and its dependencies) to do the install with puppet. # If previous steps have failed then don't run. - bash: | - sleep 60 - - R -q -f "obiba_opal-upload_testing_datasets.R" - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files - displayName: 'Install test datasets to Opal' - condition: succeeded() + # Set up puppet and r10k + wget -nv https://apt.puppetlabs.com/puppet6-release-xenial.deb + sudo dpkg -i puppet6-release-xenial.deb + sudo apt-get install -qq -f + sudo apt-get update + sudo rm -f puppet6-release-xenial.deb - ##################################################################################### - # Install dsBase. - # If previous steps have failed then don't run. - - bash: | - 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 = '6.3.1'); opal.logout(opal)" + sudo apt-get install puppet-agent -y + sudo /opt/puppetlabs/puppet/bin/gem install r10k - sleep 120 + pushd puppet/environments/datashield_azurepipelines + sudo /opt/puppetlabs/puppet/bin/r10k puppetfile install + popd - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)" + sudo /opt/puppetlabs/bin/puppet apply $(Pipeline.Workspace)/dsBaseClient/azure-pipelines_site.pp --environment datashield_azurepipelines --environmentpath puppet/environments - workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files - displayName: 'Install dsBase to Opal, as set disclosure test options' + workingDirectory: $(Pipeline.Workspace)/datashield-infrastructure + displayName: 'Install DataSHIELD server (opal, dsBase, etc)' condition: succeeded() @@ -258,13 +233,23 @@ jobs: - bash: | # There is an issue with the way we are using packages. The wrapped up test command - # below fails in a way that implies that it is not installed. I cannot figure out + # below fails in a way that implies that it is not installed. I cannot figure out # why this is case. As a work around we can run some of the functions below. My # best guess is that there is an implicit build or similar that happens. Although # I cannot replicate that directly with build etc directly. - sudo R --verbose -e 'devtools::check()' + # None of the below make the tests run + #sudo R -e 'devtools::reload(".")' + #sudo R -e 'library(dsBaseClient)' + #sudo R -e 'devtools::check_built()' + #sudo R --verbose -e 'devtools::build()' + # Any of the below makes the tests work. + #sudo R --verbose -e 'devtools::test()' + #sudo R --verbose -e 'devtools::install()' + sudo R --verbose -e 'devtools::check()' + + pwd mkdir $(Pipeline.Workspace)/logs # run the coverage tool and output to coveragelist.csv @@ -273,7 +258,6 @@ jobs: # junit reporter output is to test_results.xml # # "_-|arg-|smk-|datachk-|disc-|math-|expt-|expt_smk-" - # testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) sudo R -q -e ' library(covr); dsbase.res <- covr::package_coverage( @@ -288,8 +272,7 @@ jobs: junit_rep <- JunitReporter$new(file = "test_results_dsbase.xml"); progress_rep <- ProgressReporter$new(max_failures = 999999); multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - options("default_driver" = "OpalDriver"); - testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) + testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) '"'"' ) ); @@ -325,47 +308,27 @@ jobs: ##################################################################################### - # Essentially run devtools::test() on the checked out code for discctrl reporting. - # The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. - #- bash: | - - # junit reporter output is to test_results_discctrl.xml - # sudo R -q -e ' - # library(testthat); - # output_file <- file("test_console_output_discctrl.txt"); - # sink(output_file); - # sink(output_file, type = "message"); - # junit_rep <- JunitReporter$new(file = "test_results_discctrl.xml"); - # progress_rep <- ProgressReporter$new(max_failures = 999999); - # multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - # default_driver <- "OpalDriver"; - # testthat::test_package("$(projectName)", filter = "_-|discctrl-", reporter = multi_rep, stop_on_failure = FALSE)' - - # cat test_console_output_discctrl.txt + # Install dsDanger on server + # If previous steps have failed then don't run + - bash: | - # if [ -e test_results_discctrl.xml ]; then - # mv test_results_discctrl.xml $(Pipeline.Workspace)/logs - # else - # touch $(Pipeline.Workspace)/logs/test_results_discctrl.xml - # fi + sudo /opt/puppetlabs/bin/puppet apply $(Pipeline.Workspace)/dsBaseClient/azure-pipelines_site-dsdanger.pp --environment datashield_azurepipelines --environmentpath puppet/environments - # workingDirectory: $(Pipeline.Workspace)/dsBaseClient - # displayName: 'discctrl report output' - # condition: succeededOrFailed() + workingDirectory: $(Pipeline.Workspace)/datashield-infrastructure + displayName: 'Install dsDanger DataSHIELD package on server' + condition: succeeded() ##################################################################################### - # Install dsDanger on Opal server + # Install dsDangerClient. # If previous steps have failed then don't run - bash: | - 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, 'dsDanger', username = 'datashield', ref = '6.3.1'); opal.logout(opal)" + sudo R -q -e 'devtools::install()' + sudo R -q -e "library('devtools'); devtools::install_github(repo='datashield/dsDangerClient', ref='master', dependencies = TRUE)" workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Install dsDanger package on Opal server' + displayName: 'Install dsDangerClient DataSHIELD package' condition: succeeded() @@ -401,7 +364,6 @@ jobs: junit_rep <- JunitReporter$new(file = "test_results_dsdanger.xml"); progress_rep <- ProgressReporter$new(max_failures = 999999); multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - options("default_driver" = "OpalDriver"); testthat::test_package("$(projectName)", filter = "__dgr-|datachk_dgr-|smk_dgr-|arg_dgr-|disc_dgr-|smk_expt_dgr-|expt_dgr-|math_dgr-", reporter = multi_rep, stop_on_failure = FALSE) '"'"' ) @@ -412,6 +374,18 @@ jobs: cat test_results_dsbase.txt test_results_dsdanger.txt > $(Pipeline.Workspace)/logs/test_console_output.txt xml_grep --pretty_print indented --wrap "testsuites" --descr "" --cond "testsuite" test_results_dsbase.xml test_results_dsdanger.xml > test_results.xml + # Create 'coveragelist.csv' + # sudo R -q -e ' + # library(covr); + # dsbase.res <- base::readRDS("test_results_dsbase.rds") + # dsdanger.res <- base::readRDS("test_results_dsdanger.rds") + # write.csv( + # coverage_to_list( + # c(dsbase.res, dsdanger.res) + # ), + # "coveragelist.csv" + # )' + # Create 'coveragelist.csv' sudo R -q -e ' library(covr); @@ -461,31 +435,30 @@ jobs: # which are not default behaviour: output the results to a JUnit xml file, not stop # when a small number of errors have happened, run through the code coverage tool. # TODO: Tidy up variable names - use timestamps here. -# - bash: | + - bash: | # junit reporter output is to test_results_bug.xml - # sudo R -q -e ' - # library(testthat); - # output_file <- file("test_console_output_bug.txt"); - # sink(output_file); - # sink(output_file, type = "message"); - # junit_rep <- JunitReporter$new(file = "test_results_bug.xml"); - # progress_rep <- ProgressReporter$new(max_failures = 999999); - # multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - # options("default_driver" = "OpalDriver"); - # testthat::test_package("$(projectName)", filter = "__bug-|datachk_bug-|smk_bug-|arg_bug-|disc_bug-|smk_expt_bug-|expt_bug-|math_bug-", reporter = multi_rep, stop_on_failure = FALSE)' - - # cat test_console_output_bug.txt - - # if [ -e test_results_bug.xml ]; then - # mv test_results_bug.xml $(Pipeline.Workspace)/logs - # else - # touch $(Pipeline.Workspace)/logs/test_results_bug.xml - # fi + sudo R -q -e ' + library(testthat); + output_file <- file("test_console_output_bug.txt"); + sink(output_file); + sink(output_file, type = "message"); + junit_rep <- JunitReporter$new(file = "test_results_bug.xml"); + progress_rep <- ProgressReporter$new(max_failures = 999999); + multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); + testthat::test_package("$(projectName)", filter = "__bug-|datachk_bug-|smk_bug-|arg_bug-|disc_bug-|smk_expt_bug-|expt_bug-|math_bug-", reporter = multi_rep, stop_on_failure = FALSE)' + + cat test_console_output_bug.txt + + if [ -e test_results_bug.xml ]; then + mv test_results_bug.xml $(Pipeline.Workspace)/logs + else + touch $(Pipeline.Workspace)/logs/test_results_bug.xml + fi -# workingDirectory: $(Pipeline.Workspace)/dsBaseClient -# displayName: 'Bug report output' -# condition: succeededOrFailed() + workingDirectory: $(Pipeline.Workspace)/dsBaseClient + displayName: 'Bug report output' + condition: succeededOrFailed() ##################################################################################### @@ -513,29 +486,15 @@ jobs: condition: succeededOrFailed() - ##################################################################################### - # 'Down' Opal Docker Composition - - bash: | - - docker compose -f docker-compose_opal.yml down -v - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Down Opal Docker Composition' - condition: succeeded() - - ##################################################################################### - # Windup phase - ##################################################################################### - ##################################################################################### # Output some important version numbers to file. This gets added to the testStatus # commit so it can be parsed and used on the status table. - bash: | - + echo 'branch:'$(branchName) >> $(datetime).txt echo 'os:'$(lsb_release -ds) >> $(datetime).txt echo 'R:'$(R --version | head -n 1) >> $(datetime).txt - echo 'opal:'$(opal system --opal localhost:8443 --user administrator --password "datashield_test&" --version) >> $(datetime).txt + echo 'opal:'$(opal system --opal localhost:8080 --user administrator --password "datashield_test&" --version) >> $(datetime).txt workingDirectory: $(Pipeline.Workspace)/logs displayName: 'Write versions to file' @@ -547,14 +506,14 @@ jobs: # TODO: Automatically pull in better email/name info from somewhere. # TODO: More debug info in commit message - bash: | - + # Git needs some config set to be able to push to a repo. git config --global user.email "you@example.com" git config --global user.name "Azure pipeline" # This repo is checked out in detatched head state, so reconnect it here. git checkout master - + # It is possible that other commits have been made to the testStatus repo since it # was checked out. i.e. other pipeline runs might have finished. git pull @@ -586,7 +545,7 @@ jobs: git commit -m "Azure auto test for $(projectName)/$(branchName) @ $(datetime)" -m "Debug info:\nProjectName:$(projectName)\nBranchName:$(branchName)\nDataTime:$(datetime)" git push exit 0 - + workingDirectory: $(Pipeline.Workspace)/testStatus displayName: 'Parse test results' condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) @@ -596,40 +555,40 @@ jobs: # Output the environment information to the console. This is useful for debugging. # Always do this, even if some of the above has failed or the job has been cacelled. - bash: | - + echo 'BranchName: '$(branchName) echo 'ProjectName: '$(projectName) echo 'RepoName: '$(repoName) - + echo -e "\n#############################" echo -e "ls /: ######################" ls $(Pipeline.Workspace) - + echo -e "\n#############################" echo -e "lscpu: ######################" lscpu - + echo -e "\n#############################" echo -e "memory: #####################" free -m - + echo -e "\n#############################" echo -e "env: ########################" env - + echo -e "\n#############################" echo -e "Puppet version: #############" /opt/puppetlabs/bin/puppet --version /opt/puppetlabs/puppet/bin/r10k version - + echo -e "\n#############################" echo -e "Rprofile: ###################" cat $(Pipeline.Workspace)/dsBaseClient/.Rprofile - + echo -e "\n#############################" echo -e "R installed.packages(): #####" R -e 'installed.packages()' - + echo -e "\n#############################" echo -e "R sessionInfo(): ############" R -e 'sessionInfo()' diff --git a/azure-pipelines_site-dsdanger.pp b/azure-pipelines_site-dsdanger.pp new file mode 100644 index 00000000..f75418f4 --- /dev/null +++ b/azure-pipelines_site-dsdanger.pp @@ -0,0 +1,22 @@ +# Datashield for Azure Pipelines testing. +# +# Install mysql and mongodb, include test data but don't install the firewall. +# This is an example please change to meet the needs of your install. Consider changing any passwords in this file! +# + +class { ::datashield: + opal_password => 'datashield_test&', + opal_password_hash => '$shiro1$SHA-256$500000$gcnVxdEmOjaN+NfsK/1NsA==$UOobbhJsBBojnbsfzIBX9GTWjWQFi8aJZxFvFKmOiSE=', + + test_data => true, # Install the test data + firewall => false, # Do not install the firewall + mysql => true, # Install mysql server + mongodb => true, # Install mongodb server + remote_mongodb => false, # There is not a remote mongodb server + remote_mysql => false, # There is not a remote mysql server + + dsbase_githubusername => 'datashield', + dsbase_ref => 'master', + dsdanger_githubusername => 'datashield', + dsdanger_ref => 'master' +} diff --git a/azure-pipelines_site.pp b/azure-pipelines_site.pp new file mode 100644 index 00000000..dbc7106c --- /dev/null +++ b/azure-pipelines_site.pp @@ -0,0 +1,22 @@ +# Datashield for Azure Pipelines testing. +# +# Install mysql and mongodb, include test data but don't install the firewall. +# This is an example please change to meet the needs of your install. Consider changing any passwords in this file! +# + +class { ::datashield: + opal_password => 'datashield_test&', + opal_password_hash => '$shiro1$SHA-256$500000$gcnVxdEmOjaN+NfsK/1NsA==$UOobbhJsBBojnbsfzIBX9GTWjWQFi8aJZxFvFKmOiSE=', + + test_data => true, # Install the test data + firewall => false, # Do not install the firewall + mysql => true, # Install mysql server + mongodb => true, # Install mongodb server + remote_mongodb => false, # There is not a remote mongodb server + remote_mysql => false, # There is not a remote mysql server + + dsbase_githubusername => 'datashield', + dsbase_ref => 'master', + dsdanger_githubusername => 'datashield', + dsdanger_ref => '' +} diff --git a/docker-compose_armadillo.yml b/docker-compose_armadillo.yml deleted file mode 100644 index 733edd5e..00000000 --- a/docker-compose_armadillo.yml +++ /dev/null @@ -1,21 +0,0 @@ -services: - armadillo: - hostname: armadillo - ports: - - 8080:8080 - image: datashield/armadillo_citest:4.10.0 - environment: - LOGGING_CONFIG: 'classpath:logback-file.xml' - AUDIT_LOG_PATH: '/app/logs/audit.log' - SPRING_SECURITY_USER_PASSWORD: 'admin' - volumes: - - ./tests/docker/armadillo/standard/logs:/logs - - ./tests/docker/armadillo/standard/data:/data - - ./tests/docker/armadillo/standard/config:/config - - /var/run/docker.sock:/var/run/docker.sock - - default: - hostname: default - image: datashield/rock-knot-devel-permissive:latest - environment: - DEBUG: "FALSE" diff --git a/docker-compose_opal.yml b/docker-compose_opal.yml deleted file mode 100644 index 4cc850fa..00000000 --- a/docker-compose_opal.yml +++ /dev/null @@ -1,23 +0,0 @@ -services: - opal: - image: obiba/opal:5.0.0-RC5 - ports: - - "8443:8443" - links: - - mongo - - rock - environment: - - OPAL_ADMINISTRATOR_PASSWORD=datashield_test& - - MONGO_HOST=mongo - - MONGO_PORT=27017 - - MONGO_USER=root - - MONGO_PASSWORD=foobar - - ROCK_HOSTS=rock:8085 - - ROCK_ADMINISTRATOR_PASSWORD=foobar - mongo: - image: mongo:4.4.15 - environment: - - MONGO_INITDB_ROOT_USERNAME=root - - MONGO_INITDB_ROOT_PASSWORD=foobar - rock: - image: datashield/rock-knot-devel-permissive:latest diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index adefa480..00000000 --- a/docs/404.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Page not found (404) • dsBaseClient - - - - - - - - - - - -
-
- - - - -
-
- - -Content not found. Please use links in the navbar. - -
- - - -
- - - -
- -
-

-

Site built with pkgdown 2.1.1.

-
- -
-
- - - - - - - - diff --git a/docs/LICENSE.html b/docs/LICENSE.html deleted file mode 100644 index 77319957..00000000 --- a/docs/LICENSE.html +++ /dev/null @@ -1,256 +0,0 @@ - -NA • dsBaseClient - - -
-
- - - -
-
- - - -
                GNU GENERAL PUBLIC LICENSE
-                   Version 3, 29 June 2007
-

Copyright (C) 2007 Free Software Foundation, Inc. http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

-
                        Preamble
-

The GNU General Public License is a free, copyleft license for software and other kinds of works.

-

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program–to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

-

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

-

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

-

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

-

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

-

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

-

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

-

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

-

The precise terms and conditions for copying, distribution and modification follow.

-
                   TERMS AND CONDITIONS
-
  1. Definitions.

“This License” refers to version 3 of the GNU General Public License.

-

“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

-

“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

-

To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

-

A “covered work” means either the unmodified Program or a work based on the Program.

-

To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

-

To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

-

An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

-
  1. Source Code.

The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

-

A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

-

The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

-

The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

-

The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

-

The Corresponding Source for a work in source code form is that same work.

-
  1. Basic Permissions.

All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

-

You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

-

Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

-
  1. Protecting Users’ Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

-

When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

-
  1. Conveying Verbatim Copies.

You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

-

You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

-
  1. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

-
a) The work must carry prominent notices stating that you modified
-it, and giving a relevant date.
-
-b) The work must carry prominent notices stating that it is
-released under this License and any conditions added under section
-7.  This requirement modifies the requirement in section 4 to
-"keep intact all notices".
-
-c) You must license the entire work, as a whole, under this
-License to anyone who comes into possession of a copy.  This
-License will therefore apply, along with any applicable section 7
-additional terms, to the whole of the work, and all its parts,
-regardless of how they are packaged.  This License gives no
-permission to license the work in any other way, but it does not
-invalidate such permission if you have separately received it.
-
-d) If the work has interactive user interfaces, each must display
-Appropriate Legal Notices; however, if the Program has interactive
-interfaces that do not display Appropriate Legal Notices, your
-work need not make them do so.
-

A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

-
  1. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

-
a) Convey the object code in, or embodied in, a physical product
-(including a physical distribution medium), accompanied by the
-Corresponding Source fixed on a durable physical medium
-customarily used for software interchange.
-
-b) Convey the object code in, or embodied in, a physical product
-(including a physical distribution medium), accompanied by a
-written offer, valid for at least three years and valid for as
-long as you offer spare parts or customer support for that product
-model, to give anyone who possesses the object code either (1) a
-copy of the Corresponding Source for all the software in the
-product that is covered by this License, on a durable physical
-medium customarily used for software interchange, for a price no
-more than your reasonable cost of physically performing this
-conveying of source, or (2) access to copy the
-Corresponding Source from a network server at no charge.
-
-c) Convey individual copies of the object code with a copy of the
-written offer to provide the Corresponding Source.  This
-alternative is allowed only occasionally and noncommercially, and
-only if you received the object code with such an offer, in accord
-with subsection 6b.
-
-d) Convey the object code by offering access from a designated
-place (gratis or for a charge), and offer equivalent access to the
-Corresponding Source in the same way through the same place at no
-further charge.  You need not require recipients to copy the
-Corresponding Source along with the object code.  If the place to
-copy the object code is a network server, the Corresponding Source
-may be on a different server (operated by you or a third party)
-that supports equivalent copying facilities, provided you maintain
-clear directions next to the object code saying where to find the
-Corresponding Source.  Regardless of what server hosts the
-Corresponding Source, you remain obligated to ensure that it is
-available for as long as needed to satisfy these requirements.
-
-e) Convey the object code using peer-to-peer transmission, provided
-you inform other peers where the object code and Corresponding
-Source of the work are being offered to the general public at no
-charge under subsection 6d.
-

A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

-

A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

-

“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

-

If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

-

The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

-

Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

-
  1. Additional Terms.

“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

-

When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

-

Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

-
a) Disclaiming warranty or limiting liability differently from the
-terms of sections 15 and 16 of this License; or
-
-b) Requiring preservation of specified reasonable legal notices or
-author attributions in that material or in the Appropriate Legal
-Notices displayed by works containing it; or
-
-c) Prohibiting misrepresentation of the origin of that material, or
-requiring that modified versions of such material be marked in
-reasonable ways as different from the original version; or
-
-d) Limiting the use for publicity purposes of names of licensors or
-authors of the material; or
-
-e) Declining to grant rights under trademark law for use of some
-trade names, trademarks, or service marks; or
-
-f) Requiring indemnification of licensors and authors of that
-material by anyone who conveys the material (or modified versions of
-it) with contractual assumptions of liability to the recipient, for
-any liability that these contractual assumptions directly impose on
-those licensors and authors.
-

All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

-

If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

-

Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

-
  1. Termination.

You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

-

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

-

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

-

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

-
  1. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

-
  1. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

-

An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

-

You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

-
  1. Patents.

A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

-

A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

-

Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

-

In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

-

If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

-

If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

-

A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

-

Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

-
  1. No Surrender of Others’ Freedom.

If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

-
  1. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

-
  1. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

-

Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

-

If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

-

Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

-
  1. Disclaimer of Warranty.

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

-
  1. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

-
  1. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

-
                 END OF TERMS AND CONDITIONS
-
-        How to Apply These Terms to Your New Programs
-

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

-

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

-
{one line to give the program's name and a brief idea of what it does.}
-Copyright (C) {year}  {name of author}
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-

Also add information on how to contact you by electronic and paper mail.

-

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

-
{project}  Copyright (C) {year}  {fullname}
-This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-This is free software, and you are welcome to redistribute it
-under certain conditions; type `show c' for details.
-

The hypothetical commands show w' andshow c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

-

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.

-

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.

- - -
- - - -
- - - -
- -
-

Site built with pkgdown 2.1.1.

-
- -
- - - - - - - - diff --git a/docs/authors.html b/docs/authors.html deleted file mode 100644 index feb204c7..00000000 --- a/docs/authors.html +++ /dev/null @@ -1,88 +0,0 @@ - -Authors and Citation • dsBaseClient - - -
-
- - - -
-
-
- - - -
  • -

    DataSHIELD Developers. Maintainer. -

    -
  • -
-
-
-

Citation

- -
-
- - -

Developers D (2024). -dsBaseClient: DataSHIELD Client Functions. -R package version 6.3.1. -

-
@Manual{,
-  title = {dsBaseClient: DataSHIELD Client Functions},
-  author = {DataSHIELD Developers},
-  year = {2024},
-  note = {R package version 6.3.1},
-}
- -
- -
- - - -
- -
-

Site built with pkgdown 2.1.1.

-
- -
- - - - - - - - diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css deleted file mode 100644 index 5a859415..00000000 --- a/docs/bootstrap-toc.css +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ - -/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ - -/* All levels of nav */ -nav[data-toggle='toc'] .nav > li > a { - display: block; - padding: 4px 20px; - font-size: 13px; - font-weight: 500; - color: #767676; -} -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 19px; - color: #563d7c; - text-decoration: none; - background-color: transparent; - border-left: 1px solid #563d7c; -} -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 18px; - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-left: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} -nav[data-toggle='toc'] .nav .nav > li > a { - padding-top: 1px; - padding-bottom: 1px; - padding-left: 30px; - font-size: 12px; - font-weight: normal; -} -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 28px; - font-weight: 500; -} - -/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ -nav[data-toggle='toc'] .nav > .active > ul { - display: block; -} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js deleted file mode 100644 index 1cdd573b..00000000 --- a/docs/bootstrap-toc.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ -(function() { - 'use strict'; - - window.Toc = { - helpers: { - // return all matching elements in the set, or their descendants - findOrFilter: function($el, selector) { - // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ - // http://stackoverflow.com/a/12731439/358804 - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); - }, - - generateUniqueIdBase: function(el) { - var text = $(el).text(); - var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); - return anchor || el.tagName.toLowerCase(); - }, - - generateUniqueId: function(el) { - var anchorBase = this.generateUniqueIdBase(el); - for (var i = 0; ; i++) { - var anchor = anchorBase; - if (i > 0) { - // add suffix - anchor += '-' + i; - } - // check if ID already exists - if (!document.getElementById(anchor)) { - return anchor; - } - } - }, - - generateAnchor: function(el) { - if (el.id) { - return el.id; - } else { - var anchor = this.generateUniqueId(el); - el.id = anchor; - return anchor; - } - }, - - createNavList: function() { - return $(''); - }, - - createChildNavList: function($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }, - - generateNavEl: function(anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $('
  • '); - $li.append($a); - return $li; - }, - - generateNavItem: function(headingEl) { - var anchor = this.generateAnchor(headingEl); - var $heading = $(headingEl); - var text = $heading.data('toc-text') || $heading.text(); - return this.generateNavEl(anchor, text); - }, - - // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). - getTopLevel: function($scope) { - for (var i = 1; i <= 6; i++) { - var $headings = this.findOrFilter($scope, 'h' + i); - if ($headings.length > 1) { - return i; - } - } - - return 1; - }, - - // returns the elements for the top level, and the next below it - getHeadings: function($scope, topLevel) { - var topSelector = 'h' + topLevel; - - var secondaryLevel = topLevel + 1; - var secondarySelector = 'h' + secondaryLevel; - - return this.findOrFilter($scope, topSelector + ',' + secondarySelector); - }, - - getNavLevel: function(el) { - return parseInt(el.tagName.charAt(1), 10); - }, - - populateNav: function($topContext, topLevel, $headings) { - var $context = $topContext; - var $prevNav; - - var helpers = this; - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - - // determine the proper $context - if (navLevel === topLevel) { - // use top level - $context = $topContext; - } else if ($prevNav && $context === $topContext) { - // create a new level of the tree and switch to it - $context = helpers.createChildNavList($prevNav); - } // else use the current $context - - $context.append($newNav); - - $prevNav = $newNav; - }); - }, - - parseOps: function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - return opts; - } - }, - - // accepts a jQuery object, or an options object - init: function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, topLevel); - this.helpers.populateNav($topContext, topLevel, $headings); - } - }; - - $(function() { - $('nav[data-toggle="toc"]').each(function(i, el) { - var $nav = $(el); - Toc.init($nav); - }); - }); -})(); diff --git a/docs/docsearch.css b/docs/docsearch.css deleted file mode 100644 index e5f1fe1d..00000000 --- a/docs/docsearch.css +++ /dev/null @@ -1,148 +0,0 @@ -/* Docsearch -------------------------------------------------------------- */ -/* - Source: https://github.com/algolia/docsearch/ - License: MIT -*/ - -.algolia-autocomplete { - display: block; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1 -} - -.algolia-autocomplete .ds-dropdown-menu { - width: 100%; - min-width: none; - max-width: none; - padding: .75rem 0; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); -} - -@media (min-width:768px) { - .algolia-autocomplete .ds-dropdown-menu { - width: 175% - } -} - -.algolia-autocomplete .ds-dropdown-menu::before { - display: none -} - -.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { - padding: 0; - background-color: rgb(255,255,255); - border: 0; - max-height: 80vh; -} - -.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { - margin-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion { - padding: 0; - overflow: visible -} - -.algolia-autocomplete .algolia-docsearch-suggestion--category-header { - padding: .125rem 1rem; - margin-top: 0; - font-size: 1.3em; - font-weight: 500; - color: #00008B; - border-bottom: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { - float: none; - padding-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { - float: none; - width: auto; - padding: 0; - text-align: left -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content { - float: none; - width: auto; - padding: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content::before { - display: none -} - -.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { - padding-top: .75rem; - margin-top: .75rem; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { - display: block; - padding: .1rem 1rem; - margin-bottom: 0.1; - font-size: 1.0em; - font-weight: 400 - /* display: none */ -} - -.algolia-autocomplete .algolia-docsearch-suggestion--title { - display: block; - padding: .25rem 1rem; - margin-bottom: 0; - font-size: 0.9em; - font-weight: 400 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--text { - padding: 0 1rem .5rem; - margin-top: -.25rem; - font-size: 0.8em; - font-weight: 400; - line-height: 1.25 -} - -.algolia-autocomplete .algolia-docsearch-footer { - width: 110px; - height: 20px; - z-index: 3; - margin-top: 10.66667px; - float: right; - font-size: 0; - line-height: 0; -} - -.algolia-autocomplete .algolia-docsearch-footer--logo { - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position: 50%; - background-size: 100%; - overflow: hidden; - text-indent: -9000px; - width: 100%; - height: 100%; - display: block; - transform: translate(-8px); -} - -.algolia-autocomplete .algolia-docsearch-suggestion--highlight { - color: #FF8C00; - background: rgba(232, 189, 54, 0.1) -} - - -.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { - box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) -} - -.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { - background-color: rgba(192, 192, 192, .15) -} diff --git a/docs/docsearch.js b/docs/docsearch.js deleted file mode 100644 index b35504cd..00000000 --- a/docs/docsearch.js +++ /dev/null @@ -1,85 +0,0 @@ -$(function() { - - // register a handler to move the focus to the search bar - // upon pressing shift + "/" (i.e. "?") - $(document).on('keydown', function(e) { - if (e.shiftKey && e.keyCode == 191) { - e.preventDefault(); - $("#search-input").focus(); - } - }); - - $(document).ready(function() { - // do keyword highlighting - /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ - var mark = function() { - - var referrer = document.URL ; - var paramKey = "q" ; - - if (referrer.indexOf("?") !== -1) { - var qs = referrer.substr(referrer.indexOf('?') + 1); - var qs_noanchor = qs.split('#')[0]; - var qsa = qs_noanchor.split('&'); - var keyword = ""; - - for (var i = 0; i < qsa.length; i++) { - var currentParam = qsa[i].split('='); - - if (currentParam.length !== 2) { - continue; - } - - if (currentParam[0] == paramKey) { - keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); - } - } - - if (keyword !== "") { - $(".contents").unmark({ - done: function() { - $(".contents").mark(keyword); - } - }); - } - } - }; - - mark(); - }); -}); - -/* Search term highlighting ------------------------------*/ - -function matchedWords(hit) { - var words = []; - - var hierarchy = hit._highlightResult.hierarchy; - // loop to fetch from lvl0, lvl1, etc. - for (var idx in hierarchy) { - words = words.concat(hierarchy[idx].matchedWords); - } - - var content = hit._highlightResult.content; - if (content) { - words = words.concat(content.matchedWords); - } - - // return unique words - var words_uniq = [...new Set(words)]; - return words_uniq; -} - -function updateHitURL(hit) { - - var words = matchedWords(hit); - var url = ""; - - if (hit.anchor) { - url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; - } else { - url = hit.url + '?q=' + escape(words.join(" ")); - } - - return url; -} diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 8271c328..00000000 --- a/docs/index.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - -DataSHIELD Client Functions • dsBaseClient - - - - - - - - - - - - -
    -
    - - - - -
    -
    - -
    - -

    DataSHIELD client side base R library.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BranchdsBase statusdsBase testsdsBaseClient statusdsBaseClient tests
    MasterBuild StatusBuild StatusTests
    6.0Build StatusBuild StatusTests
    6.0.1Build StatusBuild StatusTests
    6.1Build StatusTestsBuild StatusTests
    6.1.1Build StatusTestsBuild StatusTests
    6.2Build StatusTestsBuild StatusTests
    -

    License

    -
    -
    -

    About -

    -

    DataSHIELD is a software package which allows you to do non-disclosive federated analysis on sensitive data. Our website (https://www.datashield.org) has in depth descriptions of what it is, how it works and how to install it. A key point to highlight is that DataSHIELD has a client-server infrastructure, so the dsBase package (https://github.com/datashield/dsBase) needs to be used in conjuction with the dsBaseClient package (https://github.com/datashield/dsBaseClient) - trying to use one without the other makes no sense.

    -

    Detailed instructions on how to install DataSHIELD are at https://www.datashield.org/wiki.

    -

    Discussion and help with using DataSHIELD can be obtained from The DataSHIELD Forum https://datashield.discourse.group/

    -

    The code here is organised as:

    - - - - - - - - - - - - - - - - - - - -
    LocationWhat is it?
    obiba CRANWhere you probably should install DataSHIELD from.
    releasesStable releases.
    master branchMostly in sync with the latest release, changes rarely.
    -
    - -
    - - -
    - - -
    - -
    -

    -

    Site built with pkgdown 2.1.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/link.svg b/docs/link.svg deleted file mode 100644 index 88ad8276..00000000 --- a/docs/link.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/docs/pkgdown.css b/docs/pkgdown.css deleted file mode 100644 index 80ea5b83..00000000 --- a/docs/pkgdown.css +++ /dev/null @@ -1,384 +0,0 @@ -/* Sticky footer */ - -/** - * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ - * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css - * - * .Site -> body > .container - * .Site-content -> body > .container .row - * .footer -> footer - * - * Key idea seems to be to ensure that .container and __all its parents__ - * have height set to 100% - * - */ - -html, body { - height: 100%; -} - -body { - position: relative; -} - -body > .container { - display: flex; - height: 100%; - flex-direction: column; -} - -body > .container .row { - flex: 1 0 auto; -} - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 1px solid #e5e5e5; - color: #666; - display: flex; - flex-shrink: 0; -} -footer p { - margin-bottom: 0; -} -footer div { - flex: 1; -} -footer .pkgdown { - text-align: right; -} -footer p { - margin-bottom: 0; -} - -img.icon { - float: right; -} - -/* Ensure in-page images don't run outside their container */ -.contents img { - max-width: 100%; - height: auto; -} - -/* Fix bug in bootstrap (only seen in firefox) */ -summary { - display: list-item; -} - -/* Typographic tweaking ---------------------------------*/ - -.contents .page-header { - margin-top: calc(-60px + 1em); -} - -dd { - margin-left: 3em; -} - -/* Section anchors ---------------------------------*/ - -a.anchor { - display: none; - margin-left: 5px; - width: 20px; - height: 20px; - - background-image: url(./link.svg); - background-repeat: no-repeat; - background-size: 20px 20px; - background-position: center center; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - display: inline-block; -} - -/* Fixes for fixed navbar --------------------------*/ - -.contents h1, .contents h2, .contents h3, .contents h4 { - padding-top: 60px; - margin-top: -40px; -} - -/* Navbar submenu --------------------------*/ - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu>.dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover>.dropdown-menu { - display: block; -} - -.dropdown-submenu>a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} - -.dropdown-submenu:hover>a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left>.dropdown-menu { - left: -100%; - margin-left: 10px; - border-radius: 6px 0 6px 6px; -} - -/* Sidebar --------------------------*/ - -#pkgdown-sidebar { - margin-top: 30px; - position: -webkit-sticky; - position: sticky; - top: 70px; -} - -#pkgdown-sidebar h2 { - font-size: 1.5em; - margin-top: 1em; -} - -#pkgdown-sidebar h2:first-child { - margin-top: 0; -} - -#pkgdown-sidebar .list-unstyled li { - margin-bottom: 0.5em; -} - -/* bootstrap-toc tweaks ------------------------------------------------------*/ - -/* All levels of nav */ - -nav[data-toggle='toc'] .nav > li > a { - padding: 4px 20px 4px 6px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; -} - -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 5px; - color: inherit; - border-left: 1px solid #878787; -} - -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 5px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; - border-left: 2px solid #878787; -} - -/* Nav: second level (shown on .active) */ - -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} - -nav[data-toggle='toc'] .nav .nav > li > a { - padding-left: 16px; - font-size: 1.35rem; -} - -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 15px; -} - -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 15px; - font-weight: 500; - font-size: 1.35rem; -} - -/* orcid ------------------------------------------------------------------- */ - -.orcid { - font-size: 16px; - color: #A6CE39; - /* margins are required by official ORCID trademark and display guidelines */ - margin-left:4px; - margin-right:4px; - vertical-align: middle; -} - -/* Reference index & topics ----------------------------------------------- */ - -.ref-index th {font-weight: normal;} - -.ref-index td {vertical-align: top; min-width: 100px} -.ref-index .icon {width: 40px;} -.ref-index .alias {width: 40%;} -.ref-index-icons .alias {width: calc(40% - 40px);} -.ref-index .title {width: 60%;} - -.ref-arguments th {text-align: right; padding-right: 10px;} -.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} -.ref-arguments .name {width: 20%;} -.ref-arguments .desc {width: 80%;} - -/* Nice scrolling for wide elements --------------------------------------- */ - -table { - display: block; - overflow: auto; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre, code, pre code { - background-color: #f8f8f8; - color: #333; -} -pre, pre code { - white-space: pre-wrap; - word-break: break-all; - overflow-wrap: break-word; -} - -pre { - border: 1px solid #eee; -} - -pre .img, pre .r-plt { - margin: 5px 0; -} - -pre .img img, pre .r-plt img { - background-color: #fff; -} - -code a, pre a { - color: #375f84; -} - -a.sourceLine:hover { - text-decoration: none; -} - -.fl {color: #1514b5;} -.fu {color: #000000;} /* function */ -.ch,.st {color: #036a07;} /* string */ -.kw {color: #264D66;} /* keyword */ -.co {color: #888888;} /* comment */ - -.error {font-weight: bolder;} -.warning {font-weight: bolder;} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} - -/* headroom.js ------------------------ */ - -.headroom { - will-change: transform; - transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} -.headroom--unpinned { - transform: translateY(-100%); -} - -/* mark.js ----------------------------*/ - -mark { - background-color: rgba(255, 255, 51, 0.5); - border-bottom: 2px solid rgba(255, 153, 51, 0.3); - padding: 1px; -} - -/* vertical spacing after htmlwidgets */ -.html-widget { - margin-bottom: 10px; -} - -/* fontawesome ------------------------ */ - -.fab { - font-family: "Font Awesome 5 Brands" !important; -} - -/* don't display links in code chunks when printing */ -/* source: https://stackoverflow.com/a/10781533 */ -@media print { - code a:link:after, code a:visited:after { - content: ""; - } -} - -/* Section anchors --------------------------------- - Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 -*/ - -div.csl-bib-body { } -div.csl-entry { - clear: both; -} -.hanging-indent div.csl-entry { - margin-left:2em; - text-indent:-2em; -} -div.csl-left-margin { - min-width:2em; - float:left; -} -div.csl-right-inline { - margin-left:2em; - padding-left:1em; -} -div.csl-indent { - margin-left: 2em; -} diff --git a/docs/pkgdown.js b/docs/pkgdown.js deleted file mode 100644 index 6f0eee40..00000000 --- a/docs/pkgdown.js +++ /dev/null @@ -1,108 +0,0 @@ -/* http://gregfranko.com/blog/jquery-best-practices/ */ -(function($) { - $(function() { - - $('.navbar-fixed-top').headroom(); - - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); - }); - - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); - } - - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } - - return(haystack.length); - } - - /* Clipboard --------------------------*/ - - function changeTooltipMessage(element, msg) { - var tooltipOriginalTitle=element.getAttribute('data-original-title'); - element.setAttribute('data-original-title', msg); - $(element).tooltip('show'); - element.setAttribute('data-original-title', tooltipOriginalTitle); - } - - if(ClipboardJS.isSupported()) { - $(document).ready(function() { - var copyButton = ""; - - $("div.sourceCode").addClass("hasCopyButton"); - - // Insert copy buttons: - $(copyButton).prependTo(".hasCopyButton"); - - // Initialize tooltips: - $('.btn-copy-ex').tooltip({container: 'body'}); - - // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { - text: function(trigger) { - return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); - } - }); - - clipboardBtnCopies.on('success', function(e) { - changeTooltipMessage(e.trigger, 'Copied!'); - e.clearSelection(); - }); - - clipboardBtnCopies.on('error', function() { - changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); - }); - }); - } -})(window.jQuery || window.$) diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml deleted file mode 100644 index b87df44a..00000000 --- a/docs/pkgdown.yml +++ /dev/null @@ -1,5 +0,0 @@ -pandoc: 2.9.2.1 -pkgdown: 2.1.1 -pkgdown_sha: ~ -articles: {} -last_built: 2024-09-28T15:53Z diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png deleted file mode 100644 index 17a35806..00000000 Binary files a/docs/reference/Rplot001.png and /dev/null differ diff --git a/docs/reference/checkClass.html b/docs/reference/checkClass.html deleted file mode 100644 index 8a4483b3..00000000 --- a/docs/reference/checkClass.html +++ /dev/null @@ -1,96 +0,0 @@ - -Checks that an object has the same class in all studies — checkClass • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    checkClass(datasources = NULL, obj = NULL)
    -
    - -
    -

    Arguments

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    obj
    -

    a string character, the name of the object to check for.

    - -
    -
    -

    Value

    -

    a message or the class of the object if the object has the same class in all studies.

    -
    -
    -

    Details

    -

    In DataSHIELD an object included in analysis must be of the same type in all -the collaborating studies. If that is not the case the process is stopped

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/colPercent.html b/docs/reference/colPercent.html deleted file mode 100644 index 4f2acdc8..00000000 --- a/docs/reference/colPercent.html +++ /dev/null @@ -1,94 +0,0 @@ - -Produces column percentages — colPercent • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    this is an INTERNAL function.

    -
    - -
    -
    colPercent(dataframe)
    -
    - -
    -

    Arguments

    - - -
    dataframe
    -

    a data frame

    - -
    -
    -

    Value

    -

    a data frame

    -
    -
    -

    Details

    -

    The function is required required by the client function ds.table2D.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.Boole.html b/docs/reference/ds.Boole.html deleted file mode 100644 index 2445ed80..00000000 --- a/docs/reference/ds.Boole.html +++ /dev/null @@ -1,218 +0,0 @@ - -Converts a server-side R object into Boolean indicators — ds.Boole • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    It compares R objects using the standard set of -Boolean operators (==, !=, >, >=, <, <=) to create a -vector with Boolean indicators that can be of class logical (TRUE/FALSE) -or numeric (1/0).

    -
    - -
    -
    ds.Boole(
    -  V1 = NULL,
    -  V2 = NULL,
    -  Boolean.operator = NULL,
    -  numeric.output = TRUE,
    -  na.assign = "NA",
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    V1
    -

    A character string specifying the name of the vector to which the Boolean operator -is to be applied.

    - - -
    V2
    -

    A character string specifying the name of the vector to compare with V1.

    - - -
    Boolean.operator
    -

    A character string specifying one of six possible Boolean operators: -'==', '!=', '>', '>=', '<' and '<='.

    - - -
    numeric.output
    -

    logical. If TRUE the output variable should be of class numeric (1/0). -If FALSE the output variable should be of class logical (TRUE/FALSE). -Default TRUE.

    - - -
    na.assign
    -

    A character string taking values 'NA','1' or '0'. -Default 'NA'. For more information see details.

    - - -
    newobj
    -

    a character string that provides the name for the output -object that is stored on the data servers. Default boole.newobj.

    - - -
    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

    -

    ds.Boole returns the object specified by the newobj argument -which is written to the server-side. Also, two validity messages are returned -to the client-side indicating the name of the newobj which -has been created in each data source and if -it is in a valid form.

    -
    -
    -

    Details

    -

    A combination of different Boolean operators using AND operator -can be obtained by multiplying two or more -binary/Boolean vectors together. In this way, observations taking the value 1 in every vector -will then take the value 1 in the final vector (after multiplication) -while all others will take the value 0. Instead the combination using OR operator -can be obtained by the sum of two or more vectors and applying -ds.Boole using the operator >= 1.

    -

    In na.assign if 'NA' is specified, the missing values -remain as NAs in the output vector. If '1' or '0' is specified the -missing values are converted to 1 or 0 respectively or TRUE -or FALSE depending on the argument numeric.output.

    - - -

    Server function called: BooleDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Generating Boolean indicators
    -  ds.Boole(V1 = "D$LAB_TSC",
    -           V2 = "D$LAB_TRIG",
    -           Boolean.operator = ">",
    -           numeric.output = TRUE, #Output vector of 0 and 1
    -           na.assign = "NA",      
    -           newobj = "Boole.vec",
    -           datasources = connections[1]) #only the first server is used ("study1")
    -           
    -  ds.Boole(V1 = "D$LAB_TSC",
    -           V2 = "D$LAB_TRIG",
    -           Boolean.operator = "<",
    -           numeric.output = FALSE, #Output vector of TRUE and FALSE 
    -           na.assign = "1", #NA values are converted to TRUE
    -           newobj = "Boole.vec",
    -           datasources = connections[2]) #only the second server is used ("study2") 
    -                      
    -  ds.Boole(V1 = "D$LAB_TSC",
    -           V2 = "D$LAB_TRIG",
    -           Boolean.operator = ">",
    -           numeric.output = TRUE, #Output vector of 0 and 1
    -           na.assign = "0", #NA values are converted to 0      
    -           newobj = "Boole.vec",
    -           datasources = connections) #All servers are used
    -  
    -  # Clear the Datashield R sessions and logout           
    -  datashield.logout(connections)
    -} # }
    - 
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.abs.html b/docs/reference/ds.abs.html deleted file mode 100644 index 65f8640c..00000000 --- a/docs/reference/ds.abs.html +++ /dev/null @@ -1,168 +0,0 @@ - -Computes the absolute values of a variable — ds.abs • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Computes the absolute values for a specified numeric or integer vector. -This function is similar to R function abs.

    -
    - -
    -
    ds.abs(x = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of a numeric or an integer vector.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default name is set to abs.newobj.

    - - -
    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

    -

    ds.abs assigns a vector for each study that includes the absolute values of -the input numeric or integer vector specified in the argument x. The created vectors -are stored in the servers.

    -
    -
    -

    Details

    -

    The function calls the server-side function absDS that computes the -absolute values of the elements of a numeric or integer vector and assigns a new vector -with those absolute values on the server-side. The name of the new generated vector is -specified by the user through the argument newobj, otherwise is named by default to -abs.newobj.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # 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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Example 1: Generate a normally distributed variable with zero mean and variance equal
    -  #  to one and then get their absolute values
    -  ds.rNorm(samp.size=100, mean=0, sd=1, newobj='var.norm', datasources=connections)
    -  # check the quantiles
    -  ds.summary(x='var.norm', datasources=connections)
    -  ds.abs(x='var.norm', newobj='var.norm.abs', datasources=connections)
    -  # check now the changes in the quantiles
    -  ds.summary(x='var.norm.abs', datasources=connections)  
    -
    -  # Example 2: Generate a sequence of negative integer numbers from -200 to -100
    -  # and then get their absolute values
    -  ds.seq(FROM.value.char = '-200', TO.value.char = '-100', BY.value.char = '1', 
    -         newobj='negative.integers', datasources=connections)
    -  # check the quantiles
    -  ds.summary(x='negative.integers', datasources=connections)
    -  ds.abs(x='negative.integers', newobj='positive.integers', datasources=connections)
    -  # check now the changes in the quantiles
    -  ds.summary(x='positive.integers', datasources=connections)
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asCharacter.html b/docs/reference/ds.asCharacter.html deleted file mode 100644 index df1c7cb9..00000000 --- a/docs/reference/ds.asCharacter.html +++ /dev/null @@ -1,150 +0,0 @@ - -Converts a server-side R object into a character class — ds.asCharacter • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Converts the input object into a character class. -This function is based on the native R function as.character.

    -
    - -
    -
    ds.asCharacter(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the input object to be coerced to class -character.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default ascharacter.newobj.

    - - -
    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

    -

    ds.asCharacter returns the object converted into a class character -that is written to the server-side. Also, two validity messages are returned to the client-side -indicating the name of the newobj which has been created in each data source and if -it is in a valid form.

    -
    -
    -

    Details

    -

    Server function called: asCharacterDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Converting the R object into a class character
    -  ds.asCharacter(x.name = "D$LAB_TSC",
    -                 newobj = "char.obj",
    -                 datasources = connections[1]) #only the first Opal server is used ("study1")
    -                 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asDataMatrix.html b/docs/reference/ds.asDataMatrix.html deleted file mode 100644 index b8ceb870..00000000 --- a/docs/reference/ds.asDataMatrix.html +++ /dev/null @@ -1,153 +0,0 @@ - -Converts a server-side R object into a matrix — ds.asDataMatrix • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Coerces an R object into a matrix maintaining original -class for all columns in data frames.

    -
    - -
    -
    ds.asDataMatrix(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the input object to be coerced to -a matrix.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default asdatamatrix.newobj.

    - - -
    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

    -

    ds.asDataMatrix returns the object converted into a matrix -that is written to the server-side. Also, two validity messages are returned -to the client-side -indicating the name of the newobj which -has been created in each data source and if -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is based on the native R function data.matrix.

    -

    Server function called: asDataMatrixDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Converting the R object into a matrix
    -  ds.asDataMatrix(x.name = "D",
    -                  newobj = "mat.obj",
    -                  datasources = connections[1]) #only the first Opal server is used ("study1")
    -                 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asFactor.html b/docs/reference/ds.asFactor.html deleted file mode 100644 index a75085f9..00000000 --- a/docs/reference/ds.asFactor.html +++ /dev/null @@ -1,247 +0,0 @@ - -Converts a server-side numeric vector into a factor — ds.asFactor • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function assigns a server-side numeric vector into a factor class.

    -
    - -
    -
    ds.asFactor(
    -  input.var.name = NULL,
    -  newobj.name = NULL,
    -  forced.factor.levels = NULL,
    -  fixed.dummy.vars = FALSE,
    -  baseline.level = 1,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    input.var.name
    -

    a character string which provides -the name of the variable to be converted to a factor.

    - - -
    newobj.name
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default asfactor.newobj.

    - - -
    forced.factor.levels
    -

    the levels that the user wants to split the input variable. -If NULL (default) a vector with all unique levels from all studies are created.

    - - -
    fixed.dummy.vars
    -

    boolean. If TRUE the input variable is converted to a factor -but presented as a matrix of dummy variables. -If FALSE (default) the input variable -is converted to a factor and assigned as a vector.

    - - -
    baseline.level
    -

    an integer indicating the baseline level -to be used in the creation of the matrix with dummy variables. -If the fixed.dummy.vars is set to FALSE then any value of the baseline level is not taken -into account.

    - - -
    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

    -

    ds.asFactor returns the unique levels of the converted -variable in ascending order and a validity -message with the name of the created object on the client-side and -the output matrix or vector in the server-side.

    -
    -
    -

    Details

    -

    Converts a numeric vector into a factor type which is represented either as a vector -or as a matrix of dummy variables depending on the argument fixed.dummy.vars. -The matrix of dummy variables also depends on the argument -baseline.level.

    -

    ds.asFactor.R and its associated serverside functions asFactorDS1 and asFactorDS2 -are to be used when you have variable that has up to 40 unique levels across -all sources combined. If one of the sources does not contain any subjects at a -particular level, that level will still be created as an empty category. In the -end all sources thus include a factor variable with consistent factor levels -across all sources - one level for every unique value that occurs in at least one -source. This is important when you wish to fit models using ds.glm because the factor -levels must be consistent across all studies or the model will not fit.

    -

    But in order for this to be possible, all sources have to share all of the unique values -their source holds for the variable. This allows the client to create a single vector -containing all of the unique factor levels across ALL sources. But this is potentially -disclosive if there are too many levels. There are therefore two checks on the number of -levels in each source. One is simply a test of whether the number of levels exceeds -a value specified by the Roption value 'nfilter.max.levels' which is set by default -to 40, but the data custodian for the source can choose any alternative value he/she -chooses. The second test is of whether the levels are too dense: ie do the number of -levels exceed a specified proportion of the full length of the relevant vector -in the particular source. The max density is set by the Roption value 'nfilter.levels' -which takes the default value 0.33 but can again be modified by the data custodian.

    -

    In combination, these two checks mean that if a factor has 35 levels in a given study -where the total length of the variable to be converted to a factor is 1000 individuals, -the ds.asFactor function will process that variable appropriately. But if it had had -45 levels it would have been blocked by 'nfilter.max.levels' and if the total length of -the variable in that study had only been 70 subjects it would have been blocked by -the density criterion held in 'nfilter.levels'.

    -

    If you have a factor with more than 40 levels in each source - perhaps most commonly -an ID of some sort that you need to provide as an argument to eg a tapply function. -Then you cannot use ds.asFactor. Typically in these circumstance you simply want -to create a factor that is appropriate for each source but you do not need to ensure -that all levels are consistent across all sources. In that case, you can use the -ds.asFactorSimple function which does no more than coerce a numeric or character -variable to a factor. Because you do not need to share unique factor levels -between sources, there is then no disclosure issue.

    -

    To understand how the matrix of the dummy variable is created let's assume that we have the vector -(1, 2, 1, 3, 4, 4, 1, 3, 4, 5) of ten integer numbers. -If we set the argument fixed.dummy.vars = TRUE, -baseline.level = 1 and forced.factor.levels = c(1,2,3,4,5). -The input vector is converted to the following matrix of dummy variables:

    -
    DV2DV3DV4DV50
    00010
    00000
    00100
    00100
    01000
    00010
    00010

    For the same example if the baseline.level = 3 then the matrix is:

    -

    DV1DV2DV4DV5
    1000
    0100
    1000
    0000
    0010
    0010
    1000
    0000
    0010
    0001

    In the first instance the first row of the matrix has zeros in all entries indicating -that the first data point belongs to level 1 (as the baseline level is equal to 1). -The second row has 1 at the first (DV2) column and zeros elsewhere, -indicating that the second data point belongs to level 2. -In the second instance (second matrix) where the baseline level is equal to 3, -the first row of the matrix has 1 at the -first (DV1) column and zeros elsewhere, -indicating again that the first data point belongs to level 1. -Also as we can see the fourth row of the second matrix has all its elements equal -to zero indicating that the -fourth data point belongs to level 3 (as the baseline level, in that case, is 3).

    -

    If the baseline.level is set to be equal to a value -that is not one of the levels of the factor then a -matrix of dummy variables is created having as many columns as the number of levels. -In that case in each row there is a unique entry equal to 1 at a -certain column indicating the level of each data point. So, for the -above example where the vector has five levels -if we set the baseline.level equal to a value that does not -belong to those five levels (baseline.level=8) -the matrix of dummy variables is:

    -
    DV1DV2DV3DV4DV5
    10000
    01000
    10000
    00100
    00010
    00010
    10000
    00100
    00010
    00001

    Server functions called: asFactorDS1 and asFactorDS2

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  ## Version 6, for version 5 see 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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  ds.asFactor(input.var.name = "D$PM_BMI_CATEGORICAL", 
    -              newobj.name = "fact.obj", 
    -              forced.factor.levels = NULL, #a vector with all unique levels 
    -                                           #from all studies is created
    -              fixed.dummy.vars = TRUE, #create a matrix of dummy variables
    -              baseline.level = 1,
    -              datasources = connections)#all the Opal servers are used, in this case 3 
    -                                        #(see above the connection to the servers) 
    -  ds.asFactor(input.var.name = "D$PM_BMI_CATEGORICAL", 
    -              newobj.name = "fact.obj", 
    -              forced.factor.levels = c(2,3), #the variable is split in 2 levels
    -              fixed.dummy.vars = TRUE, #create a matrix of dummy variables
    -              baseline.level = 1,
    -              datasources = connections[1])#only the first Opal server is used ("study1")
    -
    -   # Clear the Datashield R sessions and logout  
    -   datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asFactorSimple.html b/docs/reference/ds.asFactorSimple.html deleted file mode 100644 index 2b19b9b3..00000000 --- a/docs/reference/ds.asFactorSimple.html +++ /dev/null @@ -1,121 +0,0 @@ - -Converts a numeric vector into a factor — ds.asFactorSimple • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    ds.asFactorSimple calls the assign function asFactorSimpleDS and -thereby coerces a numeric or character vector into a factor

    -
    - -
    -
    ds.asFactorSimple(
    -  input.var.name = NULL,
    -  newobj.name = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    input.var.name
    -

    a character string which provides -the name of the variable to be converted to a factor.

    - - -
    newobj.name
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default asfactor.newobj.

    - - -
    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

    -

    an output vector of class factor to the serverside. In addition, returns a validity -message with the name of the created object on the client-side and if creation fails an -error message which can be viewed using datashield.errors().

    -
    -
    -

    Details

    -

    The function converts the input variable into a factor. Unlike -ds.asFactor and its serverside functions, ds.asFactorSimple does no more than -coerce the class of a variable to make it a factor on the serverside in each data source. -It does not check for or enforce consistency of factor levels across sources or allow you to -force an arbitrary set of levels unless those levels actually exist in the sources. -Furthermore, it does not allow you to create an array of -binary dummy variables that is equivalent to a factor. If you need to do any -of these things you will have to use the ds.asFactor function.

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asInteger.html b/docs/reference/ds.asInteger.html deleted file mode 100644 index 76cc6f13..00000000 --- a/docs/reference/ds.asInteger.html +++ /dev/null @@ -1,166 +0,0 @@ - -Converts a server-side R object into an integer class — ds.asInteger • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Coerces an R object into an integer class. -This function is based on the native R function as.integer.

    -
    - -
    -
    ds.asInteger(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the input object to be coerced to -an integer.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default asinteger.newobj.

    - - -
    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

    -

    ds.asInteger returns the R object converted into an integer -that is written to the server-side. Also, two validity messages are returned to the -client-side indicating the name of the newobj which -has been created in each data source and if -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is based on the native R function as.integer. - The only difference is that the DataSHIELD -function first converts the values of the input object into characters and then convert -those to integers. This addition, -it is important for the case where the input object is of class -factor having integers as levels. -In that case, the native R as.integer function returns -the underlying level codes and not the values as integers. - For example as.integer in R -converts the factor vector:
    -[1] 0 1 1 2 1 0 1 0 2 2 2 1
    - Levels: 0 1 2
    -to the following integer vector: -1 2 2 3 2 1 2 1 3 3 3 2

    -

    Server function called: asIntegerDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Converting the R object into an integer
    -  ds.asInteger(x.name = "D$LAB_TSC",
    -                  newobj = "int.obj",
    -                  datasources = connections[1]) #only the first Opal server is used ("study1")
    -  ds.class(x = "int.obj", datasources = connections[1])   
    -  
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asList.html b/docs/reference/ds.asList.html deleted file mode 100644 index d7fe3876..00000000 --- a/docs/reference/ds.asList.html +++ /dev/null @@ -1,151 +0,0 @@ - -Converts a server-side R object into a list — ds.asList • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Coerces an R object into a list. -This function is based on the native R function as.list.

    -
    - -
    -
    ds.asList(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the input object to be coerced to -a list.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default aslist.newobj.

    - - -
    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

    -

    ds.asList returns the R object converted into a list -which is written to the server-side. Also, two validity messages are returned to the -client-side indicating the name of the newobj which has been created in each data -source and if it is in a valid form.

    -
    -
    -

    Details

    -

    Server function called: asListDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Converting the R object into a List
    -  ds.asList(x.name = "D",
    -  newobj = "D.asList", 
    -  datasources = connections[1]) #only the first Opal server is used ("study1")
    -  ds.class(x = "D.asList", datasources = connections[1])   
    -              
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asLogical.html b/docs/reference/ds.asLogical.html deleted file mode 100644 index e07cc3c3..00000000 --- a/docs/reference/ds.asLogical.html +++ /dev/null @@ -1,152 +0,0 @@ - -Converts a server-side R object into a logical class — ds.asLogical • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Coerces an R object into a logical class. -This function is based on the native R function as.logical.

    -
    - -
    -
    ds.asLogical(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the -input object to be coerced to a logical.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default aslogical.newobj.

    - - -
    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

    -

    ds.asLogical returns the R object converted into a logical -that is written to the server-side. Also, two validity messages are returned -to the client-side indicating the name of the newobj which -has been created in each data source and if -it is in a valid form.

    -
    -
    -

    Details

    -

    Server function called: asLogicalDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Converting the R object into a logical
    -  ds.asLogical(x.name = "D$LAB_TSC", 
    -               newobj = "logical.obj", 
    -               datasources =connections[1]) #only the first Opal server is used ("study1")
    -  ds.class(x = "logical.obj", datasources = connections[1])  
    -               
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asMatrix.html b/docs/reference/ds.asMatrix.html deleted file mode 100644 index d3e7a9b3..00000000 --- a/docs/reference/ds.asMatrix.html +++ /dev/null @@ -1,154 +0,0 @@ - -Converts a server-side R object into a matrix — ds.asMatrix • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Coerces an R object into a matrix. -This converts all columns into character class.

    -
    - -
    -
    ds.asMatrix(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the input object to be coerced to -a matrix.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default asmatrix.newobj.

    - - -
    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

    -

    ds.asMatrix returns the object converted into a matrix -that is written to the server-side. Also, two validity messages are returned -to the client-side indicating the name of the newobj which -has been created in each data source and if it is in a valid form.

    -
    -
    -

    Details

    -

    This function is based on the native R function as.matrix. -If this function is applied to a data frame, all columns are converted into a character class. -If you wish to convert a data frame to a matrix but maintain all data columns in their -original class you should use the function ds.asDataMatrix.

    -

    Server function called: asMatrixDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Converting the R object into a matrix
    -  ds.asMatrix(x.name = "D",
    -              newobj = "mat.obj",
    -              datasources = connections[1]) #only the first Opal server is used ("study1")
    -                 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # } 
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.asNumeric.html b/docs/reference/ds.asNumeric.html deleted file mode 100644 index 1bcda160..00000000 --- a/docs/reference/ds.asNumeric.html +++ /dev/null @@ -1,165 +0,0 @@ - -Converts a server-side R object into a numeric class — ds.asNumeric • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Coerces an R object into a numeric class. -This function is based on the native R function as.numeric.

    -
    - -
    -
    ds.asNumeric(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the input object to be coerced to -a numeric.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default asnumeric.newobj.

    - - -
    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

    -

    ds.asNumeric returns the R object converted into a numeric class -that is written to the server-side. Also, two validity messages are returned -to the client-side indicating the name of the newobj which -has been created in each data source and if -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is based on the native R function as.numeric. -However, it behaves differently with some specific classes of variables. For example, if the input -object is of class factor, it first converts its values into characters and then convert those to -numerics. This behavior is important for the case where the input object is of class factor having -numbers as levels. In that case, the native R -as.numeric function returns the underlying level codes and not the values as numbers. -For example as.numeric in R converts the factor vector:
    -0 1 1 2 1 0 1 0 2 2 2 1
    -Levels: 0 1 2
    -to the following numeric vector: -1 2 2 3 2 1 2 1 3 3 3 2
    -In contrast DataSHIELD converts an input factor with numeric -levels to its original numeric values.

    -

    Server function called: asNumericDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Converting the R object into a numeric class
    -  ds.asNumeric(x.name = "D$LAB_TSC",
    -                  newobj = "num.obj",
    -                  datasources = connections[1]) #only the first Opal server is used ("study1")
    -  ds.class(x = "num.obj", datasources = connections[1]) 
    -                
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.assign.html b/docs/reference/ds.assign.html deleted file mode 100644 index 8057c1a4..00000000 --- a/docs/reference/ds.assign.html +++ /dev/null @@ -1,149 +0,0 @@ - -Assigns an R object to a name in the server-side — ds.assign • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function assigns a datashield object to a name, hence creating a new object.

    -
    - -
    -
    ds.assign(toAssign = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    toAssign
    -

    a character string providing the object to assign.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default assign.newobj.

    - - -
    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

    -

    ds.assign returns the R object assigned to a name -that is written to the server-side.

    -
    -
    -

    Details

    -

    The new object is stored on the server-side.

    -

    ds.assign causes a remote assignment by using DSI::datashield.assign. -The toAssign argument is checked at the server and -assigned the variable called newobj on the server-side.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Assign a variable to a name
    -  ds.assign(toAssign = "D$LAB_TSC",
    -            newobj = "labtsc",
    -            datasources = connections[1]) #only the first Opal server is used ("study1")
    -                
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.auc.html b/docs/reference/ds.auc.html deleted file mode 100644 index 28540596..00000000 --- a/docs/reference/ds.auc.html +++ /dev/null @@ -1,107 +0,0 @@ - -Calculates the Area under the curve (AUC) — ds.auc • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the C-statistic or AUC -for logistic regression models.

    -
    - -
    -
    ds.auc(pred = NULL, y = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    pred
    -

    the name of the vector of the predicted values

    - - -
    y
    -

    the name of the outcome variable. Note that this variable should include -the complete cases that are used in the regression model.

    - - -
    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

    -

    returns the AUC and its standard error

    -
    -
    -

    Details

    -

    The AUC determines the discriminative ability of a model.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.boxPlot.html b/docs/reference/ds.boxPlot.html deleted file mode 100644 index 323aab95..00000000 --- a/docs/reference/ds.boxPlot.html +++ /dev/null @@ -1,131 +0,0 @@ - -Draw boxplot — ds.boxPlot • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Draw boxplot with data on the study servers (data frames or numeric vectors) with the option -of grouping using categorical variables on the dataset (only for data frames)

    -
    - -
    -
    ds.boxPlot(
    -  x,
    -  variables = NULL,
    -  group = NULL,
    -  group2 = NULL,
    -  xlabel = "x axis",
    -  ylabel = "y axis",
    -  type = "pooled",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    character Name of the data frame (or numeric vector) on the server side that -holds the information to be plotted

    - - -
    variables
    -

    character vector Name of the column(s) of the data frame to include on the boxplot

    - - -
    group
    -

    character (default NULL) Name of the first grouping variable.

    - - -
    group2
    -

    character (default NULL) Name of the second grouping variable.

    - - -
    xlabel
    -

    caracter (default "x axis") Label to put on the x axis of the plot

    - - -
    ylabel
    -

    caracter (default "y axis") Label to put on the y axis of the plot

    - - -
    type
    -

    character Return a pooled plot ("pooled") or a split plot (one for each study server -"split")

    - - -
    datasources
    -

    a list of DSConnection-class (default NULL) objects obtained after login

    - -
    -
    -

    Value

    -

    ggplot object

    -
    - -
    -

    Examples

    - -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.boxPlotGG.html b/docs/reference/ds.boxPlotGG.html deleted file mode 100644 index 4736517a..00000000 --- a/docs/reference/ds.boxPlotGG.html +++ /dev/null @@ -1,126 +0,0 @@ - -Renders boxplot — ds.boxPlotGG • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Internal function. Renders a ggplot boxplot by retrieving from the server side a list with the identity stats and other -parameters to render the plot without passing any data from the original dataset

    -
    - -
    -
    ds.boxPlotGG(
    -  x,
    -  group = NULL,
    -  group2 = NULL,
    -  xlabel = "x axis",
    -  ylabel = "y axis",
    -  type = "pooled",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    character Name on the server side of the data frame to form a boxplot. Structure on the server -of this object must be:

    -

    Column 'x': Names on the X axis of the boxplot, aka variables to plot
    - Column 'value': Values for that variable (raw data of columns rbinded)
    - Column 'group': (Optional) Values of the grouping variable
    - Column 'group2': (Optional) Values of the second grouping variable

    - - -
    group
    -

    character (default NULL) Name of the first grouping variable.

    - - -
    group2
    -

    character (default NULL) Name of the second grouping variable.

    - - -
    xlabel
    -

    caracter (default "x axis") Label to put on the x axis of the plot

    - - -
    ylabel
    -

    caracter (default "y axis") Label to put on the y axis of the plot

    - - -
    type
    -

    character Return a pooled plot ("pooled") or a split plot (one for each study server -"split")

    - - -
    datasources
    -

    a list of DSConnection-class (default NULL) objects obtained after login

    - -
    -
    -

    Value

    -

    ggplot object

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.boxPlotGG_data_Treatment.html b/docs/reference/ds.boxPlotGG_data_Treatment.html deleted file mode 100644 index 51205d21..00000000 --- a/docs/reference/ds.boxPlotGG_data_Treatment.html +++ /dev/null @@ -1,113 +0,0 @@ - -Take a data frame on the server side an arrange it to pass it to the boxplot function — ds.boxPlotGG_data_Treatment • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Internal function

    -
    - -
    -
    ds.boxPlotGG_data_Treatment(
    -  table,
    -  variables,
    -  group = NULL,
    -  group2 = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    table
    -

    character Name of the table on the server side that holds the information to be plotted later

    - - -
    variables
    -

    character vector Name of the column(s) of the data frame to include on the boxplot

    - - -
    group
    -

    character (default NULL) Name of the first grouping variable.

    - - -
    group2
    -

    character (default NULL) Name of the second grouping variable.

    - - -
    datasources
    -

    a list of DSConnection-class (default NULL) objects obtained after login

    - -
    -
    -

    Value

    -

    Does not return nothing, it creates the table "boxPlotRawData" on the server arranged to be passed to the -ggplot boxplot function. Structure of the created table:

    -

    Column 'x': Names on the X axis of the boxplot, aka variables to plot
    - Column 'value': Values for that variable (raw data of columns rbinded)
    - Column 'group': (Optional) Values of the grouping variable
    - Column 'group2': (Optional) Values of the second grouping variable

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.boxPlotGG_data_Treatment_numeric.html b/docs/reference/ds.boxPlotGG_data_Treatment_numeric.html deleted file mode 100644 index 476f6b4e..00000000 --- a/docs/reference/ds.boxPlotGG_data_Treatment_numeric.html +++ /dev/null @@ -1,93 +0,0 @@ - -Take a vector on the server side an arrange it to pass it to the boxplot function — ds.boxPlotGG_data_Treatment_numeric • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Internal function

    -
    - -
    -
    ds.boxPlotGG_data_Treatment_numeric(vector, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    vector
    -

    character Name of the table on the server side that holds the information to be plotted later

    - - -
    datasources
    -

    a list of DSConnection-class (default NULL) objects obtained after login

    - -
    -
    -

    Value

    -

    Does not return nothing, it creates the table "boxPlotRawDataNumeric" on the server arranged to be passed to the -ggplot boxplot function. Structure of the created table:

    -

    Column 'x': Names on the X axis of the boxplot, aka name of the vector (vector argument)
    - Column 'value': Values for that variable

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.boxPlotGG_numeric.html b/docs/reference/ds.boxPlotGG_numeric.html deleted file mode 100644 index 4b9845e7..00000000 --- a/docs/reference/ds.boxPlotGG_numeric.html +++ /dev/null @@ -1,109 +0,0 @@ - -Draw boxplot with information from a numeric vector — ds.boxPlotGG_numeric • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Draw boxplot with information from a numeric vector

    -
    - -
    -
    ds.boxPlotGG_numeric(
    -  x,
    -  xlabel = "x axis",
    -  ylabel = "y axis",
    -  type = "pooled",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    character Name of the numeric vector on the server side that holds the information to be plotted

    - - -
    xlabel
    -

    caracter (default "x axis") Label to put on the x axis of the plot

    - - -
    ylabel
    -

    caracter (default "y axis") Label to put on the y axis of the plot

    - - -
    type
    -

    character Return a pooled plot ("pooled") or a split plot (one for each study server -"split")

    - - -
    datasources
    -

    a list of DSConnection-class (default NULL) objects obtained after login

    - -
    -
    -

    Value

    -

    ggplot object

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.boxPlotGG_table.html b/docs/reference/ds.boxPlotGG_table.html deleted file mode 100644 index ad10740a..00000000 --- a/docs/reference/ds.boxPlotGG_table.html +++ /dev/null @@ -1,124 +0,0 @@ - -Draw boxplot with information from a data frame — ds.boxPlotGG_table • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Draws a boxplot with the option of adding two grouping variables from data held on a table

    -
    - -
    -
    ds.boxPlotGG_table(
    -  x,
    -  variables,
    -  group = NULL,
    -  group2 = NULL,
    -  xlabel = "x axis",
    -  ylabel = "y axis",
    -  type = "pooled",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    character Name of the table on the server side that holds the information to be plotted

    - - -
    variables
    -

    character vector Name of the column(s) of the data frame to include on the boxplot

    - - -
    group
    -

    character (default NULL) Name of the first grouping variable.

    - - -
    group2
    -

    character (default NULL) Name of the second grouping variable.

    - - -
    xlabel
    -

    caracter (default "x axis") Label to put on the x axis of the plot

    - - -
    ylabel
    -

    caracter (default "y axis") Label to put on the y axis of the plot

    - - -
    type
    -

    character Return a pooled plot ("pooled") or a split plot (one for each study server -"split")

    - - -
    datasources
    -

    a list of DSConnection-class (default NULL) objects obtained after login

    - -
    -
    -

    Value

    -

    ggplot object

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.bp_standards.html b/docs/reference/ds.bp_standards.html deleted file mode 100644 index 82247836..00000000 --- a/docs/reference/ds.bp_standards.html +++ /dev/null @@ -1,144 +0,0 @@ - -Calculates Blood pressure z-scores — ds.bp_standards • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    The function calculates blood pressure z-scores in two steps: -Step 1. Calculates z-score of height according to CDC growth chart (Not the -WHO growth chart!). Step 2. Calculates z-score of BP according to the fourth -report on BP management, USA

    -
    - -
    -
    ds.bp_standards(
    -  sex = NULL,
    -  age = NULL,
    -  height = NULL,
    -  bp = NULL,
    -  systolic = TRUE,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    sex
    -

    the name of the sex variable. The variable should be coded as 1 for males -and 2 for females. If it is coded differently (e.g. 0/1), then you can use the -ds.recodeValues function to recode the categories to 1/2 before the use of -ds.bp_standards

    - - -
    age
    -

    the name of the age variable in years.

    - - -
    height
    -

    the name of the height variable in cm.

    - - -
    bp
    -

    the name of the blood pressure variable.

    - - -
    systolic
    -

    logical. If TRUE (default) the function assumes conversion of -systolic blood pressure. If FALSE the function assumes conversion of diastolic -blood pressure.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default name is set to bp.newobj.

    - - -
    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

    -

    assigns a new object on the server-side. The assigned object is a list -with two elements: the 'Zbp' which is the zscores of the blood pressure and 'perc' -which is the percentiles of the BP zscores.

    -
    -
    -

    References

    -

    The fourth report on the diagnosis, evaluation, and treatment of high -blood pressure in children and adolescents: -https://www.nhlbi.nih.gov/sites/default/files/media/docs/hbp_ped.pdf

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.c.html b/docs/reference/ds.c.html deleted file mode 100644 index 7a04d7dd..00000000 --- a/docs/reference/ds.c.html +++ /dev/null @@ -1,150 +0,0 @@ - -Combines values into a vector or list in the server-side — ds.c • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Concatenates objects into one vector.

    -
    - -
    -
    ds.c(x = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a vector of character string providing the names of the objects to be combined.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default c.newobj.

    - - -
    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

    -

    ds.c returns the vector of concatenating R - objects which are written to the server-side.

    -
    -
    -

    Details

    -

    To avoid combining the character names and not the -vectors on the client-side, the names are coerced into a list -and the server-side function loops through that list to -concatenate the list's elements into a vector.

    -

    Server function called: cDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Create a vector with combined objects
    -  myvect <- c("D$LAB_TSC", "D$LAB_HDL")
    -  ds.c(x = myvect,
    -       newobj = "new.vect",
    -       datasources = connections[1]) #only the first Opal server is used ("study1")
    -                
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }    
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.cbind.html b/docs/reference/ds.cbind.html deleted file mode 100644 index 7b771803..00000000 --- a/docs/reference/ds.cbind.html +++ /dev/null @@ -1,224 +0,0 @@ - -Combines R objects by columns in the server-side — ds.cbind • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Takes a sequence of vector, matrix or data-frame arguments -and combines them by column to produce a data-frame.

    -
    - -
    -
    ds.cbind(
    -  x = NULL,
    -  DataSHIELD.checks = FALSE,
    -  force.colnames = NULL,
    -  newobj = NULL,
    -  datasources = NULL,
    -  notify.of.progress = FALSE
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character vector with the name of the objects to be combined.

    - - -
    DataSHIELD.checks
    -

    logical. if TRUE does four checks:
    -1. the input object(s) is(are) defined in all the studies.
    -2. the input object(s) is(are) of the same legal class in all the studies.
    -3. if there are any duplicated column names in the input objects in each study.
    -4. the number of rows is the same in all components to be cbind.
    -Default FALSE.

    - - -
    force.colnames
    -

    can be NULL (recommended) or a vector of characters that specifies -column names of the output object. If it is not NULL the user should take some caution. -For more information see Details.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Defaults cbind.newobj.

    - - -
    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.

    - - -
    notify.of.progress
    -

    specifies if console output should be produced to indicate -progress. Default FALSE.

    - -
    -
    -

    Value

    -

    ds.cbind returns a data frame combining the columns of the R -objects specified in the function which is written to the server-side. -It also returns to the client-side two messages with the name of newobj -that has been created in each data source and DataSHIELD.checks result.

    -
    -
    -

    Details

    -

    A sequence of vector, matrix or data-frame arguments -is combined column by column to produce a data-frame that is written to the server-side.

    -

    This function is similar to the native R function cbind.

    -

    In DataSHIELD.checks the checks are relatively slow. -Default DataSHIELD.checks value is FALSE.

    -

    If force.colnames is NULL (which is recommended), the column names are inferred -from the names or column names of the first object specified in the x argument. -If this argument is not NULL, then the column names of the assigned data.frame have the -same order as the characters specified by the user in this argument. Therefore, the -vector of force.colnames must have the same number of elements as the columns in -the output object. In a multi-site DataSHIELD setting to use this argument, the user should -make sure that each study has the same number of names and column names of the input elements -specified in the x argument and in the same order in all the studies.

    -

    Server function called: cbindDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Example 1: Assign the exponent of a numeric variable at each server and cbind it 
    -  # to the data frame D
    -  
    -  ds.exp(x = "D$LAB_HDL",
    -         newobj = "LAB_HDL.exp",
    -         datasources = connections) 
    -         
    -  ds.cbind(x = c("D", "LAB_HDL.exp"),
    -           DataSHIELD.checks = FALSE,
    -           newobj = "D.cbind.1",
    -           datasources = connections)
    -             
    -  # Example 2: If there are duplicated column names in the input objects the function adds
    -  # a suffix '.k' to the kth replicate". If also the argument DataSHIELD.checks is set to TRUE
    -  # the function returns a warning message notifying the user for the existence of any duplicated
    -  # column names in each study
    -  
    -  ds.cbind(x = c("LAB_HDL.exp", "LAB_HDL.exp"), 
    -           DataSHIELD.checks = TRUE,
    -           newobj = "D.cbind.2",
    -           datasources = connections)
    -           
    -  ds.colnames(x = "D.cbind.2",
    -              datasources = connections)            
    -             
    -  # Example 3: Generate a random normally distributed variable of length 100 at each study,
    -  # and cbind it to the data frame D. This example fails and  returns an error as the length
    -  # of the generated variable "norm.var" is not the same as the number of rows in the data frame D
    -  
    -  ds.rNorm(samp.size = 100,
    -           newobj = "norm.var",
    -           datasources = connections) 
    -           
    -  ds.cbind(x = c("D", "norm.var"), 
    -           DataSHIELD.checks = FALSE,
    -           newobj = "D.cbind.3", 
    -           datasources = connections)                 
    -                   
    -  # Clear the Datashield R sessions and logout  
    -  datashield.logout(connections) 
    -  } # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.changeRefGroup.html b/docs/reference/ds.changeRefGroup.html deleted file mode 100644 index 10fb7b25..00000000 --- a/docs/reference/ds.changeRefGroup.html +++ /dev/null @@ -1,217 +0,0 @@ - -Changes the reference level of a factor in the server-side — ds.changeRefGroup • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Change the reference level of a factor, by putting -the reference group first.

    -

    This function is similar to R function relevel.

    -
    - -
    -
    ds.changeRefGroup(
    -  x = NULL,
    -  ref = NULL,
    -  newobj = NULL,
    -  reorderByRef = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the input vector of type factor.

    - - -
    ref
    -

    the reference level.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the server-side. Default changerefgroup.newobj.

    - - -
    reorderByRef
    -

    logical, if TRUE the new vector -should be ordered by the reference group (i.e. putting the reference group first). -The default is to not re-order (see the reasons in the details).

    - - -
    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

    -

    ds.changeRefGroup returns a new vector with the specified level as a reference -which is written to the server-side.

    -
    -
    -

    Details

    -

    This function -allows the user to re-order the vector, putting the reference -group first. It should be mentioned that by default the reference is -the first level in the vector of levels. -If the user chooses the re-order a warning is issued -as this can introduce a mismatch of values if the vector is put back -into a table that is not reordered in the same way. Such mismatch -can render the results of operations on that table invalid.

    -

    Server function called: changeRefGroupDS

    -
    -
    -

    See also

    -

    ds.cbind Combines objects column-wise.

    -

    ds.levels to obtain the levels (categories) of a vector of type factor.

    -

    ds.colnames to obtain the column names of a matrix or a data frame

    -

    ds.asMatrix to coerce an object into a matrix type.

    -

    ds.dim to obtain the dimensions of a matrix or a data frame.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Changing the reference group in the server-side
    - 
    -    # Example 1: rename the categories and change the reference with re-ordering
    -      # print out the levels of the initial vector
    -      ds.levels(x= "D$PM_BMI_CATEGORICAL",
    -                datasources = connections)
    -
    -      # define a vector with the new levels and recode the initial levels
    -      newNames <- c("normal", "overweight", "obesity")
    -      ds.recodeLevels(x = "D$PM_BMI_CATEGORICAL",
    -                      newCategories = newNames,
    -                      newobj = "bmi_new",
    -                      datasources = connections)
    -
    -      # print out the levels of the new vector
    -      ds.levels(x = "bmi_new",
    -                datasources = connections)
    -
    -      # Set the reference to "obesity" without changing the order (default)
    -      ds.changeRefGroup(x = "bmi_new",
    -                        ref = "obesity",
    -                        newobj = "bmi_ob",
    -                        datasources = connections)
    -
    -      # print out the levels; the first listed level (i.e. the reference) is now 'obesity'
    -      ds.levels(x = "bmi_ob",
    -                datasources = connections)
    -
    -    # Example 2: change the reference and re-order by the reference level
    -      # If re-ordering is sought, the action is completed but a warning is issued
    -      ds.recodeLevels(x = "D$PM_BMI_CATEGORICAL",
    -                      newCategories = newNames,
    -                      newobj = "bmi_new",
    -                     datasources = connections)
    -      ds.changeRefGroup(x = "bmi_new",
    -                        ref = "obesity",
    -                        newobj = "bmi_ob",
    -                        reorderByRef = TRUE,
    -                        datasources = connections)
    -
    -           
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.class.html b/docs/reference/ds.class.html deleted file mode 100644 index 4bed09e2..00000000 --- a/docs/reference/ds.class.html +++ /dev/null @@ -1,148 +0,0 @@ - -Class of the R object in the server-side — ds.class • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Retrieves the class of an R object. - This function is similar to the R function class.

    -
    - -
    -
    ds.class(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the input R object.

    - - -
    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

    -

    ds.class returns the type of the R object.

    -
    -
    -

    Details

    -

    Same as the native R function class.

    -

    Server function called: classDS

    -
    -
    -

    See also

    -

    ds.exists to verify if an object is defined (exists) on the server-side.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Getting the class of the R objects stored in the server-side
    -  ds.class(x = "D", #whole dataset
    -           datasources = connections[1]) #only the first server ("study1") is used
    -
    -  ds.class(x = "D$LAB_TSC", #select a variable
    -           datasources = connections[1]) #only the first server ("study1") is used
    -           
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.colnames.html b/docs/reference/ds.colnames.html deleted file mode 100644 index 6dc70fbb..00000000 --- a/docs/reference/ds.colnames.html +++ /dev/null @@ -1,145 +0,0 @@ - -Produces column names of the R object in the server-side — ds.colnames • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Retrieves column names of an R object on the server-side. -This function is similar to R function colnames.

    -
    - -
    -
    ds.colnames(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the input data frame or matrix.

    - - -
    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

    -

    ds.colnames returns the column names of -the specified server-side data frame or matrix.

    -
    -
    -

    Details

    -

    The input is restricted to the object of type data.frame or matrix.

    -

    Server function called: colnamesDS

    -
    -
    -

    See also

    -

    ds.dim to obtain the dimensions of a matrix or a data frame.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # 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) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.completeCases.html b/docs/reference/ds.completeCases.html deleted file mode 100644 index 2e200009..00000000 --- a/docs/reference/ds.completeCases.html +++ /dev/null @@ -1,165 +0,0 @@ - -Identifies complete cases in server-side R objects — ds.completeCases • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Selects complete cases of a data frame, -matrix or vector that contain missing values.

    -
    - -
    -
    ds.completeCases(x1 = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x1
    -

    a character denoting the name of the input object which can be a data frame, -matrix or vector.

    - - -
    newobj
    -

    a character string that provides the name for the complete-cases object -that is stored on the data servers. If the user does not specify a name, then the function -generates a name for the generated object that is the name of the input object with the -suffix "_complete.cases"

    - - -
    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

    -

    ds.completeCases generates a modified data frame, matrix or vector from which -all rows containing at least one NA have been deleted. The output object is stored on the -server-side. Only two validity messages are returned to the client-side indicating the name -of the newobj that has been created in each data source and if it is in a valid form.

    -
    -
    -

    Details

    -

    In the case of a data frame or matrix, ds.completeCases deletes -all rows containing one or more missing values. However ds.completeCases -in vectors only deletes the observation recorded as NA.

    -

    Server function called: completeCasesDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Select complete cases from different R objects
    -
    -  ds.completeCases(x1 = "D", #data frames in the Opal servers 
    -                             #(see above the connection to the Opal servers)
    -                   newobj = "D.completeCases", # name for the output object 
    -                                               # that is stored in the Opal servers
    -                   datasources = connections)  # All Opal servers are used 
    -                                               # (see above the connection to the Opal servers)
    -                 
    -  ds.completeCases(x1 = "D$LAB_TSC", #vector (variable) of the data frames in the Opal servers 
    -                                     #(see above the connection to the Opal servers)
    -                   newobj = "LAB_TSC.completeCases", #name for the output variable 
    -                                                     #that is stored in the Opal servers
    -                   datasources = connections[2]) #only the second Opal server is used ("study2")
    -                   
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -  } # }
    -  
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.contourPlot.html b/docs/reference/ds.contourPlot.html deleted file mode 100644 index 2858a022..00000000 --- a/docs/reference/ds.contourPlot.html +++ /dev/null @@ -1,221 +0,0 @@ - -Generates a contour plot — ds.contourPlot • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    It generates a contour plot of the pooled data -or one plot for each dataset on the client-side.

    -
    - -
    -
    ds.contourPlot(
    -  x = NULL,
    -  y = NULL,
    -  type = "combine",
    -  show = "all",
    -  numints = 20,
    -  method = "smallCellsRule",
    -  k = 3,
    -  noise = 0.25,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of a numerical vector.

    - - -
    y
    -

    a character string providing the name of a numerical vector.

    - - -
    type
    -

    a character string that represents the type of graph to display. -If type is set to 'combine', a combined contour plot displayed and -if type is set to 'split', each contour is plotted separately.

    - - -
    show
    -

    a character that represents where the plot should focus. -If show is set to 'all', the ranges of the variables are used as plot limits. -If show is set to 'zoomed', the plot is zoomed to the region where the actual data are.

    - - -
    numints
    -

    number of intervals for a density grid object.

    - - -
    method
    -

    a character that defines which contour will be created. If method -is set to 'smallCellsRule' (default), the contour plot of the actual variables is -created but grids with low counts are replaced with grids with zero counts. If method is -set to 'deterministic' the contour of the scaled centroids of each k nearest neighbour of the -original variables is created, where the value of k is set by the user. If the -method is set to 'probabilistic', then the contour of 'noisy' variables is generated.

    - - -
    k
    -

    the number of the nearest neighbours for which their centroid is calculated. For more information -see details.

    - - -
    noise
    -

    the percentage of the initial variance that is used as the variance of the embedded -noise if the argument method is set to 'probabilistic'. For more information see details.

    - - -
    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

    -

    ds.contourPlot returns a contour plot to the client-side.

    -
    -
    -

    Details

    -

    The ds.contourPlot function first generates -a density grid and uses it to plot the graph. -The cells of the grid density matrix that hold a count of less than the filter set by -DataSHIELD (usually 5) are considered invalid and turned into 0 to avoid potential -disclosure. A message is printed to inform the user about the number of invalid cells.

    -

    The ranges returned by each study and used in the process of getting the grid density matrix -are not the exact minimum and maximum values but rather close approximates of the real -minimum and maximum value. This was done to reduce the risk of potential disclosure.

    -

    In the k parameter the user can choose any value for k equal to or greater -than the pre-specified threshold used as a disclosure control for this method -and lower than the number of observations minus the value of this threshold. -k default value is 3 (we suggest k to be equal to, or bigger than, 3). -Note that the function fails if the user -uses the default value but the study has set a bigger threshold. -The value of k is used only if the argument method is set to 'deterministic'. -Any value of k is ignored if the -argument method is set to 'probabilistic' or 'smallCellsRule'.

    -

    In noise any value of noise is ignored if -the argument method is set to 'deterministic' or 'smallCellsRule'. The user can choose -any value for noise equal to or greater than the pre-specified threshold 'nfilter.noise'. -Default noise value is 0.25. -The added noise follows a normal distribution with zero mean and variance equal to a percentage of -the initial variance of each input variable.

    -

    Server functions called: heatmapPlotDS, rangeDS and densityGridDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Generating contour plots
    -
    -  ds.contourPlot(x = "D$LAB_TSC",
    -                 y = "D$LAB_HDL",
    -                 type = "combine", 
    -                 show = "all",
    -                 numints = 20,
    -                 method = "smallCellsRule",  
    -                 k = 3, 
    -                 noise = 0.25,
    -                 datasources = connections)
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.cor.html b/docs/reference/ds.cor.html deleted file mode 100644 index f86dd9b9..00000000 --- a/docs/reference/ds.cor.html +++ /dev/null @@ -1,174 +0,0 @@ - -Calculates the correlation of R objects in the server-side — ds.cor • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the correlation of two variables or the correlation -matrix for the variables of an input data frame.

    -
    - -
    -
    ds.cor(x = NULL, y = NULL, type = "split", datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the input vector, data frame or matrix.

    - - -
    y
    -

    a character string providing the name of the input vector, data frame or matrix. -Default NULL.

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -This must be set to 'split' or 'combine'. Default 'split'. For more information see details.

    - - -
    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

    -

    ds.cor returns a list containing the number of missing values in each variable, -the number of missing variables casewise, the correlation matrix, -the number of used complete cases. The function applies two disclosure controls. The first disclosure -control checks that the number of variables is not bigger than a percentage of the individual-level records (the allowed -percentage is pre-specified by the 'nfilter.glm'). The second disclosure control checks that none of them is dichotomous -with a level having fewer counts than the pre-specified 'nfilter.tab' threshold.

    -
    -
    -

    Details

    -

    In addition to computing correlations; this function produces a table outlining the -number of complete cases and a table outlining the number of missing values to allow the -user to decide the 'relevance' of the correlation based on the number of complete -cases included in the correlation calculations.

    -

    If the argument y is not NULL, the dimensions of the object have to be -compatible with the argument x.

    -

    The function calculates the pairwise correlations based on casewise complete cases which means that -it omits all the rows in the input data frame that include at least one cell with a missing value, -before the calculation of correlations.

    -

    If type is set to 'split' (default), the correlation of two variables or the -variance-correlation matrix of an input data frame and the number of complete cases and missing -values are returned for every single study. If type is set to 'combine', the pooled -correlation, the total number of complete cases and the total number of missing values aggregated -from all the involved studies, are returned.

    -

    Server function called: corDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Example 1: Get the correlation matrix of two continuous variables
    -  ds.cor(x="D$LAB_TSC", y="D$LAB_TRIG", type="combine", datasources = connections)
    -  
    -  # Example 2: Get the correlation matrix of the variables in a dataframe
    -  ds.dataFrame(x=c("D$LAB_TSC", "D$LAB_TRIG", "D$LAB_HDL", "D$PM_BMI_CONTINUOUS"), 
    -               newobj="D.new", check.names=FALSE, datasources=connections)
    -  ds.cor("D.new", type="combine", datasources = connections)
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.corTest.html b/docs/reference/ds.corTest.html deleted file mode 100644 index 8190dca4..00000000 --- a/docs/reference/ds.corTest.html +++ /dev/null @@ -1,180 +0,0 @@ - -Tests for correlation between paired samples in the server-side — ds.corTest • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is similar to the R stats function cor.test.

    -
    - -
    -
    ds.corTest(
    -  x = NULL,
    -  y = NULL,
    -  method = "pearson",
    -  exact = NULL,
    -  conf.level = 0.95,
    -  type = "split",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of a numerical vector.

    - - -
    y
    -

    a character string providing the name of a numerical vector.

    - - -
    method
    -

    a character string indicating which correlation coefficient is to be -used for the test. One of "pearson", "kendall", or "spearman", can be abbreviated. -Default is set to "pearson".

    - - -
    exact
    -

    a logical indicating whether an exact p-value should be computed. Used for -Kendall's tau and Spearman's rho. See ‘Details’ of R stats function cor.test for -the meaning of NULL (the default).

    - - -
    conf.level
    -

    confidence level for the returned confidence interval. Currently -only used for the Pearson product moment correlation coefficient if there are at least -4 complete pairs of observations. Default is set to 0.95.

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -This must be set to 'split' or 'combine'. Default is set to 'split'. If -type is set to "combine" then an approximated pooled correlation is estimated based on -Fisher's z transformation.

    - - -
    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

    -

    ds.corTest returns to the client-side the results of the correlation test.

    -
    -
    -

    Details

    -

    Runs a two-sided correlation test between paired samples, using one of -Pearson's product moment correlation coefficient, Kendall's tau or Spearman's rho. -Server function called: corTestDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # test for correlation
    -  ds.corTest(x = "D$LAB_TSC",
    -             y = "D$LAB_HDL",
    -             datasources = connections[1]) #Only first server is used ("study1")
    -                
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.cov.html b/docs/reference/ds.cov.html deleted file mode 100644 index b97c414b..00000000 --- a/docs/reference/ds.cov.html +++ /dev/null @@ -1,199 +0,0 @@ - -Calculates the covariance of R objects in the server-side — ds.cov • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the covariance of two variables or the variance-covariance -matrix for the variables of an input data frame.

    -
    - -
    -
    ds.cov(
    -  x = NULL,
    -  y = NULL,
    -  naAction = "pairwise.complete",
    -  type = "split",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the input vector, data frame or matrix.

    - - -
    y
    -

    a character string providing the name of the input vector, -data frame or matrix. Default NULL.

    - - -
    naAction
    -

    a character string giving a method for computing covariances in the -presence of missing values. This must be set to 'casewise.complete' or -'pairwise.complete'. Default 'pairwise.complete'. For more information see details.

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -This must be set to 'split' or 'combine'. Default 'split'. For more information see details.

    - - -
    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

    -

    ds.cov returns a list containing the number of missing values in each variable, the number of missing values -casewise or pairwise depending on the argument naAction, the covariance matrix, the number of used complete cases -and an error message which indicates whether or not the input variables pass the disclosure controls. The first disclosure -control checks that the number of variables is not bigger than a percentage of the individual-level records (the allowed -percentage is pre-specified by the 'nfilter.glm'). The second disclosure control checks that none of them is dichotomous -with a level having fewer counts than the pre-specified 'nfilter.tab' threshold. If any of the input variables do not pass -the disclosure controls then all the output values are replaced with NAs. If all the variables are valid and pass -the controls, then the output matrices are returned and also an error message is returned but it is replaced by NA.

    -
    -
    -

    Details

    -

    In addition to computing covariances; this function produces a table outlining the -number of complete cases and a table outlining the number of missing values to allow for the -user to decide about the 'relevance' of the covariance based on the number of complete -cases included in the covariance calculations.

    -

    If the argument y is not NULL, the dimensions of the object have to be -compatible with the argument x.

    -

    If naAction is set to 'casewise.complete', then the function omits all the rows -in the whole data frame that include at least one cell with a missing value before the calculation of covariances. -If naAction is set to 'pairwise.complete' (default), -then the function divides the input data frame to -subset data frames formed by each pair between two variables -(all combinations are considered) and omits the rows -with missing values at each pair separately and then calculates the covariances of those pairs.

    -

    If type is set to 'split' (default), the covariance of two variables or the -variance-covariance matrix of an input data frame and the number of -complete cases and missing values are returned for every single study. -If type is set to 'combine', the pooled covariance, the total number of complete cases -and the total number of missing values aggregated from all the involved studies, are returned.

    -

    Server function called: covDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Calculate the covariance between two vectors
    -  ds.assign(newobj='labhdl', toAssign='D$LAB_HDL', datasources = connections)
    -  ds.assign(newobj='labtsc', toAssign='D$LAB_TSC', datasources = connections)
    -  ds.assign(newobj='gender', toAssign='D$GENDER', datasources = connections)
    -  ds.cov(x = 'labhdl',
    -         y = 'labtsc',
    -         naAction = 'pairwise.complete',
    -         type = 'combine',
    -         datasources = connections)
    -  ds.cov(x = 'labhdl',
    -         y = 'gender',
    -         naAction = 'pairwise.complete',
    -         type = 'combine',
    -         datasources = connections[1]) #only the first Opal server is used ("study1")
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.dataFrame.html b/docs/reference/ds.dataFrame.html deleted file mode 100644 index f32cf6bc..00000000 --- a/docs/reference/ds.dataFrame.html +++ /dev/null @@ -1,217 +0,0 @@ - -Generates a data frame object in the server-side — ds.dataFrame • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Creates a data frame from its elemental components: - pre-existing data frames, single variables or matrices.

    -
    - -
    -
    ds.dataFrame(
    -  x = NULL,
    -  row.names = NULL,
    -  check.rows = FALSE,
    -  check.names = TRUE,
    -  stringsAsFactors = TRUE,
    -  completeCases = FALSE,
    -  DataSHIELD.checks = FALSE,
    -  newobj = NULL,
    -  datasources = NULL,
    -  notify.of.progress = FALSE
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string that provides the name of the objects -to be combined.

    - - -
    row.names
    -

    NULL, integer or character string that provides the -row names of the output data frame.

    - - -
    check.rows
    -

    logical. If TRUE then the rows are checked for consistency of -length and names. Default is FALSE.

    - - -
    check.names
    -

    logical. If TRUE the column names -in the data frame are checked to ensure that is unique. Default is TRUE.

    - - -
    stringsAsFactors
    -

    logical. If true the character vectors are -converted to factors. Default TRUE.

    - - -
    completeCases
    -

    logical. If TRUE rows with one or more -missing values will be deleted from the output data frame. -Default is FALSE.

    - - -
    DataSHIELD.checks
    -

    logical. Default FALSE. If TRUE undertakes all DataSHIELD checks -(time-consuming) which are:
    -1. the input object(s) is(are) defined in all the studies
    -2. the input object(s) is(are) of the same legal class in all the studies
    -3. if there are any duplicated column names in the input objects in each study
    -4. the number of rows of the data frames or matrices and the length of all component variables -are the same

    - - -
    newobj
    -

    a character string that provides the name for the output data frame -that is stored on the data servers. Default dataframe.newobj.

    - - -
    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.

    - - -
    notify.of.progress
    -

    specifies if console output should be produced to indicate -progress. Default is FALSE.

    - -
    -
    -

    Value

    -

    ds.dataFrame returns the object specified by the newobj argument -which is written to the serverside. Also, two validity messages are returned to the -client-side indicating the name of the newobj that has been created in each data source -and if it is in a valid form.

    -
    -
    -

    Details

    -

    It creates a data frame by combining -pre-existing data frames, matrices or variables.

    -

    The length of all component variables and the number of rows -of the data frames or matrices must be the same. The output -data frame will have the same number of rows.

    -

    Server functions called: classDS, colnamesDS, dataFrameDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Create a new data frame
    -  ds.dataFrame(x = c("D$LAB_TSC","D$GENDER","D$PM_BMI_CATEGORICAL"),
    -               row.names = NULL,
    -               check.rows = FALSE,
    -               check.names = TRUE,
    -               stringsAsFactors = TRUE, #character variables are converted to a factor 
    -               completeCases = TRUE, #only rows with not missing values are selected
    -               DataSHIELD.checks = FALSE,
    -               newobj = "df1",
    -               datasources = connections[1], #only the first Opal server is used ("study1")
    -               notify.of.progress = FALSE)
    -
    -
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.dataFrameFill.html b/docs/reference/ds.dataFrameFill.html deleted file mode 100644 index e6c29795..00000000 --- a/docs/reference/ds.dataFrameFill.html +++ /dev/null @@ -1,168 +0,0 @@ - -Creates missing values columns in the server-side — ds.dataFrameFill • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Adds extra columns with missing values in a data frame on the server-side.

    -
    - -
    -
    ds.dataFrameFill(df.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    df.name
    -

    a character string representing the name of the input data frame that will be -filled with extra columns of missing values.

    - - -
    newobj
    -

    a character string that provides the name for the output data frame -that is stored on the data servers. Default value is "dataframefill.newobj".

    - - -
    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

    -

    ds.dataFrameFill returns the object specified by the newobj argument which -is written to the server-side. Also, two validity messages are returned to the -client-side indicating the name of the newobj that has been created in each data source -and if it is in a valid form.

    -
    -
    -

    Details

    -

    This function checks if the input data frames have the same variables (i.e. the same -column names) in all of the used studies. When a study does not have some of the variables, the -function generates those variables as vectors of missing values and combines them as columns to -the input data frame. If any of the generated variables are of class factor, the function -assigns to those the corresponding levels of the factors given from the studies where such -factors exist.

    -

    Server function called: dataFrameFillDS

    -
    -
    -

    Author

    -

    Demetris Avraam 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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Create two data frames with one different column
    -  
    -  ds.dataFrame(x = c("D$LAB_TSC","D$LAB_TRIG","D$LAB_HDL",
    -                     "D$LAB_GLUC_ADJUSTED","D$PM_BMI_CONTINUOUS"),
    -               newobj = "df1",
    -               datasources = connections[1])
    -               
    -  ds.dataFrame(x = c("D$LAB_TSC","D$LAB_TRIG","D$LAB_HDL","D$LAB_GLUC_ADJUSTED"),
    -               newobj = "df1",
    -               datasources = connections[2])
    -  
    -  # Fill the data frame with NA columns
    -  
    -  ds.dataFrameFill(df.name = "df1",
    -                   newobj = "D.Fill",
    -                   datasources = connections[c(1,2)]) # Two servers are used
    -
    -
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.dataFrameSort.html b/docs/reference/ds.dataFrameSort.html deleted file mode 100644 index efa19b70..00000000 --- a/docs/reference/ds.dataFrameSort.html +++ /dev/null @@ -1,189 +0,0 @@ - -Sorts data frames in the server-side — ds.dataFrameSort • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Sorts a data frame using a specified sort key.

    -
    - -
    -
    ds.dataFrameSort(
    -  df.name = NULL,
    -  sort.key.name = NULL,
    -  sort.descending = FALSE,
    -  sort.method = "default",
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    df.name
    -

    a character string providing the name of the data frame -to be sorted.

    - - -
    sort.key.name
    -

    a character string providing the name for the sort key.

    - - -
    sort.descending
    -

    logical, if TRUE the data frame will be sorted. -by the sort key in descending order. Default = FALSE (sort order ascending).

    - - -
    sort.method
    -

    a character string that specifies the method to be used -to sort the data frame. This can be set as -"alphabetic","a" or "numeric", "n".

    - - -
    newobj
    -

    a character string that provides the name for the output data frame -that is stored on the data servers. Default dataframesort.newobj. -where df.name is the first argument of ds.dataFrameSort().

    - - -
    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

    -

    ds.dataFrameSort returns the sorted data frame is written to the server-side. -Also, two validity messages are returned to the client-side -indicating the name of the newobj which -has been created in each data source and if -it is in a valid form.

    -
    -
    -

    Details

    -

    It sorts a specified -data.frame on the serverside using a sort key also on the server-side. The -sort key can either sit in the data.frame or outside it. -The sort key can be forced to be interpreted as alphabetic or numeric.

    -

    When a numeric vector is sorted alphabetically, the order can look confusing. -For example, if we have a numeric vector to sort:
    -vector.2.sort = c(-192, 76, 841, NA, 1670, 163, 147, 101, -112, -231, -9, 119, 112, NA)

    -

    When sorting numbers in an ascending (default) manner, -the largest negative numbers get ordered first -leading up to the largest positive numbers -and finally (by default in R) NAs being positioned at the end of the vector:
    -numeric.sort = c(-231, -192, -112, -9, 76, 101, 112, 119, 147, 163, 841, 1670, NA, NA)

    -

    Instead, if the same vector is sorted alphabetically the the resultant vector is:

    -

    alphabetic.sort = (-112, -192, -231, -9, 101, 112, 119, 147, 163, 1670, 76, 841, NA, NA)

    -

    Server function called: dataFrameSortDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Sorting the data frame
    -  ds.dataFrameSort(df.name = "D",
    -                   sort.key.name = "D$LAB_TSC",
    -                   sort.descending = TRUE,
    -                   sort.method = "numeric",
    -                   newobj = "df.sort",
    -                   datasources = connections[1]) #only the first Opal server is used ("study1")
    -                   
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.dataFrameSubset.html b/docs/reference/ds.dataFrameSubset.html deleted file mode 100644 index f1559f19..00000000 --- a/docs/reference/ds.dataFrameSubset.html +++ /dev/null @@ -1,234 +0,0 @@ - -Sub-sets data frames in the server-side — ds.dataFrameSubset • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Subsets a data frame by rows and/or by columns.

    -
    - -
    -
    ds.dataFrameSubset(
    -  df.name = NULL,
    -  V1.name = NULL,
    -  V2.name = NULL,
    -  Boolean.operator = NULL,
    -  keep.cols = NULL,
    -  rm.cols = NULL,
    -  keep.NAs = NULL,
    -  newobj = NULL,
    -  datasources = NULL,
    -  notify.of.progress = FALSE
    -)
    -
    - -
    -

    Arguments

    - - -
    df.name
    -

    a character string providing the name of the data frame to be subseted.

    - - -
    V1.name
    -

    A character string specifying the name of the vector -to which the Boolean operator is to be applied to define the subset. -For more information see details.

    - - -
    V2.name
    -

    A character string specifying the name of the vector to compare -with V1.name.

    - - -
    Boolean.operator
    -

    A character string specifying one of six possible Boolean operators: -'==', '!=', '>', '>=', '<' and '<='.

    - - -
    keep.cols
    -

    a numeric vector specifying the numbers of the columns to be kept in the -final subset.

    - - -
    rm.cols
    -

    a numeric vector specifying the numbers of the columns to be removed from -the final subset.

    - - -
    keep.NAs
    -

    logical, if TRUE the missing values are included in the subset. -If FALSE or NULL all rows with at least one missing values are removed from the subset.

    - - -
    newobj
    -

    a character string that provides the name for the output -object that is stored on the data servers. Default dataframesubset.newobj.

    - - -
    datasources
    -

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

    - - -
    notify.of.progress
    -

    specifies if console output should be produced to indicate -progress. Default FALSE.

    - -
    -
    -

    Value

    -

    ds.dataFrameSubset returns -the object specified by the newobj argument -which is written to the server-side. -Also, two validity messages are returned to the client-side indicating -the name of the newobj which has been created in each data source - and if it is in a valid form.

    -
    -
    -

    Details

    -

    Subset a pre-existing data frame using the standard -set of Boolean operators (==, !=, >, >=, <, <=). -The subsetting is made by rows, but it is also possible to select -columns to keep or remove. Instead, if you -wish to keep all rows in the subset (e.g. if the primary plan is to subset by columns -and not by rows) the V1.name and V2.name parameters can be used -to specify a vector of the same length -as the data frame to be subsetted in each study in which every element is 1 and -there are no missing values. For more information see the example 2 below.

    -

    Server functions called: dataFrameSubsetDS1 and dataFrameSubsetDS2

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Subsetting a data frame
    -  #Example 1: Include some rows and all columns in the subset
    -  ds.dataFrameSubset(df.name = "D",
    -                     V1.name = "D$LAB_TSC",
    -                     V2.name = "D$LAB_TRIG",
    -                     Boolean.operator = ">",
    -                     keep.cols = NULL, #All columns are included in the new subset
    -                     rm.cols = NULL, #All columns are included in the new subset
    -                     keep.NAs = FALSE, #All rows with NAs are removed
    -                     newobj = "new.subset",
    -                     datasources = connections[1],#only the first server is used ("study1")
    -                     notify.of.progress = FALSE)
    -  #Example 2: Include all rows and some columns in the new subset
    -    #Select complete cases (rows without NA)
    -    ds.completeCases(x1 = "D",
    -                     newobj = "complet",
    -                     datasources = connections)
    -    #Create a vector with all ones
    -    ds.make(toAssign = "complet$LAB_TSC-complet$LAB_TSC+1",
    -            newobj = "ONES",
    -            datasources = connections) 
    -    #Subset the data
    -    ds.dataFrameSubset(df.name = "complet",
    -                       V1.name = "ONES",
    -                       V2.name = "ONES",
    -                       Boolean.operator = "==",
    -                       keep.cols = c(1:4,10), #only columns 1, 2, 3, 4 and 10 are selected
    -                       rm.cols = NULL,
    -                       keep.NAs = FALSE,
    -                       newobj = "subset.all.rows",
    -                       datasources = connections, #all servers are used
    -                       notify.of.progress = FALSE)                
    -                     
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.densityGrid.html b/docs/reference/ds.densityGrid.html deleted file mode 100644 index 03906004..00000000 --- a/docs/reference/ds.densityGrid.html +++ /dev/null @@ -1,138 +0,0 @@ - -Generates a density grid in the client-side — ds.densityGrid • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function generates a grid density object which can then be used to produced -heatmap or contour plots.

    -
    - -
    -
    ds.densityGrid(
    -  x = NULL,
    -  y = NULL,
    -  numints = 20,
    -  type = "combine",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the input numerical vector.

    - - -
    y
    -

    a character string providing the name of the input numerical vector.

    - - -
    numints
    -

    an integer, the number of intervals for the grid density object. -The default value is 20.

    - - -
    type
    -

    a character string that represents the type of graph to display. -If type is set to -'combine', a pooled grid density matrix is generated, -instead if type is set to 'split' -one grid density matrix is generated. Default 'combine'.

    - - -
    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

    -

    ds.densityGrid returns a grid density matrix.

    -
    -
    -

    Details

    -

    The cells with a count > 0 and < nfilter.tab are considered invalid -and the count is set to 0.

    -

    In DataSHIELD the user does not have access to the micro-data so and extreme values -such as the maximum and the minimum are potentially non-disclosive so this function does not allow -for the user to set the limits of the density grid and -the minimum and maximum values of the x -and y vectors. These elements are set by the server-side function -densityGridDS to 'valid' values -(i.e. values that do not lead to leakage of micro-data to the user).

    -

    Server function called: densityGridDS

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    - -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.dim.html b/docs/reference/ds.dim.html deleted file mode 100644 index 3469f8ad..00000000 --- a/docs/reference/ds.dim.html +++ /dev/null @@ -1,185 +0,0 @@ - -Retrieves the dimension of a server-side R object — ds.dim • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Gives the dimensions of an R object on the server-side. -This function is similar to R function dim.

    -
    - -
    -
    ds.dim(x = NULL, type = "both", checks = FALSE, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the input object.

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -If type is set to 'combine', 'combined', 'combines' or 'c', - the global dimension is returned. -If type is set to 'split', 'splits' or 's', -the dimension is returned separately for each study. -If type is set to 'both' or 'b', both sets of outputs are produced. -Default 'both'.

    - - -
    checks
    -

    logical. If TRUE undertakes all DataSHIELD checks (time-consuming). -Default FALSE.

    - - -
    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

    -

    ds.dim retrieves to the client-side the dimension of the object -in the form of a vector where the first -element indicates the number of rows and the second element indicates the number of columns.

    -
    -
    -

    Details

    -

    The function returns the dimension of the server-side -input object (e.g. array, matrix or data frame) -from every single study and the pooled dimension of the object by summing up the individual -dimensions returned from each study.

    -

    In checks parameter is suggested that checks should only be undertaken once the -function call has failed.

    -

    Server function called: dimDS

    -
    -
    -

    See also

    -

    ds.dataFrame to generate a table of the type data frame.

    -

    ds.changeRefGroup to change the reference level of a factor.

    -

    ds.colnames to obtain the column names of a matrix or a data frame

    -

    ds.asMatrix to coerce an object into a matrix type.

    -

    ds.length to obtain the size of a vector.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -
    -  # Calculate the dimension
    -  ds.dim(x="D", 
    -         type="combine", #global dimension
    -         checks = FALSE,
    -         datasources = connections)#all opal servers are used
    -  ds.dim(x="D",
    -         type = "both",#separate dimension for each study
    -                       #and the pooled dimension (default) 
    -         checks = FALSE,
    -         datasources = connections)#all opal servers are used
    -  ds.dim(x="D", 
    -         type="split", #separate dimension for each study
    -         checks = FALSE,
    -         datasources = connections[1])#only the first opal server is used ("study1")
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.dmtC2S.html b/docs/reference/ds.dmtC2S.html deleted file mode 100644 index 3b453ecb..00000000 --- a/docs/reference/ds.dmtC2S.html +++ /dev/null @@ -1,138 +0,0 @@ - -Copy a clientside data.frame, matrix or tibble to the serverside — ds.dmtC2S • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Creates a data.frame, matrix or tibble on the serverside -that is equivalent to that same data.frame, matrix or tibble (DMT) on the clientside.

    -
    - -
    -
    ds.dmtC2S(dfdata = NA, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    dfdata
    -

    is a character string that specifies the name of the DMT -to be copied from the clientside to the serverside

    - - -
    newobj
    -

    A character string specifying the name of the DMT on the serverside -to which the output is to be written. If no <newobj> argument is specified or it is NULL -the name of the copied DMT defaults to "dmt.copied.C2S".

    - - -
    datasources
    -

    specifies the particular 'connection object(s)' to use. -e.g. if you have several data sets in the sources you are working with -called opals.a, opals.w2, and connection.xyz, you can choose which of -these to work with. The call 'datashield.connections_find()' lists all of -the different datasets available and if one of these is called 'default.connections' -that will be the dataset used by default if no other dataset is specified. If you -wish to change the connections you wish to use by default the call -datashield.connections_default('opals.a') will set 'default.connections' -to be 'opals.a' and so in the absence of specific instructions to the contrary -(e.g. by specifiying a particular dataset to be used via the <datasources> -argument) all subsequent function calls will be to the datasets held in opals.a. -If the <datasources> argument is specified, it should be set without -inverted commas: e.g. datasources=opals.a or datasources=default.connections. -The <datasources> argument also allows you to apply a function solely to a subset -of the studies/sources you are working with. For example, the second source -in a set of three, can be specified using a call such as datasources=connection.xyz[2]. -On the other hand, if you wish to specify solely the first and third sources, the -appropriate call will be datasources=connections.xyz[c(1,3)]

    - -
    -
    -

    Value

    -

    the object specified by the <newobj> argument (or default name "dmt.copied.C2S") -which is written as a data.frame/matrix/tibble to the serverside.

    -
    -
    -

    Details

    -

    ds.dmtC2S calls assign function dmtC2SDS. To keep the -function simple (though less flexible), a number of the parameters specifying -the DMT to be generated on the serverside are fixed by the -characteristics of the DMT to be copied rather than explicitly -specifying them as selected arguments. In consequence, -they have been removed from the list of arguments and are instead given invariant -values in the first few lines of code. These include: from="clientside.dmt", -nrows.scalar=NULL, ncols.scalar=NULL, byrow = FALSE. The specific value -"clientside.dmt" for the argument <from> simply -means that the required information is generated from -the characteristics of a clientside DMT. The <nrows.scalar> -and <ncols.scalar> are fixed empirically by the number of rows and columns of -the DMT to be copied. <byrow> specifies writing the serverside DMT by -columns or by rows and this is defaulted to byrow=FALSE i.e. "by column".

    -
    -
    -

    Author

    -

    Paul Burton for DataSHIELD Development Team - 3rd June, 2021

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.elspline.html b/docs/reference/ds.elspline.html deleted file mode 100644 index 102add33..00000000 --- a/docs/reference/ds.elspline.html +++ /dev/null @@ -1,137 +0,0 @@ - -Basis for a piecewise linear spline with meaningful coefficients — ds.elspline • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function is based on the native R function elspline from the -lspline package. This function computes the basis of piecewise-linear spline -such that, depending on the argument marginal, the coefficients can be interpreted as -(1) slopes of consecutive spline segments, or (2) slope change at consecutive knots.

    -
    - -
    -
    ds.elspline(
    -  x,
    -  n,
    -  marginal = FALSE,
    -  names = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    the name of the input numeric variable

    - - -
    n
    -

    integer greater than 2, knots are computed such that they cut n equally-spaced -intervals along the range of x

    - - -
    marginal
    -

    logical, how to parametrize the spline, see Details

    - - -
    names
    -

    character, vector of names for constructed variables

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default elspline.newobj.

    - - -
    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

    -

    an object of class "lspline" and "matrix", which its name is specified by the -newobj argument (or its default name "elspline.newobj"), is assigned on the serverside.

    -
    -
    -

    Details

    -

    If marginal is FALSE (default) the coefficients of the spline correspond to -slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -the slope of the first segment. The consecutive coefficients correspond to the change -in slope as compared to the previous segment. -Function elspline wraps lspline and computes the knot positions such that they cut the -range of x into n equal-width intervals.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.exists.html b/docs/reference/ds.exists.html deleted file mode 100644 index 08944f12..00000000 --- a/docs/reference/ds.exists.html +++ /dev/null @@ -1,156 +0,0 @@ - -Checks if an object is defined on the server-side — ds.exists • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Looks if an R object of the given name is defined on the server-side. -This function is similar to the R function exists.

    -
    - -
    -
    ds.exists(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of the object to look for.

    - - -
    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

    -

    ds.exists returns a logical object. -TRUE if the object is on the server-side and FALSE otherwise.

    -
    -
    -

    Details

    -

    In DataSHIELD it is not possible to see the data on the servers -of the collaborating studies. It is only possible to get summaries of objects stored on the -server-side. -It is however important to know if an object is defined (i.e. exists) on the server-side. -This function checks if an object does exist on the server-side.

    -

    Server function called: exists

    -
    -
    -

    See also

    -

    ds.class to check the type of an object.

    -

    ds.length to check the length of an object.

    -

    ds.dim to check the dimension of an object.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Check if the object exist in the server-side
    -  ds.exists(x = "D", 
    -            datasources = connections) #All opal servers are used
    -  ds.exists(x = "D", 
    -            datasources = connections[1]) #Only the first Opal server is used (study1)
    -            
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.exp.html b/docs/reference/ds.exp.html deleted file mode 100644 index 134f9743..00000000 --- a/docs/reference/ds.exp.html +++ /dev/null @@ -1,150 +0,0 @@ - -Computes the exponentials in the server-side — ds.exp • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Computes the exponential values for a specified numeric vector. -This function is similar to R function exp.

    -
    - -
    -
    ds.exp(x = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of a numerical vector.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default exp.newobj.

    - - -
    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

    -

    ds.exp returns a vector for each study of the exponential values for the numeric vector -specified in the argument x. The created vectors are stored in the server-side.

    -
    -
    -

    Details

    -

    Server function called: exp.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # compute exponential function of the 'PM_BMI_CONTINUOUS' variable
    -  ds.exp(x = "D$PM_BMI_CONTINUOUS",
    -         newobj = "exp.PM_BMI_CONTINUOUS",
    -         datasources = connections[1]) #only the first Opal server is used (study1)
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.extractQuantiles.html b/docs/reference/ds.extractQuantiles.html deleted file mode 100644 index 8056889b..00000000 --- a/docs/reference/ds.extractQuantiles.html +++ /dev/null @@ -1,194 +0,0 @@ - -Secure ranking of a vector across all sources and use of these ranks to estimate global quantiles across all studies — ds.extractQuantiles • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Takes the global ranks and quantiles held in the serverside data -data frame that is written by ranksSecureDS4 and named as specified by the -argument (<output.ranks.df>) and converts these values into a series of -quantile values that identify, for example, which value of V2BR across all of -the studies corresponds to the median or to the 95 -indication in which study the V2BR corresponding to a particular quantile -falls and, in fact, the relevant value may fall in more than one study and -may appear multiple times in any one study. Finally, the output data -frame containing this information is written to the clientside and to the -serverside at each study separately.

    -
    - -
    -
    ds.extractQuantiles(
    -  extract.quantiles,
    -  extract.summary.output.ranks.df,
    -  extract.ranks.sort.by,
    -  extract.rm.residual.objects,
    -  extract.datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    extract.quantiles
    -

    one of a restricted set of character strings. -The value of this argument is set in choosing the value of the argument -<quantiles.for.estimation> in ds.ranksSecure. In summary: to mitigate -disclosure risk only the following set of quantiles can be -generated: c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50,0.60,0.6667, -0.70,0.75,0.80,0.90,0.95,0.975). The allowable formats for the argument -are of the general form: "0.025-0.975" where the first number is the lowest -quantile to be estimated and the second number is the equivalent highest -quantile to estimate. These two quantiles are then estimated along with -all allowable quantiles in between. The allowable argument values are then: -"0.025-0.975", "0.05-0.95", "0.10-0.90", "0.20-0.80". Two alternative values -are "quartiles" i.e. c(0.25,0.50,0.75), and "median" i.e. c(0.50). The -default value is "0.05-0.95". For more details, see the associated document -"secure.global.ranking.docx". Also see the header file for ds.ranksSecure.

    - - -
    extract.summary.output.ranks.df
    -

    a character string which specifies -the optional name for the summary data.frame written to the serverside on -each data source that contains 5 of the key output variables from the ranking -procedure pertaining to that particular data source. If no name has been -specified by the argument <summary.output.ranks.df> in ds.ranksSecure, the -default name is allocated as "summary.ranks.df".The only reason the -<extract.summary.output.ranks.df> argument needs specifying in -ds.extractQuantiles is because, ds.extractQuantiles is the last function -called by ds.ranksSecure and almost the final command of ds.extractQuantiles -to print out the name of the data frame containing the summarised ranking -information generated by ds.ranksSecure and the order in which the -data frame is laid out. This therefore appears as the last output produced -when ds.ranksSecure is run, and when this happens it is clear this relates to -the main output of ds.ranksSecure not of ds.extractQuantiles.

    - - -
    extract.ranks.sort.by
    -

    a character string taking two possible values. -These are "ID.orig" and "vals.orig". This is set via the argument -<ranks.sort.by> in ds.ranksSecure. For more details see the associated -document entitled "secure.global.ranking.docx". Also see the header -file for ds.ranksSecure.

    - - -
    extract.rm.residual.objects
    -

    logical value. Default = TRUE: at the beginning -and end of each run of ds.ranksSecure delete all extraneous objects that are -otherwise left behind. These are not usually needed, but could be of value -if one were investigating a problem with the ranking. FALSE: do not delete -the residual objects

    - - -
    extract.datasources
    -

    specifies the particular opal object(s) to use. -This is set via the argument<datasources> in ds.ranksSecure. For more details -see the associated document entitled "secure.global.ranking.docx". Also see -the header file for ds.ranksSecure.

    - -
    -
    -

    Value

    -

    the final main output of ds.extractQuantiles is a data frame object -named "final.quantile.df". This contains two vectors. The first named -"evaluation.quantiles" lists the full set of quantiles you have requested -for evaluation as specified by the argument "quantiles.for.estimation" in -ds.ranksSecure and explained in more detail above under the information for -the argument "extract.quantiles" in this function. The second vector is -called "final.quantile.vector" which details the values of V2BR that -correspond to the evaluation quantiles in vector 1. The information in the -data frame "final.quantile.df" is generic: there is no information -identifying in which study each value of V2BR falls. This data frame is -written to the clientside (as it is non-disclosive) and is also copied to -the serverside in every study. This means it is easily accessible from -anywhere in the DataSHIELD environment. For more details -see the associated document entitled "secure.global.ranking.docx".

    -
    -
    -

    Details

    -

    ds.extractQuantiles is a clientside function which should usually -be called from within the clientside function ds.ranksSecure.If you try to -call ds.extractQuantiles directly(i.e. not by running ds.ranksSecure) you -are almost certainly going to have to set up quite a few vectors and scalars -that are normally set by ds.ranksSecure and this is likely to be difficult. -ds.extractQuantiles itself calls two serverside functions extractQuantilesDS1 -and extractQuantilesDS2. For more details about the cluster of functions that -collectively enable secure global ranking and estimation of global quantiles -see the associated document entitled "secure.global.ranking.docx". In -particular this explains how ds.extractQuantiles works. Also see the header -file for ds.ranksSecure.

    -
    -
    -

    Author

    -

    Paul Burton 11th November, 2021

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.forestplot.html b/docs/reference/ds.forestplot.html deleted file mode 100644 index a651872d..00000000 --- a/docs/reference/ds.forestplot.html +++ /dev/null @@ -1,136 +0,0 @@ - -Forestplot for SLMA models — ds.forestplot • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Draws a foresplot of the coefficients for Study-Level Meta-Analysis performed with -DataSHIELD

    -
    - -
    -
    ds.forestplot(mod, variable = NULL, method = "ML", layout = "JAMA")
    -
    - -
    -

    Arguments

    - - -
    mod
    -

    list List outputed by any of the SLMA models of DataSHIELD (ds.glmerSLMA, -ds.glmSLMA, ds.lmerSLMA)

    - - -
    variable
    -

    character (default NULL) Variable to meta-analyze and visualize, by setting this -argument to NULL (default) the first independent variable will be used.

    - - -
    method
    -

    character (Default "ML") Method to estimate the between study variance. -See details from ?meta::metagen for the different options.

    - - -
    layout
    -

    character (default "JAMA") Layout of the plot. -See details from ?meta::metagen for the different options.

    - -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -  # Run a logistic regression
    -  
    -  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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Fit the logistic regression model
    -
    -  mod <- ds.glmSLMA(formula = "DIS_DIAB~GENDER+PM_BMI_CONTINUOUS+LAB_HDL",
    -                data = "D",
    -                family = "binomial",
    -                datasources = connections)
    -                
    -  # Plot the results of the model
    -  ds.forestplot(mod)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.gamlss.html b/docs/reference/ds.gamlss.html deleted file mode 100644 index 4e92d7c7..00000000 --- a/docs/reference/ds.gamlss.html +++ /dev/null @@ -1,233 +0,0 @@ - -Generalized Additive Models for Location Scale and Shape — ds.gamlss • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calls the gamlssDS that is a wrapper function from -the gamlss R package. The function returns an object of class "gamlss", which -is a generalized additive model for location, scale and shape (GAMLSS). The -function also saves the residuals as an object on the server-side with a name -specified by the newobj argument. In addition, if the argument centiles is set -to TRUE, the function calls the centiles function from the gamlss package and -returns the sample percentages below each centile curve.

    -
    - -
    -
    ds.gamlss(
    -  formula = NULL,
    -  sigma.formula = "~1",
    -  nu.formula = "~1",
    -  tau.formula = "~1",
    -  family = "NO()",
    -  data = NULL,
    -  method = "RS",
    -  mu.fix = FALSE,
    -  sigma.fix = FALSE,
    -  nu.fix = FALSE,
    -  tau.fix = FALSE,
    -  control = c(0.001, 20, 1, 1, 1, 1, Inf),
    -  i.control = c(0.001, 50, 30, 0.001),
    -  centiles = FALSE,
    -  xvar = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    formula
    -

    a formula object, with the response on the left of an ~ operator, -and the terms, separated by + operators, on the right. Nonparametric smoothing -terms are indicated by pb() for penalised beta splines, cs for smoothing splines, -lo for loess smooth terms and random or ra for random terms, -e.g. 'y~cs(x,df=5)+x1+x2*x3'.

    - - -
    sigma.formula
    -

    a formula object for fitting a model to the sigma parameter, -as in the formula above, e.g. sigma.formula='~cs(x,df=5)'.

    - - -
    nu.formula
    -

    a formula object for fitting a model to the nu parameter, -e.g. nu.formula='~x'.

    - - -
    tau.formula
    -

    a formula object for fitting a model to the tau parameter, -e.g. tau.formula='~cs(x,df=2)'.

    - - -
    family
    -

    a gamlss.family object, which is used to define the distribution -and the link functions of the various parameters. The distribution families -supported by gamlss() can be found in gamlss.family. Functions such as 'BI()' -(binomial) produce a family object. Also can be given without the parentheses -i.e. 'BI'. Family functions can take arguments, as in 'BI(mu.link=probit)'.

    - - -
    data
    -

    a data frame containing the variables occurring in the formula. -If this is missing, the variables should be on the parent environment.

    - - -
    method
    -

    a character indicating the algorithm for GAMLSS. Can be either -'RS', 'CG' or 'mixed'. If method='RS' the function will use the Rigby and -Stasinopoulos algorithm, if method='CG' the function will use the Cole and -Green algorithm, and if method='mixed' the function will use the RS algorithm -twice before switching to the Cole and Green algorithm for up to 10 extra -iterations.

    - - -
    mu.fix
    -

    logical, indicate whether the mu parameter should be kept fixed -in the fitting processes.

    - - -
    sigma.fix
    -

    logical, indicate whether the sigma parameter should be kept -fixed in the fitting processes.

    - - -
    nu.fix
    -

    logical, indicate whether the nu parameter should be kept fixed -in the fitting processes.

    - - -
    tau.fix
    -

    logical, indicate whether the tau parameter should be kept fixed -in the fitting processes.

    - - -
    control
    -

    this sets the control parameters of the outer iterations algorithm -using the gamlss.control function. This is a vector of 7 numeric values: (i) c.crit -(the convergence criterion for the algorithm), (ii) n.cyc (the number of cycles of -the algorithm), (iii) mu.step (the step length for the parameter mu), (iv) sigma.step -(the step length for the parameter sigma), (v) nu.step (the step length for the -parameter nu), (vi) tau.step (the step length for the parameter tau), (vii) gd.tol -(global deviance tolerance level). The default values for these 7 parameters are -set to c(0.001, 20, 1, 1, 1, 1, Inf).

    - - -
    i.control
    -

    this sets the control parameters of the inner iterations of the -RS algorithm using the glim.control function. This is a vector of 4 numeric values: -(i) cc (the convergence criterion for the algorithm), (ii) cyc (the number of -cycles of the algorithm), (iii) bf.cyc (the number of cycles of the backfitting -algorithm), (iv) bf.tol (the convergence criterion (tolerance level) for the -backfitting algorithm). The default values for these 4 parameters are set to -c(0.001, 50, 30, 0.001).

    - - -
    centiles
    -

    logical, indicating whether the function centiles() will be used to -tabulate the sample percentages below each centile curve. Default is set to FALSE.

    - - -
    xvar
    -

    the unique explanatory variable used in the centiles() function. This -variable is used only if the centiles argument is set to TRUE. A restriction in -the centiles function is that it applies to models with one explanatory variable -only.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default gamlss_res.

    - - -
    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

    -

    a gamlss object with all components as in the native R gamlss function. -Individual-level information like the components y (the response response) and -residuals (the normalised quantile residuals of the model) are not disclosed to -the client-side.

    -
    -
    -

    Details

    -

    For additional details see the help header of gamlss and centiles -functions in native R gamlss package.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.getWGSR.html b/docs/reference/ds.getWGSR.html deleted file mode 100644 index 9f647c02..00000000 --- a/docs/reference/ds.getWGSR.html +++ /dev/null @@ -1,222 +0,0 @@ - -Computes the WHO Growth Reference z-scores of anthropometric data — ds.getWGSR • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Calculate WHO Growth Reference z-score for a given anthropometric measurement -This function is similar to R function getWGSR from the zscorer package.

    -
    - -
    -
    ds.getWGSR(
    -  sex = NULL,
    -  firstPart = NULL,
    -  secondPart = NULL,
    -  index = NULL,
    -  standing = NA,
    -  thirdPart = NA,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    sex
    -

    the name of the binary variable that indicates the sex of the subject. This must -be coded as 1 = male and 2 = female. If in your project the variable sex has different -levels, you should recode the levels to 1 for males and 2 for females using the -ds.recodeValues DataSHIELD function before the use of the ds.getWGSR.

    - - -
    firstPart
    -

    Name of variable specifying:
    -Weight (kg) for BMI/A, W/A, W/H, or W/L
    -Head circumference (cm) for HC/A
    -Height (cm) for H/A
    -Length (cm) for L/A
    -MUAC (cm) for MUAC/A
    -Sub-scapular skinfold (mm) for SSF/A
    -Triceps skinfold (mm) for TSF/A
    -Give a quoted variable name as in (e.g.) "weight". Be careful with units (weight in kg; -height, length, head circumference, and MUAC in cm; skinfolds in mm).

    - - -
    secondPart
    -

    Name of variable specifying:
    -Age (days) for H/A, HC/A, L/A, MUAC/A, SSF/A, or TSF/A
    -Height (cm) for BMI/A, or W/H
    -Length (cm) for W/L
    -Give a quoted variable name as in (e.g.) "age". Be careful with units (age in days; -height and length in cm).

    - - -
    index
    -

    The index to be calculated and added to data. One of:
    -bfa BMI for age
    -hca Head circumference for age
    -hfa Height for age
    -lfa Length for age
    -mfa MUAC for age
    -ssa Sub-scapular skinfold for age
    -tsa Triceps skinfold for age
    -wfa Weight for age
    -wfh Weight for height
    -wfl Weight for length
    -Give a quoted index name as in (e.g.) "wfh".

    - - -
    standing
    -

    Variable specifying how stature was measured. If NA (default) then age (for "hfa" -or "lfa") or height rules (for "wfh" or "wfl") will be applied. This must be coded as -1 = Standing; 2 = Supine; 3 = Unknown. Missing values will be recoded to 3 = Unknown. -Give a single value (e.g."1"). If no value is specified then height and age rules will be applied.

    - - -
    thirdPart
    -

    Name of variable specifying age (in days) for BMI/A. Give a quoted variable -name as in (e.g.) "age". Be careful with units (age in days). If age is given in different units -you should convert it in age in days using the ds.make DataSHIELD function before the use -of the ds.getWGSR. For example if age is given in months then the transformation is given -by the formula $age_days=age_months*(365.25/12)$.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Defaults getWGSR.newobj.

    - - -
    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

    -

    ds.getWGSR assigns a vector for each study that includes the z-scores for the -specified index. The created vectors are stored in the servers.

    -
    -
    -

    Details

    -

    The function calls the server-side function getWGSRDS that computes the WHO -Growth Reference z-scores of anthropometric data for weight, height or length, MUAC (middle -upper arm circumference), head circumference, sub-scapular skinfold and triceps skinfold. -Note that the function might fail or return NAs when the variables are outside the ranges -given in the WGS (WHO Child Growth Standards) reference (i.e. 45 to 120 cm for height and -0 to 60 months for age). It is up to the user to check the ranges and the units of their -data.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # 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 = "ANTHRO.anthro1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "ANTHRO.anthro2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "ANTHRO.anthro3", driver = "OpalDriver")
    -                 
    -  logindata <- builder$build()
    -  
    -  # Log onto the remote Opal training servers
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Example 1: Generate the weight-for-height (wfh) index
    -  ds.getWGSR(sex = "D$sex", firstPart = "D$weight", secondPart = "D$height",
    -           index = "wfh", newobj = "wfh_index", datasources = connections)
    -
    -  # Example 2: Generate the BMI for age (bfa) index
    -  ds.getWGSR(sex = "D$sex", firstPart = "D$weight", secondPart = "D$height",
    -           index = "bfa", thirdPart = "D$age", newobj = "bfa_index", datasources = connections)
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.glm.html b/docs/reference/ds.glm.html deleted file mode 100644 index 3ece7fc8..00000000 --- a/docs/reference/ds.glm.html +++ /dev/null @@ -1,445 +0,0 @@ - -Fits Generalized Linear Model — ds.glm • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Fits a Generalized Linear Model (GLM) on data from single or multiple sources -on the server-side.

    -
    - -
    -
    ds.glm(
    -  formula = NULL,
    -  data = NULL,
    -  family = NULL,
    -  offset = NULL,
    -  weights = NULL,
    -  checks = FALSE,
    -  maxit = 20,
    -  CI = 0.95,
    -  viewIter = FALSE,
    -  viewVarCov = FALSE,
    -  viewCor = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    formula
    -

    an object of class formula describing -the model to be fitted. For more information see -Details.

    - - -
    data
    -

    a character string specifying the name of an (optional) data frame that contains -all of the variables in the GLM formula.

    - - -
    family
    -

    identifies the error distribution function to use in -the model. -This can be set as "gaussian", "binomial" and "poisson". -For more information see Details.

    - - -
    offset
    -

    a character string specifying the name of a variable to be used as -an offset. ds.glm does not allow an offset vector to be -written directly into the GLM formula. For more information see Details.

    - - -
    weights
    -

    a character string specifying the name of a variable containing -prior regression weights for the fitting process. -ds.glm does not allow a weights vector to be -written directly into the GLM formula.

    - - -
    checks
    -

    logical. If TRUE ds.glm checks the structural integrity -of the model. Default FALSE. For more information see Details.

    - - -
    maxit
    -

    a numeric scalar denoting the maximum number of iterations that are permitted -before ds.glm declares that the model has failed to converge.

    - - -
    CI
    -

    a numeric value specifying the confidence interval. Default 0.95.

    - - -
    viewIter
    -

    logical. If TRUE the results of the intermediate iterations are -printed. If FALSE only final results are shown. Default FALSE.

    - - -
    viewVarCov
    -

    logical. If TRUE the variance-covariance matrix -of parameter estimates is returned. Default FALSE.

    - - -
    viewCor
    -

    logical. If TRUE the correlation matrix of -parameter estimates is returned. Default FALSE.

    - - -
    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

    -

    Many of the elements of the output list returned by ds.glm are -equivalent to those returned by the glm() function in native R. However, -potentially disclosive elements -such as individual-level residuals and linear predictor values are blocked. -In this case, only non-disclosive elements are returned from each study separately.

    -

    The list of elements returned by ds.glm is mentioned below:

    -

    Nvalid: total number of valid observational units across all studies.

    -

    Nmissing: total number of observational units across all studies with at least - one data item missing.

    -

    Ntotal: total of observational units across all studies, the - sum of valid and missing units.

    -

    disclosure.risk: risk of disclosure, - the value 1 indicates that one of the disclosure traps - has been triggered in that study.

    -

    errorMessage: explanation for any errors or disclosure risks identified.

    -

    nsubs: total number of observational units used by ds.glm function. - nb usually is the same as nvalid.

    -

    iter: total number of iterations before convergence achieved.

    -

    family: error family and link function.

    -

    formula: model formula, see description of formula as an input parameter (above).

    -

    coefficients: a matrix with 5 columns:

    First
    -

    : the names of all of the regression parameters (coefficients) in the model

    - -
    second
    -

    : the estimated values

    - -
    third
    -

    : corresponding standard errors of the estimated values

    - -
    fourth
    -

    : the ratio of estimate/standard error

    -. -
    fifth
    -

    : the p-value treating that as a standardised normal deviate

    - - -

    dev: residual deviance.

    -

    df: residual degrees of freedom. nb residual degrees of freedom + number of - parameters in model = nsubs.

    -

    output.information: reminder to the user that there - is more information at the top of the output.

    -

    Also, the estimated coefficients and standard errors expanded with estimated confidence intervals - with % coverage specified by ci argument are returned. - For the poisson model, - the output is generated on the scale of the linear predictor (log rates and log rate ratios) - and the natural scale after exponentiation (rates and rate ratios).

    -
    -
    -

    Details

    -

    Fits a GLM on data from a single source or multiple sources on the server-side. -In the latter case, the data are co-analysed (when using ds.glm) -by using an approach that is mathematically equivalent to placing all individual-level -data from all sources in one central warehouse and analysing those data using the conventional -glm() function in R. In this situation marked heterogeneity between sources should be corrected -(where possible) with fixed effects. For example, if each study in a (binary) logistic regression -analysis has an independent intercept, it is equivalent to allowing each study to have a -different baseline risk of disease. This may also be viewed as being an IP (individual person) -meta-analysis with fixed effects.

    - -

    In formula most shortcut notation for formulas allowed under R's standard glm() -function is also allowed by ds.glm.

    -

    Many GLMs can be fitted very simply using a formula such as:

    -

    $$y~a+b+c+d$$

    -

    which simply means fit a GLM with y as the outcome variable and -a, b, c and d as covariates. -By default all such models also include an intercept (regression constant) term.

    -

    Instead, if you need to fit a more complex -model, for example:

    -

    $$EVENT~1+TID+SEXF*AGE.60$$

    -

    In the above model the outcome variable is EVENT -and the covariates -TID (factor variable with level values between 1 and 6 denoting the period time), -SEXF (factor variable denoting sex) -and AGE.60 (quantitative variable representing age-60 in years). -The term 1 forces -the model to include an intercept term, in contrast if you use the term 0 the -intercept term is removed. The * symbol between SEXF and AGE.60 -means fit all possible main effects and interactions for and between those two covariates. - This takes the value 0 in all males 0 * AGE.60 - and in females 1 * AGE.60. - This model is in example 1 of the section Examples. In this case the logarithm of - the survival time is added as an offset (log(survtime)).

    - -

    In the family argument can be specified three types of models to fit:

    -

    "gaussian"
    -

    : conventional linear model with normally distributed errors

    - -
    "binomial"
    -

    : conventional unconditional logistic regression model

    - -
    "poisson"
    -

    : Poisson regression model which is the most used in survival analysis. - The model used Piecewise Exponential Regression (PER) which typically closely approximates - Cox regression in its main estimates and standard errors.

    - - -

    At present the gaussian family is automatically coupled with -an identity link function, the binomial family with a -logistic link function and the poisson family with a log link function.

    - -

    The data argument avoids you having to specify the name of the -data frame in front of each covariate in the formula. -For example, if the data frame is called DataFrame you -avoid having to write: \(DataFrame$y~DataFrame$a+DataFrame$b+DataFrame$c+DataFrame$d\)

    -

    The checks argument verifies that the variables in the model are all defined (exist) -on the server-side at every study -and that they have the correct characteristics required to fit the model. -It is suggested to make checks argument TRUE if an unexplained - problem in the model fit is encountered because the running process takes several minutes.

    -

    In maxit Logistic regression and Poisson regression -models can require many iterations, particularly if the starting value of the -regression constant is far away from its actual value that the GLM -is trying to estimate. In consequence we often set maxit=30 -but depending on the nature of the models you wish to fit, you may wish -to be alerted much more quickly than this if there is a delay in convergence, -or you may wish to all more iterations.

    - -

    Privacy protected iterative fitting of a GLM is explained here:

    -

    (1) Begin with a guess for the coefficient vector to start iteration 1 (let's call it -beta.vector[1]). Using beta.vector[1], run iteration 1 with each source -calculating the resultant score vector (and information matrix) generated -by its data - given beta.vector[1] - -as the sum of the score vector components (and the sum of the components of the -information matrix) derived from each individual data record in that source. NB in most models -the starting values in beta.vector[1] are set to be zero for all parameters.

    -

    (2) Transmit the resultant score vector and information matrix from each source -back to the clientside -server (CS) at the analysis centre. Let's denote -SCORE[1][j] and INFORMATION.MATRIX[1][j] as the -score vector and information matrix generated by study j at the end of the 1st iteration.

    -

    (3) CS sums the score vectors, and equivalently the information matrices, across all studies -(i.e. j = 1:S, where S is the number of studies). Note that, -given beta.vector[1], this gives precisely the same final sums -for the score -vectors and information matrices as would have been obtained if all data had been in one -central warehoused database and the overall score vector and information matrix at the end of -the first iteration had been calculated -(as is standard) by simply summing across all individuals. The only difference is that -instead of directly adding all values across -all individuals, we first sum across all individuals in each data source and -then sum those study -totals across all studies - i.e. this generates the same ultimate sums

    -

    (4) CS then calculates sum(SCORES)%*% inverse(sum(INFORMATION.MATRICES)) - -heuristically this may be -viewed as being "the sum of the score vectors divided (NB 'matrix division') by the sum of the -information matrices". If one uses the conventional algorithm (IRLS) -to update generalized linear models from iteration to iteration this quantity happens to be -precisely the vector to be added to the -current value of beta.vector (i.e. beta.vector[1]) to obtain -beta.vector[2] which is the improved estimate of the beta.vector to be used in iteration 2. -This updating algorithm is often called the IRLS (Iterative Reweighted Least -Squares) algorithm -- which is closely related to the Newton -Raphson approach but uses the expected information rather than -the observed information.

    -

    (5) Repeat steps (2)-(4) until the model converges (using the standard R -convergence criterion). -NB An alternative way to coherently pool the glm across multiple sources is to fit each -glm to completion (i.e. multiple iterations until convergence) in each source and then return -the final parameter estimates and standard errors to the CS where they could be pooled using -study-level meta-analysis. An alternative function ds.glmSLMA allows you to do this. -It will fit the glms to completion -in each source and return the final estimates and standard errors (rather than score vectors -and information matrices). It will then rely on functions in the -R package metafor to meta-analyse the key parameters.

    - -

    Server functions called: glmDS1 and glmDS2

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    - ## Version 6, for version 5 see Wiki
    -  # Connecting to the Opal servers
    -  
    -  require('DSI')
    -  require('DSOpal')
    -  require('dsBaseClient')
    -  
    -  # Example 1: Fitting GLM for survival analysis
    -  # For this analysis we need to load survival data from the server 
    -  
    -  builder <- DSI::newDSLoginBuilder()
    -  builder$append(server = "study1", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  # Log onto the remote Opal training servers
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Fit the GLM 
    -  
    -  # make sure that the outcome is numeric 
    -  ds.asNumeric(x.name = "D$cens",
    -               newobj = "EVENT",
    -               datasources = connections)
    -               
    -  # convert time id variable to a factor 
    -               
    -  ds.asFactor(input.var.name = "D$time.id",
    -              newobj = "TID",
    -              datasources = connections)
    -              
    -  # create in the server-side the log(survtime) variable
    -         
    -  ds.log(x = "D$survtime",
    -         newobj = "log.surv",
    -         datasources = connections)
    -  
    -  ds.glm(formula = EVENT ~ 1 + TID + female * age.60,
    -         data = "D",
    -         family = "poisson", 
    -         offset = "log.surv",
    -         weights = NULL,
    -         checks = FALSE,
    -         maxit = 20,
    -         CI = 0.95,
    -         viewIter = FALSE,
    -         viewVarCov = FALSE,
    -         viewCor = FALSE,
    -         datasources = connections)
    -         
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -  
    -  # Example 2: run a logistic regression without interaction
    -  # For this example we are going to load another dataset  
    -  
    -  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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Fit the logistic regression model
    -
    -  mod <- ds.glm(formula = "DIS_DIAB~GENDER+PM_BMI_CONTINUOUS+LAB_HDL",
    -                data = "D",
    -                family = "binomial",
    -                datasources = connections)
    -                
    -  mod #visualize the results of the model
    -
    -# Example 3: fit a standard Gaussian linear model with an interaction
    -# We are using the same data as in example 2. 
    -
    -mod <- ds.glm(formula = "PM_BMI_CONTINUOUS~DIS_DIAB*GENDER+LAB_HDL",
    -              data = "D",
    -              family = "gaussian",
    -              datasources = connections)
    -mod
    -
    -# Clear the Datashield R sessions and logout
    -datashield.logout(connections) 
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.glmPredict.html b/docs/reference/ds.glmPredict.html deleted file mode 100644 index 228bed88..00000000 --- a/docs/reference/ds.glmPredict.html +++ /dev/null @@ -1,245 +0,0 @@ - -Applies predict.glm() to a serverside glm object — ds.glmPredict • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Applies native R's predict.glm() function to a serverside -glm object previously created using ds.glmSLMA.

    -
    - -
    -
    ds.glmPredict(
    -  glmname = NULL,
    -  newdataname = NULL,
    -  output.type = "response",
    -  se.fit = FALSE,
    -  dispersion = NULL,
    -  terms = NULL,
    -  na.action = "na.pass",
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    glmname
    -

    is a character string identifying the glm object on serverside to -which predict.glm is to be applied. Equivalent to <object> argument in native R's -predict.glm which is described as: a fitted object of class inheriting from 'glm'.

    - - -
    newdataname
    -

    is a character string identifying an (optional) dataframe on -the serverside in which to look for new covariate values with which to predict. -If omitted, -the original fitted linear predictors from the original glm fit are used as the -basis of prediction. Precisely equivalent to the <newdata> argument in the -predict.glm function in native R.

    - - -
    output.type
    -

    a character string taking the values 'response', 'link' -or 'terms'. The value 'response' generates predictions on the scale of the -original outcome, e.g. as proportions in a logistic regression. These -are often called 'fitted values'. The value -'link' generates predictions on the scale of the linear predictor, e.g. -log-odds in logistic regression, log-rate or log-count in Poisson regression. -The predictions using 'response' and 'link' are identical for a standard -Gaussian model with an identity link. The value 'terms' returns either -fitted values or predicted values on the link scale based not on -the whole linear predictor but on separate 'terms'. So, if age -is modelled as a five level factor, one of the output components -will relate to predictions (fitted values or link scale predictions) based on -all five levels of age simultaneously. Any simple covariate (e.g. not a composite -factor) will be treated as a term in its own right. ds.glmPredict's <output.type> -argument is precisely equivalent to the <type> argument in -native R's predict.glm function.

    - - -
    se.fit
    -

    logical if standard errors for the fitted predictions are required. -Defaults to FALSE when the output contains only a vector (or vectors) of predicted -values. If TRUE, the output also contains corresponding vectors for the standard -errors of the predicted values, and a single value reporting the scale parameter -of the model. ds.glmPredict's <se.fit> argument is precisely equivalent to -the corresponding argument in predict.glm in native R. -argument is equivalent to the <type> argument in native R's predict.glm function.

    - - -
    dispersion
    -

    numeric value specifying the dispersion of the GLM fit to be assumed -in computing the standard errors. If omitted, that returned by -summary applied to the glm object is used. e.g. if <dispersion> is unspecified -the dispersion assumed for a logistic regression or Poisson model is 1. But if -dispersion is set to 4, the standard errors of the predictions will all be -multiplied by 2 (i.e. sqrt(4)). This is useful in making predictions from -models subject to overdispersion. ds.glmPredict's <dispersion> argument -is precisely equivalent to the corresponding argument in predict.glm in native R.

    - - -
    terms
    -

    a character vector specifying a subset of terms to return in the -prediction. Only applies if output.type='terms'. ds.glmPredict's <terms> -argument is precisely equivalent to the corresponding argument in predict.glm -in native R.

    - - -
    na.action
    -

    character string determining what should be done with missing -values in the data.frame identified by <newdataname>. Default is na.pass which -predicts from the specified new data.frame with all NAs left in place. na.omit -removes all rows containing NAs. na.fail stops the function if there are any -NAs anywhere in the data.frame. For further details see help in native R.

    - - -
    newobj
    -

    a character string specifying the name of the serverside object -to which the output object from the call to ds.glmPredict is to be written -in each study. If no <newobj> argument is specified, the output -object on the serverside defaults to the name "predict_glm".

    - - -
    datasources
    -

    specifies the particular 'connection object(s)' to use. -e.g. if you have several data sets in the sources you are working with -called opals.a, opals.w2, and connection.xyz, you can choose which of -these to work with. The call 'datashield.connections_find()' lists all of -the different datasets available and if one of these is called 'default.connections' -that will be the dataset used by default if no other dataset is specified. If you -wish to change the connections you wish to use by default the call -datashield.connections_default('opals.a') will set 'default.connections' -to be 'opals.a' and so in the absence of specific instructions to the contrary -(e.g. by specifiying a particular dataset to be used via the <datasources> -argument) all subsequent function calls will be to the datasets held in opals.a. -If the <datasources> argument is specified, it should be set without -inverted commas: e.g. datasources=opals.a or datasources=default.connections. -The <datasources> argument also allows you to apply a function solely to a subset -of the studies/sources you are working with. For example, the second source -in a set of three, can be specified using a call such as datasources=connection.xyz[2]. -On the other hand, if you wish to specify solely the first and third sources, the -appropriate call will be datasources=connections.xyz[c(1,3)]

    - -
    -
    -

    Value

    -

    ds.glmPredict calls the serverside assign function glmPredictDS.as -which writes a new object to the serverside containing output precisely equivalent to -predict.glm in native R. The name for this serverside object is given by -the newobj argument or if that argument is missing or null it is called "predict_glm". -In addition, ds.glmPredict calls the serverside aggregate function glmPredictDS.ag -which returns an object containing non-disclosive summary statistics relating -either to a single prediction vector called fit or, if se.fit=TRUE, of two vectors -'fit' and 'se.fit' - the latter containing the standard errors of the predictions -in 'fit'. The non-disclosive summary statistics for the vector(s) include: -length, the total number of valid (non-missing) values, -the number of missing values, the mean and standard deviation of the valid -values and the 5 -the output always includes: the name of the serverside glm object being predicted from, -the name - if one was specified - of the dataframe being used as the basis for predictions, -the output.type specified ('link', 'response' or 'terms'), the value of the -dispersion parameter if one had been specified and the residual scale parameter (which is -multipled by sqrt(dispersion parameter) if one has been set). If output.type = 'terms', -the summary statistics for the fit and se.fit vectors are replaced by equivalent -summary statistics for each column in fit and se.fit matrices which each have k columns -if k terms are being summarised.

    -
    -
    -

    Details

    -

    Clientside function calling a single assign function (glmPredictDS.as) -and a single aggregate function (glmPredictDS.ag). ds.glmPredict applies -the native R predict.glm function to a -glm object that has already been created on the serverside by fitting ds.glmSLMA. -This is precisely the same as the glm object created in native R by fitting a glm -using the glm function. Crucially, if ds.glmSLMA was originally applied to -multiple studies the glm object created on each study is based solely -on data from that study. ds.glmPredict has two distinct actions. First, the -call to the assign function applies the standard predict.glm function of -native R to the glm object on the serverside and writes all the output -that would normally be generated by predict.glm to a newobj on the serverside. -Because no critical information is passed to the clientside, there are no -disclosure issues associated with this action. Any standard DataSHIELD functions -can then be applied to the newobj to interpret the output. For example, it could -be used as the basis for regression diagnostic plots. Second, the call -to the aggregate function creates a non-disclosive summary of all the -information held in the newobj created by the assign function -and returns this summary to the clientside. For example, the full list of -predicted/fitted values generated by the model could be disclosive. -So although the newobj holds the full vector of fitted values, only the -total number of values, the total number of valid (non-missing) values, -the number of missing values, the mean and standard deviation of all valid -values and the 5 -are returned to the clientside by the aggregate function. The non-DataSHIELD -arguments of ds.glmPredict are precisely the equivalent to those of predict.glm -in native R and so all detailed information can be found using help(predict.glm) -in native R.

    -
    -
    -

    Author

    -

    Paul Burton, for DataSHIELD Development Team 13/08/20

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.glmSLMA.html b/docs/reference/ds.glmSLMA.html deleted file mode 100644 index 83204ac5..00000000 --- a/docs/reference/ds.glmSLMA.html +++ /dev/null @@ -1,511 +0,0 @@ - -Fit a Generalized Linear Model (GLM) with pooling via Study Level Meta-Analysis (SLMA) — ds.glmSLMA • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Fits a generalized linear model (GLM) on data from single or multiple sources -with pooled co-analysis across studies being based on SLMA (Study Level Meta Analysis).

    -
    - -
    -
    ds.glmSLMA(
    -  formula = NULL,
    -  family = NULL,
    -  offset = NULL,
    -  weights = NULL,
    -  combine.with.metafor = TRUE,
    -  newobj = NULL,
    -  dataName = NULL,
    -  checks = FALSE,
    -  maxit = 30,
    -  notify.of.progress = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    formula
    -

    an object of class formula describing -the model to be fitted. For more information see -Details.

    - - -
    family
    -

    identifies the error distribution function to use in -the model.

    - - -
    offset
    -

    a character string specifying the name of a variable to be used as -an offset.ds.glmSLMA does not allow an offset vector to be -written directly into the GLM formula.

    - - -
    weights
    -

    a character string specifying the name of a variable containing -prior regression -weights for the fitting process. ds.glmSLMA does not allow a weights vector to be -written directly into the GLM formula.

    - - -
    combine.with.metafor
    -

    logical. If TRUE the -estimates and standard errors for each regression coefficient are pooled across -studies using random-effects meta-analysis under maximum likelihood (ML), -restricted maximum likelihood (REML) or fixed-effects meta-analysis (FE). Default TRUE.

    - - -
    newobj
    -

    a character string specifying the name of the object to which the glm object -representing the model fit on the serverside in each study is to be written. -If no <newobj> argument is specified, the output -object defaults to "new.glm.obj".

    - - -
    dataName
    -

    a character string specifying the name of an (optional) data frame -that contains all of the variables in the GLM formula.

    - - -
    checks
    -

    logical. If TRUE ds.glmSLMA checks the structural integrity -of the model. Default FALSE. For more information see Details.

    - - -
    maxit
    -

    a numeric scalar denoting the maximum number of iterations that -are permitted before ds.glmSLMA declares that the model has failed to converge. -For more information see Details.

    - - -
    notify.of.progress
    -

    specifies if console output should be produced to indicate -progress. Default FALSE.

    - - -
    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

    -

    The serverside aggregate functions glmSLMADS1 and glmSLMADS2 return -output to the clientside, while the assign function glmSLMADS.assign simply writes -the glm object to the serverside -created by the model fit on a given server as a permanent object on that same server. -This is precisely -the same as the glm object that is usually created by a call to glm() in native R and it -contains all the same elements (see help for glm in native R). Because it is a serverside -object, no disclosure blocks apply. However, such disclosure blocks do apply to the information -passed to the clientside. In consequence, rather than containing all the components of a -standard glm object in native R, the components of the glm object that are returned by -ds.glmSLMA include: a mixture of non-disclosive elements of the glm object -reported separately by study included in a list object called output.summary; and -a series of other list objects that represent inferences aggregated across studies.

    -

    the study specific items include:

    -

    coefficients: a matrix with 5 columns:

    First
    -

    : the names of all of the regression parameters (coefficients) in the model

    - -
    second
    -

    : the estimated values

    - -
    third
    -

    : corresponding standard errors of the estimated values

    - -
    fourth
    -

    : the ratio of estimate/standard error

    - -
    fifth
    -

    : the p-value treating that as a standardised normal deviate

    - - -

    family: indicates the error distribution and link function used -in the GLM.

    -

    formula: model formula, see description of formula as an input parameter (above).

    -

    df.resid: the residual degrees of freedom around the model.

    -

    deviance.resid: the residual deviance around the model.

    -

    df.null: the degrees of freedom around the null model (with just an intercept).

    -

    dev.null: the deviance around the null model (with just an intercept).

    -

    CorrMatrix: the correlation matrix of parameter estimates.

    -

    VarCovMatrix: the variance-covariance matrix of parameter estimates.

    -

    weights: the name of the vector (if any) holding regression weights.

    -

    offset: the name of the vector (if any) holding an offset (enters glm with a -coefficient of 1.00).

    -

    cov.scaled: equivalent to VarCovMatrix.

    -

    cov.unscaled: equivalent to VarCovMatrix but assuming dispersion (scale) -parameter is 1.

    -

    Nmissing: the number of missing observations in the given study.

    -

    Nvalid: the number of valid (non-missing) observations in the given study.

    -

    Ntotal: the total number of observations in the given study - (Nvalid + Nmissing).

    -

    data: equivalent to input parameter dataName (above).

    -

    dispersion: the estimated dispersion parameter: deviance.resid/df.resid for -a gaussian family multiple regression model, 1.00 for logistic and poisson regression.

    -

    call: summary of key elements of the call to fit the model.

    -

    na.action: chosen method of dealing with missing values. This is -usually, na.action = na.omit - see help in native R.

    -

    iter: the number of iterations required to achieve convergence -of the glm model in each separate study.

    -

    Once the study-specific output has been returned, ds.glmSLMA -returns a series of lists relating to the aggregated inferences across studies. -These include the following:

    -

    num.valid.studies: the number of studies with valid output -included in the combined analysis

    -

    betamatrix.all: matrix with a row for each regression coefficient -and a column for each study reporting the estimated regression coefficients -by study.

    -

    sematrix.all: matrix with a row for each regression coefficient -and a column for each study reporting the standard errors of the estimated -regression coefficients by study.

    -

    betamatrix.valid: matrix with a row for each regression coefficient -and a column for each study reporting the estimated regression coefficients -by study but only for studies with valid output (eg not violating disclosure traps)

    -

    sematrix.all: matrix with a row for each regression coefficient -and a column for each study reporting the standard errors of the estimated -regression coefficients by study but only for studies with valid output -(eg not violating disclosure traps)

    -

    SLMA.pooled.estimates.matrix: a matrix with a row for each -regression coefficient and six columns. The first two columns contain the -pooled estimate of each regression coefficients and its standard error with -pooling via random effect meta-analysis under maximum likelihood (ML). Columns -3 and 4 contain the estimates and standard errors from random effect meta-analysis -under REML and columns 5 and 6 the estimates and standard errors under fixed -effect meta-analysis. This matrix is only returned if the -argument combine.with.metafor is set to TRUE. Otherwise, users can take -the betamatrix.valid and sematrix.valid matrices and enter -them into their meta-analysis package of choice.

    -

    is.object.created and validity.check are standard -items returned by an assign function when the designated newobj appears to have -been successfuly created on the serverside at each study. This output is -produced specifically by the assign function glmSLMADS.assign that writes -out the glm object on the serverside

    -
    -
    -

    Details

    -

    ds.glmSLMA specifies the structure of a Generalized Linear Model -to be fitted separately on each study or data source. Calls serverside functions -glmSLMADS1 (aggregate),glmSLMADS2 (aggregate) and glmSLMADS.assign (assign). -From a mathematical perspective, the SLMA approach (using ds.glmSLMA) -differs fundamentally from the alternative approach using ds.glm. -ds.glm fits the model iteratively across all studies together. At each -iteration the model in every data source has precisely the same coefficients -so when the model converges one essentially identifies the model that -best fits all studies simultaneously. This mathematically equivalent -to placing all individual-level data from all sources in -one central warehouse and analysing those data as one combined dataset using the -conventional glm() function in native R. In contrast ds.glmSLMA sends -a command to every data source to fit the model required but each separate source -simply fits that model to completion (ie undertakes all iterations until -the model converges) and the estimates (regression coefficients) and their standard -errors from each source are sent back to the client and are then pooled using SLMA -via any approach the user wishes to implement. The ds.glmSLMA functions includes -an argument <combine.with.metafor> which if TRUE (the default) pools the models -across studies using the metafor function (from the metafor package) using three -optimisation methods: random effects under maximum likelihood (ML); random effects -under restricted maximum likelihood (REML); or fixed effects (FE). But once -the estimates and standard errors are on the clientside, the user -can alternatively choose to use the metafor package in any way he/she wishes, -to pool the coefficients across studies or, indeed, to use another -meta-analysis package, or their own code.

    -

    Although the ds.glm approach might at first sight appear to be preferable -under all circumstances, this is not always the case. -First, the results from both approaches are generally very -similar. Secondly, the SLMA approach can offer key inferential advantages -when there is marked heterogeneity between sources that cannot simply be corrected -by including fixed-effects in one's ds.glm model that each reflect -a study- or centre-specific effect. In particular, such fixed effects cannot -be guaranteed to generate formal inferences that -are unbiased when there is heterogeneity -in the effect that is actually of scientific interest. It might be argued that -one should not try to pool the inferences anyway if there is marked heterogeneity, -but you can use the joint analysis to formally check for such heterogeneity and then -choose to report the pooled result or separate results from each study individually. -Crucially, unless the heterogeneity is substantial, pooling can be quite reasonable. -Furthermore, if you just fit a ds.glm model without centre-effects you will -in effect be pooling across all studies without checking for heterogeneity and -if heterogeneity exists and if it is strong you can get theoretically results -that are badly confounded by study. Before we introduced ds.glmSLMA we -encountered a real world example of a ds.glm (without centre effects) -which generated combined inferences over all studies which were more extreme than -the results from any of the individual studies: the lower 95 -of the combined estimate was higher than the upper 95 -ALL of the individual studies. This was clearly incorrect and provided a -salutary lesson on the potential impact of confounding by study if a ds.glm -model does not include appropriate centre-effects. Even if you are going -to undertake a ds.glm analysis (which is slightly more powerful when there -is no heterogeneity) it may still be useful to also carry out a ds.glmSLMA -analysis as this provides a very easy way to examine the extent of heterogeneity.

    -

    In formula Most shortcut notation for formulas allowed under R's standard glm() -function is also allowed by ds.glmSLMA.

    -

    Many glms can be fitted very simply using a formula such as:

    -

    $$y~a+b+c+d$$

    -

    which simply means fit a glm with y as the outcome variable and -a, b, c and d as covariates. -By default all such models also include an intercept (regression constant) term.

    -

    Instead, if you need to fit a more complex -model, for example:

    -

    $$EVENT~1+TID+SEXF*AGE.60$$

    -

    In the above model the outcome variable is EVENT -and the covariates -TID (factor variable with level values between 1 and 6 denoting the period time), -SEXF (factor variable denoting sex) -and AGE.60 (quantitative variable representing age-60 in years). -The term 1 forces -the model to include an intercept term, in contrast if you use the term 0 the -intercept term is removed. The * symbol between SEXF and AGE.60 -means fit all possible main effects and interactions for and between those two covariates. - This takes the value 0 in all males 0 * AGE.60 - and in females 1 * AGE.60. - This model is in example 1 of the section Examples. In this case the logarithm of - the survival time is added as an offset (log(survtime)).

    -

    In the family argument a range of model types can be fitted. This range has recently -been extended to include a number of model types that are non-standard but are used -relatively widely.

    -

    The standard models include:

    "gaussian"
    -

    : conventional linear model with normally distributed errors

    - -
    "binomial"
    -

    : conventional unconditional logistic regression model

    - -
    "poisson"
    -

    : Poisson regression model which is often used in epidemiological - analysis of counts and rates and is also used in survival analysis. The - Piecewise Exponential Regression (PER) model typically provides a close approximation - to the Cox regression model in its main estimates and standard errors.

    - -
    "gamma"
    -

    : a family of models for outcomes characterised by a constant - coefficient of variation, i.e. the variance increases with the square of the expected mean

    - - -The extended range includes: -
    "quasipoisson"
    -

    : a model with a Poisson variance function - variance - equals expected mean - but the residual variance which is fixed to be 1.00 in - a standard Poisson model can then take any value. This is achieved by a dispersion parameter - which is estimated during the model fit and if it takes the value K it means - that the expected variance is K x the expected mean, which implies that all - standard errors will be sqrt(K) times larger than in a standard Poisson model - fitted to the same data. This allows for the extra uncertainty which is associated - with 'overdispersion' that occurs very commonly with Poisson distributed data, - and typically arises when the count/rate data being modelled occur in blocks - which exhibit heterogeneity of underlying risk which is not being fully - modelled, either by including the blocks themselves as a factor or by including - covariates for all the determinants that are relevant to that underlying risk. If - there is no overdispersion (K=1) the estimates and standard errors from the - quasipoisson model will be almost identical to those from a standard poisson model.

    - - -
    "quasibinomial"
    -

    : a model with a binomial variance function - if P - is the expected proportion of successes, and N is the number of "trials" (always - 1 if analysing binary data which are formally described as having a Bernoulli - distribution (binomial distribution with N=1) the variance function is N*(P)*(1-P). - But the residual variance which is fixed to be 1.00 in - a binomial model can take any value. This is achieved by a dispersion parameter - which is estimated during the model fit (see quasipoisson information above).

    - -

    Each class of models has a "canonical link" which represents the link function that -maximises the information extraction by the model. The gaussian family uses the -identity link, the poisson family the log link, the binomial/Bernoulli family the -logit link and the the gamma family the reciprocal link.

    -

    The dataName argument avoids you having to specify the name of the -data frame in front of each covariate in the formula. -For example, if the data frame is called DataFrame you -avoid having to write: \(DataFrame$y~DataFrame$a+DataFrame$b+DataFrame$c+DataFrame$d\)

    -

    The checks argument verifies that the variables in the model are all defined (exist) -on the server-site at every study -and that they have the correct characteristics required to fit the model. -It is suggested to make checks argument TRUE only if an unexplained - problem in the model fit is encountered because the running process takes several minutes.

    -

    In maxit Logistic regression and Poisson regression -models can require many iterations, particularly if the starting value of the -regression constant is far away from its actual value that the GLM -is trying to estimate. In consequence we often set maxit=30 -but depending on the nature of the models you wish to fit, you may wish -to be alerted much more quickly than this if there is a delay in convergence, -or you may wish to allow more iterations.

    - -

    Server functions called: glmSLMADS1, glmSLMADS2, glmSLMADS.assign

    -
    -
    -

    Author

    -

    Paul Burton, for DataSHIELD Development Team 07/07/20

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    - ## Version 6, for version 5 see Wiki
    -  # Connecting to the Opal servers
    -  
    -  require('DSI')
    -  require('DSOpal')
    -  require('dsBaseClient')
    -  
    -  # Example 1: Fitting GLM for survival analysis
    -  # For this analysis we need to load survival data from the server 
    -  
    -  builder <- DSI::newDSLoginBuilder()
    -  builder$append(server = "study1", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  # Log onto the remote Opal training servers
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Fit the GLM 
    -  
    -  # make sure that the outcome is numeric 
    -  ds.asNumeric(x.name = "D$cens",
    -               newobj = "EVENT",
    -               datasources = connections)
    -               
    -  # convert time id variable to a factor 
    -               
    -  ds.asFactor(input.var.name = "D$time.id",
    -              newobj = "TID",
    -              datasources = connections)
    -              
    -  # create in the server-side the log(survtime) variable
    -         
    -  ds.log(x = "D$survtime",
    -         newobj = "log.surv",
    -         datasources = connections)
    -  
    -  ds.glmSLMA(formula = EVENT ~ 1 + TID + female * age.60,
    -         dataName = "D",
    -         family = "poisson", 
    -         offset = "log.surv",
    -         weights = NULL,
    -         checks = FALSE,
    -         maxit = 20,
    -         datasources = connections)
    -         
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -  
    -  # Example 2: run a logistic regression without interaction
    -  # For this example we are going to load another type of data  
    -  
    -  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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Fit the logistic regression model
    -
    -  mod <- ds.glmSLMA(formula = "DIS_DIAB~GENDER+PM_BMI_CONTINUOUS+LAB_HDL",
    -                dataName = "D",
    -                family = "binomial",
    -                datasources = connections)
    -                
    -  mod #visualize the results of the model
    -
    -# Example 3: fit a standard Gaussian linear model with an interaction
    -# We are using the same data as in example 2. It is not necessary to
    -# connect again to the server 
    -
    -mod <- ds.glmSLMA(formula = "PM_BMI_CONTINUOUS~DIS_DIAB*GENDER+LAB_HDL",
    -              dataName = "D",
    -              family = "gaussian",
    -              datasources = connections)
    -mod
    -
    -# Clear the Datashield R sessions and logout
    -datashield.logout(connections) 
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.glmSummary.html b/docs/reference/ds.glmSummary.html deleted file mode 100644 index 327060d8..00000000 --- a/docs/reference/ds.glmSummary.html +++ /dev/null @@ -1,172 +0,0 @@ - -Summarize a glm object on the serverside — ds.glmSummary • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Summarize a glm object on the serverside to create a -summary_glm object. Also identify and return components of -both the glm object and the summary_glm object -that can safely be sent to the clientside without a risk of disclosure

    -
    - -
    -
    ds.glmSummary(x.name, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of a glm object on the -serverside that has previously been created e.g. using ds.glmSLMA

    - - -
    newobj
    -

    a character string specifying the name of the object to which -the summary_glm object representing the output of summary(glm object) -in each study is to be written. If no <newobj> argument is specified, the output -object on the serverside defaults to "summary_glm.newobj".

    - - -
    datasources
    -

    specifies the particular 'connection object(s)' to use. -e.g. if you have several data sets in the sources you are working with -called opals.a, opals.w2, and connection.xyz, you can choose which of -these to work with. The call 'datashield.connections_find()' lists all of -the different datasets available and if one of these is called 'default.connections' -that will be the dataset used by default if no other dataset is specified. If you -wish to change the connections you wish to use by default the call -datashield.connections_default('opals.a') will set 'default.connections' -to be 'opals.a' and so in the absence of specific instructions to the contrary -(e.g. by specifiying a particular dataset to be used via the <datasources> -argument) all subsequent function calls will be to the datasets held in opals.a. -If the <datasources> argument is specified, it should be set without -inverted commas: e.g. datasources=opals.a or datasources=default.connections. -The <datasources> argument also allows you to apply a function solely to a subset -of the studies/sources you are working with. For example, the second source -in a set of three, can be specified using a call such as datasources=connection.xyz[2]. -On the other hand, if you wish to specify solely the first and third sources, the -appropriate call will be datasources=connections.xyz[c(1,3)]

    - -
    -
    -

    Value

    -

    ds.glmSummary writes a new object to the serverside with name given by -the newobj argument or if that argument is missing or null it is called "summary_glm.newobj". -In addition, ds.glmSummary returns an object containing two lists to the clientside -the two lists are named "glm.obj" and "glm.summary.obj" which contain all of the -elements of the original glm object and the summary_glm object on the serverside -but with all potentially disclosive components set to NA or masked in another way -see "details" above. The elements that are returned with a non-NA value in -the glm.obj list object are: "coefficients", "rank", "family", "deviance", "aic", -"null.deviance", "iter", "df.residual", "df.null", "converged", "boundary", -"call", "formula", "terms", "data", "control", "method", "contrasts", "xlevels". -The elements that are returned with a non-NA value in -the glm.summary.obj list object are: "call", "terms", "family", "deviance", -"aic", "contrasts", "df.residual", "null.deviance", "df.null", "iter", -"coefficients", "aliased", "dispersion", "df", "cov.unscaled", "cov.scaled". -For further information see help for glm and summary(glm) in native R -and for ds.glmSLMA in DataSHIELD.

    -
    -
    -

    Details

    -

    Clientside function calling a single assign function (glmSummaryDS.as) -and a single aggregate function (glmSummaryDS.as). ds.glmSummary summarises a -glm object that has already been created on the serverside by fitting ds.glmSLMA -which is precisely the same as the glm object created by fitting a glm -using the glm function in native R. Similarly the summary_glm object -saved to the serverside is precisely equivalent to the object created using -summary(glm object) in R. The glm object produced from a standard -call to glm in R has 32 components. Amongst these, all of the following -thirteen contain information about every records in the data set and so are -disclosive. They are all therefore set to NA and so convey -no information when returned to the clientside: -1.residuals, 2.fitted.values, 3.effects, 4.R, 5.qr, 6.linear.predictors, -7.weights, 8.prior.weights, 9.y, 10.model, 11. na.action, 12.x, 13. offset. -In addition the list element "data" which identifies a data.frame -that was identified as containing all of the variables required -for the model is also disclosive because it doesn't list -the name of the data.frame but rather prints it out in full. However, -a user can benefit from knowing what source of data were used in creating -the glm model and so the element "data" that is returned to the clientside -simply lists the names of all of the columns in the originating data.frame. -Having removed all disclosive elements of the glm object, ds.glmSummary -returns the remaining 19 elements to the clientside. The object -created from a standard call to summary(glm object) in R contains 18 -list elements. Only two of these are disclosive - na.action and -deviance.resid and these are therefore set to NA before ds.glmSummary -returns the other 16 to the clientside. Further details of the components -of the glm object and summary_glm object can be found under help for -glm and summary(glm) in native R. In addition, the elements that ARE returned -are listed under "return" below.

    -
    -
    -

    Author

    -

    Paul Burton, for DataSHIELD Development Team 17/07/20

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.glmerSLMA.html b/docs/reference/ds.glmerSLMA.html deleted file mode 100644 index a65c5f30..00000000 --- a/docs/reference/ds.glmerSLMA.html +++ /dev/null @@ -1,397 +0,0 @@ - -Fits Generalized Linear Mixed-Effect Models via Study-Level Meta-Analysis — ds.glmerSLMA • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    ds.glmerSLMA fits a Generalized Linear Mixed-Effects Model -(GLME) on data from one or multiple sources with pooling via SLMA (study-level meta-analysis).

    -
    - -
    -
    ds.glmerSLMA(
    -  formula = NULL,
    -  offset = NULL,
    -  weights = NULL,
    -  combine.with.metafor = TRUE,
    -  dataName = NULL,
    -  checks = FALSE,
    -  datasources = NULL,
    -  family = NULL,
    -  control_type = NULL,
    -  control_value = NULL,
    -  nAGQ = 1L,
    -  verbose = 0,
    -  start_theta = NULL,
    -  start_fixef = NULL,
    -  notify.of.progress = FALSE,
    -  assign = FALSE,
    -  newobj = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    formula
    -

    an object of class formula describing the model to be fitted. -For more information see Details.

    - - -
    offset
    -

    a character string specifying the name of a variable to be used as -an offset.

    - - -
    weights
    -

    a character string specifying the name of a variable containing -prior regression weights for the fitting process.

    - - -
    combine.with.metafor
    -

    logical. If TRUE the -estimates and standard errors for each regression coefficient are pooled across -studies using random-effects meta-analysis under maximum likelihood (ML), -restricted maximum likelihood (REML) or fixed-effects meta-analysis (FE). Default TRUE.

    - - -
    dataName
    -

    a character string specifying the name of a data frame -that contains all of the variables in the GLME formula. For more information see Details.

    - - -
    checks
    -

    logical. If TRUE ds.glmerSLMA checks the structural integrity -of the model. Default FALSE. For more information see Details.

    - - -
    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.

    - - -
    family
    -

    a character string specifying the distribution of the observed -value of the outcome variable around the predictions generated by the linear predictor. -This can be set as "binomial" or "poisson". -For more information see Details.

    - - -
    control_type
    -

    an optional character string vector specifying the nature of a parameter -(or parameters) to be modified in the convergence control options which can be viewed or -modified via the glmerControl function of the package lme4. -For more information see Details.

    - - -
    control_value
    -

    numeric representing the new value which you want to allocate the -control parameter corresponding to the control-type. -For more information see Details.

    - - -
    nAGQ
    -

    an integer value indicating the number of points per axis for evaluating the adaptive -Gauss-Hermite approximation to the log-likelihood. Defaults 1, corresponding to the Laplace approximation. -For more information see R glmer function help.

    - - -
    verbose
    -

    an integer value. If \(verbose > 0\) the output is generated during the optimization of -the parameter estimates. If \(verbose > 1\) the output is generated during the individual penalized -iteratively reweighted least squares (PIRLS) steps. Default verbose - value is 0 which means no additional output.

    - - -
    start_theta
    -

    a numeric vector of length equal to the number of random effects. Specify to retain -more control over the optimisation. See glmer() for more details.

    - - -
    start_fixef
    -

    a numeric vector of length equal to the number of fixed effects (NB including the intercept). -Specify to retain more control over the optimisation. See glmer() for more details.

    - - -
    notify.of.progress
    -

    specifies if console output should be produced to indicate -progress. Default FALSE.

    - - -
    assign
    -

    a logical, indicates whether the function will call a second server-side function -(an assign) in order to save the regression outcomes (i.e. a glmerMod object) on each server. -Default FALSE.

    - - -
    newobj
    -

    a character string specifying the name of the object to which the glmerMod object -representing the model fit on the serverside in each study is to be written. This argument is -used only when the argument assign is set to TRUE. -If no <newobj> argument is specified, the output object defaults to "new.glmer.obj".

    - -
    -
    -

    Value

    -

    Many of the elements of the output list returned by ds.glmerSLMA are -equivalent to those returned by the glmer() function in native R. However, -potentially disclosive elements -such as individual-level residuals and linear predictor values are blocked. -In this case, only non-disclosive elements are returned from each study separately.

    -

    The list of elements returned by ds.glmerSLMA is mentioned below:

    -

    coefficients: a matrix with 5 columns:

    First
    -

    : the names of all of the regression parameters (coefficients) in the model

    - -
    second
    -

    : the estimated values

    - -
    third
    -

    : corresponding standard errors of the estimated values

    - -
    fourth
    -

    : the ratio of estimate/standard error

    - -
    fifth
    -

    : the p-value treating that as a standardised normal deviate

    - - -

    CorrMatrix: the correlation matrix of parameter estimates.

    -

    VarCovMatrix: the variance-covariance matrix of parameter estimates.

    -

    weights: the vector (if any) holding regression weights.

    -

    offset: the vector (if any) holding an offset.

    -

    cov.scaled: equivalent to VarCovMatrix.

    -

    Nmissing: the number of missing observations in the given study.

    -

    Nvalid: the number of valid (non-missing) observations in the given study.

    -

    Ntotal: the total number of observations - in the given study (Nvalid + Nmissing).

    -

    data: equivalent to input parameter dataName (above).

    -

    call: summary of key elements of the call to fit the model.

    -

    Once the study-specific output has been returned, the function returns the -number of elements relating to the pooling of estimates across studies via -study-level meta-analysis. These are as follows:

    -

    input.beta.matrix.for.SLMA: a matrix containing the vector of coefficient -estimates from each study.

    -

    input.se.matrix.for.SLMA: a matrix containing the vector of standard error -estimates for coefficients from each study.

    -

    SLMA.pooled.estimates: a matrix containing pooled estimates for each -regression coefficient across all studies with pooling under SLMA via -random-effects meta-analysis under maximum likelihood (ML), restricted maximum -likelihood (REML) or via fixed-effects meta-analysis (FE).

    -

    convergence.error.message: reports for each study whether the model converged. -If it did not some information about the reason for this is reported.

    -
    -
    -

    Details

    -

    ds.glmerSLMA fits a generalized linear mixed-effects model (GLME) -- e.g. a logistic or Poisson regression model including both fixed and random effects - - on data from single or multiple sources.

    -

    This function is similar to glmer function from lme4 package in native R.

    -

    When there are multiple data sources, the GLME is fitted to convergence - in each data source independently. The estimates and standard errors returned - to the client-side which enable cross-study pooling using Study-Level Meta-Analysis (SLMA). - The SLMA used by default metafor package - but as the SLMA occurs on the client-side (a standard R environment), the user can choose - any approach to meta-analysis. Additional information about fitting GLMEs - using glmer function can be obtained using R help for glmer and the lme4 package.

    -

    In formula most shortcut notation allowed by glmer() function is -also allowed by ds.glmerSLMA. -Many GLMEs can be fitted very simply using a formula like: -$$y~a+b+(1|c)$$ -which simply means fit an GLME with y as the outcome variable (e.g. -a binary case-control using a logistic regression model or a count or a survival -time using a Poisson regression model), a and b -as fixed effects, and c as a random effect or grouping factor.

    -

    It is also possible to fit models with random slopes by specifying a model such as -$$y~a+b+(1+b|c)$$ -where the effect of b can vary randomly between groups defined by c. -Implicit nesting can be specified with formulas such as: \(y~a+b+(1|c/d)\) -or \(y~a+b+(1|c)+(1|c:d)\).

    - -

    The dataName argument avoids you having to specify the name of the -data frame in front of each covariate in the formula. -For example, if the data frame is called DataFrame you avoid having to write: -\(DataFrame$y~DataFrame$a+DataFrame$b+(1|DataFrame$c)\).

    -

    The checks argument verifies that the variables in the model are all defined (exist) -on the server-site at every study -and that they have the correct characteristics required to fit the model. -It is suggested to make checks argument TRUE if an unexplained -problem in the model fit is encountered because the running process takes several minutes.

    - -

    In the family argument can be specified two types of models to fit:

    "binomial"
    -

    : logistic regression models

    - -
    "poisson"
    -

    : poisson regression models

    - - -

    Note if you are fitting a gaussian model (a standard linear mixed -model) you should use ds.lmerSLMA and not ds.glmerSLMA. -For more information you can see R help for lmer and glmer.

    -

    In control_type at present only one such parameter can be modified, -namely the tolerance of the convergence criterion to the gradient of the log-likelihood -at the maximum likelihood achieved. We have enabled this because our practical experience -suggests that in situations where the model looks to have converged with sensible parameter -values but formal convergence is not being declared if we allow the model to be more -tolerant to a non-zero gradient the same parameter values are obtained but formal -convergence is declared. The default value for the check.conv.grad is 0.001 (note that -the default value of this argument in ds.lmerSLMA is 0.002).

    -

    In control_value at present (see control_type) -the only parameter this can be is the convergence tolerance check.conv.grad. In -general, models will be identified as having converged more readily if the value set -for check.conv.grad is increased from its default value (0.001). Please note -that the risk of doing this is that the model is also more likely to be declared -as having converged at a local maximum that is not the global maximum likelihood. -This will not generally be a problem if the likelihood surface is well behaved but if -you have a problem with convergence you might usefully compare all the parameter -estimates and standard errors obtained using the default tolerance (0.001) even though -that has not formally converged with those obtained after convergence using the higher -tolerance.

    -

    Server function called: glmerSLMADS2

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    - ## Version 6, for version 5 see 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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Select all rows without missing values
    -  
    -  ds.completeCases(x1 = "D", newobj = "D.comp", datasources = connections)
    -  
    -  # Fit a Poisson regression model
    -  
    -  ds.glmerSLMA(formula = "LAB_TSC ~ LAB_HDL + (1 | GENDER)",
    -               offset = NULL,
    -               dataName = "D.comp",
    -               datasources = connections,
    -               family = "poisson")
    -               
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -  
    -  builder <- DSI::newDSLoginBuilder()
    -  builder$append(server = "study1", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CLUSTER.CLUSTER_SLO1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CLUSTER.CLUSTER_SLO2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CLUSTER.CLUSTER_SLO3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -   # Log onto the remote Opal training servers
    -   connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D")
    -                
    -                
    -     # Fit a Logistic regression model
    -  
    -  ds.glmerSLMA(formula = "Male ~  incid_rate +diabetes + (1 | age)",
    -               dataName = "D",
    -               datasources = connections[2],#only the second server is used (study2)
    -               family = "binomial")
    -  
    -  
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -  } # }
    -  
    -
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.heatmapPlot.html b/docs/reference/ds.heatmapPlot.html deleted file mode 100644 index dd26dbd3..00000000 --- a/docs/reference/ds.heatmapPlot.html +++ /dev/null @@ -1,217 +0,0 @@ - -Generates a Heat Map plot — ds.heatmapPlot • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Generates a heat map plot of the pooled data or one plot for each dataset.

    -
    - -
    -
    ds.heatmapPlot(
    -  x = NULL,
    -  y = NULL,
    -  type = "combine",
    -  show = "all",
    -  numints = 20,
    -  method = "smallCellsRule",
    -  k = 3,
    -  noise = 0.25,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a numerical vector.

    - - -
    y
    -

    a character string specifying the name of a numerical vector.

    - - -
    type
    -

    a character string that represents the type of graph to display. -type argument can be set as 'combine' or 'split'. -Default 'combine'. -For more information see Details.

    - - -
    show
    -

    a character string that represents where the plot should be focused. -show argument can be set as 'all' or 'zoomed'. -Default 'all'. -For more information see Details.

    - - -
    numints
    -

    the number of intervals for a density grid object. -Default numints value is 20.

    - - -
    method
    -

    a character string that defines which heat map will be created. -The method argument can be set as 'smallCellsRule', -'deterministic' or 'probabilistic'. -Default 'smallCellsRule'. -For more information see Details.

    - - -
    k
    -

    the number of the nearest neighbours for which their centroid is calculated. -Default k value is 3. -For more information see Details.

    - - -
    noise
    -

    the percentage of the initial variance that is used as the variance of the embedded -noise if the argument method is set to 'probabilistic'. -Default noise value is 0.25. -For more information see Details.

    - - -
    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

    -

    ds.heatmapPlot returns to the client-side a heat map plot and a message specifying -the number of invalid cells in each study.

    -
    -
    -

    Details

    -

    The ds.heatmapPlot function first generates a density grid -and uses it to plot the graph. -Cells of the grid density matrix that hold a count of less than the filter set by -DataSHIELD (usually 5) are considered invalid and turned into 0 to avoid potential -disclosure. A message is printed to inform the user about the number of invalid cells. -The ranges returned by each study and used in the process of getting the grid density matrix -are not the exact minimum and maximum values but rather close approximates of the real -minimum and maximum value. This was done to reduce the risk of potential disclosure.

    -

    In the argument type can be specified two types of graphics to display:

    'combine'
    -

    : a combined heat map plot is displayed

    - -
    'split'
    -

    : each heat map is plotted separately

    - - -

    In the argument show can be specified two options:

    'all'
    -

    : the ranges of the variables are used as plot limits

    - -
    'zoomed'
    -

    : the plot is zoomed to the region where the actual data are

    - - -

    In the argument method can be specified 3 different heat map to be created:

    'smallCellsRule'
    -

    : the heat map of the actual variables is - created but grids with low counts are replaced with grids with zero counts

    - -
    'deterministic'
    -

    : the heat map of the scaled centroids of each - k nearest neighbours of the - original variables are created, where the value of k is set by the user

    - -
    'probabilistic'
    -

    : the heat map of 'noisy' variables is generated. - The added noise follows a normal distribution with - zero mean and variance equal to a percentage of - the initial variance of each input variable. - This percentage is specified by the user in the - argument noise

    - - - -

    In the k argument the user can choose any value for -k equal to or greater than the pre-specified threshold -used as a disclosure control for this method and lower than the number of observations -minus the value of this threshold. By default the value of k is set to be equal to 3 -(we suggest k to be equal to, or bigger than, 3). Note that the function fails if the user -uses the default value but the study has set a bigger threshold. -The value of k is used only -if the argument method is set to 'deterministic'. -Any value of k is ignored if the -argument method is set to 'probabilistic' or 'smallCellsRule'.

    - -

    The value of noise is used only if the argument -method is set to 'probabilistic'. -Any value of noise is ignored if the argument -method is set to 'deterministic' or 'smallCellsRule'. -The user can choose any value for noise equal -to or greater than the pre-specified threshold 'nfilter.noise'.

    -

    Server function called: heatmapPlotDS

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    - -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.hetcor.html b/docs/reference/ds.hetcor.html deleted file mode 100644 index 5373fbae..00000000 --- a/docs/reference/ds.hetcor.html +++ /dev/null @@ -1,142 +0,0 @@ - -Heterogeneous Correlation Matrix — ds.hetcor • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function is based on the hetcor function from the R package polycor.

    -
    - -
    -
    ds.hetcor(
    -  data = NULL,
    -  ML = TRUE,
    -  std.err = TRUE,
    -  bins = 4,
    -  pd = TRUE,
    -  use = "complete.obs",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    data
    -

    the name of a data frame consisting of factors, ordered factors, logical variables, -character variables, and/or numeric variables, or the first of several variables.

    - - -
    ML
    -

    if TRUE, compute maximum-likelihood estimates; if FALSE (default), compute quick -two-step estimates.

    - - -
    std.err
    -

    if TRUE (default), compute standard errors.

    - - -
    bins
    -

    number of bins to use for continuous variables in testing bivariate normality; -the default is 4.

    - - -
    pd
    -

    if TRUE (default) and if the correlation matrix is not positive-definite, an attempt -will be made to adjust it to a positive-definite matrix, using the nearPD function in the Matrix -package. Note that default arguments to nearPD are used (except corr=TRUE); for more control call -nearPD directly.

    - - -
    use
    -

    if "complete.obs", remove observations with any missing data; if "pairwise.complete.obs", -compute each correlation using all observations with valid data for that pair of variables.

    - - -
    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

    -

    Returns an object of class "hetcor" from each study, with the following components: the -correlation matrix; the type of each correlation: "Pearson", "Polychoric", or "Polyserial"; the -standard errors of the correlations, if requested; the number (or numbers) of observations on which -the correlations are based; p-values for tests of bivariate normality for each pair of variables; -the method by which any missing data were handled: "complete.obs" or "pairwise.complete.obs"; TRUE -for ML estimates, FALSE for two-step estimates.

    -
    -
    -

    Details

    -

    Computes a heterogenous correlation matrix, consisting of Pearson product-moment -correlations between numeric variables, polyserial correlations between numeric and ordinal -variables, and polychoric correlations between ordinal variables.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.histogram.html b/docs/reference/ds.histogram.html deleted file mode 100644 index 777c4278..00000000 --- a/docs/reference/ds.histogram.html +++ /dev/null @@ -1,208 +0,0 @@ - -Generates a histogram plot — ds.histogram • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    ds.histogram function plots a non-disclosive histogram in the client-side.

    -
    - -
    -
    ds.histogram(
    -  x = NULL,
    -  type = "split",
    -  num.breaks = 10,
    -  method = "smallCellsRule",
    -  k = 3,
    -  noise = 0.25,
    -  vertical.axis = "Frequency",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a numerical vector.

    - - -
    type
    -

    a character string that represents the type of graph to display. -The type argument can be set as 'combine' or 'split'. -Default 'split'. -For more information see Details.

    - - -
    num.breaks
    -

    a numeric specifying the number of breaks of the histogram. Default value -is 10.

    - - -
    method
    -

    a character string that defines which histogram will be created. -The method argument can be set as 'smallCellsRule', -'deterministic' or 'probabilistic'. -Default 'smallCellsRule'. -For more information see Details.

    - - -
    k
    -

    the number of the nearest neighbours for which their centroid is calculated. -Default k value is 3. -For more information see Details.

    - - -
    noise
    -

    the percentage of the initial variance that is used as the variance of the embedded -noise if the argument method is set to 'probabilistic'. -Default noise value is 0.25. -For more information see Details.

    - - -
    vertical.axis,
    -

    a character string that defines what is shown in the vertical axis of the -plot. The vertical.axis argument can be set as 'Frequency' or 'Density'. -Default 'Frequency'. -For more information see Details.

    - - -
    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

    -

    one or more histogram objects and plots depending on the argument type

    -
    -
    -

    Details

    -

    ds.histogram function allows the user to plot -distinct histograms (one for each study) or a combined histogram that merges -the single plots.

    -

    In the argument type can be specified two types of graphics to display:

    'combine'
    -

    : a histogram that merges the single plot is displayed.

    - -
    'split'
    -

    : each histogram is plotted separately.

    - - -

    In the argument method can be specified 3 different histograms to be created:

    'smallCellsRule'
    -

    : the histogram of the actual variable is - created but bins with low counts are removed.

    - -
    'deterministic'
    -

    : the histogram of the scaled centroids of each - k nearest neighbours of the original variable - where the value of k is set by the user.

    - -
    'probabilistic'
    -

    : the histogram shows the original distribution disturbed - by the addition of random stochastic noise. - The added noise follows a normal distribution with zero mean and - variance equal to a percentage of the initial variance of the input variable. - This percentage is specified by the user in the argument noise.

    - - - -

    In the k argument the user can choose any value for k equal -to or greater than the pre-specified threshold -used as a disclosure control for this method and lower than the number of observations -minus the value of this threshold. By default the value of k is set to be equal to 3 -(we suggest k to be equal to, or bigger than, 3). Note that the function fails if the user -uses the default value but the study has set a bigger threshold. -The value of k is used only if the argument -method is set to 'deterministic'. -Any value of k is ignored if the -argument method is set to 'probabilistic' or 'smallCellsRule'.

    -

    In the noise argument the percentage of the initial variance -that is used as the variance of the embedded -noise if the argument method is set to 'probabilistic'. -Any value of noise is ignored if the argument -method is set to 'deterministic' or 'smallCellsRule'. -The user can choose any value for noise equal to or greater -than the pre-specified threshold 'nfilter.noise'. -By default the value of noise is set to be equal to 0.25.

    -

    In the argument vertical.axis can be specified two types of histograms:

    'Frequency'
    -

    : the histogram of the frequencies - is returned.

    - -
    'Density'
    -

    : the histogram of the densities - is returned.

    - - -

    Server function called: histogramDS2

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    - -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.igb_standards.html b/docs/reference/ds.igb_standards.html deleted file mode 100644 index e59a5413..00000000 --- a/docs/reference/ds.igb_standards.html +++ /dev/null @@ -1,153 +0,0 @@ - -Converts birth measurements to intergrowth z-scores/centiles — ds.igb_standards • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Converts birth measurements to INTERGROWTH z-scores/centiles (generic)

    -
    - -
    -
    ds.igb_standards(
    -  gagebrth = NULL,
    -  z = 0,
    -  p = 50,
    -  val = NULL,
    -  var = NULL,
    -  sex = NULL,
    -  fun = "igb_value2zscore",
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    gagebrth
    -

    the name of the "gestational age at birth in days" variable.

    - - -
    z
    -

    z-score(s) to convert (must be between 0 and 1). Default value is 0. -This value is used only if fun is set to "igb_zscore2value".

    - - -
    p
    -

    centile(s) to convert (must be between 0 and 100). Default value is p=50. -This value is used only if fun is set to "igb_centile2value".

    - - -
    val
    -

    the name of the anthropometric variable to convert.

    - - -
    var
    -

    the name of the measurement to convert ("lencm", "wtkg", "hcircm", "wlr").

    - - -
    sex
    -

    the name of the sex factor variable. The variable should be coded as Male/Female. -If it is coded differently (e.g. 0/1), then you can use the ds.recodeValues function to -recode the categories to Male/Female before the use of ds.igb_standards.

    - - -
    fun
    -

    the name of the function to be used. This can be one of: "igb_centile2value", -"igb_zscore2value", "igb_value2zscore" (default), "igb_value2centile".

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default name is set to igb.newobj.

    - - -
    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

    -

    assigns the converted measurement as a new object on the server-side

    -
    -
    -

    Note

    -

    For gestational ages between 24 and 33 weeks, the INTERGROWTH very early preterm -standard is used.

    -
    -
    -

    References

    -

    International standards for newborn weight, length, and head circumference by -gestational age and sex: the Newborn Cross-Sectional Study of the INTERGROWTH-21st Project -Villar, José et al. The Lancet, Volume 384, Issue 9946, 857-868 -INTERGROWTH-21st very preterm size at birth reference charts. Lancet 2016 -doi.org/10.1016/S0140-6736(16) 00384-6. Villar, José et al.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.isNA.html b/docs/reference/ds.isNA.html deleted file mode 100644 index 9f81d806..00000000 --- a/docs/reference/ds.isNA.html +++ /dev/null @@ -1,149 +0,0 @@ - -Checks if a server-side vector is empty — ds.isNA • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    this function is similar to R function is.na but instead of a vector -of booleans it returns just one boolean to tell if all the elements are missing values.

    -
    - -
    -
    ds.isNA(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of the vector to check.

    - - -
    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

    -

    ds.isNA returns a boolean. If it is TRUE the vector is empty -(all values are NA), FALSE otherwise.

    -
    -
    -

    Details

    -

    In certain analyses such as GLM none of the variables should be missing at complete -(i.e. missing value for each observation). Since in DataSHIELD it is not possible to see the data -it is important to know whether or not a vector is empty to proceed accordingly.

    -

    Server function called: isNaDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # check if all the observation of the variable 'LAB_HDL' are missing (NA)
    -  ds.isNA(x = 'D$LAB_HDL',
    -          datasources = connections) #all servers are used
    -  ds.isNA(x = 'D$LAB_HDL',
    -          datasources = connections[1]) #only the first server is used (study1) 
    - 
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.isValid.html b/docs/reference/ds.isValid.html deleted file mode 100644 index d34ddbd6..00000000 --- a/docs/reference/ds.isValid.html +++ /dev/null @@ -1,149 +0,0 @@ - -Checks if a server-side object is valid — ds.isValid • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Checks if a vector or table structure has a number of observations equal to or greater -than the threshold set by DataSHIELD.

    -
    - -
    -
    ds.isValid(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a vector, dataframe or matrix.

    - - -
    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

    -

    ds.isValid returns a boolean. If it is TRUE input object is valid, FALSE otherwise.

    -
    -
    -

    Details

    -

    In DataSHIELD, analyses are possible only on valid objects to ensure the output is not disclosive. -This function checks if an input object is valid. A vector is valid if the -number of observations is equal to or greater than a set threshold. A factor vector is valid if all -its levels (categories) have a count equal or greater than the set threshold. A data frame or a matrix -is valid if the number of rows is equal or greater than the set threshold.

    -

    Server function called: isValidDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Check if the dataframe assigned above is valid
    -  ds.isValid(x = 'D',
    -             datasources = connections) #all servers are used
    -  ds.isValid(x = 'D',
    -             datasources = connections[2]) #only the second server is used (study2)
    - 
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.kurtosis.html b/docs/reference/ds.kurtosis.html deleted file mode 100644 index 896113ff..00000000 --- a/docs/reference/ds.kurtosis.html +++ /dev/null @@ -1,121 +0,0 @@ - -Calculates the kurtosis of a numeric variable — ds.kurtosis • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the kurtosis of a numeric variable.

    -
    - -
    -
    ds.kurtosis(x = NULL, method = 1, type = "both", datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a string character, the name of a numeric variable.

    - - -
    method
    -

    an integer between 1 and 3 selecting one of the algorithms for computing kurtosis -detailed below. The default value is set to 1.

    - - -
    type
    -

    a character which represents the type of analysis to carry out. -If type is set to 'combine', 'combined', 'combines' or 'c', the global kurtosis is returned -if type is set to 'split', 'splits' or 's', the kurtosis is returned separately for each study. -if type is set to 'both' or 'b', both sets of outputs are produced. -The default value is set to 'both'.

    - - -
    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

    -

    a matrix showing the kurtosis of the input numeric variable, the number of valid observations and -the validity message.

    -
    -
    -

    Details

    -

    The function calculates the kurtosis of an input variable x with three different methods. -The method is specified by the argument method. If x contains any missings, the function removes those before -the calculation of the kurtosis. If method is set to 1 the following formula is used -\( kurtosis= \frac{\sum_{i=1}^{N} (x_i - \bar(x))^4 /N}{(\sum_{i=1}^{N} ((x_i - \bar(x))^2) /N)^(2) } - 3\), -where \( \bar{x} \) is the mean of x and \(N\) is the number of observations. If method is set to 2 -the following formula is used \( kurtosis= ((N+1)*(\frac{\sum_{i=1}^{N} (x_i - \bar(x))^4 /N}{(\sum_{i=1}^{N} ((x_i - \bar(x))^2) /N)^(2) } - 3) + 6)*((N-1)/((N-2)*(N-3)))\). -If method is set to 3 the following formula is used \( kurtosis= (\frac{\sum_{i=1}^{N} (x_i - \bar(x))^4 /N}{(\sum_{i=1}^{N} ((x_i - \bar(x))^2) /N)^(2) })*(1-1/N)^2 - 3\). -This function is similar to the function kurtosis in R package e1071.

    -
    -
    -

    Author

    -

    Demetris Avraam, for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.length.html b/docs/reference/ds.length.html deleted file mode 100644 index fa6be208..00000000 --- a/docs/reference/ds.length.html +++ /dev/null @@ -1,175 +0,0 @@ - -Gets the length of an object in the server-side — ds.length • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function gets the length of a vector -or list that is stored on the server-side. -This function is similar to the R function length.

    -
    - -
    -
    ds.length(x = NULL, type = "both", checks = "FALSE", datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a vector or list.

    - - -
    type
    -

    a character that represents the type of analysis to carry out. -If type is set to 'combine', 'combined', 'combines' or 'c', - a global length is returned -if type is set to 'split', 'splits' or 's', -the length is returned separately for each study. -if type is set to 'both' or 'b', -both sets of outputs are produced. -Default 'both'.

    - - -
    checks
    -

    logical. If TRUE the model components are checked. -Default FALSE to save time. It is suggested that checks -should only be undertaken once the function call has failed.

    - - -
    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

    -

    ds.length returns to the client-side the pooled length of a vector or a list, -or the length of a vector or a list for each study separately.

    -
    -
    -

    Details

    -

    Server function called: lengthDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Example 1: Get the total number of observations of the vector of
    -  # variable 'LAB_TSC' across all the studies
    -  ds.length(x = 'D$LAB_TSC', 
    -            type = 'combine',
    -            datasources = connections)
    -
    -  # Example 2: Get the number of observations of the vector of variable
    -  # 'LAB_TSC' for each study separately
    -  ds.length(x = 'D$LAB_TSC',
    -            type = 'split',
    -            datasources = connections)
    -
    -  # Example 3: Get the number of observations on each study and the total
    -  # number of observations across all the studies for the variable 'LAB_TSC'
    -  ds.length(x = 'D$LAB_TSC',
    -            type = 'both',
    -            datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.levels.html b/docs/reference/ds.levels.html deleted file mode 100644 index d4eda89f..00000000 --- a/docs/reference/ds.levels.html +++ /dev/null @@ -1,151 +0,0 @@ - -Produces levels attributes of a server-side factor — ds.levels • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function provides access to the level attribute of -a factor variable stored on the server-side. -This function is similar to R function levels.

    -
    - -
    -
    ds.levels(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a factor variable.

    - - -
    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

    -

    ds.levels returns to the client-side the levels of a factor -class variable stored in the server-side.

    -
    -
    -

    Details

    -

    Server function called: levelsDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Example 1: Get the levels of the PM_BMI_CATEGORICAL variable
    -  ds.levels(x = 'D$PM_BMI_CATEGORICAL',
    -            datasources = connections)#all servers are used
    -  ds.levels(x = 'D$PM_BMI_CATEGORICAL',
    -            datasources = connections[2])#only the second server is used (study2)
    -
    -  # Example 2: Get the levels of the LAB_TSC variable
    -  # This example should not work because LAB_TSC is a continuous variable
    -  ds.levels(x = 'D$LAB_TSC',
    -            datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.lexis.html b/docs/reference/ds.lexis.html deleted file mode 100644 index 72b4fc78..00000000 --- a/docs/reference/ds.lexis.html +++ /dev/null @@ -1,316 +0,0 @@ - -Represents follow-up in multiple states on multiple time scales — ds.lexis • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function takes a data frame containing survival data and expands it by converting records at -the level of individual subjects (survival time, censoring status, IDs and other variables) into -multiple records over a series of pre-defined time intervals.

    -
    - -
    -
    ds.lexis(
    -  data = NULL,
    -  intervalWidth = NULL,
    -  idCol = NULL,
    -  entryCol = NULL,
    -  exitCol = NULL,
    -  statusCol = NULL,
    -  variables = NULL,
    -  expandDF = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    data
    -

    a character string specifying the name of a data frame containing the -survival data to be expanded.

    - - -
    intervalWidth
    -

    a numeric vector specifying the length of each interval. -For more information see Details.

    - - -
    idCol
    -

    a character string denoting the column name that holds the individual IDs -of the subjects. For more information see Details.

    - - -
    entryCol
    -

    a character string denoting the column name that holds the entry times -(i.e. start of follow up). For more information see Details.

    - - -
    exitCol
    -

    a character string denoting the column name that holds the exit times -(i.e. end of follow up). For more information see Details.

    - - -
    statusCol
    -

    a character string denoting the column name that holds the -failure/censoring status of each subject. For more information see Details.

    - - -
    variables
    -

    a vector of character strings denoting the column names of additional -variables to include in the final expanded table. For more information see Details.

    - - -
    expandDF
    -

    a character string denoting the name of the new data frame containing the -expanded data set. Default lexis.newobj.

    - - -
    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

    -

    ds.lexis returns to the server-side a data frame for each study with -the expanded version of the input table.

    -
    -
    -

    Details

    -

    The function ds.lexis splits the survival interval time of subjects into pre-specified -sub-intervals that are each assumed to encompass a constant base-line hazard which means a -constant instantaneous risk of death). In the expanded dataset a row is included for every -interval in which a given individual is followed - regardless of how short or long that period may -be. Each row includes:
    -(1) CENSOR: a variable indicating failure status for a particular -interval in that interval also known as censoring status. -This variable can take two values: 1 representing that the patient -has died, relapsed or developed a -disease. 0 representing the lost-to-follow-up -or passed right through the interval without failing.
    -(2) SURVTIME an exposure-time variable indicating the duration of exposure-to-risk-of-failure -the corresponding individual experienced in that interval before he/she failed or was censored.

    -

    To illustrate, an individual who survives through 5 such intervals and then dies/fails in the -6th interval will be allocated a 0 value for the failure status/censoring variable in the first -five intervals and a 1 value in the 6th, while the exposure-time variable will be equal to the -total length of the relevant interval in each of the first five intervals, and the additional -length of time they survived in the sixth interval before they failed or were censored. If they -survive through the first interval and they are censored in the second interval, the -failure-status variable will take the value 0 in both intervals.
    -(3) UID.expanded the expanded data set also -includes a unique ID in a form such as 77.13 which identifies that row of the -dataset as relating to the 77th individual in the input data set and his/her experience -(exposure-time and failure status)in the -14th interval. Note that .N indicates the (N+1)th interval because -interval 1 has no suffix.
    -(4) IDSEQ the first part of UID.expanded (before the '.'). -The value of this -variable is repeated in every row to which the corresponding individual contributes data (i.e. -to every row corresponding to an interval in which that individual was followed).
    -(5) The expanded dataset contains any other variables about each individual that the user -would like to carry forward to a survival analysis based on the expanded data. Typically, -this will include the original ID as specified to the data repository, the total survival time (equivalent to -the sum of the exposure times across all intervals) and the ultimate failure-status in the final -interval to which they were exposed. The value of each of these variables is also repeated in -every row corresponding to an interval in which that individual was followed.

    -

    In intervalWidth argument if the total sum of the duration across all intervals is less -than the maximum follow-up of any individual in -any contributing study, a final interval will be added by ds.lexis extending from the end of the -last interval specified to the maximum follow-up time. If a single numeric value is specified -rather than a vector, ds.lexis will keep adding intervals of the length specified until the -maximum follow-up time in any single study is exceeded. This argument is subject to -disclosure checks.

    -

    The idCol argument must be a numeric or character. Note that when a particular variable is -identified as being the main ID to the data repository when the data are first transferred -to the data repository (i.e. before -DataSHIELD is used), that ID often ends up being of class character and will then be sorted in -alphabetic order (treating each digit as a character) rather than numeric. -For example, containing the sequential IDs 1-1000, the order of the IDs will be:
    -1,10,100,101,102,103,104,105,106,107,108,109,11 ...
    -In an alphabetic listing: NOT to the expected order:
    -1,2,3,4,5,6,7,8,9,10,11,12,13 ...

    -

    This alphabetic order or the ID listing will then carry forward to the -expanded dataset. But the nature and order of the original ID -variable held in idCol doesn't -matter to ds.lexis. Provided every individual appears only once -in the original data set (before expansion) the order does not matter because -ds.lexis works on its unique numeric vector -that is allocated from 1:M (where there are M individuals) -in whatever order they appear in the original dataset.

    -

    in entryCol argument rather than using a total survival time variable to identify the -intervals to which any given individual is exposed, ds.lexis -requires an initial entry time and a final exit time. If the data you wish to expand -contain only a total survival time variable -and every individual starts follow-up at time 0, the entry times should all -be specified as zero, and the exit times as the total survival time. -So, entryCol should either be the name of the column -holding the entry time of each individual or else if no entryCol is -specified it will be defaulted to zero anyway and put into a variable -called starttime in the expanded data set.

    -

    In exitCol argument, if the entry times (entryCol) are set, -or defaulted, to zero, the exitCol variable should contain the total survival times.

    -

    If variables argument is not set (is -null) but the data argument is set, the expanded data -set will contain all variables in the data frame identified by the data argument. -If neither the data or -variables arguments are set, the expanded data set will only include the ID, -exposure time and failure/censoring status -variables which may still be useful for plotting survival data once these become available.

    -

    This function is particularly meant to be used in preparing data for a piecewise -regression analysis (PAR). Although the time intervals have to be pre-specified and are -arbitrary, even a vaguely reasonable set of time intervals will give results very similar to a -Cox regression analysis. The key issue is to choose survival intervals such that the baseline -hazard (risk of death/disease/failure) within each interval is reasonably constant while the -baseline hazard can vary freely between intervals. Even if the choice of intervals is very poor -the ultimate results are typically qualitatively similar to Cox regression. Increasing the -number of intervals will inevitably improve the approximation to the true baseline hazard, but -the addition of many more unnecessary time intervals slows the analysis and can become disclosive -and yet will not improve the fit of the model.

    -

    If the number of failures in one or more -periods in a given study is less than the specified disclosure filter determining minimum -acceptable cell size in a table (nfilter.tab) -then the expanded data frame is not created in that study, and a study-side message -to this effect is made available in that study via ds.message() function.

    - -

    Server functions called: lexisDS1, lexisDS2 and lexisDS3

    -
    -
    -

    See also

    -

    ds.glm for generalized linear models.

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    - ## Version 6, for version 5 see Wiki
    -  # Connecting to the Opal servers
    -  
    -  require('DSI')
    -  require('DSOpal')
    -  require('dsBaseClient')
    -  
    -  # Example 1: Fitting GLM for survival analysis
    -  # For this analysis we need to load survival data from the server 
    -  
    -  builder <- DSI::newDSLoginBuilder()
    -  builder$append(server = "study1", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  # Log onto the remote Opal training servers
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Example 1: Create the expanded data frame. 
    -  #The survival time intervals are to be 0<t<=2.5; 2.5<t<=5.0, 5.0<t<=7.5, 
    -  #up to the final interval of duration 2.5
    -  #that includes the maximum survival time. 
    -
    -  ds.lexis(data = "D", 
    -           intervalWidth = 2.5,
    -           idCol = "D$id",
    -           entryCol = "D$starttime",
    -           exitCol = "D$endtime",
    -           statusCol = "D$cens",
    -           expandDF = "EM.new",
    -           datasources = connections)
    -           
    -  #Confirm that the expanded data frame has been ceated
    -  ds.ls(datasources = connections) 
    -  #Example 2: Create the expanded data frame. 
    -  #The survival time intervals are to be 0<t<=1; 1<t<=2.0, 2.0<t<=5.0, 5.0<t<=11.0,
    -  
    -  ds.lexis(data = "D",
    -           intervalWidth = c(1,1,3,6), 
    -           idCol = "D$id",
    -           entryCol = "D$starttime", 
    -           exitCol = "D$endtime", 
    -           statusCol = "D$cens",
    -           expandDF = "EM.new2",
    -           datasources = connections)
    -           
    -  #Confirm expanded dataframe created
    -  ds.ls(datasources = connections) 
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.list.html b/docs/reference/ds.list.html deleted file mode 100644 index 209dcb5b..00000000 --- a/docs/reference/ds.list.html +++ /dev/null @@ -1,147 +0,0 @@ - -Constructs a list of objects in the server-side — ds.list • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is similar to the R function list.

    -
    - -
    -
    ds.list(x = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the names of the objects to coerce into a list.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default list.newobj.

    - - -
    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

    -

    ds.list returns a list of objects for each study that is stored on the server-side.

    -
    -
    -

    Details

    -

    If the objects to coerce into a list are for example vectors held in a matrix -or a data frame the names of the elements in the list are the names of columns.

    -

    Server function called: listDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    - # combine the 'LAB_TSC' and 'LAB_HDL' variables into a list
    - myobjects <- c('D$LAB_TSC', 'D$LAB_HDL')
    - ds.list(x = myobjects,
    -         newobj = "new.list",
    -         datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.listClientsideFunctions.html b/docs/reference/ds.listClientsideFunctions.html deleted file mode 100644 index 6f6570e6..00000000 --- a/docs/reference/ds.listClientsideFunctions.html +++ /dev/null @@ -1,104 +0,0 @@ - -Lists client-side functions — ds.listClientsideFunctions • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Lists all current client-side functions

    -
    - -
    -
    ds.listClientsideFunctions()
    -
    - -
    -

    Value

    -

    ds.listClientsideFunctions returns a list containing -all server-side functions.

    -
    -
    -

    Details

    -

    This function operates by directly interrogating -the R objects stored in the input client packages and objects of name -starting with ds. character in .GlobalEnv.

    -

    This function does not call any server-side function.

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -  ## Version 6, for version 5 see the Wiki
    -  
    -  #Library with all DataSHIELD functions
    -  require('dsBaseClient')
    -  
    -  #Visualise all functions
    -  ds.listClientsideFunctions()
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.listDisclosureSettings.html b/docs/reference/ds.listDisclosureSettings.html deleted file mode 100644 index 45969706..00000000 --- a/docs/reference/ds.listDisclosureSettings.html +++ /dev/null @@ -1,180 +0,0 @@ - -Lists disclosure settings — ds.listDisclosureSettings • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Lists current values for disclosure control filters in all data repository servers.

    -
    - -
    -
    ds.listDisclosureSettings(datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    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

    -

    ds.listDisclosureSettings returns a list containing the current settings of the -nfilters in each study specified.

    -
    -
    -

    Details

    -

    This function lists out the current values of the eight disclosure filters in each of -the data repository servers specified by datasources argument.

    -

    The eight filters are explained below:

    -

    (1) nfilter.tab, the minimum non-zero cell count allowed in any cell if a contingency table is -to be returned. This applies to one dimensional and two dimensional tables of counts tabulated -across one or two factors and to tables of a mean of a quantitative variable tabulated across a -factor. Default usually set to 3 but a value of 1 (no limit) may be necessary, particularly if -low cell counts are highly probable such as when working with rare diseases. Five is also a -justifiable choice to replicate the most common threshold rule imposed by data releasers -worldwide, but it should be recognised that many census providers are moving to ten - but the -formal justification of this is little more than 'it is safer' and everybody is scared of -something going wrong - in practice it is very easy to get around any block and so it is -debatable whether the scientific cost outweighs the imposition of any threshold.

    -

    (2) nfilter.subset, the minimum non-zero count of observational units (typically individuals) in -a subset. Typically defaulted to 3.

    -

    (3) nfilter.glm, the maximum number of parameters in a regression model as a proportion of the -sample size in a study. If a study has 1000 observational units (typically individuals) being -used in a particular analysis then if nfilter.glm is set to 0.33 (its default value) the maximum -allowable number of parameters in a model fitted to those data will be 330. This disclosure -filter protects against fitting overly saturated models that can be disclosive. The choice of -0.33 is entirely arbitrary.

    -

    (4) nfilter.string, the maximum length of a string argument if that argument is to be subject to -testing of its length. Default value 80. The aim of this nfilter is to make it difficult for -hackers to find a way to embed malicious code in a valid string argument that is actively -interpreted.

    -

    (5) nfilter.string, Short to be used when a string must be specified but that when valid that -string should be short.

    -

    (6) nfilter.kNN applies to graphical plots based on working with the k nearest neighbours of -each point. nfilter.kNN specifies the minimum allowable value for the number of nearest -neighbours used, typically defaulted to 3.

    -

    (7) nfilter.levels specifies the maximum number of unique levels of a factor variable that can -be disclosed to the client. In the absence of this filter a user can convert a numeric variable -to a factor and see its unique levels which are all the distinct values of the numeric vector. To -prevent such disclosure we set this threshold to 0.33 which ensures that if a factor has unique -levels more than the 33

    -

    (8) nfilter.noise specifies the minimum level of noise added in some variables mainly used for -data visualizations. The default value is 0.25 which means that the noise added to a given -variable, follows a normal distribution with zero mean and variance equal to 25 -variance of the given variable. Any value greater than this threshold can reduce the risk of -disclosure.

    -

    Server function called: listDisclosureSettingsDS

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    - 
    -  ## Version 6, for version 5 see 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")
    -  builder$append(server = "study3",
    -                 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")
    -  
    -  # Call to list current disclosure settings in all data repository servers 
    -  
    -  ds.listDisclosureSettings(datasources = connections)
    -  
    -  # Restrict call to list disclosure settings only to the first, or second DS connection (study)
    -  
    -  ds.listDisclosureSettings(datasources = connections[1]) 
    -  ds.listDisclosureSettings(datasources = connections[2])
    -            
    -   # Clear the Datashield R sessions and logout  
    -   datashield.logout(connections) 
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.listOpals.html b/docs/reference/ds.listOpals.html deleted file mode 100644 index 5ab10679..00000000 --- a/docs/reference/ds.listOpals.html +++ /dev/null @@ -1,98 +0,0 @@ - -Lists all Opal objects in the analytic environment — ds.listOpals • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    ds.listOpals calls the internal DataSHIELD function getOpals() which identifies -all Opal objects in the analytic environment.

    -
    - -
    -
    ds.listOpals()
    -
    - -
    -

    Value

    -

    Lists all of the sets of Opals currently found in the analytic environment and advises -the user how best to respond depending whether there are zero, one or multiple Opals detected.

    -
    -
    -

    Details

    -

    ds.listOpals calls the internal DataSHIELD function getOpals() which identifies -all Opal objects in the analytic environment. If there are no Opal servers in the analytic -environment ds.listOpalsIreminds the user that they have to login to a valid set of Opal -login objects, if they wish to use DataSHIELD. If there is only one set of Opals, ds.listOpals -copies that one set and names the copy 'default.opals'. This default set will then be used by -default by all subsequent calls to client-side functions. If there is more than one set of Opals -in the analytic environment, ds.listOpals tells the user that they can either explicitly specify the -Opals to be used by each client-side function by providing an explicit "datasources=" argument -for each call, or can alternatively use the ds.setDefaultOpals function to specify a default -set of Opals to be used by all client-side calls unless over-ruled by the 'datasources=' argument.

    -
    -
    -

    Author

    -

    Burton, PR. 28/9/16

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.listServersideFunctions.html b/docs/reference/ds.listServersideFunctions.html deleted file mode 100644 index 757fbc03..00000000 --- a/docs/reference/ds.listServersideFunctions.html +++ /dev/null @@ -1,142 +0,0 @@ - -Lists server-side functions — ds.listServersideFunctions • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Lists all current server-side functions

    -
    - -
    -
    ds.listServersideFunctions(datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    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

    -

    ds.listServersideFunctions returns to the client-side -a list containing all server-side functions separately for each study. -Firstly lists assign and then aggregate functions.

    -
    -
    -

    Details

    -

    Uses datashield.methods function from DSI package to list all -assign and aggregate functions on the available data repository servers. -The only choice of arguments is in datasources; i.e. which studies to interrogate. -Once the studies have -been selected ds.listServersideFunctions lists all assign functions for all -of these studies and then all aggregate functions for all of them.

    -

    This function does not call any server-side function.

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    - 
    -  ## Version 6, for version 5 see 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")
    -  builder$append(server = "study3",
    -                 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")
    -  
    -  # List server-side functions
    -  
    -  ds.listServersideFunctions(datasources = connections)
    -            
    -  # Clear the Datashield R sessions and logout  
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.lmerSLMA.html b/docs/reference/ds.lmerSLMA.html deleted file mode 100644 index 2c0444ed..00000000 --- a/docs/reference/ds.lmerSLMA.html +++ /dev/null @@ -1,346 +0,0 @@ - -Fits Linear Mixed-Effect model via Study-Level Meta-Analysis — ds.lmerSLMA • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    ds.lmerSLMA fits a Linear Mixed-Effects Model (lme) - can include both -fixed and random-effects - on data from one or multiple sources with pooling via SLMA -(Study-Level Meta-Analysis)

    -
    - -
    -
    ds.lmerSLMA(
    -  formula = NULL,
    -  offset = NULL,
    -  weights = NULL,
    -  combine.with.metafor = TRUE,
    -  dataName = NULL,
    -  checks = FALSE,
    -  datasources = NULL,
    -  REML = TRUE,
    -  control_type = NULL,
    -  control_value = NULL,
    -  optimizer = NULL,
    -  verbose = 0,
    -  notify.of.progress = FALSE,
    -  assign = FALSE,
    -  newobj = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    formula
    -

    an object of class formula describing the model to be fitted. -For more information see Details.

    - - -
    offset
    -

    a character string specifying the name of a variable to be used as -an offset.

    - - -
    weights
    -

    a character string specifying the name of a variable containing -prior regression weights for the fitting process.

    - - -
    combine.with.metafor
    -

    logical. If TRUE the -estimates and standard errors for each regression coefficient are pooled across -studies using random-effects meta-analysis under maximum likelihood (ML), -restricted maximum likelihood (REML) or fixed-effects meta-analysis (FE). Default TRUE.

    - - -
    dataName
    -

    a character string specifying the name of an (optional) data frame -that contains all of the variables in the LME formula. -For more information see Details.

    - - -
    checks
    -

    logical. If TRUE ds.lmerSLMA checks the structural integrity -of the model. Default FALSE. For more information see Details.

    - - -
    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.

    - - -
    REML
    -

    logical. If TRUE the REstricted Maximum Likelihood (REML) -is used for parameter optimization. -If FALSE the parameters are optimized using standard ML (maximum likelihood). Default TRUE. -For more information see Details.

    - - -
    control_type
    -

    an optional character string vector specifying the nature of a parameter -(or parameters) to be modified in the convergence control options which can be viewed or -modified via the lmerControl function of the package lme4. -For more information see Details.

    - - -
    control_value
    -

    numeric representing the new value which you want to allocate the -control parameter corresponding to the control-type. -For more information see Details.

    - - -
    optimizer
    -

    specifies the parameter optimizer that lmer should use. -For more information see Details.

    - - -
    verbose
    -

    an integer value. If \(verbose > 0\) the output is generated during the optimization of -the parameter estimates. If \(verbose > 1\) the output is generated during the individual penalized -iteratively reweighted least squares (PIRLS) steps. Default verbose - value is 0 which means no additional output.

    - - -
    notify.of.progress
    -

    specifies if console output should be produced to indicate -progress. Default FALSE.

    - - -
    assign
    -

    a logical, indicates whether the function will call a second server-side function -(an assign) in order to save the regression outcomes (i.e. a lmerMod object) on each server. -Default FALSE.

    - - -
    newobj
    -

    a character string specifying the name of the object to which the lmerMod object -representing the model fit on the serverside in each study is to be written. This argument is -used only when the argument assign is set to TRUE. -If no <newobj> argument is specified, the output object defaults to "new.lmer.obj".

    - -
    -
    -

    Value

    -

    Many of the elements of the output list returned by ds.lmerSLMA are -equivalent to those returned by the lmer() function in native R. However, -potentially disclosive elements -such as individual-level residuals and linear predictor values are blocked. -In this case, only non-disclosive elements are returned from each study separately.

    -

    The list of elements returned by ds.lmerSLMA is mentioned below:

    -

    ds.lmerSLMA returns a list of elements mentioned -below separately for each study.

    -

    coefficients: a matrix with 5 columns:

    First
    -

    : the names of all of the regression parameters (coefficients) in the model

    - -
    second
    -

    : the estimated values

    - -
    third
    -

    : corresponding standard errors of the estimated values

    - -
    fourth
    -

    : the ratio of estimate/standard error

    - -
    fifth
    -

    : the p-value treating that as a standardised normal deviate

    - - -

    CorrMatrix: the correlation matrix of parameter estimates.

    -

    VarCovMatrix: the variance-covariance matrix of parameter estimates.

    -

    weights: the vector (if any) holding regression weights.

    -

    offset: the vector (if any) holding an offset.

    -

    cov.scaled: equivalent to VarCovMatrix.

    -

    Nmissing: the number of missing observations in the given study.

    -

    Nvalid: the number of valid (non-missing) observations in the given study.

    -

    Ntotal: the total number of observations - in the given study (Nvalid + Nmissing).

    -

    data: equivalent to input parameter dataName (above).

    -

    call: summary of key elements of the call to fit the model.

    -

    There are a small number of more esoteric items of the information returned -by ds.lmerSLMA. Additional information about these can be found in the help -file for the lmer() function in the lme4 package.

    -

    Once the study-specific output has been returned, the function returns -several elements relating to the pooling of estimates across studies via -study-level meta-analysis. These are as follows:

    -

    input.beta.matrix.for.SLMA: a matrix containing the vector of coefficient -estimates from each study.

    -

    input.se.matrix.for.SLMA: a matrix containing the vector of standard error -estimates for coefficients from each study.

    -

    SLMA.pooled.estimates: a matrix containing pooled estimates for each -regression coefficient across all studies with pooling under SLMA via -random-effects meta-analysis under maximum likelihood (ML), restricted maximum -likelihood (REML) or via fixed-effects meta-analysis (FE).

    -

    convergence.error.message: reports for each study whether the model converged. -If it did not some information about the reason for this is reported.

    -
    -
    -

    Details

    -

    ds.lmerSLMA fits a Linear Mixed Effects Model (lme) - can include both fixed and random -effects - on data from single or multiple sources.

    -

    This function is similar to lmer function from lme4 package in native R.

    -

    When there are multiple data sources, -the LME is fitted to convergence in each data source independently. The -estimates and standard errors returned to the client-side which enable cross-study pooling -using Study-Level Meta-Analysis (SLMA). The SLMA used by default metafor package - but as the SLMA occurs on the client-side (a standard R environment), the user can choose - any approach to meta-analysis. Additional information about fitting -LMEs using the lmer function can be -obtained using R help for lmer and the lme4 package.

    -

    In formula most shortcut notation allowed by lmer() function is -also allowed by ds.lmerSLMA. Many LMEs can be fitted very simply using a formula like: -$$y~a+b+(1|c)$$ -which simply means fit an LME with y as the outcome variable with a and b -as fixed effects, and c as a random effect or grouping factor.

    -

    It is also possible to fit models with random slopes by specifying a model such as -$$y~a+b+(1+b|c)$$ -where the effect of b can vary randomly between groups defined by c. -Implicit nesting can be specified with formulae such as \(y~a+b+(1|c/d)\) -or \(y~a+b+(1|c)+(1|c:d)\).

    -

    The dataName argument avoids you having to specify the name of the -data frame in front of each covariate in the formula. -For example, if the data frame is called DataFrame you avoid having to write: -\(DataFrame$y~DataFrame$a+DataFrame$b+(1|DataFrame$c)\).

    -

    The checks argument verifies that the variables in the model are all defined (exist) -on the server-site at every study -and that they have the correct characteristics required to fit the model. -It is suggested to make checks argument TRUE if an unexplained -problem in the model fit is encountered because the running process takes several minutes.

    -

    REML can help to mitigate -bias associated with the fixed-effects. See help on the lmer() function for more details.

    -

    In control_type at present only one such parameter can be modified, -namely the tolerance of the convergence criterion to the gradient of the log-likelihood -at the maximum likelihood achieved. We have enabled this because our practical experience -suggests that in situations where the model looks to have converged with sensible parameter -values but formal convergence is not being declared if we allow the model to be more -tolerant to a non-zero gradient the same parameter values are obtained but formal -convergence is declared. The default value for the check.conv.grad is 0.002.

    -

    control_value At present (see control_type) -the only parameter this can be is the convergence tolerance check.conv.grad. In -general, models will be identified as having converged more readily if the value set -for check.conv.grad is increased from its default (0.002). Please note -that the risk of doing this is that the model is also more likely to be declared -as having converged at a local maximum that is not the global maximum likelihood. -This will not generally be a problem if the likelihood surface is well behaved but if -you have a problem with convergence you might usefully compare all the parameter -estimates and standard errors obtained using the default tolerance (0.002) even though -that has not formally converged with those obtained after convergence using the higher -tolerance.

    -

    The optimizer argument is built in but it won't do anything because there is only one -standard optimizer available for lmer - this is the nloptwrap optimizer. If users -wish to apply a different optimizer - potentially one they have developed themselves - -the development team can activate this argument so alternatives can be specified.

    -

    Server function called: lmerSLMADS2

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    - ## Version 6, for version 5 see 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 = "CLUSTER.CLUSTER_SLO1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CLUSTER.CLUSTER_SLO2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CLUSTER.CLUSTER_SLO3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -   #Log onto the remote Opal training servers
    -   connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D")
    -               
    -  # Select all rows without missing values
    -  ds.completeCases(x1 = "D", newobj = "D.comp", datasources = connections)
    - 
    -  # Fit the lmer
    -  
    -  ds.lmerSLMA(formula = "BMI ~  incid_rate + diabetes + (1 | Male)",
    -               dataName = "D.comp",
    -               datasources = connections)
    -  
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -  } # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.log.html b/docs/reference/ds.log.html deleted file mode 100644 index 30f10ae2..00000000 --- a/docs/reference/ds.log.html +++ /dev/null @@ -1,156 +0,0 @@ - -Computes logarithms in the server-side — ds.log • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Computes the logarithms for a specified numeric vector. -This function is similar to the R log function. by default natural logarithms.

    -
    - -
    -
    ds.log(x = NULL, base = exp(1), newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of a numerical vector.

    - - -
    base
    -

    a positive number, the base for which logarithms are computed. -Default exp(1).

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the server-side. Default log.newobj.

    - - -
    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

    -

    ds.log returns a vector for each study of the transformed values for the numeric vector -specified in the argument x. The created vectors are stored in the server-side.

    -
    -
    -

    Details

    -

    Server function called: log

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Calculating the log value of the 'PM_BMI_CONTINUOUS' variable
    -  
    -  ds.log(x = "D$PM_BMI_CONTINUOUS",
    -         base = exp(2),
    -         newobj = "log.PM_BMI_CONTINUOUS",
    -         datasources = connections[1]) #only the first Opal server is used (study1)
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.look.html b/docs/reference/ds.look.html deleted file mode 100644 index ae0d0cc7..00000000 --- a/docs/reference/ds.look.html +++ /dev/null @@ -1,165 +0,0 @@ - -Performs direct call to a server-side aggregate function — ds.look • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    The function ds.look can be used to make a direct call to a server-side -aggregate function more simply than using the datashield.aggregate function.

    -
    - -
    -
    ds.look(toAggregate = NULL, checks = FALSE, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    toAggregate
    -

    a character string specifying the function call to be made. -For more information see Details.

    - - -
    checks
    -

    logical. If TRUE the optional checks are undertaken. -Default FALSE to save time.

    - - -
    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

    -

    the output from the specified server-side aggregate function to the client-side.

    -
    -
    -

    Details

    -

    The ds.look and datashield.aggregate functions are generally -only recommended for experienced developers. For example, the toAggregate argument has to -be expressed in the same form that the server-side function would usually expect from its -client-side pair. For example: ds.look("table1DDS(female)") works. But, if you express -this as ds.look("table1DDS('female')") it won't work because although when -you call this same function using its client-side function you write ds.table1D('female') -the inverted commas are stripped off during processing by the client-side function so the -call to the server-side does not contain inverted commas.

    -

    Apart from during development -work (e.g. before a client-side function has been written) it is almost always easier -and less error-prone to call a server-side function using its client-side pair.

    -

    The function is a wrapper for the DSI package function datashield.aggregate.

    -
    -
    -

    Author

    -

    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 = "SURVIVAL.EXPAND_NO_MISSING1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D")
    -  
    -  #Calculate the length of a variable using the server-side function
    -  
    -  ds.look(toAggregate = "lengthDS(D$age.60)", 
    -          checks = FALSE,
    -          datasources = connections) 
    -          
    -  #Calculate the column names of "D" object using the server-side function
    -          
    -  ds.look(toAggregate = "colnames(D)",
    -          checks = FALSE, 
    -          datasources = connections)        
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.ls.html b/docs/reference/ds.ls.html deleted file mode 100644 index e0086831..00000000 --- a/docs/reference/ds.ls.html +++ /dev/null @@ -1,216 +0,0 @@ - -lists all objects on a server-side environment — ds.ls • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    creates a list of the names of all of the objects in -a specified serverside environment.

    -
    - -
    -
    ds.ls(
    -  search.filter = NULL,
    -  env.to.search = 1L,
    -  search.GlobalEnv = TRUE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    search.filter
    -

    character string (potentially including * symbol) specifying the filter -for the object name that you want to find in the enviroment. For more information see Details.

    - - - -

    an integer (e.g. in 2 or 2L format) specifying the position -in the search path of the environment to be explored. 1L is the current active analytic -environment on the server-side and is the default value of env.to.search. -For more information see Details.

    - - -
    search.GlobalEnv
    -

    Logical. If TRUE, ds.ls will list all objects -in the .GlobalEnv R environment on the server-side. If FALSE and if env.to.search is also -set as a valid integer, ds.ls will list all objects in the server-side R environment -identified by env.to.search in the search path. -For more information see Details.

    - - -
    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

    -

    ds.ls returns to the client-side a list containing:
    -(1) the name/details of the server-side R environment which ds.ls has searched;
    -(2) a vector of character strings giving the names of -all objects meeting the naming criteria specified by the argument search.filter in this -specified R server-side environment;
    -(3) the nature of the search filter string as it was applied.

    -
    -
    -

    Details

    -

    When running analyses one may want to know the objects already generated. This -request is not disclosive as it only returns the names of the objects and not their contents.

    -

    By default, objects in DataSHIELD's Active Serverside Analytic Environment (.GlobalEnv) -will be listed. This is the environment that contains all of the objects that server-side DataSHIELD -is using for the main analysis or has written out to the server-side during the process -of managing or undertaking the analysis (variables, scalars, matrices, data frames, etc).

    -

    The environment to explore is specified by the argument env.to.search (i.e. environment -to search) to an integer value. The default environment -which R names as .GlobalEnv is set by specifying env.to.search = 1 or 1L -(1L is just an explicit way of writing the integer 1).

    -

    If the search.GlobalEnv argument is set to TRUE the env.to.search parameter -is set to 1L regardless of what value it is set in the call -or if it is set to NULL. -So, if search.GlobalEnv is set to TRUE, ds.ls will automatically -search the .GlobalEnv R environment on the server-side which contains all of the -variables, data frames and other objects read in at the start of the analysis, -as well as any new objects of any sort created using DataSHIELD assign functions.

    -

    Other server-side environments contain other -objects. For example, environment 2L contains the functions loaded via the native R -stats package and 6L contains the standard list of datasets built into R. By default -ds.ls will return a list of ALL of the objects in the environment specified by the -env.to.search argument but you can specify search filters including * wildcards -using the search.filter argument.

    -

    In search.filter you can use the symbol * to find all the object that contains -the specified characters. For example, search.filter = "Sd2*" -will list the names of all objects in the specified -environment with names beginning capital S, lower case d and number 2. -Similarly, search.filter="*.ID" will return all objects with names ending with .ID, -for example Study.ID. -If a value is not specified for the search.filter argument or it is set as NULL, the names of -all objects in the specified environment will be returned.

    -

    Server function called: lsDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Example 1: Obtain the list of  all objects on a server-side environment
    -  
    -  ds.ls(datasources = connections)
    -  
    -  #Example 2: Obtain the list of all objects that contain "var" character in the name
    -  #Create in the server-side variables with "var" character in the name
    -  
    -  ds.assign(toAssign = "D$LAB_TSC",
    -            newobj = "var.LAB_TSC",
    -            datasources = connections)
    -  ds.assign(toAssign = "D$LAB_TRIG",
    -            newobj = "var.LAB_TRIG",
    -            datasources = connections)
    -  ds.assign(toAssign = "D$LAB_HDL",
    -            newobj = "var.LAB_HDL",
    -            datasources = connections)
    -  
    -  ds.ls(search.filter = "var*",
    -        env.to.search = 1L,
    -        search.GlobalEnv = TRUE,
    -        datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.lspline.html b/docs/reference/ds.lspline.html deleted file mode 100644 index 188e4632..00000000 --- a/docs/reference/ds.lspline.html +++ /dev/null @@ -1,134 +0,0 @@ - -Basis for a piecewise linear spline with meaningful coefficients — ds.lspline • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function is based on the native R function lspline from the -lspline package. This function computes the basis of piecewise-linear spline -such that, depending on the argument marginal, the coefficients can be interpreted as -(1) slopes of consecutive spline segments, or (2) slope change at consecutive knots.

    -
    - -
    -
    ds.lspline(
    -  x,
    -  knots = NULL,
    -  marginal = FALSE,
    -  names = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    the name of the input numeric variable

    - - -
    knots
    -

    numeric vector of knot positions

    - - -
    marginal
    -

    logical, how to parametrize the spline, see Details

    - - -
    names
    -

    character, vector of names for constructed variables

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default lspline.newobj.

    - - -
    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

    -

    an object of class "lspline" and "matrix", which its name is specified by the -newobj argument (or its default name "lspline.newobj"), is assigned on the serverside.

    -
    -
    -

    Details

    -

    If marginal is FALSE (default) the coefficients of the spline correspond to -slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -the slope of the first segment. The consecutive coefficients correspond to the change -in slope as compared to the previous segment.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.make.html b/docs/reference/ds.make.html deleted file mode 100644 index 7d4ae3e2..00000000 --- a/docs/reference/ds.make.html +++ /dev/null @@ -1,219 +0,0 @@ - -Calculates a new object in the server-side — ds.make • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function defines a new object in the server-side - via an allowed function or an arithmetic expression.

    -

    ds.make function is equivalent to ds.assign, but runs slightly faster.

    -
    - -
    -
    ds.make(toAssign = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    toAssign
    -

    a character string specifying the function or the arithmetic expression.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default make.newobj.

    - - -
    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

    -

    ds.make returns the new object which is written to the -server-side. Also a validity message is returned to the client-side indicating whether the new object has been correctly -created at each source.

    -
    -
    -

    Details

    -

    If the new object is created successfully, the function will verify its -existence on the required servers. Please note there are certain modes of failure -where it is reported that the object has been created but it is not there. This -reflects a failure in the processing of some sort and warrants further exploration of the -details of the call to ds.make and the variables/objects which it invokes.

    -

    TROUBLESHOOTING: please note we have recently identified an error that makes ds.make -fail and DataSHIELD crash.

    -

    The error arises from a call such as -ds.make(toAssign = '5.3 + beta*xvar', newobj = 'predvals'). -This is a typical call you -may make to get the predicted values from a simple linear regression model where -a y variable is regressed against an x variable (xvar) -where the estimated regression intercept is 5.3 -and beta is the estimated regression slope.

    -

    This call appears to -fail because in interpreting the arithmetic function which is its first argument -it first encounters the (length 1) scalar 5.3 -and when it then encounters the xvar vector -which has more than one element it fails - apparently because it does not recognise -that you need to replicate the 5.3 value the appropriate number of times -to create a vector -of length equal to xvar with each value equal to 5.3.

    -

    There are two work-around solutions here:

    -

    (1) explicitly create a vector of appropriate length with each -value equal to 5.3. To do this there is a useful trick. First identify -a convenient numeric variable with no missing values (typically a numeric -individual ID) let us call it indID equal in length to xvar (xvar may include NAs -but that doesn't matter provided indID is the same total length). Then issue the call -ds.make(toAssign = 'indID-indID+1',newobj = 'ONES'). This creates a vector of ones (called ONES) -in each source equal in length to the indID vector in that source. Then issue -the second call ds.make(toAssign = 'ONES*5.3',newobj = 'vect5.3') which creates the required -vector of length equal to xvar with all elements 5.3. Finally, you can -now issue a modified call to reflect what was originally needed: -ds.make(toAssign = 'vect5.3+beta*xvar', 'predvals').

    -

    (2) Alternatively, if you simply swap the original call around: -ds.make(toAssign = '(beta*xvar)+5.3', newobj = 'predvals') -the error seems also to be circumvented. This is presumably because the first element -of the arithmetic function is of length equal to xvar and it then knows to -replicate the 5.3 that many times in the second part of the expression.

    -

    The second work-around is easier, but it is worth knowing about the -first trick because creating a vector of ones of equal length to another vector -can be useful in other settings. Equally the call: -ds.make(toAssign = 'indID-indID',newobj = 'ZEROS') -to create a vector of zeros of that same length may also be useful.

    -

    Server function : messageDS

    -

    The ds.make function is a wrapper for the DSI package function datashield.assign

    -
    -
    -

    Author

    -

    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 = "SURVIVAL.EXPAND_NO_MISSING1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -##Example 1: arithmetic operators 
    -
    -ds.make(toAssign = "D$age.60 + D$bmi.26", 
    -        newobj = "exprs1", 
    -        datasources = connections)
    -        
    -ds.make(toAssign = "D$noise.56 + D$pm10.16",
    -        newobj = "exprs2", 
    -        datasources = connections)
    -        
    -ds.make(toAssign = "(exprs1*exprs2)/3.2",
    -        newobj = "result.example1", 
    -        datasources = connections)
    -
    -##Example 2: miscellaneous operators within functions
    -
    -ds.make(toAssign = "(D$female)^2",
    -        newobj = "female2",
    -       datasources = connections)
    -       
    -ds.make(toAssign = "(2*D$female)+(D$log.surv)-(female2*2)",
    -        newobj = "output.test.1",
    -        datasources = connections)
    -        
    -ds.make(toAssign = "exp(output.test.1)",
    -        newobj = "output.test",
    -       datasources = connections)
    -       
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrix.html b/docs/reference/ds.matrix.html deleted file mode 100644 index 0b7c0d61..00000000 --- a/docs/reference/ds.matrix.html +++ /dev/null @@ -1,264 +0,0 @@ - -Creates a matrix on the server-side — ds.matrix • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Creates a matrix on the server-side -with dimensions specified by nrows.scalar -and ncols.scalar arguments and assigns the -values of all its elements based on the mdata argument.

    -
    - -
    -
    ds.matrix(
    -  mdata = NA,
    -  from = "clientside.scalar",
    -  nrows.scalar = NULL,
    -  ncols.scalar = NULL,
    -  byrow = FALSE,
    -  dimnames = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    mdata
    -

    a character string specifying -the name of a server-side scalar or vector. Also, a numeric value representing a -scalar specified from the client-side can be speficied. -Zeros, negative values and NAs are all allowed. -For more information see Details.

    - - -
    from
    -

    a character string specifying the source and nature of mdata. -This can be set as "serverside.vector", "serverside.scalar" -or "clientside.scalar". Default "clientside.scalar".

    - - -
    nrows.scalar
    -

    an integer or a character string that specifies the number -of rows in the matrix to be created. -For more information see Details.

    - - -
    ncols.scalar
    -

    an integer or a character string that specifies -the number of columns in the matrix to be created.

    - - -
    byrow
    -

    logical. If TRUE and mdata is a vector the matrix -created should be filled row by row. If FALSE the matrix created should -be filled column by column. Default = FALSE.

    - - -
    dimnames
    -

    a list of length 2 giving -the row and column names respectively.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default matrix.newobj.

    - - -
    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

    -

    ds.matrix returns the created matrix which is written on the server-side. -In addition, two validity messages are returned -indicating whether the new matrix has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is similar to the R native function matrix().

    -

    If in the mdata argument a vector is specified this should have -the same length as the total number of elements -in the matrix. If this is not TRUE the values in mdata -will be used repeatedly until all elements in the matrix are full. -If mdata argument is a scalar, all elements in the matrix will take that value.

    - -

    In the nrows.scalar argument can be a character string specifying -the name of a server-side scalar. For example, -if a server-side scalar named ss.scalar exists and holds the value 23, -then by specifying nrows.scalar = "ss.scalar", the matrix created will -have 23 rows. Also this argument can be -a numeric value from the -client-side. The same rules are applied to ncols.scalar argument but in this -case the column numbers are specified. -In both arguments a zero, negative, NULL or missing value is not permitted.

    - -

    Server function called: matrixDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Example 1: create a matrix with -13 value in all elements
    -  
    -  ds.matrix(mdata = -13,
    -            from = "clientside.scalar",
    -            nrows.scalar = 3,
    -            ncols.scalar = 8,
    -            newobj = "cs.block",
    -            datasources = connections)
    -            
    -  #Example 2: create a matrix of missing values 
    -
    -  ds.matrix(NA,
    -            from = "clientside.scalar",
    -            nrows.scalar = 4,
    -            ncols.scalar = 5,
    -            newobj = "cs.block.NA",
    -            datasources = connections)
    -
    -  #Example 3: create a matrix using a server-side vector
    -  #create a vector in the server-side
    -  
    -  ds.rUnif(samp.size = 45,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector",
    -           seed.as.integer = 8321,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  ds.matrix(mdata = "ss.vector",
    -            from = "serverside.vector",
    -            nrows.scalar = 5,
    -            ncols.scalar = 9,
    -            newobj = "sv.block",
    -            datasources = connections)
    -            
    -  #Example 4: create a matrix using a server-side vector and specifying
    -  #the row a column names
    -
    -  ds.rUnif(samp.size = 9,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector.9",
    -           seed.as.integer = 5575,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  ds.matrix(mdata = "ss.vector.9",
    -            from = "serverside.vector",
    -            nrows.scalar = 5,
    -            ncols.scalar = 9,
    -            byrow = TRUE,
    -            dimnames = list(c("a","b","c","d","e")),
    -            newobj = "sv.block.9.dimnames1",
    -            datasources = connections)
    -
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrixDet.html b/docs/reference/ds.matrixDet.html deleted file mode 100644 index 8d94a581..00000000 --- a/docs/reference/ds.matrixDet.html +++ /dev/null @@ -1,182 +0,0 @@ - -Calculates de determinant of a matrix in the server-side — ds.matrixDet • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Calculates the determinant of a square matrix that is -written on the server-side. -This operation is only -possible if the number of columns and rows of the matrix are the same.

    -
    - -
    -
    ds.matrixDet(M1 = NULL, newobj = NULL, logarithm = FALSE, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    M1
    -

    a character string specifying the name of the matrix.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default matrixdet.newobj.

    - - -
    logarithm
    -

    logical. If TRUE the logarithm of the modulus of the determinant -is calculated. Default FALSE.

    - - -
    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

    -

    ds.matrixDet returns the determinant of an existing matrix on the server-side. -The created new object is stored on the server-side. -Also, two validity messages are returned -indicating whether the matrix has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    Calculates the determinant of a square matrix on the server-side. -This function is similar to the native R determinant function.

    -

    Server function called: matrixDetDS2

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Create the matrix in the server-side
    -  
    -  ds.rUnif(samp.size = 9,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector.9",
    -           seed.as.integer = 5575,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  ds.matrix(mdata = "ss.vector.9",
    -            from = "serverside.vector",
    -            nrows.scalar = 9,ncols.scalar = 9,
    -            byrow = TRUE,
    -            newobj = "matrix",
    -            datasources = connections)
    -            
    -  #Calculate the determinant of the matrix
    -  
    -  ds.matrixDet(M1 = "matrix", 
    -               newobj = "matrixDet", 
    -               logarithm = FALSE, 
    -               datasources = connections)
    -  
    -
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrixDet.report.html b/docs/reference/ds.matrixDet.report.html deleted file mode 100644 index f216c851..00000000 --- a/docs/reference/ds.matrixDet.report.html +++ /dev/null @@ -1,170 +0,0 @@ - -Returns matrix determinant to the client-side — ds.matrixDet.report • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Calculates the determinant of a square matrix and returns -the result to the client-side

    -
    - -
    -
    ds.matrixDet.report(M1 = NULL, logarithm = FALSE, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    M1
    -

    a character string specifying the name of the matrix.

    - - -
    logarithm
    -

    logical. If TRUE the logarithm of the modulus of the determinant -is calculated. Default FALSE.

    - - -
    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

    -

    ds.matrixDet.report returns to the client-side -the determinant of a matrix that is stored on the server-side.

    -
    -
    -

    Details

    -

    Calculates and returns to the client-side -the determinant of a square matrix on the server-side. -This function is similar to the native R determinant function. -This operation is only -possible if the number of columns and rows of the matrix are the same.

    -

    Server function called: matrixDetDS1

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Create the matrix in the server-side
    -  
    -  ds.rUnif(samp.size = 9,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector.9",
    -           seed.as.integer = 5575,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  ds.matrix(mdata = "ss.vector.9",
    -            from = "serverside.vector",
    -            nrows.scalar = 9,ncols.scalar = 9,
    -            byrow = TRUE,
    -            newobj = "matrix",
    -            datasources = connections)
    -            
    -  #Calculate the determinant of the matrix
    -  
    -  ds.matrixDet.report(M1 = "matrix", 
    -                      logarithm = FALSE, 
    -                      datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrixDiag.html b/docs/reference/ds.matrixDiag.html deleted file mode 100644 index 66e8c6c4..00000000 --- a/docs/reference/ds.matrixDiag.html +++ /dev/null @@ -1,173 +0,0 @@ - -Calculates matrix diagonals in the server-side — ds.matrixDiag • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Extracts the diagonal vector from a square matrix or -creates a diagonal matrix based on a vector or a scalar value -on the server-side.

    -
    - -
    -
    ds.matrixDiag(
    -  x1 = NULL,
    -  aim = NULL,
    -  nrows.scalar = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x1
    -

    a character string specifying -the name of a server-side scalar or vector. Also, a numeric value or vector -specified from the client-side can be speficied. This argument depends -on the value specified in aim. -For more information see Details.

    - - -
    aim
    -

    a character string specifying the behaviour of the function. -This can be set as: -"serverside.vector.2.matrix", "serverside.scalar.2.matrix", -"serverside.matrix.2.vector", "clientside.vector.2.matrix" -or "clientside.scalar.2.matrix". -For more information see Details.

    - - -
    nrows.scalar
    -

    an integer specifying the dimensions of the matrix -note that the matrix is square (same number of rows and columns). -If this argument is not specified the matrix dimensions are -defined by the length of the vector. -For more information see Details.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default matrixdiag.newobj.

    - - -
    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

    -

    ds.matrixDiag returns to the server-side the square matrix diagonal. -Also, two validity messages are returned -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    The function behaviour is different depending on the -value specified in the aim argument:
    -(1) If aim = "serverside.vector.2.matrix" -the function takes a server-side vector and writes out a square matrix with -the vector as its diagonal and all off-diagonal values = 0. The dimensions -of the output matrix are determined by the length of the vector. -If the vector length is k, the output matrix has k rows and k columns.
    -(2) If aim = "serverside.scalar.2.matrix" -the function takes a server-side scalar and writes out a square matrix with all -diagonal values equal to the value of the scalar -and all off-diagonal values = 0. The dimensions of the square -matrix are determined by the value of the nrows.scalar argument.
    -(3) If aim = "serverside.matrix.2.vector" -the function takes a square server-side matrix and extracts -its diagonal values as a vector which is written to the server-side.
    -(4) If aim = "clientside.vector.2.matrix" -the function takes a vector specified on the client-side -and writes out a square matrix to the server-side with -the vector as its diagonal and all off-diagonal values = 0. The dimensions -of the output matrix are determined by the length of the vector.
    -(5) If aim = "clientside.scalar.2.matrix" -the function takes a scalar specified on the client-side -and writes out a square matrix with all diagonal values equal -to the value of the scalar. The dimensions of the square -matrix are determined by the value of the nrows.scalar argument.

    -

    If x1 is a vector and the nrows.scalar -is set as k, the vector will be used -repeatedly to fill up the diagonal. For example, the vector is of length -7 and nrows.scalar = 18, a square diagonal matrix with -18 rows and 18 columns will be created.

    -

    Server function called: matrixDiagDS

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    - -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrixDimnames.html b/docs/reference/ds.matrixDimnames.html deleted file mode 100644 index 24230307..00000000 --- a/docs/reference/ds.matrixDimnames.html +++ /dev/null @@ -1,188 +0,0 @@ - -Specifies the dimnames of the server-side matrix — ds.matrixDimnames • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Adds the row names, the column names or both to -a matrix on the server-side.

    -
    - -
    -
    ds.matrixDimnames(
    -  M1 = NULL,
    -  dimnames = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    M1
    -

    a character string specifying -the name of a server-side matrix.

    - - -
    dimnames
    -

    a list of length 2 giving -the row and column names respectively. -An empty list is treated as NULL.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default matrixdimnames.newobj.

    - - -
    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

    -

    ds.matrixDimnames returns to the server-side -the matrix with specified row and column names. -Also, two validity messages are returned to the client-side -indicating the new object that has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is similar to the native R dimnames function.

    -

    Server function called: matrixDimnamesDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -            
    -  #Example 1: Set the row and column names of a server-side matrix
    -  
    -  #Create the server-side vector 
    -  
    -  ds.rUnif(samp.size = 9,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector.9",
    -           seed.as.integer = 5575,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  #Create the server-side matrix
    -           
    -  ds.matrix(mdata = "ss.vector.9",
    -            from = "serverside.vector",
    -            nrows.scalar = 3,
    -            ncols.scalar = 4,
    -            byrow = TRUE,
    -            newobj = "matrix",
    -            datasources = connections)
    -   
    -  #Specify the column and row names of the matrix
    -  
    -  ds.matrixDimnames(M1 = "matrix",
    -                    dimnames = list(c("a","b","c"),c("a","b","c","d")),
    -                    newobj = "matrix.dimnames",
    -                    datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrixInvert.html b/docs/reference/ds.matrixInvert.html deleted file mode 100644 index 07f7e00c..00000000 --- a/docs/reference/ds.matrixInvert.html +++ /dev/null @@ -1,175 +0,0 @@ - -Inverts a server-side square matrix — ds.matrixInvert • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Inverts a square matrix and writes the output to the server-side

    -
    - -
    -
    ds.matrixInvert(M1 = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    M1
    -

    A character string specifying the name of the matrix to be inverted.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. -Default matrixinvert.newobj.

    - - -
    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

    -

    ds.matrixInvert returns to the server-side the inverts square matrix. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This operation is only -possible if the number of columns and rows of the matrix are the same and it -is non-singular-positive definite (e.g. there is no row or column that is all zeros).

    -

    Server function called: matrixInvertDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -            
    -  #Example 1: Invert the server-side matrix
    -  
    -  #Create the server-side vector 
    -  
    -  ds.rUnif(samp.size = 9,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector.9",
    -           seed.as.integer = 5575,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  #Create the server-side matrix
    -           
    -  ds.matrix(mdata = "ss.vector.9",
    -            from = "serverside.vector",
    -            nrows.scalar = 3,
    -            ncols.scalar = 4,
    -            byrow = TRUE,
    -            newobj = "matrix",
    -            datasources = connections)
    -   
    -  #Invert the matrix
    -  
    -  ds.matrixInvert(M1 = "matrix",
    -                  newobj = "matrix.invert",
    -                  datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrixMult.html b/docs/reference/ds.matrixMult.html deleted file mode 100644 index 55623b50..00000000 --- a/docs/reference/ds.matrixMult.html +++ /dev/null @@ -1,192 +0,0 @@ - -Calculates tow matrix multiplication in the server-side — ds.matrixMult • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Calculates the matrix product of two matrices and -writes output to the server-side.

    -
    - -
    -
    ds.matrixMult(M1 = NULL, M2 = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    M1
    -

    a character string specifying the name of the first matrix.

    - - -
    M2
    -

    a character string specifying the name of the second matrix.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default matrixmult.newobj.

    - - -
    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

    -

    ds.matrixMult returns to the server-side -the result of the two matrix multiplication. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    Undertakes standard matrix multiplication wherewith input matrices -A and B with dimensions A: m x n and B: n x p -the output matrix C has dimensions m x p. This calculation -is only valid if the number of columns of A -is the same as the number of rows of B.

    -

    Server function called: matrixMultDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -            
    -  #Example 1: Multiplicate two server-side matrix
    -  
    -  #Create the server-side vector 
    -  
    -  ds.rUnif(samp.size = 9,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector.9",
    -           seed.as.integer = 5575,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  #Create the server-side matrixes
    -           
    -  ds.matrix(mdata = "ss.vector.9",#using the created vector
    -            from = "serverside.vector",
    -            nrows.scalar = 5,
    -            ncols.scalar = 4,
    -            byrow = TRUE,
    -            newobj = "matrix1",
    -            datasources = connections)
    -            
    -   ds.matrix(mdata = 10,
    -             from = "clientside.scalar",
    -             nrows.scalar = 4,
    -             ncols.scalar = 6,
    -             byrow = TRUE,
    -             newobj = "matrix2",
    -             datasources = connections)
    -
    -  #Multiplicate the matrixes
    -  
    -  ds.matrixMult(M1 = "matrix1", 
    -                M2 = "matrix2", 
    -                newobj = "matrix.mult", 
    -                datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.matrixTranspose.html b/docs/reference/ds.matrixTranspose.html deleted file mode 100644 index 524e7531..00000000 --- a/docs/reference/ds.matrixTranspose.html +++ /dev/null @@ -1,177 +0,0 @@ - -Transposes a server-side matrix — ds.matrixTranspose • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Transposes a matrix and writes the output to the server-side

    -
    - -
    -
    ds.matrixTranspose(M1 = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    M1
    -

    a character string specifying the name of the matrix.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. -Default matrixtranspose.newobj.

    - - -
    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

    -

    ds.matrixTranspose returns to the server-side the transpose matrix. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This operation converts matrix -A to matrix C where element C[i,j] of -matrix C equals element A[j,i] of matrix -A. Matrix A, therefore, has the same number -of rows as matrix C has columns and vice versa.

    -

    Server function called: matrixTransposeDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -            
    -  #Example 1: Transpose the server-side matrix
    -  
    -  #Create the server-side vector 
    -  
    -  ds.rUnif(samp.size = 9,
    -           min = -10.5,
    -           max = 10.5,
    -           newobj = "ss.vector.9",
    -           seed.as.integer = 5575,
    -           force.output.to.k.decimal.places = 0,
    -           datasources = connections)
    -           
    -  #Create the server-side matrix
    -           
    -  ds.matrix(mdata = "ss.vector.9",
    -            from = "serverside.vector",
    -            nrows.scalar = 3,
    -            ncols.scalar = 4,
    -            byrow = TRUE,
    -            newobj = "matrix",
    -            datasources = connections)
    -   
    -  #Transpose the matrix
    -  
    -  ds.matrixTranspose(M1 = "matrix",
    -                     newobj = "matrix.transpose",
    -                     datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.mean.html b/docs/reference/ds.mean.html deleted file mode 100644 index 301e391e..00000000 --- a/docs/reference/ds.mean.html +++ /dev/null @@ -1,203 +0,0 @@ - -Computes server-side vector statistical mean — ds.mean • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function computes the statistical mean - of a given server-side vector.

    -
    - -
    -
    ds.mean(
    -  x = NULL,
    -  type = "split",
    -  checks = FALSE,
    -  save.mean.Nvalid = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character specifying the name of a numerical vector.

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -This can be set as 'combine', 'combined', 'combines', -'split', 'splits', 's', -'both' or 'b'. -For more information see Details.

    - - -
    checks
    -

    logical. If TRUE optional checks of model -components will be undertaken. Default is FALSE to save time. -It is suggested that checks -should only be undertaken once the function call has failed.

    - - -
    save.mean.Nvalid
    -

    logical. If TRUE generated values of the mean and -the number of valid (non-missing) observations will be saved on the data servers. -Default FALSE. -For more information see Details.

    - - -
    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

    -

    ds.mean returns to the client-side a list including:

    -

    Mean.by.Study: estimated mean, Nmissing -(number of missing observations), Nvalid (number of valid observations) and -Ntotal (sum of missing and valid observations) -separately for each study (if type = split or type = both).
    Global.Mean: estimated mean, Nmissing, Nvalid and Ntotal -across all studies combined (if type = combine or type = both).
    Nstudies: number of studies being analysed.
    ValidityMessage: indicates if the analysis was possible.

    -

    If save.mean.Nvalid is set as TRUE, the objects -Nvalid.all.studies, Nvalid.study.specific, -mean.all.studies and mean.study.specific are written to the server-side.

    -
    -
    -

    Details

    -

    This function is similar to the R function mean.

    -

    The function can carry out 3 types of analysis depending on -the argument type:
    -(1) If type is set to 'combine', 'combined', -'combines' or 'c', a global mean is calculated.
    -(2) If type is set to 'split', 'splits' or 's', - the mean is calculated separately for each study.
    -(3) If type is set to 'both' or 'b', -both sets of outputs are produced.

    -

    If the argument save.mean.Nvalid is set to TRUE - study-specific means and Nvalids -as well as the global equivalents across all studies combined -are saved in the server-side. -Once the estimated means and Nvalids -are written into the server-side R environments, they can be used directly to centralize -the variable of interest around its global mean or its study-specific means. Finally, -the isDefined internal function checks whether the key variables have been created.

    -

    Server function called: meanDS

    -
    -
    -

    See also

    -

    ds.quantileMean to compute quantiles.

    -

    ds.summary to generate the summary of a variable.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Calculate the mean of a vector in the server-side
    -  
    -  ds.mean(x = "D$LAB_TSC",
    -          type = "split",
    -          checks = FALSE,
    -          save.mean.Nvalid = FALSE,
    -          datasources = connections)
    -             
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.meanByClass.html b/docs/reference/ds.meanByClass.html deleted file mode 100644 index 8b081930..00000000 --- a/docs/reference/ds.meanByClass.html +++ /dev/null @@ -1,187 +0,0 @@ - -Computes the mean and standard deviation across categories — ds.meanByClass • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the mean and the standard deviation (SD) - of a continuous variable for each class of up to 3 categorical variables.

    -
    - -
    -
    ds.meanByClass(
    -  x = NULL,
    -  outvar = NULL,
    -  covar = NULL,
    -  type = "combine",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of the dataset or a text formula.

    - - -
    outvar
    -

    a character vector specifying the names of the continuous variables.

    - - -
    covar
    -

    a character vector specifying the names of up to 3 categorical variables

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -type can be set as: 'combine' or 'split'. -Default 'combine'. -For more information see Details.

    - - -
    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

    -

    ds.meanByClass returns to the client-side a table or a list of tables that -hold the length of the numeric variable(s) and their mean -and standard deviation in each subgroup (subset).

    -
    -
    -

    Details

    -

    The function splits the input dataset into subsets (one for each category) and calculates -the mean and SD of the specified numeric variables. It is important to note that the process of -generating the final table(s) can be time consuming particularly if the subsetting is done across -more than one categorical variable and the run-time lengthens if the parameter type is set to -'split' as a table is then produced for each study. It is therefore advisable to run the function -only for the studies of the user interested in but including only those studies in the -parameter datasources.

    -

    Depending on the variable type can be carried out two analysis:
    - (1) 'combine': a pooled table of results is generated.
    - (2) 'split': a table of results is generated for each study.

    -
    -
    -

    See also

    -

    ds.subsetByClass to subset by the classes of factor vector(s).

    -

    ds.subset to subset by complete cases (i.e. removing missing values), threshold, columns and rows.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Calculate mean by class
    -  
    -  ds.meanByClass(x = "D",
    -                 outvar = c('LAB_HDL','LAB_TSC'),
    -                 covar = c('PM_BMI_CATEGORICAL'),
    -                 type = "combine",
    -                 datasources = connections)
    -                 
    -  ds.meanByClass(x = "D$LAB_HDL~D$PM_BMI_CATEGORICAL",
    -                 type = "combine",
    -                 datasources = connections[1])#Only the frist server is used ("study1")  
    -             
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.meanSdGp.html b/docs/reference/ds.meanSdGp.html deleted file mode 100644 index 51702b22..00000000 --- a/docs/reference/ds.meanSdGp.html +++ /dev/null @@ -1,232 +0,0 @@ - -Computes the mean and standard deviation across groups defined by one factor — ds.meanSdGp • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the mean and SD of a continuous variable for each class of -a single factor.

    -
    - -
    -
    ds.meanSdGp(
    -  x = NULL,
    -  y = NULL,
    -  type = "both",
    -  do.checks = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a numeric continuous -variable.

    - - -
    y
    -

    a character string specifying the name of a categorical -variable of class factor.

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -This can be set as: "combine", "split" or "both". -Default "both". -For more information see Details.

    - - -
    do.checks
    -

    logical. If TRUE the administrative checks -are undertaken to ensure that the input objects are defined in all studies and that the -variables are of equivalent class in each study. -Default is FALSE to save time.

    - - -
    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

    -

    ds.meanSdGp returns to the client-side the mean, SD, Nvalid and SEM combined -across studies and/or separately for each study, depending on the argument type.

    -
    -
    -

    Details

    -

    This function calculates the mean, standard deviation (SD), N (number of observations) -and the standard error of the mean (SEM) of a continuous variable broken down into subgroups -defined by a single factor.

    -

    There are important differences between ds.meanSdGp function compared to -the function ds.meanByClass:

    -

    (A) ds.meanSdGp does not actually subset the data it simply calculates the required statistics -and reports them. This means you cannot use this function if you wish to physically break the -data into subsets. On the other hand, it makes the function very much faster than ds.meanByClass -if you do not need to create physical subsets.
    -(B) ds.meanByClass allows you to specify up to -three categorising factors, but ds.meanSdGp only allows one. However, this is not a serious -problem. If you have two factors (e.g. sex with two levels [0,1] and BMI.categorical with -three levels [1,2,3]) you simply need to create a new factor that combines the two together in a -way that gives each combination of levels a different value in the new factor. So, in the -example given, the calculation newfactor = (3*sex) + BMI gives you six values:
    -(1) sex = 0 and BMI = 1 -> newfactor = 1
    -(2) sex = 0 and BMI = 2 -> newfactor = 2
    -(3) sex = 0 and BMI = 3 -> newfactor = 3
    -(4) sex = 1 and BMI = 1 -> newfactor = 4
    -(5) sex = 1 and BMI = 2 -> newfactor = 5
    -(6) sex = 1 and BMI = 3 -> newfactor = 6

    -

    (C) At present, ds.meanByClass calculates the sample size in each group to mean the -total sample size (i.e. it -includes all observations in each group regardless of whether or not they include missing values -for the continuous variable or the factor). The calculation of sample size in each group by -ds.meanSdGp always reports the number of observations that are non-missing both for the -continuous variable and the factor. This makes sense - in the case of ds.meanByClass, -the total size of the physical subsets was important, -but when it comes down only to ds.meanSdGp which -undertakes analysis without physical subsetting, it is only the observations with non-missing -values in both variables that contribute to the calculation of means and SDs within each group -and so it is logical to consider those counts as primary. The only reference ds.meanSdGp makes -to missing counts is in the reporting of Ntotal and Nmissing overall (ie not broken down by -group).

    -

    For the future, we plan to extend ds.meanByClass to report both total and non-missing -counts in subgroups.

    -

    Depending on the variable type can be carried out different analysis:
    -(1) "combine": a pooled table of results is generated.
    -(2) "split" a table of results is generated for each study.
    -(3) "both" both sets of outputs are produced.

    -

    Server function called: meanSdGpDS

    -
    -
    -

    See also

    -

    ds.subsetByClass to subset by the classes of factor vector(s).

    -

    ds.subset to subset by complete cases (i.e. removing missing values), threshold, -columns and rows.

    -
    -
    -

    Author

    -

    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 = "SURVIVAL.EXPAND_NO_MISSING1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -
    -
    -  #Example 1: Calculate the mean, SD, Nvalid and SEM of the continuous variable age.60 (age in
    -  #years centralised at 60), broken down by time.id (a six level factor relating to survival time)
    -  #and report the pooled results combined across studies.
    - 
    -  ds.meanSdGp(x = "D$age.60",
    -              y = "D$time.id",
    -              type = "combine",
    -              do.checks = FALSE,
    -              datasources = connections)
    -              
    -  #Example 2: Calculate the mean, SD, Nvalid and SEM of the continuous variable age.60 (age in
    -  #years centralised at 60), broken down by time.id (a six level factor relating to survival time)
    -  #and report both study-specific results and the pooled results combined across studies.
    -  #Save the returned output to msg.b.
    -  
    -  ds.meanSdGp(x = "D$age.60",
    -              y = "D$time.id",
    -              type = "both",
    -              do.checks = FALSE,
    -              datasources = connections)  
    -             
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.merge.html b/docs/reference/ds.merge.html deleted file mode 100644 index 87767638..00000000 --- a/docs/reference/ds.merge.html +++ /dev/null @@ -1,250 +0,0 @@ - -Merges two data frames in the server-side — ds.merge • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Merges (links) two data frames together based on common -values in defined vectors in each data frame.

    -
    - -
    -
    ds.merge(
    -  x.name = NULL,
    -  y.name = NULL,
    -  by.x.names = NULL,
    -  by.y.names = NULL,
    -  all.x = FALSE,
    -  all.y = FALSE,
    -  sort = TRUE,
    -  suffixes = c(".x", ".y"),
    -  no.dups = TRUE,
    -  incomparables = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string specifying the name of the -first data frame to be merged. The length of the string should be less than the -specified threshold for the nfilter.stringShort which is one of the disclosure -prevention checks in DataSHIELD.

    - - -
    y.name
    -

    a character string specifying the name of the -second data frame to be merged. The length of the string should be less than the -specified threshold for the nfilter.stringShort which is one of the disclosure -prevention checks in DataSHIELD.

    - - -
    by.x.names
    -

    a character string or a vector of names specifying -of the column(s) in data frame x.name for merging.

    - - -
    by.y.names
    -

    a character string or a vector of names specifying -of the column(s) in data frame y.name for merging.

    - - -
    all.x
    -

    logical. If TRUE then extra rows will be added to the output, -one for each row in x.name that has no matching row in y.name. -If FALSE the rows with data from both data frames are included in the output. -Default FALSE.

    - - -
    all.y
    -

    logical. If TRUE then extra rows will be added to the output, -one for each row in y.name that has no matching row in x.name. -If FALSE the rows with data from both data frames are included in the output. -Default FALSE.

    - - -
    sort
    -

    logical. If TRUE the merged result is sorted on elements -in the by.x.names and by.y.names columns. Default TRUE.

    - - -
    suffixes
    -

    a character vector of length 2 specifying the suffixes to be used for -making unique common column names in the two input data frames -when they both appear in the merged data frame.

    - - -
    no.dups
    -

    logical. Suffixes are appended in more cases to -avoid duplicated column names in the merged data frame. Default TRUE -(FALSE before R version 3.5.0).

    - - -
    incomparables
    -

    values that cannot be matched. This is intended to -be used for merging on -one column, so these are incomparable values of that column. -For more information see match in native R merge function.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default merge.newobj.

    - - -
    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

    -

    ds.merge returns the merged data frame that is written on the server-side. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is similar to the native R function merge. -There are some changes compared with the native R function -in choosing which variables to use to merge the data frames, the function merge -is very flexible. For example, you can choose to merge -using all vectors that appear in both data frames. However, for ds.merge -in DataSHIELD it is required that all the vectors which dictate the merging -are explicitly identified for both data frames using the by.x.names and -by.y.names arguments.

    -

    Server function called: mergeDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Create two data frames with a common column
    -  
    -  ds.dataFrame(x = c("D$LAB_TSC","D$LAB_TRIG","D$LAB_HDL","D$LAB_GLUC_ADJUSTED"),
    -               completeCases = TRUE,
    -               newobj = "df.x",
    -               datasources = connections)
    -               
    -  ds.dataFrame(x = c("D$LAB_TSC","D$GENDER","D$PM_BMI_CATEGORICAL","D$PM_BMI_CONTINUOUS"),
    -               completeCases = TRUE,
    -               newobj = "df.y",
    -               datasources = connections) 
    -               
    -  # Merge data frames using the common variable "LAB_TSC"
    -               
    -  ds.merge(x.name = "df.x",
    -           y.name = "df.y",
    -           by.x.names = "df.x$LAB_TSC",
    -           by.y.names = "df.y$LAB_TSC",
    -           all.x = TRUE,
    -           all.y = TRUE,
    -           sort = TRUE,
    -           suffixes = c(".x", ".y"),
    -           no.dups = TRUE,
    -           newobj = "df.merge",
    -           datasources = connections)              
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.message.html b/docs/reference/ds.message.html deleted file mode 100644 index 7c94b88e..00000000 --- a/docs/reference/ds.message.html +++ /dev/null @@ -1,162 +0,0 @@ - -Returns server-side messages to the client-side — ds.message • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function allows for error messages arising from the -running of a server-side assign function to be returned to the client-side.

    -
    - -
    -
    ds.message(message.obj.name = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    message.obj.name
    -

    is a character string specifying the name of the list that -contains the message.

    - - -
    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

    -

    ds.message returns a list object from each study, -containing the message that has been written by -DataSHIELD into $studysideMessage.

    -
    -
    -

    Details

    -

    Errors arising from aggregate server-side functions can be returned -directly to the client-side. But this is not possible for server-side assign -functions because they are designed specifically to write objects to the -server-side and to return no meaningful information to the client-side. -Otherwise, users may be able to use assign functions to return disclosive -output to the client-side.

    -

    Server-side functions from which error messages are to be made -available are designed to be able to write the designated error message to -the $serversideMessage object into the list that is saved on the server-side -as the primary output of that function. So only valid server-side functions of -DataSHIELD can write a $studysideMessage. The error message is a string that -cannot exceed a length of nfilter.string a default of 80 characters.

    -

    Server function called: messageDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Use a ds.asCharacter assign function to create the message in the server-side
    -  
    -  ds.asCharacter(x.name = "D$LAB_TRIG", 
    -                 newobj = "vector1",
    -                 datasources = connections)
    -                 
    -  #Return the message to the client-side
    -  
    -  ds.message(message.obj.name = "vector1",
    -             datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.metadata.html b/docs/reference/ds.metadata.html deleted file mode 100644 index 0d807090..00000000 --- a/docs/reference/ds.metadata.html +++ /dev/null @@ -1,140 +0,0 @@ - -Gets the metadata associated with a variable held on the server — ds.metadata • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function gets the metadata of a variable -stored on the server.

    -
    - -
    -
    ds.metadata(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of the object.

    - - -
    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

    -

    ds.metadata returns to the client-side the metadata of associated to an object -held at the server.

    -
    -
    -

    Details

    -

    Server function metadataDS is called examines the attributes associated with the variable -which are non-disclosive.

    -
    -
    -

    Author

    -

    Stuart Wheater, DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # 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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Example 1: Get the metadata associated with variable 'D'
    -  ds.metadata(x = 'D$LAB_TSC', datasources = connections)
    -
    -  # clear the Datashield R sessions and logout
    -  DSI::datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.mice.html b/docs/reference/ds.mice.html deleted file mode 100644 index 871cd3c2..00000000 --- a/docs/reference/ds.mice.html +++ /dev/null @@ -1,178 +0,0 @@ - -Multivariate Imputation by Chained Equations — ds.mice • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calls the miceDS that is a wrapper function of the mice -from the mice R package. The function creates multiple imputations (replacement values) -for multivariate missing data. The method is based on Fully Conditional Specification, -where each incomplete variable is imputed by a separate model. The MICE algorithm can -impute mixes of continuous, binary, unordered categorical and ordered categorical data. -In addition, MICE can impute continuous two-level data, and maintain consistency between -imputations by means of passive imputation. It is recommended that the imputation is -done in each datasource separately. Otherwise the user should make sure that the input -data have the same columns in all datasources and in the same order.

    -
    - -
    -
    ds.mice(
    -  data = NULL,
    -  m = 5,
    -  maxit = 5,
    -  method = NULL,
    -  predictorMatrix = NULL,
    -  post = NULL,
    -  seed = NA,
    -  newobj_mids = NULL,
    -  newobj_df = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    data
    -

    a data frame or a matrix containing the incomplete data.

    - - -
    m
    -

    Number of multiple imputations. The default is m=5.

    - - -
    maxit
    -

    A scalar giving the number of iterations. The default is 5.

    - - -
    method
    -

    Can be either a single string, or a vector of strings with length -ncol(data), specifying the imputation method to be used for each column in data. If -specified as a single string, the same method will be used for all blocks. The default -imputation method (when no argument is specified) depends on the measurement level of -the target column, as regulated by the defaultMethod argument in native R mice function. -Columns that need not be imputed have the empty method "".

    - - -
    predictorMatrix
    -

    A numeric matrix of ncol(data) rows and ncol(data) columns, -containing 0/1 data specifying the set of predictors to be used for each target column. -Each row corresponds to a variable to be imputed. A value of 1 means that the column -variable is used as a predictor for the target variables (in the rows). By default, the -predictorMatrix is a square matrix of ncol(data) rows and columns with all 1's, except -for the diagonal.

    - - -
    post
    -

    A vector of strings with length ncol(data) specifying expressions as strings. -Each string is parsed and executed within the sampler() function to post-process imputed -values during the iterations. The default is a vector of empty strings, indicating no -post-processing. Multivariate (block) imputation methods ignore the post parameter.

    - - -
    seed
    -

    either NA (default) or "fixed". If seed is set to "fixed" then a fixed -seed random number generator which is study-specific is used.

    - - -
    newobj_mids
    -

    a character string that provides the name for the output mids object -that is stored on the data servers. Default mids_object.

    - - -
    newobj_df
    -

    a character string that provides the name for the output dataframes -that are stored on the data servers. Default imputationSet. For example, if m=5, and -newobj_df="imputationSet", then five imputed dataframes are saved on the servers with names -imputationSet.1, imputationSet.2, imputationSet.3, imputationSet.4, imputationSet.5.

    - - -
    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

    -

    a list with three elements: the method, the predictorMatrix and the post.

    -
    -
    -

    Details

    -

    For additional details see the help header of mice function in native R mice -package.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.names.html b/docs/reference/ds.names.html deleted file mode 100644 index 69c83c36..00000000 --- a/docs/reference/ds.names.html +++ /dev/null @@ -1,160 +0,0 @@ - -Return the names of a list object — ds.names • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Returns the names of a designated server-side list

    -
    - -
    -
    ds.names(xname = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    xname
    -

    a character string specifying the name of the list.

    - - -
    datasources
    -

    a list of DSConnection-class -objects obtained after login that represent the particular data sources -(studies) to be addressed by the function call. If the datasources -argument is not specified the default set of connections will be used: -see datashield.connections_default.

    - -
    -
    -

    Value

    -

    ds.names returns to the client-side the names -of a list object stored on the server-side.

    -
    -
    -

    Details

    -

    ds.names calls aggregate function namesDS. This function is similar to -the native R function names but it does not subsume all functionality, -for example, it only works to extract names that already exist, -not to create new names for objects. The function is restricted to objects of -type list, but this includes objects that have a primary class other than list but which -return TRUE to the native R function is.list. As an example this includes -the multi-component object created by fitting a generalized linear model -using ds.glmSLMA. The resultant object saved on each server separately -is formally of class "glm" and "ls" but responds TRUE to is.list(),

    -
    -
    -

    Author

    -

    Amadou Gaye, updated by Paul Burton for DataSHIELD development -team 25/06/2020

    -
    - -
    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/",
    -                 user = "administrator", password = "datashield_test&",
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    - 
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D")
    - 
    -  #Create a list in the server-side
    - 
    -  ds.asList(x.name = "D",
    -            newobj = "D.list",
    -            datasources = connections)
    -           
    -  #Get the names of the list
    - 
    -  ds.names(xname = "D.list",
    -           datasources = connections)
    - 
    - 
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.ns.html b/docs/reference/ds.ns.html deleted file mode 100644 index 4cb30d13..00000000 --- a/docs/reference/ds.ns.html +++ /dev/null @@ -1,147 +0,0 @@ - -Generate a Basis Matrix for Natural Cubic Splines — ds.ns • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function is based on the native R function ns from the -splines package. This function generate the B-spline basis matrix for a natural -cubic spline.

    -
    - -
    -
    ds.ns(
    -  x,
    -  df = NULL,
    -  knots = NULL,
    -  intercept = FALSE,
    -  Boundary.knots = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    the predictor variable. Missing values are allowed.

    - - -
    df
    -

    degrees of freedom. One can supply df rather than knots; ns() then chooses -df - 1 - intercept knots at suitably chosen quantiles of x (which will ignore missing values). -The default, df = NULL, sets the number of inner knots as length(knots).

    - - -
    knots
    -

    breakpoints that define the spline. The default is no knots; together with the -natural boundary conditions this results in a basis for linear regression on x. Typical values -are the mean or median for one knot, quantiles for more knots. See also Boundary.knots.

    - - -
    intercept
    -

    if TRUE, an intercept is included in the basis; default is FALSE.

    - - -
    Boundary.knots
    -

    boundary points at which to impose the natural boundary conditions and -anchor the B-spline basis (default the range of the data). If both knots and Boundary.knots -are supplied, the basis parameters do not depend on x. Data can extend beyond Boundary.knots.

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default ns.newobj.

    - - -
    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

    -

    A matrix of dimension length(x) * df where either df was supplied or if knots were -supplied, df = length(knots) + 1 + intercept. Attributes are returned that correspond to the -arguments to ns, and explicitly give the knots, Boundary.knots etc for use by predict.ns(). -The object is assigned at each serverside.

    -
    -
    -

    Details

    -

    ns is native R is based on the function splineDesign. It generates -a basis matrix for representing the family of piecewise-cubic splines with the specified -sequence of interior knots, and the natural boundary conditions. These enforce the constraint -that the function is linear beyond the boundary knots, which can either be supplied or default -to the extremes of the data. -A primary use is in modeling formula to directly specify a natural spline term in a model.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.numNA.html b/docs/reference/ds.numNA.html deleted file mode 100644 index 2bb4270f..00000000 --- a/docs/reference/ds.numNA.html +++ /dev/null @@ -1,145 +0,0 @@ - -Gets the number of missing values in a server-side vector — ds.numNA • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function helps to know the number of missing values -in a vector that is stored on the server-side.

    -
    - -
    -
    ds.numNA(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of the vector.

    - - -
    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

    -

    ds.numNA returns to the client-side the number of missing values -on a server-side vector.

    -
    -
    -

    Details

    -

    The number of missing entries are counted and the total for each study is returned.

    -

    Server function called: numNaDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Get the number of missing values on a server-side vector 
    -  
    -  ds.numNA(x = "D$LAB_TSC",
    -           datasources = connections)
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.qlspline.html b/docs/reference/ds.qlspline.html deleted file mode 100644 index d1a702dd..00000000 --- a/docs/reference/ds.qlspline.html +++ /dev/null @@ -1,146 +0,0 @@ - -Basis for a piecewise linear spline with meaningful coefficients — ds.qlspline • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function is based on the native R function qlspline from the -lspline package. This function computes the basis of piecewise-linear spline -such that, depending on the argument marginal, the coefficients can be interpreted as -(1) slopes of consecutive spline segments, or (2) slope change at consecutive knots.

    -
    - -
    -
    ds.qlspline(
    -  x,
    -  q,
    -  na.rm = TRUE,
    -  marginal = FALSE,
    -  names = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    the name of the input numeric variable

    - - -
    q
    -

    numeric, a single scalar greater or equal to 2 for a number of equal-frequency -intervals along x or a vector of numbers in (0; 1) specifying the quantiles explicitly.

    - - -
    na.rm
    -

    logical, whether NA should be removed when calculating quantiles, passed -to na.rm of quantile. Default set to TRUE

    - - -
    marginal
    -

    logical, how to parametrize the spline, see Details

    - - -
    names
    -

    character, vector of names for constructed variables

    - - -
    newobj
    -

    a character string that provides the name for the output -variable that is stored on the data servers. Default qlspline.newobj.

    - - -
    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

    -

    an object of class "lspline" and "matrix", which its name is specified by the -newobj argument (or its default name "qlspline.newobj"), is assigned on the serverside.

    -
    -
    -

    Details

    -

    If marginal is FALSE (default) the coefficients of the spline correspond to -slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -the slope of the first segment. The consecutive coefficients correspond to the change -in slope as compared to the previous segment. -Function qlspline wraps lspline and calculates the knot positions to be at quantiles -of x. If q is a numerical scalar greater or equal to 2, the quantiles are computed at -seq(0, 1, length.out = q + 1)[-c(1, q+1)], i.e. knots are at q-tiles of the distribution -of x. Alternatively, q can be a vector of values in [0; 1] specifying the quantile -probabilities directly (the vector is passed to argument probs of quantile).

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.quantileMean.html b/docs/reference/ds.quantileMean.html deleted file mode 100644 index bcc80bc5..00000000 --- a/docs/reference/ds.quantileMean.html +++ /dev/null @@ -1,164 +0,0 @@ - -Computes the quantiles of a server-side variable — ds.quantileMean • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the mean and quantile values of a -server-side quantitative variable.

    -
    - -
    -
    ds.quantileMean(x = NULL, type = "combine", datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of the numeric vector.

    - - -
    type
    -

    a character that represents the type of graph to display. -This can be set as 'combine' or 'split'. -For more information see Details.

    - - -
    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

    -

    ds.quantileMean returns to the client-side the quantiles and statistical mean -of a server-side numeric vector.

    -
    -
    -

    Details

    -

    This function does not return the minimum and maximum values -because they are potentially disclosive.

    -

    Depending on the argument type can be carried out two types of analysis:
    -(1) type = 'combine' pooled values are displayed
    -(2) type = 'split' summaries are -returned for each study.

    -

    Server functions called: quantileMeanDS, length and numNaDS

    -
    -
    -

    See also

    -

    ds.mean to compute the statistical mean.

    -

    ds.summary to generate the summary of a variable.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Get the quantiles and mean of a server-side variable
    -  
    -  ds.quantileMean(x = "D$LAB_TRIG",
    -                  type = "combine",
    -                  datasources = connections)
    -  
    -  
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rBinom.html b/docs/reference/ds.rBinom.html deleted file mode 100644 index 63e174a8..00000000 --- a/docs/reference/ds.rBinom.html +++ /dev/null @@ -1,216 +0,0 @@ - -Generates Binomial distribution in the server-side — ds.rBinom • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Generates random (pseudorandom) non-negative integers from a Binomial distribution. -Also, ds.rBinom allows creating different vector lengths in each server.

    -
    - -
    -
    ds.rBinom(
    -  samp.size = 1,
    -  size = 0,
    -  prob = 1,
    -  newobj = NULL,
    -  seed.as.integer = NULL,
    -  return.full.seed.as.set = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    samp.size
    -

    an integer value or an integer vector that defines the length of -the random numeric vector to be created in each source.

    - - -
    size
    -

    a positive integer that specifies the number of Bernoulli trials.

    - - -
    prob
    -

    a numeric scalar value or vector in range 0 > prob > 1 which specifies the -probability of a positive response (i.e. 1 rather than 0).

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default rbinom.newobj.

    - - -
    seed.as.integer
    -

    an integer or a NULL value which provides the -random seed in each data source.

    - - -
    return.full.seed.as.set
    -

    logical, if TRUE will return the full random number seed -in each data source (a numeric vector of length 626). If FALSE it will only return the -trigger seed value you have provided. Default is FALSE.

    - - -
    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

    -

    ds.rBinom returns random number vectors -with a Binomial distribution for each study, -taking into account the values specified in each parameter of the function. -The output vector is written to the server-side. -If requested, it also returned to the client-side the full 626 lengths -random seed vector generated in each source -(see info for the argument return.full.seed.as.set).

    -
    -
    -

    Details

    -

    Creates a vector of random or pseudorandom non-negative integer values -distributed with a Binomial distribution. The ds.rBinom function's arguments specify -the number of trials, the success probability, the length and the seed of the output -vector in each source.

    -

    To specify a different size in each source, you can use a character vector -(..., size="vector.of.sizes"...) -or the datasources parameter to create the random vector for one source at a time, -changing size as required. -The default value for size = 1 which simulates binary outcomes (all observations 0 or 1).

    -

    To specify different prob in each source, you can use an integer or character vector -(..., prob="vector.of.probs"...) or the datasources parameter to create the random -vector for one source at a time, changing prob as required.

    -

    If seed.as.integer is an integer -e.g. 5 and there is more than one source (N) the seed is set as 5*N. -For example, in the first study the seed is set as 938*1, -in the second as 938*2 -up to 938*N in the Nth study.

    -

    If seed.as.integer is set as 0 all sources will start with the seed value -0 and all the random number generators will, therefore, start from the same position. -Besides, to use the same starting seed in all studies but do not wish it to -be 0, you can use datasources argument to generate the random number -vectors one source at a time.

    -

    Server functions called: rBinomDS and setSeedDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  #Generating the vectors in the Opal servers
    -  ds.rBinom(samp.size=c(13,20,25), #the length of the vector created in each source is different
    -  size=as.character(c(10,23,5)),   #Bernoulli trials change in each source 
    -  prob=c(0.6,0.1,0.5), #Probability  changes in each source 
    -  newobj="Binom.dist", 
    -  seed.as.integer=45, 
    -  return.full.seed.as.set=FALSE,
    -  datasources=connections)   #all the Opal servers are used, in this case 3 
    -                             #(see above the connection to the servers) 
    -
    -  ds.rBinom(samp.size=15,    
    -            size=4,          
    -            prob=0.7, 
    -            newobj="Binom.dist", 
    -            seed.as.integer=324, 
    -            return.full.seed.as.set=FALSE, 
    -            datasources=connections[2]) #only the second  Opal server is used ("study2")
    -            
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rNorm.html b/docs/reference/ds.rNorm.html deleted file mode 100644 index 164ac708..00000000 --- a/docs/reference/ds.rNorm.html +++ /dev/null @@ -1,231 +0,0 @@ - -Generates Normal distribution in the server-side — ds.rNorm • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Generates normally distributed random (pseudorandom) scalar numbers. -Besides, ds.rNorm allows creating different vector lengths in each server.

    -
    - -
    -
    ds.rNorm(
    -  samp.size = 1,
    -  mean = 0,
    -  sd = 1,
    -  newobj = "newObject",
    -  seed.as.integer = NULL,
    -  return.full.seed.as.set = FALSE,
    -  force.output.to.k.decimal.places = 9,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    samp.size
    -

    an integer value or an integer vector that defines the length -of the random numeric vector to be created in each source.

    - - -
    mean
    -

    the mean value or vector of the Normal distribution to be created.

    - - -
    sd
    -

    the standard deviation of the Normal distribution to be created.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default newObject.

    - - -
    seed.as.integer
    -

    an integer -or a NULL value which provides the random seed in each data source.

    - - -
    return.full.seed.as.set
    -

    logical, if TRUE will returns the full random number -seed in each data source (a numeric vector of length 626). -If FALSE it will only return the trigger seed value you have provided. -Default is FALSE.

    - - -
    force.output.to.k.decimal.places
    -

    an integer vector that -forces the output random numbers vector to have k decimals.

    - - -
    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

    -

    ds.rNorm returns random number vectors with a normal distribution for each -study, taking into account the values specified in each parameter of the function. -The output vector is written to the server-side. -If requested, it also returned to the client-side the full 626 lengths random seed vector -generated in each source (see info for the argument return.full.seed.as.set).

    -
    -
    -

    Details

    -

    Creates a vector of pseudorandom numbers distributed -with a Normal distribution in each data source. -The ds.rNorm function's arguments specify the mean and the standard deviation -(sd) of the normal distribution and -the length and the seed of the output vector in each source.

    -

    To specify a different mean value in each source, -you can use a character vector (..., mean="vector.of.means"...) -or the datasources parameter to create the random vector for one source at a time, -changing the mean as required. -Default value for mean = 0.

    -

    To specify different sd value in each source, -you can use a character vector (..., sd="vector.of.sds"... -or the datasources parameter to create the random vector for one source at a time, -changing the <mean> as required. -Default value for sd = 0.

    -

    If seed.as.integer is an integer -e.g. 5 and there is more than one source (N) the seed is set as 5*N. -For example, in the first study the seed is set as 938*1, -in the second as 938*2 -up to 938*N in the Nth study.

    -

    If seed.as.integer is set as 0 all sources will start with the seed value -0 and all the random number generators will, therefore, start from the same position. -Also, to use the same starting seed in all studies but do not wish it to -be 0, you can use datasources argument to generate the random number -vectors one source at a time.

    -

    In force.output.to.k.decimal.places the range of k is 1-8 decimals. -If k = 0 the output random numbers are forced to integer. -If k = 9, no rounding of output numbers occurs. -The default value of force.output.to.k.decimal.places = 9.

    -

    Server functions called: rNormDS and setSeedDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Generating the vectors in the Opal servers
    -
    -  ds.rNorm(samp.size=c(10,20,45), #the length of the vector created in each source is different 
    -           mean=c(1,6,4),         #the mean of the Normal distribution changes in each server
    -           sd=as.character(c(1,4,3)), #the sd of the Normal distribution changes in each server
    -           newobj="Norm.dist",
    -           seed.as.integer=2345, 
    -           return.full.seed.as.set=FALSE,
    -           force.output.to.k.decimal.places=c(4,5,6), #output random numbers have different 
    -                                                      #decimal quantity in each source 
    -           datasources=connections) #all the Opal servers are used, in this case 3 
    -                                    #(see above the connection to the servers) 
    -  
    -  ds.rNorm(samp.size=10,
    -           mean=1.4,
    -           sd=0.2, 
    -           newobj="Norm.dist", 
    -           seed.as.integer=2345,
    -           return.full.seed.as.set=FALSE,
    -           force.output.to.k.decimal.places=1,
    -           datasources=connections[2]) #only the second  Opal server is used ("study2")
    -           
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rPois.html b/docs/reference/ds.rPois.html deleted file mode 100644 index aaacd484..00000000 --- a/docs/reference/ds.rPois.html +++ /dev/null @@ -1,206 +0,0 @@ - -Generates Poisson distribution in the server-side — ds.rPois • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Generates random (pseudorandom) non-negative integers -with a Poisson distribution. -Besides, ds.rPois allows creating different vector lengths in each server.

    -
    - -
    -
    ds.rPois(
    -  samp.size = 1,
    -  lambda = 1,
    -  newobj = "newObject",
    -  seed.as.integer = NULL,
    -  return.full.seed.as.set = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    samp.size
    -

    an integer value or an integer vector that defines the length of the -random numeric vector to be created in each source.

    - - -
    lambda
    -

    the number of events mean per interval.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default newObject.

    - - -
    seed.as.integer
    -

    an integer or a NULL value which provides the random seed -in each data source.

    - - -
    return.full.seed.as.set
    -

    logical, if TRUE will return the full -random number seed in each data source (a numeric vector of length 626). If -FALSE it will only return the trigger seed value you have provided. -Default is FALSE.

    - - -
    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

    -

    ds.rPois returns random number vectors with a Poisson distribution for each study, -taking into account the values specified in each parameter of the function. -The created vectors are stored in the server-side. -If requested, it also returned to the client-side the full -626 lengths random seed vector generated in each source - (see info for the argument return.full.seed.as.set).

    -
    -
    -

    Details

    -

    Creates a vector of random or pseudorandom non-negative integer values -distributed with a Poisson distribution in each data source. -The ds.rPois function's arguments specify lambda, -the length and the seed of the output vector in each source.

    -

    To specify different lambda value in each source, you can use a character vector -(..., lambda = "vector.of.lambdas"...) or the datasources -parameter to create the random vector for one source at a time, -changing lambda as required. -Default value for lambda> = 1.

    -

    If seed.as.integer is an integer -e.g. 5 and there is more than one source (N) the seed is set as 5*N. -For example, in the first study the seed is set as 938*1, -in the second as 938*2 -up to 938*N in the Nth study.

    -

    If seed.as.integer is set as 0 all sources will start with the seed value -0 and all the random number generators will, therefore, start from the same position. -Also, to use the same starting seed in all studies but do not wish it to -be 0, you can use datasources argument to generate the random number -vectors one source at a time.

    -

    Server functions called: rPoisDS and setSeedDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Generating the vectors in the Opal servers
    -  ds.rPois(samp.size=c(13,20,25), #the length of the vector created in each source is different
    -          lambda=as.character(c(2,3,4)), #different mean per interval (2,3,4) in each source
    -          newobj="Pois.dist",                   
    -          seed.as.integer=1234,         
    -          return.full.seed.as.set=FALSE, 
    -          datasources=connections)  #all the Opal servers are used, in this case 3 
    -                                    #(see above the connection to the servers) 
    -  ds.rPois(samp.size=13,                
    -          lambda=5,
    -          newobj="Pois.dist", 
    -          seed.as.integer=1234, 
    -          return.full.seed.as.set=FALSE, 
    -          datasources=connections[1])  #only the first Opal server is used ("study1")
    -        
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rUnif.html b/docs/reference/ds.rUnif.html deleted file mode 100644 index a9c582ce..00000000 --- a/docs/reference/ds.rUnif.html +++ /dev/null @@ -1,237 +0,0 @@ - -Generates Uniform distribution in the server-side — ds.rUnif • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Generates uniformly distributed random (pseudorandom) scalar numbers. -Besides, ds.rUnif allows creating different vector lengths in each server.

    -
    - -
    -
    ds.rUnif(
    -  samp.size = 1,
    -  min = 0,
    -  max = 1,
    -  newobj = "newObject",
    -  seed.as.integer = NULL,
    -  return.full.seed.as.set = FALSE,
    -  force.output.to.k.decimal.places = 9,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    samp.size
    -

    an integer value or an integer vector that defines the -length of the random numeric vector to be created in each source.

    - - -
    min
    -

    a numeric scalar that specifies the minimum value of the -random numbers in the distribution.

    - - -
    max
    -

    a numeric scalar that specifies the maximum value of the -random numbers in the distribution.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default newObject.

    - - -
    seed.as.integer
    -

    an integer or a NULL value which provides the random -seed in each data source.

    - - -
    return.full.seed.as.set
    -

    logical, if TRUE will return the full random number -seed in each data source (a numeric vector of length 626). If FALSE it will only -return the trigger seed value you have provided. Default is FALSE.

    - - -
    force.output.to.k.decimal.places
    -

    an integer or -an integer vector that forces the output random -numbers vector to have k decimals.

    - - -
    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

    -

    ds.Unif returns random number vectors with a uniform distribution for each study, -taking into account the values specified in each parameter of the function. -The created vectors are stored in the server-side. If requested, it also returned to the -client-side the full 626 lengths random seed vector generated in each source -(see info for the argument return.full.seed.as.set).

    -
    -
    -

    Details

    -

    It creates a vector of pseudorandom numbers distributed -with a uniform probability in each data source. -The ds.Unif function's arguments specify -the minimum and maximum of the uniform distribution -and the length and the seed of the output vector in each source.

    -

    To specify different min values in each source, -you can use a character vector (..., min="vector.of.mins"...) -or the datasources parameter to create the random vector for one source at a time, -changing the min value as required. -Default value for min = 0.

    -

    To specify different max values in each source, -you can use a character vector (..., max="vector.of.maxs"...) -or the datasources parameter to create the random vector for one source at a time, -changing the max value as required. -Default value for max = 1.

    -

    If seed.as.integer is an integer -e.g. 5 and there is more than one source (N) the seed is set as 5*N. -For example, in the first study the seed is set as 938*1, -in the second as 938*2 -up to 938*N in the Nth study.

    -

    If seed.as.integer is set as 0 all sources will start with the seed value -0 and all the random number generators will, therefore, start from the same position. -Also, to use the same starting seed in all studies but do not wish it to -be 0, you can use datasources argument to generate -the random number vectors one source at a time.

    -

    In force.output.to.k.decimal.places the range of k is 1-8 decimals. -If k = 0 the output random numbers are forced to an integer. -If k = 9, no rounding of output numbers occurs. -The default value of force.output.to.k.decimal.places = 9. -If you wish to generate integers with equal probabilities in the range 1-10 -you should specify min = 0.5 and max = 10.5. -Default value for k = 9.

    -

    Server functions called: rUnifDS and setSeedDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  # Generating the vectors in the Opal servers
    -
    -  ds.rUnif(samp.size = c(12,20,4), #the length of the vector created in each source is different 
    -           min = as.character(c(0,2,5)), #different minumum value of the function in each source
    -           max = as.character(c(2,5,9)), #different maximum value of the function in each source
    -           newobj = "Unif.dist",
    -           seed.as.integer = 234,
    -           return.full.seed.as.set = FALSE,
    -           force.output.to.k.decimal.places = c(1,2,3),
    -           datasources = connections)   #all the Opal servers are used, in this case 3 
    -                                        #(see above the connection to the servers) 
    -
    -  ds.rUnif(samp.size = 12,
    -           min = 0,
    -           max = 2,
    -           newobj = "Unif.dist",
    -           seed.as.integer = 12345,
    -           return.full.seed.as.set = FALSE,
    -           force.output.to.k.decimal.places = 2,
    -           datasources = connections[2]) #only the second  Opal server is used ("study2")
    -           
    -  # Clear the Datashield R sessions and logout           
    -  datashield.logout(connections)
    -} # }
    - 
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.ranksSecure.html b/docs/reference/ds.ranksSecure.html deleted file mode 100644 index f29d764c..00000000 --- a/docs/reference/ds.ranksSecure.html +++ /dev/null @@ -1,296 +0,0 @@ - -Secure ranking of a vector across all sources — ds.ranksSecure • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Securely generate the ranks of a numeric vector and estimate -true qlobal quantiles across all data sources simultaneously

    -
    - -
    -
    ds.ranksSecure(
    -  input.var.name = NULL,
    -  quantiles.for.estimation = "0.05-0.95",
    -  generate.quantiles = TRUE,
    -  output.ranks.df = NULL,
    -  summary.output.ranks.df = NULL,
    -  ranks.sort.by = "ID.orig",
    -  shared.seed.value = 10,
    -  synth.real.ratio = 2,
    -  NA.manage = "NA.delete",
    -  rm.residual.objects = TRUE,
    -  monitor.progress = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    input.var.name
    -

    a character string in a format that can pass through -the DataSHIELD R parser which specifies the name of the vector to be ranked. -Needs to have same name in each data source.

    - - -
    quantiles.for.estimation
    -

    one of a restricted set of character strings. -To mitigate disclosure risk only the following set of quantiles can be -generated: c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50,0.60,0.6667, -0.70,0.75,0.80,0.90,0.95,0.975). The allowable formats for the argument -are of the general form: "0.025-0.975" where the first number is the lowest -quantile to be estimated and the second number is the equivalent highest -quantile to estimate. These two quantiles are then estimated along with -all allowable quantiles in between. The allowable argument values are then: -"0.025-0.975", "0.05-0.95", "0.10-0.90", "0.20-0.80". Two alternative values -are "quartiles" i.e. c(0.25,0.50,0.75), and "median" i.e. c(0.50). The -default value is "0.05-0.95". If the sample size is so small that an extreme -quartile could be disclosive the function will be terminated and an error -message returned telling you that you might try using an argument with a -narrower set of quantiles. This disclosure trap will be triggered if the -total number of subjects across all studies divided by the total number -of quantile values being estimated is less than or equal to nfilter.tab -(the minimum cell size in a contingency table).

    - - -
    generate.quantiles
    -

    a logical value indicating whether the -ds.ranksSecure function should carry on to estimate the key quantile -values specified by argument <quantiles.for.estimation> or should stop -once the global ranks have been created and written to the serverside. -Default is TRUE and as the key quantiles are generally non-disclosive this -is usually the setting to use. But, if there is some abnormal configuration -of the clusters of values that are being ranked such that some values are -treated as being missing and the processing stops, then setting -generate.quantiles to FALSE allows the generation of ranks to complete so -they can then be used for non-parameteric analysis, even if the key values -cannot be estimated. A real example of an unusual configuration was in a -reasonably large dataset of survival times, where a substantial proportion -of survival profiles were censored at precisely 10 years. This meant that -the 97.5 -the former was allocated the value NA. This stopped processing of the ranks -which could then be enabled by setting generate.quantiles to FALSE. However, -if this problem is detected an error message is returned which indicates that -in some cases (as in this case in fact) the problem can be circumvented -by selecting a narrow range of key quantiles to estimate. In this case, in -fact, this simply required changing the <quantiles.for.estimation> argument -from "0.025-0.975" to "0.05-0.95".

    - - -
    output.ranks.df
    -

    a character string in a format that can pass through -the DataSHIELD R parser which specifies an optional name for the -data.frame written to the serverside on each data source that contains -11 of the key output variables from the ranking procedure pertaining to that -particular data source. This includes the global ranks and quantiles of each -value of the V2BR (i.e. the values are ranked across all studies -simultaneously). If no name is specified, the default name -is allocated as "full.ranks.df". This data.frame contains disclosive -information and cannot therefore be passed to the clientside.

    - - -
    summary.output.ranks.df
    -

    a character string in a format that can pass through -the DataSHIELD R parser which specifies an optional name for the summary -data.frame written to the serverside on each data source that contains -5 of the key output variables from the ranking procedure pertaining to that -particular data source. This again includes the global ranks and quantiles of each -value of the V2BR (i.e. the values are ranked across all studies -simultaneously). If no name is specified, the default name -is allocated as "summary.ranks.df" This data.frame contains disclosive -information and cannot therefore be passed to the clientside.

    - - -
    ranks.sort.by
    -

    a character string taking two possible values. These -are "ID.orig" and "vals.orig". These define the order in which the -output.ranks.df and summary.output.ranks.df data frames are presented. If -the argument is set as "ID.orig" the order of rows in the output data frames -are precisely the same as the order of original input vector that is being -ranked (i.e. V2BR). This means the ranks can simply be cbinded to the -matrix, data frame or tibble that originally included V2BR so it also -includes the corresponding ranks. If it is set as "vals.orig" the output -data frames are in order of increasing magnitude of the original values of -V2BR. Default value is "ID.orig".

    - - -
    shared.seed.value
    -

    an integer value which is used to set the -random seed generator in each study. Initially, the seed is set to be the -same in all studies, so the order and parameters of the repeated -encryption procedures are precisely the same in each study. Then a -study-specific modification of the seed in each study ensures that the -procedures initially generating the masking pseudodata (which are then -subject to the same encryption procedures as the real data) are different -in each study. For further information about the shared seed and how we -intend to transmit it in the future, please see the detailed associated -header document.

    - - -
    synth.real.ratio
    -

    an integer value specifying the ratio between the -number of masking pseudodata values generated in each study compared to -the number of real data values in V2BR.

    - - -
    NA.manage
    -

    character string taking three possible values: "NA.delete", -"NA.low","NA.hi". This argument determines how missing values are managed -before ranking. "NA.delete" results in all missing values being removed -prior to ranking. This means that the vector of ranks in each study is -shorter than the original vector of V2BR values by an amount corresponding -to the number of missing values in V2BR in that study. Any rows containing -missing values in V2BR are simply removed before the ranking procedure is -initiated so the order of rows without missing data is unaltered. "NA.low" -indicates that all missing values should be converted to a new value that -has a meaningful magnitude that is lower (more negative or less positive) -than the lowest non-missing value of V2BR in any of the studies. This means, -for example, that if there are a total of M values of V2BR that are missing -across all studies, there will be a total of M observations that are ranked -lowest each with a rank of (M+1)/2. So if 7 are missing the lowest 7 ranks -will be 4,4,4,4,4,4,4 and if 4 are missing the first 4 ranks will be -2.5,2.5,2.5,2.5. "NA.hi" indicates that all missing values should be -converted to a new value that has a meaningful magnitude that is higher(less -negative or more positive)than the highest non-missing value of V2BR in any -of the studies. This means, for example, that if there are a total of M -values of V2BR that are missing across all studies and N non-missing -values, there will be a total of M observations that are ranked -highest each with a rank of (2N-M+1)/2. So if there are a total of 1000 -V2BR values and 9 are missing the highest 9 ranks will be 996, 996 ... 996. -If NA.manage is either "NA.low" or "NA.hi" the final rank vector in each -study will have the same length as the V2BR vector in that same study. -2.5,2.5,2.5,2.5. The default value of the "NA.manage" argument is "NA.delete"

    - - -
    rm.residual.objects
    -

    logical value. Default = TRUE: at the beginning -and end of each run of ds.ranksSecure delete all extraneous objects that are -otherwise left behind. These are not usually needed, but could be of value -if one were investigating a problem with the ranking. FALSE: do not delete -the residual objects

    - - -
    monitor.progress
    -

    logical value. Default = FALSE. If TRUE, function -outputs information about its progress.

    - - -
    datasources
    -

    specifies the particular opal object(s) to use. If the -<datasources> argument is not specified (NULL) the default set of opals -will be used. If <datasources> is specified, it should be set without -inverted commas: e.g. datasources=opals.em. If you wish to -apply the function solely to e.g. the second opal server in a set of three, -the argument can be specified as: e.g. datasources=opals.em[2]. -If you wish to specify the first and third opal servers in a set you specify: -e.g. datasources=opals.em[c(1,3)].

    - -
    -
    -

    Value

    -

    the data frame objects specified by the arguments output.ranks.df -and summary.output.ranks.df. These are written to the serverside in each -study. Provided the sort order is consistent these data frames can be cbinded -to any other data frame, matrix or tibble object containing V2BR or to the -V2BR vector itself, allowing the global ranks and quantiles to be -analysed rather than the actual values of V2BR. The last call within -the ds.ranksSecure function is to another clientside function -ds.extractQuantile (for further details see header for that function). -This returns an additional data frame "final.quantile.df" of which the first -column is the vector of key quantiles to be estimated as specified by the -argument <quantiles.for.estimation> and the second column is the list of -precise values of V2BR which correspond to these key quantiles. Because -the serverside functions associated with ds.ranksSecure and -ds.extractQuantile block potentially disclosive output (see information -for parameter quantiles.for.estimation) the "final.quantile.df" is returned -to the client allowing the direct reporting of V2BR values corresponding to -key quantiles such as the quartiles, the median and 95th percentile etc. In -addition a copy of the same data frame is also written to the serverside in -each study allowing the value of key quantiles such as the median to be -incorporated directly in calculations or transformations on the serverside -regardless in which study (or studies) those key quantile values have -occurred.

    -
    -
    -

    Details

    -

    ds.ranksSecure is a clientside function which calls a series of -other clientside and serverside functions to securely generate the global -ranks of a numeric vector "V2BR" (vector to be ranked) -in order to set up analyses on V2BR based on -non-parametric methods, some types of survival analysis and to derive true -global quantiles (such as the median, lower (25 -and the 95 -global quantiles are, in general, different to the mean or median of the -equivalent quantiles calculated independently in each data source separately. -For more details about the cluster of functions that collectively -enable secure global ranking and estimation of global quantiles see the -associated document entitled "secure.global.ranking.docx".

    -
    -
    -

    Author

    -

    Paul Burton 4th November, 2021

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rbind.html b/docs/reference/ds.rbind.html deleted file mode 100644 index 30de9105..00000000 --- a/docs/reference/ds.rbind.html +++ /dev/null @@ -1,189 +0,0 @@ - -Combines R objects by rows in the server-side — ds.rbind • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    It takes a sequence of vector, matrix or data-frame arguments -and combines them by rows to produce a matrix.

    -
    - -
    -
    ds.rbind(
    -  x = NULL,
    -  DataSHIELD.checks = FALSE,
    -  force.colnames = NULL,
    -  newobj = NULL,
    -  datasources = NULL,
    -  notify.of.progress = FALSE
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character vector with the name of the objects to be combined.

    - - -
    DataSHIELD.checks
    -

    logical, if TRUE checks that all -input objects exist and are of an appropriate class.

    - - -
    force.colnames
    -

    can be NULL or a vector of characters that -specifies column names of the output object.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Defaults rbind.newobj.

    - - -
    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.

    - - -
    notify.of.progress
    -

    specifies if console output should be produced to indicate -progress. Default FALSE.

    - -
    -
    -

    Value

    -

    ds.rbind returns a matrix combining the rows of the -R objects specified in the function -which is written to the server-side. -It also returns two messages to the client-side with the name of newobj -that has been created in each data source and DataSHIELD.checks result.

    -
    -
    -

    Details

    -

    A sequence of vector, matrix or data-frame arguments -is combined by rows to produce a matrix on the server-side.

    -

    In DataSHIELD.checks the checks are relatively slow. -Default DataSHIELD.checks value is FALSE.

    -

    If force.colnames is NULL column names are inferred from the names or column names -of the first object specified in the x argument. -The vector of column names must have the same number of elements as -the columns in the output object.

    -

    Server functions called: rbindDS.

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  #Combining R objects by rows 
    -   
    -                   
    -  ds.rbind(x = "D", #data frames in the server-side to be conbined 
    -                    #(see above the connection to the Opal servers) 
    -           DataSHIELD.checks = FALSE,
    -           force.colnames = NULL,
    -           newobj = "D.rbind", # name for the output object that is stored in the data servers
    -           datasources = connections, # All Opal servers are used 
    -                                      #(see above the connection to the Opal servers)
    -           notify.of.progress = FALSE)
    -           
    -  # Clear the Datashield R sessions and logout  
    -  datashield.logout(connections) 
    -  } # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.reShape.html b/docs/reference/ds.reShape.html deleted file mode 100644 index cbd97a29..00000000 --- a/docs/reference/ds.reShape.html +++ /dev/null @@ -1,212 +0,0 @@ - -Reshapes server-side grouped data — ds.reShape • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Reshapes a data frame containing longitudinal or -otherwise grouped data from 'wide' to 'long' format or vice-versa.

    -
    - -
    -
    ds.reShape(
    -  data.name = NULL,
    -  varying = NULL,
    -  v.names = NULL,
    -  timevar.name = "time",
    -  idvar.name = "id",
    -  drop = NULL,
    -  direction = NULL,
    -  sep = ".",
    -  newobj = "newObject",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    data.name
    -

    a character string specifying the name of the data frame to be reshaped.

    - - -
    varying
    -

    names of sets of variables in the wide format that correspond to single -variables in 'long' format.

    - - -
    v.names
    -

    the names of variables in the 'long' format that correspond to multiple variables -in the 'wide' format.

    - - -
    timevar.name
    -

    the variable in 'long' format that differentiates multiple -records from the same group or individual. -If more than one record matches, the first will be taken.

    - - -
    idvar.name
    -

    names of one or more variables in 'long' format that identify multiple -records from the same group/individual. These variables may also be present in 'wide' format.

    - - -
    drop
    -

    a vector of names of variables to drop before reshaping. This can simplify the -resultant output.

    - - -
    direction
    -

    a character string that partially matched to either 'wide' to reshape from -'long' to 'wide' format, or 'long' to reshape from 'wide' to 'long' format.

    - - -
    sep
    -

    a character vector of length 1, indicating a separating character in the variable -names in the 'wide' format. This is used for creating good v.names and times arguments based -on the names in the varying argument. This is also used to create variable names -when reshaping -to 'wide' format.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. -Default reshape.newobj.

    - - -
    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

    -

    ds.reShape returns to the server-side a reshaped data frame -converted from 'long' to 'wide' format or from 'wide' to long' format. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is based on the native R function reshape. -It reshapes a data frame containing longitudinal or otherwise grouped data -between 'wide' format with repeated -measurements in separate columns of the same record and 'long' format with the repeated -measurements in separate records. The reshaping can be in either direction. -Server function called: reShapeDS

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    - ## Version 6, for version 5 see 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 = "SURVIVAL.EXPAND_NO_MISSING1", driver = "OpalDriver")
    -  builder$append(server = "study2", 
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING2", driver = "OpalDriver")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "SURVIVAL.EXPAND_NO_MISSING3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  # Log onto the remote Opal training servers
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Reshape server-side grouped data
    -  
    -  ds.reShape(data.name = "D", 
    -             v.names = "age.60", 
    -             timevar.name = "time.id",
    -             idvar.name = "id",
    -             direction = "wide",
    -             newobj = "reshape1_obj",
    -             datasources = connections)
    -  
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.recodeLevels.html b/docs/reference/ds.recodeLevels.html deleted file mode 100644 index 008e5014..00000000 --- a/docs/reference/ds.recodeLevels.html +++ /dev/null @@ -1,162 +0,0 @@ - -Recodes the levels of a server-side factor vector — ds.recodeLevels • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    The function replaces the levels of a factor by the specified new ones.

    -
    - -
    -
    ds.recodeLevels(
    -  x = NULL,
    -  newCategories = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a factor variable.

    - - -
    newCategories
    -

    a character vector specifying the new levels. Its length must be equal or greater -to the current number of levels.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default recodelevels.newobj.

    - - -
    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

    -

    ds.recodeLevels returns to the server-side a variable of type factor -with the replaces levels.

    -
    -
    -

    Details

    -

    This function is similar to native R function levels().

    -

    It can for example be used to merge two classes into one, to add a level(s) to a vector -or to rename (i.e. re-label) the levels of a vector.

    -

    Server function called: levels()

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Recode the levels of a factor variable
    -  
    -  ds.recodeLevels(x = "D$PM_BMI_CATEGORICAL",
    -                  newCategories = c("1","2","3"),
    -                  newobj = "BMI_CAT",
    -                  datasources = connections)
    -                 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.recodeValues.html b/docs/reference/ds.recodeValues.html deleted file mode 100644 index 80bff411..00000000 --- a/docs/reference/ds.recodeValues.html +++ /dev/null @@ -1,150 +0,0 @@ - -Recodes server-side variable values — ds.recodeValues • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function takes specified values of elements in a vector and converts -them to a matched set of alternative specified values.

    -
    - -
    -
    ds.recodeValues(
    -  var.name = NULL,
    -  values2replace.vector = NULL,
    -  new.values.vector = NULL,
    -  missing = NULL,
    -  newobj = NULL,
    -  datasources = NULL,
    -  notify.of.progress = FALSE
    -)
    -
    - -
    -

    Arguments

    - - -
    var.name
    -

    a character string providing the name of the variable to be recoded.

    - - -
    values2replace.vector
    -

    a numeric or character vector specifying the values -in the variable var.name to be replaced.

    - - -
    new.values.vector
    -

    a numeric or character vector specifying the new values.

    - - -
    missing
    -

    If supplied, any missing values in var.name will be replaced by this value. -Must be of length 1. If the analyst want to recode only missing values then it should also -specify an identical vector of values in both arguments values2replace.vector and -new.values.vector. Otherwise please look the ds.replaceNA function.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. -Default recodevalues.newobj.

    - - -
    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.

    - - -
    notify.of.progress
    -

    logical. If TRUE console output should be produced to indicate -progress. Default FALSE.

    - -
    -
    -

    Value

    -

    Assigns to each server a new variable with the recoded values. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This function recodes individual values with new individual values. This can -apply to numeric and character values, factor levels and NAs. One particular use of -ds.recodeValues is to convert NAs to an explicit value. This value is specified -in the argument missing. If tthe user want to recode only missing values, then it -should also specify an identical vector of values in both arguments values2replace.vector -and new.values.vector (see Example 2 below). -Server function called: recodeValuesDS

    -
    -
    -

    Author

    -

    DataSHIELD Development Team

    -
    - -
    -

    Examples

    - -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rep.html b/docs/reference/ds.rep.html deleted file mode 100644 index 56413642..00000000 --- a/docs/reference/ds.rep.html +++ /dev/null @@ -1,224 +0,0 @@ - -Creates a repetitive sequence in the server-side — ds.rep • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Creates a repetitive sequence by repeating -the specified scalar number, vector or list in each data source.

    -
    - -
    -
    ds.rep(
    -  x1 = NULL,
    -  times = NA,
    -  length.out = NA,
    -  each = 1,
    -  source.x1 = "clientside",
    -  source.times = NULL,
    -  source.length.out = NULL,
    -  source.each = NULL,
    -  x1.includes.characters = FALSE,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x1
    -

    an scalar number, vector or list.

    - - -
    times
    -

    an integer from clientside or a serverside integer -or vector.

    - - -
    length.out
    -

    a clientside integer or a serverside integer -or vector.

    - - -
    each
    -

    a clientside or serverside integer.

    - - -
    source.x1
    -

    the source x1 argument. It can be "clientside" or "c" -and serverside or "s".

    - - -
    source.times
    -

    see source.x1

    - - -
    source.length.out
    -

    see source.x1

    - - -
    source.each
    -

    see source.x1

    - - -
    x1.includes.characters
    -

    Boolean parameter which specifies if -the x1 is a character.

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default seq.vect.

    - - -
    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

    -

    ds.rep returns in the server-side a vector with the specified repetitive sequence. -Also, two validity messages are returned to the client-side - the name of newobj that has been created -in each data source and if it is in a valid form.

    -
    -
    -

    Details

    -

    All arguments that can denote in a clientside or -a serverside (i.e. x1, times, length.out -or each).

    -

    Server function called: repDS.

    -
    -
    -

    Author

    -

    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")
    -    builder$append(server = "study3",
    -                   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") 
    -
    -  # Creating a repetitive sequence  
    -              
    -     ds.rep(x1 = 4,
    -            times = 6,
    -            length.out = NA,
    -            each = 1,
    -            source.x1 = "clientside",
    -            source.times = "c",
    -            source.length.out = NULL,
    -            source.each = "c",
    -            x1.includes.characters = FALSE,
    -            newobj = "rep.seq",
    -            datasources = connections)
    -       
    -     ds.rep(x1 = "lung",
    -            times = 6,
    -            length.out = 7,
    -            each = 1,
    -            source.x1 = "clientside",
    -            source.times = "c",
    -            source.length.out = "c",
    -            source.each = "c",
    -            x1.includes.characters = TRUE,
    -            newobj = "rep.seq",
    -            datasources = connections)
    -
    -  # Clear the Datashield R sessions and logout  
    -  datashield.logout(connections) 
    -} # } 
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.replaceNA.html b/docs/reference/ds.replaceNA.html deleted file mode 100644 index 144448a8..00000000 --- a/docs/reference/ds.replaceNA.html +++ /dev/null @@ -1,188 +0,0 @@ - -Replaces the missing values in a server-side vector — ds.replaceNA • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function identifies missing values and replaces them by a value or -values specified by the analyst.

    -
    - -
    -
    ds.replaceNA(x = NULL, forNA = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of the vector.

    - - -
    forNA
    -

    a list or a vector that contains the replacement value(s), for each study. -The length of the list or vector must be equal to the number of servers (studies).

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default replacena.newobj.

    - - -
    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

    -

    ds.replaceNA returns to the server-side a new vector or table structure -with the missing values replaced by the specified values. - The class of the vector is the same as the initial vector.

    -
    -
    -

    Details

    -

    This function is used when the analyst prefers or requires complete vectors. -It is then possible the specify one value for each missing value by first returning -the number of missing values using the function ds.numNA but in most cases, -it might be more sensible to replace all missing values by one specific value e.g. -replace all missing values in a vector by the mean or median value. Once the missing -values have been replaced a new vector is created.

    -

    Note: If the vector is within a table structure such as a data frame the new vector is -appended to table structure so that the table holds both the vector with and without -missing values.

    -

    Server function called: replaceNaDS

    -
    -
    -

    Author

    -

    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")
    -    builder$append(server = "study3",
    -                   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") 
    -
    -  # Example 1: Replace missing values in variable 'LAB_HDL' by the mean value 
    -  # in each study
    -  
    -  # Get the mean value of  'LAB_HDL' for each study
    -  mean <- ds.mean(x = "D$LAB_HDL",
    -                  type = "split",
    -                  datasources = connections)
    -
    -  # Replace the missing values using the mean for each study
    -  ds.replaceNA(x = "D$LAB_HDL",
    -               forNA = list(mean[[1]][1], mean[[1]][2], mean[[1]][3]),
    -               newobj = "HDL.noNA",
    -               datasources = connections)
    -               
    -  # Example 2: Replace missing values in categorical variable 'PM_BMI_CATEGORICAL'
    -  # with 999s
    - 
    -  # First check how many NAs there are in 'PM_BMI_CATEGORICAL' in each study
    -  ds.table(rvar = "D$PM_BMI_CATEGORICAL", 
    -          useNA = "always")   
    -          
    -  # Replace the missing values with 999s
    -  ds.replaceNA(x = "D$PM_BMI_CATEGORICAL", 
    -               forNA = c(999,999,999), 
    -               newobj = "bmi999")
    -               
    -  # Check if the NAs have been replaced correctly
    -  ds.table(rvar = "bmi999", 
    -          useNA = "always")   
    - 
    -  # Clear the Datashield R sessions and logout  
    -  datashield.logout(connections) 
    -} # } 
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rm.html b/docs/reference/ds.rm.html deleted file mode 100644 index 47cbcb7a..00000000 --- a/docs/reference/ds.rm.html +++ /dev/null @@ -1,158 +0,0 @@ - -Deletes server-side R objects — ds.rm • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    deletes R objects on the server-side

    -
    - -
    -
    ds.rm(x.names = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.names
    -

    a character string specifying the objects to be deleted.

    - - -
    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

    -

    The ds.rm function deletes from the server-side -the specified object. If this -is successful the message "Object(s) '<x.names>' was deleted." is returned -to the client-side.

    -
    -
    -

    Details

    -

    This function is similar to the native R function -rm().

    -

    The fact that it is an aggregate -function may be surprising because it modifies an object -on the server-side, and would, therefore, be expected to be an assign function. -However, as an assign function the last step in running it -would be to write the modified object as newobj. But this would -fail because the effect of the function is to delete the object and so -it would be impossible to write it anywhere. Please note that although -this calls an aggregate function there is no type argument.

    -

    Server function called: rmDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Create an object in the server-side
    -  
    -  ds.assign(toAssign = "D$LAB_TSC",
    -            newobj = "labtsc",
    -            datasources = connections)
    -  
    -  #Delete "labtsc" object from the server-side
    -  
    -  ds.rm(x.names = "labtsc",
    -        datasources = connections)
    -             
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.rowColCalc.html b/docs/reference/ds.rowColCalc.html deleted file mode 100644 index 59560072..00000000 --- a/docs/reference/ds.rowColCalc.html +++ /dev/null @@ -1,161 +0,0 @@ - -Computes rows and columns sums and means in the server-side — ds.rowColCalc • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Computes sums and means of rows or columns -of a numeric matrix or data frame on the server-side.

    -
    - -
    -
    ds.rowColCalc(x = NULL, operation = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a matrix or a data frame.

    - - -
    operation
    -

    a character string that indicates the operation to carry out: -"rowSums", "colSums", "rowMeans" or "colMeans".

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default rowcolcalc.newobj.

    - - -
    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

    -

    ds.rowColCalc returns to the server-side rows and columns sums and means.

    -
    -
    -

    Details

    -

    The function is similar to R base functions rowSums, colSums, -rowMeans and colMeans with some restrictions.

    -

    The results of the calculation are not returned to the user if they are potentially -revealing i.e. if the number of rows is less than the allowed number of observations.

    -

    Server functions called: classDS, dimDS and colnamesDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  myvar <- list("LAB_TSC","LAB_HDL")
    -   
    -  # Log onto the remote Opal training servers
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, 
    -  variables = myvar, symbol = "D") 
    -
    -  
    -  #Calculate the colSums
    -  
    -  ds.rowColCalc(x = "D",
    -                operation = "colSums", 
    -                newobj = "D.rowSums", 
    -                datasources = connections)
    -                
    -  #Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.sample.html b/docs/reference/ds.sample.html deleted file mode 100644 index 8ebc307c..00000000 --- a/docs/reference/ds.sample.html +++ /dev/null @@ -1,252 +0,0 @@ - -Performs random sampling and permuting of vectors, dataframes and matrices — ds.sample • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    draws a pseudorandom sample from a vector, dataframe or matrix -on the serverside -or - as a special case - randomly permutes a vector, dataframe or matrix.

    -
    - -
    -
    ds.sample(
    -  x = NULL,
    -  size = NULL,
    -  seed.as.integer = NULL,
    -  replace = FALSE,
    -  prob = NULL,
    -  newobj = NULL,
    -  datasources = NULL,
    -  notify.of.progress = FALSE
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    Either a character string providing the name for the serverside -vector, matrix or data.frame to be sampled or permuted, or an integer/numeric -scalar (e.g. 923) indicating that one should create a new vector on the serverside -that is a randomly permuted sample of the vector 1:923, or (if [replace] -= FALSE, a full random permutation of that same vector. For further details -of using ds.sample with x set as an integer/numeric please see help for -the sample function in native R. But if x is set as a character string -denoting a vector, matrix or data.frame on the serverside, please note -that although ds.sample effectively calls sample on the serverside -it behaves somewhat differently to sample - for the reasons identified -at the top of 'details' and so help for sample should be used as a guide -only.

    - - -
    size
    -

    a numeric/integer scalar indicating the size of the sample to -be drawn. If the [x] argument is a vector, matrix or data.frame on the -serverside and if the [size] argument is set either to 0 or to the length of -the object to be 'sampled' and [replace] is FALSE, then ds.sample will -draw a random sample that includes all rows of the input object but will randomly -permute them. If the [x] argument is numeric (e.g. 923) and size is either undefined -or set equal to 923, the output on the serverside will be a vector of length 923 -permuted into a random order. If the [replace] argument is FALSE then the value -of [size] must be no greater than the length of object to be sorted - if -this is violated an error message will be returned.

    - - -
    seed.as.integer
    -

    this is precisely equivalent to the [seed.as.integer] -arguments for the pseudo-random number generating functions (e.g. -also see help for ds.rBinom, ds.rNorm, ds.rPois and ds.rUnif). -In other words the seed.as.integer argument is either a a numeric scalar -or a NULL which primes the random seed -in each data source. If <seed.as.integer> is a numeric scalar (e.g. 938) -the seed in each study is set as 938*1 in the first study in the set of -data sources being used, 938*2 in the second, up to 938*N in the Nth study. -If <seed.as.integer> is set as 0 all sources will start with the seed value -0 and all the random number generators will therefore start from the same position. -If you want to use the same starting seed in all studies but do not wish it to -be 0, you can specify a non-zero scalar value for <seed.as.integer> and then -use the <datasources> argument to generate the random number vectors one source at -a time (e.g. ,datasources=default.opals[2] to generate the random vector in source 2). -As an example, if the <seed.as.integer> value is 78326 then the seed -in each source will be set at 78326*1 = 78326 because the vector of datasources -being used in each call to the function will always be of length 1 and so the -source-specific seed multiplier will also be 1. The function ds.rUnif.o -calls the serverside assign function setSeedDS.o to create the random seeds in -each source

    - - -
    replace
    -

    a Boolean indicator (TRUE or FALSE) specifying whether the -sample should be drawn with or without replacement. Default is FALSE so -the sample is drawn without replacement. For further details see -help for sample in native R.

    - - -
    prob
    -

    a character string containing the name of a numeric vector -of probability weights on the serverside that is associated with each of the -elements of the vector to be sampled enabling the drawing of a sample -with some elements given higher probability of being drawn than others. -For further details see help for sample in native R.

    - - -
    newobj
    -

    This a character string providing a name for the output -data.frame which defaults to 'newobj.sample' if no name is specified.

    - - -
    datasources
    -

    specifies the particular opal object(s) to use. If the <datasources> -argument is not specified the default set of opals will be used. The default opals -are called default.opals and the default can be set using the function -ds.setDefaultOpals. If the <datasources> is to be specified, it should be set without -inverted commas: e.g. datasources=opals.em or datasources=default.opals. If you wish to -apply the function solely to e.g. the second opal server in a set of three, -the argument can be specified as: e.g. datasources=opals.em[2]. -If you wish to specify the first and third opal servers in a set you specify: -e.g. datasources=opals.em[c(1,3)]

    - - -
    notify.of.progress
    -

    specifies if console output should be produce to indicate -progress. The default value for notify.of.progress is FALSE.

    - -
    -
    -

    Value

    -

    the object specified by the <newobj> argument (or default name -'newobj.sample') -which is written to the serverside. In addition, two validity messages are returned -indicating whether <newobj> has been created in each data source and if so whether -it is in a valid form. If its form is not valid in at least one study - e.g. because -a disclosure trap was tripped and creation of the full output object was blocked - -ds.dataFrameSort() also returns any studysideMessages that may explain the error in creating -the full output object. We are currently working to extend the information that can -be returned to the clientside when an error occurs.

    -
    -
    -

    Details

    -

    Clientside function ds.sample calls serverside -assign function sampleDS. Based on the native R function sample() but deals -slightly differently with data.frames and matrices. Specifically the sample() -function in R identifies the length of an object and then samples n components -of that length. But length(data.frame) in native R returns the number of columns -not the number of rows. So if you have a data.frame with 71 rows and 10 columns, -the sample() function will select 10 columns at random, which is often not what -is required. So, ds.sample(x="data.frame",size=10) in DataSHIELD will sample -10 rows at random(with or without replacement depending whether the [replace] -argument is TRUE or FALSE, with False being default). If x is a simple vector -or a matrix it is first coerced to a data.frame on the serverside and so is dealt -with in the same way (i.e. random selection of 10 rows). If x is an integer -not expressed as a character string, it is dealt with in exactly the same way -as in native R. That is, if x = 923 and size=117, DataSHIELD will draw a -random sample in random order of size 117 from the vector 1:923 (i.e. -1, 2, ... ,923) with or without replacement depending whether [replace] is -TRUE or FALSE. If the [x] argument is numeric (e.g. 923) and size is either undefined -or set equal to 923, the output on the serverside will be a vector of length 923 -permuted into a random order. If the [x] argument is a vector, matrix or data.frame on the -serverside and if the [size] argument is set either to 0 or to the length of -the object to be 'sampled' and [replace] is FALSE, then ds.sample will -draw a random sample that includes all rows of the input object but will randomly -permute them. This is how ds.sample enables random permuting as well as random -sub-sampling. When a serverside vector, matrix or data.frame is sampled using ds.sample -3 new columns are appended to the right of the output object. These are: -'in.sample', 'ID.seq', and 'sampling.order'. The first of these is set to -1 whenever a row enters the sample and as a QA test, all values in that column -in the output object should be 1. 'ID.seq' is a sequential numeric ID appended to -the right of the object to be sampled during the running of ds.sample that runs from -1 to the length of the object and will be appended even if there is already -an equivalent sequential ID in the object. The output object is stored in -the same original order as it was before sampling, and so if the first -four elements of 'ID.seq' are 3,4, 6, 15 ... then it means that rows 1 and 2 were -not included in the random sample, but rows 3, 4 were. Row 5 was not included, -6 was included and rows 7-14 were not etc. The 'sampling.order' vector is -of class numeric and indicates the order in which the rows entered the sample: -1 indicates the first row sample, 2 the second etc. The lines of code that follow -create an output object of the same length as the input object (PRWa) -but they join the sample in random order. By sorting the output object (in this -case with the default name 'newobj.sample) using ds.dataFrameSort with the -'sampling.order' vector as the sort key, the output object is rendered -equivalent to PRWa but with the rows randomly permuted (so the column reflecting -the vector 'sample.order' now runs from 1:length of obejct, while the -column reflecting 'ID.seq' denoting the original order is now randomly ordered. -If you need to return to the original order you can simply us ds.dataFrameSort -again using the column reflecting 'ID.seq' as the sort key: -(1) ds.sample('PRWa',size=0,seed.as.integer = 256); -(2) ds.make("newobj.sample$sampling.order","sortkey"); -(3) ds.dataFrameSort("newobj.sample","sortkey",newobj="newobj.permuted") -The only additional detail to note is that the original name of the sort key -("newobj.sample$sampling.order") is 28 characters long, and because its -length is tested to check for disclosure risk, this original name will -fail using the usual value for 'nfilter.stringShort' (i.e. 20). This is -why line 2 is inserted to create a copy with a shorter name.

    -
    -
    -

    Author

    -

    Paul Burton, for DataSHIELD Development Team, 15/4/2020

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.scatterPlot.html b/docs/reference/ds.scatterPlot.html deleted file mode 100644 index 5c792f45..00000000 --- a/docs/reference/ds.scatterPlot.html +++ /dev/null @@ -1,240 +0,0 @@ - -Generates non-disclosive scatter plots — ds.scatterPlot • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function uses two disclosure control methods to generate non-disclosive -scatter plots of two server-side continuous variables.

    -
    - -
    -
    ds.scatterPlot(
    -  x = NULL,
    -  y = NULL,
    -  method = "deterministic",
    -  k = 3,
    -  noise = 0.25,
    -  type = "split",
    -  return.coords = FALSE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of the explanatory variable, a numeric vector.

    - - -
    y
    -

    a character string specifying the name of the response variable, a numeric vector.

    - - -
    method
    -

    a character string that specifies the -method that is used to generated non-disclosive -coordinates to be displayed in a scatter plot. -This argument can be set as 'deteministic' or 'probabilistic'. -Default 'deteministic'. -For more information see Details.

    - - -
    k
    -

    the number of the nearest neighbors for which their centroid is calculated. -Default 3. -For more information see Details.

    - - -
    noise
    -

    the percentage of the initial variance that is used as the variance of the embedded -noise if the argument method is set to 'probabilistic'. -For more information see Details.

    - - -
    type
    -

    a character that represents the type of graph to display. -This can be set as 'combine' or 'split'. -Default 'split'. -For more information see Details.

    - - -
    return.coords
    -

    a logical. If TRUE the coordinates of the anonymised data points are return -to the Console. Default value is FALSE.

    - - -
    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

    -

    ds.scatterPlot returns to the client-side one or more scatter -plots depending on the argument type.

    -
    -
    -

    Details

    -

    As the generation of a scatter plot from original data is disclosive and is not -permitted in DataSHIELD, this function allows the user to plot non-disclosive scatter plots.

    -

    If the argument method is set to 'deterministic', the server-side function searches -for the k-1 nearest neighbors of each single data point and calculates the centroid -of such k points. -The proximity is defined by the minimum Euclidean distances of z-score transformed data.

    -

    When the coordinates of all centroids are estimated the function applies scaling to expand the -centroids back to the dispersion of the original data. The scaling is achieved by multiplying -the centroids with a scaling factor that is equal to the ratio between the standard deviation of -the original variable and the standard deviation of the calculated centroids. The coordinates of -the scaled centroids are then returned to the client-side.

    -

    The value of k is specified by the user. -The suggested and default value is equal to 3 which is also -the suggested minimum threshold that is used to prevent disclosure which is specified in the -protection filter nfilter.kNN. When the value of k increases, -the disclosure risk decreases but the utility loss increases. -The value of k is used only -if the argument method is set to 'deterministic'. -Any value of k is ignored if the -argument method is set to 'probabilistic'.

    -

    If the argument method is set to 'probabilistic', -the server-side function generates a random normal noise of zero mean -and variance equal to 10% of the variance of each x and y variable. -The noise is added to each x and y variable and the disturbed by the addition of -noise data are returned to the client-side. Note that the seed random number generator is fixed to a -specific number generated from the data and therefore the user gets the same figure every time -that chooses the probabilistic method in a given set of variables. -The value of noise is used only if the argument method is set to 'probabilistic'. -Any value of noise is ignored if -the argument method is set to 'deterministic'.

    -

    In type argument can be set two graphics to display:
    -(1) If type = 'combine' a scatter plot for -combined data is generated.
    -(2) If type = 'split' one scatter plot for each -study is generated.

    -

    Server function called: scatterPlotDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  #Example 1: generate a scatter plot for each study separately
    -  #Using the default deterministic method and k = 10
    -  
    -  ds.scatterPlot(x = "D$PM_BMI_CONTINUOUS",
    -                 y = "D$LAB_GLUC_ADJUSTED",
    -                 method = "deterministic",
    -                 k = 10,
    -                 type = "split",
    -                 datasources = connections)
    -
    -  #Example 2: generate a combined scatter plot with the probabilistic method
    -  #and noise of variance 0.5% of the variable's variance, and display the coordinates
    -  # of the anonymised data points to the Console
    -  
    -  ds.scatterPlot(x = "D$PM_BMI_CONTINUOUS",
    -                 y = "D$LAB_GLUC_ADJUSTED",
    -                 method = "probabilistic",
    -                 noise = 0.5,
    -                 type = "combine",
    -                 datasources = connections)
    -                   
    -  #Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.seq.html b/docs/reference/ds.seq.html deleted file mode 100644 index 2235f610..00000000 --- a/docs/reference/ds.seq.html +++ /dev/null @@ -1,231 +0,0 @@ - -Generates a sequence in the server-side — ds.seq • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function generates a sequence for given parameters -on the server-side.

    -
    - -
    -
    ds.seq(
    -  FROM.value.char = "1",
    -  BY.value.char = "1",
    -  TO.value.char = NULL,
    -  LENGTH.OUT.value.char = NULL,
    -  ALONG.WITH.name = NULL,
    -  newobj = "newObj",
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    FROM.value.char
    -

    an integer or a number in character from specifying -the starting value for the sequence. -Default "1".

    - - -
    BY.value.char
    -

    an integer or a number in character from specifying -the value to increment each step in the sequence. -Default "1".

    - - -
    TO.value.char
    -

    an integer or a number in character from specifying -the terminal value for the sequence. -Default NULL. -For more information see Details.

    - - -
    LENGTH.OUT.value.char
    -

    an integer or a number in character from specifying -the length of the sequence at which point -its extension should be stopped. -Default NULL. -For more information see Details.

    - - -
    ALONG.WITH.name
    -

    a character string specifying the name of a standard vector -to generate a vector of the same length. -For more information see Details.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default seq.newobj.

    - - -
    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

    -

    ds.seq returns to the server-side the generated sequence. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is similar to a native R function seq(). -It creates a flexible range of sequence vectors that can then be used to help -manage and analyse data.

    -

    Note: the combinations of arguments that are not allowed -for the function seq in native R are also prohibited in ds.seq.

    -

    To be specific, FROM.value.char argument -defines the start of the sequence and BY.value.char defines how -the sequence is incremented (or decremented) at each step. But where the -sequence stops can be defined in three different ways:
    -(1) TO.value.char indicates the terminal value of the sequence. -For example, ds.seq(FROM.value.char = "3", BY.value.char = "2", -TO.value.char = "7") creates the sequence 3,5,7 on the server-side.
    -(2) LENGTH.OUT.value.char indicates the length of the sequence. -For example, ds.seq(FROM.value.char = "3", BY.value.char = "2", -LENGTH.OUT.value.char = "7") -creates the sequence 3,5,7,9,11,13,15 on the server-side.
    -(3) ALONG.WITH.name specifies the name of a variable on the server-side, -such that the sequence in each study will be equal in length to that variable. -For example, ds.seq(FROM.value.char = "3", BY.value.char = "2", -ALONG.WITH.name = "var.x") -creates a sequence such that if var.x is of length 100 in study 1 the -sequence written to study 1 will be 3,5,7,...,197,199,201 and if var.x is -of length 4 in study 2, the sequence written to study 2 will be 3,5,7,9.
    -Only one of the three arguments: TO.value.char, -LENGTH.OUT.value.char and ALONG.WITH.name can be non-null in any one call.

    -

    In LENGTH.OUT.value.char argument if you specify a number with a decimal point but -in character form this result in a sequence length(integer) + 1. -For example, LENGTH.OUT.value.char = "1000.0001" -generates a sequence of length 1001.

    -

    Server function called: seqDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -
    -  #Create 3 different sequences
    -  
    -  ds.seq(FROM.value.char = "1",
    -         BY.value.char = "2",
    -         TO.value.char = "7",
    -         newobj = "new.seq1",
    -         datasources = connections)
    -         
    -         
    -  ds.seq(FROM.value.char = "4",
    -         BY.value.char = "3",
    -         LENGTH.OUT.value.char = "10",
    -         newobj = "new.seq2",
    -         datasources = connections)  
    -         
    -  ds.seq(FROM.value.char = "2",
    -         BY.value.char = "5",
    -         ALONG.WITH.name = "D$GENDER",
    -         newobj = "new.seq3",
    -         datasources = connections)                            
    -         
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.setDefaultOpals.html b/docs/reference/ds.setDefaultOpals.html deleted file mode 100644 index 2753f52a..00000000 --- a/docs/reference/ds.setDefaultOpals.html +++ /dev/null @@ -1,111 +0,0 @@ - -Creates a default set of Opal objects called 'default.opals' — ds.setDefaultOpals • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    creates a default set of Opal objects called 'default.opals

    -
    - -
    -
    ds.setDefaultOpals(opal.name)
    -
    - -
    -

    Value

    -

    Copies a specified set of Opals (on the client-side server) -and calls the copy 'default.opals'

    -
    -
    -

    Details

    -

    By default if there is only one set of opals that is available for -analysis, all DataSHIELD client-side functions will -use that full set of Opals unless the 'datasources=' argument has been set and specifies that -a particular subset of those Opals should be used instead. The correct identification of the full -single set of opals is based on the datashield.connections_find() function which is an internal DataSHIELD -function that is run at the start of nearly every client side function. -To illustrate, if the single set of Opals is called 'study.opals' and consists of -six opals numbered study.opals[1] to study.opals[6] then all client-side functions will -use data from all six of these 'study.opals' unless, say, datasources=study.opals[c(2,5)] is -declared and only data from the second and fifth studies will then be used. -On the other hand, if there is more than one set of Opals in the analytic environment client-side functions will -be unable to determine which set to use. The function datashield.connections_find() has therefore been -written so that if one of the Opal sets is called 'default.opals' then that set - -i.e. 'default.opals' - will be selected by default by all DataSHIELD client-side functions. If there is more -than one set of Opals in the analytic environment and NONE of -these is called 'default.opals', the function ds.setDefaultOpals() therefore copies -one set of opals and to name that copy 'default.opals'. This set will then be selected -by default by all client-side functions, unless it is deleted and an alternative set of -opals is copied and named 'default.opals'. Regardless how many sets of opals exist and -regardless whether any of them may be called 'default.opals', the 'datasources=' argument -overrides the defaults and allows the user to base his/her analysis on any set of opals -and any subset of those opals. An earlier version of -'datashield.connections_find()' asked the user to specify which Opal to choose -if no default could be identified, but that did not work in all versions of R -and so has been removed.

    -
    -
    -

    Author

    -

    Burton, PR. 28/9/16

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.setSeed.html b/docs/reference/ds.setSeed.html deleted file mode 100644 index f20baffa..00000000 --- a/docs/reference/ds.setSeed.html +++ /dev/null @@ -1,174 +0,0 @@ - -Server-side random number generation — ds.setSeed • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Primes the pseudorandom number generator in a data source

    -
    - -
    -
    ds.setSeed(seed.as.integer = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    seed.as.integer
    -

    a numeric value or a NULL that primes the random seed -in each data source.

    - - -
    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

    -

    Sets the values of the vector of integers of length 626 known as -.Random.seed on each data source that is the true current state of the -random seed in each source. It also returns the value of the trigger -integer that has primed the random seed vector (.Random.seed) in -each source and also the integer vector of 626 elements -that is .Random.seed itself.

    -
    -
    -

    Details

    -

    This function generates an instance of -the full pseudorandom number seed that is a vector of integers -of length 626 called .Random.seed, this vector is written to the server-side.

    -

    This function is similar to a native R function set.seed().

    -

    In seed.as.integer argument -the current limitation on the value of the integer that -can be specified is -2147483647 up to +2147483647 -(this is +/- ([2^31]-1)).

    -

    Because you only specify one integer in the call to ds.setSeed -(i.e. the value for the seed.as.integer argument) that value will be -used as the priming trigger value in all of the specified -data sources and so the pseudorandom number generators will all start from -the same position and if a vector of pseudorandom number values is requested -based on one of DataSHIELD's pseudorandom number generating functions precisely -the same random vector will be generated in each source. If you want to avoid this -you can specify a different priming value in each source by using -the datasources argument to generate the random number vectors one source -at a time with a different integer in each case.

    -

    Furthermore, if you use any one -of DataSHIELD's pseudorandom number generating functions: ds.rNorm, ds.rUnif, -ds.rPois or ds.rBinom. The function call itself automatically uses the single -integer priming seed you specify to generate different integers in each source.

    - -

    Server function called: setSeedDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  #Generate a pseudorandom number in the server-side
    -  
    -  ds.setSeed(seed.as.integer = 152584,
    -             datasources = connections)
    -             
    -  #Specify the pseudorandom number only in the first source
    -  
    -  ds.setSeed(seed.as.integer = 741,
    -             datasources = connections[1])#only the frist study is used (study1)
    -                   
    -  # Clear the Datashield R sessions and logout  
    -  datashield.logout(connections) 
    -  } # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.skewness.html b/docs/reference/ds.skewness.html deleted file mode 100644 index 86ff4c8c..00000000 --- a/docs/reference/ds.skewness.html +++ /dev/null @@ -1,172 +0,0 @@ - -Calculates the skewness of a server-side numeric variable — ds.skewness • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function calculates the skewness of a numeric variable -that is stored on the server-side (Opal server).

    -
    - -
    -
    ds.skewness(x = NULL, method = 1, type = "both", datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a numeric variable.

    - - -
    method
    -

    an integer value between 1 and 3 selecting one of the algorithms for computing skewness. -For more information see Details. The default value is set to 1.

    - - -
    type
    -

    a character string which represents the type of analysis to carry out. -type can be set as: 'combine', 'split' or 'both'. For more information -see Details. -The default value is set to 'both'.

    - - -
    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

    -

    ds.skewness returns a matrix showing the skewness of the input numeric variable, -the number of valid observations and the validity message.

    -
    -
    -

    Details

    -

    This function is similar to the function skewness in R package e1071.

    -

    The function calculates the skewness of an input variable x -with three different methods:
    -(1) If method is set to 1 the following formula is used \( skewness= \frac{\sum_{i=1}^{N} (x_i - \bar(x))^3 /N}{(\sum_{i=1}^{N} ((x_i - \bar(x))^2) /N)^(3/2) }\), -where \( \bar{x} \) is the mean of x and \(N\) is the number of observations.
    -(2) If method is set to 2 -the following formula is used \( skewness= \frac{\sum_{i=1}^{N} (x_i - \bar(x))^3 /N}{(\sum_{i=1}^{N} ((x_i - \bar(x))^2) /N)^(3/2) } * \frac{\sqrt(N(N-1)}{n-2}\).
    -(3) If method is set to 3 the following formula is used \( skewness= \frac{\sum_{i=1}^{N} (x_i - \bar(x))^3 /N}{(\sum_{i=1}^{N} ((x_i - \bar(x))^2) /N)^(3/2) } * (\frac{N-1}{N})^(3/2)\).

    -

    The type argument can be set as follows:
    -(1) If type is set to 'combine', 'combined', 'combines' or 'c', -the global skewness is returned.
    -(2) If type is set to 'split', 'splits' or 's', -the skewness is returned separately for each study.
    -(3) If type is set to 'both' or 'b', both sets of outputs are produced.

    -

    If x contains any missing value, the function removes those before -the calculation of the skewness.

    -

    Server functions called: skewnessDS1 and skewnessDS2

    -
    -
    -

    Author

    -

    Demetris Avraam, 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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Calculate the skewness of LAB_TSC numeric variable for each study separately and combined
    -  
    -  ds.skewness(x = "D$LAB_TSC",
    -              method = 1, 
    -              type = "both",
    -             datasources = connections)
    -  
    -  # Clear the Datashield R sessions and logout                 
    -  DSI::datashield.logout(connections) 
    -  
    -} # } 
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.sqrt.html b/docs/reference/ds.sqrt.html deleted file mode 100644 index 46c711cb..00000000 --- a/docs/reference/ds.sqrt.html +++ /dev/null @@ -1,164 +0,0 @@ - -Computes the square root values of a variable — ds.sqrt • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Computes the square root values for a specified numeric or integer vector. -This function is similar to R function sqrt.

    -
    - -
    -
    ds.sqrt(x = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string providing the name of a numeric or an integer vector.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default name is set to sqrt.newobj.

    - - -
    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

    -

    ds.sqrt assigns a vector for each study that includes the square root values of -the input numeric or integer vector specified in the argument x. The created vectors -are stored in the servers.

    -
    -
    -

    Details

    -

    The function calls the server-side function sqrtDS that computes the -square root values of the elements of a numeric or integer vector and assigns a new vector -with those square root values on the server-side. The name of the new generated vector is -specified by the user through the argument newobj, otherwise is named by default to -sqrt.newobj.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # 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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  # Example 1: Get the square root of LAB_HDL variable
    -  ds.sqrt(x='D$LAB_HDL', newobj='LAB_HDL.sqrt', datasources=connections)
    -  # compare the mean of LAB_HDL and of LAB_HDL.sqrt
    -  # Note here that the number of missing values is bigger in the LAB_HDL.sqrt 
    -  ds.mean(x='D$LAB_HDL', datasources=connections)
    -  ds.mean(x='LAB_HDL.sqrt', datasources=connections)
    -
    -  # Example 2: Generate a repeated vector of the squares of integers from 1 to 10
    -  # and get their square roots
    -  ds.make(toAssign='rep((1:10)^2, times=10)', newobj='squares.vector', datasources=connections)
    -  ds.sqrt(x='squares.vector', newobj='sqrt.vector', datasources=connections)
    -  # check the behavior of that operation by comparing the tables of squares.vector and sqrt.vector
    -  ds.table(rvar='squares.vector')$output.list$TABLE_rvar.by.study_counts
    -  ds.table(rvar='sqrt.vector')$output.list$TABLE_rvar.by.study_counts
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections) 
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.subset.html b/docs/reference/ds.subset.html deleted file mode 100644 index 69240cf0..00000000 --- a/docs/reference/ds.subset.html +++ /dev/null @@ -1,198 +0,0 @@ - -Generates a valid subset of a table or a vector — ds.subset • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    The function uses the R classical subsetting with squared brackets '[]' and allows also to -subset using a logical oprator and a threshold. The object to subset from must be a vector (factor, numeric -or charcater) or a table (data.frame or matrix).

    -
    - -
    -
    ds.subset(
    -  x = NULL,
    -  subset = "subsetObject",
    -  completeCases = FALSE,
    -  rows = NULL,
    -  cols = NULL,
    -  logicalOperator = NULL,
    -  threshold = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character, the name of the dataframe or the factor vector and the range of the subset.

    - - -
    subset
    -

    the name of the output object, a list that holds the subset object. If set to NULL -the default name of this list is 'subsetObject'

    - - -
    completeCases
    -

    a character that tells if only complete cases should be included or not.

    - - -
    rows
    -

    a vector of integers, the indices of the rows to extract.

    - - -
    cols
    -

    a vector of integers or a vector of characters; the indices of the columns to extract or their names.

    - - -
    logicalOperator
    -

    a boolean, the logical parameter to use if the user wishes to subset a vector using a logical -operator. This parameter is ignored if the input data is not a vector.

    - - -
    threshold
    -

    a numeric, the threshold to use in conjunction with the logical parameter. This parameter is ignored -if the input data is not a vector.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    no data are return to the user, the generated subset dataframe is stored on the server side.

    -
    -
    -

    Details

    -

    (1) If the input data is a table the user specifies the rows and/or columns to include in the subset; the columns can be -refered to by their names. Table subsetting can also be done using the name of a variable and a threshold (see example 3). -(2) If the input data is a vector and the parameters 'rows', 'logical' and 'threshold' are all provided the last two are ignored -(i.e. 'rows' has precedence over the other two parameters then). -IMPORTANT NOTE: If the requested subset is not valid (i.e. contains less than the allowed number of observations) all the values are -turned into missing values (NA). Hence an invalid subset is indicated by the fact that all values within it are set to NA.

    -
    -
    -

    See also

    -

    ds.subsetByClass to subset by the classes of factor vector(s).

    -

    ds.meanByClass to compute mean and standard deviation across categories of a factor vectors.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # load the login data
    -  data(logindata)
    -
    -  # login and assign some variables to R
    -  myvar <- list("DIS_DIAB","PM_BMI_CONTINUOUS","LAB_HDL", "GENDER")
    -  conns <- datashield.login(logins=logindata,assign=TRUE,variables=myvar)
    -
    -  # Example 1: generate a subset of the assigned dataframe (by default the table is named 'D')
    -  # with complete cases only
    -  ds.subset(x='D', subset='subD1', completeCases=TRUE)
    -  # display the dimensions of the initial table ('D') and those of the subset table ('subD1')
    -  ds.dim('D')
    -  ds.dim('subD1')
    -
    -  # Example 2: generate a subset of the assigned table (by default the table is named 'D')
    -  # with only the variables
    -  # DIS_DIAB' and'PM_BMI_CONTINUOUS' specified by their name.
    -  ds.subset(x='D', subset='subD2', cols=c('DIS_DIAB','PM_BMI_CONTINUOUS'))
    -
    -  # Example 3: generate a subset of the table D with bmi values greater than or equal to 25.
    -  ds.subset(x='D', subset='subD3', logicalOperator='PM_BMI_CONTINUOUS>=', threshold=25)
    -
    -  # Example 4: get the variable 'PM_BMI_CONTINUOUS' from the dataframe 'D' and generate a
    -  # subset bmi
    -  # vector with bmi values greater than or equal to 25
    -  ds.assign(toAssign='D$PM_BMI_CONTINUOUS', newobj='BMI')
    -  ds.subset(x='BMI', subset='BMI25plus', logicalOperator='>=', threshold=25)
    -
    -  # Example 5: subsetting by rows:
    -  # get the logarithmic values of the variable 'lab_hdl' and generate a subset with
    -  # the first 50 observations of that new vector. If the specified number of row is
    -  # greater than the total
    -  # number of rows in any of the studies the process will stop.
    -  ds.assign(toAssign='log(D$LAB_HDL)', newobj='logHDL')
    -  ds.subset(x='logHDL', subset='subLAB_HDL', rows=c(1:50))
    -  # now get a subset of the table 'D' with just the 100 first observations
    -  ds.subset(x='D', subset='subD5', rows=c(1:100))
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(conns)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.subsetByClass.html b/docs/reference/ds.subsetByClass.html deleted file mode 100644 index 8a8fad3b..00000000 --- a/docs/reference/ds.subsetByClass.html +++ /dev/null @@ -1,160 +0,0 @@ - -Generates valid subset(s) of a data frame or a factor — ds.subsetByClass • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    The function takes a categorical variable or a data frame as input and generates -subset(s) variables or data frames for each category.

    -
    - -
    -
    ds.subsetByClass(
    -  x = NULL,
    -  subsets = "subClasses",
    -  variables = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character, the name of the dataframe or the vector to generate subsets from.

    - - -
    subsets
    -

    the name of the output object, a list that holds the subset objects. If set to NULL -the default name of this list is 'subClasses'.

    - - -
    variables
    -

    a vector of string characters, the name(s) of the variables to subset by.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    a no data are return to the user but messages are printed out.

    -
    -
    -

    Details

    -

    If the input data object is a data frame it is possible to specify the variables -to subset on. If a subset is not 'valid' all its the values are reported as missing (i.e. NA), -the name of the subsets is labelled with the suffix '_INVALID'. Subsets are considered invalid if -the number of observations it holds are between 1 and the threshold allowed by the data owner. if -a subset is empty (i.e. no entries) the name of the subset is labelled with the suffix '_EMPTY'.

    -
    -
    -

    See also

    -

    ds.meanByClass to compute mean and standard deviation across categories of a factor vectors.

    -

    ds.subset to subset by complete cases (i.e. removing missing values), threshold, columns and rows.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # load the login data
    -  data(logindata)
    -
    -  # login and assign some variables to R
    -  myvar <- list('DIS_DIAB','PM_BMI_CONTINUOUS','LAB_HDL', 'GENDER')
    -  conns <- datashield.login(logins=logindata,assign=TRUE,variables=myvar)
    -
    -  # Example 1: generate all possible subsets from the table assigned above (one subset table
    -  # for each class in each factor)
    -  ds.subsetByClass(x='D', subsets='subclasses')
    -  # display the names of the subset tables that were generated in each study
    -  ds.names('subclasses')
    -
    -  # Example 2: subset the table initially assigned by the variable 'GENDER'
    -  ds.subsetByClass(x='D', subsets='subtables', variables='GENDER')
    -  # display the names of the subset tables that were generated in each study
    -  ds.names('subtables')
    -
    -  # Example 3: generate a new variable 'gender' and split it into two vectors: males
    -  # and females
    -  ds.assign(toAssign='D$GENDER', newobj='gender')
    -  ds.subsetByClass(x='gender', subsets='subvectors')
    -  # display the names of the subset vectors that were generated in each study
    -  ds.names('subvectors')
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(conns)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.summary.html b/docs/reference/ds.summary.html deleted file mode 100644 index 309c6a0d..00000000 --- a/docs/reference/ds.summary.html +++ /dev/null @@ -1,157 +0,0 @@ - -Generates the summary of a server-side object — ds.summary • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Generates the summary of a server-side object.

    -
    - -
    -
    ds.summary(x = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character string specifying the name of a numeric or factor variable.

    - - -
    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

    -

    ds.summary returns to the client-side the class and -size of the server-side object. -Also other information is returned depending on the class of the object. -For example, potentially disclosive information -such as the minimum and maximum values of numeric vectors are not returned. -The summary is given for each study separately.

    -
    -
    -

    Details

    -

    This function provides some insight about an object. Unlike the similar native R -summary function -only a limited class of objects can be used as input to reduce the risk of disclosure. -For example, the minimum and the maximum values of a numeric vector - are not given to the client because they are potentially disclosive.

    -

    server functions called: isValidDS, dimDS and colnamesDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 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") 
    -  
    -  #Calculate the summary of a numeric variable
    -  
    -  ds.summary(x = "D$LAB_TSC",
    -             datasources = connections)
    - 
    -  #Calculate the summary of a factor variable
    -
    -  ds.summary(x = "D$PM_BMI_CATEGORICAL",
    -             datasources = connections)
    -                                
    -  # Clear the Datashield R sessions and logout  
    -  datashield.logout(connections) 
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.table.html b/docs/reference/ds.table.html deleted file mode 100644 index 4c524ddd..00000000 --- a/docs/reference/ds.table.html +++ /dev/null @@ -1,302 +0,0 @@ - -Generates 1-, 2-, and 3-dimensional contingency tables with option of assigning to serverside only and producing chi-squared statistics — ds.table • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Creates 1-dimensional, 2-dimensional and 3-dimensional -tables using the table function in native R.

    -
    - -
    -
    ds.table(
    -  rvar = NULL,
    -  cvar = NULL,
    -  stvar = NULL,
    -  report.chisq.tests = FALSE,
    -  exclude = NULL,
    -  useNA = "always",
    -  suppress.chisq.warnings = FALSE,
    -  table.assign = FALSE,
    -  newobj = NULL,
    -  datasources = NULL,
    -  force.nfilter = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    rvar
    -

    is a character string (in inverted commas) specifying the -name of the variable defining the rows in all of the 2 dimensional -tables that form the output. Please see 'details' above for more -information about one-dimensional tables when a variable name is provided -by <rvar> but <cvar> and <stvar> are both NULL

    - - -
    cvar
    -

    is a character string specifying the -name of the variable defining the columns in all of the 2 dimensional -tables that form the output.

    - - -
    stvar
    -

    is a character string specifying the -name of the variable that indexes the separate two dimensional -tables in the output if the call specifies a 3 dimensional table.

    - - -
    report.chisq.tests
    -

    if TRUE, chi-squared tests -are applied to every 2 dimensional table in the output and reported -as "chisq.test_table.name". Default = FALSE.

    - - -
    exclude
    -

    this argument is passed through to the table function in -native R which is called by tableDS. The help for table in native R -indicates that 'exclude' specifies any levels that should be deleted for -all factors in rvar, cvar or stvar. If the <exclude> argument -does not include NA and if the <useNA> argument is not specified, -it implies <useNA> = "always" in DataSHIELD. If you read the help for table in native R -including the 'details' and the 'examples' (particularly 'd.patho') you -will see that the response of table to different combinations of the -<exclude> and <useNA> arguments can be non-intuitive. This is particularly -so if there is more than one type of missing (e.g. missing by observation -as well as missing because of an NaN response to a mathematical -function - such as log(-3.0)). In DataSHIELD, if you are in one -of these complex settings (which should not be very common) and -you cannot interpret the output that has been approached -you might try: (1) making sure that the variable producing the strange results -is of class factor rather than integer or numeric - although integers and -numerics are coerced to factors by ds.table they can occasionally behave less -well when the NA setting is complex; (2) specify both an <exclude> argument -e.g. exclude = c("NaN","3") and a <useNA> argument e.g. useNA= "no"; -(3) if you are excluding multiple levels e.g exclude = c("NA","3") -then you can reduce this to one e.g. exclude = c("NA") and then remove -the 3s by deleting rows of data, or converting the 3s to a different value.

    - - -
    useNA
    -

    this argument is passed through to the table function in -native R which is called by tableDS. In DataSHIELD, this argument can take -two values: "no" or "always" which indicate whether to include NA values in the table. -For further information, please see the help for the <exclude> argument (above) -and/or the help for the table function in native R. Default value is set to "always".

    - - -
    suppress.chisq.warnings
    -

    if set to TRUE, the default warnings are -suppressed that would otherwise be produced by the table function in -native R whenever an expected cell count in one or more cells is less than 5. -Default is FALSE. Further details can be found under 'details' and the -help provided for the <report.chisq.tests> argument (above).

    - - -
    table.assign
    -

    is a Boolean argument set by default to FALSE. If it is -FALSE the ds.table function acts as a standard aggregate function - -it returns the table that is specified in its call to the clientside -where it can be visualised and worked with by the analyst. But if -<table.assign> is TRUE, the same table object is also written to -the serverside. As explained under 'details' (above), this may be -useful when some elements of a table need to be used to drive forward the -overall analysis (e.g. to help select individuals for an analysis -sub-sample), but the required table cannot be visualised or returned -to the clientside because it fails disclosure rules.

    - - -
    newobj
    -

    this a character string providing a name for the output -table object to be written to the serverside if <table.assign> is TRUE. -If no explicit name for the table object is specified, but <table.assign> -is nevertheless TRUE, the name for the serverside table object defaults -to table.newobj.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default. -If the <datasources> is to be specified, it should be set without -inverted commas: e.g. datasources=connections.em or datasources=default.connections. If you wish to -apply the function solely to e.g. the second connection server in a set of three, -the argument can be specified as: e.g. datasources=connections.em[2]. -If you wish to specify the first and third connection servers in a set you specify: -e.g. datasources=connections.em[c(1,3)].

    - - -
    force.nfilter
    -

    if <force.nfilter> is non-NULL it must be specified as -a positive integer represented as a character string: e.g. "173". This -the has the effect of the standard value of 'nfilter.tab' (often 1, 3, 5 or 10 -depending what value the data custodian has selected for this particular -data set), to this new value (here, 173). CRUCIALLY, the ds.table function -only allows the standard value to be INCREASED. So if the standard value has -been set as 5 (as one of the R options set in the serverside connection), "6" and -"4981" would be allowable values for the <force.nfilter> argument but "4" or -"1" would not. The purpose of this argument is for the user or developer -to force the table to fail the disclosure control tests so the he/she can -see what then happens and check that it is behaving as anticipated/hoped.

    - -
    -
    -

    Value

    -

    Having created the requested table based on serverside data -it is returned to the clientside for the analyst to visualise (unless -it is blocked because it fails the disclosure control criteria or -there is an error for some other reason).

    -

    The clientside output from -ds.table includes error messages that identify when the creation of a -table from a particular study has failed and why. If table.assign=TRUE, -ds.table also writes the requested table as an object named by -the <newobj> argument or set to 'newObj' by default.

    -

    Further information -about the visible material passed to the clientside, and the optional -table object written to the serverside can be seen under 'details' (above).

    -
    -
    -

    Details

    -

    The ds.table function selects numeric, integer or factor -variables on the serverside which define a contingency table with up to -three dimensions. The native R table function basically operates on -factors and if variables are specified that are integers or numerics -they are first coerced to factors. If the 1-dimensional, 2-dimensional or -3-dimensional table generated from a given study satisfies appropriate -disclosure-control criteria it can be returned directly to -the clientside where it is presented as a study-specific -table and is also included in a combined table across all studies.

    -

    The data custodian responsible for data security in a -given study can specify the minimum non-zero cell count that -determines whether the disclosure-control criterion can be viewed -as having been met. If the count in any one cell in a table falls -below the specified threshold (and is also non-zero) -the whole table is blocked and cannot be returned -to the clientside. However, even if a table is potentially -disclosive it can still be written to the serverside while -an empty representation of the structure of the table is returned -to the clientside. The contents of the cells in the serverside table -object are reflected in a vector of counts which is one component of -that table object.

    -

    The true counts in the studyside vector -are replaced by a sequential set of cell-IDs running from 1:n -(where n is the total number of cells in the table) in the empty -representation of the structure of the potentially disclosive table -that is returned to the clientside. These cell-IDs reflect -the order of the counts in the true counts vector on the serverside. -In consequence, if the number 13 appears in a cell of the empty -table returned to the clientside, it means that the true count -in that same cell is held as the 13th element of the true count -vector saved on the serverside. This means that a data analyst -can still make use of the counts from a call to the ds.table -function to drive their ongoing analysis even when one or -more non-zero cell counts fall below the specified threshold -for potential disclosure risk.

    -

    Because the table object on the -serverside cannot be visualised or transferred to the clientside, -DataSHIELD ensures that although it can, in this way, be used -to advance analysis, it does not create a direct risk of disclosure.

    -

    The <rvar> argument identifies the variable defining the rows -in each of the 2-dimensional tables produced in the output.

    -

    The <cvar> -argument identifies the variable defining the columns in the 2-dimensional -tables produced in the output.

    -

    In creating a 3-dimensional table the -<stvar> ('separate tables') argument identifies the variable that -indexes the set of two dimensional tables in the output ds.table.

    -

    As a minor technicality, it should be noted that -if a 1-dimensional table is required, one only need specify a value -for the <rvar> argument and any one dimensional table in the output -is presented as a row vectors and so technically the <rvar> variable -defines the columns in that 1 x n vector. However, the ds.table -function deals with 1-dimensional tables differently to 2 and 3 -dimensional tables and key components of the output -for one dimensional tables are actually two dimensional: with -rows defined by <rvar> and with one column for each of the studies.

    -

    The output list generated by ds.table contains tables based on counts -named "table.name_counts" and other tables reporting corresponding -column proportions ("table.name_col.props") or row proportions -("table.name_row.props"). In one dimensional tables in the output the -output tables include _counts and _proportions. The latter are not -called _col.props or _row.props because, for the reasons noted -above, they are technically column proportions but are based on the -distribution of the <rvar> variable.

    -

    If the <report.chisq.tests> argument is set to TRUE, chisq tests -are applied to every 2-dimensional table in the output and reported -as "chisq.test_table.name". The <report.chisq.tests> argument -defaults to FALSE.

    -

    If there is at least one expected cell -counts < 5 in an output table, the native R <chisq.test> function -returns a warning. Because in a DataSHIELD setting this often means that -every study and several tables may return the same warning -and because it is debatable whether this warning is really -statistically important, the <suppress.chisq.warnings> argument -can be set to TRUE to block the warnings. However, it is defaulted to FALSE.

    -
    -
    -

    Author

    -

    Paul Burton and Alex Westerberg for DataSHIELD Development Team, 01/05/2020

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.table1D.html b/docs/reference/ds.table1D.html deleted file mode 100644 index cd8e6c28..00000000 --- a/docs/reference/ds.table1D.html +++ /dev/null @@ -1,178 +0,0 @@ - -Generates 1-dimensional contingency tables — ds.table1D • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    The function ds.table1D is a client-side wrapper function. -It calls the server-side function table1DDS to generate 1-dimensional -tables for all data sources.

    -
    - -
    -
    ds.table1D(
    -  x = NULL,
    -  type = "combine",
    -  warningMessage = TRUE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character, the name of a numerical vector with discrete values - usually a factor.

    - - -
    type
    -

    a character which represent the type of table to ouput: pooled table or one table for each -data source. If type is set to 'combine', a pooled 1-dimensional table is returned; if If type -is set to 'split' a 1-dimensional table is returned for each data source.

    - - -
    warningMessage
    -

    a boolean, if set to TRUE (deafult) a warning is displayed if any returned table is invalid. Warning -messages are suppressed if this parameter is set to FALSE. However the analyst can still view 'validity' information -which are stored in the output object 'validity' - see the list of output objects.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    A list object containing the following items:

    -
    counts
    -

    table(s) that hold counts for each level/category. If some cells counts are invalid (see 'Details' -section) only the total (outer) cell counts are displayed in the returned individual study tables or in the pooled -table.

    - -
    percentages
    -

    table(s) that hold percentages for each level/category. Here also inner cells are reported as -missing if one or more cells are 'invalid'.

    - -
    validity
    -

    a text that informs the analyst about the validity of the output tables. If any tables are invalid the -studies they are originated from are also mentioned in the text message.

    - -
    -
    -

    Details

    -

    The table returned by the server side function might be valid (non disclosive - -no table cell have counts between 1 and the minimal number agreed by the data owner and set in the data repository) -or invalid (potentially disclosive - one or more table cells have a count between 1 and the minimal number -agreed by the data owner). If a 1-dimensional table is invalid all the cells are set to NA except the total -count. This way it is possible the know the total count and combine total counts across data sources but it -is not possible to identify the cell(s) that had the small counts which render the table invalid.

    -
    -
    -

    See also

    -

    ds.table2D for cross-tabulating two vectors.

    -
    -
    -

    Author

    -

    Gaye, A.; Burton, P.

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # load the file that contains the login details
    -  data(logindata)
    -
    -  # login and assign all the stored variables to R
    -  conns <- datashield.login(logins=logindata,assign=TRUE)
    -
    -  # Example 1: generate a one dimensional table, outputting combined (pooled) contingency tables
    -  output <- ds.table1D(x='D$GENDER')
    -  output$counts
    -  output$percentages
    -  output$validity
    -
    -  # Example 2: generate a one dimensional table, outputting study specific contingency tables
    -  output <- ds.table1D(x='D$GENDER', type='split')
    -  output$counts
    -  output$percentages
    -  output$validity
    -
    -  # Example 3: generate a one dimensional table, outputting study specific and combined
    -  # contingency tables - see what happens if the reruened table is 'invalid'.
    -  output <- ds.table1D(x='D$DIS_CVA')
    -  output$counts
    -  output$percentages
    -  output$validity
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(conns)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.table2D.html b/docs/reference/ds.table2D.html deleted file mode 100644 index 96270839..00000000 --- a/docs/reference/ds.table2D.html +++ /dev/null @@ -1,157 +0,0 @@ - -Generates 2-dimensional contingency tables — ds.table2D • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    The function ds.table2D is a client-side wrapper function. It calls the server-side function -'table2DDS' that generates a 2-dimensional contingency table for each data source.

    -
    - -
    -
    ds.table2D(
    -  x = NULL,
    -  y = NULL,
    -  type = "both",
    -  warningMessage = TRUE,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character, the name of a numerical vector with discrete values - usually a factor.

    - - -
    y
    -

    a character, the name of a numerical vector with discrete values - usually a factor.

    - - -
    type
    -

    a character which represent the type of table to ouput: pooled table or one table for each -data source or both. If type is set to 'combine', a pooled 2-dimensional table is returned; If type -is set to 'split' a 2-dimensional table is returned for each data source. If type is set to 'both' (default) -a pooled 2-dimensional table plus a 2-dimensional table for each data source are returned.

    - - -
    warningMessage
    -

    a boolean, if set to TRUE (deafult) a warning is displayed if any returned table is invalid. Warning -messages are suppressed if this parameter is set to FALSE. However the analyst can still view 'validity' information -which are stored in the output object 'validity' - see the list of output objects.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    A list object containing the following items:

    -
    colPercent
    -

    table(s) that hold column percentages for each level/category. Inner cells are reported as -missing if one or more cells are 'invalid'.

    - -
    rowPercent
    -

    table(s) that hold row percentages for each level/category. Inner cells are reported as -missing if one or more cells are 'invalid'.

    - -
    chi2Test
    -

    Chi-squared test for homogeneity.

    - -
    counts
    -

    table(s) that hold counts for each level/category. If some cell counts are invalid (see 'Details' -section) only the total (outer) cell counts are displayed in the returned individual study tables or in the pooled -table.

    - -
    validity
    -

    a text that informs the analyst about the validity of the output tables. If any tables are invalid the -studies they are originated from are also mentioned in the text message.

    - -
    -
    -

    Details

    -

    The table returned by the server side function might be valid (non disclosive - no table cell have -counts between 1 and the minimal number agreed by the data owner and set in the data repository as the "nfilter.tab") or -invalid (potentially disclosive - one or more table cells have a count between 1 and the minimal number agreed -by the data owner). If a 2-dimensional table is invalid all the cells are set to NA except the total counts. -In this way, it is possible to combine total counts across all the data sources but it is not possible to -identify the cell(s) that had the small counts which render the table invalid.

    -
    -
    -

    See also

    -

    ds.table1D for the tabulating one vector.

    -
    -
    -

    Author

    -

    Amadou Gaye, Paul Burton, Demetris Avraam, for DataSHIELD Development Team

    -
    - -
    -

    Examples

    - -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.tapply.assign.html b/docs/reference/ds.tapply.assign.html deleted file mode 100644 index c65eeacf..00000000 --- a/docs/reference/ds.tapply.assign.html +++ /dev/null @@ -1,230 +0,0 @@ - -Applies a Function Over a Ragged Array on the server-side — ds.tapply.assign • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Applies one of a selected range of functions to summarize an -outcome variable over one or more indexing factors and write the resultant -summary as an object on the server-side.

    -
    - -
    -
    ds.tapply.assign(
    -  X.name = NULL,
    -  INDEX.names = NULL,
    -  FUN.name = NULL,
    -  newobj = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    X.name
    -

    a character string specifying the name of the variable to be summarized.

    - - -
    INDEX.names
    -

    a character string specifying the name of a single factor -or a vector of names of up to two factors to index the variable to be summarized. -For more information see Details.

    - - -
    FUN.name
    -

    a character string specifying the name of one of the allowable -summarizing functions. This can be set as: -"N" (or "length"), "mean","sd", "sum", -or "quantile". -For more information see Details.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default tapply.assign.newobj.

    - - -
    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

    -

    ds.tapply.assign returns an array of the summarized values. -The array is written to the server-side. It has the same number of -dimensions as INDEX.

    -
    -
    -

    Details

    -

    This function applies one of -a selected range of functions to each cell of a ragged array, -that is to each (non-empty) -group of values given by each unique combination of a series of indexing factors.

    -

    The range of allowable summarizing functions for DataSHIELD ds.tapply function -is much more restrictive than for the native R tapply function. -The reason for this is the protection against disclosure risk.

    - -

    Should other functions -be required in the future then, provided they are non-disclosive, the DataSHIELD development -team could work on them if requested.

    -

    To protect against disclosure the -number of observations in each summarizing group in each source is calculated -and if any of these falls below the value of nfilter.tab -(the minimum allowable non-zero count -in a contingency table) the tapply analysis of that source will return only an error message. -The value of nfilter.tab is can be set and modified only by the data custodian. If an -analytic team wishes the value to be reduced (e.g. to 1 which will allow any output -from tapply to be returned) this needs to formally be discussed and agreed -with the data custodian.

    -

    If the reason for the tapply analysis is, for example, to break -a dataset down into a small number of values for each individual and then to flag up -which individuals have got at least one positive value for a binary outcome variable, then -that flagging does not have to be overtly returned to the client-side. Rather, it can be -written as a vector to the server-side at each source (which, like any other server-side -object, cannot then be seen, abstracted or copied). This can be done using -ds.tapply.assign which writes the results as a newobj to the server-side -and does not test the number of observations in each group against nfilter.tab. -For more information see the help option of ds.tapply.assign function.

    -

    The native R -tapply function has optional arguments such as na.rm = TRUE for FUN = mean -which will exclude any NAs from the outcome variable to be summarized. -However, in order to keep DataSHIELD's ds.tapply and ds.tapply.assign -functions straightforward, the -server-side functions tapplyDS and tapplyDS.assign both starts by stripping -any observations which have missing (NA) values in either the outcome variable or in -any one of the indexing factors. In consequence, the resultant analyses are always based -on complete cases.

    -

    In INDEX.names argument the native R tapply function -can coerce non-factor vectors into factors. However, this does not always work when -using the DataSHIELD ds.tapply or ds.tapply.assign -functions so if you are concerned that -an indexing vector is not being treated correctly as a factor, -please first declare it explicitly as a factor using ds.asFactor.

    -

    In FUN.name argument the allowable functions are: N or length (the number -of (non-missing) observations in the group defined by each combination of indexing -factors); mean; SD (standard deviation); sum; quantile (with quantile probabilities set at -c(0.05,0.1,0.2,0.25,0.3,0.33,0.4,0.5,0.6,0.67,0.7,0.75,0.8,0.9,0.95)).

    -

    Server function called: ds.tapply.assign

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Apply a Function Over a Server-Side Ragged Array. 
    -  # Write the resultant object on the server-side
    -  
    -  
    -  ds.assign(toAssign = "D$LAB_TSC",
    -            newobj = "LAB_TSC",
    -            datasources = connections)
    -            
    -  ds.assign(toAssign = "D$GENDER",
    -            newobj =  "GENDER",
    -            datasources = connections)
    -            
    -  ds.tapply.assign(X.name = "LAB_TSC",
    -                   INDEX.names = c("GENDER"),
    -                   FUN.name = "mean",
    -                   newobj="fun_mean.newobj",
    -                   datasources = connections)
    -                 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  } # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.tapply.html b/docs/reference/ds.tapply.html deleted file mode 100644 index d1d6d8d8..00000000 --- a/docs/reference/ds.tapply.html +++ /dev/null @@ -1,221 +0,0 @@ - -Applies a Function Over a Server-Side Ragged Array — ds.tapply • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Apply one of a selected range of functions to summarize an -outcome variable over one or more indexing factors. -The resultant summary is written to the client-side.

    -
    - -
    -
    ds.tapply(
    -  X.name = NULL,
    -  INDEX.names = NULL,
    -  FUN.name = NULL,
    -  datasources = NULL
    -)
    -
    - -
    -

    Arguments

    - - -
    X.name
    -

    a character string specifying the name of the variable to be summarized.

    - - -
    INDEX.names
    -

    a character string specifying the name of a single factor -or a list or vector of names of up to two factors to index the variable to be summarized. -For more information see Details.

    - - -
    FUN.name
    -

    a character string specifying the name of one of the allowable -summarizing functions. This can be set as: -"N" (or "length"), "mean","sd", "sum", -or "quantile". -For more information see Details.

    - - -
    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

    -

    ds.tapply returns to the client-side an array of the summarized values. -It has the same number of dimensions as INDEX.

    -
    -
    -

    Details

    -

    This function is similar to a native R function tapply(). -It applies one of a selected range of functions to each cell -of a ragged array, that is to each (non-empty) -group of values given by each unique combination of a series of indexing factors.

    -

    The range of allowable summarizing functions for DataSHIELD ds.tapply function -is much more restrictive than for the native R tapply function. -The reason for this is the protection against disclosure risk.

    - -

    Should other functions -be required in the future then, provided they are non-disclosive, the DataSHIELD development -team could work on them if requested.

    -

    To protect against disclosure the -number of observations in each summarizing group in each source is calculated -and if any of these falls below the value of nfilter.tab -(the minimum allowable non-zero count -in a contingency table) the tapply analysis of that source will return only an error message. -The value of nfilter.tab is can be set and modified only by the data custodian. If an -analytic team wishes the value to be reduced (e.g. to 1 which will allow any output -from tapply to be returned) this needs to formally be discussed and agreed -with the data custodian.

    -

    If the reason for the tapply analysis is, for example, to break -a dataset down into a small number of values for each individual and then to flag up -which individuals have got at least one positive value for a binary outcome variable, then -that flagging does not have to be overtly returned to the client-side. Rather, it can be -written as a vector to the server-side at each source (which, like any other server-side -object, cannot then be seen, abstracted or copied). This can be done using -ds.tapply.assign which writes the results as a newobj to the server-side -and does not test the number of observations in each group against nfilter.tab. -For more information see the help option of ds.tapply.assign function.

    -

    The native R -tapply function has optional arguments such as na.rm = TRUE for FUN = mean -which will exclude any NAs from the outcome variable to be summarized. -However, in order to keep DataSHIELD's ds.tapply and ds.tapply.assign -functions straightforward, the -server-side functions tapplyDS and tapplyDS.assign both starts by stripping -any observations which have missing (NA) values in either the outcome variable or in -any one of the indexing factors. In consequence, the resultant analyses are always based -on complete cases.

    -

    In INDEX.names argument the native R tapply function -can coerce non-factor vectors into factors. However, this does not always work when -using the DataSHIELD ds.tapply or ds.tapply.assign -functions so if you are concerned that -an indexing vector is not being treated correctly as a factor, -please first declare it explicitly as a factor using ds.asFactor.

    -

    In FUN.name argument the allowable functions are: N or length (the number -of (non-missing) observations in the group defined by each combination of indexing -factors); mean; SD (standard deviation); sum; quantile (with quantile probabilities set at -c(0.05,0.1,0.2,0.25,0.3,0.33,0.4,0.5,0.6,0.67,0.7,0.75,0.8,0.9,0.95)).

    -

    Server function called: tapplyDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  # Apply a Function Over a Server-Side Ragged Array
    -  
    -  ds.assign(toAssign = "D$LAB_TSC",
    -            newobj = "LAB_TSC",
    -            datasources = connections)
    -            
    -  ds.assign(toAssign = "D$GENDER",
    -            newobj =  "GENDER",
    -            datasources = connections)
    -            
    -  ds.tapply(X.name = "LAB_TSC",
    -            INDEX.names = c("GENDER"),
    -            FUN.name = "mean",
    -            datasources = connections)
    -                 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # } 
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.testObjExists.html b/docs/reference/ds.testObjExists.html deleted file mode 100644 index 2dc6b97d..00000000 --- a/docs/reference/ds.testObjExists.html +++ /dev/null @@ -1,149 +0,0 @@ - -Checks if an R object exists on the server-side — ds.testObjExists • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This function checks that a specified data object exists or has been correctly created on a -specified set of data servers.

    -
    - -
    -
    ds.testObjExists(test.obj.name = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    test.obj.name
    -

    a character string specifying the name of the object to search.

    - - -
    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

    -

    ds.testObjExists returns a list of messages specifying that the object exists -on the server-side. -If the specified object does not exist in at least one -of the specified data sources or it exists but is of -class NULL, the function returns an error message specifying that -the object does not exist in all data sources.

    -
    -
    -

    Details

    -

    Close copies of the code in this function -are embedded into other functions that create an object and you then wish to test whether it has successfully -been created e.g. ds.make or ds.asFactor.

    -

    Server function called: testObjExistsDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Check if D object exists on the server-side
    -  
    -  ds.testObjExists(test.obj.name = "D",
    -                   datasources = connections)
    - 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.unList.html b/docs/reference/ds.unList.html deleted file mode 100644 index 1a0b9c55..00000000 --- a/docs/reference/ds.unList.html +++ /dev/null @@ -1,167 +0,0 @@ - -Flattens Server-Side Lists — ds.unList • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Coerces an object of list class back to the class it was when -it was coerced into a list.

    -
    - -
    -
    ds.unList(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string specifying the name of the input object to be unlisted.

    - - -
    newobj
    -

    a character string that provides the name for the output variable -that is stored on the data servers. Default unlist.newobj.

    - - -
    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

    -

    ds.unList returns to the server-side the unlist object. -Also, two validity messages are returned to the client-side -indicating whether the new object has been created in each data source and if so whether -it is in a valid form.

    -
    -
    -

    Details

    -

    This function is similar to the native R function unlist.

    -

    When an object is coerced to a list, depending -on the class of the original object some information may be lost. Thus, -for example, when a data frame is coerced to list the information that -underpins the structure of the data frame is lost and when it is -subject to the function ds.unList it is returned to a simpler -class than data frame e.g. numeric (basically a numeric vector -containing all of the original data in all variables in the data frame -but with no structure). If you wish to reconstruct the original -data frame you, therefore, need to specify this structure again e.g. -the column names, etc.

    -

    Server function called: unListDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Create a list on the server-side
    -  
    -  ds.asList(x.name = "D", 
    -            newobj = "list.D",
    -            datasources = connections)
    -  
    -  #Flatten a server-side lists
    -  
    -  ds.unList(x.name = "list.D",
    -            newobj = "un.list.D",
    -           datasources = connections)
    - 
    -  # Clear the Datashield R sessions and logout                 
    -  datashield.logout(connections) 
    -  
    -} # }   
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.unique.html b/docs/reference/ds.unique.html deleted file mode 100644 index 5d1cd79b..00000000 --- a/docs/reference/ds.unique.html +++ /dev/null @@ -1,140 +0,0 @@ - -Perform 'unique' on a variable on the server-side — ds.unique • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Perform 'unique', from the 'base' package on a specified variable on the server-side

    -
    - -
    -
    ds.unique(x.name = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x.name
    -

    a character string providing the name of the varable, in the server, to perform unique upon

    - - -
    newobj
    -

    a character string that provides the name for the output object -that is stored on the data servers. Default unique.newobj.

    - - -
    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

    -

    ds.unique returns the vector of unique R objects which are written to the server-side.

    -
    -
    -

    Details

    -

    Will create a vector or list which has no duplicate values.

    -

    Server function called: uniqueDS

    -
    -
    -

    Author

    -

    Stuart Wheater, DataSHIELD Development Team

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -  # 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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/",
    -                 user = "administrator", password = "datashield_test&",
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D")
    -
    -  # Create a vector with combined objects
    -  ds.unique(x.name = "D$LAB_TSC", newobj = "new.vect", datasources = connections)
    -
    -  # Clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.var.html b/docs/reference/ds.var.html deleted file mode 100644 index 030dc4cd..00000000 --- a/docs/reference/ds.var.html +++ /dev/null @@ -1,171 +0,0 @@ - -Computes server-side vector variance — ds.var • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Computes the variance of a given server-side vector.

    -
    - -
    -
    ds.var(x = NULL, type = "split", checks = FALSE, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character specifying the name of a numerical vector.

    - - -
    type
    -

    a character string that represents the type of analysis to carry out. -This can be set as 'combine', 'combined', 'combines', -'split', 'splits', 's', -'both' or 'b'. -For more information see Details.

    - - -
    checks
    -

    logical. If TRUE optional checks of model -components will be undertaken. Default is FALSE to save time. -It is suggested that checks -should only be undertaken once the function call has failed.

    - - -
    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

    -

    ds.var returns to the client-side a list including:

    -

    Variance.by.Study: estimated variance, Nmissing -(number of missing observations), Nvalid (number of valid observations) and -Ntotal (sum of missing and valid observations) -separately for each study (if type = split or type = both).
    Global.Variance: estimated variance, Nmissing, Nvalid and Ntotal -across all studies combined (if type = combine or type = both).
    Nstudies: number of studies being analysed.
    ValidityMessage: indicates if the analysis was possible.

    -
    -
    -

    Details

    -

    This function is similar to the R function var.

    -

    The function can carry out 3 types of analysis depending on -the argument type:
    -(1) If type is set to 'combine', 'combined', -'combines' or 'c', a global variance is calculated.
    -(2) If type is set to 'split', 'splits' or 's', - the variance is calculated separately for each study.
    -(3) If type is set to 'both' or 'b', -both sets of outputs are produced.

    -

    Server function called: varDS

    -
    -
    -

    Author

    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") 
    -  
    -  #Calculate the variance of a vector in the server-side
    -  
    -  ds.var(x = "D$LAB_TSC",
    -          type = "split",
    -          checks = FALSE,
    -          datasources = connections)
    -             
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/ds.vectorCalc.html b/docs/reference/ds.vectorCalc.html deleted file mode 100644 index 43e81df9..00000000 --- a/docs/reference/ds.vectorCalc.html +++ /dev/null @@ -1,138 +0,0 @@ - -Performs a mathematical operation on two or more vectors — ds.vectorCalc • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Carries out a row-wise operation on two or more vector. The function calls no -server side function; it uses the R operation symbols built in DataSHIELD.

    -
    - -
    -
    ds.vectorCalc(x = NULL, calc = NULL, newobj = NULL, datasources = NULL)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a vector of characters, the names of the vectors to include in the operation.

    - - -
    calc
    -

    a character, a symbol that indicates the mathematical operation to carry out: -'+' for addition, '/' for division, *' for multiplication and '-' for subtraction.

    - - -
    newobj
    -

    the name of the output object. By default the name is 'vectorcalc.newobj'.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    no data are returned to user, the output vector is stored on the server side.

    -
    -
    -

    Details

    -

    In DataSHIELD it is possible to perform an operation on vectors by just using the relevant -R symbols (e.g. '+' for addtion, '*' for multiplication, '-' for substraction and '/' for division). -This might however be inconvenient if the number of vectors to include in the operation is large. -This function takes the names of two or more vectors and performs the desired operation which could be -an addition, a multiplication, a substraction or a division. If one or more vectors have a missing value -at any one entry (i.e. observation), the operation returns a missing value ('NA') for that entry; the output -vectors has, hence the same length as the input vectors.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    -

    Examples

    -
    if (FALSE) { # \dontrun{
    -
    -  # load the file that contains the login details
    -  data(logindata)
    -
    -  # login and assign the required variables to R
    -  myvar <- list('LAB_TSC','LAB_HDL')
    -  conns <- datashield.login(logins=logindata,assign=TRUE,variables=myvar)
    -
    -  # performs an addtion of 'LAB_TSC' and 'LAB_HDL'
    -  myvectors <- c('D$LAB_TSC', 'D$LAB_HDL')
    -  ds.vectorCalc(x=myvectors, calc='+')
    -
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(conns)
    -
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/extract.html b/docs/reference/extract.html deleted file mode 100644 index eacb3fcf..00000000 --- a/docs/reference/extract.html +++ /dev/null @@ -1,90 +0,0 @@ - -Splits character by '$' and returns the single characters — extract • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    extract(input)
    -
    - -
    -

    Arguments

    - - -
    input
    -

    a vector or a list of characters

    - -
    -
    -

    Value

    -

    a vector of characters

    -
    -
    -

    Details

    -

    Not required

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/getPooledMean.html b/docs/reference/getPooledMean.html deleted file mode 100644 index 4986842d..00000000 --- a/docs/reference/getPooledMean.html +++ /dev/null @@ -1,97 +0,0 @@ - -Gets a pooled statistical mean — getPooledMean • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    getPooledMean(dtsources, x)
    -
    - -
    -

    Arguments

    - - -
    dtsources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    x
    -

    a character, the name of a numeric vector

    - -
    -
    -

    Value

    -

    a pooled mean

    -
    -
    -

    Details

    -

    This function is called to avoid calling the client function 'ds.mean' -which may stop the process due to some checks not required when computing a mean inside -a function.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/getPooledVar.html b/docs/reference/getPooledVar.html deleted file mode 100644 index 0286fd8e..00000000 --- a/docs/reference/getPooledVar.html +++ /dev/null @@ -1,97 +0,0 @@ - -Gets a pooled variance — getPooledVar • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    getPooledVar(dtsources, x)
    -
    - -
    -

    Arguments

    - - -
    dtsources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    x
    -

    a character, the name of a numeric vector

    - -
    -
    -

    Value

    -

    a pooled variance

    -
    -
    -

    Details

    -

    This function is called to avoid calling the client function 'ds.var' -which may stop the process due to some checks not required when computing a mean inside -a function.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/glmChecks.html b/docs/reference/glmChecks.html deleted file mode 100644 index 5a944f9e..00000000 --- a/docs/reference/glmChecks.html +++ /dev/null @@ -1,118 +0,0 @@ - -Checks if the elements in the glm model have the right characteristics — glmChecks • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function required by the client function ds.glm -to verify all the variables and ensure the process does not halt inadvertanly.

    -
    - -
    -
    glmChecks(formula, data, offset, weights, datasources)
    -
    - -
    -

    Arguments

    - - -
    formula
    -

    a character, a regression formula given as a string character

    - - -
    data
    -

    a character, the name of an optional data frame containing the variables in -in the formula.

    - - -
    offset
    -

    null or a numreric vector that can be used to specify an a priori known component to be -included in the linear predictor during fitting.

    - - -
    weights
    -

    a character, the name of an optional vector of 'prior weights' to be used in the fitting -process. Should be NULL or a numeric vector.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    an integer 0 if check was passed and 1 if failed

    -
    -
    -

    Details

    -

    the variables are checked to ensure they are defined, not empty (i.e. are not missing -at complete) and evantually (if 'offset' or 'weights') are of 'numeric' with non negative value -(if 'weights').

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/index.html b/docs/reference/index.html deleted file mode 100644 index 0ceeb7bf..00000000 --- a/docs/reference/index.html +++ /dev/null @@ -1,552 +0,0 @@ - -Package index • dsBaseClient - - -
    -
    - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    All functions

    -

    -
    -

    ds.Boole()

    -

    Converts a server-side R object into Boolean indicators

    -

    ds.abs()

    -

    Computes the absolute values of a variable

    -

    ds.asCharacter()

    -

    Converts a server-side R object into a character class

    -

    ds.asDataMatrix()

    -

    Converts a server-side R object into a matrix

    -

    ds.asFactor()

    -

    Converts a server-side numeric vector into a factor

    -

    ds.asFactorSimple()

    -

    Converts a numeric vector into a factor

    -

    ds.asInteger()

    -

    Converts a server-side R object into an integer class

    -

    ds.asList()

    -

    Converts a server-side R object into a list

    -

    ds.asLogical()

    -

    Converts a server-side R object into a logical class

    -

    ds.asMatrix()

    -

    Converts a server-side R object into a matrix

    -

    ds.asNumeric()

    -

    Converts a server-side R object into a numeric class

    -

    ds.assign()

    -

    Assigns an R object to a name in the server-side

    -

    ds.auc()

    -

    Calculates the Area under the curve (AUC)

    -

    ds.boxPlot()

    -

    Draw boxplot

    -

    ds.boxPlotGG()

    -

    Renders boxplot

    -

    ds.boxPlotGG_data_Treatment()

    -

    Take a data frame on the server side an arrange it to pass it to the boxplot function

    -

    ds.boxPlotGG_data_Treatment_numeric()

    -

    Take a vector on the server side an arrange it to pass it to the boxplot function

    -

    ds.boxPlotGG_numeric()

    -

    Draw boxplot with information from a numeric vector

    -

    ds.boxPlotGG_table()

    -

    Draw boxplot with information from a data frame

    -

    ds.bp_standards()

    -

    Calculates Blood pressure z-scores

    -

    ds.c()

    -

    Combines values into a vector or list in the server-side

    -

    ds.cbind()

    -

    Combines R objects by columns in the server-side

    -

    ds.changeRefGroup()

    -

    Changes the reference level of a factor in the server-side

    -

    ds.class()

    -

    Class of the R object in the server-side

    -

    ds.colnames()

    -

    Produces column names of the R object in the server-side

    -

    ds.completeCases()

    -

    Identifies complete cases in server-side R objects

    -

    ds.contourPlot()

    -

    Generates a contour plot

    -

    ds.cor()

    -

    Calculates the correlation of R objects in the server-side

    -

    ds.corTest()

    -

    Tests for correlation between paired samples in the server-side

    -

    ds.cov()

    -

    Calculates the covariance of R objects in the server-side

    -

    ds.dataFrame()

    -

    Generates a data frame object in the server-side

    -

    ds.dataFrameFill()

    -

    Creates missing values columns in the server-side

    -

    ds.dataFrameSort()

    -

    Sorts data frames in the server-side

    -

    ds.dataFrameSubset()

    -

    Sub-sets data frames in the server-side

    -

    ds.densityGrid()

    -

    Generates a density grid in the client-side

    -

    ds.dim()

    -

    Retrieves the dimension of a server-side R object

    -

    ds.dmtC2S()

    -

    Copy a clientside data.frame, matrix or tibble to the serverside

    -

    ds.elspline()

    -

    Basis for a piecewise linear spline with meaningful coefficients

    -

    ds.exists()

    -

    Checks if an object is defined on the server-side

    -

    ds.exp()

    -

    Computes the exponentials in the server-side

    -

    ds.extractQuantiles()

    -

    Secure ranking of a vector across all sources and use of these ranks to estimate global quantiles across all studies

    -

    ds.forestplot()

    -

    Forestplot for SLMA models

    -

    ds.gamlss()

    -

    Generalized Additive Models for Location Scale and Shape

    -

    ds.getWGSR()

    -

    Computes the WHO Growth Reference z-scores of anthropometric data

    -

    ds.glm()

    -

    Fits Generalized Linear Model

    -

    ds.glmPredict()

    -

    Applies predict.glm() to a serverside glm object

    -

    ds.glmSLMA()

    -

    Fit a Generalized Linear Model (GLM) with pooling via Study Level Meta-Analysis (SLMA)

    -

    ds.glmSummary()

    -

    Summarize a glm object on the serverside

    -

    ds.glmerSLMA()

    -

    Fits Generalized Linear Mixed-Effect Models via Study-Level Meta-Analysis

    -

    ds.heatmapPlot()

    -

    Generates a Heat Map plot

    -

    ds.hetcor()

    -

    Heterogeneous Correlation Matrix

    -

    ds.histogram()

    -

    Generates a histogram plot

    -

    ds.igb_standards()

    -

    Converts birth measurements to intergrowth z-scores/centiles

    -

    ds.isNA()

    -

    Checks if a server-side vector is empty

    -

    ds.isValid()

    -

    Checks if a server-side object is valid

    -

    ds.kurtosis()

    -

    Calculates the kurtosis of a numeric variable

    -

    ds.length()

    -

    Gets the length of an object in the server-side

    -

    ds.levels()

    -

    Produces levels attributes of a server-side factor

    -

    ds.lexis()

    -

    Represents follow-up in multiple states on multiple time scales

    -

    ds.list()

    -

    Constructs a list of objects in the server-side

    -

    ds.listClientsideFunctions()

    -

    Lists client-side functions

    -

    ds.listDisclosureSettings()

    -

    Lists disclosure settings

    -

    ds.listServersideFunctions()

    -

    Lists server-side functions

    -

    ds.lmerSLMA()

    -

    Fits Linear Mixed-Effect model via Study-Level Meta-Analysis

    -

    ds.log()

    -

    Computes logarithms in the server-side

    -

    ds.look()

    -

    Performs direct call to a server-side aggregate function

    -

    ds.ls()

    -

    lists all objects on a server-side environment

    -

    ds.lspline()

    -

    Basis for a piecewise linear spline with meaningful coefficients

    -

    ds.make()

    -

    Calculates a new object in the server-side

    -

    ds.matrix()

    -

    Creates a matrix on the server-side

    -

    ds.matrixDet()

    -

    Calculates de determinant of a matrix in the server-side

    -

    ds.matrixDet.report()

    -

    Returns matrix determinant to the client-side

    -

    ds.matrixDiag()

    -

    Calculates matrix diagonals in the server-side

    -

    ds.matrixDimnames()

    -

    Specifies the dimnames of the server-side matrix

    -

    ds.matrixInvert()

    -

    Inverts a server-side square matrix

    -

    ds.matrixMult()

    -

    Calculates tow matrix multiplication in the server-side

    -

    ds.matrixTranspose()

    -

    Transposes a server-side matrix

    -

    ds.mean()

    -

    Computes server-side vector statistical mean

    -

    ds.meanByClass()

    -

    Computes the mean and standard deviation across categories

    -

    ds.meanSdGp()

    -

    Computes the mean and standard deviation across groups defined by one factor

    -

    ds.merge()

    -

    Merges two data frames in the server-side

    -

    ds.message()

    -

    Returns server-side messages to the client-side

    -

    ds.metadata()

    -

    Gets the metadata associated with a variable held on the server

    -

    ds.mice()

    -

    Multivariate Imputation by Chained Equations

    -

    ds.names()

    -

    Return the names of a list object

    -

    ds.ns()

    -

    Generate a Basis Matrix for Natural Cubic Splines

    -

    ds.numNA()

    -

    Gets the number of missing values in a server-side vector

    -

    ds.qlspline()

    -

    Basis for a piecewise linear spline with meaningful coefficients

    -

    ds.quantileMean()

    -

    Computes the quantiles of a server-side variable

    -

    ds.rBinom()

    -

    Generates Binomial distribution in the server-side

    -

    ds.rNorm()

    -

    Generates Normal distribution in the server-side

    -

    ds.rPois()

    -

    Generates Poisson distribution in the server-side

    -

    ds.rUnif()

    -

    Generates Uniform distribution in the server-side

    -

    ds.ranksSecure()

    -

    Secure ranking of a vector across all sources

    -

    ds.rbind()

    -

    Combines R objects by rows in the server-side

    -

    ds.reShape()

    -

    Reshapes server-side grouped data

    -

    ds.recodeLevels()

    -

    Recodes the levels of a server-side factor vector

    -

    ds.recodeValues()

    -

    Recodes server-side variable values

    -

    ds.rep()

    -

    Creates a repetitive sequence in the server-side

    -

    ds.replaceNA()

    -

    Replaces the missing values in a server-side vector

    -

    ds.rm()

    -

    Deletes server-side R objects

    -

    ds.rowColCalc()

    -

    Computes rows and columns sums and means in the server-side

    -

    ds.sample()

    -

    Performs random sampling and permuting of vectors, dataframes and matrices

    -

    ds.scatterPlot()

    -

    Generates non-disclosive scatter plots

    -

    ds.seq()

    -

    Generates a sequence in the server-side

    -

    ds.setSeed()

    -

    Server-side random number generation

    -

    ds.skewness()

    -

    Calculates the skewness of a server-side numeric variable

    -

    ds.sqrt()

    -

    Computes the square root values of a variable

    -

    ds.subset()

    -

    Generates a valid subset of a table or a vector

    -

    ds.subsetByClass()

    -

    Generates valid subset(s) of a data frame or a factor

    -

    ds.summary()

    -

    Generates the summary of a server-side object

    -

    ds.table()

    -

    Generates 1-, 2-, and 3-dimensional contingency tables with option of assigning to serverside only and producing chi-squared statistics

    -

    ds.table1D()

    -

    Generates 1-dimensional contingency tables

    -

    ds.table2D()

    -

    Generates 2-dimensional contingency tables

    -

    ds.tapply()

    -

    Applies a Function Over a Server-Side Ragged Array

    -

    ds.tapply.assign()

    -

    Applies a Function Over a Ragged Array on the server-side

    -

    ds.testObjExists()

    -

    Checks if an R object exists on the server-side

    -

    ds.unList()

    -

    Flattens Server-Side Lists

    -

    ds.unique()

    -

    Perform 'unique' on a variable on the server-side

    -

    ds.var()

    -

    Computes server-side vector variance

    -

    ds.vectorCalc()

    -

    Performs a mathematical operation on two or more vectors

    - - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/isAssigned.html b/docs/reference/isAssigned.html deleted file mode 100644 index b3d66e75..00000000 --- a/docs/reference/isAssigned.html +++ /dev/null @@ -1,98 +0,0 @@ - -Checks an object has been generated on the server side — isAssigned • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    isAssigned(datasources = NULL, newobj = NULL)
    -
    - -
    -

    Arguments

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    newobj
    -

    a character, the name the object to look for.

    - -
    -
    -

    Value

    -

    nothing is return but the process is stopped if -the object was not generated in any one server.

    -
    -
    -

    Details

    -

    After calling an assign function it is important -to know whether or not the action has been completed by -checking if the output actually exists on the server side.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/isDefined.html b/docs/reference/isDefined.html deleted file mode 100644 index 54184020..00000000 --- a/docs/reference/isDefined.html +++ /dev/null @@ -1,109 +0,0 @@ - -Checks if the objects are defined in all studies — isDefined • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    isDefined(datasources = NULL, obj = NULL, error.message = TRUE)
    -
    - -
    -

    Arguments

    - - -
    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.

    - - -
    obj
    -

    a character vector, the name of the object(s) to look for.

    - - -
    error.message
    -

    a Boolean which specifies if the function should stop and return -an error message when the input object is not defined in one or more studies or to -return a list of TRUE/FALSE indicating in which studies the object is defined

    - -
    -
    -

    Value

    -

    returns an error message if error.message argument is set to TRUE (default) -and if the input object is not defined in one or more studies, or a Boolean value if -error.message argument is set to FALSE.

    -
    -
    -

    Details

    -

    In DataSHIELD an object included in analysis must be defined (i.e. exists) -in all the studies. If not the process should halt.

    -
    -
    -

    Author

    -

    Demetris Avraam for DataSHIELD Development Team

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/logical2int.html b/docs/reference/logical2int.html deleted file mode 100644 index ac52dac1..00000000 --- a/docs/reference/logical2int.html +++ /dev/null @@ -1,92 +0,0 @@ - -Turns a logical operator into an integer — logical2int • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    logical2int(obj = NULL)
    -
    - -
    -

    Arguments

    - - -
    obj
    -

    a character, the logical parameter to turn into an integer

    - -
    -
    -

    Value

    -

    an integer

    -
    -
    -

    Details

    -

    This function is called to turn a logical oprator given as a -character into an integer: '>' is turned into 1, '>=' into 2, '<' into 3, -'<=' into 4, '==' into 5 and '!=' into 6.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/meanByClassHelper0a.html b/docs/reference/meanByClassHelper0a.html deleted file mode 100644 index 8d6cfebe..00000000 --- a/docs/reference/meanByClassHelper0a.html +++ /dev/null @@ -1,111 +0,0 @@ - -Computes the mean values of a numeric vector across a factor vector — meanByClassHelper0a • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    meanByClassHelper0a(a, b, type, datasources)
    -
    - -
    -

    Arguments

    - - -
    a
    -

    a character, the name of a numeric vector.

    - - -
    b
    -

    a character, the name of a factor vector.

    - - -
    type
    -

    a character which represents the type of analysis to carry out. If type is set to -'combine', a pooled table of results is generated. If type is set to 'split', a table of results -is genrated for each study.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    a table or a list of tables that hold the length of the numeric variable and its mean -and standard deviation in each subgroup (subset).

    -
    -
    -

    Details

    -

    This function is called by the function 'ds.meanByClass' to produce the final tables -if the user specifies two loose vectors.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/meanByClassHelper0b.html b/docs/reference/meanByClassHelper0b.html deleted file mode 100644 index f35054ef..00000000 --- a/docs/reference/meanByClassHelper0b.html +++ /dev/null @@ -1,115 +0,0 @@ - -Runs the computation if variables are within a table structure — meanByClassHelper0b • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    meanByClassHelper0b(x, outvar, covar, type, datasources)
    -
    - -
    -

    Arguments

    - - -
    x
    -

    a character, the name of the dataset to get the subsets from.

    - - -
    outvar
    -

    a character vector, the names of the continuous variables

    - - -
    covar
    -

    a character vector, the names of up to 3 categorical variables

    - - -
    type
    -

    a character which represents the type of analysis to carry out. If type is set to -'combine', a pooled table of results is generated. If type is set to 'split', a table of results -is genrated for each study.

    - - -
    datasources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - -
    -
    -

    Value

    -

    a table or a list of tables that hold the length of the numeric variable(s) and their mean -and standard deviation in each subgroup (subset).

    -
    -
    -

    Details

    -

    This function is called by the function 'ds.meanByClass' to produce the final tables -if the user soecify a table structure.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/meanByClassHelper1.html b/docs/reference/meanByClassHelper1.html deleted file mode 100644 index 810f46d7..00000000 --- a/docs/reference/meanByClassHelper1.html +++ /dev/null @@ -1,108 +0,0 @@ - -Generates subset tables — meanByClassHelper1 • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    meanByClassHelper1(dtsource, tables, variable, categories)
    -
    - -
    -

    Arguments

    - - -
    dtsource
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    tables
    -

    a character vector, the tables to breakdown

    - - -
    variable
    -

    a character, the variable to subset on

    - - -
    categories
    -

    a character vector, the classes in the variables to subset on

    - -
    -
    -

    Value

    -

    a character the names of the new subset tables.

    -
    -
    -

    Details

    -

    This function is called by the function 'ds.meanByClass' to break down -the initial table by the specified categorical variables.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/meanByClassHelper2.html b/docs/reference/meanByClassHelper2.html deleted file mode 100644 index 7540f66f..00000000 --- a/docs/reference/meanByClassHelper2.html +++ /dev/null @@ -1,109 +0,0 @@ - -Generates a table for pooled results — meanByClassHelper2 • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    meanByClassHelper2(dtsources, tablenames, variables, invalidrecorder)
    -
    - -
    -

    Arguments

    - - -
    dtsources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    tablenames
    -

    a character vector, the name of the subset tables

    - - -
    variables
    -

    a character vector, the names of the continuous variables to computes a mean for.

    - - -
    invalidrecorder
    -

    a list, holds informations about invalid subsets in each study.

    - -
    -
    -

    Value

    -

    a matrix, a table which contains the length, mean and standard deviation of each of the -specified 'variables' in each subset table.

    -
    -
    -

    Details

    -

    This function is called by the function 'ds.meanByClass' to produce the final table -if the user sets the parmater 'type' to combine (the default behaviour of 'ds.meanByClass').

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/meanByClassHelper3.html b/docs/reference/meanByClassHelper3.html deleted file mode 100644 index c5eb79f5..00000000 --- a/docs/reference/meanByClassHelper3.html +++ /dev/null @@ -1,108 +0,0 @@ - -Generates results tables for each study separately — meanByClassHelper3 • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    meanByClassHelper3(dtsources, tablenames, variables, invalidrecorder)
    -
    - -
    -

    Arguments

    - - -
    dtsources
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    tablenames
    -

    a character vector, the name of the subset tables

    - - -
    variables
    -

    a character vector, the names of the continuous variables to computes a mean for.

    - - -
    invalidrecorder
    -

    a list, holds informations about invalid subsets in each study

    - -
    -
    -

    Value

    -

    a list which one results table for each study.

    -
    -
    -

    Details

    -

    This function is called by the function 'ds.meanByClass' to produce the final tables -if the user sets the parmater 'type' to 'split'.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/meanByClassHelper4.html b/docs/reference/meanByClassHelper4.html deleted file mode 100644 index ef479e86..00000000 --- a/docs/reference/meanByClassHelper4.html +++ /dev/null @@ -1,118 +0,0 @@ - -Gets the subset tables out of the list (i.e. unlist) — meanByClassHelper4 • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    This is an internal function.

    -
    - -
    -
    meanByClassHelper4(
    -  dtsource,
    -  alist,
    -  initialtable,
    -  variable = NA,
    -  categories = NA
    -)
    -
    - -
    -

    Arguments

    - - -
    dtsource
    -

    a list of DSConnection-class objects obtained after login. If the <datasources> -the default set of connections will be used: see datashield.connections_default.

    - - -
    alist
    -

    the name of the list that holds the final subset tables

    - - -
    initialtable
    -

    a character the name of the table that the subset were generated from

    - - -
    variable
    -

    a character, the variable to subset on

    - - -
    categories
    -

    a character vector, the classes in the variables to subset on

    - -
    -
    -

    Value

    -

    the 'loose' subset tables are stored on the server side

    -
    -
    -

    Details

    -

    This function is called by the function 'ds.meanByClass' to obtain 'loose' -subset tables because the 'subsetByClass' function does not handle a table within a list.

    -
    -
    -

    Author

    -

    Gaye, A.

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/rowPercent.html b/docs/reference/rowPercent.html deleted file mode 100644 index da5df3fd..00000000 --- a/docs/reference/rowPercent.html +++ /dev/null @@ -1,94 +0,0 @@ - -Produces row percentages — rowPercent • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    this is an INTERNAL function.

    -
    - -
    -
    rowPercent(dataframe)
    -
    - -
    -

    Arguments

    - - -
    dataframe
    -

    a data frame

    - -
    -
    -

    Value

    -

    a data frame

    -
    -
    -

    Details

    -

    The function is required required by the client function ds.table2D.

    -
    -
    -

    Author

    -

    Gaye A

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/subsetHelper.html b/docs/reference/subsetHelper.html deleted file mode 100644 index 33f96c87..00000000 --- a/docs/reference/subsetHelper.html +++ /dev/null @@ -1,149 +0,0 @@ - -Ensures that the requested subset is not larger than the original object — subsetHelper • dsBaseClient - - -
    -
    - - - -
    -
    - - -
    -

    Compares subset and original object sizes and eventually carries out subsetting.

    -
    - -
    -
    subsetHelper(dts, data, rs = NULL, cs = NULL)
    -
    - -
    -

    Arguments

    - - -
    dts
    -

    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.

    - - -
    data
    -

    a character string specifying the name of the data frame or -the factor vector and the range of the subset.

    - - -
    rs
    -

    a vector of two integers specifying the indices of the rows de extract.

    - - -
    cs
    -

    a vector of two integers or one or more characters.

    - -
    -
    -

    Value

    -

    subsetHelper returns a message or the class of the object if the -object has the same class in all studies.

    -
    -
    -

    Details

    -

    This function is called by the function ds.subset to ensure that the requested subset -is not larger than the original object.

    -

    This function is internal.

    -

    Server function called: dimDS

    -
    - -
    -

    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")
    -  builder$append(server = "study3",
    -                 url = "http://192.168.56.100:8080/", 
    -                 user = "administrator", password = "datashield_test&", 
    -                 table = "CNSIM.CNSIM3", driver = "OpalDriver")
    -  logindata <- builder$build()
    -  
    -  connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D")
    -  
    -  subsetHelper(dts = connections, 
    -               data = "D", 
    -               rs = 1:10, 
    -               cs = c("D$LAB_TSC","D$LAB_TRIG"))  
    -                      
    -  # clear the Datashield R sessions and logout
    -  datashield.logout(connections)
    -} # }
    -
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.1.1.

    -
    - -
    - - - - - - - - diff --git a/docs/sitemap.xml b/docs/sitemap.xml deleted file mode 100644 index e67315a8..00000000 --- a/docs/sitemap.xml +++ /dev/null @@ -1,148 +0,0 @@ - -/404.html -/LICENSE.html -/authors.html -/index.html -/reference/checkClass.html -/reference/colPercent.html -/reference/ds.Boole.html -/reference/ds.abs.html -/reference/ds.asCharacter.html -/reference/ds.asDataMatrix.html -/reference/ds.asFactor.html -/reference/ds.asFactorSimple.html -/reference/ds.asInteger.html -/reference/ds.asList.html -/reference/ds.asLogical.html -/reference/ds.asMatrix.html -/reference/ds.asNumeric.html -/reference/ds.assign.html -/reference/ds.auc.html -/reference/ds.boxPlot.html -/reference/ds.boxPlotGG.html -/reference/ds.boxPlotGG_data_Treatment.html -/reference/ds.boxPlotGG_data_Treatment_numeric.html -/reference/ds.boxPlotGG_numeric.html -/reference/ds.boxPlotGG_table.html -/reference/ds.bp_standards.html -/reference/ds.c.html -/reference/ds.cbind.html -/reference/ds.changeRefGroup.html -/reference/ds.class.html -/reference/ds.colnames.html -/reference/ds.completeCases.html -/reference/ds.contourPlot.html -/reference/ds.cor.html -/reference/ds.corTest.html -/reference/ds.cov.html -/reference/ds.dataFrame.html -/reference/ds.dataFrameFill.html -/reference/ds.dataFrameSort.html -/reference/ds.dataFrameSubset.html -/reference/ds.densityGrid.html -/reference/ds.dim.html -/reference/ds.dmtC2S.html -/reference/ds.elspline.html -/reference/ds.exists.html -/reference/ds.exp.html -/reference/ds.extractQuantiles.html -/reference/ds.forestplot.html -/reference/ds.gamlss.html -/reference/ds.getWGSR.html -/reference/ds.glm.html -/reference/ds.glmPredict.html -/reference/ds.glmSLMA.html -/reference/ds.glmSummary.html -/reference/ds.glmerSLMA.html -/reference/ds.heatmapPlot.html -/reference/ds.hetcor.html -/reference/ds.histogram.html -/reference/ds.igb_standards.html -/reference/ds.isNA.html -/reference/ds.isValid.html -/reference/ds.kurtosis.html -/reference/ds.length.html -/reference/ds.levels.html -/reference/ds.lexis.html -/reference/ds.list.html -/reference/ds.listClientsideFunctions.html -/reference/ds.listDisclosureSettings.html -/reference/ds.listOpals.html -/reference/ds.listServersideFunctions.html -/reference/ds.lmerSLMA.html -/reference/ds.log.html -/reference/ds.look.html -/reference/ds.ls.html -/reference/ds.lspline.html -/reference/ds.make.html -/reference/ds.matrix.html -/reference/ds.matrixDet.html -/reference/ds.matrixDet.report.html -/reference/ds.matrixDiag.html -/reference/ds.matrixDimnames.html -/reference/ds.matrixInvert.html -/reference/ds.matrixMult.html -/reference/ds.matrixTranspose.html -/reference/ds.mean.html -/reference/ds.meanByClass.html -/reference/ds.meanSdGp.html -/reference/ds.merge.html -/reference/ds.message.html -/reference/ds.metadata.html -/reference/ds.mice.html -/reference/ds.names.html -/reference/ds.ns.html -/reference/ds.numNA.html -/reference/ds.qlspline.html -/reference/ds.quantileMean.html -/reference/ds.rBinom.html -/reference/ds.rNorm.html -/reference/ds.rPois.html -/reference/ds.rUnif.html -/reference/ds.ranksSecure.html -/reference/ds.rbind.html -/reference/ds.reShape.html -/reference/ds.recodeLevels.html -/reference/ds.recodeValues.html -/reference/ds.rep.html -/reference/ds.replaceNA.html -/reference/ds.rm.html -/reference/ds.rowColCalc.html -/reference/ds.sample.html -/reference/ds.scatterPlot.html -/reference/ds.seq.html -/reference/ds.setDefaultOpals.html -/reference/ds.setSeed.html -/reference/ds.skewness.html -/reference/ds.sqrt.html -/reference/ds.subset.html -/reference/ds.subsetByClass.html -/reference/ds.summary.html -/reference/ds.table.html -/reference/ds.table1D.html -/reference/ds.table2D.html -/reference/ds.tapply.assign.html -/reference/ds.tapply.html -/reference/ds.testObjExists.html -/reference/ds.unList.html -/reference/ds.unique.html -/reference/ds.var.html -/reference/ds.vectorCalc.html -/reference/extract.html -/reference/getPooledMean.html -/reference/getPooledVar.html -/reference/glmChecks.html -/reference/index.html -/reference/isAssigned.html -/reference/isDefined.html -/reference/logical2int.html -/reference/meanByClassHelper0a.html -/reference/meanByClassHelper0b.html -/reference/meanByClassHelper1.html -/reference/meanByClassHelper2.html -/reference/meanByClassHelper3.html -/reference/meanByClassHelper4.html -/reference/rowPercent.html -/reference/subsetHelper.html - - diff --git a/dsBase_6.3.1-permissive.tar.gz b/dsBase_6.3.1-permissive.tar.gz deleted file mode 100644 index f13ac01f..00000000 Binary files a/dsBase_6.3.1-permissive.tar.gz and /dev/null differ diff --git a/dsBase_6.3.1.tar.gz b/dsBase_6.3.1.tar.gz deleted file mode 100644 index 6f5d8e16..00000000 Binary files a/dsBase_6.3.1.tar.gz and /dev/null differ diff --git a/dsDanger_6.3.1.tar.gz b/dsDanger_6.3.1.tar.gz deleted file mode 100644 index 56375b80..00000000 Binary files a/dsDanger_6.3.1.tar.gz and /dev/null differ diff --git a/man/ds.Boole.Rd b/man/ds.Boole.Rd index e102c872..0c54e075 100644 --- a/man/ds.Boole.Rd +++ b/man/ds.Boole.Rd @@ -18,7 +18,7 @@ ds.Boole( \item{V1}{A character string specifying the name of the vector to which the Boolean operator is to be applied.} -\item{V2}{A character string specifying the name of the vector to compare with \code{V1}.} +\item{V2}{A character string specifying the name of the vector to compare with \code{V1}.} \item{Boolean.operator}{A character string specifying one of six possible Boolean operators: \code{'==', '!=', '>', '>=', '<'} and \code{'<='}.} diff --git a/man/ds.asCharacter.Rd b/man/ds.asCharacter.Rd index b11fc4f2..9711719d 100644 --- a/man/ds.asCharacter.Rd +++ b/man/ds.asCharacter.Rd @@ -20,7 +20,8 @@ the default set of connections will be used: see \code{\link{datashield.connecti \value{ \code{ds.asCharacter} returns the object converted into a class character that is written to the server-side. Also, two validity messages are returned to the client-side -indicating the name of the \code{newobj} which has been created in each data source and if +indicating the name of the \code{newobj} which +has been created in each data source and if it is in a valid form. } \description{ diff --git a/man/ds.asFactor.Rd b/man/ds.asFactor.Rd index bdd9a79e..d97123ce 100644 --- a/man/ds.asFactor.Rd +++ b/man/ds.asFactor.Rd @@ -44,50 +44,13 @@ message with the name of the created object on the client-side and the output matrix or vector in the server-side. } \description{ -This function assigns a server-side numeric vector into a factor class. +This function assigns a server-side numeric vector into a factor type. } \details{ Converts a numeric vector into a factor type which is represented either as a vector or as a matrix of dummy variables depending on the argument \code{fixed.dummy.vars}. The matrix of dummy variables also depends on the argument -\code{baseline.level}. - -ds.asFactor.R and its associated serverside functions asFactorDS1 and asFactorDS2 -are to be used when you have variable that has up to 40 unique levels across -all sources combined. If one of the sources does not contain any subjects at a -particular level, that level will still be created as an empty category. In the -end all sources thus include a factor variable with consistent factor levels -across all sources - one level for every unique value that occurs in at least one -source. This is important when you wish to fit models using ds.glm because the factor -levels must be consistent across all studies or the model will not fit. - -But in order for this to be possible, all sources have to share all of the unique values -their source holds for the variable. This allows the client to create a single vector -containing all of the unique factor levels across ALL sources. But this is potentially -disclosive if there are too many levels. There are therefore two checks on the number of -levels in each source. One is simply a test of whether the number of levels exceeds -a value specified by the Roption value 'nfilter.max.levels' which is set by default -to 40, but the data custodian for the source can choose any alternative value he/she -chooses. The second test is of whether the levels are too dense: ie do the number of -levels exceed a specified proportion of the full length of the relevant vector -in the particular source. The max density is set by the Roption value 'nfilter.levels' -which takes the default value 0.33 but can again be modified by the data custodian. - -In combination, these two checks mean that if a factor has 35 levels in a given study -where the total length of the variable to be converted to a factor is 1000 individuals, -the ds.asFactor function will process that variable appropriately. But if it had had -45 levels it would have been blocked by 'nfilter.max.levels' and if the total length of -the variable in that study had only been 70 subjects it would have been blocked by -the density criterion held in 'nfilter.levels'. - -If you have a factor with more than 40 levels in each source - perhaps most commonly -an ID of some sort that you need to provide as an argument to eg a tapply function. -Then you cannot use ds.asFactor. Typically in these circumstance you simply want -to create a factor that is appropriate for each source but you do not need to ensure -that all levels are consistent across all sources. In that case, you can use the -ds.asFactorSimple function which does no more than coerce a numeric or character -variable to a factor. Because you do not need to share unique factor levels -between sources, there is then no disclosure issue. +\code{baseline.level}. To understand how the matrix of the dummy variable is created let's assume that we have the vector \code{(1, 2, 1, 3, 4, 4, 1, 3, 4, 5)} of ten integer numbers. @@ -110,7 +73,7 @@ The input vector is converted to the following matrix of dummy variables: } For the same example if the \code{baseline.level = 3} then the matrix is: - + \tabular{rrrr}{ \strong{DV1} \tab \strong{DV2} \tab \strong{DV4} \tab \strong{DV5} \cr 1 \tab 0 \tab 0 \tab 0\cr @@ -146,7 +109,7 @@ above example where the vector has five levels if we set the \code{baseline.level} equal to a value that does not belong to those five levels (\code{baseline.level=8}) the matrix of dummy variables is: - + \tabular{rrrrr}{ \strong{DV1} \tab \strong{DV2} \tab \strong{DV3} \tab \strong{DV4} \tab \strong{DV5}\cr 1 \tab 0 \tab 0 \tab 0 \tab 0\cr @@ -166,14 +129,13 @@ Server functions called: \code{asFactorDS1} and \code{asFactorDS2} } \examples{ \dontrun{ - + ## Version 6, for version 5 see 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/", @@ -188,7 +150,7 @@ Server functions called: \code{asFactorDS1} and \code{asFactorDS2} 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") @@ -206,9 +168,11 @@ Server functions called: \code{asFactorDS1} and \code{asFactorDS2} fixed.dummy.vars = TRUE, #create a matrix of dummy variables baseline.level = 1, datasources = connections[1])#only the first Opal server is used ("study1") - + # Clear the Datashield R sessions and logout datashield.logout(connections) + + } } \author{ diff --git a/man/ds.asFactorSimple.Rd b/man/ds.asFactorSimple.Rd deleted file mode 100644 index 07746f8b..00000000 --- a/man/ds.asFactorSimple.Rd +++ /dev/null @@ -1,45 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.asFactorSimple.R -\name{ds.asFactorSimple} -\alias{ds.asFactorSimple} -\title{Converts a numeric vector into a factor} -\usage{ -ds.asFactorSimple( - input.var.name = NULL, - newobj.name = NULL, - datasources = NULL -) -} -\arguments{ -\item{input.var.name}{a character string which provides -the name of the variable to be converted to a factor.} - -\item{newobj.name}{a character string that provides the name for the output variable -that is stored on the data servers. Default \code{asfactor.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -an output vector of class factor to the serverside. In addition, returns a validity -message with the name of the created object on the client-side and if creation fails an -error message which can be viewed using datashield.errors(). -} -\description{ -ds.asFactorSimple calls the assign function asFactorSimpleDS and -thereby coerces a numeric or character vector into a factor -} -\details{ -The function converts the input variable into a factor. Unlike -ds.asFactor and its serverside functions, ds.asFactorSimple does no more than -coerce the class of a variable to make it a factor on the serverside in each data source. -It does not check for or enforce consistency of factor levels across sources or allow you to -force an arbitrary set of levels unless those levels actually exist in the sources. -Furthermore, it does not allow you to create an array of -binary dummy variables that is equivalent to a factor. If you need to do any -of these things you will have to use the ds.asFactor function. -} -\author{ -DataSHIELD Development Team -} diff --git a/man/ds.asList.Rd b/man/ds.asList.Rd index dbb8439b..e8e4ef06 100644 --- a/man/ds.asList.Rd +++ b/man/ds.asList.Rd @@ -20,8 +20,9 @@ the default set of connections will be used: see \code{\link{datashield.connecti \value{ \code{ds.asList} returns the R object converted into a list which is written to the server-side. Also, two validity messages are returned to the -client-side indicating the name of the \code{newobj} which has been created in each data -source and if it is in a valid form. +client-side indicating the name of the \code{newobj} which +has been created in each data source and if +it is in a valid form. } \description{ Coerces an R object into a list. diff --git a/man/ds.asMatrix.Rd b/man/ds.asMatrix.Rd index 5c2e991a..d752f0e3 100644 --- a/man/ds.asMatrix.Rd +++ b/man/ds.asMatrix.Rd @@ -21,7 +21,8 @@ the default set of connections will be used: see \code{\link{datashield.connecti \code{ds.asMatrix} returns the object converted into a matrix that is written to the server-side. Also, two validity messages are returned to the client-side indicating the name of the \code{newobj} which -has been created in each data source and if it is in a valid form. +has been created in each data source and if +it is in a valid form. } \description{ Coerces an R object into a matrix. @@ -29,8 +30,8 @@ This converts all columns into character class. } \details{ This function is based on the native R function \code{as.matrix}. -If this function is applied to a data frame, all columns are converted into a character class. -If you wish to convert a data frame to a matrix but maintain all data columns in their +If this function is applied to a data frame, all columns are converted into a character class. + If you wish to convert a data frame to a matrix but maintain all data columns in their original class you should use the function \code{ds.asDataMatrix}. Server function called: \code{asMatrixDS} diff --git a/man/ds.asNumeric.Rd b/man/ds.asNumeric.Rd index 90f18101..980a7b06 100644 --- a/man/ds.asNumeric.Rd +++ b/man/ds.asNumeric.Rd @@ -30,12 +30,12 @@ This function is based on the native R function \code{as.numeric}. } \details{ This function is based on the native R function \code{as.numeric}. -However, it behaves differently with some specific classes of variables. For example, if the input -object is of class factor, it first converts its values into characters and then convert those to -numerics. This behavior is important for the case where the input object is of class factor having -numbers as levels. In that case, the native R -\code{as.numeric} function returns the underlying level codes and not the values as numbers. -For example \code{as.numeric} in R converts the factor vector: \cr + The only difference is that the DataSHIELD +function first converts the values of the input object into characters and then convert +those to numerics. This addition is important for the case where the input object is of class +factor having numbers as levels. In that case, the native R \code{as.numeric} function returns +the underlying level codes and not the values as numbers. For example \code{as.numeric} in R +converts the factor vector: \cr 0 1 1 2 1 0 1 0 2 2 2 1 \cr Levels: 0 1 2 \cr to the following numeric vector: diff --git a/man/ds.auc.Rd b/man/ds.auc.Rd deleted file mode 100644 index 1bdc075f..00000000 --- a/man/ds.auc.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.auc.R -\name{ds.auc} -\alias{ds.auc} -\title{Calculates the Area under the curve (AUC)} -\usage{ -ds.auc(pred = NULL, y = NULL, datasources = NULL) -} -\arguments{ -\item{pred}{the name of the vector of the predicted values} - -\item{y}{the name of the outcome variable. Note that this variable should include -the complete cases that are used in the regression model.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -returns the AUC and its standard error -} -\description{ -This function calculates the C-statistic or AUC -for logistic regression models. -} -\details{ -The AUC determines the discriminative ability of a model. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.bp_standards.Rd b/man/ds.bp_standards.Rd deleted file mode 100644 index 09ecfa01..00000000 --- a/man/ds.bp_standards.Rd +++ /dev/null @@ -1,58 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.bp_standards.R -\name{ds.bp_standards} -\alias{ds.bp_standards} -\title{Calculates Blood pressure z-scores} -\usage{ -ds.bp_standards( - sex = NULL, - age = NULL, - height = NULL, - bp = NULL, - systolic = TRUE, - newobj = NULL, - datasources = NULL -) -} -\arguments{ -\item{sex}{the name of the sex variable. The variable should be coded as 1 for males -and 2 for females. If it is coded differently (e.g. 0/1), then you can use the -ds.recodeValues function to recode the categories to 1/2 before the use of -ds.bp_standards} - -\item{age}{the name of the age variable in years.} - -\item{height}{the name of the height variable in cm.} - -\item{bp}{the name of the blood pressure variable.} - -\item{systolic}{logical. If TRUE (default) the function assumes conversion of -systolic blood pressure. If FALSE the function assumes conversion of diastolic -blood pressure.} - -\item{newobj}{a character string that provides the name for the output object -that is stored on the data servers. Default name is set to \code{bp.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -assigns a new object on the server-side. The assigned object is a list -with two elements: the 'Zbp' which is the zscores of the blood pressure and 'perc' -which is the percentiles of the BP zscores. -} -\description{ -The function calculates blood pressure z-scores in two steps: -Step 1. Calculates z-score of height according to CDC growth chart (Not the -WHO growth chart!). Step 2. Calculates z-score of BP according to the fourth -report on BP management, USA -} -\references{ -The fourth report on the diagnosis, evaluation, and treatment of high -blood pressure in children and adolescents: -https://www.nhlbi.nih.gov/sites/default/files/media/docs/hbp_ped.pdf -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.class.Rd b/man/ds.class.Rd index 59f1efa2..ecb35615 100644 --- a/man/ds.class.Rd +++ b/man/ds.class.Rd @@ -23,7 +23,7 @@ Retrieves the class of an R object. \details{ Same as the native R function \code{class}. -Server function called: \code{classDS} +Server function called: \code{class} } \examples{ \dontrun{ diff --git a/man/ds.colnames.Rd b/man/ds.colnames.Rd index 3f44ee30..9e928fb2 100644 --- a/man/ds.colnames.Rd +++ b/man/ds.colnames.Rd @@ -24,7 +24,7 @@ This function is similar to R function \code{colnames}. \details{ The input is restricted to the object of type \code{data.frame} or \code{matrix}. -Server function called: \code{colnamesDS} +Server function called: \code{colnames} } \examples{ \dontrun{ diff --git a/man/ds.contourPlot.Rd b/man/ds.contourPlot.Rd index e0df915f..304797f0 100644 --- a/man/ds.contourPlot.Rd +++ b/man/ds.contourPlot.Rd @@ -36,7 +36,7 @@ is set to \code{'smallCellsRule'} (default), the contour plot of the actual vari created but grids with low counts are replaced with grids with zero counts. If \code{method} is set to \code{'deterministic'} the contour of the scaled centroids of each k nearest neighbour of the original variables is created, where the value of \code{k} is set by the user. If the -\code{method} is set to \code{'probabilistic'}, then the contour of 'noisy' variables is generated.} +\code{method} is set to \code{'probabilistic'}, then the contour of \code{'noisy'} variables is generated.} \item{k}{the number of the nearest neighbours for which their centroid is calculated. For more information see details.} diff --git a/man/ds.corTest.Rd b/man/ds.corTest.Rd index bb2384d4..1a2338a4 100644 --- a/man/ds.corTest.Rd +++ b/man/ds.corTest.Rd @@ -4,52 +4,27 @@ \alias{ds.corTest} \title{Tests for correlation between paired samples in the server-side} \usage{ -ds.corTest( - x = NULL, - y = NULL, - method = "pearson", - exact = NULL, - conf.level = 0.95, - type = "split", - datasources = NULL -) +ds.corTest(x = NULL, y = NULL, datasources = NULL) } \arguments{ -\item{x}{a character string providing the name of a numerical vector.} +\item{x}{a character string providing the name of a numerical vector.} -\item{y}{a character string providing the name of a numerical vector.} - -\item{method}{a character string indicating which correlation coefficient is to be -used for the test. One of "pearson", "kendall", or "spearman", can be abbreviated. -Default is set to "pearson".} - -\item{exact}{a logical indicating whether an exact p-value should be computed. Used for -Kendall's tau and Spearman's rho. See ‘Details’ of R stats function \code{cor.test} for -the meaning of NULL (the default).} - -\item{conf.level}{confidence level for the returned confidence interval. Currently -only used for the Pearson product moment correlation coefficient if there are at least -4 complete pairs of observations. Default is set to 0.95.} - -\item{type}{a character string that represents the type of analysis to carry out. -This must be set to \code{'split'} or \code{'combine'}. Default is set to \code{'split'}. If -\code{type} is set to "combine" then an approximated pooled correlation is estimated based on -Fisher's z transformation.} +\item{y}{a character string providing the name of a numerical vector.} \item{datasources}{a list of \code{\link{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}}.} } \value{ -\code{ds.corTest} returns to the client-side the results of the correlation test. +\code{ds.corTest} returns to the client-side the results of the Pearson test. } \description{ -This is similar to the R stats function \code{cor.test}. +This is similar to the R base function \code{cor.test}. } \details{ -Runs a two-sided correlation test between paired samples, using one of -Pearson's product moment correlation coefficient, Kendall's tau or Spearman's rho. -Server function called: \code{corTestDS} +Runs a two-sided Pearson test with a 0.95 confidence level. + +Server function called: \code{cor.test} } \examples{ \dontrun{ @@ -89,6 +64,7 @@ Server function called: \code{corTestDS} } + } \author{ DataSHIELD Development Team diff --git a/man/ds.dmtC2S.Rd b/man/ds.dmtC2S.Rd deleted file mode 100644 index 4453cf73..00000000 --- a/man/ds.dmtC2S.Rd +++ /dev/null @@ -1,62 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.dmtC2S.R -\name{ds.dmtC2S} -\alias{ds.dmtC2S} -\title{Copy a clientside data.frame, matrix or tibble to the serverside} -\usage{ -ds.dmtC2S(dfdata = NA, newobj = NULL, datasources = NULL) -} -\arguments{ -\item{dfdata}{is a character string that specifies the name of the DMT -to be copied from the clientside to the serverside} - -\item{newobj}{A character string specifying the name of the DMT on the serverside -to which the output is to be written. If no argument is specified or it is NULL -the name of the copied DMT defaults to "dmt.copied.C2S".} - -\item{datasources}{specifies the particular 'connection object(s)' to use. -e.g. if you have several data sets in the sources you are working with -called opals.a, opals.w2, and connection.xyz, you can choose which of -these to work with. The call 'datashield.connections_find()' lists all of -the different datasets available and if one of these is called 'default.connections' -that will be the dataset used by default if no other dataset is specified. If you -wish to change the connections you wish to use by default the call -datashield.connections_default('opals.a') will set 'default.connections' -to be 'opals.a' and so in the absence of specific instructions to the contrary -(e.g. by specifiying a particular dataset to be used via the -argument) all subsequent function calls will be to the datasets held in opals.a. -If the argument is specified, it should be set without -inverted commas: e.g. datasources=opals.a or datasources=default.connections. -The argument also allows you to apply a function solely to a subset -of the studies/sources you are working with. For example, the second source -in a set of three, can be specified using a call such as datasources=connection.xyz[2]. -On the other hand, if you wish to specify solely the first and third sources, the -appropriate call will be datasources=connections.xyz[c(1,3)]} -} -\value{ -the object specified by the argument (or default name "dmt.copied.C2S") -which is written as a data.frame/matrix/tibble to the serverside. -} -\description{ -Creates a data.frame, matrix or tibble on the serverside -that is equivalent to that same data.frame, matrix or tibble (DMT) on the clientside. -} -\details{ -ds.dmtC2S calls assign function dmtC2SDS. To keep the -function simple (though less flexible), a number of the parameters specifying -the DMT to be generated on the serverside are fixed by the -characteristics of the DMT to be copied rather than explicitly -specifying them as selected arguments. In consequence, -they have been removed from the list of arguments and are instead given invariant -values in the first few lines of code. These include: from="clientside.dmt", -nrows.scalar=NULL, ncols.scalar=NULL, byrow = FALSE. The specific value -"clientside.dmt" for the argument simply -means that the required information is generated from -the characteristics of a clientside DMT. The -and are fixed empirically by the number of rows and columns of -the DMT to be copied. specifies writing the serverside DMT by -columns or by rows and this is defaulted to byrow=FALSE i.e. "by column". -} -\author{ -Paul Burton for DataSHIELD Development Team - 3rd June, 2021 -} diff --git a/man/ds.elspline.Rd b/man/ds.elspline.Rd deleted file mode 100644 index 26c5f6cc..00000000 --- a/man/ds.elspline.Rd +++ /dev/null @@ -1,53 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.elspline.R -\name{ds.elspline} -\alias{ds.elspline} -\title{Basis for a piecewise linear spline with meaningful coefficients} -\usage{ -ds.elspline( - x, - n, - marginal = FALSE, - names = NULL, - newobj = NULL, - datasources = NULL -) -} -\arguments{ -\item{x}{the name of the input numeric variable} - -\item{n}{integer greater than 2, knots are computed such that they cut n equally-spaced -intervals along the range of x} - -\item{marginal}{logical, how to parametrize the spline, see Details} - -\item{names}{character, vector of names for constructed variables} - -\item{newobj}{a character string that provides the name for the output -variable that is stored on the data servers. Default \code{elspline.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -an object of class "lspline" and "matrix", which its name is specified by the -\code{newobj} argument (or its default name "elspline.newobj"), is assigned on the serverside. -} -\description{ -This function is based on the native R function \code{elspline} from the -\code{lspline} package. This function computes the basis of piecewise-linear spline -such that, depending on the argument marginal, the coefficients can be interpreted as -(1) slopes of consecutive spline segments, or (2) slope change at consecutive knots. -} -\details{ -If marginal is FALSE (default) the coefficients of the spline correspond to -slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -the slope of the first segment. The consecutive coefficients correspond to the change -in slope as compared to the previous segment. -Function elspline wraps lspline and computes the knot positions such that they cut the -range of x into n equal-width intervals. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.extractQuantiles.Rd b/man/ds.extractQuantiles.Rd deleted file mode 100644 index b5a2ddad..00000000 --- a/man/ds.extractQuantiles.Rd +++ /dev/null @@ -1,107 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.extractQuantiles.R -\name{ds.extractQuantiles} -\alias{ds.extractQuantiles} -\title{Secure ranking of a vector across all sources and use of these ranks -to estimate global quantiles across all studies} -\usage{ -ds.extractQuantiles( - extract.quantiles, - extract.summary.output.ranks.df, - extract.ranks.sort.by, - extract.rm.residual.objects, - extract.datasources = NULL -) -} -\arguments{ -\item{extract.quantiles}{one of a restricted set of character strings. -The value of this argument is set in choosing the value of the argument - in ds.ranksSecure. In summary: to mitigate -disclosure risk only the following set of quantiles can be -generated: c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50,0.60,0.6667, -0.70,0.75,0.80,0.90,0.95,0.975). The allowable formats for the argument -are of the general form: "0.025-0.975" where the first number is the lowest -quantile to be estimated and the second number is the equivalent highest -quantile to estimate. These two quantiles are then estimated along with -all allowable quantiles in between. The allowable argument values are then: -"0.025-0.975", "0.05-0.95", "0.10-0.90", "0.20-0.80". Two alternative values -are "quartiles" i.e. c(0.25,0.50,0.75), and "median" i.e. c(0.50). The -default value is "0.05-0.95". For more details, see the associated document -"secure.global.ranking.docx". Also see the header file for ds.ranksSecure.} - -\item{extract.summary.output.ranks.df}{a character string which specifies -the optional name for the summary data.frame written to the serverside on -each data source that contains 5 of the key output variables from the ranking -procedure pertaining to that particular data source. If no name has been -specified by the argument in ds.ranksSecure, the -default name is allocated as "summary.ranks.df".The only reason the - argument needs specifying in -ds.extractQuantiles is because, ds.extractQuantiles is the last function -called by ds.ranksSecure and almost the final command of ds.extractQuantiles -to print out the name of the data frame containing the summarised ranking -information generated by ds.ranksSecure and the order in which the -data frame is laid out. This therefore appears as the last output produced -when ds.ranksSecure is run, and when this happens it is clear this relates to -the main output of ds.ranksSecure not of ds.extractQuantiles.} - -\item{extract.ranks.sort.by}{a character string taking two possible values. -These are "ID.orig" and "vals.orig". This is set via the argument - in ds.ranksSecure. For more details see the associated -document entitled "secure.global.ranking.docx". Also see the header -file for ds.ranksSecure.} - -\item{extract.rm.residual.objects}{logical value. Default = TRUE: at the beginning -and end of each run of ds.ranksSecure delete all extraneous objects that are -otherwise left behind. These are not usually needed, but could be of value -if one were investigating a problem with the ranking. FALSE: do not delete -the residual objects} - -\item{extract.datasources}{specifies the particular opal object(s) to use. -This is set via the argument in ds.ranksSecure. For more details -see the associated document entitled "secure.global.ranking.docx". Also see -the header file for ds.ranksSecure.} -} -\value{ -the final main output of ds.extractQuantiles is a data frame object -named "final.quantile.df". This contains two vectors. The first named -"evaluation.quantiles" lists the full set of quantiles you have requested -for evaluation as specified by the argument "quantiles.for.estimation" in -ds.ranksSecure and explained in more detail above under the information for -the argument "extract.quantiles" in this function. The second vector is -called "final.quantile.vector" which details the values of V2BR that -correspond to the evaluation quantiles in vector 1. The information in the -data frame "final.quantile.df" is generic: there is no information -identifying in which study each value of V2BR falls. This data frame is -written to the clientside (as it is non-disclosive) and is also copied to -the serverside in every study. This means it is easily accessible from -anywhere in the DataSHIELD environment. For more details -see the associated document entitled "secure.global.ranking.docx". -} -\description{ -Takes the global ranks and quantiles held in the serverside data -data frame that is written by ranksSecureDS4 and named as specified by the -argument () and converts these values into a series of -quantile values that identify, for example, which value of V2BR across all of -the studies corresponds to the median or to the 95% quantile. There is no -indication in which study the V2BR corresponding to a particular quantile -falls and, in fact, the relevant value may fall in more than one study and -may appear multiple times in any one study. Finally, the output data -frame containing this information is written to the clientside and to the -serverside at each study separately. -} -\details{ -ds.extractQuantiles is a clientside function which should usually -be called from within the clientside function ds.ranksSecure.If you try to -call ds.extractQuantiles directly(i.e. not by running ds.ranksSecure) you -are almost certainly going to have to set up quite a few vectors and scalars -that are normally set by ds.ranksSecure and this is likely to be difficult. -ds.extractQuantiles itself calls two serverside functions extractQuantilesDS1 -and extractQuantilesDS2. For more details about the cluster of functions that -collectively enable secure global ranking and estimation of global quantiles -see the associated document entitled "secure.global.ranking.docx". In -particular this explains how ds.extractQuantiles works. Also see the header -file for ds.ranksSecure. -} -\author{ -Paul Burton 11th November, 2021 -} diff --git a/man/ds.forestplot.Rd b/man/ds.forestplot.Rd deleted file mode 100644 index 6ce3d54c..00000000 --- a/man/ds.forestplot.Rd +++ /dev/null @@ -1,59 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.forestplot.R -\name{ds.forestplot} -\alias{ds.forestplot} -\title{Forestplot for SLMA models} -\usage{ -ds.forestplot(mod, variable = NULL, method = "ML", layout = "JAMA") -} -\arguments{ -\item{mod}{\code{list} List outputed by any of the SLMA models of DataSHIELD (\code{ds.glmerSLMA}, -\code{ds.glmSLMA}, \code{ds.lmerSLMA})} - -\item{variable}{\code{character} (default \code{NULL}) Variable to meta-analyze and visualize, by setting this -argument to \code{NULL} (default) the first independent variable will be used.} - -\item{method}{\code{character} (Default \code{"ML"}) Method to estimate the between study variance. -See details from \code{?meta::metagen} for the different options.} - -\item{layout}{\code{character} (default \code{"JAMA"}) Layout of the plot. -See details from \code{?meta::metagen} for the different options.} -} -\description{ -Draws a foresplot of the coefficients for Study-Level Meta-Analysis performed with -DataSHIELD -} -\examples{ -\dontrun{ - # Run a logistic regression - - 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") - builder$append(server = "study3", - 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") - - # Fit the logistic regression model - - mod <- ds.glmSLMA(formula = "DIS_DIAB~GENDER+PM_BMI_CONTINUOUS+LAB_HDL", - data = "D", - family = "binomial", - datasources = connections) - - # Plot the results of the model - ds.forestplot(mod) -} - -} diff --git a/man/ds.gamlss.Rd b/man/ds.gamlss.Rd deleted file mode 100644 index 60bd6d17..00000000 --- a/man/ds.gamlss.Rd +++ /dev/null @@ -1,124 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.gamlss.R -\name{ds.gamlss} -\alias{ds.gamlss} -\title{Generalized Additive Models for Location Scale and Shape} -\usage{ -ds.gamlss( - formula = NULL, - sigma.formula = "~1", - nu.formula = "~1", - tau.formula = "~1", - family = "NO()", - data = NULL, - method = "RS", - mu.fix = FALSE, - sigma.fix = FALSE, - nu.fix = FALSE, - tau.fix = FALSE, - control = c(0.001, 20, 1, 1, 1, 1, Inf), - i.control = c(0.001, 50, 30, 0.001), - centiles = FALSE, - xvar = NULL, - newobj = NULL, - datasources = NULL -) -} -\arguments{ -\item{formula}{a formula object, with the response on the left of an ~ operator, -and the terms, separated by + operators, on the right. Nonparametric smoothing -terms are indicated by pb() for penalised beta splines, cs for smoothing splines, -lo for loess smooth terms and random or ra for random terms, -e.g. 'y~cs(x,df=5)+x1+x2*x3'.} - -\item{sigma.formula}{a formula object for fitting a model to the sigma parameter, -as in the formula above, e.g. sigma.formula='~cs(x,df=5)'.} - -\item{nu.formula}{a formula object for fitting a model to the nu parameter, -e.g. nu.formula='~x'.} - -\item{tau.formula}{a formula object for fitting a model to the tau parameter, -e.g. tau.formula='~cs(x,df=2)'.} - -\item{family}{a gamlss.family object, which is used to define the distribution -and the link functions of the various parameters. The distribution families -supported by gamlss() can be found in gamlss.family. Functions such as 'BI()' -(binomial) produce a family object. Also can be given without the parentheses -i.e. 'BI'. Family functions can take arguments, as in 'BI(mu.link=probit)'.} - -\item{data}{a data frame containing the variables occurring in the formula. -If this is missing, the variables should be on the parent environment.} - -\item{method}{a character indicating the algorithm for GAMLSS. Can be either -'RS', 'CG' or 'mixed'. If method='RS' the function will use the Rigby and -Stasinopoulos algorithm, if method='CG' the function will use the Cole and -Green algorithm, and if method='mixed' the function will use the RS algorithm -twice before switching to the Cole and Green algorithm for up to 10 extra -iterations.} - -\item{mu.fix}{logical, indicate whether the mu parameter should be kept fixed -in the fitting processes.} - -\item{sigma.fix}{logical, indicate whether the sigma parameter should be kept -fixed in the fitting processes.} - -\item{nu.fix}{logical, indicate whether the nu parameter should be kept fixed -in the fitting processes.} - -\item{tau.fix}{logical, indicate whether the tau parameter should be kept fixed -in the fitting processes.} - -\item{control}{this sets the control parameters of the outer iterations algorithm -using the gamlss.control function. This is a vector of 7 numeric values: (i) c.crit -(the convergence criterion for the algorithm), (ii) n.cyc (the number of cycles of -the algorithm), (iii) mu.step (the step length for the parameter mu), (iv) sigma.step -(the step length for the parameter sigma), (v) nu.step (the step length for the -parameter nu), (vi) tau.step (the step length for the parameter tau), (vii) gd.tol -(global deviance tolerance level). The default values for these 7 parameters are -set to c(0.001, 20, 1, 1, 1, 1, Inf).} - -\item{i.control}{this sets the control parameters of the inner iterations of the -RS algorithm using the glim.control function. This is a vector of 4 numeric values: -(i) cc (the convergence criterion for the algorithm), (ii) cyc (the number of -cycles of the algorithm), (iii) bf.cyc (the number of cycles of the backfitting -algorithm), (iv) bf.tol (the convergence criterion (tolerance level) for the -backfitting algorithm). The default values for these 4 parameters are set to -c(0.001, 50, 30, 0.001).} - -\item{centiles}{logical, indicating whether the function centiles() will be used to -tabulate the sample percentages below each centile curve. Default is set to FALSE.} - -\item{xvar}{the unique explanatory variable used in the centiles() function. This -variable is used only if the centiles argument is set to TRUE. A restriction in -the centiles function is that it applies to models with one explanatory variable -only.} - -\item{newobj}{a character string that provides the name for the output object -that is stored on the data servers. Default \code{gamlss_res}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -a gamlss object with all components as in the native R gamlss function. -Individual-level information like the components y (the response response) and -residuals (the normalised quantile residuals of the model) are not disclosed to -the client-side. -} -\description{ -This function calls the gamlssDS that is a wrapper function from -the gamlss R package. The function returns an object of class "gamlss", which -is a generalized additive model for location, scale and shape (GAMLSS). The -function also saves the residuals as an object on the server-side with a name -specified by the newobj argument. In addition, if the argument centiles is set -to TRUE, the function calls the centiles function from the gamlss package and -returns the sample percentages below each centile curve. -} -\details{ -For additional details see the help header of gamlss and centiles -functions in native R gamlss package. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.glm.Rd b/man/ds.glm.Rd index 861eab67..73568276 100644 --- a/man/ds.glm.Rd +++ b/man/ds.glm.Rd @@ -95,7 +95,7 @@ The list of elements returned by \code{ds.glm} is mentioned below: \code{formula}: model formula, see description of formula as an input parameter (above). \code{coefficients}: a matrix with 5 columns: - \describe{ + \itemize{ \item{First}{: the names of all of the regression parameters (coefficients) in the model} \item{second}{: the estimated values} \item{third}{: corresponding standard errors of the estimated values} @@ -166,7 +166,7 @@ means fit all possible main effects and interactions for and between those two c In the \code{family} argument can be specified three types of models to fit: - \describe{ + \itemize{ \item{\code{"gaussian"}}{: conventional linear model with normally distributed errors} \item{\code{"binomial"}}{: conventional unconditional logistic regression model} \item{\code{"poisson"}}{: Poisson regression model which is the most used in survival analysis. diff --git a/man/ds.glmPredict.Rd b/man/ds.glmPredict.Rd index e156e6c9..c7208b94 100644 --- a/man/ds.glmPredict.Rd +++ b/man/ds.glmPredict.Rd @@ -138,7 +138,7 @@ that would normally be generated by predict.glm to a newobj on the serverside. Because no critical information is passed to the clientside, there are no disclosure issues associated with this action. Any standard DataSHIELD functions can then be applied to the newobj to interpret the output. For example, it could -be used as the basis for regression diagnostic plots. Second, the call +be used as the basis for regression diagnostic plots. Second, the call to the aggregate function creates a non-disclosive summary of all the information held in the newobj created by the assign function and returns this summary to the clientside. For example, the full list of diff --git a/man/ds.glmSLMA.Rd b/man/ds.glmSLMA.Rd index b5122e0f..5468ee97 100644 --- a/man/ds.glmSLMA.Rd +++ b/man/ds.glmSLMA.Rd @@ -14,7 +14,6 @@ ds.glmSLMA( dataName = NULL, checks = FALSE, maxit = 30, - notify.of.progress = FALSE, datasources = NULL ) } @@ -55,9 +54,6 @@ of the model. Default FALSE. For more information see \strong{Details}.} are permitted before \code{ds.glmSLMA} declares that the model has failed to converge. For more information see \strong{Details}.} -\item{notify.of.progress}{specifies if console output should be produced to indicate -progress. Default FALSE.} - \item{datasources}{a list of \code{\link{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}}.} @@ -80,7 +76,7 @@ a series of other list objects that represent inferences aggregated across studi the study specific items include: \code{coefficients}: a matrix with 5 columns: - \describe{ + \itemize{ \item{First}{: the names of all of the regression parameters (coefficients) in the model} \item{second}{: the estimated values} \item{third}{: corresponding standard errors of the estimated values} @@ -271,7 +267,7 @@ been extended to include a number of model types that are non-standard but are u relatively widely. The standard models include: - \describe{ + \itemize{ \item{\code{"gaussian"}}{: conventional linear model with normally distributed errors} \item{\code{"binomial"}}{: conventional unconditional logistic regression model} \item{\code{"poisson"}}{: Poisson regression model which is often used in epidemiological diff --git a/man/ds.glmSummary.Rd b/man/ds.glmSummary.Rd index d7906d31..625ad8f8 100644 --- a/man/ds.glmSummary.Rd +++ b/man/ds.glmSummary.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/ds.glmSummary.R \name{ds.glmSummary} \alias{ds.glmSummary} -\title{Summarize a glm object on the serverside} +\title{summarize a glm object on the serverside} \usage{ ds.glmSummary(x.name, newobj = NULL, datasources = NULL) } @@ -36,7 +36,7 @@ appropriate call will be datasources=connections.xyz[c(1,3)]} } \value{ ds.glmSummary writes a new object to the serverside with name given by -the newobj argument or if that argument is missing or null it is called "summary_glm.newobj". +the newobj argument or if that argument is missing or null it is called "summary_glm". In addition, ds.glmSummary returns an object containing two lists to the clientside the two lists are named "glm.obj" and "glm.summary.obj" which contain all of the elements of the original glm object and the summary_glm object on the serverside @@ -53,7 +53,7 @@ For further information see help for glm and summary(glm) in native R and for ds.glmSLMA in DataSHIELD. } \description{ -Summarize a glm object on the serverside to create a +summarize a glm object on the serverside to create a summary_glm object. Also identify and return components of both the glm object and the summary_glm object that can safely be sent to the clientside without a risk of disclosure diff --git a/man/ds.glmerSLMA.Rd b/man/ds.glmerSLMA.Rd index b1e3165b..0ce88508 100644 --- a/man/ds.glmerSLMA.Rd +++ b/man/ds.glmerSLMA.Rd @@ -100,7 +100,7 @@ In this case, only non-disclosive elements are returned from each study separate The list of elements returned by \code{ds.glmerSLMA} is mentioned below: \code{coefficients}: a matrix with 5 columns: - \describe{ + \itemize{ \item{First}{: the names of all of the regression parameters (coefficients) in the model} \item{second}{: the estimated values} \item{third}{: corresponding standard errors of the estimated values} @@ -195,7 +195,7 @@ problem in the model fit is encountered because the running process takes severa In the \code{family} argument can be specified two types of models to fit: - \describe{ + \itemize{ \item{\code{"binomial"}}{: logistic regression models} \item{\code{"poisson"}}{: poisson regression models} } diff --git a/man/ds.heatmapPlot.Rd b/man/ds.heatmapPlot.Rd index c1669431..b8d4d08c 100644 --- a/man/ds.heatmapPlot.Rd +++ b/man/ds.heatmapPlot.Rd @@ -71,19 +71,19 @@ are not the exact minimum and maximum values but rather close approximates of th minimum and maximum value. This was done to reduce the risk of potential disclosure. In the argument \code{type} can be specified two types of graphics to display: - \describe{ + \itemize{ \item{\code{'combine'}}{: a combined heat map plot is displayed} \item{\code{'split'}}{: each heat map is plotted separately} } In the argument \code{show} can be specified two options: - \describe{ + \itemize{ \item{\code{'all'}}{: the ranges of the variables are used as plot limits} \item{\code{'zoomed'}}{: the plot is zoomed to the region where the actual data are} } In the argument \code{method} can be specified 3 different heat map to be created: - \describe{ + \itemize{ \item{\code{'smallCellsRule'}}{: the heat map of the actual variables is created but grids with low counts are replaced with grids with zero counts} \item{\code{'deterministic'}}{: the heat map of the scaled centroids of each diff --git a/man/ds.hetcor.Rd b/man/ds.hetcor.Rd deleted file mode 100644 index aa7d0713..00000000 --- a/man/ds.hetcor.Rd +++ /dev/null @@ -1,59 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.hetcor.R -\name{ds.hetcor} -\alias{ds.hetcor} -\title{Heterogeneous Correlation Matrix} -\usage{ -ds.hetcor( - data = NULL, - ML = TRUE, - std.err = TRUE, - bins = 4, - pd = TRUE, - use = "complete.obs", - datasources = NULL -) -} -\arguments{ -\item{data}{the name of a data frame consisting of factors, ordered factors, logical variables, -character variables, and/or numeric variables, or the first of several variables.} - -\item{ML}{if TRUE, compute maximum-likelihood estimates; if FALSE (default), compute quick -two-step estimates.} - -\item{std.err}{if TRUE (default), compute standard errors.} - -\item{bins}{number of bins to use for continuous variables in testing bivariate normality; -the default is 4.} - -\item{pd}{if TRUE (default) and if the correlation matrix is not positive-definite, an attempt -will be made to adjust it to a positive-definite matrix, using the nearPD function in the Matrix -package. Note that default arguments to nearPD are used (except corr=TRUE); for more control call -nearPD directly.} - -\item{use}{if "complete.obs", remove observations with any missing data; if "pairwise.complete.obs", -compute each correlation using all observations with valid data for that pair of variables.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -Returns an object of class "hetcor" from each study, with the following components: the -correlation matrix; the type of each correlation: "Pearson", "Polychoric", or "Polyserial"; the -standard errors of the correlations, if requested; the number (or numbers) of observations on which -the correlations are based; p-values for tests of bivariate normality for each pair of variables; -the method by which any missing data were handled: "complete.obs" or "pairwise.complete.obs"; TRUE -for ML estimates, FALSE for two-step estimates. -} -\description{ -This function is based on the hetcor function from the R package \code{polycor}. -} -\details{ -Computes a heterogenous correlation matrix, consisting of Pearson product-moment -correlations between numeric variables, polyserial correlations between numeric and ordinal -variables, and polychoric correlations between ordinal variables. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.histogram.Rd b/man/ds.histogram.Rd index 12af4457..0fedbd10 100644 --- a/man/ds.histogram.Rd +++ b/man/ds.histogram.Rd @@ -62,13 +62,13 @@ distinct histograms (one for each study) or a combined histogram that merges the single plots. In the argument \code{type} can be specified two types of graphics to display: - \describe{ + \itemize{ \item{\code{'combine'}}{: a histogram that merges the single plot is displayed.} \item{\code{'split'}}{: each histogram is plotted separately.} } In the argument \code{method} can be specified 3 different histograms to be created: - \describe{ + \itemize{ \item{\code{'smallCellsRule'}}{: the histogram of the actual variable is created but bins with low counts are removed.} \item{\code{'deterministic'}}{: the histogram of the scaled centroids of each @@ -104,7 +104,7 @@ than the pre-specified threshold \code{'nfilter.noise'}. By default the value of noise is set to be equal to 0.25. In the argument \code{vertical.axis} can be specified two types of histograms: -\describe{ +\itemize{ \item{\code{'Frequency'}}{: the histogram of the frequencies is returned.} \item{\code{'Density'}}{: the histogram of the densities diff --git a/man/ds.igb_standards.Rd b/man/ds.igb_standards.Rd deleted file mode 100644 index 6ea70b2f..00000000 --- a/man/ds.igb_standards.Rd +++ /dev/null @@ -1,65 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.igb_standards.R -\name{ds.igb_standards} -\alias{ds.igb_standards} -\title{Converts birth measurements to intergrowth z-scores/centiles} -\usage{ -ds.igb_standards( - gagebrth = NULL, - z = 0, - p = 50, - val = NULL, - var = NULL, - sex = NULL, - fun = "igb_value2zscore", - newobj = NULL, - datasources = NULL -) -} -\arguments{ -\item{gagebrth}{the name of the "gestational age at birth in days" variable.} - -\item{z}{z-score(s) to convert (must be between 0 and 1). Default value is 0. -This value is used only if \code{fun} is set to "igb_zscore2value".} - -\item{p}{centile(s) to convert (must be between 0 and 100). Default value is p=50. -This value is used only if \code{fun} is set to "igb_centile2value".} - -\item{val}{the name of the anthropometric variable to convert.} - -\item{var}{the name of the measurement to convert ("lencm", "wtkg", "hcircm", "wlr").} - -\item{sex}{the name of the sex factor variable. The variable should be coded as Male/Female. -If it is coded differently (e.g. 0/1), then you can use the ds.recodeValues function to -recode the categories to Male/Female before the use of ds.igb_standards.} - -\item{fun}{the name of the function to be used. This can be one of: "igb_centile2value", -"igb_zscore2value", "igb_value2zscore" (default), "igb_value2centile".} - -\item{newobj}{a character string that provides the name for the output variable -that is stored on the data servers. Default name is set to \code{igb.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -assigns the converted measurement as a new object on the server-side -} -\description{ -Converts birth measurements to INTERGROWTH z-scores/centiles (generic) -} -\note{ -For gestational ages between 24 and 33 weeks, the INTERGROWTH very early preterm -standard is used. -} -\references{ -International standards for newborn weight, length, and head circumference by -gestational age and sex: the Newborn Cross-Sectional Study of the INTERGROWTH-21st Project -Villar, José et al. The Lancet, Volume 384, Issue 9946, 857-868 -INTERGROWTH-21st very preterm size at birth reference charts. Lancet 2016 -doi.org/10.1016/S0140-6736(16) 00384-6. Villar, José et al. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.isNA.Rd b/man/ds.isNA.Rd index 0c94b9eb..44230e9c 100644 --- a/man/ds.isNA.Rd +++ b/man/ds.isNA.Rd @@ -67,7 +67,6 @@ Server function called: \code{isNaDS} datashield.logout(connections) } - } \author{ DataSHIELD Development Team diff --git a/man/ds.isValid.Rd b/man/ds.isValid.Rd index 2bda8557..8ae359c1 100644 --- a/man/ds.isValid.Rd +++ b/man/ds.isValid.Rd @@ -66,6 +66,8 @@ Server function called: \code{isValidDS} # clear the Datashield R sessions and logout datashield.logout(connections) + + } } diff --git a/man/ds.lmerSLMA.Rd b/man/ds.lmerSLMA.Rd index 82196053..b0f6908a 100644 --- a/man/ds.lmerSLMA.Rd +++ b/man/ds.lmerSLMA.Rd @@ -95,7 +95,7 @@ The list of elements returned by \code{ds.lmerSLMA} is mentioned below: below separately for each study. \code{coefficients}: a matrix with 5 columns: - \describe{ + \itemize{ \item{First}{: the names of all of the regression parameters (coefficients) in the model} \item{second}{: the estimated values} \item{third}{: corresponding standard errors of the estimated values} diff --git a/man/ds.lspline.Rd b/man/ds.lspline.Rd deleted file mode 100644 index 550e2397..00000000 --- a/man/ds.lspline.Rd +++ /dev/null @@ -1,50 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.lspline.R -\name{ds.lspline} -\alias{ds.lspline} -\title{Basis for a piecewise linear spline with meaningful coefficients} -\usage{ -ds.lspline( - x, - knots = NULL, - marginal = FALSE, - names = NULL, - newobj = NULL, - datasources = NULL -) -} -\arguments{ -\item{x}{the name of the input numeric variable} - -\item{knots}{numeric vector of knot positions} - -\item{marginal}{logical, how to parametrize the spline, see Details} - -\item{names}{character, vector of names for constructed variables} - -\item{newobj}{a character string that provides the name for the output -variable that is stored on the data servers. Default \code{lspline.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -an object of class "lspline" and "matrix", which its name is specified by the -\code{newobj} argument (or its default name "lspline.newobj"), is assigned on the serverside. -} -\description{ -This function is based on the native R function \code{lspline} from the -\code{lspline} package. This function computes the basis of piecewise-linear spline -such that, depending on the argument marginal, the coefficients can be interpreted as -(1) slopes of consecutive spline segments, or (2) slope change at consecutive knots. -} -\details{ -If marginal is FALSE (default) the coefficients of the spline correspond to -slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -the slope of the first segment. The consecutive coefficients correspond to the change -in slope as compared to the previous segment. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.matrixDet.Rd b/man/ds.matrixDet.Rd index 1c419f4d..535b81a8 100644 --- a/man/ds.matrixDet.Rd +++ b/man/ds.matrixDet.Rd @@ -34,7 +34,8 @@ possible if the number of columns and rows of the matrix are the same. } \details{ Calculates the determinant of a square matrix on the server-side. -This function is similar to the native R \code{determinant} function. +This function is similar to the native R \code{determinant} function. + Server function called: \code{matrixDetDS2} } diff --git a/man/ds.metadata.Rd b/man/ds.metadata.Rd deleted file mode 100644 index cc43a67d..00000000 --- a/man/ds.metadata.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.metadata.R -\name{ds.metadata} -\alias{ds.metadata} -\title{Gets the metadata associated with a variable held on the server} -\usage{ -ds.metadata(x = NULL, datasources = NULL) -} -\arguments{ -\item{x}{a character string specifying the name of the object.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -\code{ds.metadata} returns to the client-side the metadata of associated to an object -held at the server. -} -\description{ -This function gets the metadata of a variable -stored on the server. -} -\details{ -Server function \code{metadataDS} is called examines the attributes associated with the variable -which are non-disclosive. -} -\examples{ -\dontrun{ - - # 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") - builder$append(server = "study3", - url = "http://192.168.56.100:8080/", - user = "administrator", password = "datashield_test&", - table = "CNSIM.CNSIM3", driver = "OpalDriver") - logindata <- builder$build() - - connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") - - # Example 1: Get the metadata associated with variable 'D' - ds.metadata(x = 'D$LAB_TSC', datasources = connections) - - # clear the Datashield R sessions and logout - DSI::datashield.logout(connections) -} - -} -\author{ -Stuart Wheater, DataSHIELD Development Team -} diff --git a/man/ds.mice.Rd b/man/ds.mice.Rd deleted file mode 100644 index 59f6f471..00000000 --- a/man/ds.mice.Rd +++ /dev/null @@ -1,81 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.mice.R -\name{ds.mice} -\alias{ds.mice} -\title{Multivariate Imputation by Chained Equations} -\usage{ -ds.mice( - data = NULL, - m = 5, - maxit = 5, - method = NULL, - predictorMatrix = NULL, - post = NULL, - seed = NA, - newobj_mids = NULL, - newobj_df = NULL, - datasources = NULL -) -} -\arguments{ -\item{data}{a data frame or a matrix containing the incomplete data.} - -\item{m}{Number of multiple imputations. The default is m=5.} - -\item{maxit}{A scalar giving the number of iterations. The default is 5.} - -\item{method}{Can be either a single string, or a vector of strings with length -ncol(data), specifying the imputation method to be used for each column in data. If -specified as a single string, the same method will be used for all blocks. The default -imputation method (when no argument is specified) depends on the measurement level of -the target column, as regulated by the defaultMethod argument in native R mice function. -Columns that need not be imputed have the empty method "".} - -\item{predictorMatrix}{A numeric matrix of ncol(data) rows and ncol(data) columns, -containing 0/1 data specifying the set of predictors to be used for each target column. -Each row corresponds to a variable to be imputed. A value of 1 means that the column -variable is used as a predictor for the target variables (in the rows). By default, the -predictorMatrix is a square matrix of ncol(data) rows and columns with all 1's, except -for the diagonal.} - -\item{post}{A vector of strings with length ncol(data) specifying expressions as strings. -Each string is parsed and executed within the sampler() function to post-process imputed -values during the iterations. The default is a vector of empty strings, indicating no -post-processing. Multivariate (block) imputation methods ignore the post parameter.} - -\item{seed}{either NA (default) or "fixed". If seed is set to "fixed" then a fixed -seed random number generator which is study-specific is used.} - -\item{newobj_mids}{a character string that provides the name for the output mids object -that is stored on the data servers. Default \code{mids_object}.} - -\item{newobj_df}{a character string that provides the name for the output dataframes -that are stored on the data servers. Default \code{imputationSet}. For example, if m=5, and -newobj_df="imputationSet", then five imputed dataframes are saved on the servers with names -imputationSet.1, imputationSet.2, imputationSet.3, imputationSet.4, imputationSet.5.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -a list with three elements: the method, the predictorMatrix and the post. -} -\description{ -This function calls the miceDS that is a wrapper function of the mice -from the mice R package. The function creates multiple imputations (replacement values) -for multivariate missing data. The method is based on Fully Conditional Specification, -where each incomplete variable is imputed by a separate model. The MICE algorithm can -impute mixes of continuous, binary, unordered categorical and ordered categorical data. -In addition, MICE can impute continuous two-level data, and maintain consistency between -imputations by means of passive imputation. It is recommended that the imputation is -done in each datasource separately. Otherwise the user should make sure that the input -data have the same columns in all datasources and in the same order. -} -\details{ -For additional details see the help header of mice function in native R mice -package. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.names.Rd b/man/ds.names.Rd index daee0cba..a2e48bf2 100644 --- a/man/ds.names.Rd +++ b/man/ds.names.Rd @@ -28,7 +28,7 @@ the native R function \code{names} but it does not subsume all functionality, for example, it only works to extract names that already exist, not to create new names for objects. The function is restricted to objects of type list, but this includes objects that have a primary class other than list but which -return TRUE to the native R function \code{is.list}. As an example this includes +return TRUE to the native R function {is.list}. As an example this includes the multi-component object created by fitting a generalized linear model using ds.glmSLMA. The resultant object saved on each server separately is formally of class "glm" and "ls" but responds TRUE to is.list(), diff --git a/man/ds.ns.Rd b/man/ds.ns.Rd deleted file mode 100644 index 51e3166b..00000000 --- a/man/ds.ns.Rd +++ /dev/null @@ -1,62 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.ns.R -\name{ds.ns} -\alias{ds.ns} -\title{Generate a Basis Matrix for Natural Cubic Splines} -\usage{ -ds.ns( - x, - df = NULL, - knots = NULL, - intercept = FALSE, - Boundary.knots = NULL, - newobj = NULL, - datasources = NULL -) -} -\arguments{ -\item{x}{the predictor variable. Missing values are allowed.} - -\item{df}{degrees of freedom. One can supply df rather than knots; ns() then chooses -df - 1 - intercept knots at suitably chosen quantiles of x (which will ignore missing values). -The default, df = NULL, sets the number of inner knots as length(knots).} - -\item{knots}{breakpoints that define the spline. The default is no knots; together with the -natural boundary conditions this results in a basis for linear regression on x. Typical values -are the mean or median for one knot, quantiles for more knots. See also Boundary.knots.} - -\item{intercept}{if TRUE, an intercept is included in the basis; default is FALSE.} - -\item{Boundary.knots}{boundary points at which to impose the natural boundary conditions and -anchor the B-spline basis (default the range of the data). If both knots and Boundary.knots -are supplied, the basis parameters do not depend on x. Data can extend beyond Boundary.knots.} - -\item{newobj}{a character string that provides the name for the output -variable that is stored on the data servers. Default \code{ns.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -A matrix of dimension length(x) * df where either df was supplied or if knots were -supplied, df = length(knots) + 1 + intercept. Attributes are returned that correspond to the -arguments to ns, and explicitly give the knots, Boundary.knots etc for use by predict.ns(). -The object is assigned at each serverside. -} -\description{ -This function is based on the native R function \code{ns} from the -\code{splines} package. This function generate the B-spline basis matrix for a natural -cubic spline. -} -\details{ -\code{ns} is native R is based on the function \code{splineDesign}. It generates -a basis matrix for representing the family of piecewise-cubic splines with the specified -sequence of interior knots, and the natural boundary conditions. These enforce the constraint -that the function is linear beyond the boundary knots, which can either be supplied or default -to the extremes of the data. -A primary use is in modeling formula to directly specify a natural spline term in a model. -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.qlspline.Rd b/man/ds.qlspline.Rd deleted file mode 100644 index fc9285ae..00000000 --- a/man/ds.qlspline.Rd +++ /dev/null @@ -1,60 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.qlspline.R -\name{ds.qlspline} -\alias{ds.qlspline} -\title{Basis for a piecewise linear spline with meaningful coefficients} -\usage{ -ds.qlspline( - x, - q, - na.rm = TRUE, - marginal = FALSE, - names = NULL, - newobj = NULL, - datasources = NULL -) -} -\arguments{ -\item{x}{the name of the input numeric variable} - -\item{q}{numeric, a single scalar greater or equal to 2 for a number of equal-frequency -intervals along x or a vector of numbers in (0; 1) specifying the quantiles explicitly.} - -\item{na.rm}{logical, whether NA should be removed when calculating quantiles, passed -to na.rm of quantile. Default set to TRUE} - -\item{marginal}{logical, how to parametrize the spline, see Details} - -\item{names}{character, vector of names for constructed variables} - -\item{newobj}{a character string that provides the name for the output -variable that is stored on the data servers. Default \code{qlspline.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -an object of class "lspline" and "matrix", which its name is specified by the -\code{newobj} argument (or its default name "qlspline.newobj"), is assigned on the serverside. -} -\description{ -This function is based on the native R function \code{qlspline} from the -\code{lspline} package. This function computes the basis of piecewise-linear spline -such that, depending on the argument marginal, the coefficients can be interpreted as -(1) slopes of consecutive spline segments, or (2) slope change at consecutive knots. -} -\details{ -If marginal is FALSE (default) the coefficients of the spline correspond to -slopes of the consecutive segments. If it is TRUE the first coefficient correspond to -the slope of the first segment. The consecutive coefficients correspond to the change -in slope as compared to the previous segment. -Function qlspline wraps lspline and calculates the knot positions to be at quantiles -of x. If q is a numerical scalar greater or equal to 2, the quantiles are computed at -seq(0, 1, length.out = q + 1)[-c(1, q+1)], i.e. knots are at q-tiles of the distribution -of x. Alternatively, q can be a vector of values in [0; 1] specifying the quantile -probabilities directly (the vector is passed to argument probs of quantile). -} -\author{ -Demetris Avraam for DataSHIELD Development Team -} diff --git a/man/ds.ranksSecure.Rd b/man/ds.ranksSecure.Rd deleted file mode 100644 index 3fd8ed8e..00000000 --- a/man/ds.ranksSecure.Rd +++ /dev/null @@ -1,202 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.ranksSecure.R -\name{ds.ranksSecure} -\alias{ds.ranksSecure} -\title{Secure ranking of a vector across all sources} -\usage{ -ds.ranksSecure( - input.var.name = NULL, - quantiles.for.estimation = "0.05-0.95", - generate.quantiles = TRUE, - output.ranks.df = NULL, - summary.output.ranks.df = NULL, - ranks.sort.by = "ID.orig", - shared.seed.value = 10, - synth.real.ratio = 2, - NA.manage = "NA.delete", - rm.residual.objects = TRUE, - monitor.progress = FALSE, - datasources = NULL -) -} -\arguments{ -\item{input.var.name}{a character string in a format that can pass through -the DataSHIELD R parser which specifies the name of the vector to be ranked. -Needs to have same name in each data source.} - -\item{quantiles.for.estimation}{one of a restricted set of character strings. -To mitigate disclosure risk only the following set of quantiles can be -generated: c(0.025,0.05,0.10,0.20,0.25,0.30,0.3333,0.40,0.50,0.60,0.6667, -0.70,0.75,0.80,0.90,0.95,0.975). The allowable formats for the argument -are of the general form: "0.025-0.975" where the first number is the lowest -quantile to be estimated and the second number is the equivalent highest -quantile to estimate. These two quantiles are then estimated along with -all allowable quantiles in between. The allowable argument values are then: -"0.025-0.975", "0.05-0.95", "0.10-0.90", "0.20-0.80". Two alternative values -are "quartiles" i.e. c(0.25,0.50,0.75), and "median" i.e. c(0.50). The -default value is "0.05-0.95". If the sample size is so small that an extreme -quartile could be disclosive the function will be terminated and an error -message returned telling you that you might try using an argument with a -narrower set of quantiles. This disclosure trap will be triggered if the -total number of subjects across all studies divided by the total number -of quantile values being estimated is less than or equal to nfilter.tab -(the minimum cell size in a contingency table).} - -\item{generate.quantiles}{a logical value indicating whether the -ds.ranksSecure function should carry on to estimate the key quantile -values specified by argument or should stop -once the global ranks have been created and written to the serverside. -Default is TRUE and as the key quantiles are generally non-disclosive this -is usually the setting to use. But, if there is some abnormal configuration -of the clusters of values that are being ranked such that some values are -treated as being missing and the processing stops, then setting -generate.quantiles to FALSE allows the generation of ranks to complete so -they can then be used for non-parameteric analysis, even if the key values -cannot be estimated. A real example of an unusual configuration was in a -reasonably large dataset of survival times, where a substantial proportion -of survival profiles were censored at precisely 10 years. This meant that -the 97.5% percentile could not be separated from the 95% percentile and so -the former was allocated the value NA. This stopped processing of the ranks -which could then be enabled by setting generate.quantiles to FALSE. However, -if this problem is detected an error message is returned which indicates that -in some cases (as in this case in fact) the problem can be circumvented -by selecting a narrow range of key quantiles to estimate. In this case, in -fact, this simply required changing the argument -from "0.025-0.975" to "0.05-0.95".} - -\item{output.ranks.df}{a character string in a format that can pass through -the DataSHIELD R parser which specifies an optional name for the -data.frame written to the serverside on each data source that contains -11 of the key output variables from the ranking procedure pertaining to that -particular data source. This includes the global ranks and quantiles of each -value of the V2BR (i.e. the values are ranked across all studies -simultaneously). If no name is specified, the default name -is allocated as "full.ranks.df". This data.frame contains disclosive -information and cannot therefore be passed to the clientside.} - -\item{summary.output.ranks.df}{a character string in a format that can pass through -the DataSHIELD R parser which specifies an optional name for the summary -data.frame written to the serverside on each data source that contains -5 of the key output variables from the ranking procedure pertaining to that -particular data source. This again includes the global ranks and quantiles of each -value of the V2BR (i.e. the values are ranked across all studies -simultaneously). If no name is specified, the default name -is allocated as "summary.ranks.df" This data.frame contains disclosive -information and cannot therefore be passed to the clientside.} - -\item{ranks.sort.by}{a character string taking two possible values. These -are "ID.orig" and "vals.orig". These define the order in which the -output.ranks.df and summary.output.ranks.df data frames are presented. If -the argument is set as "ID.orig" the order of rows in the output data frames -are precisely the same as the order of original input vector that is being -ranked (i.e. V2BR). This means the ranks can simply be cbinded to the -matrix, data frame or tibble that originally included V2BR so it also -includes the corresponding ranks. If it is set as "vals.orig" the output -data frames are in order of increasing magnitude of the original values of -V2BR. Default value is "ID.orig".} - -\item{shared.seed.value}{an integer value which is used to set the -random seed generator in each study. Initially, the seed is set to be the -same in all studies, so the order and parameters of the repeated -encryption procedures are precisely the same in each study. Then a -study-specific modification of the seed in each study ensures that the -procedures initially generating the masking pseudodata (which are then -subject to the same encryption procedures as the real data) are different -in each study. For further information about the shared seed and how we -intend to transmit it in the future, please see the detailed associated -header document.} - -\item{synth.real.ratio}{an integer value specifying the ratio between the -number of masking pseudodata values generated in each study compared to -the number of real data values in V2BR.} - -\item{NA.manage}{character string taking three possible values: "NA.delete", -"NA.low","NA.hi". This argument determines how missing values are managed -before ranking. "NA.delete" results in all missing values being removed -prior to ranking. This means that the vector of ranks in each study is -shorter than the original vector of V2BR values by an amount corresponding -to the number of missing values in V2BR in that study. Any rows containing -missing values in V2BR are simply removed before the ranking procedure is -initiated so the order of rows without missing data is unaltered. "NA.low" -indicates that all missing values should be converted to a new value that -has a meaningful magnitude that is lower (more negative or less positive) -than the lowest non-missing value of V2BR in any of the studies. This means, -for example, that if there are a total of M values of V2BR that are missing -across all studies, there will be a total of M observations that are ranked -lowest each with a rank of (M+1)/2. So if 7 are missing the lowest 7 ranks -will be 4,4,4,4,4,4,4 and if 4 are missing the first 4 ranks will be -2.5,2.5,2.5,2.5. "NA.hi" indicates that all missing values should be -converted to a new value that has a meaningful magnitude that is higher(less -negative or more positive)than the highest non-missing value of V2BR in any -of the studies. This means, for example, that if there are a total of M -values of V2BR that are missing across all studies and N non-missing -values, there will be a total of M observations that are ranked -highest each with a rank of (2N-M+1)/2. So if there are a total of 1000 -V2BR values and 9 are missing the highest 9 ranks will be 996, 996 ... 996. -If NA.manage is either "NA.low" or "NA.hi" the final rank vector in each -study will have the same length as the V2BR vector in that same study. -2.5,2.5,2.5,2.5. The default value of the "NA.manage" argument is "NA.delete"} - -\item{rm.residual.objects}{logical value. Default = TRUE: at the beginning -and end of each run of ds.ranksSecure delete all extraneous objects that are -otherwise left behind. These are not usually needed, but could be of value -if one were investigating a problem with the ranking. FALSE: do not delete -the residual objects} - -\item{monitor.progress}{logical value. Default = FALSE. If TRUE, function -outputs information about its progress.} - -\item{datasources}{specifies the particular opal object(s) to use. If the - argument is not specified (NULL) the default set of opals -will be used. If is specified, it should be set without -inverted commas: e.g. datasources=opals.em. If you wish to -apply the function solely to e.g. the second opal server in a set of three, -the argument can be specified as: e.g. datasources=opals.em[2]. -If you wish to specify the first and third opal servers in a set you specify: -e.g. datasources=opals.em[c(1,3)].} -} -\value{ -the data frame objects specified by the arguments output.ranks.df -and summary.output.ranks.df. These are written to the serverside in each -study. Provided the sort order is consistent these data frames can be cbinded -to any other data frame, matrix or tibble object containing V2BR or to the -V2BR vector itself, allowing the global ranks and quantiles to be -analysed rather than the actual values of V2BR. The last call within -the ds.ranksSecure function is to another clientside function -ds.extractQuantile (for further details see header for that function). -This returns an additional data frame "final.quantile.df" of which the first -column is the vector of key quantiles to be estimated as specified by the -argument and the second column is the list of -precise values of V2BR which correspond to these key quantiles. Because -the serverside functions associated with ds.ranksSecure and -ds.extractQuantile block potentially disclosive output (see information -for parameter quantiles.for.estimation) the "final.quantile.df" is returned -to the client allowing the direct reporting of V2BR values corresponding to -key quantiles such as the quartiles, the median and 95th percentile etc. In -addition a copy of the same data frame is also written to the serverside in -each study allowing the value of key quantiles such as the median to be -incorporated directly in calculations or transformations on the serverside -regardless in which study (or studies) those key quantile values have -occurred. -} -\description{ -Securely generate the ranks of a numeric vector and estimate -true qlobal quantiles across all data sources simultaneously -} -\details{ -ds.ranksSecure is a clientside function which calls a series of -other clientside and serverside functions to securely generate the global -ranks of a numeric vector "V2BR" (vector to be ranked) -in order to set up analyses on V2BR based on -non-parametric methods, some types of survival analysis and to derive true -global quantiles (such as the median, lower (25%) and upper (75%) quartiles, -and the 95% and 97.5% quantiles) across all sources simultaneously. These -global quantiles are, in general, different to the mean or median of the -equivalent quantiles calculated independently in each data source separately. -For more details about the cluster of functions that collectively -enable secure global ranking and estimation of global quantiles see the -associated document entitled "secure.global.ranking.docx". -} -\author{ -Paul Burton 4th November, 2021 -} diff --git a/man/ds.replaceNA.Rd b/man/ds.replaceNA.Rd index f8480591..6be1fdf8 100644 --- a/man/ds.replaceNA.Rd +++ b/man/ds.replaceNA.Rd @@ -7,10 +7,10 @@ ds.replaceNA(x = NULL, forNA = NULL, newobj = NULL, datasources = NULL) } \arguments{ -\item{x}{a character string specifying the name of the vector.} +\item{x}{a character string specifying the the name of the vector.} -\item{forNA}{a list or a vector that contains the replacement value(s), for each study. -The length of the list or vector must be equal to the number of servers (studies).} +\item{forNA}{a list that contains the replacement value(s), a vector one or more values +for each study. The length of the list must be equal to the number of servers (studies).} \item{newobj}{a character string that provides the name for the output object that is stored on the data servers. Default \code{replacena.newobj}.} @@ -40,7 +40,7 @@ values have been replaced a new vector is created. appended to table structure so that the table holds both the vector with and without missing values. -Server function called: \code{replaceNaDS} +Server function called: \code{numNaDS} } \examples{ \dontrun{ @@ -68,42 +68,26 @@ Server function called: \code{replaceNaDS} 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") - # Example 1: Replace missing values in variable 'LAB_HDL' by the mean value - # in each study + # Replace missing values in variable 'LAB_HDL' by the mean value in each study # Get the mean value of 'LAB_HDL' for each study - mean <- ds.mean(x = "D$LAB_HDL", - type = "split", - datasources = connections) + + mean<-ds.mean(x = "D$LAB_HDL", + type = "split", + datasources = connections) # Replace the missing values using the mean for each study + ds.replaceNA(x = "D$LAB_HDL", forNA = list(mean[[1]][1], mean[[1]][2], mean[[1]][3]), newobj = "HDL.noNA", datasources = connections) - - # Example 2: Replace missing values in categorical variable 'PM_BMI_CATEGORICAL' - # with 999s - - # First check how many NAs there are in 'PM_BMI_CATEGORICAL' in each study - ds.table(rvar = "D$PM_BMI_CATEGORICAL", - useNA = "always") - - # Replace the missing values with 999s - ds.replaceNA(x = "D$PM_BMI_CATEGORICAL", - forNA = c(999,999,999), - newobj = "bmi999") - - # Check if the NAs have been replaced correctly - ds.table(rvar = "bmi999", - useNA = "always") - + # Clear the Datashield R sessions and logout datashield.logout(connections) } - } \author{ DataSHIELD Development Team diff --git a/man/ds.sample.Rd b/man/ds.sample.Rd index 776da329..018ba251 100644 --- a/man/ds.sample.Rd +++ b/man/ds.sample.Rd @@ -22,11 +22,11 @@ scalar (e.g. 923) indicating that one should create a new vector on the serversi that is a randomly permuted sample of the vector 1:923, or (if [replace] = FALSE, a full random permutation of that same vector. For further details of using ds.sample with x set as an integer/numeric please see help for -the \code{sample} function in native R. But if x is set as a character string +the {sample} function in native R. But if x is set as a character string denoting a vector, matrix or data.frame on the serverside, please note -that although \code{ds.sample} effectively calls \code{sample} on the serverside -it behaves somewhat differently to \code{sample} - for the reasons identified -at the top of 'details' and so help for \code{sample} should be used as a guide +that although {ds.sample} effectively calls {sample} on the serverside +it behaves somewhat differently to {sample} - for the reasons identified +at the top of 'details' and so help for {sample} should be used as a guide only.} \item{size}{a numeric/integer scalar indicating the size of the sample to @@ -64,13 +64,13 @@ each source} \item{replace}{a Boolean indicator (TRUE or FALSE) specifying whether the sample should be drawn with or without replacement. Default is FALSE so the sample is drawn without replacement. For further details see -help for \code{sample} in native R.} +help for {sample} in native R.} \item{prob}{a character string containing the name of a numeric vector of probability weights on the serverside that is associated with each of the elements of the vector to be sampled enabling the drawing of a sample with some elements given higher probability of being drawn than others. -For further details see help for \code{sample} in native R.} +For further details see help for {sample} in native R.} \item{newobj}{This a character string providing a name for the output data.frame which defaults to 'newobj.sample' if no name is specified.} @@ -78,7 +78,7 @@ data.frame which defaults to 'newobj.sample' if no name is specified.} \item{datasources}{specifies the particular opal object(s) to use. If the argument is not specified the default set of opals will be used. The default opals are called default.opals and the default can be set using the function -\code{ds.setDefaultOpals}. If the is to be specified, it should be set without +{ds.setDefaultOpals}. If the is to be specified, it should be set without inverted commas: e.g. datasources=opals.em or datasources=default.opals. If you wish to apply the function solely to e.g. the second opal server in a set of three, the argument can be specified as: e.g. datasources=opals.em[2]. @@ -106,8 +106,8 @@ or - as a special case - randomly permutes a vector, dataframe or matrix. } \details{ Clientside function ds.sample calls serverside -assign function sampleDS. Based on the native R function \code{sample()} but deals -slightly differently with data.frames and matrices. Specifically the \code{sample()} +assign function sampleDS. Based on the native R function {sample()} but deals +slightly differently with data.frames and matrices. Specifically the {sample()} function in R identifies the length of an object and then samples n components of that length. But length(data.frame) in native R returns the number of columns not the number of rows. So if you have a data.frame with 71 rows and 10 columns, diff --git a/man/ds.table.Rd b/man/ds.table.Rd index 4e3fa15d..434f92cb 100644 --- a/man/ds.table.Rd +++ b/man/ds.table.Rd @@ -11,7 +11,7 @@ ds.table( stvar = NULL, report.chisq.tests = FALSE, exclude = NULL, - useNA = "always", + useNA = c("ifany"), suppress.chisq.warnings = FALSE, table.assign = FALSE, newobj = NULL, @@ -20,61 +20,61 @@ ds.table( ) } \arguments{ -\item{rvar}{is a character string (in inverted commas) specifying the +\item{rvar}{is a character string (in inverted commas) specifiying the name of the variable defining the rows in all of the 2 dimensional tables that form the output. Please see 'details' above for more information about one-dimensional tables when a variable name is provided by but and are both NULL} -\item{cvar}{is a character string specifying the +\item{cvar}{is a character string specifiying the name of the variable defining the columns in all of the 2 dimensional tables that form the output.} -\item{stvar}{is a character string specifying the +\item{stvar}{is a character string specifiying the name of the variable that indexes the separate two dimensional tables in the output if the call specifies a 3 dimensional table.} -\item{report.chisq.tests}{if TRUE, chi-squared tests +\item{report.chisq.tests}{if TRUE, chisquared tests are applied to every 2 dimensional table in the output and reported as "chisq.test_table.name". Default = FALSE.} -\item{exclude}{this argument is passed through to the \code{table} function in -native R which is called by \code{tableDS}. The help for \code{table} in native R +\item{exclude}{this argument is passed through to the {table} function in +native R which is called by {tableDS}. The help for {table} in native R indicates that 'exclude' specifies any levels that should be deleted for all factors in rvar, cvar or stvar. If the argument does not include NA and if the argument is not specified, -it implies = "always" in DataSHIELD. If you read the help for \code{table} in native R +it implies = "ifany". If you read the help for {table} in native R including the 'details' and the 'examples' (particularly 'd.patho') you -will see that the response of \code{table} to different combinations of the +will see that the response of {table} to different combinations of the and arguments can be non-intuitive. This is particularly -so if there is more than one type of missing (e.g. missing by observation +so if there is more than one type of missing (eg. missing by observation as well as missing because of an NaN response to a mathematical function - such as log(-3.0)). In DataSHIELD, if you are in one of these complex settings (which should not be very common) and you cannot interpret the output that has been approached you might try: (1) making sure that the variable producing the strange results is of class factor rather than integer or numeric - although integers and -numerics are coerced to factors by \code{ds.table} they can occasionally behave less +numerics are coerced to factors by {ds.table} they can occasionally behave less well when the NA setting is complex; (2) specify both an argument -e.g. exclude = c("NaN","3") and a argument e.g. useNA= "no"; +e.g. exclude =c("NaN","3") and a argument e.g. useNA= "no"; (3) if you are excluding multiple levels e.g exclude = c("NA","3") -then you can reduce this to one e.g. exclude = c("NA") and then remove +then you can reduce this to one e.g. exclude= c("NA") and then remove the 3s by deleting rows of data, or converting the 3s to a different value.} -\item{useNA}{this argument is passed through to the \code{table} function in -native R which is called by \code{tableDS}. In DataSHIELD, this argument can take -two values: "no" or "always" which indicate whether to include NA values in the table. +\item{useNA}{this argument is passed through to the {table} function in +native R which is called by {tableDS}. The help for {table} in native R +indicates that it specifies whether to include NA values in the table. For further information, please see the help for the argument (above) -and/or the help for the \code{table} function in native R. Default value is set to "always".} +and/or the help for the {table} function in native R.} \item{suppress.chisq.warnings}{if set to TRUE, the default warnings are -suppressed that would otherwise be produced by the \code{table} function in +suppressed that would otherwise be produced by the {table} function in native R whenever an expected cell count in one or more cells is less than 5. Default is FALSE. Further details can be found under 'details' and the help provided for the argument (above).} \item{table.assign}{is a Boolean argument set by default to FALSE. If it is -FALSE the \code{ds.table} function acts as a standard aggregate function - +FALSE the {ds.table} function acts as a standard aggregate function - it returns the table that is specified in its call to the clientside where it can be visualised and worked with by the analyst. But if is TRUE, the same table object is also written to @@ -103,7 +103,7 @@ e.g. datasources=connections.em[c(1,3)].} a positive integer represented as a character string: e.g. "173". This the has the effect of the standard value of 'nfilter.tab' (often 1, 3, 5 or 10 depending what value the data custodian has selected for this particular -data set), to this new value (here, 173). CRUCIALLY, the \code{ds.table} function +data set), to this new value (here, 173). CRUCIALLY, the {ds.table} function only allows the standard value to be INCREASED. So if the standard value has been set as 5 (as one of the R options set in the serverside connection), "6" and "4981" would be allowable values for the argument but "4" or @@ -118,9 +118,9 @@ it is blocked because it fails the disclosure control criteria or there is an error for some other reason). The clientside output from -\code{ds.table} includes error messages that identify when the creation of a +{ds.table} includes error messages that identify when the creation of a table from a particular study has failed and why. If table.assign=TRUE, -\code{ds.table} also writes the requested table as an object named by +{ds.table} also writes the requested table as an object named by the argument or set to 'newObj' by default. Further information @@ -128,13 +128,13 @@ about the visible material passed to the clientside, and the optional table object written to the serverside can be seen under 'details' (above). } \description{ -Creates 1-dimensional, 2-dimensional and 3-dimensional -tables using the \code{table} function in native R. +creates 1-dimensional, 2-dimensional and 3-dimensional +tables using the {table} function in native R. } \details{ -The \code{ds.table} function selects numeric, integer or factor +the {ds.table} function selects numeric, integer or factor variables on the serverside which define a contingency table with up to -three dimensions. The native R \code{table} function basically operates on +three dimensions. The native R {table} function basically operates on factors and if variables are specified that are integers or numerics they are first coerced to factors. If the 1-dimensional, 2-dimensional or 3-dimensional table generated from a given study satisfies appropriate @@ -165,7 +165,7 @@ In consequence, if the number 13 appears in a cell of the empty table returned to the clientside, it means that the true count in that same cell is held as the 13th element of the true count vector saved on the serverside. This means that a data analyst -can still make use of the counts from a call to the \code{ds.table} +can still make use of the counts from a call to the {ds.table} function to drive their ongoing analysis even when one or more non-zero cell counts fall below the specified threshold for potential disclosure risk. @@ -176,15 +176,15 @@ DataSHIELD ensures that although it can, in this way, be used to advance analysis, it does not create a direct risk of disclosure. The argument identifies the variable defining the rows -in each of the 2-dimensional tables produced in the output. +in each of the 2 dimensional tables produced in the output. The -argument identifies the variable defining the columns in the 2-dimensional +argument identifies the variable defining the columns in the 2 dimensional tables produced in the output. In creating a 3-dimensional table the ('separate tables') argument identifies the variable that -indexes the set of two dimensional tables in the output \code{ds.table}. +indexes the set of two dimensional tables in the output {ds.table}. As a minor technicality, it should be noted that if a 1-dimensional table is required, one only need specify a value @@ -196,7 +196,7 @@ dimensional tables and key components of the output for one dimensional tables are actually two dimensional: with rows defined by and with one column for each of the studies. -The output list generated by \code{ds.table} contains tables based on counts +The output list generated by {ds.table} contains tables based on counts named "table.name_counts" and other tables reporting corresponding column proportions ("table.name_col.props") or row proportions ("table.name_row.props"). In one dimensional tables in the output the @@ -206,7 +206,7 @@ above, they are technically column proportions but are based on the distribution of the variable. If the argument is set to TRUE, chisq tests -are applied to every 2-dimensional table in the output and reported +are applied to every 2 dimensional table in the output and reported as "chisq.test_table.name". The argument defaults to FALSE. diff --git a/man/ds.tapply.Rd b/man/ds.tapply.Rd index d5aadccf..73b6b0b8 100644 --- a/man/ds.tapply.Rd +++ b/man/ds.tapply.Rd @@ -15,7 +15,8 @@ ds.tapply( \item{X.name}{a character string specifying the name of the variable to be summarized.} \item{INDEX.names}{a character string specifying the name of a single factor -or a list or vector of names of up to two factors to index the variable to be summarized. +or a vector of names of factors to +index the variable to be summarized. For more information see \strong{Details}.} \item{FUN.name}{a character string specifying the name of one of the allowable diff --git a/man/ds.tapply.assign.Rd b/man/ds.tapply.assign.Rd index ef1e36d8..41966b5c 100644 --- a/man/ds.tapply.assign.Rd +++ b/man/ds.tapply.assign.Rd @@ -16,7 +16,8 @@ ds.tapply.assign( \item{X.name}{a character string specifying the name of the variable to be summarized.} \item{INDEX.names}{a character string specifying the name of a single factor -or a vector of names of up to two factors to index the variable to be summarized. +or a vector of names of factors to +index the variable to be summarized. For more information see \strong{Details}.} \item{FUN.name}{a character string specifying the name of one of the allowable diff --git a/man/ds.unique.Rd b/man/ds.unique.Rd deleted file mode 100644 index f148ec63..00000000 --- a/man/ds.unique.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ds.unique.R -\name{ds.unique} -\alias{ds.unique} -\title{Perform 'unique' on a variable on the server-side} -\usage{ -ds.unique(x.name = NULL, newobj = NULL, datasources = NULL) -} -\arguments{ -\item{x.name}{a character string providing the name of the varable, in the server, to perform \code{unique} upon} - -\item{newobj}{a character string that provides the name for the output object -that is stored on the data servers. Default \code{unique.newobj}.} - -\item{datasources}{a list of \code{\link{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}}.} -} -\value{ -\code{ds.unique} returns the vector of unique R objects which are written to the server-side. -} -\description{ -Perform 'unique', from the 'base' package on a specified variable on the server-side -} -\details{ -Will create a vector or list which has no duplicate values. - -Server function called: \code{uniqueDS} -} -\examples{ -\dontrun{ - # 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") - builder$append(server = "study3", - url = "http://192.168.56.100:8080/", - user = "administrator", password = "datashield_test&", - table = "CNSIM.CNSIM3", driver = "OpalDriver") - logindata <- builder$build() - - connections <- DSI::datashield.login(logins = logindata, assign = TRUE, symbol = "D") - - # Create a vector with combined objects - ds.unique(x.name = "D$LAB_TSC", newobj = "new.vect", datasources = connections) - - # Clear the Datashield R sessions and logout - datashield.logout(connections) -} -} -\author{ -Stuart Wheater, DataSHIELD Development Team -} diff --git a/man/isDefined.Rd b/man/isDefined.Rd index 9153016b..f4c34866 100644 --- a/man/isDefined.Rd +++ b/man/isDefined.Rd @@ -2,25 +2,18 @@ % Please edit documentation in R/isDefined.R \name{isDefined} \alias{isDefined} -\title{Checks if the objects are defined in all studies} +\title{Checks if the objecs are defined in studies} \usage{ -isDefined(datasources = NULL, obj = NULL, error.message = TRUE) +isDefined(datasources = NULL, obj = NULL) } \arguments{ -\item{datasources}{a list of \code{\link{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}}.} +\item{datasources}{a list of \code{\link{DSConnection-class}} objects obtained after login. If the +the default set of connections will be used: see \link{datashield.connections_default}.} -\item{obj}{a character vector, the name of the object(s) to look for.} - -\item{error.message}{a Boolean which specifies if the function should stop and return -an error message when the input object is not defined in one or more studies or to -return a list of TRUE/FALSE indicating in which studies the object is defined} +\item{obj}{a character vector, the name of the objects to look for.} } \value{ -returns an error message if \code{error.message} argument is set to TRUE (default) -and if the input object is not defined in one or more studies, or a Boolean value if -\code{error.message} argument is set to FALSE. +a boolean vector. } \description{ This is an internal function. @@ -29,7 +22,4 @@ This is an internal function. In DataSHIELD an object included in analysis must be defined (i.e. exists) in all the studies. If not the process should halt. } -\author{ -Demetris Avraam for DataSHIELD Development Team -} \keyword{internal} diff --git a/opal_azure-pipelines.yml b/opal_azure-pipelines.yml deleted file mode 100644 index 7d312c54..00000000 --- a/opal_azure-pipelines.yml +++ /dev/null @@ -1,645 +0,0 @@ -######################################################################################### -# DataSHIELD Azure test suite. -# Starts with a vanilla Opal docker composition, installs dsBase -# and dsBaseClient (as well as dependencies - including a fully functional -# Opal server). -# Does checks and tests then saves results to testStatus repo. -# -# Inside the root directory $(Pipeline.Workspace) will be a file tree like: -# /dsBaseClient <- Checked out version of datashield/dsBaseClient -# /testStatus <- Checked out version of datashield/testStatus -# /logs <- Where results of tests and lots are collated -# -# As of May 2020 this takes ~ 70 mins to run. -# As of Nov 2020 this takes ~ 120 mins to run. -# As of Mar 2024 this takes ~ 300+ mins to run! -# As of Mar 2024 this takes ~ 300+ mins to run! -# As of Jun 2024 this takes ~ 360+ mins to run! -# -# The only things that should ever be changed are the repo branches in the resources. -# -######################################################################################### - - -##################################################################################### -# These should all be constant, except test_filter. This can be used to test subsets -# of test files in the testthat directory. Options are like: -# '*' <- Run all tests -# 'ds.asNumeric*' <- Run all ds.asNumeric tests, i.e. all the arg, smk etc tests. -# '*_smk_*' <- Run all the smoke tests for all functions. -variables: - datetime: $[format('{0:yyyyMMddHHmmss}', pipeline.startTime)] - repoName: $(Build.Repository.Name) - projectName: 'dsBaseClient' - branchName: $(Build.SourceBranchName) - test_filter: '*' - _r_check_system_clock_: 0 - - -######################################################################################### -# Need to define all the GH repos and their access tokens, see: -# https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml -resources: - repositories: - - repository: testStatusRepo - type: github - endpoint: datashield-testing - name: datashield/testStatus - ref: master - - -######################################################################################### -# When and under what condition to run the pipeline. -schedules: - - cron: "0 0 * * 0" - displayName: Weekly build - master - branches: - include: - - master - always: true - - cron: "0 2 * * *" - displayName: Nightly build - v6.3.1-dev - branches: - include: - - v6.3.1-dev - always: true - -######################################################################################### -# Jobs - -jobs: -- job: build_and_run_tests - timeoutInMinutes: 360 - pool: - vmImage: ubuntu-22.04 - - steps: - ##################################################################################### - # Checkout the source code to a subfolder. - # This may give an error in the logs like: - # [warning]Unable move and reuse existing repository to required location - # This is an Azure bug - https://github.com/microsoft/azure-pipelines-yaml/issues/403 - - checkout: self - path: 'dsBaseClient' - - - checkout: testStatusRepo - path: 'testStatus' - persistCredentials: true - condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) - - - ##################################################################################### - # The MySQL install that comes with the VM doesn't seem compatable with our set up - # so we delete it. - # If previous steps have failed then don't run. - - bash: | - - # Work-around for tempory Bazel's apt repository issue. - curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - - - # Purge the default mysql installed on the VM as it is incompatible with our stuff. - sudo service mysql stop - sudo apt-get update - sudo apt-get remove --purge mysql-client mysql-server mysql-common -y - sudo apt-get purge mysql-client mysql-server mysql-common -y - sudo apt-get autoremove -y - sudo apt-get autoclean -y - sudo rm -rf /var/lib/mysql/ - - displayName: 'Uninstall default MySQL' - condition: succeeded() - - - ##################################################################################### - # The Azure VMs have 2 CPUs, so configure R to use both when compile/install packages. - # If previous steps have failed then don't run. - - bash: | - - echo "options(Ncpus=4)" >> ~/.Rprofile - - displayName: 'Tweak local R env using .Rprofile' - condition: succeeded() - - - ##################################################################################### - # Install R and all the dependencies dsBaseClient requires. - # If previous steps have failed then don't run. - - bash: | - - sudo apt-get update - sudo apt-get install --no-install-recommends software-properties-common dirmngr - wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc - sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" - sudo apt-get upgrade -y - - sudo apt-get install -qq libxml2-dev libcurl4-openssl-dev libssl-dev libgsl-dev libgit2-dev r-base -y - sudo apt-get install -qq libharfbuzz-dev libfribidi-dev libmagick++-dev -y - sudo R -q -e "install.packages(c('curl','httr'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('devtools','covr'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('fields','meta','metafor','ggplot2','gridExtra','data.table','panelaggregation'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('DSI','DSOpal','DSLite'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('MolgenisAuth', 'MolgenisArmadillo', 'DSMolgenisArmadillo'), dependencies=TRUE, repos='https://cloud.r-project.org')" - sudo R -q -e "install.packages(c('DescTools','e1071'), dependencies=TRUE, repos='https://cloud.r-project.org')" - - sudo R -q -e "library('devtools'); devtools::install_github(repo='datashield/dsDangerClient', ref='6.3.1', dependencies = TRUE)" - - # XML grep for coverage report merging - sudo apt-get install -qq xml-twig-tools -y - - displayName: 'Install all dependencies for dsBaseClient' - condition: succeeded() - - - ##################################################################################### - # Check that the man files in the repo match what is in the function headers. i.e. has - # devtools::document() been run before commiting? - # If previous steps have failed then don't run. - # If this step fails still mark as failed, but don't stop the rest of the steps running. - - bash: | - - # Concatenate all the files in the man dir into one long string and md5sum it. - orig_sum=$(find man -type f | sort -u | xargs cat | md5sum) - - # Rebuild the documentation. - R -e "devtools::document()" - - # Concatenate all the files in the man dir into one long string and md5sum it. - new_sum=$(find man -type f | sort -u | xargs cat | md5sum) - - if [ "$orig_sum" != "$new_sum" ]; then - echo "Your committed manual files (man/*.Rd) are out of sync with the documentation in the R files." - echo "Run devtools::document() locally then commit again." - exit 1 - else - echo "Documentation up to date." - exit 0 - fi - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Check manual updated before being committed' - condition: succeeded() - continueOnError: true - - - ##################################################################################### - # Run devtools::check on the checked out source code. - # If previous steps have failed then don't run. - # If this step fails still mark as failed, but don't stop the rest of the steps running. - - bash: | - - R -q -e "library('devtools'); devtools::check(args = c('--no-examples'))" | tee azure-pipelines_check.Rout - grep --quiet "^0 errors" azure-pipelines_check.Rout && grep --quiet " 0 warnings" azure-pipelines_check.Rout && grep --quiet " 0 notes" azure-pipelines_check.Rout - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Devtools checks' - condition: succeeded() - continueOnError: true - - ##################################################################################### - # - # Opal phase - # - ##################################################################################### - - ##################################################################################### - # Deploy docker for Opal. - # If previous steps have failed then don't run. - - task: DockerCompose@1 - inputs: - action: Run Services - dockerComposeFile: ../dsBaseClient/docker-compose_opal.yml - projectName: dsbaseclient - qualifyImageNames: true - buildImages: true - abortOnContainerExit: true - detached: true - displayName: 'Install Opal servers (opal, rserver, mongodb)' - condition: succeeded() - - - ##################################################################################### - # Install test datasets. - # If previous steps have failed then don't run. - - bash: | - sleep 60 - - R -q -f "obiba_opal-upload_testing_datasets.R" - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files - displayName: 'Install test datasets to Opal' - condition: succeeded() - - - ##################################################################################### - # Install dsBase. - # If previous steps have failed then don't run. - - 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 = '6.3.1'); opal.logout(opal)" - - sleep 60 - - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)" - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files - displayName: 'Install dsBase to Opal, as set disclosure test options' - condition: succeeded() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code. This is wrapped up with - # code coverage. The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. - # TODO: Why is DSLite needed for this to run?! - - bash: | - - # There is an issue with the way we are using packages. The wrapped up test command - # below fails in a way that implies that it is not installed. I cannot figure out - # why this is case. As a work around we can run some of the functions below. My - # best guess is that there is an implicit build or similar that happens. Although - # I cannot replicate that directly with build etc directly. - - sudo R --verbose -e 'devtools::check()' - - mkdir $(Pipeline.Workspace)/logs - - # run the coverage tool and output to coveragelist.csv - # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter - # R output and messages are redirected by sink() to test_console_output.txt - # junit reporter output is to test_results.xml - # - # "_-|arg-|smk-|datachk-|disc-|math-|expt-|expt_smk-" - # testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) - sudo R -q -e ' - library(covr); - dsbase.res <- covr::package_coverage( - type = c("none"), - code = c( - '"'"' - library(testthat); - output_file <- file("test_console_output_dsbase.txt"); - sink(output_file); - sink(output_file, type = "message"); - library(testthat); - junit_rep <- JunitReporter$new(file = "test_results_dsbase.xml"); - progress_rep <- ProgressReporter$new(max_failures = 999999); - multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - options("default_driver" = "OpalDriver"); - testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) - '"'"' - ) - ); - base::saveRDS(dsbase.res, "test_results_dsbase.rds")' - - # display the test console output - cat test_console_output_dsbase.txt - - grep --quiet " FAIL 0 " test_console_output_dsbase.txt - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Code coverage and JUnit report output, with dsBase' - condition: succeeded() - - - ##################################################################################### - # Parse the JUnit file to see if there are any errors/warnings. If there are then - # echo them so finding bugs should be easier. - # This should run even if previous steps have failed. - - bash: | - - # Strip out when error and failure = 0 and count the number of times it does not. - issue_count=$(sed 's/failures="0" errors="0"//' test_results_dsbase.xml | sed 's/errors="0" failures="0"//' | grep --count errors=) - echo "Number of testsuites with issues: "$issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results_dsbase.xml | sed 's/errors="0" failures="0"//' | grep errors= > issues.log - cat issues.log - exit $issue_count - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Check for errors & Failures in JUnit file' - condition: succeededOrFailed() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code for discctrl reporting. - # The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. - #- bash: | - - # junit reporter output is to test_results_discctrl.xml - # sudo R -q -e ' - # library(testthat); - # output_file <- file("test_console_output_discctrl.txt"); - # sink(output_file); - # sink(output_file, type = "message"); - # junit_rep <- JunitReporter$new(file = "test_results_discctrl.xml"); - # progress_rep <- ProgressReporter$new(max_failures = 999999); - # multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - # default_driver <- "OpalDriver"; - # testthat::test_package("$(projectName)", filter = "_-|discctrl-", reporter = multi_rep, stop_on_failure = FALSE)' - - # cat test_console_output_discctrl.txt - - # if [ -e test_results_discctrl.xml ]; then - # mv test_results_discctrl.xml $(Pipeline.Workspace)/logs - # else - # touch $(Pipeline.Workspace)/logs/test_results_discctrl.xml - # fi - - # workingDirectory: $(Pipeline.Workspace)/dsBaseClient - # displayName: 'discctrl report output' - # condition: succeededOrFailed() - - - ##################################################################################### - # Install dsDanger on Opal server - # If previous steps have failed then don't run - - 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, 'dsDanger', username = 'datashield', ref = '6.3.1'); opal.logout(opal)" - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Install dsDanger package on Opal server' - condition: succeeded() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code. This is wrapped up with - # code coverage. The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. - - bash: | - - # See, 'Code coverage and JUnit report output' for issues with the approach and improvement needed. - sudo R --verbose -e 'devtools::check()' - - pwd - mkdir $(Pipeline.Workspace)/logs - - # run the coverage tool and output to coveragelist.csv - # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter - # R output and messages are redirected by sink() to test_console_output.txt - # junit reporter output is to test_results.xml - sudo R -q -e ' - library(covr); - dsdanger.res <- covr::package_coverage( - type = c("none"), - code = c( - '"'"' - library(testthat); - output_file <- file("test_console_output_dsdanger.txt"); - sink(output_file); - sink(output_file, type = "message"); - library(testthat); - junit_rep <- JunitReporter$new(file = "test_results_dsdanger.xml"); - progress_rep <- ProgressReporter$new(max_failures = 999999); - multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - options("default_driver" = "OpalDriver"); - testthat::test_package("$(projectName)", filter = "__dgr-|datachk_dgr-|smk_dgr-|arg_dgr-|disc_dgr-|smk_expt_dgr-|expt_dgr-|math_dgr-", reporter = multi_rep, stop_on_failure = FALSE) - '"'"' - ) - ); - base::saveRDS(dsdanger.res, "test_results_dsdanger.rds")' - - # Merge coverage results - cat test_results_dsbase.txt test_results_dsdanger.txt > $(Pipeline.Workspace)/logs/test_console_output.txt - xml_grep --pretty_print indented --wrap "testsuites" --descr "" --cond "testsuite" test_results_dsbase.xml test_results_dsdanger.xml > test_results.xml - - # Create 'coveragelist.csv' - sudo R -q -e ' - library(covr); - dsbase.res <- base::readRDS("test_results_dsbase.rds") - write.csv( - coverage_to_list( - dsbase.res - ), - "coveragelist.csv" - )' - - # display the test console output - cat test_console_output_dsdanger.txt - - mv coveragelist.csv $(Pipeline.Workspace)/logs - mv test_results.xml $(Pipeline.Workspace)/logs - - grep --quiet " FAIL 0 " test_console_output_dsdanger.txt - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Code coverage and JUnit report output, with dsBase and dsDanger' - condition: succeeded() - - - ##################################################################################### - # Parse the JUnit file to see if there are any errors/warnings. If there are then - # echo them so finding bugs should be easier. - # This should run even if previous steps have failed. - - bash: | - - # Strip out when error and failure = 0 and count the number of times it does not. - issue_count=$(sed 's/failures="0" errors="0"//' test_results.xml | sed 's/errors="0" failures="0"//' | grep --count errors=) - echo "Number of testsuites with issues: "$issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results.xml | sed 's/errors="0" failures="0"//' | grep errors= > issues.log - cat issues.log - exit $issue_count - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Check for errors & Failures in JUnit file' - condition: succeededOrFailed() - - - ##################################################################################### - # Essentially run devtools::test() on the checked out code for bug reporting. - # The actual command is vary convoluted as it had to do some things - # which are not default behaviour: output the results to a JUnit xml file, not stop - # when a small number of errors have happened, run through the code coverage tool. - # TODO: Tidy up variable names - use timestamps here. -# - bash: | - - # junit reporter output is to test_results_bug.xml - # sudo R -q -e ' - # library(testthat); - # output_file <- file("test_console_output_bug.txt"); - # sink(output_file); - # sink(output_file, type = "message"); - # junit_rep <- JunitReporter$new(file = "test_results_bug.xml"); - # progress_rep <- ProgressReporter$new(max_failures = 999999); - # multi_rep <- MultiReporter$new(reporters = list(progress_rep, junit_rep)); - # options("default_driver" = "OpalDriver"); - # testthat::test_package("$(projectName)", filter = "__bug-|datachk_bug-|smk_bug-|arg_bug-|disc_bug-|smk_expt_bug-|expt_bug-|math_bug-", reporter = multi_rep, stop_on_failure = FALSE)' - - # cat test_console_output_bug.txt - - # if [ -e test_results_bug.xml ]; then - # mv test_results_bug.xml $(Pipeline.Workspace)/logs - # else - # touch $(Pipeline.Workspace)/logs/test_results_bug.xml - # fi - -# workingDirectory: $(Pipeline.Workspace)/dsBaseClient -# displayName: 'Bug report output' -# condition: succeededOrFailed() - - - ##################################################################################### - # Parse the JUnit file to see if there are any errors/warnings. If there are then - # echo them so finding bugs should be easier. - # This should run even if previous steps have failed. - - bash: | - - # Strip out when error and failure = 0 and count the number of times it does not. - issue_count=$(sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep --count errors=) - echo "Number of testsuites with issues: "$issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep errors= > issues.log - cat issues.log - no_issue_count=$(sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep -v --count errors=) - echo - echo "Number of testsuites with no issues: "$no_issue_count - echo "Testsuites with issues:" - sed 's/failures="0" errors="0"//' test_results_bug.xml | sed 's/errors="0" failures="0"//' | grep " no_issues.log - cat no_issues.log - exit 0 - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Bug summary report output' - condition: succeededOrFailed() - - - ##################################################################################### - # 'Down' Opal Docker Composition - - bash: | - - docker compose -f docker-compose_opal.yml down -v - - workingDirectory: $(Pipeline.Workspace)/dsBaseClient - displayName: 'Down Opal Docker Composition' - condition: succeeded() - - ##################################################################################### - # Windup phase - ##################################################################################### - - ##################################################################################### - # Output some important version numbers to file. This gets added to the testStatus - # commit so it can be parsed and used on the status table. - - bash: | - - echo 'branch:'$(branchName) >> $(datetime).txt - echo 'os:'$(lsb_release -ds) >> $(datetime).txt - echo 'R:'$(R --version | head -n 1) >> $(datetime).txt - echo 'opal:'$(opal system --opal localhost:8443 --user administrator --password "datashield_test&" --version) >> $(datetime).txt - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Write versions to file' - condition: succeededOrFailed() - - - ##################################################################################### - # Checkout the testStatus repo, add the results from here, push back to GH. - # TODO: Automatically pull in better email/name info from somewhere. - # TODO: More debug info in commit message - - bash: | - - # Git needs some config set to be able to push to a repo. - git config --global user.email "you@example.com" - git config --global user.name "Azure pipeline" - - # This repo is checked out in detatched head state, so reconnect it here. - git checkout master - - # It is possible that other commits have been made to the testStatus repo since it - # was checked out. i.e. other pipeline runs might have finished. - git pull - - # Make the directories if they dont already exist - mkdir --parents logs/$(projectName)/$(branchName) - mkdir --parents docs/$(projectName)/$(branchName)/latest - - cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/ - cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/$(datetime).csv - - cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/ - cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/$(datetime).xml - - cp $(Pipeline.Workspace)/logs/$(datetime).txt logs/$(projectName)/$(branchName)/ - - # Run the script to parse the results and build the html pages. - # status.py JUnit_file.xml coverage_file.csv output_file.html local_repo_path remote_repo_name branch - source/status.py logs/$(projectName)/$(branchName)/$(datetime).xml logs/$(projectName)/$(branchName)/$(datetime).csv logs/$(projectName)/$(branchName)/$(datetime).txt status.html $(Pipeline.Workspace)/$(projectName) $(projectName) $(branchName) - - cp status.html docs/$(projectName)/$(branchName)/latest/index.html - git add logs/$(projectName)/$(branchName)/coveragelist.csv - git add logs/$(projectName)/$(branchName)/test_results.xml - git add logs/$(projectName)/$(branchName)/$(datetime).xml - git add logs/$(projectName)/$(branchName)/$(datetime).csv - git add logs/$(projectName)/$(branchName)/$(datetime).txt - git add docs/$(projectName)/$(branchName)/latest/index.html - - git commit -m "Azure auto test for $(projectName)/$(branchName) @ $(datetime)" -m "Debug info:\nProjectName:$(projectName)\nBranchName:$(branchName)\nDataTime:$(datetime)" - git push - exit 0 - - workingDirectory: $(Pipeline.Workspace)/testStatus - displayName: 'Parse test results' - condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) - - - ##################################################################################### - # Output the environment information to the console. This is useful for debugging. - # Always do this, even if some of the above has failed or the job has been cacelled. - - bash: | - - echo 'BranchName: '$(branchName) - echo 'ProjectName: '$(projectName) - echo 'RepoName: '$(repoName) - - echo -e "\n#############################" - echo -e "ls /: ######################" - ls $(Pipeline.Workspace) - - echo -e "\n#############################" - echo -e "lscpu: ######################" - lscpu - - echo -e "\n#############################" - echo -e "memory: #####################" - free -m - - echo -e "\n#############################" - echo -e "env: ########################" - env - - echo -e "\n#############################" - echo -e "Puppet version: #############" - /opt/puppetlabs/bin/puppet --version - /opt/puppetlabs/puppet/bin/r10k version - - echo -e "\n#############################" - echo -e "Rprofile: ###################" - cat $(Pipeline.Workspace)/dsBaseClient/.Rprofile - - echo -e "\n#############################" - echo -e "R installed.packages(): #####" - R -e 'installed.packages()' - - echo -e "\n#############################" - echo -e "R sessionInfo(): ############" - R -e 'sessionInfo()' - - sudo apt install tree -y - pwd - echo -e "\n#############################" - echo -e "File tree: ##################" - tree $(Pipeline.Workspace) - - displayName: 'Environment info' - condition: always() diff --git a/tests/docker/armadillo/standard/config/application.yml b/tests/docker/armadillo/standard/config/application.yml deleted file mode 100644 index c38ba279..00000000 --- a/tests/docker/armadillo/standard/config/application.yml +++ /dev/null @@ -1,73 +0,0 @@ -# NOTE these settings should be similar to application.template.yml - -armadillo: - # DO NOT CHANGE - docker-management-enabled: false - # DO NOT CHANGE - docker-run-in-container: true - - # when running the R containers from a docker-compose.yml they get prefixes based on the directory name of the - # docker-compose.yml file ie armadillo-dev-" + profileName + "-1". Same goes for Armadillo ie armadillo-dev-armadillo-1" - container-prefix: 'dev-' - - # uncomment this to configure an oidc user as admin user - # oidc-admin-user: user@yourdomain.org - profiles: - - name: default - image: datashield/rock-knot-devel-permissive:latest - port: 8085 - host: default - package-whitelist: - - dsBase - - resourcer - function-blacklist: [ ] - options: - datashield: - # the seed can only be 9 digits - seed: 342325352 - -# required settings: -spring: - security: - user: - # please change this admin password! - password: admin - ## uncomment oauth2 settings below to enable oidcgit - # oauth2: - # client: - # provider: - # molgenis: - # issuer-uri: 'http://auth.molgenis.org' - # registration: - # molgenis: - # client-id: '...' - # client-secret: '...' - # resourceserver: - # jwt: - # issuer-uri: 'http://auth.molgenis.org' - # opaquetoken: - # client-id: '...' - - # optional settings (review spring handbook to find more): - servlet: - multipart: - ## change this if your files are bigger - max-file-size: 1000MB - max-request-size: 1000MB - -storage: - ## to change location of the data storage - root-dir: /data - -# Match with Dockerfile volume /logs -audit.log.path: '/logs/audit.log' - -stdout.log.path: '/logs/armadillo.log' - -logging: - level: - root: INFO - ## change to DEBUG to have more details, typically when developing - org.molgenis: INFO - ## Don't log upload data - org.apache.coyote.http11.Http11InputBuffer: INFO diff --git a/tests/testthat/connection_to_datasets/init_discordant_datasets.R b/tests/testthat/connection_to_datasets/init_discordant_datasets.R index a117deb7..96021861 100644 --- a/tests/testthat/connection_to_datasets/init_discordant_datasets.R +++ b/tests/testthat/connection_to_datasets/init_discordant_datasets.R @@ -5,17 +5,9 @@ init.discordant.dataset.simple <- function(variables) if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "discordant1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "DISCORDANT.DISCORDANT_STUDY1", options=ds.test_env$options_1) - builder$append(server = "discordant2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "DISCORDANT.DISCORDANT_STUDY2", options=ds.test_env$options_2) - builder$append(server = "discordant3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "DISCORDANT.DISCORDANT_STUDY3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "discordant1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/discordant/DISCORDANT_STUDY1", driver = "ArmadilloDriver") - builder$append(server = "discordant2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/discordant/DISCORDANT_STUDY2", driver = "ArmadilloDriver") - builder$append(server = "discordant3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/discordant/DISCORDANT_STUDY3", driver = "ArmadilloDriver") + builder$append(server = "discordant1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "DISCORDANT.DISCORDANT_STUDY1") + builder$append(server = "discordant2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "DISCORDANT.DISCORDANT_STUDY2") + builder$append(server = "discordant3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "DISCORDANT.DISCORDANT_STUDY3") ds.test_env$login.data <- builder$build() } else diff --git a/tests/testthat/connection_to_datasets/init_local_settings.R b/tests/testthat/connection_to_datasets/init_local_settings.R index 11ac245f..72f451d2 100644 --- a/tests/testthat/connection_to_datasets/init_local_settings.R +++ b/tests/testthat/connection_to_datasets/init_local_settings.R @@ -10,8 +10,7 @@ init.ip.address <- function() } else { - # ip.address <- "127.0.0.1" - ip.address <- "localhost" + ip.address <- "127.0.0.1" } return (ip.address) } diff --git a/tests/testthat/connection_to_datasets/init_mediation_datasets.R b/tests/testthat/connection_to_datasets/init_mediation_datasets.R deleted file mode 100644 index 479266ec..00000000 --- a/tests/testthat/connection_to_datasets/init_mediation_datasets.R +++ /dev/null @@ -1,125 +0,0 @@ -init.mediation.dataset.upb <- function(variables) -{ - if (ds.test_env$secure_login_details) - { - if (ds.test_env$driver == "OpalDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "MEDIATION.UPBdata1", options=ds.test_env$options_1) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "MEDIATION.UPBdata2", options=ds.test_env$options_2) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "MEDIATION.UPBdata3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else - { - ds.test_env$login.data <- DSLite::setupMediationTest("dsBase", env = ds.test_env) - } - ds.test_env$stats.var <- variables - } -} - -init.mediation.dataset.student <- function(variables) -{ - if (ds.test_env$secure_login_details) - { - if (ds.test_env$driver == "OpalDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "MEDIATION.student", options=ds.test_env$options_1) - ds.test_env$login.data <- builder$build() - } - else - { - ds.test_env$login.data <- DSLite::setupMediationTest("dsBase", env = ds.test_env) - } - ds.test_env$stats.var <- variables - } -} - -init.mediation.dataset.framing <- function(variables) -{ - if (ds.test_env$secure_login_details) - { - if (ds.test_env$driver == "OpalDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "MEDIATION.framing", options=ds.test_env$options_1) - ds.test_env$login.data <- builder$build() - } - else - { - ds.test_env$login.data <- DSLite::setupMediationTest("dsBase", env = ds.test_env) - } - ds.test_env$stats.var <- variables - } -} - -init.mediation.dataset.vv2015 <- function(variables) -{ - if (ds.test_env$secure_login_details) - { - if (ds.test_env$driver == "OpalDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "MEDIATION.vv2015", options=ds.test_env$options_1) - ds.test_env$login.data <- builder$build() - } - else - { - ds.test_env$login.data <- DSLite::setupMediationTest("dsBase", env = ds.test_env) - } - ds.test_env$stats.var <- variables - } -} - -connect.mediation.dataset.upb <- function(variables) -{ - log.out.data.server() - source("connection_to_datasets/login_details.R") - init.mediation.dataset.upb(variables) - log.in.data.server() -} - -connect.mediation.dataset.student <- function(variables) -{ - log.out.data.server() - source("connection_to_datasets/login_details.R") - init.mediation.dataset.student(variables) - log.in.data.server() -} - -connect.mediation.dataset.framing <- function(variables) -{ - log.out.data.server() - source("connection_to_datasets/login_details.R") - init.mediation.dataset.framing(variables) - log.in.data.server() -} - -connect.mediation.dataset.vv2015 <- function(variables) -{ - log.out.data.server() - source("connection_to_datasets/login_details.R") - init.mediation.dataset.vv2015(variables) - log.in.data.server() -} - -disconnect.mediation.dataset.upb <- function() -{ - log.out.data.server() -} - -disconnect.mediation.dataset.student <- function() -{ - log.out.data.server() -} - -disconnect.mediation.dataset.framing <- function() -{ - log.out.data.server() -} - -disconnect.mediation.dataset.vv2015 <- function() -{ - log.out.data.server() -} diff --git a/tests/testthat/connection_to_datasets/init_studies_datasets.R b/tests/testthat/connection_to_datasets/init_studies_datasets.R index 0639aac6..5105e4c9 100644 --- a/tests/testthat/connection_to_datasets/init_studies_datasets.R +++ b/tests/testthat/connection_to_datasets/init_studies_datasets.R @@ -5,17 +5,9 @@ init.studies.dataset.cnsim <- function(variables) if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "sim1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "CNSIM.CNSIM1", options=ds.test_env$options_1) - builder$append(server = "sim2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "CNSIM.CNSIM2", options=ds.test_env$options_2) - builder$append(server = "sim3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "CNSIM.CNSIM3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "sim1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/cnsim/CNSIM1", driver = ds.test_env$driver) - builder$append(server = "sim2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/cnsim/CNSIM2", driver = ds.test_env$driver) - builder$append(server = "sim3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/cnsim/CNSIM3", driver = ds.test_env$driver) + builder$append(server = "sim1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "CNSIM.CNSIM1") + builder$append(server = "sim2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "CNSIM.CNSIM2") + builder$append(server = "sim3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "CNSIM.CNSIM3") ds.test_env$login.data <- builder$build() } else @@ -33,17 +25,9 @@ init.studies.dataset.dasim <- function(variables) if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "sim1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "DASIM.DASIM1", options=ds.test_env$options_1) - builder$append(server = "sim2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "DASIM.DASIM2", options=ds.test_env$options_2) - builder$append(server = "sim3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "DASIM.DASIM3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "sim1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/dasim/DASIM1", driver = ds.test_env$driver) - builder$append(server = "sim2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/dasim/DASIM2", driver = ds.test_env$driver) - builder$append(server = "sim3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/dasim/DASIM3", driver = ds.test_env$driver) + builder$append(server = "sim1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "DASIM.DASIM1") + builder$append(server = "sim2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "DASIM.DASIM2") + builder$append(server = "sim3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "DASIM.DASIM3") ds.test_env$login.data <- builder$build() } else @@ -61,17 +45,9 @@ init.studies.dataset.survival <- function(variables) if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "survival1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "SURVIVAL.EXPAND_WITH_MISSING1", options=ds.test_env$options_1) - builder$append(server = "survival2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "SURVIVAL.EXPAND_WITH_MISSING2", options=ds.test_env$options_2) - builder$append(server = "survival3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "SURVIVAL.EXPAND_WITH_MISSING3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "survival1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/survival/EXPAND_WITH_MISSING1", driver = ds.test_env$driver) - builder$append(server = "survival2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/survival/EXPAND_WITH_MISSING2", driver = ds.test_env$driver) - builder$append(server = "survival3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/survival/EXPAND_WITH_MISSING3", driver = ds.test_env$driver) + builder$append(server = "survival1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "SURVIVAL.EXPAND_WITH_MISSING1") + builder$append(server = "survival2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "SURVIVAL.EXPAND_WITH_MISSING2") + builder$append(server = "survival3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "SURVIVAL.EXPAND_WITH_MISSING3") ds.test_env$login.data <- builder$build() } else @@ -94,17 +70,9 @@ init.studies.dataset.cluster.int <- function(variables) if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "cluster.int1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "CLUSTER.CLUSTER_INT1", options=ds.test_env$options_1) - builder$append(server = "cluster.int2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "CLUSTER.CLUSTER_INT2", options=ds.test_env$options_2) - builder$append(server = "cluster.int3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "CLUSTER.CLUSTER_INT3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "cluster.int1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/cluster/CLUSTER_INT1", driver = ds.test_env$driver) - builder$append(server = "cluster.int2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/cluster/CLUSTER_INT2", driver = ds.test_env$driver) - builder$append(server = "cluster.int3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/cluster/CLUSTER_INT3", driver = ds.test_env$driver) + builder$append(server = "cluster.int1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "CLUSTER.CLUSTER_INT1") + builder$append(server = "cluster.int2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "CLUSTER.CLUSTER_INT2") + builder$append(server = "cluster.int3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "CLUSTER.CLUSTER_INT3") ds.test_env$login.data <- builder$build() } else @@ -128,17 +96,9 @@ init.studies.dataset.cluster.slo <- function(variables) if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "cluster.slo1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "CLUSTER.CLUSTER_SLO1", options=ds.test_env$options_1) - builder$append(server = "cluster.slo2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "CLUSTER.CLUSTER_SLO2", options=ds.test_env$options_2) - builder$append(server = "cluster.slo3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "CLUSTER.CLUSTER_SLO3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "cluster.slo1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/cluster/CLUSTER_SLO1", driver = ds.test_env$driver) - builder$append(server = "cluster.slo2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/cluster/CLUSTER_SLO2", driver = ds.test_env$driver) - builder$append(server = "cluster.slo3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/cluster/CLUSTER_SLO3", driver = ds.test_env$driver) + builder$append(server = "cluster.slo1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "CLUSTER.CLUSTER_SLO1") + builder$append(server = "cluster.slo2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "CLUSTER.CLUSTER_SLO2") + builder$append(server = "cluster.slo3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "CLUSTER.CLUSTER_SLO3") ds.test_env$login.data <- builder$build() } else @@ -163,17 +123,9 @@ init.studies.dataset.anthro <- function(variables) if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "ANTHRO.anthro1", options=ds.test_env$options_1) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "ANTHRO.anthro2", options=ds.test_env$options_2) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "ANTHRO.anthro3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/anthro/anthro1", driver = ds.test_env$driver) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/anthro/anthro2", driver = ds.test_env$driver) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/anthro/anthro3", driver = ds.test_env$driver) + builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "ANTHRO.anthro1") + builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "ANTHRO.anthro2") + builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "ANTHRO.anthro3") ds.test_env$login.data <- builder$build() } else @@ -186,42 +138,6 @@ init.studies.dataset.anthro <- function(variables) } } -init.studies.dataset.gamlss <- function(variables) -{ - if (ds.test_env$secure_login_details) - { - #reading data from local files - ds.test_env$local.values.1 <- read.csv("data_files/GAMLSS/gamlss1.csv", header = TRUE) - ds.test_env$local.values.2 <- read.csv("data_files/GAMLSS/gamlss2.csv", header = TRUE) - ds.test_env$local.values.3 <- read.csv("data_files/GAMLSS/gamlss3.csv", header = TRUE) - ds.test_env$local.values <- rbind(ds.test_env$local.values.1,ds.test_env$local.values.2,ds.test_env$local.values.3) - if (ds.test_env$driver == "OpalDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "GAMLSS.gamlss1", options=ds.test_env$options_1) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "GAMLSS.gamlss2", options=ds.test_env$options_2) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "GAMLSS.gamlss3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/gamlss/gamlss1", driver = ds.test_env$driver) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/gamlss/gamlss2", driver = ds.test_env$driver) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/gamlss/gamlss3", driver = ds.test_env$driver) - ds.test_env$login.data <- builder$build() - } - else - { - #to do - #ds.test_env$login.data <- DSLite::setupCLUSTERTest("dsBase", env = ds.test_env) - } - ds.test_env$stats.var <- variables - - } -} - - connect.studies.dataset.cnsim <- function(variables) { log.out.data.server() @@ -270,14 +186,6 @@ connect.studies.dataset.anthro <- function(variables) log.in.data.server() } -connect.studies.dataset.gamlss <- function(variables) -{ - log.out.data.server() - source("connection_to_datasets/login_details.R") - init.studies.dataset.gamlss(variables) - log.in.data.server() -} - disconnect.studies.dataset.cnsim <- function() { log.out.data.server() @@ -307,8 +215,3 @@ disconnect.studies.dataset.anthro <- function() { log.out.data.server() } - -disconnect.studies.dataset.gamlss <- function() -{ - log.out.data.server() -} diff --git a/tests/testthat/connection_to_datasets/init_testing_datasets.R b/tests/testthat/connection_to_datasets/init_testing_datasets.R index 52fb7fcf..0341f707 100644 --- a/tests/testthat/connection_to_datasets/init_testing_datasets.R +++ b/tests/testthat/connection_to_datasets/init_testing_datasets.R @@ -21,27 +21,19 @@ init.testing.datasets <- function() if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "TESTING.DATASET1", options=ds.test_env$options_1) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "TESTING.DATASET2", options=ds.test_env$options_2) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "TESTING.DATASET3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/testing/DATASET1", driver = "ArmadilloDriver") - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/testing/DATASET2", driver = "ArmadilloDriver") - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/testing/DATASET3", driver = "ArmadilloDriver") + builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "TESTING.DATASET1") + builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "TESTING.DATASET2") + builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "TESTING.DATASET3") ds.test_env$login.data <- builder$build() } else { ds.test_env$login.data <- DSLite::setupDATASETTest("dsBase", env = ds.test_env) } - ds.test_env$stats.var <- list('CHARACTER', 'LOGICAL', 'NA_VALUES', 'INTEGER', 'NULL_VALUES', - 'NON_NEGATIVE_INTEGER', 'POSITIVE_INTEGER', 'NEGATIVE_INTEGER', - 'NUMERIC', 'NON_NEGATIVE_NUMERIC', 'POSITIVE_NUMERIC', 'NEGATIVE_NUMERIC', 'FACTOR_CHARACTER', - 'FACTOR_INTEGER', 'IDENTIFIER', 'CATEGORY', 'IDENTIFIER', 'CATEGORY', 'NUMERIC_ONE_CHANGE', 'INTEGER_ONE_CHANGE') + ds.test_env$stats.var <- list('ID','CHARACTER', 'LOGICAL','NA_VALUES','INTEGER','NULL_VALUES', + 'NON_NEGATIVE_INTEGER','POSITIVE_INTEGER','NEGATIVE_INTEGER', + 'NUMERIC', 'NON_NEGATIVE_NUMERIC','POSITIVE_NUMERIC','NEGATIVE_NUMERIC','FACTOR_CHARACTER', + 'FACTOR_INTEGER','IDENTIFIER','CATEGORY','IDENTIFIER','CATEGORY', 'NUMERIC_ONE_CHANGE', 'INTEGER_ONE_CHANGE') } } @@ -56,13 +48,7 @@ init.dataset.3 <- function() if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "TESTING.DATASET3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "datashield/testing/DATASET3", driver = "ArmadilloDriver") + builder$append(server = "study3", url = ds.test_env$ip_address_3, user = ds.test_env$user_3, password = ds.test_env$password_3, table = "TESTING.DATASET3") ds.test_env$login.data <- builder$build() } else @@ -88,13 +74,7 @@ init.dataset.2 <- function() if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "TESTING.DATASET2", options=ds.test_env$options_2) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "datashield/testing/DATASET2", driver = "ArmadilloDriver") + builder$append(server = "study2", url = ds.test_env$ip_address_2, user = ds.test_env$user_2, password = ds.test_env$password_2, table = "TESTING.DATASET2") ds.test_env$login.data <- builder$build() } else @@ -120,13 +100,7 @@ init.dataset.1 <- function() if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "TESTING.DATASET1", options=ds.test_env$options_1) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/testing/DATASET1", driver = "ArmadilloDriver") + builder$append(server = "study1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "TESTING.DATASET1") ds.test_env$login.data <- builder$build() } else @@ -159,17 +133,9 @@ init.testing.dataset.factor_levels <- function() if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "GROUP1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS1", options=ds.test_env$options_1) - builder$append(server = "GROUP2", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS2", options=ds.test_env$options_2) - builder$append(server = "GROUP3", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS3", options=ds.test_env$options_3) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "GROUP1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/factor_levels/FACTOR_LEVELS1", driver = "ArmadilloDriver") - builder$append(server = "GROUP2", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/factor_levels/FACTOR_LEVELS2", driver = "ArmadilloDriver") - builder$append(server = "GROUP3", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/factor_levels/FACTOR_LEVELS3", driver = "ArmadilloDriver") + builder$append(server = "GROUP1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS1") + builder$append(server = "GROUP2", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS2") + builder$append(server = "GROUP3", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS3") ds.test_env$login.data <- builder$build() } else @@ -192,13 +158,7 @@ init.testing.dataset.factor_levels.1 <- function() if (ds.test_env$driver == "OpalDriver") { builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "GROUP1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS1", options=ds.test_env$options_1) - ds.test_env$login.data <- builder$build() - } - else if (ds.test_env$driver == "ArmadilloDriver") - { - builder <- DSI::newDSLoginBuilder(.silent = TRUE) - builder$append(server = "GROUP1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "datashield/factor_levels/FACTOR_LEVELS1", driver = "ArmadilloDriver") + builder$append(server = "GROUP1", url = ds.test_env$ip_address_1, user = ds.test_env$user_1, password = ds.test_env$password_1, table = "FACTOR_LEVELS.FACTOR_LEVELS1") ds.test_env$login.data <- builder$build() } else @@ -213,8 +173,8 @@ init.testing.dataset.factor_levels.1 <- function() log.in.data.server <- function() { - # ds.test_env$connections <- datashield.login(logins=ds.test_env$login.data, assign=TRUE,variables=ds.test_env$stats.var, opts = getOption("datashield.opts", list(ssl_verifyhost=0, ssl_verifypeer=0))) - ds.test_env$connections <- datashield.login(logins=ds.test_env$login.data, assign=TRUE,variables=ds.test_env$stats.var, opts = getOption("datashield.opts")) + #print(ds.test_env$login.data) + ds.test_env$connections <- datashield.login(logins=ds.test_env$login.data, assign=TRUE,variables=ds.test_env$stats.var) } diff --git a/tests/testthat/connection_to_datasets/login_details.R b/tests/testthat/connection_to_datasets/login_details.R index ba5bae06..6ac3305f 100644 --- a/tests/testthat/connection_to_datasets/login_details.R +++ b/tests/testthat/connection_to_datasets/login_details.R @@ -1,74 +1,33 @@ #This script determine all the login information to the servers used for the testing. +#The first time, you will need to edit the server_ip_address. The latter is required to set +#access to the data on the virtual machines. -source("connection_to_datasets/init_local_settings.R") +source("connection_to_datasets/init_local_settings.R") init.ip.address() - -# create blank enviroment of test data -ds.test_env <- new.env() - -# this option helps DSI to find the connection objects by looking in the right environment -options(datashield.env=ds.test_env) - -ds.test_env$server_ip_address <- init.ip.address() - -if (! is.null(getOption("default_driver"))) { - ds.test_env$driver <- getOption("default_driver") -} else { - # switch between "DSLiteDriver" and "OpalDriver", "ArmadilloDriver" to test - # ds.test_env$driver <- "DSLiteDriver" - ds.test_env$driver <- "OpalDriver" - # ds.test_env$driver <- "ArmadilloDriver" -} - -if ((ds.test_env$driver == "DSLiteDriver") || (ds.test_env$driver == "OpalDriver")) { - ds.test_env$ping_address <- paste("https://", ds.test_env$server_ip_address, ":8443", sep="") - ds.test_env$ping_config <- config(timeout=5, ssl_verifyhost=0, ssl_verifypeer=0) - - ds.test_env$ip_address_1 <- paste("https://", ds.test_env$server_ip_address, ":8443", sep="") - ds.test_env$ip_address_2 <- paste("https://", ds.test_env$server_ip_address, ":8443", sep="") - ds.test_env$ip_address_3 <- paste("https://", ds.test_env$server_ip_address, ":8443", sep="") - - ds.test_env$user_1 <- getOption("opal.user", "administrator") - ds.test_env$user_2 <- getOption("opal.user", "administrator") - ds.test_env$user_3 <- getOption("opal.user", "administrator") - - ds.test_env$password_1 <- getOption("opal.password", "datashield_test&") - ds.test_env$password_2 <- getOption("opal.password", "datashield_test&") - ds.test_env$password_3 <- getOption("opal.password", "datashield_test&") - - ds.test_env$options_1 <- "list(ssl_verifyhost=0, ssl_verifypeer=0)" - ds.test_env$options_2 <- "list(ssl_verifyhost=0, ssl_verifypeer=0)" - ds.test_env$options_3 <- "list(ssl_verifyhost=0, ssl_verifypeer=0)" - - ds.test_env$secure_login_details <- TRUE -} else if (ds.test_env$driver == "ArmadilloDriver") { - ds.test_env$ping_address <- paste("http://", ds.test_env$server_ip_address, ":8080", sep="") - ds.test_env$ping_config <- config(timeout=5) - - ds.test_env$ip_address_1 <- paste("http://", ds.test_env$server_ip_address, ":8080", sep="") - ds.test_env$ip_address_2 <- paste("http://", ds.test_env$server_ip_address, ":8080", sep="") - ds.test_env$ip_address_3 <- paste("http://", ds.test_env$server_ip_address, ":8080", sep="") - - ds.test_env$user_1 <- getOption("opal.user", "admin") - ds.test_env$user_2 <- getOption("opal.user", "admin") - ds.test_env$user_3 <- getOption("opal.user", "admin") - - ds.test_env$password_1 <- getOption("opal.password", "admin") - ds.test_env$password_2 <- getOption("opal.password", "admin") - ds.test_env$password_3 <- getOption("opal.password", "admin") - - ds.test_env$options_1 <- "list()" - ds.test_env$options_2 <- "list()" - ds.test_env$options_3 <- "list()" - - ds.test_env$secure_login_details <- TRUE -} else { - stop("**** Unknown Driver ****", call. = FALSE) -} - -ds.test_env$high_tolerance <- 10^-7 -ds.test_env$medium_tolerance <- 10^-6 -ds.test_env$low_tolerance <- 10^-4 -ds.test_env$very_low_tolerance <- 10^-3 -ds.test_env$tolerance <- ds.test_env$medium_tolerance + ds.test_env <- new.env() + # this option helps DSI to find the connection objects by looking in the right environment + options(datashield.env=ds.test_env) + ds.test_env$tolerance = 10^-6 + + ds.test_env$server_ip_address = init.ip.address() + + #This TCP/IP address is required to test a connect to the server. + ds.test_env$ping_address <- paste("http://", ds.test_env$server_ip_address, ":8080", sep="" ) + + ds.test_env$ip_address_1 <- ds.test_env$ping_address + ds.test_env$ip_address_2 <- ds.test_env$ping_address + ds.test_env$ip_address_3 <- ds.test_env$ping_address + + ds.test_env$user_1 <- getOption("opal.user", "administrator") + ds.test_env$user_2 <- getOption("opal.user", "administrator") + ds.test_env$user_3 <- getOption("opal.user", "administrator") + + ds.test_env$password_1 <- getOption("opal.password", "datashield_test&") + ds.test_env$password_2 <- getOption("opal.password", "datashield_test&") + ds.test_env$password_3 <- getOption("opal.password", "datashield_test&") + + # switch to "DSLiteDriver" to test with DSLite + # ds.test_env$driver <- "DSLiteDriver" + ds.test_env$driver <- "OpalDriver" + ds.test_env$secure_login_details = TRUE diff --git a/tests/testthat/data_files/ANTHRO/anthro1.csv b/tests/testthat/data_files/ANTHRO/anthro1.csv index 5dcfa720..b4289b18 100644 --- a/tests/testthat/data_files/ANTHRO/anthro1.csv +++ b/tests/testthat/data_files/ANTHRO/anthro1.csv @@ -1,874 +1,874 @@ -,age,sex,weight,height,muac -1,6,1,7.3,65,14.6 -2,42,2,12.5,89.5,15.6 -3,23,1,10.6,78.1,14.9 -4,18,1,12.8,81.5,16 -5,52,1,12.1,87.3,15.2 -6,36,2,16.9,93,19 -7,30,2,12.5,82.2,16.6 -8,48,1,16.3,99,15.4 -9,29,1,11,82,13.5 -10,54,1,14.2,85.9,15.1 -11,11,2,6.2,66.3,11.5 -12,36,2,13.1,87,16.4 -13,42,1,13.5,91,14.4 -14,36,1,11.7,87.5,14.3 -15,16,1,9.1,73.1,13.5 -16,48,2,12,90.7,14.9 -17,11,1,9.4,74.8,13.8 -18,46,2,13.9,93.5,15.2 -19,32,1,12.6,83,15.5 -20,33,2,11.8,85.7,12.7 -21,42,1,11.3,84.5,14.5 -22,40,2,12.9,101.2,16.1 -23,21,2,8.9,75,13.6 -24,25,1,10.7,81.3,14.3 -25,30,1,14.4,82.4,13.5 -26,6,1,8.2,68.8,13.2 -27,34,2,13.9,88.3,14.9 -28,30,1,9.6,79,12.8 -29,33,2,11.5,83.5,14 -30,12,1,8.5,71.4,13.5 -31,10,1,7.9,69.5,14.4 -32,35,1,13.2,85.5,15 -33,10,2,5.1,62.5,11 -34,56,2,16.4,99,15.3 -35,42,1,14,93.2,16.4 -36,48,1,13.2,99,14.2 -37,48,1,14.3,101.5,14.6 -38,47,1,15.8,97.5,16.1 -39,12,2,8.5,75.3,14 -40,36,1,11,79,15 -41,24,2,9.8,75.5,14.6 -42,14,1,6.7,75.4,13.2 -43,20,1,10.6,79,13.8 -44,51,2,15.4,93.2,17.4 -45,12,1,8.1,71.4,12.2 -46,18,2,8.3,74.1,12.9 -47,21,2,10.4,73.6,14.5 -48,13,2,10,76.5,17 -49,13,1,9.1,71,14.1 -50,30,1,13.6,90.3,14.5 -51,36,1,12,87,14.1 -52,18,2,8.1,71.4,13.6 -53,28,1,11.1,78,16 -54,30,2,13.2,89.7,16 -55,50,2,14.8,102.3,15.5 -56,48,1,14,92.5,16.5 -57,55,2,14.5,98.6,14.3 -58,57,1,17.5,104,16.6 -59,46,1,13.6,90,15.3 -60,15,1,8.3,71.2,12 -61,33,1,11,85.6,14.9 -62,47,2,13.8,92.8,15.5 -63,20,1,9.7,77,16 -64,36,1,12,88,14.9 -65,58,1,16.3,94.1,16.8 -66,29,1,11.5,83.6,15 -67,33,2,9.5,77.5,13 -68,49,1,16.1,102.7,15.6 -69,20,1,11.4,74.3,15 -70,18,2,9.6,80,14.3 -71,12,2,7.5,71.3,12.8 -72,46,2,17.7,102.3,16.2 -73,34,2,11,84.4,14.3 -74,36,1,14.9,90.1,16 -75,54,2,15.3,92.6,15.5 -76,36,2,12.2,85.7,14.5 -77,38,1,13.9,89.9,15.7 -78,18,1,9.6,79,14.6 -79,55,2,12.9,96,14.3 -80,35,1,11.4,87.4,12.5 -81,15,1,9.1,72.5,13.4 -82,33,2,9.4,75.8,13.7 -83,51,2,15,94.7,15.8 -84,57,1,13,90.4,14.5 -85,15,1,7.5,71.3,11.5 -86,12,1,8.7,65,15.9 -87,22,2,8,80,12.3 -88,48,2,11.5,101.2,14.1 -89,35,1,11.2,86,14 -90,9,2,5.5,65.7,13.2 -91,58,1,19.9,102.2,15.4 -92,16,2,10.1,85,13.9 -93,48,1,14.1,92,14.2 -94,18,2,8.5,73.6,11.5 -95,48,2,15,96.7,15.4 -96,17,2,7.2,71.5,11.8 -97,53,2,13.1,92.2,14.5 -98,34,2,10.9,81.2,12.8 -99,7,2,6.1,58,12 -100,31,1,11.1,81.3,14.7 -101,45,1,12.9,77.5,16.5 -102,30,1,12.3,86.9,13.9 -103,12,2,7.2,69,12.8 -104,12,1,9.8,70.6,12.5 -105,30,1,9.1,75,14 -106,18,1,8.2,71.2,12.4 -107,43,2,11.4,84,14.8 -108,32,1,13.2,98,15.7 -109,9,1,8.4,67.4,12 -110,7,1,6.9,61.5,11.9 -111,45,1,12.5,78.3,14.9 -112,33,2,9.5,72.1,15.5 -113,20,1,11.5,80.9,13.6 -114,39,2,15.5,84.7,15.6 -115,19,1,10.1,79.4,15.6 -116,28,2,12.5,88.4,13.2 -117,24,2,8.2,74,12.6 -118,22,2,7.7,71.5,12 -119,33,1,9.9,79.4,14.9 -120,47,2,16.6,95.8,17.8 -121,10,2,8.7,73.3,14.5 -122,28,1,9.7,75,13 -123,31,1,10.5,81.1,13.1 -124,48,1,15.7,102.7,14.6 -125,16,1,9.1,74,13.5 -126,22,1,9.7,80,13.7 -127,32,2,11.7,89.4,13.8 -128,50,1,15.9,104,15 -129,27,1,11.2,75.3,15.7 -130,22,1,9.5,75.2,13.4 -131,20,1,8.2,73.5,12.6 -132,57,2,14.3,91.3,16.7 -133,25,1,10.6,82.4,14 -134,36,1,11.9,83,15 -135,28,1,10.2,79.6,15.5 -136,29,1,12.7,86.2,16 -137,43,1,13.8,90.4,15.1 -138,35,2,13.3,81,13.7 -139,54,1,13,95.2,16.5 -140,35,2,8.8,79.2,14.6 -141,56,1,13.6,90.4,14.7 -142,36,2,13.7,91,14.7 -143,37,2,12.2,84.5,11.8 -144,22,2,9.2,76.5,14.3 -145,44,2,16.7,92.2,14.5 -146,36,2,9.9,80,14.3 -147,45,2,9.9,80,13.3 -148,54,2,14.6,99.3,15.6 -149,31,2,10.3,77.9,15.9 -150,12,2,9.2,72,14 -151,49,1,13.6,96.6,14.9 -152,48,2,16.9,103.5,16 -153,29,1,9.3,79.5,11.5 -154,36,2,10.6,85.5,13.9 -155,22,1,10.6,75,14.7 -156,24,2,12.3,82,16 -157,24,1,10.4,78.1,12 -158,36,1,12.9,92,16 -159,20,2,8.2,74.2,12.5 -160,58,1,14.1,96.1,14.2 -161,31,1,12.2,83.8,14.8 -162,18,1,11.1,74,13.3 -163,8,1,7.2,66.3,12 -164,36,1,14.1,88.5,15.8 -165,59,2,13.1,89.6,15.5 -166,29,1,10.7,83.6,14 -167,36,2,10.3,86.1,14 -168,28,1,12,73.4,12.9 -169,36,1,9,77.5,14.5 -170,12,2,6.9,69.1,13 -171,41,1,10.3,80.3,14.7 -172,18,2,5.5,68,11.4 -173,32,1,15.5,85.3,15.7 -174,36,1,12.1,89,15.1 -175,47,2,15.7,98.7,15.3 -176,18,2,9,70.2,15.5 -177,11,1,7.9,71.5,12.9 -178,46,1,13.6,89.2,16.9 -179,25,2,14.5,86.2,16.2 -180,52,2,17.5,103.4,17 -181,48,1,12,90.1,14.2 -182,12,2,5.6,61.1,12 -183,29,2,8,78,11 -184,48,2,7.9,82,12.8 -185,48,2,13.5,90.9,16 -186,32,2,10.1,78.2,14 -187,39,2,14.6,91,16 -188,37,2,6.9,75.3,13.5 -189,34,1,11,74,15.5 -190,45,2,14.1,86.9,14.9 -191,48,2,15.2,100,15 -192,51,2,13.4,98.3,14 -193,40,2,11.4,87.7,16.2 -194,54,2,11.4,88.6,14.8 -195,20,1,9.6,77.1,13.5 -196,26,2,11.4,80,14.1 -197,34,2,15,93.2,14.7 -198,48,1,13.7,92.2,16.5 -199,45,2,12.5,98.4,13.2 -200,22,1,7,71.5,11.9 -201,29,2,8.3,76.5,12.9 -202,49,1,15.3,85.6,16.4 -203,36,1,10.5,88.1,16.1 -204,33,2,12.9,80.3,13.4 -205,18,2,8.1,70.2,13.2 -206,11,2,5.6,64,12 -207,45,1,14.8,85.7,15.5 -208,34,2,9.3,79.9,15 -209,42,2,13.6,92.5,15.5 -210,14,1,8.9,72.5,14.5 -211,33,2,10.4,86,13 -212,58,2,16,98,16.2 -213,36,1,12.6,86.5,14.3 -214,42,2,12.9,83,16.6 -215,28,2,9.4,80.8,12.2 -216,32,1,11.1,83.5,14.4 -217,36,1,13.3,80.5,14.4 -218,12,2,9.5,75.6,14.7 -219,7,2,7.5,64.6,14.7 -220,21,1,8.8,76,12.8 -221,16,1,11.1,82,14.8 -222,7,1,8.4,68,14.5 -223,56,2,13.6,93,16 -224,44,2,14.3,90.2,15.6 -225,36,2,10.5,80,13.4 -226,48,2,16.6,108,15.1 -227,55,1,16.2,94.8,15.7 -228,24,2,6.7,74.9,10.5 -229,33,1,12.4,86.7,14.6 -230,14,1,9.8,79.2,14.5 -231,10,1,6.3,60.9,13.2 -232,21,2,13.4,80.2,14.2 -233,17,2,7.6,67,13.2 -234,9,2,8.2,63.8,12.1 -235,48,1,12.3,91,14 -236,32,1,10.9,85,14.3 -237,56,1,17.3,105.1,16.8 -238,48,2,14.2,89,17 -239,11,2,6.1,69.5,12 -240,34,2,11.2,83.2,13.7 -241,24,2,8.4,73,12 -242,35,2,13.1,90,14.7 -243,23,2,10,76.4,14.5 -244,58,1,18.9,110.5,16.1 -245,42,2,11.1,82,13.2 -246,45,1,14.2,92.1,15.6 -247,48,2,11.1,93.6,15 -248,48,1,12.4,79.1,14.3 -249,37,2,12.9,92.5,13.8 -250,43,1,13.1,93.5,15 -251,30,1,11.2,83.4,14.5 -252,39,1,11.4,85,14.6 -253,36,2,11.1,83.4,14.6 -254,20,2,7.5,81.2,12.3 -255,34,2,10.9,85.3,14.1 -256,15,2,12.1,71.3,13.4 -257,58,1,16.5,103.7,16.8 -258,34,1,10.9,81.9,16 -259,19,2,7.8,65.5,13.5 -260,58,2,13.7,91.9,13.3 -261,24,1,11.6,75.6,12.7 -262,17,1,7.8,68.9,12.9 -263,13,1,9.4,82.9,14.5 -264,17,2,8.3,71.1,12.9 -265,44,2,10.9,77,14.4 -266,59,2,15.1,102.6,15.1 -267,20,2,9.6,76.1,12.2 -268,16,2,11.4,81.5,13.6 -269,28,1,12.4,85,15.8 -270,25,1,8.3,71.9,15 -271,29,2,9.8,77.8,13.1 -272,45,1,11.9,86,15.6 -273,29,2,13.7,86.6,17.1 -274,54,2,15.1,95,14.8 -275,22,1,12.5,90,15.5 -276,7,1,6.7,66,13.7 -277,55,2,15.7,103.1,15.1 -278,42,2,12.9,92.6,15.4 -279,29,1,12.3,90.3,14.3 -280,21,2,8.4,71,13.5 -281,11,1,7,67.4,12.5 -282,30,1,10.7,80.9,15 -283,48,1,11.1,80.3,15.3 -284,28,2,11.8,83.6,14.2 -285,21,1,11.1,79.4,12 -286,36,2,9.4,79.6,14.4 -287,18,2,7.5,71,13.6 -288,52,1,14.8,93.5,15.8 -289,8,2,6.3,64,13.2 -290,37,2,13.6,85.6,12.8 -291,36,2,11.3,88.7,14.4 -292,8,2,8.3,63.6,14.4 -293,42,1,10.9,81,13 -294,10,1,8.5,71.3,14.5 -295,55,2,17.8,107.5,16.9 -296,11,2,8.6,81.3,15.3 -297,17,1,12.8,85.5,16 -298,33,1,14.7,96,15.5 -299,15,1,7.3,69.9,12.1 -300,45,2,14.2,96.5,16.8 -301,35,1,13.8,89.1,16.9 -302,32,1,13.6,88.3,16 -303,52,2,11,80.3,14.2 -304,19,1,13.7,87.1,18 -305,8,1,7.9,65.7,13.3 -306,34,1,11.6,81.9,15.2 -307,8,1,8.5,70.4,13.6 -308,53,2,11.6,90,14.3 -309,22,1,9.8,77,13 -310,13,1,10.1,77.5,15.2 -311,51,2,12.6,89.9,14.3 -312,12,2,6.8,65.1,12.3 -313,43,2,14.4,92.5,15.9 -314,54,2,16.6,102.3,15.5 -315,41,1,10.5,76.1,14.6 -316,57,2,15.7,93.7,17.5 -317,56,2,12.5,81.7,14 -318,24,1,12,81.9,15 -319,26,2,9.4,81.2,12.3 -320,36,1,12.9,90.3,16.4 -321,55,1,14.6,98.4,14.8 -322,58,2,12.9,87,16 -323,18,2,8.5,72.3,14.8 -324,15,2,8.8,71.4,13.1 -325,38,2,9.9,80,15.1 -326,54,1,16,99.5,15.3 -327,6,1,7.7,62.4,14.4 -328,58,2,17,101.1,15.5 -329,24,2,8.2,73.9,12.5 -330,9,2,5.7,63.5,11.7 -331,43,2,13,93.5,15.7 -332,44,1,15.5,96.1,16.4 -333,49,2,14.6,91.2,16.6 -334,28,1,12.2,80,15.5 -335,33,1,9.5,80,13.9 -336,26,2,7.7,77.4,14 -337,56,1,15.4,102.1,14.8 -338,18,1,13.1,84.7,14.8 -339,22,2,8,72.5,12.5 -340,8,1,6.2,60.8,13.2 -341,36,2,13.1,95.2,16.5 -342,41,1,15.3,94.2,16.2 -343,38,2,10.7,82.1,13.3 -344,18,2,7.4,72.1,13 -345,53,1,13.9,102.8,16.2 -346,13,1,9.3,73.2,14.2 -347,10,2,7.3,64,11.8 -348,30,2,9.2,77,12.1 -349,37,2,16.3,83.7,15.5 -350,48,1,12,90.5,15.4 -351,28,1,10.1,81.7,14.9 -352,9,1,8.1,66.6,14.8 -353,36,1,11.9,91.3,14.3 -354,30,2,11.9,87,15.5 -355,43,1,12.7,86.1,15.5 -356,30,2,10.6,86,13.7 -357,36,2,15.1,91,16.9 -358,30,2,9.8,75,15.1 -359,38,1,13.6,86.8,15.2 -360,8,2,6.9,65.2,13.8 -361,34,2,11.9,88.7,14.5 -362,24,2,8.2,71.8,12.3 -363,11,1,8.4,73.1,15 -364,36,2,11,80.5,12.7 -365,55,2,11.6,80.5,16.1 -366,19,2,8.4,73.8,13 -367,33,2,12.9,76.2,15.5 -368,32,1,10.9,82,14 -369,10,2,8.6,73.5,14.2 -370,56,1,15.5,98.4,16.1 -371,37,2,15.1,97.5,14.8 -372,44,1,15.6,101,15 -373,30,2,8.6,79.4,13.2 -374,10,1,7.8,69.8,11.2 -375,22,2,8,74.9,11.3 -376,58,2,13.9,90.1,15.4 -377,12,2,6.1,63,12.3 -378,36,2,12.6,82.4,11.9 -379,24,2,10.7,74.2,14.3 -380,35,2,11.1,83.6,14.8 -381,24,1,8.2,72,12.2 -382,24,1,11.2,83.4,14.5 -383,23,2,10.2,78.4,13.5 -384,6,2,5.9,62.5,13.9 -385,41,2,14.4,96.2,15 -386,43,2,8.4,77,13.5 -387,53,2,15.5,98.1,14.7 -388,34,1,12.7,84.2,15.8 -389,12,2,6.2,63,13.4 -390,17,2,11.4,80.5,15.1 -391,24,1,8.7,75.5,12.5 -392,28,1,11,83.8,12.7 -393,46,2,11.2,83,14.5 -394,18,1,9.3,78,13.6 -395,33,1,12.4,90,15.4 -396,17,1,8.1,72.3,13.7 -397,36,1,13.1,90.3,14.8 -398,32,1,9.2,79.5,13.5 -399,8,1,10.3,68.9,15 -400,44,2,12.3,84.2,13.9 -401,59,2,15.4,97.7,16.4 -402,40,2,12.9,88.3,14.9 -403,48,2,13,91.4,13.9 -404,28,2,10.7,72.4,12.4 -405,33,1,12.9,89.8,14.5 -406,32,1,9.1,75.5,12.3 -407,30,1,12.4,79.7,13.4 -408,8,2,7.2,61.5,11.5 -409,53,1,16.1,101.6,12.1 -410,35,2,7.1,73.3,12 -411,22,2,7.7,74,12 -412,54,1,12.6,99.5,12.9 -413,30,1,10.1,81.4,14.1 -414,38,2,10.2,75.3,14.5 -415,18,1,12,84.2,16.4 -416,36,2,15.3,92.3,16 -417,12,2,8.4,65.9,12.7 -418,22,1,9.5,78,12.6 -419,34,1,13.8,89.6,16.7 -420,34,1,11.7,84,14.8 -421,7,1,8.3,65.6,14.1 -422,12,1,10.3,76.4,13.2 -423,35,2,9.1,77.8,13.5 -424,11,1,12.1,71.4,13.5 -425,42,1,10.8,85.6,14.5 -426,34,1,12.2,89.3,14 -427,24,2,9.5,73.2,12.5 -428,27,2,10.4,79.8,14.7 -429,41,1,13.4,87.3,16.5 -430,11,1,11.2,78.2,15.8 -431,20,1,11.1,71,15.6 -432,12,2,7.1,67.5,13.5 -433,9,2,8.5,68.4,12.2 -434,38,1,14.3,92.2,15.7 -435,59,2,14.9,95.7,15.8 -436,44,2,14.9,83.4,14.2 -437,19,1,9.4,81.4,14.6 -438,7,1,6,56.2,12.2 -439,47,2,17.2,89.2,15.8 -440,10,1,5.3,60.7,10.6 -441,48,2,13.4,82.4,15.5 -442,23,1,9.4,80.6,13.2 -443,30,1,11.9,82,14.5 -444,30,2,11.7,85,15 -445,48,1,15.8,99.9,15.5 -446,30,1,13.1,87.5,16.2 -447,38,1,11.6,87.7,14.7 -448,8,2,6.6,64,13 -449,38,2,14.2,94.5,15.1 -450,49,1,13.4,92.2,14.9 -451,42,1,12.9,92,15.6 -452,12,1,6.5,66,13 -453,48,1,14,101,15.8 -454,8,1,8.2,65.3,14 -455,8,1,8.7,75,14.3 -456,30,2,10.6,79.4,13.6 -457,12,1,8.4,70.2,14.4 -458,40,1,13.4,92.5,16 -459,38,2,15.2,101.5,14.8 -460,44,1,15.2,95.4,15.5 -461,24,2,6.6,68.3,11.3 -462,7,2,8,66.3,13.8 -463,26,1,9.3,76.2,14.2 -464,48,1,12.1,83.7,15.2 -465,46,1,11.5,85.8,13.5 -466,10,1,7.2,69.4,12.7 -467,48,2,13.1,102.8,14.2 -468,21,1,7.9,72.5,14.2 -469,8,2,7.1,62,14.6 -470,14,1,9.2,73.4,13.5 -471,36,1,11.1,86.8,15.6 -472,36,2,12.4,86.4,14.5 -473,57,1,15.2,100,15.8 -474,29,2,12.6,87,14.3 -475,18,1,9.4,70,12.5 -476,38,2,14.2,92.9,15.1 -477,16,1,7.7,72.4,12.3 -478,15,2,7.8,69.6,13 -479,36,1,13.2,92.3,15.3 -480,11,2,8.4,70,13.2 -481,20,1,7.1,71.5,13 -482,23,1,13.4,77.3,14.4 -483,6,2,6.2,61,12.8 -484,9,1,9,70.8,14.6 -485,40,1,11.2,81.3,14.2 -486,20,1,12.8,82.5,14.3 -487,13,1,9.4,76.1,14 -488,14,1,8.6,73.8,14.3 -489,30,1,10.1,79.8,14.5 -490,38,1,13.9,90.6,15.2 -491,15,1,10.8,78.6,15.6 -492,45,1,13.9,102.1,12.8 -493,26,2,9.3,76.8,14.3 -494,14,1,9.4,78.6,12.7 -495,12,2,7,69.1,13.1 -496,18,1,8.8,70.1,12.4 -497,47,2,9,81,11.9 -498,59,2,12.7,87.4,13.7 -499,36,1,15.3,85.7,15.5 -500,39,1,12.4,79.4,14.5 -501,48,2,11.5,90.5,15.1 -502,7,2,9.5,71,15 -503,41,2,17,99.5,17.8 -504,25,1,11.9,87,15.5 -505,30,2,8.8,76,12.5 -506,31,1,10.7,75.1,14.6 -507,21,2,9.5,77.2,13.6 -508,55,1,16.5,99.6,16 -509,24,1,8.6,75.3,12.3 -510,50,2,9.5,88.3,12.2 -511,27,1,13.5,90,14.3 -512,22,2,8.4,70.9,13.5 -513,10,2,7.1,67.5,12.7 -514,10,1,10,75,15.2 -515,30,2,11.5,82.3,13.5 -516,14,1,7.6,67.4,13.3 -517,42,1,14.1,105.6,15.1 -518,39,1,17,101.1,16.5 -519,29,1,13,79.5,13.4 -520,24,1,9.8,77.5,13.9 -521,30,2,11.3,84,13.1 -522,47,2,12.3,88.2,15.5 -523,36,2,11.2,84.6,13.2 -524,27,2,12.3,79.4,13.2 -525,26,2,7.5,76.6,12.1 -526,9,2,7.9,65.2,12.5 -527,42,1,16.8,101.5,15.1 -528,24,2,11.1,87.4,14.8 -529,48,2,17.6,91.4,18 -530,27,1,11.6,81.2,15.2 -531,7,1,7.4,69.5,14 -532,27,2,11.1,87.4,13.8 -533,26,1,11.7,83,14.3 -534,10,2,7.3,65,12.2 -535,36,2,8.4,75.9,13.1 -536,33,2,12.1,85.4,16.4 -537,50,2,14.6,98.8,14.9 -538,36,2,9.1,80,13 -539,25,2,11.2,80.3,14.7 -540,24,1,10.3,82,14.6 -541,44,1,13.7,101.8,16.2 -542,59,1,14.8,96.9,14.6 -543,48,2,13.7,96.5,14.5 -544,19,2,10.8,76.5,13.5 -545,9,2,7.5,66.5,13.2 -546,23,1,9.9,78.7,15 -547,16,2,10,74.5,15.4 -548,51,2,15.2,94.3,14.1 -549,31,1,11,79.3,14.7 -550,51,2,11.3,83.2,14.3 -551,47,2,12,90.5,14.5 -552,34,2,9.5,74.8,13.9 -553,11,2,9.2,74.1,12.5 -554,11,1,9,70.4,14.8 -555,28,1,11.7,98.3,13.6 -556,35,1,10.1,87.9,13.9 -557,30,2,12.5,79,16.6 -558,30,1,11.3,82.3,14 -559,48,2,13.2,96.3,16.1 -560,48,2,15.4,100.5,15.2 -561,6,1,6.8,67.2,12.5 -562,48,2,15.2,92.7,16.2 -563,24,1,6.9,75.1,13.5 -564,22,2,7.9,71.5,12.1 -565,32,1,19.5,102.2,16.7 -566,59,2,12.8,87.2,14.4 -567,18,1,8.8,72,14.1 -568,32,2,11,80.2,14.2 -569,7,1,8,68.1,13 -570,24,1,9.5,80.3,12.8 -571,28,1,8,72,12.5 -572,8,1,8.5,74.2,14 -573,30,1,10.5,74.3,13.3 -574,9,1,6.9,67.2,12.6 -575,47,2,12.7,93,14.4 -576,29,1,11.5,83,14.8 -577,36,2,13.4,82.1,14 -578,24,1,8.6,72.7,14 -579,35,1,11.1,82.3,14.5 -580,23,1,8.9,78.2,11.8 -581,12,2,7.6,67.2,12.4 -582,16,2,13.1,71.4,12.7 -583,55,1,12.6,87.2,15.6 -584,23,2,12.4,88.2,12.9 -585,39,1,15.9,95.1,15.6 -586,46,1,13.5,88,15.5 -587,36,1,12.6,83.4,14.4 -588,40,1,14.1,97.5,15.1 -589,7,2,6.7,61.5,13.4 -590,55,2,13.8,91.8,14.8 -591,56,1,16,93.6,16.1 -592,30,1,10.8,80.1,12.5 -593,44,1,13.2,91.7,17.2 -594,15,2,9.4,72,12.2 -595,13,2,6.8,69.6,11.6 -596,46,1,14,94.2,15.2 -597,12,1,9,70,12.9 -598,30,1,10.1,84.5,14.7 -599,30,1,8.4,72.3,15 -600,46,1,13,92.5,15.3 -601,32,1,11.4,85.8,14 -602,30,2,10.1,79.1,14.4 -603,17,2,7.5,74,11.7 -604,47,1,12.5,90.7,14.5 -605,30,2,11.5,87,14.4 -606,12,2,7.6,65.3,12.7 -607,6,2,4.9,58.3,11.5 -608,42,2,13.9,105.4,15 -609,55,2,12.2,93.2,13.5 -610,42,2,14.7,92,14.8 -611,16,1,7.5,70.5,11.7 -612,40,1,11.2,82.3,15 -613,11,2,9.6,71,12.2 -614,28,1,11,83.2,13.8 -615,30,1,10.9,79.6,14.4 -616,54,2,13.3,87.4,14.5 -617,36,1,12.1,88.7,14.9 -618,50,1,15.6,96,15.5 -619,13,2,10.1,72.2,14.2 -620,49,2,12.5,96,13.9 -621,14,2,7.4,74.5,12 -622,48,2,12.7,90.5,14.3 -623,21,1,10.5,77.5,15.2 -624,42,1,12.8,96.7,13.1 -625,47,2,14.9,97.1,15.5 -626,54,1,16.7,99.1,17.3 -627,24,1,7.5,68.7,12.5 -628,14,1,9.8,75.7,13.8 -629,32,2,9.9,83,13.3 -630,33,2,12.5,80.2,15.5 -631,11,1,9.9,73,15.6 -632,26,2,8.9,73.6,13.5 -633,39,2,10.4,81.5,13.5 -634,28,1,10.1,83.2,13 -635,35,2,13.3,79.9,13.5 -636,8,1,7.3,64.6,14.3 -637,38,1,17.2,91.2,14.1 -638,56,2,15.7,97.4,16.4 -639,33,1,11.3,81.8,14 -640,27,1,9.8,75.8,11.7 -641,36,2,12.2,85.1,14.6 -642,6,1,6.2,61.2,12.2 -643,31,2,10.7,83.8,15 -644,10,2,7.1,65,13.5 -645,36,2,11.3,79.6,13.6 -646,34,1,10.5,84.7,14 -647,21,1,11.3,83,14.5 -648,20,2,9.4,75.7,12.2 -649,21,2,10.8,80,13.6 -650,36,2,13.9,91.1,12.5 -651,12,1,11,74.7,15.6 -652,17,2,9.3,72.8,13.6 -653,28,2,13.1,87.8,16.1 -654,46,1,11.8,87.5,14 -655,11,2,9.2,70.2,13.1 -656,58,2,14.7,101.2,14.5 -657,50,2,10.3,83.1,12.5 -658,22,2,9.1,81,13.1 -659,57,1,12.3,84.2,13.5 -660,15,1,8.9,75.4,13.8 -661,53,2,16.9,97.2,16.1 -662,39,1,11.6,83.1,14.8 -663,26,2,11.7,82,15.2 -664,13,1,8.1,67.4,12.3 -665,26,1,9.3,74.8,13.5 -666,21,2,10.1,78.5,14.2 -667,31,1,12.8,87.2,14.8 -668,33,1,10.7,80.5,13.6 -669,12,1,9.4,75.4,12.5 -670,28,2,10.9,80.3,14.4 -671,10,1,11.5,74,13.2 -672,11,1,8.3,71.8,13.4 -673,33,1,9.9,78.7,12.8 -674,46,2,11.8,86.7,13.1 -675,8,1,7.3,63.5,11.8 -676,12,1,9.3,73,14.5 -677,11,2,7.9,70.5,12.5 -678,6,2,10,64.1,13.5 -679,13,2,9,71,13.1 -680,8,1,7.1,65.6,11.5 -681,40,2,15.3,94.6,16 -682,19,2,8.2,67,12.8 -683,36,1,11.7,89.7,14 -684,31,1,11.1,81.2,14 -685,7,2,8.3,60.5,12.5 -686,10,2,10.4,64.4,11.6 -687,22,2,9.8,78.5,13.9 -688,40,2,12.7,88.3,14.4 -689,22,1,10.7,81.1,15 -690,22,2,10.4,80.1,14.6 -691,45,1,12.1,87.1,14.6 -692,23,1,11.6,80.5,15.4 -693,23,1,9.9,77.8,13.3 -694,18,1,9.6,73.5,11.7 -695,24,1,10,76.4,13.5 -696,12,2,6.7,67,12.4 -697,31,2,9.8,80,14 -698,43,2,14.6,102,15 -699,48,1,14.7,93.3,15.4 -700,17,2,6.9,71.4,14.1 -701,34,2,13.2,82.1,13.4 -702,41,1,14.6,83.8,15.6 -703,33,1,9.3,78.2,12 -704,36,2,13.3,80.3,14.5 -705,33,2,13.4,88.8,15.8 -706,11,2,9.2,65,14.5 -707,45,1,13.5,94.2,15 -708,17,1,8.1,73.8,13.1 -709,12,2,8.6,70,13.2 -710,11,2,8.8,71.5,15.5 -711,50,1,13.3,94.1,13.6 -712,30,2,9,77.1,12.1 -713,36,1,12.9,87.3,15 -714,13,2,7.3,69.3,13 -715,39,2,12.9,82.3,16.3 -716,8,2,7.3,67.4,12.5 -717,33,1,11.2,82.8,14.8 -718,21,2,8.7,81.2,11.7 -719,18,1,10.2,77.2,13.4 -720,15,2,7.4,74.5,13.5 -721,20,1,8.1,76.2,13.5 -722,26,2,12.3,80.5,16 -723,45,2,13.4,82.5,14.1 -724,24,2,7.8,75.3,13.4 -725,42,2,20.2,109.5,15.8 -726,35,2,10.8,87.5,15.1 -727,27,2,9.3,76.7,13.7 -728,38,1,12.4,90,11.7 -729,19,1,9.6,71.4,13.6 -730,10,2,8.1,66.2,12.8 -731,31,1,11,83.5,11.5 -732,59,1,14.5,92.7,15 -733,36,2,11.6,85.3,13.2 -734,19,1,7.9,71.3,12.5 -735,10,1,7.8,69,14 -736,23,1,13.9,84,12.8 -737,34,1,11.6,84,15 -738,48,2,14.7,99.8,16.4 -739,26,1,11.5,83.5,14 -740,55,1,12.3,89.1,13.8 -741,18,2,9,83.2,12.8 -742,12,2,10.4,67.2,15 -743,15,1,8.2,71.3,13.3 -744,43,1,15.5,93.6,16.1 -745,50,1,15.8,97.2,17.4 -746,30,2,10.2,82.3,13.1 -747,11,2,8.8,74.5,12.3 -748,22,2,11.1,78.6,14.3 -749,11,2,7.7,72.2,13.5 -750,22,1,10.2,78.5,14.5 -751,12,1,10,67,14.6 -752,12,1,8.3,69.8,12.2 -753,48,2,12.9,89.8,15.1 -754,29,1,9.3,69.4,12.5 -755,41,2,11.3,88.9,15.4 -756,36,1,11.7,85.9,14.8 -757,48,1,14.5,100.2,15.2 -758,12,2,8.1,70.6,12.6 -759,17,1,8.2,67.3,13.3 -760,44,1,13,89.4,15.3 -761,12,2,7.6,68.7,14.5 -762,54,2,14.6,101.2,15.6 -763,8,1,10.3,70.8,16 -764,25,1,10.8,81.5,13.5 -765,15,2,8.4,72.5,13 -766,12,2,9.8,77.5,13.8 -767,14,1,9.1,70.5,15 -768,40,2,14.2,94.8,16 -769,25,2,8.3,81.1,11.7 -770,31,2,9.7,81.1,13.8 -771,15,2,10.2,75.6,15.2 -772,41,2,11.2,88.3,13 -773,12,2,6.4,65.1,12.2 -774,8,1,9.5,72,14.8 -775,57,1,14.8,97,15.2 -776,34,1,14.2,81.1,14.2 -777,9,2,8.2,70.6,13 -778,35,1,10.3,79.7,13.4 -779,27,1,12.7,85.5,15 -780,7,1,8.3,67.7,14 -781,18,2,7.4,71.2,12.4 -782,30,1,10,81.4,14.6 -783,9,2,6.9,65.2,12.3 -784,34,1,10,75.8,13.3 -785,24,2,9.4,70.5,12.4 -786,15,2,8,69.5,13.3 -787,11,2,8,69.2,13.5 -788,24,2,10.5,78.7,14.5 -789,53,1,16.2,93,16.6 -790,45,1,15.5,95.9,15.5 -791,12,1,7.6,69.8,12.8 -792,50,1,12.8,91.5,14 -793,58,2,20.7,104.2,19.1 -794,20,1,10.1,76,16.3 -795,15,2,8,71.3,12.8 -796,28,2,9.9,79,14 -797,36,1,11,80.4,14.5 -798,48,2,11.3,85.5,13.7 -799,44,2,14.9,99,17 -800,32,1,10.9,79.7,14.7 -801,48,1,12.8,97.9,14.8 -802,35,1,10.4,86.2,13.9 -803,55,2,16.3,103.5,15.4 -804,24,2,10.1,76.9,13.2 -805,10,2,6.8,65.4,13.6 -806,8,1,5.9,61.9,12.5 -807,37,2,12.4,88,15.4 -808,17,1,9.1,75,14 -809,52,1,13.9,92.2,14.2 -810,20,1,9.3,79.8,13.3 -811,44,1,13.3,109.8,14.7 -812,31,2,9.7,85.2,12.5 -813,36,2,14.4,81.3,15.3 -814,48,2,10.4,90.5,15.3 -815,22,2,12.5,78.2,13.6 -816,30,1,10.4,92.3,13.6 -817,21,1,10.4,77,13.6 -818,23,2,9.3,75.5,14 -819,57,1,18.1,107.8,16.2 -820,56,1,13.1,93,15 -821,17,2,9.8,74.7,14 -822,47,1,15.1,93.1,16 -823,42,2,11.6,88.7,14.3 -824,47,1,15.8,101.3,16.1 -825,36,2,11.4,83,15.6 -826,36,1,11,81,14 -827,36,1,14.1,89.3,14.5 -828,48,2,14.5,95.6,15.9 -829,53,1,15.8,93.7,15.8 -830,8,2,7.8,68.5,15 -831,56,1,16.2,99.1,15.8 -832,28,2,9.1,75.9,13.4 -833,35,2,10.5,85.5,13.2 -834,24,2,9.4,80.3,13 -835,8,2,6.9,67,12.5 -836,35,2,12.6,86,16.3 -837,58,1,14.7,102.5,14.5 -838,36,1,10.8,80.1,14.3 -839,46,2,10.7,84.8,13.4 -840,12,2,8.8,73.5,13.8 -841,18,2,9.6,75.1,13.8 -842,26,2,10,73.2,11.7 -843,42,1,12.6,95.5,14.8 -844,59,2,15,99.5,14.6 -845,15,2,7.2,65.9,12 -846,56,2,15.3,99.5,16.5 -847,47,1,11.7,92.1,14.8 -848,6,1,5.9,61,13.8 -849,28,2,11.9,85.5,14.6 -850,20,2,6.4,69.1,11.2 -851,22,2,10.2,78.8,14.6 -852,7,2,7,62.2,14.2 -853,7,1,7.3,67.3,14.3 -854,24,1,11.8,87.3,13.6 -855,31,2,10,81.3,13.5 -856,18,2,10.6,75,15.3 -857,12,2,10.1,74.1,15.3 -858,22,2,8,78,13.3 -859,37,1,14,94.5,15.2 -860,34,2,13.9,79.9,14.5 -861,43,1,12.1,88.7,14.2 -862,41,1,11.6,86.6,15.1 -863,41,1,11.2,86,15 -864,8,1,8,67.3,13.1 -865,30,1,13.3,91.1,14 -866,8,1,7.3,63.7,13.3 -867,7,1,8.3,69.1,14 -868,40,1,12,89.2,14.4 -869,41,1,11.8,87.4,16 -870,9,2,8.2,64.8,12.3 -871,36,2,9.1,79.5,13.7 -872,48,1,14.9,95.3,16 +,age,sex,weight,height,muac +1,6,1,7.3,65,14.6 +2,42,2,12.5,89.5,15.6 +3,23,1,10.6,78.1,14.9 +4,18,1,12.8,81.5,16 +5,52,1,12.1,87.3,15.2 +6,36,2,16.9,93,19 +7,30,2,12.5,82.2,16.6 +8,48,1,16.3,99,15.4 +9,29,1,11,82,13.5 +10,54,1,14.2,85.9,15.1 +11,11,2,6.2,66.3,11.5 +12,36,2,13.1,87,16.4 +13,42,1,13.5,91,14.4 +14,36,1,11.7,87.5,14.3 +15,16,1,9.1,73.1,13.5 +16,48,2,12,90.7,14.9 +17,11,1,9.4,74.8,13.8 +18,46,2,13.9,93.5,15.2 +19,32,1,12.6,83,15.5 +20,33,2,11.8,85.7,12.7 +21,42,1,11.3,84.5,14.5 +22,40,2,12.9,101.2,16.1 +23,21,2,8.9,75,13.6 +24,25,1,10.7,81.3,14.3 +25,30,1,14.4,82.4,13.5 +26,6,1,8.2,68.8,13.2 +27,34,2,13.9,88.3,14.9 +28,30,1,9.6,79,12.8 +29,33,2,11.5,83.5,14 +30,12,1,8.5,71.4,13.5 +31,10,1,7.9,69.5,14.4 +32,35,1,13.2,85.5,15 +33,10,2,5.1,62.5,11 +34,56,2,16.4,99,15.3 +35,42,1,14,93.2,16.4 +36,48,1,13.2,99,14.2 +37,48,1,14.3,101.5,14.6 +38,47,1,15.8,97.5,16.1 +39,12,2,8.5,75.3,14 +40,36,1,11,79,15 +41,24,2,9.8,75.5,14.6 +42,14,1,6.7,75.4,13.2 +43,20,1,10.6,79,13.8 +44,51,2,15.4,93.2,17.4 +45,12,1,8.1,71.4,12.2 +46,18,2,8.3,74.1,12.9 +47,21,2,10.4,73.6,14.5 +48,13,2,10,76.5,17 +49,13,1,9.1,71,14.1 +50,30,1,13.6,90.3,14.5 +51,36,1,12,87,14.1 +52,18,2,8.1,71.4,13.6 +53,28,1,11.1,78,16 +54,30,2,13.2,89.7,16 +55,50,2,14.8,102.3,15.5 +56,48,1,14,92.5,16.5 +57,55,2,14.5,98.6,14.3 +58,57,1,17.5,104,16.6 +59,46,1,13.6,90,15.3 +60,15,1,8.3,71.2,12 +61,33,1,11,85.6,14.9 +62,47,2,13.8,92.8,15.5 +63,20,1,9.7,77,16 +64,36,1,12,88,14.9 +65,58,1,16.3,94.1,16.8 +66,29,1,11.5,83.6,15 +67,33,2,9.5,77.5,13 +68,49,1,16.1,102.7,15.6 +69,20,1,11.4,74.3,15 +70,18,2,9.6,80,14.3 +71,12,2,7.5,71.3,12.8 +72,46,2,17.7,102.3,16.2 +73,34,2,11,84.4,14.3 +74,36,1,14.9,90.1,16 +75,54,2,15.3,92.6,15.5 +76,36,2,12.2,85.7,14.5 +77,38,1,13.9,89.9,15.7 +78,18,1,9.6,79,14.6 +79,55,2,12.9,96,14.3 +80,35,1,11.4,87.4,12.5 +81,15,1,9.1,72.5,13.4 +82,33,2,9.4,75.8,13.7 +83,51,2,15,94.7,15.8 +84,57,1,13,90.4,14.5 +85,15,1,7.5,71.3,11.5 +86,12,1,8.7,65,15.9 +87,22,2,8,80,12.3 +88,48,2,11.5,101.2,14.1 +89,35,1,11.2,86,14 +90,9,2,5.5,65.7,13.2 +91,58,1,19.9,102.2,15.4 +92,16,2,10.1,85,13.9 +93,48,1,14.1,92,14.2 +94,18,2,8.5,73.6,11.5 +95,48,2,15,96.7,15.4 +96,17,2,7.2,71.5,11.8 +97,53,2,13.1,92.2,14.5 +98,34,2,10.9,81.2,12.8 +99,7,2,6.1,58,12 +100,31,1,11.1,81.3,14.7 +101,45,1,12.9,77.5,16.5 +102,30,1,12.3,86.9,13.9 +103,12,2,7.2,69,12.8 +104,12,1,9.8,70.6,12.5 +105,30,1,9.1,75,14 +106,18,1,8.2,71.2,12.4 +107,43,2,11.4,84,14.8 +108,32,1,13.2,98,15.7 +109,9,1,8.4,67.4,12 +110,7,1,6.9,61.5,11.9 +111,45,1,12.5,78.3,14.9 +112,33,2,9.5,72.1,15.5 +113,20,1,11.5,80.9,13.6 +114,39,2,15.5,84.7,15.6 +115,19,1,10.1,79.4,15.6 +116,28,2,12.5,88.4,13.2 +117,24,2,8.2,74,12.6 +118,22,2,7.7,71.5,12 +119,33,1,9.9,79.4,14.9 +120,47,2,16.6,95.8,17.8 +121,10,2,8.7,73.3,14.5 +122,28,1,9.7,75,13 +123,31,1,10.5,81.1,13.1 +124,48,1,15.7,102.7,14.6 +125,16,1,9.1,74,13.5 +126,22,1,9.7,80,13.7 +127,32,2,11.7,89.4,13.8 +128,50,1,15.9,104,15 +129,27,1,11.2,75.3,15.7 +130,22,1,9.5,75.2,13.4 +131,20,1,8.2,73.5,12.6 +132,57,2,14.3,91.3,16.7 +133,25,1,10.6,82.4,14 +134,36,1,11.9,83,15 +135,28,1,10.2,79.6,15.5 +136,29,1,12.7,86.2,16 +137,43,1,13.8,90.4,15.1 +138,35,2,13.3,81,13.7 +139,54,1,13,95.2,16.5 +140,35,2,8.8,79.2,14.6 +141,56,1,13.6,90.4,14.7 +142,36,2,13.7,91,14.7 +143,37,2,12.2,84.5,11.8 +144,22,2,9.2,76.5,14.3 +145,44,2,16.7,92.2,14.5 +146,36,2,9.9,80,14.3 +147,45,2,9.9,80,13.3 +148,54,2,14.6,99.3,15.6 +149,31,2,10.3,77.9,15.9 +150,12,2,9.2,72,14 +151,49,1,13.6,96.6,14.9 +152,48,2,16.9,103.5,16 +153,29,1,9.3,79.5,11.5 +154,36,2,10.6,85.5,13.9 +155,22,1,10.6,75,14.7 +156,24,2,12.3,82,16 +157,24,1,10.4,78.1,12 +158,36,1,12.9,92,16 +159,20,2,8.2,74.2,12.5 +160,58,1,14.1,96.1,14.2 +161,31,1,12.2,83.8,14.8 +162,18,1,11.1,74,13.3 +163,8,1,7.2,66.3,12 +164,36,1,14.1,88.5,15.8 +165,59,2,13.1,89.6,15.5 +166,29,1,10.7,83.6,14 +167,36,2,10.3,86.1,14 +168,28,1,12,73.4,12.9 +169,36,1,9,77.5,14.5 +170,12,2,6.9,69.1,13 +171,41,1,10.3,80.3,14.7 +172,18,2,5.5,68,11.4 +173,32,1,15.5,85.3,15.7 +174,36,1,12.1,89,15.1 +175,47,2,15.7,98.7,15.3 +176,18,2,9,70.2,15.5 +177,11,1,7.9,71.5,12.9 +178,46,1,13.6,89.2,16.9 +179,25,2,14.5,86.2,16.2 +180,52,2,17.5,103.4,17 +181,48,1,12,90.1,14.2 +182,12,2,5.6,61.1,12 +183,29,2,8,78,11 +184,48,2,7.9,82,12.8 +185,48,2,13.5,90.9,16 +186,32,2,10.1,78.2,14 +187,39,2,14.6,91,16 +188,37,2,6.9,75.3,13.5 +189,34,1,11,74,15.5 +190,45,2,14.1,86.9,14.9 +191,48,2,15.2,100,15 +192,51,2,13.4,98.3,14 +193,40,2,11.4,87.7,16.2 +194,54,2,11.4,88.6,14.8 +195,20,1,9.6,77.1,13.5 +196,26,2,11.4,80,14.1 +197,34,2,15,93.2,14.7 +198,48,1,13.7,92.2,16.5 +199,45,2,12.5,98.4,13.2 +200,22,1,7,71.5,11.9 +201,29,2,8.3,76.5,12.9 +202,49,1,15.3,85.6,16.4 +203,36,1,10.5,88.1,16.1 +204,33,2,12.9,80.3,13.4 +205,18,2,8.1,70.2,13.2 +206,11,2,5.6,64,12 +207,45,1,14.8,85.7,15.5 +208,34,2,9.3,79.9,15 +209,42,2,13.6,92.5,15.5 +210,14,1,8.9,72.5,14.5 +211,33,2,10.4,86,13 +212,58,2,16,98,16.2 +213,36,1,12.6,86.5,14.3 +214,42,2,12.9,83,16.6 +215,28,2,9.4,80.8,12.2 +216,32,1,11.1,83.5,14.4 +217,36,1,13.3,80.5,14.4 +218,12,2,9.5,75.6,14.7 +219,7,2,7.5,64.6,14.7 +220,21,1,8.8,76,12.8 +221,16,1,11.1,82,14.8 +222,7,1,8.4,68,14.5 +223,56,2,13.6,93,16 +224,44,2,14.3,90.2,15.6 +225,36,2,10.5,80,13.4 +226,48,2,16.6,108,15.1 +227,55,1,16.2,94.8,15.7 +228,24,2,6.7,74.9,10.5 +229,33,1,12.4,86.7,14.6 +230,14,1,9.8,79.2,14.5 +231,10,1,6.3,60.9,13.2 +232,21,2,13.4,80.2,14.2 +233,17,2,7.6,67,13.2 +234,9,2,8.2,63.8,12.1 +235,48,1,12.3,91,14 +236,32,1,10.9,85,14.3 +237,56,1,17.3,105.1,16.8 +238,48,2,14.2,89,17 +239,11,2,6.1,69.5,12 +240,34,2,11.2,83.2,13.7 +241,24,2,8.4,73,12 +242,35,2,13.1,90,14.7 +243,23,2,10,76.4,14.5 +244,58,1,18.9,110.5,16.1 +245,42,2,11.1,82,13.2 +246,45,1,14.2,92.1,15.6 +247,48,2,11.1,93.6,15 +248,48,1,12.4,79.1,14.3 +249,37,2,12.9,92.5,13.8 +250,43,1,13.1,93.5,15 +251,30,1,11.2,83.4,14.5 +252,39,1,11.4,85,14.6 +253,36,2,11.1,83.4,14.6 +254,20,2,7.5,81.2,12.3 +255,34,2,10.9,85.3,14.1 +256,15,2,12.1,71.3,13.4 +257,58,1,16.5,103.7,16.8 +258,34,1,10.9,81.9,16 +259,19,2,7.8,65.5,13.5 +260,58,2,13.7,91.9,13.3 +261,24,1,11.6,75.6,12.7 +262,17,1,7.8,68.9,12.9 +263,13,1,9.4,82.9,14.5 +264,17,2,8.3,71.1,12.9 +265,44,2,10.9,77,14.4 +266,59,2,15.1,102.6,15.1 +267,20,2,9.6,76.1,12.2 +268,16,2,11.4,81.5,13.6 +269,28,1,12.4,85,15.8 +270,25,1,8.3,71.9,15 +271,29,2,9.8,77.8,13.1 +272,45,1,11.9,86,15.6 +273,29,2,13.7,86.6,17.1 +274,54,2,15.1,95,14.8 +275,22,1,12.5,90,15.5 +276,7,1,6.7,66,13.7 +277,55,2,15.7,103.1,15.1 +278,42,2,12.9,92.6,15.4 +279,29,1,12.3,90.3,14.3 +280,21,2,8.4,71,13.5 +281,11,1,7,67.4,12.5 +282,30,1,10.7,80.9,15 +283,48,1,11.1,80.3,15.3 +284,28,2,11.8,83.6,14.2 +285,21,1,11.1,79.4,12 +286,36,2,9.4,79.6,14.4 +287,18,2,7.5,71,13.6 +288,52,1,14.8,93.5,15.8 +289,8,2,6.3,64,13.2 +290,37,2,13.6,85.6,12.8 +291,36,2,11.3,88.7,14.4 +292,8,2,8.3,63.6,14.4 +293,42,1,10.9,81,13 +294,10,1,8.5,71.3,14.5 +295,55,2,17.8,107.5,16.9 +296,11,2,8.6,81.3,15.3 +297,17,1,12.8,85.5,16 +298,33,1,14.7,96,15.5 +299,15,1,7.3,69.9,12.1 +300,45,2,14.2,96.5,16.8 +301,35,1,13.8,89.1,16.9 +302,32,1,13.6,88.3,16 +303,52,2,11,80.3,14.2 +304,19,1,13.7,87.1,18 +305,8,1,7.9,65.7,13.3 +306,34,1,11.6,81.9,15.2 +307,8,1,8.5,70.4,13.6 +308,53,2,11.6,90,14.3 +309,22,1,9.8,77,13 +310,13,1,10.1,77.5,15.2 +311,51,2,12.6,89.9,14.3 +312,12,2,6.8,65.1,12.3 +313,43,2,14.4,92.5,15.9 +314,54,2,16.6,102.3,15.5 +315,41,1,10.5,76.1,14.6 +316,57,2,15.7,93.7,17.5 +317,56,2,12.5,81.7,14 +318,24,1,12,81.9,15 +319,26,2,9.4,81.2,12.3 +320,36,1,12.9,90.3,16.4 +321,55,1,14.6,98.4,14.8 +322,58,2,12.9,87,16 +323,18,2,8.5,72.3,14.8 +324,15,2,8.8,71.4,13.1 +325,38,2,9.9,80,15.1 +326,54,1,16,99.5,15.3 +327,6,1,7.7,62.4,14.4 +328,58,2,17,101.1,15.5 +329,24,2,8.2,73.9,12.5 +330,9,2,5.7,63.5,11.7 +331,43,2,13,93.5,15.7 +332,44,1,15.5,96.1,16.4 +333,49,2,14.6,91.2,16.6 +334,28,1,12.2,80,15.5 +335,33,1,9.5,80,13.9 +336,26,2,7.7,77.4,14 +337,56,1,15.4,102.1,14.8 +338,18,1,13.1,84.7,14.8 +339,22,2,8,72.5,12.5 +340,8,1,6.2,60.8,13.2 +341,36,2,13.1,95.2,16.5 +342,41,1,15.3,94.2,16.2 +343,38,2,10.7,82.1,13.3 +344,18,2,7.4,72.1,13 +345,53,1,13.9,102.8,16.2 +346,13,1,9.3,73.2,14.2 +347,10,2,7.3,64,11.8 +348,30,2,9.2,77,12.1 +349,37,2,16.3,83.7,15.5 +350,48,1,12,90.5,15.4 +351,28,1,10.1,81.7,14.9 +352,9,1,8.1,66.6,14.8 +353,36,1,11.9,91.3,14.3 +354,30,2,11.9,87,15.5 +355,43,1,12.7,86.1,15.5 +356,30,2,10.6,86,13.7 +357,36,2,15.1,91,16.9 +358,30,2,9.8,75,15.1 +359,38,1,13.6,86.8,15.2 +360,8,2,6.9,65.2,13.8 +361,34,2,11.9,88.7,14.5 +362,24,2,8.2,71.8,12.3 +363,11,1,8.4,73.1,15 +364,36,2,11,80.5,12.7 +365,55,2,11.6,80.5,16.1 +366,19,2,8.4,73.8,13 +367,33,2,12.9,76.2,15.5 +368,32,1,10.9,82,14 +369,10,2,8.6,73.5,14.2 +370,56,1,15.5,98.4,16.1 +371,37,2,15.1,97.5,14.8 +372,44,1,15.6,101,15 +373,30,2,8.6,79.4,13.2 +374,10,1,7.8,69.8,11.2 +375,22,2,8,74.9,11.3 +376,58,2,13.9,90.1,15.4 +377,12,2,6.1,63,12.3 +378,36,2,12.6,82.4,11.9 +379,24,2,10.7,74.2,14.3 +380,35,2,11.1,83.6,14.8 +381,24,1,8.2,72,12.2 +382,24,1,11.2,83.4,14.5 +383,23,2,10.2,78.4,13.5 +384,6,2,5.9,62.5,13.9 +385,41,2,14.4,96.2,15 +386,43,2,8.4,77,13.5 +387,53,2,15.5,98.1,14.7 +388,34,1,12.7,84.2,15.8 +389,12,2,6.2,63,13.4 +390,17,2,11.4,80.5,15.1 +391,24,1,8.7,75.5,12.5 +392,28,1,11,83.8,12.7 +393,46,2,11.2,83,14.5 +394,18,1,9.3,78,13.6 +395,33,1,12.4,90,15.4 +396,17,1,8.1,72.3,13.7 +397,36,1,13.1,90.3,14.8 +398,32,1,9.2,79.5,13.5 +399,8,1,10.3,68.9,15 +400,44,2,12.3,84.2,13.9 +401,59,2,15.4,97.7,16.4 +402,40,2,12.9,88.3,14.9 +403,48,2,13,91.4,13.9 +404,28,2,10.7,72.4,12.4 +405,33,1,12.9,89.8,14.5 +406,32,1,9.1,75.5,12.3 +407,30,1,12.4,79.7,13.4 +408,8,2,7.2,61.5,11.5 +409,53,1,16.1,101.6,12.1 +410,35,2,7.1,73.3,12 +411,22,2,7.7,74,12 +412,54,1,12.6,99.5,12.9 +413,30,1,10.1,81.4,14.1 +414,38,2,10.2,75.3,14.5 +415,18,1,12,84.2,16.4 +416,36,2,15.3,92.3,16 +417,12,2,8.4,65.9,12.7 +418,22,1,9.5,78,12.6 +419,34,1,13.8,89.6,16.7 +420,34,1,11.7,84,14.8 +421,7,1,8.3,65.6,14.1 +422,12,1,10.3,76.4,13.2 +423,35,2,9.1,77.8,13.5 +424,11,1,12.1,71.4,13.5 +425,42,1,10.8,85.6,14.5 +426,34,1,12.2,89.3,14 +427,24,2,9.5,73.2,12.5 +428,27,2,10.4,79.8,14.7 +429,41,1,13.4,87.3,16.5 +430,11,1,11.2,78.2,15.8 +431,20,1,11.1,71,15.6 +432,12,2,7.1,67.5,13.5 +433,9,2,8.5,68.4,12.2 +434,38,1,14.3,92.2,15.7 +435,59,2,14.9,95.7,15.8 +436,44,2,14.9,83.4,14.2 +437,19,1,9.4,81.4,14.6 +438,7,1,6,56.2,12.2 +439,47,2,17.2,89.2,15.8 +440,10,1,5.3,60.7,10.6 +441,48,2,13.4,82.4,15.5 +442,23,1,9.4,80.6,13.2 +443,30,1,11.9,82,14.5 +444,30,2,11.7,85,15 +445,48,1,15.8,99.9,15.5 +446,30,1,13.1,87.5,16.2 +447,38,1,11.6,87.7,14.7 +448,8,2,6.6,64,13 +449,38,2,14.2,94.5,15.1 +450,49,1,13.4,92.2,14.9 +451,42,1,12.9,92,15.6 +452,12,1,6.5,66,13 +453,48,1,14,101,15.8 +454,8,1,8.2,65.3,14 +455,8,1,8.7,75,14.3 +456,30,2,10.6,79.4,13.6 +457,12,1,8.4,70.2,14.4 +458,40,1,13.4,92.5,16 +459,38,2,15.2,101.5,14.8 +460,44,1,15.2,95.4,15.5 +461,24,2,6.6,68.3,11.3 +462,7,2,8,66.3,13.8 +463,26,1,9.3,76.2,14.2 +464,48,1,12.1,83.7,15.2 +465,46,1,11.5,85.8,13.5 +466,10,1,7.2,69.4,12.7 +467,48,2,13.1,102.8,14.2 +468,21,1,7.9,72.5,14.2 +469,8,2,7.1,62,14.6 +470,14,1,9.2,73.4,13.5 +471,36,1,11.1,86.8,15.6 +472,36,2,12.4,86.4,14.5 +473,57,1,15.2,100,15.8 +474,29,2,12.6,87,14.3 +475,18,1,9.4,70,12.5 +476,38,2,14.2,92.9,15.1 +477,16,1,7.7,72.4,12.3 +478,15,2,7.8,69.6,13 +479,36,1,13.2,92.3,15.3 +480,11,2,8.4,70,13.2 +481,20,1,7.1,71.5,13 +482,23,1,13.4,77.3,14.4 +483,6,2,6.2,61,12.8 +484,9,1,9,70.8,14.6 +485,40,1,11.2,81.3,14.2 +486,20,1,12.8,82.5,14.3 +487,13,1,9.4,76.1,14 +488,14,1,8.6,73.8,14.3 +489,30,1,10.1,79.8,14.5 +490,38,1,13.9,90.6,15.2 +491,15,1,10.8,78.6,15.6 +492,45,1,13.9,102.1,12.8 +493,26,2,9.3,76.8,14.3 +494,14,1,9.4,78.6,12.7 +495,12,2,7,69.1,13.1 +496,18,1,8.8,70.1,12.4 +497,47,2,9,81,11.9 +498,59,2,12.7,87.4,13.7 +499,36,1,15.3,85.7,15.5 +500,39,1,12.4,79.4,14.5 +501,48,2,11.5,90.5,15.1 +502,7,2,9.5,71,15 +503,41,2,17,99.5,17.8 +504,25,1,11.9,87,15.5 +505,30,2,8.8,76,12.5 +506,31,1,10.7,75.1,14.6 +507,21,2,9.5,77.2,13.6 +508,55,1,16.5,99.6,16 +509,24,1,8.6,75.3,12.3 +510,50,2,9.5,88.3,12.2 +511,27,1,13.5,90,14.3 +512,22,2,8.4,70.9,13.5 +513,10,2,7.1,67.5,12.7 +514,10,1,10,75,15.2 +515,30,2,11.5,82.3,13.5 +516,14,1,7.6,67.4,13.3 +517,42,1,14.1,105.6,15.1 +518,39,1,17,101.1,16.5 +519,29,1,13,79.5,13.4 +520,24,1,9.8,77.5,13.9 +521,30,2,11.3,84,13.1 +522,47,2,12.3,88.2,15.5 +523,36,2,11.2,84.6,13.2 +524,27,2,12.3,79.4,13.2 +525,26,2,7.5,76.6,12.1 +526,9,2,7.9,65.2,12.5 +527,42,1,16.8,101.5,15.1 +528,24,2,11.1,87.4,14.8 +529,48,2,17.6,91.4,18 +530,27,1,11.6,81.2,15.2 +531,7,1,7.4,69.5,14 +532,27,2,11.1,87.4,13.8 +533,26,1,11.7,83,14.3 +534,10,2,7.3,65,12.2 +535,36,2,8.4,75.9,13.1 +536,33,2,12.1,85.4,16.4 +537,50,2,14.6,98.8,14.9 +538,36,2,9.1,80,13 +539,25,2,11.2,80.3,14.7 +540,24,1,10.3,82,14.6 +541,44,1,13.7,101.8,16.2 +542,59,1,14.8,96.9,14.6 +543,48,2,13.7,96.5,14.5 +544,19,2,10.8,76.5,13.5 +545,9,2,7.5,66.5,13.2 +546,23,1,9.9,78.7,15 +547,16,2,10,74.5,15.4 +548,51,2,15.2,94.3,14.1 +549,31,1,11,79.3,14.7 +550,51,2,11.3,83.2,14.3 +551,47,2,12,90.5,14.5 +552,34,2,9.5,74.8,13.9 +553,11,2,9.2,74.1,12.5 +554,11,1,9,70.4,14.8 +555,28,1,11.7,98.3,13.6 +556,35,1,10.1,87.9,13.9 +557,30,2,12.5,79,16.6 +558,30,1,11.3,82.3,14 +559,48,2,13.2,96.3,16.1 +560,48,2,15.4,100.5,15.2 +561,6,1,6.8,67.2,12.5 +562,48,2,15.2,92.7,16.2 +563,24,1,6.9,75.1,13.5 +564,22,2,7.9,71.5,12.1 +565,32,1,19.5,102.2,16.7 +566,59,2,12.8,87.2,14.4 +567,18,1,8.8,72,14.1 +568,32,2,11,80.2,14.2 +569,7,1,8,68.1,13 +570,24,1,9.5,80.3,12.8 +571,28,1,8,72,12.5 +572,8,1,8.5,74.2,14 +573,30,1,10.5,74.3,13.3 +574,9,1,6.9,67.2,12.6 +575,47,2,12.7,93,14.4 +576,29,1,11.5,83,14.8 +577,36,2,13.4,82.1,14 +578,24,1,8.6,72.7,14 +579,35,1,11.1,82.3,14.5 +580,23,1,8.9,78.2,11.8 +581,12,2,7.6,67.2,12.4 +582,16,2,13.1,71.4,12.7 +583,55,1,12.6,87.2,15.6 +584,23,2,12.4,88.2,12.9 +585,39,1,15.9,95.1,15.6 +586,46,1,13.5,88,15.5 +587,36,1,12.6,83.4,14.4 +588,40,1,14.1,97.5,15.1 +589,7,2,6.7,61.5,13.4 +590,55,2,13.8,91.8,14.8 +591,56,1,16,93.6,16.1 +592,30,1,10.8,80.1,12.5 +593,44,1,13.2,91.7,17.2 +594,15,2,9.4,72,12.2 +595,13,2,6.8,69.6,11.6 +596,46,1,14,94.2,15.2 +597,12,1,9,70,12.9 +598,30,1,10.1,84.5,14.7 +599,30,1,8.4,72.3,15 +600,46,1,13,92.5,15.3 +601,32,1,11.4,85.8,14 +602,30,2,10.1,79.1,14.4 +603,17,2,7.5,74,11.7 +604,47,1,12.5,90.7,14.5 +605,30,2,11.5,87,14.4 +606,12,2,7.6,65.3,12.7 +607,6,2,4.9,58.3,11.5 +608,42,2,13.9,105.4,15 +609,55,2,12.2,93.2,13.5 +610,42,2,14.7,92,14.8 +611,16,1,7.5,70.5,11.7 +612,40,1,11.2,82.3,15 +613,11,2,9.6,71,12.2 +614,28,1,11,83.2,13.8 +615,30,1,10.9,79.6,14.4 +616,54,2,13.3,87.4,14.5 +617,36,1,12.1,88.7,14.9 +618,50,1,15.6,96,15.5 +619,13,2,10.1,72.2,14.2 +620,49,2,12.5,96,13.9 +621,14,2,7.4,74.5,12 +622,48,2,12.7,90.5,14.3 +623,21,1,10.5,77.5,15.2 +624,42,1,12.8,96.7,13.1 +625,47,2,14.9,97.1,15.5 +626,54,1,16.7,99.1,17.3 +627,24,1,7.5,68.7,12.5 +628,14,1,9.8,75.7,13.8 +629,32,2,9.9,83,13.3 +630,33,2,12.5,80.2,15.5 +631,11,1,9.9,73,15.6 +632,26,2,8.9,73.6,13.5 +633,39,2,10.4,81.5,13.5 +634,28,1,10.1,83.2,13 +635,35,2,13.3,79.9,13.5 +636,8,1,7.3,64.6,14.3 +637,38,1,17.2,91.2,14.1 +638,56,2,15.7,97.4,16.4 +639,33,1,11.3,81.8,14 +640,27,1,9.8,75.8,11.7 +641,36,2,12.2,85.1,14.6 +642,6,1,6.2,61.2,12.2 +643,31,2,10.7,83.8,15 +644,10,2,7.1,65,13.5 +645,36,2,11.3,79.6,13.6 +646,34,1,10.5,84.7,14 +647,21,1,11.3,83,14.5 +648,20,2,9.4,75.7,12.2 +649,21,2,10.8,80,13.6 +650,36,2,13.9,91.1,12.5 +651,12,1,11,74.7,15.6 +652,17,2,9.3,72.8,13.6 +653,28,2,13.1,87.8,16.1 +654,46,1,11.8,87.5,14 +655,11,2,9.2,70.2,13.1 +656,58,2,14.7,101.2,14.5 +657,50,2,10.3,83.1,12.5 +658,22,2,9.1,81,13.1 +659,57,1,12.3,84.2,13.5 +660,15,1,8.9,75.4,13.8 +661,53,2,16.9,97.2,16.1 +662,39,1,11.6,83.1,14.8 +663,26,2,11.7,82,15.2 +664,13,1,8.1,67.4,12.3 +665,26,1,9.3,74.8,13.5 +666,21,2,10.1,78.5,14.2 +667,31,1,12.8,87.2,14.8 +668,33,1,10.7,80.5,13.6 +669,12,1,9.4,75.4,12.5 +670,28,2,10.9,80.3,14.4 +671,10,1,11.5,74,13.2 +672,11,1,8.3,71.8,13.4 +673,33,1,9.9,78.7,12.8 +674,46,2,11.8,86.7,13.1 +675,8,1,7.3,63.5,11.8 +676,12,1,9.3,73,14.5 +677,11,2,7.9,70.5,12.5 +678,6,2,10,64.1,13.5 +679,13,2,9,71,13.1 +680,8,1,7.1,65.6,11.5 +681,40,2,15.3,94.6,16 +682,19,2,8.2,67,12.8 +683,36,1,11.7,89.7,14 +684,31,1,11.1,81.2,14 +685,7,2,8.3,60.5,12.5 +686,10,2,10.4,64.4,11.6 +687,22,2,9.8,78.5,13.9 +688,40,2,12.7,88.3,14.4 +689,22,1,10.7,81.1,15 +690,22,2,10.4,80.1,14.6 +691,45,1,12.1,87.1,14.6 +692,23,1,11.6,80.5,15.4 +693,23,1,9.9,77.8,13.3 +694,18,1,9.6,73.5,11.7 +695,24,1,10,76.4,13.5 +696,12,2,6.7,67,12.4 +697,31,2,9.8,80,14 +698,43,2,14.6,102,15 +699,48,1,14.7,93.3,15.4 +700,17,2,6.9,71.4,14.1 +701,34,2,13.2,82.1,13.4 +702,41,1,14.6,83.8,15.6 +703,33,1,9.3,78.2,12 +704,36,2,13.3,80.3,14.5 +705,33,2,13.4,88.8,15.8 +706,11,2,9.2,65,14.5 +707,45,1,13.5,94.2,15 +708,17,1,8.1,73.8,13.1 +709,12,2,8.6,70,13.2 +710,11,2,8.8,71.5,15.5 +711,50,1,13.3,94.1,13.6 +712,30,2,9,77.1,12.1 +713,36,1,12.9,87.3,15 +714,13,2,7.3,69.3,13 +715,39,2,12.9,82.3,16.3 +716,8,2,7.3,67.4,12.5 +717,33,1,11.2,82.8,14.8 +718,21,2,8.7,81.2,11.7 +719,18,1,10.2,77.2,13.4 +720,15,2,7.4,74.5,13.5 +721,20,1,8.1,76.2,13.5 +722,26,2,12.3,80.5,16 +723,45,2,13.4,82.5,14.1 +724,24,2,7.8,75.3,13.4 +725,42,2,20.2,109.5,15.8 +726,35,2,10.8,87.5,15.1 +727,27,2,9.3,76.7,13.7 +728,38,1,12.4,90,11.7 +729,19,1,9.6,71.4,13.6 +730,10,2,8.1,66.2,12.8 +731,31,1,11,83.5,11.5 +732,59,1,14.5,92.7,15 +733,36,2,11.6,85.3,13.2 +734,19,1,7.9,71.3,12.5 +735,10,1,7.8,69,14 +736,23,1,13.9,84,12.8 +737,34,1,11.6,84,15 +738,48,2,14.7,99.8,16.4 +739,26,1,11.5,83.5,14 +740,55,1,12.3,89.1,13.8 +741,18,2,9,83.2,12.8 +742,12,2,10.4,67.2,15 +743,15,1,8.2,71.3,13.3 +744,43,1,15.5,93.6,16.1 +745,50,1,15.8,97.2,17.4 +746,30,2,10.2,82.3,13.1 +747,11,2,8.8,74.5,12.3 +748,22,2,11.1,78.6,14.3 +749,11,2,7.7,72.2,13.5 +750,22,1,10.2,78.5,14.5 +751,12,1,10,67,14.6 +752,12,1,8.3,69.8,12.2 +753,48,2,12.9,89.8,15.1 +754,29,1,9.3,69.4,12.5 +755,41,2,11.3,88.9,15.4 +756,36,1,11.7,85.9,14.8 +757,48,1,14.5,100.2,15.2 +758,12,2,8.1,70.6,12.6 +759,17,1,8.2,67.3,13.3 +760,44,1,13,89.4,15.3 +761,12,2,7.6,68.7,14.5 +762,54,2,14.6,101.2,15.6 +763,8,1,10.3,70.8,16 +764,25,1,10.8,81.5,13.5 +765,15,2,8.4,72.5,13 +766,12,2,9.8,77.5,13.8 +767,14,1,9.1,70.5,15 +768,40,2,14.2,94.8,16 +769,25,2,8.3,81.1,11.7 +770,31,2,9.7,81.1,13.8 +771,15,2,10.2,75.6,15.2 +772,41,2,11.2,88.3,13 +773,12,2,6.4,65.1,12.2 +774,8,1,9.5,72,14.8 +775,57,1,14.8,97,15.2 +776,34,1,14.2,81.1,14.2 +777,9,2,8.2,70.6,13 +778,35,1,10.3,79.7,13.4 +779,27,1,12.7,85.5,15 +780,7,1,8.3,67.7,14 +781,18,2,7.4,71.2,12.4 +782,30,1,10,81.4,14.6 +783,9,2,6.9,65.2,12.3 +784,34,1,10,75.8,13.3 +785,24,2,9.4,70.5,12.4 +786,15,2,8,69.5,13.3 +787,11,2,8,69.2,13.5 +788,24,2,10.5,78.7,14.5 +789,53,1,16.2,93,16.6 +790,45,1,15.5,95.9,15.5 +791,12,1,7.6,69.8,12.8 +792,50,1,12.8,91.5,14 +793,58,2,20.7,104.2,19.1 +794,20,1,10.1,76,16.3 +795,15,2,8,71.3,12.8 +796,28,2,9.9,79,14 +797,36,1,11,80.4,14.5 +798,48,2,11.3,85.5,13.7 +799,44,2,14.9,99,17 +800,32,1,10.9,79.7,14.7 +801,48,1,12.8,97.9,14.8 +802,35,1,10.4,86.2,13.9 +803,55,2,16.3,103.5,15.4 +804,24,2,10.1,76.9,13.2 +805,10,2,6.8,65.4,13.6 +806,8,1,5.9,61.9,12.5 +807,37,2,12.4,88,15.4 +808,17,1,9.1,75,14 +809,52,1,13.9,92.2,14.2 +810,20,1,9.3,79.8,13.3 +811,44,1,13.3,109.8,14.7 +812,31,2,9.7,85.2,12.5 +813,36,2,14.4,81.3,15.3 +814,48,2,10.4,90.5,15.3 +815,22,2,12.5,78.2,13.6 +816,30,1,10.4,92.3,13.6 +817,21,1,10.4,77,13.6 +818,23,2,9.3,75.5,14 +819,57,1,18.1,107.8,16.2 +820,56,1,13.1,93,15 +821,17,2,9.8,74.7,14 +822,47,1,15.1,93.1,16 +823,42,2,11.6,88.7,14.3 +824,47,1,15.8,101.3,16.1 +825,36,2,11.4,83,15.6 +826,36,1,11,81,14 +827,36,1,14.1,89.3,14.5 +828,48,2,14.5,95.6,15.9 +829,53,1,15.8,93.7,15.8 +830,8,2,7.8,68.5,15 +831,56,1,16.2,99.1,15.8 +832,28,2,9.1,75.9,13.4 +833,35,2,10.5,85.5,13.2 +834,24,2,9.4,80.3,13 +835,8,2,6.9,67,12.5 +836,35,2,12.6,86,16.3 +837,58,1,14.7,102.5,14.5 +838,36,1,10.8,80.1,14.3 +839,46,2,10.7,84.8,13.4 +840,12,2,8.8,73.5,13.8 +841,18,2,9.6,75.1,13.8 +842,26,2,10,73.2,11.7 +843,42,1,12.6,95.5,14.8 +844,59,2,15,99.5,14.6 +845,15,2,7.2,65.9,12 +846,56,2,15.3,99.5,16.5 +847,47,1,11.7,92.1,14.8 +848,6,1,5.9,61,13.8 +849,28,2,11.9,85.5,14.6 +850,20,2,6.4,69.1,11.2 +851,22,2,10.2,78.8,14.6 +852,7,2,7,62.2,14.2 +853,7,1,7.3,67.3,14.3 +854,24,1,11.8,87.3,13.6 +855,31,2,10,81.3,13.5 +856,18,2,10.6,75,15.3 +857,12,2,10.1,74.1,15.3 +858,22,2,8,78,13.3 +859,37,1,14,94.5,15.2 +860,34,2,13.9,79.9,14.5 +861,43,1,12.1,88.7,14.2 +862,41,1,11.6,86.6,15.1 +863,41,1,11.2,86,15 +864,8,1,8,67.3,13.1 +865,30,1,13.3,91.1,14 +866,8,1,7.3,63.7,13.3 +867,7,1,8.3,69.1,14 +868,40,1,12,89.2,14.4 +869,41,1,11.8,87.4,16 +870,9,2,8.2,64.8,12.3 +871,36,2,9.1,79.5,13.7 +872,48,1,14.9,95.3,16 873,14,2,8.3,73.5,12.3 \ No newline at end of file diff --git a/tests/testthat/data_files/ANTHRO/anthro2.csv b/tests/testthat/data_files/ANTHRO/anthro2.csv index bcc5c9d5..9490427e 100644 --- a/tests/testthat/data_files/ANTHRO/anthro2.csv +++ b/tests/testthat/data_files/ANTHRO/anthro2.csv @@ -1,797 +1,797 @@ -,age,sex,weight,height,muac -1,14,1,5,65.6,15 -2,54,2,12.1,99,17.7 -3,25,1,8.9,59.5,17.2 -4,52,1,14.6,98,14.2 -5,43,1,10.1,99.1,13.1 -6,7,1,4,58.1,12.6 -7,43,1,9.2,99,17.4 -8,44,1,10.1,89.4,13.6 -9,48,2,11.5,101.5,15.1 -10,44,1,9.3,80.1,17.6 -11,49,1,13.8,102,16.2 -12,31,1,6.8,84,14.8 -13,33,1,6.2,70,13.5 -14,8,2,4.3,59.1,16 -15,37,1,8.6,89.1,11.2 -16,4,1,5.4,70,12.9 -17,37,2,8.8,88,17.4 -18,39,2,8.7,75,13.7 -19,2,1,4.5,70,18.3 -20,39,1,10.6,99,13.1 -21,54,2,14.2,89.8,18.1 -22,39,1,9.3,81.2,16.1 -23,43,2,14.2,81.4,12.1 -24,55,1,17.3,103.1,14.4 -25,27,1,9.7,83.3,12.7 -26,52,2,11.8,88.4,15.8 -27,14,1,5.8,68.4,17.7 -28,19,1,9,78.9,16 -29,33,1,9.1,101.6,13.8 -30,3,1,4,54.1,11 -31,28,2,9.2,87.5,14.2 -32,48,1,8.9,84.6,15 -33,15,1,8.2,76.3,10.7 -34,20,1,9.2,63.2,15.4 -35,46,1,17.9,77.1,13.8 -36,50,1,10.2,96.1,11.4 -37,16,2,7.1,84.2,11.2 -38,30,2,9.2,84.3,17.7 -39,29,2,7.2,81.3,19 -40,48,2,11.9,92.1,11.9 -41,22,1,8.1,80.6,14.6 -42,37,1,9.8,90.5,11.1 -43,6,1,4.9,59.9,13.3 -44,57,2,10.6,99.8,11.7 -45,21,1,5.9,60.7,14.8 -46,23,1,5.7,79,15.9 -47,8,1,6.8,68,15.1 -48,41,2,11.8,99,17.6 -49,26,1,7.4,81.9,12.8 -50,37,1,9,98,18 -51,33,2,11,98,14.6 -52,51,2,12,102.6,15.6 -53,40,2,10.8,81.4,17.1 -54,38,2,9.7,72.3,15.8 -55,46,1,12.9,86.5,13 -56,4,2,3.2,53.1,12.1 -57,49,2,12.4,71.8,13.2 -58,15,1,8.1,67.1,18.9 -59,49,1,14.2,86.3,13.9 -60,33,2,16.9,99.7,12.7 -61,55,2,10.3,67.3,15.9 -62,34,1,8.2,79.7,14.3 -63,13,1,7,71.2,10.6 -64,43,2,9.9,86.3,11.8 -65,15,2,7.2,69.8,17 -66,50,1,13.9,90.3,16.3 -67,27,2,5.7,73,13.1 -68,53,2,12.6,102.5,17.6 -69,14,2,5.8,78,11.8 -70,13,2,5.2,79,17.3 -71,52,2,12.3,103,16.5 -72,10,1,5.3,78,15 -73,42,1,7.6,90,10.9 -74,15,2,5.1,60,18.7 -75,23,1,6.8,75.6,11.9 -76,43,1,9.2,90.6,17.1 -77,16,2,5.3,59.8,18.6 -78,38,1,7.2,78.2,11.7 -79,29,1,12.1,86.1,17.5 -80,33,1,11.9,77.2,17.9 -81,43,2,10.3,69.3,16.5 -82,12,1,5.9,59.6,15.3 -83,41,2,8.3,77.6,15.9 -84,35,2,9.2,82.1,17.5 -85,8,2,7,71.2,12.5 -86,27,1,5.9,71.2,17.7 -87,54,1,10.1,103.6,11.6 -88,3,2,5.3,58.1,13.3 -89,31,2,8.6,80.3,16.5 -90,37,2,10.1,89.1,12.7 -91,23,2,6.8,79,10.6 -92,57,1,12.8,102.5,18.3 -93,53,2,13.8,101,18.5 -94,9,2,5,78,13 -95,14,1,12.7,101,17.5 -96,15,1,5.9,71,18 -97,55,2,12.2,101.1,16.2 -98,34,2,7.1,69.8,12.8 -99,56,2,12.3,101.2,17.2 -100,4,2,5,68.5,14.3 -101,52,2,14.5,98.5,16.4 -102,31,1,8.7,67.8,16.7 -103,38,1,8.8,68.1,17.5 -104,31,2,9.3,71.6,13 -105,55,2,14.3,102.7,16.3 -106,26,2,10.2,71.1,13.2 -107,49,1,13.8,78.9,15.5 -108,24,1,9.9,82.1,17.5 -109,35,1,13.1,74.8,15.7 -110,30,1,7.5,98,15.6 -111,15,1,7.8,75,13 -112,11,1,10.8,85,13.4 -113,59,2,13.7,102,14.1 -114,8,2,5.1,67.1,12.7 -115,41,1,17,89.6,13.3 -116,0,2,4,56.8,14.6 -117,25,1,10.1,87,13.5 -118,51,2,10,78.2,16 -119,59,2,14.3,97.6,15.1 -120,52,2,8.2,71.2,12.1 -121,51,2,10.3,78.1,12.4 -122,7,2,6.8,65.1,16.5 -123,44,1,9.9,78.2,17.9 -124,35,2,10.6,91.2,14.7 -125,32,1,10.2,77.5,18.2 -126,13,2,6.3,61.2,14.2 -127,14,2,7,60.2,16.4 -128,56,1,11.3,68.5,14.1 -129,14,2,6.3,67.2,14.9 -130,55,1,15.8,101.2,13 -131,25,2,7,68.7,12.3 -132,51,1,10.2,76.3,11.7 -133,14,2,7.9,60.1,12.4 -134,32,1,9,75.1,13.8 -135,9,2,4,61.3,15.3 -136,10,2,6.8,60.9,12.4 -137,50,2,11.2,102.8,14.7 -138,46,2,11.7,99.1,16.7 -139,33,1,7.7,84.5,13.1 -140,57,1,13.9,102,11.5 -141,39,1,10.8,81.4,14.7 -142,15,2,6.2,62.1,14.7 -143,13,2,6.3,61.2,15 -144,40,2,12.9,101.2,14.3 -145,39,2,6.2,78.7,11.2 -146,13,1,4.2,58.9,13.6 -147,17,2,5.9,61,14.7 -148,52,2,8.1,67.8,17.8 -149,30,2,6.1,76.2,17.8 -150,28,2,7.1,72.8,16.7 -151,58,1,14.3,102.1,18.1 -152,7,2,4.7,70,12.4 -153,40,1,8.5,89.5,10.8 -154,31,2,8,79,12 -155,32,2,7.2,71.8,15.4 -156,54,2,13.9,110.6,18 -157,58,1,11.1,103.8,14.1 -158,43,2,10.5,99.5,11.5 -159,31,1,7.1,83.5,14.2 -160,10,1,5.1,60.6,12.8 -161,37,1,10,91.4,19 -162,27,1,7,72.8,13.2 -163,57,2,11.6,92.1,10.9 -164,34,1,6.1,70,14.2 -165,8,1,7.2,66.7,12.7 -166,32,2,9.1,76.3,16.5 -167,54,2,16.3,100.1,13.3 -168,51,1,8,81.2,11.6 -169,6,2,7.2,71.2,18.1 -170,7,1,6.8,66.3,10.9 -171,53,2,12.9,93.2,19 -172,13,2,6.3,62.1,18.2 -173,36,2,9.2,68.9,13.6 -174,13,2,8.9,77.6,18 -175,29,2,10.8,77.4,13.2 -176,31,2,12.3,86.2,18 -177,37,2,9.1,77.3,16.1 -178,13,1,6.9,69.7,11.4 -179,38,1,9.2,86.3,16.3 -180,10,2,6.3,60,13 -181,36,1,9.9,69.2,17.8 -182,50,2,9.9,91.1,12.2 -183,33,2,8,81.2,17.8 -184,43,2,8.2,91.1,17.5 -185,34,2,8.8,69.7,19 -186,52,2,11.6,98.5,17.7 -187,28,1,8.9,59.5,19.1 -188,49,1,10.6,98.5,15.7 -189,16,1,7.6,75,15.3 -190,36,1,9,100,12 -191,7,2,2.4,62,15 -192,29,2,9.9,99,15.5 -193,9,2,3.8,80.3,12.8 -194,33,1,6.9,95.5,13.8 -195,30,2,7.6,90,14.6 -196,10,2,6.9,74.5,10.8 -197,50,2,11.8,101.5,12.7 -198,13,2,5.8,78,16.9 -199,11,1,5.7,79,13.4 -200,35,2,7.5,89,11.3 -201,25,2,8,98,11 -202,15,2,5.1,60,10.8 -203,4,2,3.4,53.1,13.9 -204,13,1,5.1,61.8,14.1 -205,29,2,7,80.6,12.3 -206,31,1,7.2,81.1,17.6 -207,46,2,10,91.8,14.3 -208,35,1,6.2,68.8,15.5 -209,6,1,7,68.5,13 -210,15,2,7.2,77.5,15.6 -211,47,2,16.3,101.7,10.7 -212,16,1,8.8,59.2,19 -213,39,1,10.6,98.5,17.6 -214,30,1,7.8,84.2,12.1 -215,49,1,12.2,81.2,12.5 -216,4,1,5,71,14.5 -217,37,2,14.8,99.8,14.4 -218,31,2,8.5,86.1,16.3 -219,30,1,9.9,94.2,15.1 -220,2,1,3.3,52.6,18.6 -221,43,1,12.9,81.8,12.4 -222,49,1,9.8,77.8,13.4 -223,38,1,7.8,65.8,15.3 -224,38,2,8.3,71.2,13.1 -225,27,2,7.3,71.8,16.8 -226,40,1,7.8,68.5,19.1 -227,38,1,8.3,68.3,18.8 -228,47,2,9.4,69,10.6 -229,51,1,13.1,110.9,11.1 -230,58,2,12.4,109.3,11.9 -231,9,1,8.7,75,13.9 -232,47,2,14.9,92.5,12.9 -233,41,1,10.4,85.5,12 -234,41,1,10.4,94.5,13.6 -235,50,1,13.5,91.5,11.8 -236,24,1,9.9,60.5,15.1 -237,12,1,7.6,60.1,11.4 -238,36,1,9.2,88.4,11.4 -239,41,2,12.6,83,18.1 -240,2,1,4.1,52.5,11.5 -241,39,1,10.8,81.4,14.9 -242,36,1,12.3,89,15.2 -243,53,1,14.1,107,13.8 -244,2,2,15.2,101.1,17.3 -245,36,2,12.1,73.1,15 -246,11,2,10.1,73.1,18.7 -247,14,1,8.4,73.1,15.5 -248,17,2,9.1,70.5,18.5 -249,21,1,9.2,77.5,19 -250,13,2,8.5,69,17.1 -251,49,1,16.5,94.8,12.8 -252,27,1,12.5,84.1,14.7 -253,10,1,8.8,73.8,15.3 -254,34,2,11.3,84.8,17.5 -255,3,1,5.3,56.5,12 -256,6,2,7,60.2,13.8 -257,31,2,14.1,89,19.1 -258,2,2,9.5,78.1,13.7 -259,29,1,12,81.1,12.5 -260,15,2,10.2,79.1,17.7 -261,43,1,12.6,92,15 -262,17,1,8.6,74.1,14.2 -263,43,2,12.4,99.1,17.3 -264,27,2,9.2,80.4,10.8 -265,40,2,13.9,99.8,18 -266,11,2,8,78.5,17.3 -267,44,2,14,92.3,10.9 -268,59,1,18.5,111.5,15 -269,46,2,15.1,97.4,11.3 -270,8,2,9.1,70.5,11.1 -271,42,2,12.4,99.1,14.4 -272,26,1,13.6,84.6,14.6 -273,39,1,14.1,98.5,14.8 -274,1,2,3.6,52.5,17.6 -275,18,1,8.4,73.5,14.1 -276,39,2,12.2,89.1,17.6 -277,58,1,13,91,11.3 -278,7,2,7.5,73.1,18.9 -279,36,2,13.1,99.5,18.3 -280,11,1,12.1,91.5,16.8 -281,26,1,10.4,74.5,16.6 -282,50,2,17.1,114.1,18.7 -283,31,1,11.8,85.5,15.3 -284,56,2,15.2,99.4,16.2 -285,11,1,9.1,78.5,15.8 -286,33,1,12.3,87.5,18.5 -287,36,1,18.5,111.5,11 -288,9,2,6.2,65.7,13.4 -289,49,2,18,97,13.4 -290,5,1,5.5,62.3,18.6 -291,49,1,16,100.4,15.2 -292,43,2,11.7,64.5,12.4 -293,27,1,10.6,85.5,16.3 -294,26,2,10,72.5,13.1 -295,8,2,8.1,72.1,15.7 -296,14,1,9.1,75.8,14.9 -297,16,1,10,70.1,11.7 -298,11,2,7.1,59.6,17.5 -299,45,2,12.9,67,17.5 -300,8,1,7.1,56.5,17.7 -301,28,2,11.5,75.5,13.1 -302,20,1,12.1,79.5,17.2 -303,38,1,14.4,88.5,15.9 -304,59,2,13,108.6,12.8 -305,31,2,10.8,81.4,14.8 -306,6,2,7,68.6,16.3 -307,45,2,14.6,98.5,17.5 -308,36,2,9.5,89.4,12.5 -309,17,2,7,60.4,13.7 -310,40,2,10.6,91.4,12.3 -311,8,2,7.1,69,17.7 -312,51,1,14,99.1,17.3 -313,7,2,7,68.1,11.2 -314,48,2,14.5,97.1,11.5 -315,36,1,12,89.9,17.8 -316,57,1,14.6,99.6,12.4 -317,41,1,13.2,79.9,16.2 -318,16,2,9,70.1,17.6 -319,58,1,14.1,106.1,13.2 -320,17,1,7.8,69,10.7 -321,24,2,8.3,76.1,13.8 -322,7,2,7.4,70.1,15.4 -323,38,2,9.6,80.5,18.9 -324,8,2,6.1,65.1,15 -325,17,2,6.8,71,13.3 -326,46,2,9.8,91,18.8 -327,54,1,12.3,83.4,10.6 -328,10,1,6.7,66.3,13.6 -329,43,1,13.7,93.4,11.3 -330,12,1,4.9,59.1,10.6 -331,1,2,3.5,53,15.7 -332,50,1,14.3,90.4,16.8 -333,13,1,9.9,64.3,12.2 -334,49,1,13.9,92.5,11.2 -335,18,2,12.7,79.4,13.8 -336,6,1,9.7,65.8,16.5 -337,14,2,8,65.4,12.7 -338,9,2,4,59.1,12.6 -339,56,2,13,108.9,15.7 -340,22,2,9.2,78.5,12.9 -341,33,1,8.2,78,15 -342,51,2,15.5,101,18.5 -343,3,2,7.9,65.5,13.5 -344,44,1,12.7,68.5,16.1 -345,24,1,9.2,79,11 -346,47,2,12.4,94.5,15.7 -347,33,2,6.8,80,17.8 -348,35,2,7.7,82.5,13.6 -349,42,2,9.2,77.5,18.4 -350,13,1,6.3,71.9,15.2 -351,41,2,10.7,90.8,18.6 -352,14,2,6.5,79.6,11.6 -353,43,2,9.9,91.5,18.6 -354,35,1,9.5,80.1,10.6 -355,46,2,10.3,84,12.4 -356,45,2,11.5,90.5,10.6 -357,6,2,6.1,61.3,11.8 -358,40,1,8.6,88.9,16.1 -359,9,2,5.1,59.1,10.8 -360,54,2,13.1,99.1,11.1 -361,32,1,9.7,85.1,16.8 -362,52,2,14.2,110.1,17.8 -363,55,1,14,115.1,14.4 -364,53,2,13.3,95.5,15.5 -365,36,1,8.3,63.9,14.4 -366,57,2,12.4,89,10.9 -367,6,1,12.1,91.4,18 -368,51,2,12.4,80.5,18.7 -369,31,1,9,75.5,18.4 -370,3,1,4,55.1,13.2 -371,33,1,10.1,77,16.8 -372,12,1,5.7,66.7,18.4 -373,37,2,9.8,89.1,14 -374,6,1,7,59.4,14.5 -375,39,1,12.1,86.5,17.8 -376,21,1,9.9,69.6,14.3 -377,35,1,9.2,82.3,10.7 -378,49,1,15,89.4,14.6 -379,2,2,4.6,52.3,15.1 -380,14,1,6,59.8,12.9 -381,5,1,4.1,62.1,18.8 -382,48,1,12.5,88.3,16.4 -383,24,2,6.4,85,17.2 -384,39,1,10,71.8,17.7 -385,7,2,7,59.8,11.1 -386,38,2,8.8,67.6,13.1 -387,14,2,6.1,64,15 -388,13,2,8.2,60.1,17.8 -389,59,1,10.6,102.5,11.5 -390,33,1,8.6,83.5,16.9 -391,30,1,9.2,76.4,14.5 -392,55,1,11.1,80.4,18.4 -393,35,1,9.3,67.1,15.2 -394,13,2,7,61.8,17.3 -395,13,2,6.1,64.1,10.7 -396,39,1,9.1,67.4,18.6 -397,31,1,9.2,64.3,16.6 -398,49,1,7.9,67.8,14.6 -399,45,2,9.9,92.3,17.4 -400,45,2,10.2,90.1,14 -401,28,2,7.2,72.1,17.9 -402,28,1,6.5,69.3,17.6 -403,47,1,11,100,13.3 -404,15,1,4.2,53.3,16.5 -405,28,2,9.8,79.9,17.2 -406,35,2,6.2,70,17.4 -407,34,1,7.4,80,16.3 -408,43,1,8.6,89.7,18.4 -409,46,2,8.8,88.1,17.3 -410,21,2,5.8,68,16 -411,5,2,4,59.2,11.7 -412,52,1,11.8,99.1,17.4 -413,28,1,7,75.6,17.5 -414,52,1,9.7,89.7,12.8 -415,37,1,8.6,89.5,17.4 -416,9,2,4.4,64,17 -417,55,2,11.6,100,14.3 -418,34,1,6.4,78,18.6 -419,55,2,7.8,95.5,15.9 -420,37,1,8.2,89.1,17.4 -421,31,2,8,69,11.7 -422,29,2,6.6,65.5,16.3 -423,28,1,8.2,75.2,16.6 -424,2,2,5,69.3,15.2 -425,41,2,8.5,75,18.1 -426,38,1,13.7,84.5,15.3 -427,20,2,5.1,81,14.3 -428,52,2,13.6,85.5,11 -429,20,1,7.6,73,16 -430,31,1,8.8,75,16.5 -431,8,1,4.2,66.3,13.9 -432,45,1,10,79.1,18.2 -433,31,1,6,71.1,12 -434,4,2,4.2,59.1,15.9 -435,46,1,8,79.1,10.8 -436,29,2,5.6,60.1,12 -437,27,1,7,69.8,12.9 -438,9,1,4.2,57.7,11.7 -439,6,2,6.6,65,10.8 -440,28,2,8.8,75,16 -441,5,1,6.5,68.4,11.6 -442,41,2,12.8,85.5,16.5 -443,30,2,8.1,81,16.3 -444,31,1,8.5,75.5,17.9 -445,16,1,9.5,75.5,13.1 -446,42,1,16.1,93.5,16.5 -447,27,1,7.5,76.7,16.6 -448,27,1,8.6,75.5,13.5 -449,48,2,12.6,85,17.1 -450,3,2,7.2,60.5,18.8 -451,38,1,9.6,75,11.7 -452,3,2,5,69.3,18.6 -453,36,2,10.6,83.5,13 -454,7,1,5.6,60.5,14.9 -455,49,2,11.7,101,17.1 -456,8,1,4.7,70,15.4 -457,53,2,11.7,100,12.4 -458,50,1,9.7,95.5,14 -459,31,1,10.6,80,10.7 -460,39,2,9.6,95,12.9 -461,8,2,4.1,61.5,11 -462,33,1,8.2,85,10.6 -463,6,2,4.9,60.5,12.9 -464,40,1,9.6,89.2,15 -465,10,2,5.1,65.1,14.5 -466,39,1,10.4,95.5,12.1 -467,8,1,4,60.1,13.5 -468,55,2,12.1,98.9,14.3 -469,29,2,8.7,95.5,18.3 -470,47,1,11.8,100,13.9 -471,10,1,4,56.1,17.9 -472,10,2,5,60.8,14.5 -473,8,1,4.4,57.1,10.6 -474,30,1,7.4,69,15 -475,31,1,8.5,79.1,13.3 -476,56,2,11.8,99.5,15.6 -477,7,2,4,61,16.4 -478,33,2,6.8,79.9,16.6 -479,6,1,4.6,60.1,17.6 -480,15,2,5,62.1,17 -481,10,1,5.8,75,15.3 -482,41,2,9.6,95.5,16.5 -483,39,1,11.1,85,11.6 -484,13,1,6.7,66,12 -485,7,1,8.1,67.5,18.7 -486,58,2,11.4,90.5,18.2 -487,43,2,10,80.5,14.4 -488,46,2,10,63.8,13.8 -489,31,2,10.9,74.6,16.5 -490,3,2,4,54.6,14.5 -491,5,1,5.9,54.4,14.5 -492,39,2,12.3,78.8,15.8 -493,4,2,4.2,61.5,16.9 -494,34,1,15,86.7,14 -495,12,1,9.8,65,16.7 -496,5,1,3.9,59.5,11.3 -497,37,1,15,91.5,16.1 -498,32,1,15.9,78.8,16.9 -499,15,2,5.6,60.1,15.6 -500,4,1,3.8,50.1,16.8 -501,28,2,8.7,71.5,18.7 -502,53,1,13.7,110.8,16.2 -503,33,2,8,82.2,11.2 -504,14,1,5.2,69.1,17 -505,35,2,10.4,75.5,10.8 -506,15,2,3.5,56.1,17.9 -507,35,1,7.2,63.5,12.2 -508,27,1,8.5,68,18.9 -509,56,1,12.6,103,17.8 -510,12,1,8.1,75.5,15.1 -511,15,1,6.9,70.5,15.1 -512,7,2,14.3,95.5,16.2 -513,56,2,5.9,66.5,15.5 -514,25,1,9.3,72.5,17.1 -515,45,2,11.6,85.5,14.2 -516,28,2,10,81.4,16.1 -517,54,2,10.6,99.5,18.3 -518,13,2,8.3,69.5,17 -519,31,2,12.4,95.5,14.1 -520,53,2,11.6,100.5,17.4 -521,20,2,8.6,67.3,14 -522,15,1,7.9,59.5,10.7 -523,11,1,9.9,65.8,11.7 -524,13,2,8,60,18.6 -525,45,1,10.2,90.5,13.5 -526,21,1,8.8,65.1,15.6 -527,17,1,6.2,56.5,12.7 -528,45,1,9.5,90,11.4 -529,46,2,8.3,86.8,18.4 -530,9,2,7.9,68.5,11.5 -531,6,2,5.5,50,18.5 -532,21,2,8,70,11.6 -533,57,2,10,83.1,16.7 -534,39,1,10,84,15.3 -535,21,1,8,69.1,14.5 -536,7,1,7.1,59.1,18 -537,45,1,10.6,99.6,16.1 -538,11,1,9,69.8,18.3 -539,37,2,14.3,98,13.7 -540,37,1,9.1,77,14.9 -541,2,2,4.2,53.1,10.5 -542,20,1,12.1,63.5,17.3 -543,20,1,14.1,91,18.5 -544,47,2,14.4,90,15.6 -545,18,1,9,81,12.1 -546,36,2,5.6,59.5,13.8 -547,19,2,8.9,61,18.3 -548,54,1,7.6,53.8,18.5 -549,2,2,6.1,67.1,18.9 -550,22,1,10,98.1,15.7 -551,14,1,9.1,72.4,17.6 -552,44,2,11.1,90.1,11.1 -553,6,1,6.6,60.1,14.1 -554,8,2,5.6,50.5,18.4 -555,1,1,6.5,70.5,11.2 -556,27,1,13.9,86.5,10.6 -557,7,2,6.2,53.5,15.2 -558,13,1,8.2,82.5,11.5 -559,57,1,11.2,65.5,12.7 -560,0,2,3.9,51,16.6 -561,38,2,18,78,17.3 -562,34,1,12.1,80.4,13.3 -563,35,2,9.2,78.6,10.7 -564,56,2,12.9,110.9,17.9 -565,19,1,8.1,60.4,18 -566,28,1,9.6,81.3,11.4 -567,34,2,10.8,81.4,18 -568,26,2,9.9,69.8,13 -569,21,2,7.9,58.1,10.9 -570,50,1,11.5,100,14 -571,1,1,4.2,60,18.6 -572,15,1,10.3,81,14.7 -573,42,1,12.2,89.5,13 -574,19,2,7.3,80.5,11.5 -575,49,1,15.1,103,12.8 -576,10,2,6.8,78.5,10.7 -577,38,1,10.1,89.6,15.9 -578,8,2,4.8,73,18.3 -579,1,1,4,56.1,17 -580,5,1,5,60.1,17.8 -581,29,2,7,80.1,15.9 -582,48,1,11.1,102.8,11.7 -583,30,1,6.9,80.1,15.8 -584,9,2,5,59.8,18 -585,47,2,9.6,90,14.9 -586,3,1,5,57.1,18.7 -587,11,2,7.8,89.8,17.2 -588,39,1,11,99.7,18.6 -589,31,1,12.2,89.3,15.8 -590,5,2,6.5,91.3,19 -591,36,2,9.1,77,18.4 -592,47,2,11,63.1,17.6 -593,14,1,7.9,73.3,17.6 -594,36,2,11.9,101,15.2 -595,43,1,8.3,61.9,12 -596,25,2,7.9,68.5,12.7 -597,30,1,14.9,90.1,13.8 -598,38,2,18,101,14.8 -599,15,1,9.1,65.8,15.2 -600,49,1,13.9,91,18.4 -601,14,2,7.9,70.8,12.9 -602,14,2,8,69.8,17 -603,26,1,8,84.2,15.7 -604,4,2,4.5,58.1,12.8 -605,57,2,10.2,90.1,18.9 -606,44,1,9.1,89.1,11.1 -607,58,1,10.1,96.8,15.1 -608,30,2,9.8,81.6,12.7 -609,9,2,5.6,60.1,14.3 -610,50,2,10.1,101,12.6 -611,13,2,4.7,73,12.6 -612,31,2,6.4,80.5,18.9 -613,44,1,9.8,61.8,18 -614,26,1,7.9,79.5,16.4 -615,58,1,11.6,99.5,17.2 -616,29,2,8.8,84,14.6 -617,48,2,10.7,101,13 -618,39,1,8.8,98.4,13.3 -619,19,2,6.6,75,11 -620,53,1,10.5,98.5,16 -621,51,1,13,102,11.3 -622,59,2,14.3,95.6,14.4 -623,25,2,7.9,68.5,15.2 -624,57,2,15,96.2,13 -625,39,1,9.1,77,13.9 -626,23,1,7.9,68.5,12.1 -627,57,2,11.2,63,18.6 -628,40,1,9.2,68.9,12.4 -629,9,2,8.8,65.1,10.5 -630,13,2,11.2,68.5,13.2 -631,38,1,8.3,60.1,17.9 -632,16,2,10.2,67.8,17.3 -633,37,2,13.3,75.8,12.3 -634,13,1,9.3,68.2,12 -635,50,1,14.2,89.7,15.6 -636,35,2,14.3,90.2,12.8 -637,3,1,3.4,56.1,16.8 -638,56,1,14.8,91.2,13.3 -639,7,2,3.5,60,16 -640,40,1,9.5,71.2,11.9 -641,15,2,8.3,67.4,11 -642,7,1,6.2,63.4,15.6 -643,10,2,8.4,67.2,18.2 -644,51,2,14.2,108.1,18.6 -645,51,1,11.8,99,11.7 -646,28,2,6.5,83,15.2 -647,16,1,5.8,80,12.1 -648,22,2,5.5,75.1,15 -649,27,2,7.6,70.9,16.2 -650,56,1,11.7,100,11.6 -651,39,1,9.5,89.1,14.2 -652,47,1,10.1,91.5,18 -653,51,1,12.9,78.3,17.5 -654,31,1,12,82.7,13.3 -655,50,2,9.8,86.1,14.8 -656,14,2,6.2,61.3,12.9 -657,46,2,10,89.7,15.2 -658,14,2,8.2,69.8,12.4 -659,52,2,13.9,91.2,15.4 -660,15,2,8.1,69.2,14.8 -661,48,1,13.9,90.3,16 -662,51,2,14.9,92.6,14.6 -663,24,2,10.5,82.3,16.8 -664,43,1,17.8,102.5,11.9 -665,38,1,15.5,107.8,18.3 -666,0,1,3.6,52,18.7 -667,28,1,17,99.3,11 -668,42,1,14.2,89.5,13.8 -669,22,2,10.3,79.5,14.3 -670,58,2,13.2,99.5,16.3 -671,37,2,11.6,99.1,13.6 -672,3,1,3.1,65,15.5 -673,45,2,15.4,97.3,10.9 -674,44,2,14.9,92.5,16.6 -675,7,1,7,80,10.6 -676,20,2,8.1,75.5,16.2 -677,59,2,13.5,99.5,14.6 -678,4,2,5.5,60,13.6 -679,6,2,8.1,60.4,17.4 -680,48,1,12.5,99.5,12.9 -681,25,1,9.9,100.5,15.7 -682,21,1,9.3,41.2,15.8 -683,59,2,10.3,62.4,10.6 -684,15,2,7.1,67.5,16.5 -685,10,2,8.8,79.5,15.8 -686,40,1,13.7,91.5,17.9 -687,45,1,8.1,89.1,15.6 -688,6,1,4,58.9,18.2 -689,53,2,10,99.6,15.3 -690,40,2,9.2,80,18.1 -691,10,1,5,69.5,12.5 -692,5,1,4,59,17.4 -693,51,2,11,102.1,15.4 -694,7,1,4.8,59,13.2 -695,51,1,9.7,91,13.6 -696,25,1,6.4,70.1,13.7 -697,53,2,8.8,90.5,13.7 -698,52,2,13.1,109,17.4 -699,37,1,8.2,95.1,13.1 -700,14,1,5,65.5,12.7 -701,39,1,10.9,99.5,17.7 -702,15,1,6.5,75.5,15.7 -703,4,2,6.6,75,10.7 -704,9,1,5.7,70,14.6 -705,46,2,16.3,96.2,15.5 -706,31,2,9.1,76.8,18.4 -707,53,2,16,92.1,17.2 -708,25,2,7,62.3,17.3 -709,44,2,18,94.1,16.9 -710,14,2,4.9,59,16.7 -711,51,2,10.1,91.3,18.5 -712,42,1,14.9,90.2,15.5 -713,16,1,7.8,63.1,11 -714,38,2,13.2,96.8,12.6 -715,33,1,7.1,80.6,16.7 -716,4,2,3.3,57.2,10.7 -717,39,1,7.2,63.4,17.4 -718,7,1,6,57.8,12.8 -719,38,2,7.9,61.7,18.4 -720,39,1,8.2,65.6,18.9 -721,38,2,16,91.3,16.2 -722,34,1,8.2,78.8,10.7 -723,36,2,9.9,78.7,15.2 -724,13,1,8.2,65.7,18.2 -725,8,2,5.7,70,14.7 -726,43,1,8.7,89,13.8 -727,29,2,8.6,90.5,16.6 -728,50,2,10.7,100.5,10.9 -729,51,2,10.7,100,14.2 -730,3,1,3.6,57.1,15.2 -731,7,1,4,60.1,12 -732,38,2,10.7,90.5,12.7 -733,2,1,3.9,57.1,16.1 -734,2,2,3.1,56.9,11 -735,37,2,9.1,89,19.1 -736,14,1,5.1,65.9,16.7 -737,43,1,8.2,85,16.2 -738,7,1,4,59.9,11.4 -739,4,1,4.1,56.7,17.1 -740,42,1,8.8,83.1,15.8 -741,14,2,7.3,61.1,18.9 -742,39,1,9.8,72.3,16 -743,4,1,3.1,60.1,12.3 -744,32,2,16,86.2,14.7 -745,26,1,9,77.3,14.1 -746,8,2,2.9,51.2,17.3 -747,39,1,8.2,77.4,13.3 -748,3,1,3,53.8,15.4 -749,7,2,5.9,56.4,18.6 -750,7,2,5.1,53.9,11.2 -751,39,2,8.3,68.1,13.4 -752,0,2,2.9,58.1,14.5 -753,37,2,7.9,82.1,18.1 -754,13,1,9,77.8,16.3 -755,54,2,12.9,89.6,15.1 -756,14,2,8.9,79.8,14.1 -757,41,1,13.1,89.1,18 -758,30,2,8.1,61.8,17.7 -759,23,2,13.9,90,18.8 -760,37,1,9,81.2,15.6 -761,37,2,8.6,77.6,15.7 -762,13,1,8.2,75.8,19 -763,8,2,6,65.1,16.8 -764,43,1,12.7,88.3,13.1 -765,36,2,11.2,93.9,15.7 -766,24,1,8.6,73.1,16.4 -767,49,2,10.1,89.1,16.3 -768,13,1,6,60.9,18.4 -769,39,2,10,79.1,18.9 -770,27,2,8.1,69.1,16.4 -771,51,1,15.1,116.1,11.8 -772,38,2,11.4,96.1,15.9 -773,14,2,9,68.1,13.6 -774,5,2,6.5,60,18.6 -775,26,1,10.5,79.1,17 -776,48,1,12,90.1,15.3 -777,10,2,7,66.1,14.6 -778,14,1,8.9,59.5,15.2 -779,53,2,11.7,88.5,14.7 -780,59,1,14,94.5,12.2 -781,33,1,10.8,81.4,16.8 -782,1,1,7,49.3,11.8 -783,38,2,13.6,96.3,10.8 -784,59,2,12.6,87.3,17.1 -785,3,1,4,58.5,18.7 -786,32,1,10.4,73.4,17.4 -787,12,1,8.6,68.5,16.7 -788,7,1,7.6,68.5,18.1 -789,51,1,11.7,82.1,16.9 -790,8,1,8,59.6,13.4 -791,34,2,14,81.5,12.4 -792,49,1,13.9,95.5,16.8 -793,17,2,10.2,79.5,13.7 -794,8,2,6.9,59.5,17.4 -795,33,1,11.8,81,18.5 +,age,sex,weight,height,muac +1,14,1,5,65.6,15 +2,54,2,12.1,99,17.7 +3,25,1,8.9,59.5,17.2 +4,52,1,14.6,98,14.2 +5,43,1,10.1,99.1,13.1 +6,7,1,4,58.1,12.6 +7,43,1,9.2,99,17.4 +8,44,1,10.1,89.4,13.6 +9,48,2,11.5,101.5,15.1 +10,44,1,9.3,80.1,17.6 +11,49,1,13.8,102,16.2 +12,31,1,6.8,84,14.8 +13,33,1,6.2,70,13.5 +14,8,2,4.3,59.1,16 +15,37,1,8.6,89.1,11.2 +16,4,1,5.4,70,12.9 +17,37,2,8.8,88,17.4 +18,39,2,8.7,75,13.7 +19,2,1,4.5,70,18.3 +20,39,1,10.6,99,13.1 +21,54,2,14.2,89.8,18.1 +22,39,1,9.3,81.2,16.1 +23,43,2,14.2,81.4,12.1 +24,55,1,17.3,103.1,14.4 +25,27,1,9.7,83.3,12.7 +26,52,2,11.8,88.4,15.8 +27,14,1,5.8,68.4,17.7 +28,19,1,9,78.9,16 +29,33,1,9.1,101.6,13.8 +30,3,1,4,54.1,11 +31,28,2,9.2,87.5,14.2 +32,48,1,8.9,84.6,15 +33,15,1,8.2,76.3,10.7 +34,20,1,9.2,63.2,15.4 +35,46,1,17.9,77.1,13.8 +36,50,1,10.2,96.1,11.4 +37,16,2,7.1,84.2,11.2 +38,30,2,9.2,84.3,17.7 +39,29,2,7.2,81.3,19 +40,48,2,11.9,92.1,11.9 +41,22,1,8.1,80.6,14.6 +42,37,1,9.8,90.5,11.1 +43,6,1,4.9,59.9,13.3 +44,57,2,10.6,99.8,11.7 +45,21,1,5.9,60.7,14.8 +46,23,1,5.7,79,15.9 +47,8,1,6.8,68,15.1 +48,41,2,11.8,99,17.6 +49,26,1,7.4,81.9,12.8 +50,37,1,9,98,18 +51,33,2,11,98,14.6 +52,51,2,12,102.6,15.6 +53,40,2,10.8,81.4,17.1 +54,38,2,9.7,72.3,15.8 +55,46,1,12.9,86.5,13 +56,4,2,3.2,53.1,12.1 +57,49,2,12.4,71.8,13.2 +58,15,1,8.1,67.1,18.9 +59,49,1,14.2,86.3,13.9 +60,33,2,16.9,99.7,12.7 +61,55,2,10.3,67.3,15.9 +62,34,1,8.2,79.7,14.3 +63,13,1,7,71.2,10.6 +64,43,2,9.9,86.3,11.8 +65,15,2,7.2,69.8,17 +66,50,1,13.9,90.3,16.3 +67,27,2,5.7,73,13.1 +68,53,2,12.6,102.5,17.6 +69,14,2,5.8,78,11.8 +70,13,2,5.2,79,17.3 +71,52,2,12.3,103,16.5 +72,10,1,5.3,78,15 +73,42,1,7.6,90,10.9 +74,15,2,5.1,60,18.7 +75,23,1,6.8,75.6,11.9 +76,43,1,9.2,90.6,17.1 +77,16,2,5.3,59.8,18.6 +78,38,1,7.2,78.2,11.7 +79,29,1,12.1,86.1,17.5 +80,33,1,11.9,77.2,17.9 +81,43,2,10.3,69.3,16.5 +82,12,1,5.9,59.6,15.3 +83,41,2,8.3,77.6,15.9 +84,35,2,9.2,82.1,17.5 +85,8,2,7,71.2,12.5 +86,27,1,5.9,71.2,17.7 +87,54,1,10.1,103.6,11.6 +88,3,2,5.3,58.1,13.3 +89,31,2,8.6,80.3,16.5 +90,37,2,10.1,89.1,12.7 +91,23,2,6.8,79,10.6 +92,57,1,12.8,102.5,18.3 +93,53,2,13.8,101,18.5 +94,9,2,5,78,13 +95,14,1,12.7,101,17.5 +96,15,1,5.9,71,18 +97,55,2,12.2,101.1,16.2 +98,34,2,7.1,69.8,12.8 +99,56,2,12.3,101.2,17.2 +100,4,2,5,68.5,14.3 +101,52,2,14.5,98.5,16.4 +102,31,1,8.7,67.8,16.7 +103,38,1,8.8,68.1,17.5 +104,31,2,9.3,71.6,13 +105,55,2,14.3,102.7,16.3 +106,26,2,10.2,71.1,13.2 +107,49,1,13.8,78.9,15.5 +108,24,1,9.9,82.1,17.5 +109,35,1,13.1,74.8,15.7 +110,30,1,7.5,98,15.6 +111,15,1,7.8,75,13 +112,11,1,10.8,85,13.4 +113,59,2,13.7,102,14.1 +114,8,2,5.1,67.1,12.7 +115,41,1,17,89.6,13.3 +116,0,2,4,56.8,14.6 +117,25,1,10.1,87,13.5 +118,51,2,10,78.2,16 +119,59,2,14.3,97.6,15.1 +120,52,2,8.2,71.2,12.1 +121,51,2,10.3,78.1,12.4 +122,7,2,6.8,65.1,16.5 +123,44,1,9.9,78.2,17.9 +124,35,2,10.6,91.2,14.7 +125,32,1,10.2,77.5,18.2 +126,13,2,6.3,61.2,14.2 +127,14,2,7,60.2,16.4 +128,56,1,11.3,68.5,14.1 +129,14,2,6.3,67.2,14.9 +130,55,1,15.8,101.2,13 +131,25,2,7,68.7,12.3 +132,51,1,10.2,76.3,11.7 +133,14,2,7.9,60.1,12.4 +134,32,1,9,75.1,13.8 +135,9,2,4,61.3,15.3 +136,10,2,6.8,60.9,12.4 +137,50,2,11.2,102.8,14.7 +138,46,2,11.7,99.1,16.7 +139,33,1,7.7,84.5,13.1 +140,57,1,13.9,102,11.5 +141,39,1,10.8,81.4,14.7 +142,15,2,6.2,62.1,14.7 +143,13,2,6.3,61.2,15 +144,40,2,12.9,101.2,14.3 +145,39,2,6.2,78.7,11.2 +146,13,1,4.2,58.9,13.6 +147,17,2,5.9,61,14.7 +148,52,2,8.1,67.8,17.8 +149,30,2,6.1,76.2,17.8 +150,28,2,7.1,72.8,16.7 +151,58,1,14.3,102.1,18.1 +152,7,2,4.7,70,12.4 +153,40,1,8.5,89.5,10.8 +154,31,2,8,79,12 +155,32,2,7.2,71.8,15.4 +156,54,2,13.9,110.6,18 +157,58,1,11.1,103.8,14.1 +158,43,2,10.5,99.5,11.5 +159,31,1,7.1,83.5,14.2 +160,10,1,5.1,60.6,12.8 +161,37,1,10,91.4,19 +162,27,1,7,72.8,13.2 +163,57,2,11.6,92.1,10.9 +164,34,1,6.1,70,14.2 +165,8,1,7.2,66.7,12.7 +166,32,2,9.1,76.3,16.5 +167,54,2,16.3,100.1,13.3 +168,51,1,8,81.2,11.6 +169,6,2,7.2,71.2,18.1 +170,7,1,6.8,66.3,10.9 +171,53,2,12.9,93.2,19 +172,13,2,6.3,62.1,18.2 +173,36,2,9.2,68.9,13.6 +174,13,2,8.9,77.6,18 +175,29,2,10.8,77.4,13.2 +176,31,2,12.3,86.2,18 +177,37,2,9.1,77.3,16.1 +178,13,1,6.9,69.7,11.4 +179,38,1,9.2,86.3,16.3 +180,10,2,6.3,60,13 +181,36,1,9.9,69.2,17.8 +182,50,2,9.9,91.1,12.2 +183,33,2,8,81.2,17.8 +184,43,2,8.2,91.1,17.5 +185,34,2,8.8,69.7,19 +186,52,2,11.6,98.5,17.7 +187,28,1,8.9,59.5,19.1 +188,49,1,10.6,98.5,15.7 +189,16,1,7.6,75,15.3 +190,36,1,9,100,12 +191,7,2,2.4,62,15 +192,29,2,9.9,99,15.5 +193,9,2,3.8,80.3,12.8 +194,33,1,6.9,95.5,13.8 +195,30,2,7.6,90,14.6 +196,10,2,6.9,74.5,10.8 +197,50,2,11.8,101.5,12.7 +198,13,2,5.8,78,16.9 +199,11,1,5.7,79,13.4 +200,35,2,7.5,89,11.3 +201,25,2,8,98,11 +202,15,2,5.1,60,10.8 +203,4,2,3.4,53.1,13.9 +204,13,1,5.1,61.8,14.1 +205,29,2,7,80.6,12.3 +206,31,1,7.2,81.1,17.6 +207,46,2,10,91.8,14.3 +208,35,1,6.2,68.8,15.5 +209,6,1,7,68.5,13 +210,15,2,7.2,77.5,15.6 +211,47,2,16.3,101.7,10.7 +212,16,1,8.8,59.2,19 +213,39,1,10.6,98.5,17.6 +214,30,1,7.8,84.2,12.1 +215,49,1,12.2,81.2,12.5 +216,4,1,5,71,14.5 +217,37,2,14.8,99.8,14.4 +218,31,2,8.5,86.1,16.3 +219,30,1,9.9,94.2,15.1 +220,2,1,3.3,52.6,18.6 +221,43,1,12.9,81.8,12.4 +222,49,1,9.8,77.8,13.4 +223,38,1,7.8,65.8,15.3 +224,38,2,8.3,71.2,13.1 +225,27,2,7.3,71.8,16.8 +226,40,1,7.8,68.5,19.1 +227,38,1,8.3,68.3,18.8 +228,47,2,9.4,69,10.6 +229,51,1,13.1,110.9,11.1 +230,58,2,12.4,109.3,11.9 +231,9,1,8.7,75,13.9 +232,47,2,14.9,92.5,12.9 +233,41,1,10.4,85.5,12 +234,41,1,10.4,94.5,13.6 +235,50,1,13.5,91.5,11.8 +236,24,1,9.9,60.5,15.1 +237,12,1,7.6,60.1,11.4 +238,36,1,9.2,88.4,11.4 +239,41,2,12.6,83,18.1 +240,2,1,4.1,52.5,11.5 +241,39,1,10.8,81.4,14.9 +242,36,1,12.3,89,15.2 +243,53,1,14.1,107,13.8 +244,2,2,15.2,101.1,17.3 +245,36,2,12.1,73.1,15 +246,11,2,10.1,73.1,18.7 +247,14,1,8.4,73.1,15.5 +248,17,2,9.1,70.5,18.5 +249,21,1,9.2,77.5,19 +250,13,2,8.5,69,17.1 +251,49,1,16.5,94.8,12.8 +252,27,1,12.5,84.1,14.7 +253,10,1,8.8,73.8,15.3 +254,34,2,11.3,84.8,17.5 +255,3,1,5.3,56.5,12 +256,6,2,7,60.2,13.8 +257,31,2,14.1,89,19.1 +258,2,2,9.5,78.1,13.7 +259,29,1,12,81.1,12.5 +260,15,2,10.2,79.1,17.7 +261,43,1,12.6,92,15 +262,17,1,8.6,74.1,14.2 +263,43,2,12.4,99.1,17.3 +264,27,2,9.2,80.4,10.8 +265,40,2,13.9,99.8,18 +266,11,2,8,78.5,17.3 +267,44,2,14,92.3,10.9 +268,59,1,18.5,111.5,15 +269,46,2,15.1,97.4,11.3 +270,8,2,9.1,70.5,11.1 +271,42,2,12.4,99.1,14.4 +272,26,1,13.6,84.6,14.6 +273,39,1,14.1,98.5,14.8 +274,1,2,3.6,52.5,17.6 +275,18,1,8.4,73.5,14.1 +276,39,2,12.2,89.1,17.6 +277,58,1,13,91,11.3 +278,7,2,7.5,73.1,18.9 +279,36,2,13.1,99.5,18.3 +280,11,1,12.1,91.5,16.8 +281,26,1,10.4,74.5,16.6 +282,50,2,17.1,114.1,18.7 +283,31,1,11.8,85.5,15.3 +284,56,2,15.2,99.4,16.2 +285,11,1,9.1,78.5,15.8 +286,33,1,12.3,87.5,18.5 +287,36,1,18.5,111.5,11 +288,9,2,6.2,65.7,13.4 +289,49,2,18,97,13.4 +290,5,1,5.5,62.3,18.6 +291,49,1,16,100.4,15.2 +292,43,2,11.7,64.5,12.4 +293,27,1,10.6,85.5,16.3 +294,26,2,10,72.5,13.1 +295,8,2,8.1,72.1,15.7 +296,14,1,9.1,75.8,14.9 +297,16,1,10,70.1,11.7 +298,11,2,7.1,59.6,17.5 +299,45,2,12.9,67,17.5 +300,8,1,7.1,56.5,17.7 +301,28,2,11.5,75.5,13.1 +302,20,1,12.1,79.5,17.2 +303,38,1,14.4,88.5,15.9 +304,59,2,13,108.6,12.8 +305,31,2,10.8,81.4,14.8 +306,6,2,7,68.6,16.3 +307,45,2,14.6,98.5,17.5 +308,36,2,9.5,89.4,12.5 +309,17,2,7,60.4,13.7 +310,40,2,10.6,91.4,12.3 +311,8,2,7.1,69,17.7 +312,51,1,14,99.1,17.3 +313,7,2,7,68.1,11.2 +314,48,2,14.5,97.1,11.5 +315,36,1,12,89.9,17.8 +316,57,1,14.6,99.6,12.4 +317,41,1,13.2,79.9,16.2 +318,16,2,9,70.1,17.6 +319,58,1,14.1,106.1,13.2 +320,17,1,7.8,69,10.7 +321,24,2,8.3,76.1,13.8 +322,7,2,7.4,70.1,15.4 +323,38,2,9.6,80.5,18.9 +324,8,2,6.1,65.1,15 +325,17,2,6.8,71,13.3 +326,46,2,9.8,91,18.8 +327,54,1,12.3,83.4,10.6 +328,10,1,6.7,66.3,13.6 +329,43,1,13.7,93.4,11.3 +330,12,1,4.9,59.1,10.6 +331,1,2,3.5,53,15.7 +332,50,1,14.3,90.4,16.8 +333,13,1,9.9,64.3,12.2 +334,49,1,13.9,92.5,11.2 +335,18,2,12.7,79.4,13.8 +336,6,1,9.7,65.8,16.5 +337,14,2,8,65.4,12.7 +338,9,2,4,59.1,12.6 +339,56,2,13,108.9,15.7 +340,22,2,9.2,78.5,12.9 +341,33,1,8.2,78,15 +342,51,2,15.5,101,18.5 +343,3,2,7.9,65.5,13.5 +344,44,1,12.7,68.5,16.1 +345,24,1,9.2,79,11 +346,47,2,12.4,94.5,15.7 +347,33,2,6.8,80,17.8 +348,35,2,7.7,82.5,13.6 +349,42,2,9.2,77.5,18.4 +350,13,1,6.3,71.9,15.2 +351,41,2,10.7,90.8,18.6 +352,14,2,6.5,79.6,11.6 +353,43,2,9.9,91.5,18.6 +354,35,1,9.5,80.1,10.6 +355,46,2,10.3,84,12.4 +356,45,2,11.5,90.5,10.6 +357,6,2,6.1,61.3,11.8 +358,40,1,8.6,88.9,16.1 +359,9,2,5.1,59.1,10.8 +360,54,2,13.1,99.1,11.1 +361,32,1,9.7,85.1,16.8 +362,52,2,14.2,110.1,17.8 +363,55,1,14,115.1,14.4 +364,53,2,13.3,95.5,15.5 +365,36,1,8.3,63.9,14.4 +366,57,2,12.4,89,10.9 +367,6,1,12.1,91.4,18 +368,51,2,12.4,80.5,18.7 +369,31,1,9,75.5,18.4 +370,3,1,4,55.1,13.2 +371,33,1,10.1,77,16.8 +372,12,1,5.7,66.7,18.4 +373,37,2,9.8,89.1,14 +374,6,1,7,59.4,14.5 +375,39,1,12.1,86.5,17.8 +376,21,1,9.9,69.6,14.3 +377,35,1,9.2,82.3,10.7 +378,49,1,15,89.4,14.6 +379,2,2,4.6,52.3,15.1 +380,14,1,6,59.8,12.9 +381,5,1,4.1,62.1,18.8 +382,48,1,12.5,88.3,16.4 +383,24,2,6.4,85,17.2 +384,39,1,10,71.8,17.7 +385,7,2,7,59.8,11.1 +386,38,2,8.8,67.6,13.1 +387,14,2,6.1,64,15 +388,13,2,8.2,60.1,17.8 +389,59,1,10.6,102.5,11.5 +390,33,1,8.6,83.5,16.9 +391,30,1,9.2,76.4,14.5 +392,55,1,11.1,80.4,18.4 +393,35,1,9.3,67.1,15.2 +394,13,2,7,61.8,17.3 +395,13,2,6.1,64.1,10.7 +396,39,1,9.1,67.4,18.6 +397,31,1,9.2,64.3,16.6 +398,49,1,7.9,67.8,14.6 +399,45,2,9.9,92.3,17.4 +400,45,2,10.2,90.1,14 +401,28,2,7.2,72.1,17.9 +402,28,1,6.5,69.3,17.6 +403,47,1,11,100,13.3 +404,15,1,4.2,53.3,16.5 +405,28,2,9.8,79.9,17.2 +406,35,2,6.2,70,17.4 +407,34,1,7.4,80,16.3 +408,43,1,8.6,89.7,18.4 +409,46,2,8.8,88.1,17.3 +410,21,2,5.8,68,16 +411,5,2,4,59.2,11.7 +412,52,1,11.8,99.1,17.4 +413,28,1,7,75.6,17.5 +414,52,1,9.7,89.7,12.8 +415,37,1,8.6,89.5,17.4 +416,9,2,4.4,64,17 +417,55,2,11.6,100,14.3 +418,34,1,6.4,78,18.6 +419,55,2,7.8,95.5,15.9 +420,37,1,8.2,89.1,17.4 +421,31,2,8,69,11.7 +422,29,2,6.6,65.5,16.3 +423,28,1,8.2,75.2,16.6 +424,2,2,5,69.3,15.2 +425,41,2,8.5,75,18.1 +426,38,1,13.7,84.5,15.3 +427,20,2,5.1,81,14.3 +428,52,2,13.6,85.5,11 +429,20,1,7.6,73,16 +430,31,1,8.8,75,16.5 +431,8,1,4.2,66.3,13.9 +432,45,1,10,79.1,18.2 +433,31,1,6,71.1,12 +434,4,2,4.2,59.1,15.9 +435,46,1,8,79.1,10.8 +436,29,2,5.6,60.1,12 +437,27,1,7,69.8,12.9 +438,9,1,4.2,57.7,11.7 +439,6,2,6.6,65,10.8 +440,28,2,8.8,75,16 +441,5,1,6.5,68.4,11.6 +442,41,2,12.8,85.5,16.5 +443,30,2,8.1,81,16.3 +444,31,1,8.5,75.5,17.9 +445,16,1,9.5,75.5,13.1 +446,42,1,16.1,93.5,16.5 +447,27,1,7.5,76.7,16.6 +448,27,1,8.6,75.5,13.5 +449,48,2,12.6,85,17.1 +450,3,2,7.2,60.5,18.8 +451,38,1,9.6,75,11.7 +452,3,2,5,69.3,18.6 +453,36,2,10.6,83.5,13 +454,7,1,5.6,60.5,14.9 +455,49,2,11.7,101,17.1 +456,8,1,4.7,70,15.4 +457,53,2,11.7,100,12.4 +458,50,1,9.7,95.5,14 +459,31,1,10.6,80,10.7 +460,39,2,9.6,95,12.9 +461,8,2,4.1,61.5,11 +462,33,1,8.2,85,10.6 +463,6,2,4.9,60.5,12.9 +464,40,1,9.6,89.2,15 +465,10,2,5.1,65.1,14.5 +466,39,1,10.4,95.5,12.1 +467,8,1,4,60.1,13.5 +468,55,2,12.1,98.9,14.3 +469,29,2,8.7,95.5,18.3 +470,47,1,11.8,100,13.9 +471,10,1,4,56.1,17.9 +472,10,2,5,60.8,14.5 +473,8,1,4.4,57.1,10.6 +474,30,1,7.4,69,15 +475,31,1,8.5,79.1,13.3 +476,56,2,11.8,99.5,15.6 +477,7,2,4,61,16.4 +478,33,2,6.8,79.9,16.6 +479,6,1,4.6,60.1,17.6 +480,15,2,5,62.1,17 +481,10,1,5.8,75,15.3 +482,41,2,9.6,95.5,16.5 +483,39,1,11.1,85,11.6 +484,13,1,6.7,66,12 +485,7,1,8.1,67.5,18.7 +486,58,2,11.4,90.5,18.2 +487,43,2,10,80.5,14.4 +488,46,2,10,63.8,13.8 +489,31,2,10.9,74.6,16.5 +490,3,2,4,54.6,14.5 +491,5,1,5.9,54.4,14.5 +492,39,2,12.3,78.8,15.8 +493,4,2,4.2,61.5,16.9 +494,34,1,15,86.7,14 +495,12,1,9.8,65,16.7 +496,5,1,3.9,59.5,11.3 +497,37,1,15,91.5,16.1 +498,32,1,15.9,78.8,16.9 +499,15,2,5.6,60.1,15.6 +500,4,1,3.8,50.1,16.8 +501,28,2,8.7,71.5,18.7 +502,53,1,13.7,110.8,16.2 +503,33,2,8,82.2,11.2 +504,14,1,5.2,69.1,17 +505,35,2,10.4,75.5,10.8 +506,15,2,3.5,56.1,17.9 +507,35,1,7.2,63.5,12.2 +508,27,1,8.5,68,18.9 +509,56,1,12.6,103,17.8 +510,12,1,8.1,75.5,15.1 +511,15,1,6.9,70.5,15.1 +512,7,2,14.3,95.5,16.2 +513,56,2,5.9,66.5,15.5 +514,25,1,9.3,72.5,17.1 +515,45,2,11.6,85.5,14.2 +516,28,2,10,81.4,16.1 +517,54,2,10.6,99.5,18.3 +518,13,2,8.3,69.5,17 +519,31,2,12.4,95.5,14.1 +520,53,2,11.6,100.5,17.4 +521,20,2,8.6,67.3,14 +522,15,1,7.9,59.5,10.7 +523,11,1,9.9,65.8,11.7 +524,13,2,8,60,18.6 +525,45,1,10.2,90.5,13.5 +526,21,1,8.8,65.1,15.6 +527,17,1,6.2,56.5,12.7 +528,45,1,9.5,90,11.4 +529,46,2,8.3,86.8,18.4 +530,9,2,7.9,68.5,11.5 +531,6,2,5.5,50,18.5 +532,21,2,8,70,11.6 +533,57,2,10,83.1,16.7 +534,39,1,10,84,15.3 +535,21,1,8,69.1,14.5 +536,7,1,7.1,59.1,18 +537,45,1,10.6,99.6,16.1 +538,11,1,9,69.8,18.3 +539,37,2,14.3,98,13.7 +540,37,1,9.1,77,14.9 +541,2,2,4.2,53.1,10.5 +542,20,1,12.1,63.5,17.3 +543,20,1,14.1,91,18.5 +544,47,2,14.4,90,15.6 +545,18,1,9,81,12.1 +546,36,2,5.6,59.5,13.8 +547,19,2,8.9,61,18.3 +548,54,1,7.6,53.8,18.5 +549,2,2,6.1,67.1,18.9 +550,22,1,10,98.1,15.7 +551,14,1,9.1,72.4,17.6 +552,44,2,11.1,90.1,11.1 +553,6,1,6.6,60.1,14.1 +554,8,2,5.6,50.5,18.4 +555,1,1,6.5,70.5,11.2 +556,27,1,13.9,86.5,10.6 +557,7,2,6.2,53.5,15.2 +558,13,1,8.2,82.5,11.5 +559,57,1,11.2,65.5,12.7 +560,0,2,3.9,51,16.6 +561,38,2,18,78,17.3 +562,34,1,12.1,80.4,13.3 +563,35,2,9.2,78.6,10.7 +564,56,2,12.9,110.9,17.9 +565,19,1,8.1,60.4,18 +566,28,1,9.6,81.3,11.4 +567,34,2,10.8,81.4,18 +568,26,2,9.9,69.8,13 +569,21,2,7.9,58.1,10.9 +570,50,1,11.5,100,14 +571,1,1,4.2,60,18.6 +572,15,1,10.3,81,14.7 +573,42,1,12.2,89.5,13 +574,19,2,7.3,80.5,11.5 +575,49,1,15.1,103,12.8 +576,10,2,6.8,78.5,10.7 +577,38,1,10.1,89.6,15.9 +578,8,2,4.8,73,18.3 +579,1,1,4,56.1,17 +580,5,1,5,60.1,17.8 +581,29,2,7,80.1,15.9 +582,48,1,11.1,102.8,11.7 +583,30,1,6.9,80.1,15.8 +584,9,2,5,59.8,18 +585,47,2,9.6,90,14.9 +586,3,1,5,57.1,18.7 +587,11,2,7.8,89.8,17.2 +588,39,1,11,99.7,18.6 +589,31,1,12.2,89.3,15.8 +590,5,2,6.5,91.3,19 +591,36,2,9.1,77,18.4 +592,47,2,11,63.1,17.6 +593,14,1,7.9,73.3,17.6 +594,36,2,11.9,101,15.2 +595,43,1,8.3,61.9,12 +596,25,2,7.9,68.5,12.7 +597,30,1,14.9,90.1,13.8 +598,38,2,18,101,14.8 +599,15,1,9.1,65.8,15.2 +600,49,1,13.9,91,18.4 +601,14,2,7.9,70.8,12.9 +602,14,2,8,69.8,17 +603,26,1,8,84.2,15.7 +604,4,2,4.5,58.1,12.8 +605,57,2,10.2,90.1,18.9 +606,44,1,9.1,89.1,11.1 +607,58,1,10.1,96.8,15.1 +608,30,2,9.8,81.6,12.7 +609,9,2,5.6,60.1,14.3 +610,50,2,10.1,101,12.6 +611,13,2,4.7,73,12.6 +612,31,2,6.4,80.5,18.9 +613,44,1,9.8,61.8,18 +614,26,1,7.9,79.5,16.4 +615,58,1,11.6,99.5,17.2 +616,29,2,8.8,84,14.6 +617,48,2,10.7,101,13 +618,39,1,8.8,98.4,13.3 +619,19,2,6.6,75,11 +620,53,1,10.5,98.5,16 +621,51,1,13,102,11.3 +622,59,2,14.3,95.6,14.4 +623,25,2,7.9,68.5,15.2 +624,57,2,15,96.2,13 +625,39,1,9.1,77,13.9 +626,23,1,7.9,68.5,12.1 +627,57,2,11.2,63,18.6 +628,40,1,9.2,68.9,12.4 +629,9,2,8.8,65.1,10.5 +630,13,2,11.2,68.5,13.2 +631,38,1,8.3,60.1,17.9 +632,16,2,10.2,67.8,17.3 +633,37,2,13.3,75.8,12.3 +634,13,1,9.3,68.2,12 +635,50,1,14.2,89.7,15.6 +636,35,2,14.3,90.2,12.8 +637,3,1,3.4,56.1,16.8 +638,56,1,14.8,91.2,13.3 +639,7,2,3.5,60,16 +640,40,1,9.5,71.2,11.9 +641,15,2,8.3,67.4,11 +642,7,1,6.2,63.4,15.6 +643,10,2,8.4,67.2,18.2 +644,51,2,14.2,108.1,18.6 +645,51,1,11.8,99,11.7 +646,28,2,6.5,83,15.2 +647,16,1,5.8,80,12.1 +648,22,2,5.5,75.1,15 +649,27,2,7.6,70.9,16.2 +650,56,1,11.7,100,11.6 +651,39,1,9.5,89.1,14.2 +652,47,1,10.1,91.5,18 +653,51,1,12.9,78.3,17.5 +654,31,1,12,82.7,13.3 +655,50,2,9.8,86.1,14.8 +656,14,2,6.2,61.3,12.9 +657,46,2,10,89.7,15.2 +658,14,2,8.2,69.8,12.4 +659,52,2,13.9,91.2,15.4 +660,15,2,8.1,69.2,14.8 +661,48,1,13.9,90.3,16 +662,51,2,14.9,92.6,14.6 +663,24,2,10.5,82.3,16.8 +664,43,1,17.8,102.5,11.9 +665,38,1,15.5,107.8,18.3 +666,0,1,3.6,52,18.7 +667,28,1,17,99.3,11 +668,42,1,14.2,89.5,13.8 +669,22,2,10.3,79.5,14.3 +670,58,2,13.2,99.5,16.3 +671,37,2,11.6,99.1,13.6 +672,3,1,3.1,65,15.5 +673,45,2,15.4,97.3,10.9 +674,44,2,14.9,92.5,16.6 +675,7,1,7,80,10.6 +676,20,2,8.1,75.5,16.2 +677,59,2,13.5,99.5,14.6 +678,4,2,5.5,60,13.6 +679,6,2,8.1,60.4,17.4 +680,48,1,12.5,99.5,12.9 +681,25,1,9.9,100.5,15.7 +682,21,1,9.3,41.2,15.8 +683,59,2,10.3,62.4,10.6 +684,15,2,7.1,67.5,16.5 +685,10,2,8.8,79.5,15.8 +686,40,1,13.7,91.5,17.9 +687,45,1,8.1,89.1,15.6 +688,6,1,4,58.9,18.2 +689,53,2,10,99.6,15.3 +690,40,2,9.2,80,18.1 +691,10,1,5,69.5,12.5 +692,5,1,4,59,17.4 +693,51,2,11,102.1,15.4 +694,7,1,4.8,59,13.2 +695,51,1,9.7,91,13.6 +696,25,1,6.4,70.1,13.7 +697,53,2,8.8,90.5,13.7 +698,52,2,13.1,109,17.4 +699,37,1,8.2,95.1,13.1 +700,14,1,5,65.5,12.7 +701,39,1,10.9,99.5,17.7 +702,15,1,6.5,75.5,15.7 +703,4,2,6.6,75,10.7 +704,9,1,5.7,70,14.6 +705,46,2,16.3,96.2,15.5 +706,31,2,9.1,76.8,18.4 +707,53,2,16,92.1,17.2 +708,25,2,7,62.3,17.3 +709,44,2,18,94.1,16.9 +710,14,2,4.9,59,16.7 +711,51,2,10.1,91.3,18.5 +712,42,1,14.9,90.2,15.5 +713,16,1,7.8,63.1,11 +714,38,2,13.2,96.8,12.6 +715,33,1,7.1,80.6,16.7 +716,4,2,3.3,57.2,10.7 +717,39,1,7.2,63.4,17.4 +718,7,1,6,57.8,12.8 +719,38,2,7.9,61.7,18.4 +720,39,1,8.2,65.6,18.9 +721,38,2,16,91.3,16.2 +722,34,1,8.2,78.8,10.7 +723,36,2,9.9,78.7,15.2 +724,13,1,8.2,65.7,18.2 +725,8,2,5.7,70,14.7 +726,43,1,8.7,89,13.8 +727,29,2,8.6,90.5,16.6 +728,50,2,10.7,100.5,10.9 +729,51,2,10.7,100,14.2 +730,3,1,3.6,57.1,15.2 +731,7,1,4,60.1,12 +732,38,2,10.7,90.5,12.7 +733,2,1,3.9,57.1,16.1 +734,2,2,3.1,56.9,11 +735,37,2,9.1,89,19.1 +736,14,1,5.1,65.9,16.7 +737,43,1,8.2,85,16.2 +738,7,1,4,59.9,11.4 +739,4,1,4.1,56.7,17.1 +740,42,1,8.8,83.1,15.8 +741,14,2,7.3,61.1,18.9 +742,39,1,9.8,72.3,16 +743,4,1,3.1,60.1,12.3 +744,32,2,16,86.2,14.7 +745,26,1,9,77.3,14.1 +746,8,2,2.9,51.2,17.3 +747,39,1,8.2,77.4,13.3 +748,3,1,3,53.8,15.4 +749,7,2,5.9,56.4,18.6 +750,7,2,5.1,53.9,11.2 +751,39,2,8.3,68.1,13.4 +752,0,2,2.9,58.1,14.5 +753,37,2,7.9,82.1,18.1 +754,13,1,9,77.8,16.3 +755,54,2,12.9,89.6,15.1 +756,14,2,8.9,79.8,14.1 +757,41,1,13.1,89.1,18 +758,30,2,8.1,61.8,17.7 +759,23,2,13.9,90,18.8 +760,37,1,9,81.2,15.6 +761,37,2,8.6,77.6,15.7 +762,13,1,8.2,75.8,19 +763,8,2,6,65.1,16.8 +764,43,1,12.7,88.3,13.1 +765,36,2,11.2,93.9,15.7 +766,24,1,8.6,73.1,16.4 +767,49,2,10.1,89.1,16.3 +768,13,1,6,60.9,18.4 +769,39,2,10,79.1,18.9 +770,27,2,8.1,69.1,16.4 +771,51,1,15.1,116.1,11.8 +772,38,2,11.4,96.1,15.9 +773,14,2,9,68.1,13.6 +774,5,2,6.5,60,18.6 +775,26,1,10.5,79.1,17 +776,48,1,12,90.1,15.3 +777,10,2,7,66.1,14.6 +778,14,1,8.9,59.5,15.2 +779,53,2,11.7,88.5,14.7 +780,59,1,14,94.5,12.2 +781,33,1,10.8,81.4,16.8 +782,1,1,7,49.3,11.8 +783,38,2,13.6,96.3,10.8 +784,59,2,12.6,87.3,17.1 +785,3,1,4,58.5,18.7 +786,32,1,10.4,73.4,17.4 +787,12,1,8.6,68.5,16.7 +788,7,1,7.6,68.5,18.1 +789,51,1,11.7,82.1,16.9 +790,8,1,8,59.6,13.4 +791,34,2,14,81.5,12.4 +792,49,1,13.9,95.5,16.8 +793,17,2,10.2,79.5,13.7 +794,8,2,6.9,59.5,17.4 +795,33,1,11.8,81,18.5 796,56,2,17.4,95,14.8 \ No newline at end of file diff --git a/tests/testthat/data_files/ANTHRO/anthro3.csv b/tests/testthat/data_files/ANTHRO/anthro3.csv index e5ce5bb9..8135f9c9 100644 --- a/tests/testthat/data_files/ANTHRO/anthro3.csv +++ b/tests/testthat/data_files/ANTHRO/anthro3.csv @@ -1,222 +1,222 @@ -,age,sex,weight,height,muac -1,10,1,5.7,64.2,12.5 -2,10,2,5.8,64.4,12.1 -3,9,2,6.5,62.2,13.9 -4,11,9,6.5,64.9,12.9 -5,24,2,6.5,72.9,12 -6,12,2,6.6,69.4,12.6 -7,9,2,7,66.7,13.6 -8,7,1,7.1,63.5,13.9 -9,9,2,7.1,66.2,14.4 -10,16,2,7.2,69,13.1 -11,13,2,7.4,68.2,13.7 -12,11,2,7.4,70,13.2 -13,14,2,7.5,64.8,12.5 -14,8,2,7.5,65.7,15.1 -15,8,1,7.5,69.1,14 -16,13,1,7.6,69.2,13.1 -17,13,2,7.6,70,12.5 -18,22,2,7.6,76.2,12.1 -19,16,1,7.7,69.6,13.6 -20,8,2,7.8,63.3,14.4 -21,11,2,7.8,71.5,13.4 -22,14,2,7.8,76.6,12.4 -23,7,1,8,66.8,13.9 -24,8,1,8,69.3,14.7 -25,24,2,8.2,70.7,12.5 -26,10,1,8.2,71.1,14.5 -27,15,1,8.3,70.4,13.3 -28,14,2,8.3,71.5,13.7 -29,14,2,8.3,72.9,14.1 -30,17,2,8.3,73.5,13.6 -31,15,1,8.3,76.1,13.3 -32,13,2,8.4,71.8,14.3 -33,20,1,8.4,77.8,13.2 -34,29,2,8.5,75.6,12.7 -35,21,2,8.5,75.6,13.3 -36,21,1,8.5,76.7,12.3 -37,17,1,8.5,77.6,13.7 -38,15,2,8.6,74.9,13.4 -39,24,1,8.6,77.8,13.7 -40,12,1,8.7,72.1,15.6 -41,27,2,8.7,75.8,12.7 -42,25,2,8.7,80.8,12.9 -43,25,1,8.8,81.4,12.5 -44,24,2,8.9,74.3,14.2 -45,30,1,9,77.6,13.2 -46,22,1,9,82.2,13.5 -47,16,1,9.1,76.4,14.5 -48,24,1,9.1,80,12.6 -49,17,2,9.2,74.8,14.4 -50,15,2,9.2,75.3,14.5 -51,33,1,9.2,80.1,13.6 -52,25,2,9.2,80.9,14.2 -53,16,1,9.4,75,14.8 -54,29,2,9.4,81.9,13.8 -55,16,1,9.5,73.2,15.1 -56,17,1,9.6,73.5,14.6 -57,29,2,9.6,84.6,13.4 -58,16,1,9.7,74.2,14.8 -59,20,1,9.7,80.4,14.2 -60,34,1,9.8,80.2,13.8 -61,21,2,9.8,80.9,14.5 -62,20,1,9.8,82.2,13.9 -63,29,1,9.9,78.6,14.2 -64,25,2,9.9,82.9,13.8 -65,15,1,10,75.3,15.7 -66,39,1,10,81.4,13.3 -67,9,1,10.1,72.6,15.5 -68,21,1,10.1,76.7,15.3 -69,17,2,10.1,79.1,14.3 -70,25,1,10.1,79.5,14 -71,13,2,10.2,74.6,15.7 -72,25,2,10.3,81.3,14.1 -73,31,2,10.3,85.1,13 -74,25,2,10.4,81.3,13.8 -75,37,1,10.6,76.2,15.3 -76,25,2,10.6,80.7,13.8 -77,26,1,10.6,83.1,14.2 -78,36,2,10.6,84.2,13.5 -79,37,2,10.7,84.2,15 -80,34,2,10.7,85.7,14.6 -81,47,1,10.7,89.8,13.1 -82,12,1,10.8,82,14.7 -83,25,2,10.8,83.6,14.1 -84,31,1,10.8,83.8,15.8 -85,34,1,10.8,84.4,14.4 -86,27,2,10.9,79,15.3 -87,23,2,10.9,85.9,14.5 -88,19,1,11,75.4,16.8 -89,26,2,11,83.2,14.5 -90,54,1,11,85.9,13.9 -91,20,1,11.1,79.9,15.6 -92,23,1,11.1,84.7,14.6 -93,43,2,11.1,86,14.2 -94,31,1,11.1,87.1,14.3 -95,40,2,11.2,95.2,13.7 -96,18,2,11.3,75.5,16.1 -97,41,1,11.3,89.4,14.2 -98,40,1,11.3,90.7,14.8 -99,33,2,11.3,91.2,13.9 -100,11,1,11.4,78.4,17.1 -101,25,1,11.4,82.2,16.3 -102,27,2,11.4,86.8,15.5 -103,38,1,11.4,89.4,14.1 -104,17,2,11.5,80.6,15.8 -105,31,2,11.5,85.4,15.3 -106,45,1,11.5,86.2,14.3 -107,53,1,11.6,81.4,15.3 -108,23,2,11.6,86.3,14.3 -109,37,1,11.6,86.3,14.9 -110,38,1,11.6,89.9,14.6 -111,40,1,11.7,93,14 -112,36,1,11.8,87.1,14.6 -113,29,1,11.9,84.3,16.6 -114,26,2,12,81.2,16.4 -115,33,1,12,86,15.4 -116,36,1,12,87.5,15 -117,55,2,12,96.2,14.4 -118,16,1,12.1,82.3,15.7 -119,35,2,12.1,86.6,14.7 -120,43,1,12.1,91.7,15.1 -121,38,2,12.2,80.9,17.5 -122,37,1,12.2,85.5,16.2 -123,41,2,12.2,87.6,15.5 -124,45,2,12.2,90.1,14.9 -125,46,2,12.2,99.6,14.6 -126,31,1,12.3,88,16.7 -127,44,1,12.3,88.1,15.1 -128,47,2,12.3,94.9,13.3 -129,29,1,12.4,91.8,14.1 -130,46,2,12.4,99.6,14 -131,34,1,12.6,87,15.6 -132,38,2,12.7,85.7,15.2 -133,32,1,12.8,87.6,16.1 -134,36,1,12.8,90.4,15 -135,39,1,12.8,92.7,15.2 -136,42,1,12.8,94,14.6 -137,38,2,12.9,83.4,17.4 -138,26,2,12.9,86.2,15.9 -139,35,1,12.9,90.9,15.4 -140,41,1,12.9,91.2,16 -141,32,1,12.9,91.4,14.8 -142,49,1,13,93.1,15.2 -143,30,1,13.1,84.3,16.1 -144,32,1,13.1,85.1,13.6 -145,35,1,13.1,87.5,15.8 -146,34,1,13.1,88.6,16.2 -147,45,2,13.1,91.6,15 -148,29,1,13.2,90.8,15.8 -149,47,2,13.2,91.4,14.6 -150,37,2,13.2,93.8,15.5 -151,35,1,13.3,96.5,14.2 -152,15,2,13.4,82.4,15.7 -153,38,2,13.4,93,15.2 -154,37,2,13.4,94.1,14.9 -155,53,2,13.4,100.3,14.5 -156,37,2,13.5,84.4,16.8 -157,43,1,13.5,96.1,15.1 -158,52,1,13.5,97,14.4 -159,45,2,13.5,98,14.8 -160,39,2,13.5,99.1,14.5 -161,47,2,13.6,97,14.6 -162,26,2,13.7,85.7,17.1 -163,24,1,13.8,80.9,17.2 -164,38,2,13.8,93.3,15.3 -165,57,1,13.8,94,14.9 -166,42,2,13.8,103.4,14.4 -167,42,2,13.9,92.3,17.5 -168,52,1,13.9,95.5,15.1 -169,52,1,13.9,95.7,15.6 -170,57,2,13.9,97.2,15.3 -171,52,2,13.9,97.8,14.1 -172,52,2,13.9,97.9,15.5 -173,49,2,13.9,98.2,15 -174,58,2,14,96.6,15.4 -175,50,1,14,97.9,15.8 -176,39,2,14.1,93.7,15.5 -177,49,2,14.1,96.4,14 -178,50,2,14.1,97.1,14.8 -179,59,2,14.1,97.3,15.2 -180,52,2,14.1,102.4,15.6 -181,41,1,14.2,96.7,14.6 -182,53,1,14.2,97.7,15.1 -183,49,2,14.2,98.1,15.6 -184,35,2,14.3,89.8,16.5 -185,50,1,14.3,93.7,15.2 -186,41,1,14.4,94.8,15.8 -187,42,1,14.5,95.1,16.1 -188,58,1,14.5,104.9,13 -189,49,1,14.7,96.6,15.2 -190,52,2,14.7,96.7,15.4 -191,51,2,14.7,99.2,15.5 -192,49,1,14.7,99.6,16.4 -193,42,2,15,93.5,17.2 -194,28,2,15.1,91.5,16.4 -195,41,2,15.2,95.9,16.5 -196,53,1,15.3,95,16.6 -197,58,1,15.3,100.7,15.5 -198,48,1,15.3,103.5,14.3 -199,54,1,15.5,97.9,15.9 -200,58,1,15.5,101.3,16.6 -201,52,2,15.6,100,16.4 -202,50,1,15.7,99.6,15.3 -203,53,2,15.7,103.1,15.8 -204,43,1,15.8,91.1,17.9 -205,57,1,15.9,103.8,16.1 -206,55,2,16.3,95.4,16.9 -207,54,2,15.3,102,15.6 -208,44,1,16.3,96.2,17.3 -209,47,1,16.3,102,16.6 -210,57,1,16.3,108.4,13.8 -211,52,1,16.4,103.9,15.2 -212,52,2,16.6,97.8,14.4 -213,56,1,16.6,103.9,14.8 -214,55,1,16.7,106.3,15.4 -215,52,1,17,101.3,16.3 -216,50,1,17.3,101.8,16.8 -217,53,1,17.5,102.2,16.8 -218,42,1,17.7,100.9,14.5 -219,48,2,17.8,111.3,17.6 -220,53,1,17.9,98.7,17.1 +,age,sex,weight,height,muac +1,10,1,5.7,64.2,12.5 +2,10,2,5.8,64.4,12.1 +3,9,2,6.5,62.2,13.9 +4,11,9,6.5,64.9,12.9 +5,24,2,6.5,72.9,12 +6,12,2,6.6,69.4,12.6 +7,9,2,7,66.7,13.6 +8,7,1,7.1,63.5,13.9 +9,9,2,7.1,66.2,14.4 +10,16,2,7.2,69,13.1 +11,13,2,7.4,68.2,13.7 +12,11,2,7.4,70,13.2 +13,14,2,7.5,64.8,12.5 +14,8,2,7.5,65.7,15.1 +15,8,1,7.5,69.1,14 +16,13,1,7.6,69.2,13.1 +17,13,2,7.6,70,12.5 +18,22,2,7.6,76.2,12.1 +19,16,1,7.7,69.6,13.6 +20,8,2,7.8,63.3,14.4 +21,11,2,7.8,71.5,13.4 +22,14,2,7.8,76.6,12.4 +23,7,1,8,66.8,13.9 +24,8,1,8,69.3,14.7 +25,24,2,8.2,70.7,12.5 +26,10,1,8.2,71.1,14.5 +27,15,1,8.3,70.4,13.3 +28,14,2,8.3,71.5,13.7 +29,14,2,8.3,72.9,14.1 +30,17,2,8.3,73.5,13.6 +31,15,1,8.3,76.1,13.3 +32,13,2,8.4,71.8,14.3 +33,20,1,8.4,77.8,13.2 +34,29,2,8.5,75.6,12.7 +35,21,2,8.5,75.6,13.3 +36,21,1,8.5,76.7,12.3 +37,17,1,8.5,77.6,13.7 +38,15,2,8.6,74.9,13.4 +39,24,1,8.6,77.8,13.7 +40,12,1,8.7,72.1,15.6 +41,27,2,8.7,75.8,12.7 +42,25,2,8.7,80.8,12.9 +43,25,1,8.8,81.4,12.5 +44,24,2,8.9,74.3,14.2 +45,30,1,9,77.6,13.2 +46,22,1,9,82.2,13.5 +47,16,1,9.1,76.4,14.5 +48,24,1,9.1,80,12.6 +49,17,2,9.2,74.8,14.4 +50,15,2,9.2,75.3,14.5 +51,33,1,9.2,80.1,13.6 +52,25,2,9.2,80.9,14.2 +53,16,1,9.4,75,14.8 +54,29,2,9.4,81.9,13.8 +55,16,1,9.5,73.2,15.1 +56,17,1,9.6,73.5,14.6 +57,29,2,9.6,84.6,13.4 +58,16,1,9.7,74.2,14.8 +59,20,1,9.7,80.4,14.2 +60,34,1,9.8,80.2,13.8 +61,21,2,9.8,80.9,14.5 +62,20,1,9.8,82.2,13.9 +63,29,1,9.9,78.6,14.2 +64,25,2,9.9,82.9,13.8 +65,15,1,10,75.3,15.7 +66,39,1,10,81.4,13.3 +67,9,1,10.1,72.6,15.5 +68,21,1,10.1,76.7,15.3 +69,17,2,10.1,79.1,14.3 +70,25,1,10.1,79.5,14 +71,13,2,10.2,74.6,15.7 +72,25,2,10.3,81.3,14.1 +73,31,2,10.3,85.1,13 +74,25,2,10.4,81.3,13.8 +75,37,1,10.6,76.2,15.3 +76,25,2,10.6,80.7,13.8 +77,26,1,10.6,83.1,14.2 +78,36,2,10.6,84.2,13.5 +79,37,2,10.7,84.2,15 +80,34,2,10.7,85.7,14.6 +81,47,1,10.7,89.8,13.1 +82,12,1,10.8,82,14.7 +83,25,2,10.8,83.6,14.1 +84,31,1,10.8,83.8,15.8 +85,34,1,10.8,84.4,14.4 +86,27,2,10.9,79,15.3 +87,23,2,10.9,85.9,14.5 +88,19,1,11,75.4,16.8 +89,26,2,11,83.2,14.5 +90,54,1,11,85.9,13.9 +91,20,1,11.1,79.9,15.6 +92,23,1,11.1,84.7,14.6 +93,43,2,11.1,86,14.2 +94,31,1,11.1,87.1,14.3 +95,40,2,11.2,95.2,13.7 +96,18,2,11.3,75.5,16.1 +97,41,1,11.3,89.4,14.2 +98,40,1,11.3,90.7,14.8 +99,33,2,11.3,91.2,13.9 +100,11,1,11.4,78.4,17.1 +101,25,1,11.4,82.2,16.3 +102,27,2,11.4,86.8,15.5 +103,38,1,11.4,89.4,14.1 +104,17,2,11.5,80.6,15.8 +105,31,2,11.5,85.4,15.3 +106,45,1,11.5,86.2,14.3 +107,53,1,11.6,81.4,15.3 +108,23,2,11.6,86.3,14.3 +109,37,1,11.6,86.3,14.9 +110,38,1,11.6,89.9,14.6 +111,40,1,11.7,93,14 +112,36,1,11.8,87.1,14.6 +113,29,1,11.9,84.3,16.6 +114,26,2,12,81.2,16.4 +115,33,1,12,86,15.4 +116,36,1,12,87.5,15 +117,55,2,12,96.2,14.4 +118,16,1,12.1,82.3,15.7 +119,35,2,12.1,86.6,14.7 +120,43,1,12.1,91.7,15.1 +121,38,2,12.2,80.9,17.5 +122,37,1,12.2,85.5,16.2 +123,41,2,12.2,87.6,15.5 +124,45,2,12.2,90.1,14.9 +125,46,2,12.2,99.6,14.6 +126,31,1,12.3,88,16.7 +127,44,1,12.3,88.1,15.1 +128,47,2,12.3,94.9,13.3 +129,29,1,12.4,91.8,14.1 +130,46,2,12.4,99.6,14 +131,34,1,12.6,87,15.6 +132,38,2,12.7,85.7,15.2 +133,32,1,12.8,87.6,16.1 +134,36,1,12.8,90.4,15 +135,39,1,12.8,92.7,15.2 +136,42,1,12.8,94,14.6 +137,38,2,12.9,83.4,17.4 +138,26,2,12.9,86.2,15.9 +139,35,1,12.9,90.9,15.4 +140,41,1,12.9,91.2,16 +141,32,1,12.9,91.4,14.8 +142,49,1,13,93.1,15.2 +143,30,1,13.1,84.3,16.1 +144,32,1,13.1,85.1,13.6 +145,35,1,13.1,87.5,15.8 +146,34,1,13.1,88.6,16.2 +147,45,2,13.1,91.6,15 +148,29,1,13.2,90.8,15.8 +149,47,2,13.2,91.4,14.6 +150,37,2,13.2,93.8,15.5 +151,35,1,13.3,96.5,14.2 +152,15,2,13.4,82.4,15.7 +153,38,2,13.4,93,15.2 +154,37,2,13.4,94.1,14.9 +155,53,2,13.4,100.3,14.5 +156,37,2,13.5,84.4,16.8 +157,43,1,13.5,96.1,15.1 +158,52,1,13.5,97,14.4 +159,45,2,13.5,98,14.8 +160,39,2,13.5,99.1,14.5 +161,47,2,13.6,97,14.6 +162,26,2,13.7,85.7,17.1 +163,24,1,13.8,80.9,17.2 +164,38,2,13.8,93.3,15.3 +165,57,1,13.8,94,14.9 +166,42,2,13.8,103.4,14.4 +167,42,2,13.9,92.3,17.5 +168,52,1,13.9,95.5,15.1 +169,52,1,13.9,95.7,15.6 +170,57,2,13.9,97.2,15.3 +171,52,2,13.9,97.8,14.1 +172,52,2,13.9,97.9,15.5 +173,49,2,13.9,98.2,15 +174,58,2,14,96.6,15.4 +175,50,1,14,97.9,15.8 +176,39,2,14.1,93.7,15.5 +177,49,2,14.1,96.4,14 +178,50,2,14.1,97.1,14.8 +179,59,2,14.1,97.3,15.2 +180,52,2,14.1,102.4,15.6 +181,41,1,14.2,96.7,14.6 +182,53,1,14.2,97.7,15.1 +183,49,2,14.2,98.1,15.6 +184,35,2,14.3,89.8,16.5 +185,50,1,14.3,93.7,15.2 +186,41,1,14.4,94.8,15.8 +187,42,1,14.5,95.1,16.1 +188,58,1,14.5,104.9,13 +189,49,1,14.7,96.6,15.2 +190,52,2,14.7,96.7,15.4 +191,51,2,14.7,99.2,15.5 +192,49,1,14.7,99.6,16.4 +193,42,2,15,93.5,17.2 +194,28,2,15.1,91.5,16.4 +195,41,2,15.2,95.9,16.5 +196,53,1,15.3,95,16.6 +197,58,1,15.3,100.7,15.5 +198,48,1,15.3,103.5,14.3 +199,54,1,15.5,97.9,15.9 +200,58,1,15.5,101.3,16.6 +201,52,2,15.6,100,16.4 +202,50,1,15.7,99.6,15.3 +203,53,2,15.7,103.1,15.8 +204,43,1,15.8,91.1,17.9 +205,57,1,15.9,103.8,16.1 +206,55,2,16.3,95.4,16.9 +207,54,2,15.3,102,15.6 +208,44,1,16.3,96.2,17.3 +209,47,1,16.3,102,16.6 +210,57,1,16.3,108.4,13.8 +211,52,1,16.4,103.9,15.2 +212,52,2,16.6,97.8,14.4 +213,56,1,16.6,103.9,14.8 +214,55,1,16.7,106.3,15.4 +215,52,1,17,101.3,16.3 +216,50,1,17.3,101.8,16.8 +217,53,1,17.5,102.2,16.8 +218,42,1,17.7,100.9,14.5 +219,48,2,17.8,111.3,17.6 +220,53,1,17.9,98.7,17.1 221,50,1,18.1,106.4,16.6 \ No newline at end of file diff --git a/tests/testthat/data_files/CLUSTER/CLUSTER_INT1.rda b/tests/testthat/data_files/CLUSTER/CLUSTER_INT1.rda index 0a8e5b99..fe0557f5 100644 Binary files a/tests/testthat/data_files/CLUSTER/CLUSTER_INT1.rda and b/tests/testthat/data_files/CLUSTER/CLUSTER_INT1.rda differ diff --git a/tests/testthat/data_files/CLUSTER/CLUSTER_INT2.rda b/tests/testthat/data_files/CLUSTER/CLUSTER_INT2.rda index bc2291d2..4db6342e 100644 Binary files a/tests/testthat/data_files/CLUSTER/CLUSTER_INT2.rda and b/tests/testthat/data_files/CLUSTER/CLUSTER_INT2.rda differ diff --git a/tests/testthat/data_files/CLUSTER/CLUSTER_INT3.rda b/tests/testthat/data_files/CLUSTER/CLUSTER_INT3.rda index 36e59fc7..68dcf59e 100644 Binary files a/tests/testthat/data_files/CLUSTER/CLUSTER_INT3.rda and b/tests/testthat/data_files/CLUSTER/CLUSTER_INT3.rda differ diff --git a/tests/testthat/data_files/CLUSTER/CLUSTER_SLO3.rda b/tests/testthat/data_files/CLUSTER/CLUSTER_SLO3.rda index 38e54b23..abdf61c2 100644 Binary files a/tests/testthat/data_files/CLUSTER/CLUSTER_SLO3.rda and b/tests/testthat/data_files/CLUSTER/CLUSTER_SLO3.rda differ diff --git a/tests/testthat/data_files/GAMLSS/gamlss1.csv b/tests/testthat/data_files/GAMLSS/gamlss1.csv deleted file mode 100644 index 499668b8..00000000 --- a/tests/testthat/data_files/GAMLSS/gamlss1.csv +++ /dev/null @@ -1,608 +0,0 @@ -rowID,ID,e3_bw,hs_asthma,hs_zbmi_who,hs_correct_raven,hs_Gen_Tot,hs_bmi_c_cat,h_cohort,e3_sex_None,e3_yearbir_None,h_mbmi_None,hs_wgtgain_None,e3_gac_None,h_age_None,h_edumc_None,h_native_None,h_parity_None,hs_child_age_None,hs_c_height_None,hs_c_weight_None -1,1,4100,0,0.3,18,84,2,4,male,2008,25.51020432,17,41,28,2,2,0,6.165639973,1.22,23.4 -2,2,4158,0,0.41,25,39,2,4,male,2007,26.49150848,18,41,22.84155273,3,2,1,6.99247091,1.22,27.6 -3,3,4110,1,3.33,13,40,4,4,male,2008,30.11621284,11,39,34.23242188,3,2,1,6.110882957,1.28,37.5 -4,6,2900,1,-0.08,19,4,2,1,female,2007,24.90358162,30,38.8571434,27,3,2,0,6.384782113,1.13,21.5 -5,8,3580,1,-0.1,16,8,2,1,female,2008,28.14870262,20,40.57143021,34,2,0,0,6.338124572,1.225,22.5 -6,10,3780,1,1.75,32,1,3,1,female,2008,40.33377838,9,41,25,1,1,2,6.447638604,1.251,30.3 -7,11,4220,0,3.72,18,48,4,1,female,2008,32.0730629,10,40.7142868,31,3,0,1,6.436573123,1.293,41.6 -8,15,4210,1,2.5,27,28,4,4,male,2008,43.02771759,12,41.42856979,30.6748867,2,2,0,6.45847593,1.29,33 -9,16,2460,0,1.19,13,55,3,4,female,2008,28.72112083,10,36,36.03675842,3,2,2,6.3409765,1.27,28.2 -10,17,3510,0,-0.05,21,14,2,4,male,2008,17.90885544,10,39,29,3,2,1,6.524184349,1.16,20.5 -11,18,2800,0,-0.73,28,17,2,4,male,2008,41.95202255,9,37.57143021,32,2,2,1,6.171115674,1.139,18.7 -12,30,3730,0,1.02,29,6,3,4,male,2008,40.09489059,15,40,29.85799026,3,2,0,6.521674652,1.33,30.3 -13,33,3300,1,0.65,25,8.0625,2,6,male,2007,22.7583065,19,40.2857132,32.82308578,2,2,2,6.538101757,1.202,23.6 -14,40,3310,0,0.46,20,7.0625,2,6,female,2008,27.33991241,25,40.7142868,30.96850586,2,2,1,6.499771846,1.19,22.7 -15,45,2390,0,-0.64,19,29,2,6,male,2008,22.76943779,14,37,28.78302574,2,2,0,6.54072553,1.143,19 -16,46,3480,0,-1.25,16,22,2,1,female,2008,41.5544548,10,40,40,1,0,2,6.179329227,1.143,17.3 -17,48,3040,0,0.46,24,18,2,1,female,2007,38.62446213,13,41.57143021,31,2,0,1,6.726899384,1.184,20.8 -18,49,3050,0,-0.53,21,8.0625,2,6,male,2008,23.38435364,7,36.2857132,36.21247864,3,2,1,6.335500799,1.147,19.3 -19,52,3500,0,2.49,26,19,4,6,female,2008,23.62444749,10,39.2857132,40.19320679,2,2,2,6.836527493,1.265,27.6 -20,53,3420,0,0.37,23,24.4375,2,6,male,2008,19.43301392,20,40,29.35378075,3,2,0,6.036960986,1.096,19 -21,54,3400,0,1.08,13,29,3,6,female,2008,21.56454468,9,39.1428566,30.88439369,2,2,2,6.253251198,1.19,24.6 -22,58,2930,0,-0.89,23,20,2,4,female,2008,18.46722031,10,37.57143021,26.77739716,2,2,2,6.483230664,1.17,18.3 -23,59,3520,0,-0.66,21,27,2,4,male,2008,31.20256424,11,38,31.81963539,1,2,2,5.995893224,1.19,20.5 -24,61,3960,0,0.98,19,22,2,1,male,2007,25.42642784,13,40.7142868,26,1,2,1,6.368355008,1.172,23.1 -25,63,4388,0,1.24,25,11,3,4,female,2008,33.79246902,25,40,22.41392708,2,2,1,6.023385809,1.255,30.5 -26,64,3370,1,-0.61,18,78,2,4,female,2007,24.24242401,17,39,28.34155273,3,2,0,6.403718914,1.17,20.3 -27,65,3020,0,0.69,27,38,2,6,female,2008,18.2898941,22,39.42856979,26.82139587,2,2,0,6.283481634,1.13,22.7 -28,67,4210,0,3.19,32,55.5625,4,4,female,2008,33.02946091,8,41,36.24452209,3,2,2,7.685261237,1.316,39.4 -29,68,2920,0,-0.29,16,17.0625,2,1,male,2008,34.2935524,8,38.57143021,30,3,1,0,6.554300707,1.195,21.5 -30,70,3300,0,1.21,21,44,3,1,male,2008,34.22911072,3,38.8571434,23,2,2,0,6.767967146,1.25,33.1 -31,72,3030,0,-0.18,12,21.25,2,6,female,2007,17.50638962,25,40.2857132,29.61563683,2,2,1,6.863791923,1.124,19 -32,73,2928,0,0.18,23,9,2,4,male,2008,27.18090057,3,38,33.69794464,3,2,1,6.231234314,1.19,22 -33,75,3800,0,1.12,22,82,3,4,male,2008,36.2897377,0,38,30.58995438,2,2,2,6.201232033,1.273,24.9 -34,76,3600,0,1.88,21,82,3,4,male,2007,32.27078629,20,40,30.9506855,2,2,0,6.910335387,1.28,30.7 -35,77,3880,0,1.06,27,29,3,4,female,2008,40.33377838,8,40,22.95228386,3,2,0,6.015058179,1.22,25.5 -36,81,2970,1,1.88,18,35.375,3,6,male,2008,23.58832932,18,39.2857132,26.14776802,2,2,1,6.880333105,1.214,27.7 -37,85,3440,0,1.31,27,20,3,4,female,2007,26.21882057,5,37,31.18310547,3,2,2,6.135637691,1.25,28.1 -38,87,3220,0,2.96,26,44,4,4,female,2008,19.73396111,30,39,41.12990952,2,2,0,6.384782113,1.28,36.6 -39,90,2900,0,0.7,15,43,2,6,female,2007,22.83288002,10,38.42856979,27.13905144,2,0,0,6.343486197,1.193,24.1 -40,91,3320,1,-1.84,25,8,2,1,male,2008,27.53338432,12,40.1428566,29,1,0,2,6.650353639,1.152,17.6 -41,93,3590,0,-0.46,29,18,2,4,male,2008,19.59183693,13,40,29.11894989,3,2,0,6.026009582,1.2,23.6 -42,94,3770,0,-0.04,29,24,2,4,male,2008,22.59814072,29,39,31.98356247,3,2,0,6.499771846,1.31,26.3 -43,95,4010,0,1.83,25,32,3,6,male,2007,34.8825264,14,41,24.66010666,2,2,1,6.694045175,1.3,26.9 -44,97,2780,0,-0.67,25,10,2,1,female,2008,34.55707932,0,39.42856979,29,1,0,1,6.455966233,1.182,20 -45,98,3920,0,0.91,25,5,2,1,female,2007,31.15745163,20,39,23,1,2,2,6.926762491,1.268,27.45 -46,99,3840,0,-0.8,26,63,2,4,male,2008,31.99217224,8,39,35.22967911,2,2,2,6.483344741,1.18,19.4 -47,101,3650,0,-1.29,24,31,2,6,female,2007,20.390625,27,40,28.33553886,2,2,0,6.767967146,1.212,30 -48,102,3800,0,0.51,23,19,2,4,male,2008,28.06642342,21,40,25.40296745,3,2,0,6.929500342,1.29,27 -49,103,4100,1,-0.08,15,7,2,1,female,2007,24.81843948,26,41.1428566,26,1,2,1,6.770590919,1.093,18.2 -50,104,3913,0,-0.01,21,69.5,2,4,female,2008,34.54287338,20,40,26.73241997,3,2,0,6.266940452,1.24,23.5 -51,105,3620,0,0.74,26,19,2,4,male,2007,32.28305817,26,40,35,3,2,0,6.135637691,1.25,25.6 -52,107,2780,0,-0.32,15,12,2,6,male,2008,26.171875,10,37.2857132,24.61968613,2,2,2,6.338010495,1.186,21 -53,108,3890,0,-0.31,17,7.0625,2,6,male,2007,22.37567902,20,39,31.79055405,3,2,1,7.510038786,1.255,23.9 -54,114,2760,0,0.11,25,16,2,1,female,2007,21.98950577,5,39.7142868,22,1,2,2,6.965092402,1.181,18.3 -55,115,4090,0,0.96,29,72,2,4,female,2008,51.42332458,20,40,22.34703255,2,2,1,6.52966005,1.27,27.5 -56,118,2540,0,-1.07,14,14,2,1,male,2007,24.88187981,12,39.42856979,25,1,0,0,6.655829341,1.184,23.5 -57,119,3530,0,-1.06,33,19.23529434,2,6,male,2008,20.17325211,11,38.7142868,32.28359604,3,2,1,6.417408168,1.234,20.6 -58,127,3180,0,2.63,17,15,4,6,female,2008,27.85200882,30,38,28.97589111,2,2,1,6.406684919,1.28,34.8 -59,130,3908,0,0.02,25,17,2,4,male,2008,25,8,40,26.94406319,3,2,0,6.028747433,1.2,22 -60,132,3540,0,0.11,22,0,2,1,male,2008,24.35390472,10,38.7142868,36,2,0,1,6.603696099,1.188,22 -61,134,2440,0,-0.25,20,20.1875,2,1,female,2008,26.5339241,10,38.2857132,35,1,0,1,6.661305042,1.142,19.5 -62,136,3504,0,-0.07,23,26.25,2,1,female,2008,25.08896065,8,41.42856979,23,1,0,0,6.475131189,1.114,18.9 -63,138,3750,0,0.85,30,15,2,1,male,2008,36.87037277,8,40.42856979,36,2,2,1,6.250513347,1.188,23.4 -64,139,3560,0,-1.19,21,21,2,1,female,2008,27.65864944,7,40.7142868,26,2,0,1,6.335500799,1.193,19.4 -65,140,4022,0,1.27,23,38,3,4,male,2008,27.77777863,30,41,32.74177933,3,2,0,6.023271732,1.21,25.7 -66,142,3150,0,2.83,29,26,4,6,female,2008,25.31545448,20,38.57143021,38.91729355,3,2,0,6.636664385,1.241,32 -67,143,2920,1,1.1,12,2,3,1,male,2008,24.47268867,10,39,35,1,2,1,6.425849875,1.228,25.7 -68,147,2960,0,1.38,20,36,3,6,female,2008,35.62901688,25,40,20.79236031,2,2,0,6.25039927,1.171,24.5 -69,148,3834,0,0.46,15,56,2,4,male,2008,25.63691711,0,40,35,2,2,2,6.088980151,1.15,21.1 -70,150,3120,0,1.41,15,15,3,6,female,2007,22.7583065,17,37.7142868,37.01412201,2,2,1,6.382044262,1.17,25.8 -71,156,3555,0,0.21,16,41,2,1,female,2008,29.43868828,20,41.42856979,26,3,0,0,6.373716632,1.26,24.8 -72,157,3110,0,0.75,24,11,2,1,male,2008,34.22911072,9.5,39.7142868,29,2,0,2,6.387519963,1.24,22.6 -73,158,3870,0,0.26,29,24,2,6,female,2007,22.22222137,16,40.42856979,24.99647903,2,2,2,6.428359571,1.169,21.5 -74,159,3900,0,1.95,24,11,3,1,male,2007,28.73539543,6,39.7142868,26,1,0,1,6.825462012,1.175,26.8 -75,163,4061,0,-0.29,16,44,2,4,male,2007,30.29263878,21,41.1428566,26.21986389,2,2,1,7.394934976,1.23,23 -76,167,2530,0,-1.1,23,33,2,6,female,2008,18.90359116,11,35.42856979,32.82308578,3,2,1,6.439425051,1.194,19.6 -77,169,3340,0,-0.09,29,11,2,1,female,2008,28.73681259,20,39,30,3,0,1,6.299680584,1.166,20.6 -78,172,3200,0,1.49,16,45,3,6,male,2007,21.71924973,8,37.57143021,32.32178116,2,2,1,6.863791923,1.238,23.9 -79,174,3480,0,3.23,17,31,4,6,female,2008,21.09375,20,39,31.62312698,2,2,1,6.168377823,1.15,30.4 -80,176,3392,0,-0.74,25,13,2,4,female,2007,22.83736992,10,40,30.48082161,3,2,1,7.414099932,1.25,22.8 -81,177,3040,1,-0.07,31,37,2,1,male,2007,40.09489059,6,38.1428566,27,3,1,1,7.321127082,1.254,24.1 -82,182,3520,0,0.44,13,43,2,1,male,2007,23.96785355,10,41.8571434,36,3,1,0,6.710472279,1.277,30.3 -83,183,3060,0,1.03,15,39,3,6,male,2008,26.33288875,10,36.1428566,30.28965187,3,2,0,6.603810176,1.187,23.9 -84,184,4220,0,-0.23,20,6,2,1,male,2007,34.04298401,9,41.7142868,33,3,0,1,6.778918549,1.175,21.7 -85,185,3140,0,-1.23,17,5,2,1,female,2008,32.69710922,6,39.42856979,28,1,0,1,6.417636322,1.211,20 -86,189,3250,0,0.8,16,23,2,6,male,2008,41.95202255,6,41.1428566,23.84028244,2,2,1,6.488706366,1.163,22.4 -87,190,3978,0,-1.58,24,27,2,4,male,2007,26.12244987,12,41,30.87990952,2,2,1,6.880219028,1.09,22.2 -88,191,2550,0,0.06,23,44,2,4,female,2008,25.9695282,16,40,32.28401947,3,2,1,6.288843258,1.14,21.5 -89,194,3400,0,-0.92,16,5.125,2,6,male,2008,24.67702103,16,39,32.98178101,2,2,0,6.450490532,1.192,20.2 -90,196,2920,0,-1.43,15,63,2,1,male,2007,32.07591248,20,39.1428566,26,1,2,2,6.778918549,1.147,25.9 -91,197,3310,0,-1.15,15,14,2,6,female,2008,24.21875,12,37.42856979,27.63716888,2,2,2,6.707848506,1.159,18.4 -92,198,3760,0,-0.57,17,18,2,1,male,2008,23.87543297,10,40.1428566,35,1,2,0,6.99247091,1.255,24.1 -93,199,3720,0,2.96,30,22.25,4,4,female,2007,27.88518715,15,41.8571434,32.15058136,3,2,2,7.589436459,1.3,35.4 -94,200,3170,0,1,30,48.5,3,6,female,2008,22.83288002,10,39,40.97868729,2,0,1,6.565480265,1.273,29.1 -95,203,3550,0,0.53,21,19,2,6,male,2007,37.37024307,10,38.42856979,35.92881775,3,1,2,6.532511978,1.14,21.8 -96,204,3530,0,4.06,13,45,4,6,male,2007,22.48132896,7,38,35.61669922,3,2,2,6.872005476,1.247,36.6 -97,206,3940,1,2.31,33,14,4,1,male,2008,33.60102081,10,38.57143021,34,3,1,2,6.368355008,1.202,28.1 -98,207,2820,0,0.46,27,22,2,6,female,2008,24.609375,10,36.7142868,31.029356,2,2,1,5.921971253,1.179,22.5 -99,211,3374,0,0.16,20,40,2,1,female,2008,31.72255135,8,39.2857132,22,1,2,0,6.447752681,1.15,20.6 -100,218,2995,0,0.68,18,32,2,4,female,2008,34.2935524,10,39,33.18036652,1,2,1,6.699634953,1.18,19.5 -101,219,3834,0,0.93,26,25,2,4,female,2007,29.00059509,18,40,22,3,2,1,6.822610084,1.09,20.3 -102,220,2850,1,0.3,13,2,2,6,male,2007,25.46198082,7,38.42856979,27.1946907,2,2,1,6.877481177,1.203,23 -103,223,3220,0,0.46,26,11,2,6,male,2007,26.72287178,10,37.8571434,32.24882889,3,2,1,6.819986311,1.254,25.3 -104,224,3900,0,0.35,24,54,2,4,male,2007,28.39506149,20,40,28.61621094,3,2,0,7.184120465,1.3,27.1 -105,225,4080,0,2.62,25,45,4,4,female,2008,38.88888931,40,38,25.39474869,2,2,0,6.233972165,1.3,35.7 -106,226,3460,0,0.71,20,21.125,2,6,female,2008,38.28125,10,38.42856979,25.12384987,2,2,2,6.023271732,1.172,22.7 -107,228,3120,1,0.36,20,82,2,4,female,2008,24.22145329,9,38,29.01643753,2,2,0,6.233972165,1.19,22.4 -108,229,2900,0,1.38,18,15,3,1,female,2008,32.48854446,20,39.57143021,35,1,0,2,6.423112024,1.2,25.8 -109,230,3398,0,-0.08,23,55,2,4,male,2008,25.07619286,17,39,30.79657555,2,2,2,6.485968515,1.21,22.3 -110,231,3420,0,-1.43,24,65,2,4,male,2008,29.74419975,19,40,28.53127861,3,2,0,6.184804928,1.09,16.2 -111,233,3516,0,1.35,13,51,3,4,male,2008,30.48780441,24,40,28.37009048,3,2,1,6.247661419,1.26,25.5 -112,234,3540,0,0.8,24,18,2,1,male,2008,29.00059509,5,40.1428566,35,1,0,2,6.384782113,1.212,24.3 -113,239,3340,1,0.89,23,63,2,4,female,2008,32.11195374,28,39,34.81415558,3,2,2,7.011635866,1.23,25.8 -114,241,2120,0,-1.6,21,34,2,1,male,2008,19.69449806,9,39.1428566,24.22328758,1,0,2,6.606433949,1.119,16.9 -115,242,2680,1,-1.08,17,38,2,1,female,2007,24.64775085,15,40.42856979,33,1,0,2,6.973305955,1.176,19.45 -116,243,2863,0,-0.71,27,0,2,4,female,2008,26.5625,17,40,28.60525131,3,2,1,6.332648871,1.13,18.2 -117,244,3730,1,-1.26,23,26,2,6,male,2008,18.27812195,17,40.2857132,35.22711182,2,2,0,6.080766598,1.184,17.9 -118,246,3150,0,-0.51,20,3,2,6,male,2007,21.38593674,17,40.1428566,26.36136627,2,2,0,6.359913301,1.24,22.6 -119,247,3630,0,4.72,21,50,4,6,male,2007,22.37567902,17,40,17.02313995,2,2,0,6.59810632,1.268,40.7 -120,252,3290,0,0.95,19,21,2,6,male,2008,24.60973358,20,40.2857132,36.29733276,2,2,2,6.253251198,1.14,22.1 -121,255,2450,0,0.23,24,36,2,4,male,2007,38.89807129,13,40,29.96986389,2,2,0,6.970568104,1.29,26.3 -122,256,3180,0,-1.05,18,8.0625,2,1,male,2008,41.5544548,5,39.42856979,24,2,0,1,6.56251426,1.222,21 -123,257,4040,0,2.95,32,68,4,1,female,2008,25.52800751,20,40.57143021,28,3,1,0,7.02532512,1.244,35.8 -124,258,2780,0,-1.53,25,33,2,6,female,2007,26.42357063,4,39.2857132,28.49256516,2,2,1,6.510609172,1.17,18.1 -125,259,2860,0,3.33,20,67.625,4,6,female,2008,36.36363602,8,39,42.31311417,1,2,1,6.275268081,1.23,37.6 -126,260,2290,0,0.05,24,18,2,6,female,2007,22.86253357,9,38.1428566,30.92778015,3,2,0,6.858202145,1.177,21.5 -127,261,3320,0,-0.1,13,35,2,1,female,2007,28.18372345,0,40.1428566,33.80925369,3,1,2,6.907597536,1.12,19.1 -128,262,3470,0,1.42,24,66,3,6,male,2008,30.29263878,12,37,26.73112106,2,2,1,6.463951631,1.263,28.1 -129,265,2600,0,-2.48,20,23,1,4,female,2008,24.16716194,0,40,38.36894989,2,0,2,6.283481634,1.21,18.2 -130,267,3504,0,-0.13,20,7,2,1,female,2008,24.88436317,10,41.57143021,35,3,2,0,6.406456765,1.182,21.05 -131,269,3964,0,0.76,29,14.1875,2,4,female,2007,29.70041275,10,41,31.46712303,3,2,1,7.323864933,1.28,28.6 -132,271,3630,0,0.16,20,12,2,4,male,2009,23.66143799,13,40,28.75,3,2,1,6.108145106,1.19,22 -133,274,3100,0,0.05,19,12,2,4,female,2008,19.56295586,8,38,30.87200546,2,2,2,6.223134839,1.1,18.6 -134,276,2890,0,-0.64,20,9,2,4,male,2008,27.75510204,9,37,24.76369858,2,2,0,6.694045175,1.12,18.3 -135,278,3700,0,-0.48,29,5,2,1,female,2008,26.69395638,19,41.8571434,32,1,2,0,6.661305042,1.225,23.6 -136,281,3330,0,0.89,25,10,2,6,female,2007,26.83864784,17,37.2857132,24.91326332,2,2,1,6.488592288,1.194,24.1 -137,286,3630,0,0.47,22,26,2,4,male,2007,28.62879181,20,39,24.76369858,1,2,0,7.742756103,1.29,41.6 -138,287,3100,1,0.35,22,39,2,1,female,2007,28.73539543,5,39,27,2,1,2,6.80618298,1.19,22.6 -139,288,3910,0,0.93,16,50.4375,2,4,male,2008,40.13878632,10,39,24.80669594,3,2,0,6.083504449,1.2,24.8 -140,289,3207,0,0.81,25,43,2,4,female,2007,30.48780441,10,41,28.5,3,2,0,6.499657769,1.27,30.3 -141,291,3790,0,-0.85,22,23,2,4,male,2008,23.32341766,11,40,26.2746582,3,2,0,6.206707734,1.21,22.2 -142,293,2420,0,-1.3,17,29.3125,2,1,male,2007,28.52065659,8,39.8571434,22,1,0,0,6.466689482,1.248,21.6 -143,296,3080,0,-0.89,12,20,2,1,female,2008,25.07812309,9,39.1428566,32.78110504,1,0,2,6.746064339,1.135,18.1 -144,304,3722,0,1.56,27,39,3,4,female,2007,24.09296989,17,38.57143021,36.29109573,2,2,2,6.77332877,1.3,31 -145,307,3460,0,-0.62,26,15,2,1,male,2008,23.75622368,10,40.8571434,17,1,0,0,6.395505362,1.179,19.1 -146,308,3460,0,-0.33,19,18,2,6,female,2007,18.68512154,10,39,28.38603783,2,2,0,6.464065708,1.241,22.8 -147,312,3510,0,1.19,22,13,3,1,female,2008,25.13384819,20,39.8571434,24,1,1,2,6.718685832,1.22,26.2 -148,313,4006,0,0.94,25,9,2,4,male,2007,24.609375,13,38,25.71712303,3,2,0,6.497033995,1.22,25 -149,314,3280,0,-0.21,28,7,2,1,female,2008,25.83829308,7,40.7142868,29,3,2,0,6.302418435,1.226,22.5 -150,315,3120,0,2.35,19,18,4,1,female,2007,33.21972275,20,41,32,1,0,2,6.710472279,1.245,32 -151,318,3640,0,-0.06,24,12,2,4,male,2007,25.95155716,30,40,29.78013611,3,0,1,6.778918549,1.26,23.1 -152,320,2830,0,0.36,13,48,2,6,female,2008,24.99890327,6,36.2857132,32.42616272,2,2,0,6.680469998,1.239,23.9 -153,322,3660,0,-0.34,23,2,2,4,female,2007,26.44628143,12,38,25.98789978,3,2,0,6.757015743,1.19,21 -154,324,3134,1,1.34,21,9,3,4,female,2008,39.78286743,10,39,29.37713814,3,2,0,6.154802647,1.16,24.3 -155,326,3280,0,-1.44,22,31.1875,2,6,male,2008,24.30461693,9,39,35.74426651,3,1,1,6.529774127,1.149,18 -156,328,3492,0,1.24,24,33.3125,3,4,male,2007,25.46938705,10,40,28.83059311,3,2,2,7.394934976,1.26,28 -157,329,3220,0,-0.68,15,55,2,1,female,2007,24.84375,20,40.1428566,33,1,2,2,6.688455396,1.164,20 -158,331,3360,0,0.11,13,14,2,1,female,2008,24.4850502,15,41.8571434,35,2,2,0,6.485968515,1.149,20.5 -159,335,1780,0,-0.1,31,4,2,4,female,2008,26.72992706,20,34,28.35525131,1,2,2,6.357289528,1.21,22.4 -160,337,2980,0,0.26,25,28.4375,2,1,female,2008,28.52065659,13,38.7142868,38,3,2,1,6.480492813,1.163,21.3 -161,340,3534,0,1.05,11,55,3,4,male,2009,35.62901688,12,40,26.75273895,3,2,0,6.105407255,1.21,24.7 -162,342,3000,0,-0.08,32,8,2,4,male,2008,18.80920601,12,39,28.86894989,2,0,0,7.460643395,1.24,23.8 -163,343,3622,0,0.87,29,9,2,4,male,2008,27.68166161,20,40,26.68036461,2,2,0,7.759183208,1.295,28 -164,345,3280,0,1.14,16,31,3,1,male,2008,24.68066025,9,41.7142868,18,3,2,0,6.507757244,1.225,25.7 -165,351,4080,0,2.69,26,59,4,4,female,2008,23.12062454,8,40,23.72808266,3,2,0,6.313597992,1.26,34 -166,353,3630,0,-0.6,22,22,2,4,female,2008,28.06642342,13,40.57143021,30.63869858,3,2,0,6.212069359,1.25,22.5 -167,360,2760,0,-0.38,22,24,2,6,male,2007,23.51020432,12,36.1428566,32.80838013,2,1,0,6.05338809,1.179,20.7 -168,361,3140,0,3.05,19,30,4,1,male,2008,23.61296272,5,41,28.44353104,3,0,1,6.543577458,1.202,34.2 -169,363,3480,0,0.39,21,14.1875,2,6,male,2008,19.140625,10,39.8571434,30.98108292,2,2,0,6.387519963,1.189,20.2 -170,367,3590,0,1.35,20,64,3,1,female,2008,33.04758835,20,41.7142868,37,3,2,2,6.661305042,1.27,28.4 -171,372,3620,0,-0.13,16,40,2,4,female,2008,24.80158806,16,40,33.32446289,3,2,1,5.508555784,1.06,17.5 -172,373,3020,0,-1.04,21,5.0625,2,6,female,2008,22.49135017,17,38.42856979,26.04118729,3,2,1,6.294433037,1.245,21.9 -173,374,3240,0,0.85,25,8,2,1,female,2007,28.6964016,16,41.1428566,33,1,2,0,6.792607803,1.266,27.1 -174,376,2770,1,-0.34,25,37,2,1,male,2007,28.31095695,8,37,27.06365585,2,2,1,6.346224047,1.21,21.95 -175,380,3940,0,0.23,20,5,2,1,male,2007,33.31339645,5,40.2857132,27,2,0,0,7.069130732,1.254,24.9 -176,381,3600,0,1.01,23,21,3,4,female,2008,21.67125893,11,40,36.32237625,3,2,0,6.568218115,1.33,30.2 -177,386,3760,0,1.23,15,28,3,6,female,2008,26.42356982,14,40,32.80160904,2,2,2,6.083504449,1.2,25.4 -178,387,3400,0,0.1,33,22,2,6,female,2008,25.31545448,8,39,27.42778969,3,0,1,6.436573123,1.211,22.7 -179,391,3880,0,-0.49,19,39,2,6,female,2007,23.33768463,23,41,35.24220657,2,2,0,6.450262377,1.153,21.8 -180,392,2960,1,2.28,18,55,4,6,male,2008,29.06060791,23,36,30.32819557,2,2,1,6.338010495,1.265,30.8 -181,393,3500,0,-1.69,21,15,2,6,female,2007,26.17519379,18,39,25.21013069,3,2,0,6.357175451,1.21,19.2 -182,397,1802,0,1.03,12,28,3,4,female,2008,23.83673477,9,34,36.86347198,2,2,2,6.124458134,1.13,21.5 -183,399,3000,0,-0.01,17,4,2,1,male,2008,27.57497025,19,37.7142868,22,1,1,2,6.565480265,1.204,20.2 -184,406,3380,1,-0.71,15,68,2,1,female,2008,38.89807129,20,40.2857132,38,3,0,2,6.113506731,1.183,18.8 -185,408,3960,0,0.96,20,32,2,4,male,2008,32.32653046,16,40,29,3,2,1,6.822724162,1.3,28.6 -186,409,3886,0,1,20,39,3,4,male,2008,25.390625,12,39,24.68584442,3,2,0,6.453228382,1.16,18.6 -187,410,4640,0,3.14,25,32.125,4,1,male,2007,36.80844879,10,41.7142868,22,1,2,0,6.3544376,1.187,30 -188,414,2610,0,-0.32,21,27,2,1,male,2008,27.30448723,20,38.1428566,38,1,0,2,6.154688569,1.178,20.7 -189,415,3820,0,0,25,46,2,4,male,2008,27.77777863,8,39.7142868,25.05867577,3,2,0,6.29431896,1.24,23.6 -190,419,3370,0,0.51,26,20,2,6,male,2008,23.66524506,10,37.42856979,31.03627586,3,2,1,6.373602555,1.188,22.7 -191,420,3170,1,-1.05,29,11,2,4,female,2008,21.63331604,8,39,31.79771614,3,2,0,6.154802647,1.17,18.9 -192,421,4160,1,1.54,24,18,3,1,male,2008,29.02356911,12,40.7142868,26,3,2,0,6.324549395,1.179,24.7 -193,425,1100,0,-1.97,15,10,2,1,female,2008,21.4421463,9,28,33.57973862,1,0,2,6.806297057,1.21,24.9 -194,426,3120,0,-0.01,16,68,2,1,female,2008,20.40650749,4,38.57143021,25,3,0,1,6.116358658,1.143,20 -195,427,3380,0,0.36,28,0,2,6,female,2007,18.64534378,13.5,42.1428566,25.32919884,3,2,0,6.80892083,1.258,25 -196,429,2540,0,-0.71,16,5.125,2,1,female,2007,35.41632843,5,35.8571434,22.37371635,3,2,0,6.704996578,1.135,18.4 -197,430,3680,1,-0.31,17,12,2,1,male,2007,26.39204025,8,40,29,3,2,2,7.430641113,1.316,25.9 -198,432,2860,0,-0.7,22,20.1875,2,6,female,2008,19.36247253,10,37.8571434,31.12529564,2,2,2,6.833789642,1.182,20 -199,433,4230,1,3.56,21,26.375,4,4,male,2008,31.09789085,20,41,38.59703064,2,2,2,6.338010495,1.23,33 -200,434,3900,0,0.33,19,2,2,1,male,2008,18.84182739,8,40.57143021,20,1,2,2,6.836527493,1.15,20.95 -201,436,3590,0,2.45,30,14,4,4,male,2008,34.60207748,28,39,24.77739716,3,2,0,6.850102669,1.28,28.3 -202,437,2810,1,2.89,13,49.22222137,4,6,male,2008,23.87511444,12,38,25.84220314,2,2,1,6.01779603,1.202,26.6 -203,438,2820,0,1.22,20,47,3,4,male,2007,23.73323822,16,40,24.04771614,3,0,0,6.400981063,1.18,24 -204,440,3120,0,0.78,16,9,2,1,female,2008,28.63357162,10,39.2857132,35,3,2,1,6.316335843,1.144,21.8 -205,445,1920,0,-1.11,16,33,2,4,male,2008,21.25850296,12,32.42856979,31.72260284,3,2,2,6.231234314,1.12,17.5 -206,446,3270,0,-0.96,24,39.375,2,4,female,2008,25.14860535,11,37,25.28949738,3,2,0,6.401209217,1.14,18.1 -207,447,2900,0,1.15,21,44,3,1,female,2008,26.76621437,5,37.42856979,28,3,1,0,6.382044262,1.184,24.4 -208,449,2540,0,-0.94,25,8,2,4,female,2008,22.65625,11,40,32.36139679,2,2,2,6.318959617,1.17,18.8 -209,454,2900,0,-0.39,27,41,2,4,female,2008,24.60973358,14,37,28.2546196,3,2,1,6.694159252,1.22,22 -210,455,2720,0,-0.29,16,29,2,6,female,2007,23.30668005,15,38,30,3,2,0,6.984257358,1.181,30 -211,457,4340,0,-0.56,27,37,2,1,male,2008,19.96287727,8,40.1428566,22,2,0,1,6.809148985,1.23,21.4 -212,464,2900,0,-0.01,18,16,2,1,female,2008,21.78249931,8,39.42856979,30,1,0,0,6.691307324,1.23,23.2 -213,465,3550,0,-0.13,27,5,2,4,male,2008,26.67487526,9,41,23.01484108,3,2,0,6.127310062,1.18,21.1 -214,466,3570,0,1.63,17,12,3,6,female,2008,19.10009193,27,39.2857132,31.29330254,2,2,1,6.094455852,1.184,24.8 -215,472,3490,0,-0.91,22,9,2,4,male,2009,22.79032898,14,41,30.01917839,3,2,1,6.127310062,1.143,19.1 -216,474,3080,0,-0.21,15,23,2,1,male,2008,33.7492981,3.5,41,29,2,2,0,6.603582021,1.115,18.8 -217,475,2760,0,1.63,25,82,3,1,female,2007,30.81958771,12,38.8571434,20,1,1,0,6.874743326,1.28,30.6 -218,483,3770,0,0.31,21,65.04285431,2,6,female,2008,21.90758324,20,40.1428566,33.80925369,3,2,1,6.485854438,1.2,22.8 -219,484,2530,0,3.84,13,74.22222137,4,6,male,2007,18.37682515,10,35.1428566,29.10736847,2,2,0,6.351699749,1.245,35.5 -220,486,2920,0,-2.55,18,9,1,1,female,2007,20.75489426,9,38.57143021,30,3,1,1,6.819986311,1.193,17.3 -221,488,2460,0,-0.37,9,133,2,1,male,2008,20.87976646,10,35,31,2,1,1,6.319073694,1.226,22.35 -222,489,3030,0,-1.63,19,59.93333435,2,6,male,2008,19.38214493,13,40.1428566,33.03614044,3,2,1,6.713324207,1.218,20 -223,491,3000,0,0.08,13,53.75,2,6,female,2008,19.59645844,9,38,29.30440521,2,2,0,5.445471138,1.236,23.6 -224,494,3400,0,1.59,10,28,3,6,female,2007,24.77679443,12,38.7142868,29.79515648,2,2,1,6.384553958,1.182,25.2 -225,495,2610,1,0.88,20,37,2,4,male,2007,20.44913673,16,40,30.97558784,2,2,0,6.486082592,1.217,24.1 -226,496,3660,0,0.16,18,39.5,2,6,male,2008,21.09619141,17,40,30.6365509,3,2,0,6.299680584,1.205,22.6 -227,498,3320,0,0.96,32,17,2,6,male,2007,27.18090057,16,38.2857132,31.20972061,3,2,0,6.663814739,1.224,25.3 -228,500,2900,0,-0.6,13,48.3125,2,6,female,2008,20.07960129,23,39.1428566,26.06321335,2,2,0,6.313483915,1.108,17.7 -229,502,2840,0,1.25,18,11,3,1,female,2007,32.12889099,8,41.2857132,37.39082718,1,0,2,6.395733516,1.235,26.9 -230,503,3860,0,0.87,15,20,2,1,male,2008,29.50003052,9,39.7142868,26,2,0,2,6.516084873,1.177,23.5 -231,504,3740,0,0.11,22,75,2,1,male,2008,37.14358139,9,40.42856979,28.09703255,3,2,0,6.485968515,1.123,19.55 -232,505,3050,0,0.32,12,7.125,2,6,female,2008,21.93634796,10,39,30.99436188,2,2,1,6.401209217,1.209,23.1 -233,508,3990,0,0.85,28,26,2,4,female,2008,25,20,39,28.91392708,2,2,2,6.387519963,1.27,23 -234,511,3910,1,-0.17,22,22,2,4,male,2009,29.74580765,25,39,28.40570831,3,2,1,6.072553046,1.143,21.9 -235,512,2710,0,1.68,12,25,3,6,female,2009,21.87755013,25,38.1428566,35,3,2,1,6.480492813,1.212,27.4 -236,513,3440,0,0.94,14,8,2,1,male,2008,23.87030411,8,38.57143021,29,1,0,2,6.707734428,1.169,23 -237,514,3870,0,-0.39,16,38,2,6,male,2008,18.37682515,20,38.8571434,24.22328758,2,2,2,6.98973306,1.232,22.7 -238,519,3760,0,0.12,14,83,2,1,female,2007,18.84182739,12,40.57143021,29.01026726,1,2,0,6.767967146,1.144,23 -239,520,3140,0,-0.82,15,25,2,6,female,2008,22.91303253,10,37.57143021,37.66019058,3,2,1,6.288843258,1.167,19.5 -240,521,3504,0,-0.92,20,17,2,4,female,2008,24.38652611,11,41,24.28013611,2,2,1,6.058977869,1.169,18.8 -241,523,3343,0,1.42,26,31,3,4,female,2008,27.47252655,22,40,34.89200974,3,2,2,6.127310062,1.25,28 -242,527,3500,1,-0.43,22,6,2,1,male,2008,32.16893005,5,38.1428566,36,3,2,2,6.401209217,1.196,21.2 -243,528,3020,0,0.75,30,25,2,4,male,2007,27.7767067,15,39,23.31963539,3,2,0,6.770704997,1.297,23.6 -244,529,3070,0,-0.51,13,55,2,4,male,2008,20.82094002,10,40.7142868,27.1567421,3,2,1,6.12183436,1.15,20.2 -245,530,3560,0,1.61,21,40,3,6,female,2008,21.09375,35,40,30.63869858,2,2,0,6.119096509,1.21,22.6 -246,533,3740,1,0.75,20,19,2,1,female,2008,26.76494408,9,40.7142868,27.86525726,1,2,1,6.447752681,1.166,22.6 -247,534,4260,0,0.69,29,20,2,4,male,2008,28.93507385,20,40,20.12168884,3,2,0,7.019849418,1.28,27.1 -248,535,3220,0,-0.06,20,14,2,1,male,2008,22.07939529,5,39.57143021,20,1,2,0,6.658453114,1.184,21 -249,539,3210,0,-1.29,16,2,2,6,female,2008,22.98539734,16,38,27.9222374,2,2,1,7.063655031,1.197,23.6 -250,540,2360,0,1.97,16,0,3,1,female,2009,36.68451691,5,37,26,2,0,2,6.299794661,1.182,26.95 -251,542,4120,0,0.69,24,8,2,1,male,2008,22.07939529,20,39.57143021,28,3,2,1,6.455966233,1.187,24.2 -252,545,3180,1,-0.89,20,23,2,1,male,2008,24.53562546,10,39,39,1,2,0,6.529774127,1.239,21.9 -253,546,2900,0,-1.44,28,25.25,2,6,female,2007,32.69054031,12,40,28.0834465,2,2,0,6.360027379,1.25,21 -254,547,3260,0,1.58,22,38.0625,3,6,male,2008,32.69054031,8,38.1428566,27.95060539,2,2,0,7.077230208,1.321,31.7 -255,552,3632,0,1.01,19,84,3,4,female,2008,31.58861351,20,40,26.550457,1,2,2,6.151836642,1.19,23.8 -256,555,3370,0,-1.4,22,48,2,4,male,2008,30.10211945,14,39,24.61187172,2,2,0,6.102669405,1.24,21 -257,556,3030,0,-0.56,21,49,2,4,female,2008,23.87511444,9,39,28.86894989,3,2,0,6.841889117,1.25,22.6 -258,557,3963,0,-0.58,22,75.5625,2,4,male,2008,20.87976646,18,40,30.31415558,3,2,0,6.067191421,1.18,20.3 -259,558,3210,0,-1.48,19,40,2,4,male,2008,20.19557762,12,40,34.86347198,3,2,2,6.338124572,1.21,19.9 -260,559,3823,0,1.3,21,24,3,4,male,2007,31.72255135,23,40,29.41118813,2,2,2,6.934976044,1.26,27.9 -261,561,3010,0,0.72,25,26.25,2,6,female,2008,25.07619286,18,37.2857132,28,3,2,1,6.524184349,1.278,27.2 -262,562,3134,0,2.06,23,7,4,4,female,2007,21.96712112,8,39,28.3449688,3,2,0,6.045174538,1.3,32.8 -263,564,2920,0,0.43,22,38,2,1,female,2007,24.20601654,18,39.7142868,30.44348717,2,2,1,6.932238193,1.105,19.7 -264,565,3419,0,1.44,19,99,3,4,male,2009,29.41073418,20,37.8571434,28.58589935,2,2,0,6.110882957,1.228,24.4 -265,566,3520,0,-1.7,22,24,2,4,male,2008,19.91836739,11,38.42856979,36.01917648,3,2,1,5.749372576,1.2,19 -266,569,3680,0,-0.02,24,9,2,1,male,2008,38.02388,9,41,28,3,2,0,6.346452202,1.241,23.6 -267,570,4050,0,0.75,16,54.1875,2,6,male,2007,24.9107666,15,37.1428566,29.11704254,2,2,2,6.346224047,1.205,22.2 -268,572,3000,0,-0.38,24,5.0625,2,6,female,2008,19.84127045,13,38.57143021,36.39638138,2,2,2,6.962354552,1.254,23.2 -269,573,2321,0,0.8,20,24,2,4,female,2008,36.80572128,18,41.7142868,36,3,2,0,6.162902122,1.21,22.2 -270,575,3290,0,1.04,13,18,3,1,male,2008,31.09789085,15,38.57143021,31,2,0,2,6.387519963,1.22,25.2 -271,577,3540,0,1.25,27,27.25,3,6,female,2007,20.81165504,15,39,22,2,2,1,7.175792836,1.27,24.7 -272,578,3360,0,-0.05,23,25,2,4,female,2008,25.15589523,15,40,24.61187172,3,2,0,6.203969884,1.16,19.6 -273,582,3950,0,1.65,22,41,3,4,female,2008,35.15625,22,40,35.64086914,2,2,1,5.623545517,1.26,29 -274,586,3100,0,-0.17,19,11,2,1,male,2007,22.99427986,9,40.8571434,16,1,2,0,6.595368469,1.097,18.25 -275,588,2800,1,0.81,18,7,2,1,male,2007,20.93663979,0,40.7142868,25,2,0,0,6.863791923,1.33,29.5 -276,589,2960,0,-1.21,15,13,2,1,male,2008,22.17302895,13,39,24,2,1,0,6.56251426,1.242,21.45 -277,592,3962,0,-0.75,25,38,2,4,female,2008,25.46938705,18,41,24,3,2,0,7.195071869,1.26,22.7 -278,593,3395,0,-1.09,20,27,2,6,male,2008,18.36547291,17,39,30.44348717,2,2,1,6.039698836,1.18,19.4 -279,594,3480,0,0.39,22,3,2,1,female,2008,27.48503113,5,41.57143021,17,1,0,0,6.516084873,1.18,22.9 -280,597,3527,0,0.19,21,41,2,4,male,2008,20.390625,11,41.8571434,24,1,2,0,5.995893224,1.31,26.7 -281,601,2970,0,-2.35,19,21,1,4,female,2007,18.96192741,27,39,32.74452209,2,2,2,7.011635866,1.13,18.8 -282,603,3540,1,0.13,17,11,2,1,male,2008,29.70564461,10,39,36,3,0,1,6.193132558,1.127,19.7 -283,605,3200,0,0.01,27,57,2,4,male,2007,25.71166229,16,40,25.19246483,3,2,0,7.718115446,1.3,27.1 -284,607,3580,0,-1.07,25,2,2,1,male,2008,23.03563499,10,40.7142868,30,2,0,1,6.406684919,1.193,17.2 -285,612,3560,0,1.04,18,12.30555534,3,6,female,2008,25.53670311,12,41.8571434,40.16693878,3,2,1,6.513232945,1.165,27.3 -286,614,3978,0,0.62,31,61,2,4,male,2008,36.57143021,10,40,24.21164322,2,2,0,6.863791923,1.19,22.6 -287,615,4250,0,4.7,19,23,4,4,male,2008,36.80844879,11,39,34.61735153,3,2,1,6.05338809,1.23,37 -288,616,3720,0,1.03,28,16,3,1,female,2007,39.77258682,9,40.8571434,25,2,2,0,6.967716176,1.184,24.3 -289,618,3110,0,2.95,20,25,4,6,male,2007,20.07960129,18,36.2857132,24.50236702,2,2,1,7.159479808,1.355,39.7 -290,620,4230,0,1.48,19,33,3,4,male,2008,32.9564476,10,38,43.50547791,2,0,2,6.198380105,1.177,22.5 -291,622,3080,0,1.29,20,29.3125,3,6,female,2007,23.30668068,30,38.57143021,26.86266136,2,2,0,7.323750856,1.2,31.5 -292,625,3800,0,0.36,21,25,2,4,male,2008,24.93371964,14,40,30,3,2,2,6.329796943,1.23,21.8 -293,626,3430,1,-1.92,28,32,2,1,male,2007,37.2985611,5,40.1428566,26,2,2,0,6.663814739,1.186,19.8 -294,628,2760,0,0.49,22,22.53333282,2,6,female,2008,30.81854057,13,37.57143021,33.00860214,3,2,1,6.507871321,1.15,22 -295,631,2630,0,2.58,13,41,4,6,male,2007,22.83288002,10,37,30.50905037,2,2,2,6.455852156,1.214,29.5 -296,632,2780,1,-0.74,17,57,2,1,male,2007,24.20282745,3,40,26,3,1,1,6.674766142,1.096,17.1 -297,633,3300,0,0.61,24,6,2,1,female,2008,24.67550027,15,38.57143021,36,3,1,1,6.370864705,1.227,24.6 -298,643,3220,0,0.32,11,15.22222233,2,6,male,2008,18.96192741,19,38.42856979,30.08201981,3,2,1,6.743212412,1.276,22.4 -299,646,3575,1,0.76,22,2,2,4,male,2008,22.68905067,10,40,26.53127861,3,2,0,6.176591376,1.12,20.6 -300,649,2930,0,-0.21,18,10,2,4,male,2007,25.95155716,13,37,23.38812828,1,2,2,7.063769108,1.294,24.1 -301,650,3400,0,0.74,22,18,2,4,female,2007,26.49150848,14,40,19.23630142,2,2,0,6.984257358,1.22,24.9 -302,651,3540,0,0.07,30,15,2,1,male,2007,28.06642342,7.599999905,40,35,3,0,2,6.841889117,1.189,21.9 -303,652,2980,1,0.12,28,15,2,4,male,2008,26.13930893,13,38,36,3,2,1,6.65309149,1.172,21.4 -304,657,3580,0,0.37,28,0,2,1,female,2007,30.85399437,8,39,26,1,1,1,6.825462012,1.24,24.6 -305,659,3510,0,-0.83,21,9,2,6,female,2008,23.33546638,12,40,29.4483223,3,2,1,6.297170888,1.14,17.7 -306,666,4060,0,1.02,28,4,3,1,female,2008,25.01562691,12,41.57143021,23,3,2,0,7.030800821,1.176,23.65 -307,667,3300,0,0,25,28,2,1,female,2008,27.06405067,5,39,27,3,1,1,6.384782113,1.063,17.3 -308,669,3425,0,0.96,24,24,2,4,female,2008,23.63755035,9,40,26.56415558,3,2,1,6.310746064,1.21,24.9 -309,670,3850,1,1.45,13,6,3,6,male,2008,22.49135017,20,38.8571434,33.01697159,3,2,1,6.329796943,1.27,29.9 -310,672,3290,0,0.87,20,2,2,6,female,2008,25.390625,11,37.8571434,36.34618759,1,2,1,6.439539128,1.141,21.9 -311,676,3360,0,-1.51,19,38,2,6,male,2008,29.58579826,7,38.42856979,33.99959183,2,2,2,6.376340406,1.139,17.3 -312,679,2500,0,-1.62,13,48,2,1,female,2007,29.0579071,17,38,37,2,0,0,6.778918549,1.276,21.4 -313,682,3270,1,-0.15,26,46,2,6,male,2007,22.30814934,14,37.1428566,27.95060539,2,2,1,7.151266256,1.278,25 -314,686,3816,0,4.64,31,56,4,4,male,2008,23.38868713,15,39,35.64086914,3,2,0,6.425849875,1.3,48.6 -315,687,3880,0,0.48,20,30,2,6,male,2008,26.44628143,20,40.2857132,33.47985077,3,2,0,6.338010495,1.181,21.6 -316,689,3500,1,-2.42,13,26,1,6,male,2008,19.70553207,13,38.2857132,26.38879395,3,2,1,6.332648871,1.175,17.5 -317,692,4472,0,-0.77,24,41,2,4,female,2008,29.06592751,15,41.2857132,27.01758003,2,2,0,6.54072553,1.197,23.6 -318,696,3706,0,-0.08,24,7,2,4,female,2007,25.68956184,20,40,25.25273895,2,2,1,6.814510609,1.25,23.8 -319,697,3590,0,-1.08,27,1,2,1,male,2008,34.61085892,16,40.42856979,27,1,0,2,6.570841889,1.225,20.8 -320,698,3550,0,-0.13,19,8.125,2,1,male,2007,25.95155716,12,38.2857132,31,2,1,0,6.915811088,1.23,24.5 -321,699,3886,0,-0.23,30,13,2,4,female,2008,25.35154152,3,40,25.77191734,2,2,0,6.480378736,1.21,22.7 -322,700,3360,0,0.16,27,2,2,1,female,2008,31.71097755,9,41.7142868,31,3,2,2,6.527150354,1.2,22.8 -323,701,3140,0,-2.05,27,9,1,1,female,2007,23.77170563,12,40,31,2,0,2,6.877481177,1.155,18.2 -324,705,3540,1,0.98,20,32,2,1,male,2007,40.33377838,5,41,23,1,0,0,5.445471138,1.176,23.6 -325,706,2460,0,-0.43,14,18,2,1,male,2007,32.02052689,6.5,37,31,1,0,2,6.929500342,1.24,22.9 -326,707,4584,0,1.02,27,23,3,4,male,2009,20.390625,30,40.7142868,43.50547791,3,2,2,6.113506731,1.23,22.9 -327,711,3560,0,-0.29,18,8.0625,2,4,female,2008,20.46334457,15,39,36.50822067,3,2,2,6.176591376,1.12,18.6 -328,712,3150,0,1.45,15,53,3,6,male,2008,21.90758324,30,35.2857132,30.43394852,2,2,1,6.450262377,1.218,26.2 -329,714,2990,0,2.06,19,2.266666889,4,6,female,2008,23.33546638,14,38.1428566,37.2993927,3,2,1,6.203969884,1.206,28.6 -330,717,4340,0,1.08,25,14,3,1,male,2008,30.8630352,28,37.8571434,34.41752243,3,2,1,6.466803559,1.165,23.1 -331,718,2680,0,2.08,12,35,4,6,female,2008,40.33377838,25,40.7142868,19,1,2,0,6.266826375,1.228,29.8 -332,725,3500,1,0.39,24,21,2,1,female,2007,20.94925308,20,39.7142868,18,1,2,1,7.003422313,1.254,25.3 -333,726,3680,0,-0.77,24,0,2,1,female,2008,36.68100739,10,41.7142868,24,2,0,0,6.532626055,1.223,23.1 -334,727,3370,0,-1.01,27,31,2,4,male,2007,24.67702103,7,38,32.28013611,3,2,1,6.943189596,1.232,20.1 -335,728,4464,0,0.49,32,21,2,4,male,2008,39.32823181,16,41,25.94935036,3,2,0,6.143737166,1.3,27.8 -336,729,3900,0,-0.42,27,46.375,2,4,male,2008,25.09950066,5,39,28.87831116,3,2,1,6.472393338,1.28,24.3 -337,730,3540,1,-0.65,13,3,2,1,female,2008,22.77318573,5,39.7142868,23,1,2,2,6.379306411,1.176,19.4 -338,732,2910,0,1.2,26,14,3,4,male,2007,24.22145271,13,39,31.59429169,1,2,1,6.882842802,1.27,28 -339,735,3540,0,2.37,16,40,4,6,male,2007,28.93507385,8,38.1428566,29.09618568,2,2,1,6.428587725,1.26,29.8 -340,741,3770,0,-0.05,23,42,2,4,male,2007,28.72678757,10,39,32.53013611,3,2,2,7.331964408,1.31,29 -341,742,3410,0,-0.69,22,12,2,4,female,2007,19.4674015,8,39,30.5281601,3,2,1,6.973305955,1.27,21 -342,743,3070,0,0.42,31,15,2,6,female,2008,24.80158806,12,40,25.65529251,2,2,0,6.113620808,1.133,20.5 -343,744,3380,0,-0.18,23,15,2,1,female,2007,23.61942863,10,40.7142868,32,3,2,0,6.81724846,1.19,21.6 -344,745,5260,0,0.83,26,10.0625,2,4,male,2008,27.77427101,20,40,32.74177933,2,2,0,6.65309149,1.29,35 -345,747,4000,0,2.82,21,22,4,4,female,2008,29.7577858,30,40,28.49178123,3,2,0,6.146475017,1.18,30.8 -346,749,3240,0,-0.08,21,33.3125,2,6,male,2007,22.57104683,28,37.2857132,20.86515999,2,1,0,7.531941593,1.275,25.2 -347,752,3492,0,-0.22,28,25,2,4,male,2007,24.22145271,16,40,27.63716888,3,2,1,7.175792836,1.19,21.4 -348,754,3700,1,-0.36,27,7,2,1,male,2007,25.84695053,6,41.8571434,24,2,2,0,6.614533425,1.12,21.25 -349,755,3250,0,0.95,18,18,2,6,female,2008,31.23941422,13,41.1428566,34.41752243,2,2,2,6.409194616,1.195,24.3 -350,756,3130,0,1.57,17,15.22222233,3,6,male,2008,25.53670311,12,36.2857132,29.15658379,2,2,0,6.406456765,1.175,24.6 -351,759,3000,0,2.22,12,92.8125,4,6,male,2008,24.22145271,10,38.8571434,27.24842262,2,2,0,6.56525211,1.23,29.7 -352,761,3274,0,-0.13,25,34,2,4,male,2007,31.17913818,7,40,41.12990952,3,2,0,7.014373717,1.23,23 -353,764,3020,1,0.56,12,14,2,1,male,2009,26.6689949,5,39,26,1,0,2,6.212069359,1.24,25.1 -354,765,3380,0,1.57,22,26.125,3,1,male,2008,27.96158218,13,38.2857132,27,3,1,0,7.02532512,1.181,27.1 -355,768,2951,0,-0.48,32,55,2,4,female,2008,31.91930771,8,37,24,2,2,0,6.02886151,1.13,18.6 -356,769,4080,0,1.14,24,7,3,1,male,2008,37.0447464,10,41.42856979,30.27085686,1,1,2,6.483116587,1.251,26.8 -357,773,3480,0,0.51,28,25,2,1,female,2008,31.10003662,0,40.42856979,22,2,2,0,6.447752681,1.173,23.7 -358,774,3810,0,0.28,23,48,2,4,male,2007,24.76756668,15,40,29.86347008,3,2,0,6.108145106,1.21,23 -359,775,2630,0,-1.19,15,19,2,6,female,2008,21.71924973,12,37,30.00229073,2,2,1,6.442048825,1.154,19.8 -360,776,3370,0,0.82,26,27,2,4,female,2008,22.49135017,13,41,22.21986389,2,2,0,7.274469541,1.23,24.9 -361,777,4340,0,0.04,31,9,2,1,female,2007,26.00906372,5,39,33,3,1,0,6.81724846,1.19,21.85 -362,778,3400,0,-1.25,21,13,2,1,male,2008,21.194664,10,37.8571434,22.41392708,3,1,0,6.403947068,1.193,20.2 -363,779,3190,1,0.04,11,28,2,6,male,2008,24.03461075,10,38.1428566,28.0834465,2,2,0,6.116358658,1.161,20.6 -364,781,2480,0,-0.35,25,22,2,1,female,2007,32.62265396,10,41.42856979,34,2,2,0,6.368355008,1.164,20 -365,783,3140,0,0.36,27,3,2,1,female,2007,25.18462753,9,37.7142868,29,3,0,1,6.655829341,1.142,20.8 -366,784,4340,0,1.33,23,2,3,1,male,2007,32.32196808,22,39.42856979,36,2,2,2,6.984257358,1.275,28.5 -367,788,3300,1,0.69,25,7,2,1,male,2007,20.390625,9,40,29.63702583,3,0,1,7.718115446,1.248,25.7 -368,790,2810,0,1.45,25,21,3,6,female,2008,23.72528648,9,38.57143021,34.32024002,3,2,1,6.261350673,1.232,26.7 -369,791,3180,0,-1.34,22,33,2,6,female,2008,20.3125,17,38,36.31040573,2,2,2,6.641911932,1.194,18.1 -370,792,1390,0,-0.82,13,10,2,1,male,2007,22.98539734,5,32,23,3,2,0,6.806297057,1.225,22 -371,794,3320,0,-0.3,21,10,2,6,female,2007,22.18934822,18,39.8571434,27.99033165,2,2,0,6.510609172,1.106,18.3 -372,797,3220,0,1.87,26,6,3,4,female,2007,26.92743683,20,40,35.12009048,3,2,0,6.346338125,1.29,32.2 -373,798,2420,0,2.94,17,39,4,1,male,2008,26.4815197,12,38.57143021,28,1,0,2,6.565480265,1.198,29.7 -374,802,3300,0,-2.02,18,15,1,6,male,2008,19.53125,23,38,32.27364349,3,2,0,6.56525211,1.167,17.8 -375,803,2680,0,-0.46,23,52,2,4,male,2007,26.07897186,14,36.1428566,30.93972588,2,2,0,6.767967146,1.24,21 -376,806,3210,0,2.97,23,8,4,4,male,2007,28.06642342,20,38,25.56878853,2,2,0,6.234086242,1.26,33.6 -377,807,2820,0,-0.1,25,38,2,6,male,2008,22.41026878,10,38,28.41237068,3,2,1,6.486082592,1.2,22 -378,809,3872,0,1.34,16,18,3,4,male,2009,23.66524506,10,40,33.4248848,3,2,1,6.110882957,1.26,27.2 -379,810,3460,1,1.74,21,62.6875,3,6,female,2008,25.63116837,10,38.8571434,33.26214981,3,2,0,6.472165184,1.202,26.9 -380,812,3190,0,-1.27,14,16,2,1,female,2007,33.22551346,9,41.42856979,35,1,0,2,6.836413415,1.19,23.6 -381,813,3810,0,0.38,26,39,2,4,male,2008,31.99217224,30,39,25,3,2,0,6.105521332,1.21,23.2 -382,816,3500,0,-1.24,27,44,2,1,male,2008,26.76621437,15,41.8571434,28,1,2,0,6.636664385,1.213,20.25 -383,819,3392,0,2.38,13,8.0625,4,6,male,2008,21.484375,9,39.8571434,34,1,2,1,6.3544376,1.264,31.8 -384,820,2930,0,-1.29,15,13,2,6,female,2008,21.67125893,20,39.8571434,27.22984505,2,2,0,6.023271732,1.146,17.7 -385,822,2120,0,1.58,23,16.375,3,6,female,2007,32.87197232,25,30.8571434,36.15605927,3,2,1,7.145790554,1.297,31.5 -386,825,3342,0,0.28,26,22,2,4,female,2008,18.81892395,9,38,29.72808266,3,2,1,6.740474561,1.16,20.5 -387,828,2560,0,0.62,16,95,2,4,female,2008,22.95908737,10,40,25.0997715,2,2,0,5.437257586,1.11,20 -388,829,2570,0,2.22,20,16,4,6,male,2008,22.48132896,2,36.1428566,34.42502213,3,2,1,6.56525211,1.177,28.3 -389,830,3150,0,-0.22,27,40,2,4,male,2008,20.93663979,10,40,24.67214584,2,2,2,6.620009126,1.19,21.4 -390,834,2210,0,-0.86,19,45.5,2,6,female,2007,20.93211937,10,35.1428566,35,2,2,2,6.387291809,1.199,20.6 -391,835,2540,0,0.49,18,36,2,6,male,2008,20.76124573,13,39.42856979,33.46874237,2,2,1,6.453228382,1.183,22.5 -392,836,2550,0,0.02,13,102,2,4,male,2008,21.71924973,9,38,23.80319595,3,2,2,6.14636094,1.13,19.6 -393,837,3430,0,1.34,31,16,3,6,male,2007,26.0932752,7,37.2857132,36,3,2,0,6.488592288,1.181,28.1 -394,843,3870,0,0.08,22,2.0625,2,1,female,2007,20.7002182,12,41.7142868,19,1,0,0,6.869267625,1.176,21.45 -395,846,3320,0,2.23,20,21,4,4,female,2008,32.52595139,9,40,33.16666794,3,2,2,5.437257586,1.184,28.6 -396,847,4620,0,1.05,15,12,3,1,female,2008,27.06405067,9,39,36,1,2,2,6.746064339,1.16,23.3 -397,848,2820,0,2.28,33,12,4,6,male,2008,29.1363163,3.5,35.2857132,36.79285049,2,2,2,6.359913301,1.21,28 -398,849,4017,0,0.25,24,41,2,4,female,2007,28.32658005,15,40,43.34429169,2,2,1,6.902121834,1.24,24.3 -399,851,3630,0,-0.16,20,46,2,1,male,2008,23.29071999,3,41.7142868,17,1,2,0,6.201232033,1.181,21.1 -400,852,3060,0,1.11,33,40,3,6,male,2008,33.12130737,9,38,28,3,2,0,6.99247091,1.159,22.9 -401,854,2500,1,-1.54,14,34,2,6,female,2008,20.56933022,22,37.57143021,30.76895523,1,2,2,6.46954141,1.187,19.1 -402,855,3504,0,1.13,11,88,3,6,male,2008,24.38652611,14,39.1428566,29.63702583,2,2,0,6.98973306,1.319,25.5 -403,856,4160,0,-0.55,12,25,2,1,male,2008,28.93507385,8,40,17,1,2,1,6.368355008,1.15,20.45 -404,858,3170,0,-0.94,15,53,2,1,male,2008,24.72946167,24,39.42856979,28.86894989,1,1,0,6.447752681,1.144,19.2 -405,859,3358,0,0.54,25,25,2,4,female,2008,34.52708817,20,39,26.58059311,2,2,0,6.844741045,1.14,21.2 -406,863,2820,0,-3.58,16,25,1,1,male,2008,18.39737129,6.5,39,30,1,1,1,6.507985398,1.171,16 -407,864,3000,0,0.62,13,23.54411697,2,6,male,2008,38.94681168,13,38,28.04205704,2,2,0,6.918548939,1.259,26.2 -408,865,4020,1,3.13,9,37,4,6,male,2008,19.95728493,30,37.7142868,32.22317886,2,2,1,6.46954141,1.236,32.4 -409,866,3660,0,-1.3,19,11,2,1,female,2008,23.52941132,9,41.42856979,38,1,1,2,6.401209217,1.184,21.1 -410,868,3860,0,1.36,23,37.3125,3,6,female,2008,24.21875,11,41.42856979,26.11909676,2,2,1,6.494296144,1.312,30.8 -411,872,3740,0,3.29,15,14.125,4,4,female,2008,19.73396111,14,40,39.60525131,3,2,2,6.26146475,1.26,37 -412,873,3640,0,0.58,24,28,2,6,male,2008,24.34175873,20,40.2857132,35.11534882,3,2,1,6.313369838,1.208,23.6 -413,876,3360,0,-0.03,31,17,2,1,female,2007,21.95405197,0,37.7142868,24,1,2,0,6.770704997,1.255,24.1 -414,877,2970,0,1.61,22,46,3,6,male,2007,28.40533829,25,35,27.86730957,2,2,1,6.283367556,1.24,27.5 -415,878,3512,0,-0.4,24,20.125,2,4,female,2008,26.36560249,17,39,26.29223824,3,2,1,6.190394707,1.19,20.8 -416,879,3460,0,-1.03,25,35,2,4,female,2007,24.22145271,0,40.2857132,32,3,0,2,6.130047912,1.16,18.6 -417,882,3880,0,0.49,19,22,2,1,male,2007,20.19566727,9,42.2857132,23,1,2,0,6.639174082,1.323,28.2 -418,883,3600,0,-0.67,17,21,2,6,female,2007,23.87511444,20,36,18.9347477,1,2,0,6.422883869,1.095,17.1 -419,884,3970,0,0.35,29,8,2,4,male,2008,34.55707932,30,40,32.28013611,3,2,1,6.510723249,1.31,27.3 -420,885,3360,0,-0.12,11,4,2,1,male,2008,21.33821064,9,41.7142868,33,3,2,0,6.858316222,1.155,21.2 -421,887,2830,0,0.51,21,43,2,6,female,2008,23.1404953,9,38,43,2,1,2,6.46954141,1.19,21.9 -422,888,3320,0,-0.67,19,10,2,1,male,2008,20.390625,1,40.7142868,30,3,2,0,6.655601186,1.31,18.9 -423,891,3336,0,0.71,24,45,2,4,male,2008,25.24933815,16,40,33.83333206,3,2,2,5.921971253,1.22,26.7 -424,892,3660,0,1.91,22,45,3,1,male,2008,26.28476715,8,41,26,3,0,1,6.809034908,1.238,28.7 -425,893,3680,0,1.03,22,9,3,1,male,2008,25.36937904,25,41.42856979,33.12252045,3,0,1,6.518936801,1.265,27.2 -426,895,2790,0,0.15,16,41,2,1,female,2007,29.91725349,10,38.57143021,30.05825615,1,1,2,6.792607803,1.198,22.4 -427,896,3500,0,-0.02,12,7,2,1,female,2007,35.62901688,7,41.1428566,27,1,0,2,6.866529774,1.218,19.6 -428,898,3640,0,-0.14,26,10,2,4,male,2008,23.66524506,10,40.57143021,28.03675842,2,2,0,6.661305042,1.18,21.2 -429,899,3750,0,-0.1,22,66,2,4,female,2007,30.11940193,10,39.57143021,21.51095963,2,2,0,6.620123203,1.19,21.5 -430,903,3880,0,0.75,21,28,2,1,female,2007,35.96804428,10,40.7142868,31,1,2,2,6.896646133,1.275,27.35 -431,904,2820,0,2.63,32,12.125,4,1,female,2007,29.66983986,7,40.1428566,36.48186111,1,2,1,6.877481177,1.26,34.5 -432,906,2300,0,1.77,14,17,3,6,female,2007,23.53304271,3,37.2857132,39.14478302,2,2,0,6.442276979,1.135,24.3 -433,908,4000,0,1.77,19,8,3,4,male,2007,33.60102081,8,41,30.11347008,2,0,1,6.466689482,1.26,25.6 -434,910,3540,0,0.85,30,11,2,1,male,2007,31.10003662,10,40.8571434,19,1,2,0,7.088295688,1.15,22.3 -435,911,3300,0,1.62,25,34,3,4,female,2008,21.09375,10,39,30.43394852,2,0,2,5.853524983,1.17,25.8 -436,915,3100,0,0.8,15,74,2,6,male,2008,21.67125893,8,36.8571434,33.46874237,2,2,1,6.48060689,1.183,23.4 -437,918,3620,0,1.05,13,29,3,1,female,2008,31.31833076,8,39.2857132,29,1,0,2,6.603810176,1.224,25.8 -438,919,4120,0,0.85,32,25,2,4,female,2007,29.03178978,13,43,26.47260284,3,2,0,7.104722793,1.33,30.1 -439,920,2960,1,3.53,18,43,4,4,male,2008,26.39580345,20,36,22.449543,3,2,0,6.46954141,1.305,32 -440,921,2600,0,-1.18,24,11,2,6,female,2007,22.67995262,11,36.57143021,33,2,2,1,6.346338125,1.146,22.1 -441,924,2970,0,2.87,17,50,4,6,female,2007,26.70362282,12,38,22.04497719,3,2,0,7.003422313,1.256,35.1 -442,925,3810,0,-0.82,31,3,2,4,male,2008,30.85399437,15,41,35.43584442,2,2,1,5.708418891,1.16,19.3 -443,927,3640,0,0.15,22,10.25,2,6,female,2007,21.15529442,13,39.57143021,30.57473946,1,2,2,7.085557837,1.33,23 -444,933,3620,0,0.21,19,31,2,6,male,2008,22.77318573,12,40,32.78110504,3,2,0,6.592630618,1.226,23.6 -445,935,1780,1,-0.03,23,14,2,1,male,2007,31.27884674,5,34,33,3,2,0,6.902121834,1.15,22 -446,936,3690,0,2.05,24,32,4,1,male,2007,36.80572128,10,40.7142868,29.01026726,3,0,2,6.893908282,1.294,33.6 -447,940,4540,0,0.69,29,13,2,1,male,2007,38.89807129,9,41.7142868,35,3,2,1,6.770704997,1.21,24.1 -448,941,2710,0,1.11,12,33,3,6,female,2008,21.5138588,20,38.57143021,30.91102028,2,2,1,6.483116587,1.162,27.3 -449,945,2880,1,-0.73,22,24.33333397,2,6,female,2007,23.42355728,7,38.42856979,26,2,2,1,6.877481177,1.143,19.4 -450,947,3640,0,-0.01,16,28,2,1,male,2008,40.13878632,5,38.7142868,36,1,2,1,6.401209217,1.197,19.7 -451,951,2890,0,0.76,21,2,2,6,female,2008,31.50136566,18,37,33.81074524,3,2,0,6.313597992,1.238,25.5 -452,955,2970,0,-1.08,14,17,2,6,female,2008,20.06920433,12,37,31.25950623,3,2,1,6.474903034,1.223,20.6 -453,959,4350,0,0.49,27,24,2,6,male,2008,27.85200882,9,37.8571434,30.0603466,3,2,1,6.365389003,1.181,22.4 -454,962,2360,0,1.95,24,33,3,1,male,2008,22.17302895,10,34.2857132,17,1,2,0,6.625712982,1.205,24.6 -455,964,3212,0,-0.05,19,10,2,4,male,2007,33.56401443,12,39,32.08607483,3,2,1,6.362765229,1.2,22 -456,965,4030,1,1.81,26,45.9375,3,6,male,2008,23.42209053,17,39.8571434,20.19819069,2,2,0,6.297170888,1.209,26.7 -457,967,3240,0,2.16,23,23.125,4,6,male,2008,23.83673477,17,37.2857132,33.13724518,3,2,0,6.565480265,1.219,26.1 -458,970,3920,0,0.38,16,29.1875,2,6,female,2007,21.09619141,10,38,34.15065384,3,2,1,6.757015743,1.253,25 -459,974,3260,0,-0.71,17,11,2,1,female,2007,27.17021751,11,40.2857132,25,3,2,0,6.751540041,1.195,20.4 -460,975,2120,0,-0.1,12,42,2,6,male,2008,17.84651947,14,33.1428566,35.09079742,1,2,1,6.360027379,1.146,20.6 -461,976,3230,0,-0.1,23,31,2,6,male,2007,20.3125,18,38.2857132,21.79825401,2,2,1,6.704996578,1.155,20.4 -462,982,3380,0,-0.46,28,32,2,4,female,2007,29.06877327,20,37,26.87748146,3,2,1,6.477640885,1.25,23.1 -463,984,4140,0,1.27,21,82,3,4,male,2008,28.95899963,15,39,30.44406319,3,2,1,6.015058179,1.28,23.6 -464,987,3548,0,1.38,14,32,3,4,male,2008,26.29172325,9,38.42856979,23.51917839,2,2,0,6.39835729,1.22,26.2 -465,988,3336,0,0.62,21,7,2,4,female,2008,29.76086235,7,40.57143021,24.51643753,3,2,1,6.001368925,1.19,23.2 -466,992,3980,0,2.36,20,3,4,1,male,2008,32.03961563,32,41.42856979,32,3,2,1,6.39002966,1.21,28.5 -467,994,4230,0,2.45,24,0,4,4,male,2009,32.07591248,20,39,31.43362617,2,2,2,6.127310062,1.23,26.4 -468,998,4640,0,1.22,21,15,3,4,female,2008,24.53896523,13,41.57143021,31,3,2,2,7.460643395,1.2,25.3 -469,999,3952,0,2.17,20,11,4,4,male,2007,21.96712112,15,41,36.24452209,3,2,2,7.76739676,1.33,35.3 -470,1002,2820,0,-1.25,18,11,2,1,male,2008,24.72946167,8,38,37,3,1,0,6.469427333,1.21,20.2 -471,1006,3980,0,1.35,21,27,3,4,female,2008,25.61728477,16,41,23.97808266,3,2,0,6.19301848,1.135,19.6 -472,1008,3260,0,1.78,25,37,3,6,female,2007,20.79673004,12,39.1428566,30.05825615,3,2,1,6.888546658,1.24,26.1 -473,1010,3550,0,1.25,26,21,3,6,female,2007,24.50894547,7.5,38.42856979,31.66748428,2,2,1,6.918548939,1.236,27.15 -474,1011,3040,0,2.94,19,34,4,6,male,2007,26.0932752,12,39,36.39866257,2,2,1,6.406684919,1.231,26.7 -475,1012,3620,0,1.06,24,31,3,1,male,2007,25.51020432,10,40.8571434,25.93036461,2,2,0,7.02532512,1.26,25.6 -476,1013,2950,0,-0.39,32,0,2,6,female,2007,24.02380943,18,37.42856979,35.43013382,3,2,0,6.351699749,1.143,21.1 -477,1015,2985,0,0.82,18,22.1875,2,4,female,2008,24.44727898,17,38,25.13538742,3,2,0,6.121720283,1.143,21.3 -478,1018,3140,0,0.58,20,4,2,1,female,2008,25.36937904,10,37.42856979,30,1,2,1,6.417636322,1.197,24.5 -479,1021,3834,0,0.86,26,14,2,4,male,2008,32.87310791,20,40,25,2,2,0,5.702829112,1.21,24.4 -480,1022,4120,0,0.46,26,8,2,4,female,2007,35.85643005,30,40,27.63716888,2,2,2,6.880104951,1.28,23.3 -481,1024,2479,0,-2.98,24,21,1,4,male,2007,25.35154152,13,40,27.05593681,3,2,0,7.186858316,1.24,18.9 -482,1027,3900,0,2.66,20,23,4,4,male,2008,34.60207748,11,39,32,2,2,2,6.46954141,1.36,37.4 -483,1028,4080,0,0.28,26,5,2,4,male,2008,27.51338577,18,39,33.35799026,3,2,1,6.023271732,1.19,22.5 -484,1029,3492,0,1.77,32,8.0625,3,4,female,2007,35.15625,10,40,34.07237625,3,2,2,6.395733516,1.15,24.8 -485,1030,4050,0,1.13,22,26,3,4,female,2008,21.46915054,0,39,36,3,2,2,5.864476386,1.18,24 -486,1031,4040,1,0.37,22,23,2,4,male,2008,26.12861061,21,39.2857132,32.22694016,3,2,1,6.447752681,1.19,22.5 -487,1037,3550,0,-0.89,25,0,2,4,female,2007,23.38435364,13,40,30.8497715,3,2,1,7.014373717,1.25,22 -488,1040,2600,0,-0.6,20,6,2,1,male,2007,34.35274887,8,37.57143021,23,1,2,0,7.143052704,1.26,19.8 -489,1041,3270,1,1.57,25,27,3,6,male,2007,24.67702103,20,38.7142868,31,2,2,1,6.422883869,1.18,23.1 -490,1043,3050,0,1.77,26,38.5,3,4,female,2008,33.38655853,20,41,24.49178123,3,2,0,6.294433037,1.23,28.6 -491,1046,3430,0,-0.32,23,42,2,4,female,2008,28.25699043,8,40,28.03675842,2,2,0,6.496805841,1.21,21.7 -492,1047,3220,0,2.98,20,14,4,1,female,2007,40.33377838,12,40.2857132,27,3,0,0,7.033538672,1.32,38.1 -493,1048,3336,0,1.5,25,33,3,4,male,2008,25.390625,18,39,21.83881187,2,2,0,6.023385809,1.11,21.7 -494,1050,4000,0,0.71,26,25.125,2,4,male,2008,31.60321236,15,41,31.62716866,3,2,1,6.39002966,1.16,22 -495,1051,4022,0,0.99,21,14,2,4,male,2008,26.79493713,18,40.42856979,36,3,2,2,5.494752453,1.19,23.6 -496,1056,3000,0,3.51,20,13,4,6,female,2007,24.93371964,20,39.1428566,36.29383469,3,2,0,6.751540041,1.171,33.2 -497,1057,2540,0,-1.43,27,8,2,4,female,2007,21.5138588,5,36.7142868,31.08881187,3,2,1,6.88569473,1.16,18 -498,1059,4480,1,0.87,26,58,2,1,male,2008,44.84930038,10,40.57143021,18,2,2,0,6.746064339,1.19,23.65 -499,1070,3935,0,0.47,28,33,2,1,female,2007,25.72995186,13,40,28,2,1,0,6.699520876,1.26,27 -500,1071,3090,0,3.01,21,57,4,6,male,2008,24.03440666,26,38.57143021,24.7598114,2,2,1,6.406456765,1.29,35 -501,1073,2500,0,-1.44,33,16.0625,2,6,female,2007,31.99217224,11,37.2857132,33.32446289,2,2,1,7.110198494,1.185,18.8 -502,1075,3030,0,3.46,13,22,4,6,male,2008,29.38475609,8,38.42856979,34.00735855,2,2,2,6.680241843,1.272,36.2 -503,1076,3150,0,0.61,23,66.17500305,2,6,male,2008,21.875,20,40,31.43362617,3,2,1,6.507757244,1.23,22.7 -504,1081,3340,0,2.08,18,14,4,6,female,2008,24.42583656,8,38,32.82308578,3,2,2,6.505019393,1.331,34.9 -505,1084,3290,0,-0.85,25,10,2,1,female,2008,22.40983391,16,40.42856979,24.21164322,1,0,0,6.494182067,1.196,21.8 -506,1085,3380,0,1.44,26,17,3,1,male,2008,27.77777863,13.60000038,40.57143021,29,3,0,0,6.143737166,1.13,28 -507,1087,3210,0,0.58,26,8,2,1,male,2007,34.48846817,10,38.57143021,30,2,2,0,7.030800821,1.165,22.2 -508,1088,3240,0,0.34,25,11,2,1,male,2008,29.35752106,15,40,26,3,2,2,6.655601186,1.144,20.8 -509,1089,3240,0,1.73,30,12,3,4,female,2008,26.39797783,18,38,22.96872139,2,2,1,6.841889117,1.16,25.5 -510,1091,3430,0,0.34,23,36,2,4,male,2008,30.77870178,15,40,26.2746582,3,2,0,6.132785763,1.202,22 -511,1092,3105,0,2.43,17,16,4,1,male,2008,35.3985672,8,37.42856979,36,1,1,2,6.661305042,1.314,33.9 -512,1094,3780,0,0.06,29,41,2,6,male,2007,22.22906113,12,40.8571434,27.69609833,2,2,0,6.932238193,1.214,22.8 -513,1096,3620,0,1.22,31,5,3,1,female,2007,32.9564476,5,41.1428566,24,1,0,1,6.809034908,1.194,25.25 -514,1098,2550,0,0.31,18,44,2,6,male,2008,24.38237381,13,34.1428566,21.23676682,2,2,0,6.269678303,1.189,19.8 -515,1099,3500,0,3.23,19,31.20000076,4,6,female,2008,23.42209053,30,38.42856979,26.02517319,1,2,0,6.485854438,1.23,35.4 -516,1100,3020,0,0.98,25,40,2,6,male,2008,21.90758324,5,38.2857132,28.84805298,3,2,0,6.31884554,1.24,22.3 -517,1101,2590,0,2.89,23,27,4,6,female,2007,26.76494408,3,38.7142868,34.77210236,2,2,1,6.381816108,1.193,31.5 -518,1103,3550,0,1.05,20,19,3,6,male,2008,24.74745369,28,40,33.31299973,2,2,2,6.568218115,1.201,24.3 -519,1104,3220,0,-0.34,20,4,2,1,male,2008,26.44413948,10,36.2857132,31,3,2,1,6.524184349,1.14,21.8 -520,1108,2810,0,2.32,24,36,4,6,male,2008,25.390625,12,37.8571434,32.42286301,3,2,0,6.316107689,1.214,28.5 -521,1109,4000,0,0.89,27,38,2,4,male,2007,30.8248291,10,40,27.02739716,3,2,0,7.315537303,1.33,30 -522,1111,3050,0,-1.19,25,23,2,4,female,2008,26.64359856,15,39,34,3,2,2,6.745950262,1.29,21.5 -523,1112,3730,0,-0.06,32,31,2,4,female,2007,26.36560249,12,40.1428566,37.97967911,3,2,1,6.973305955,1.26,24.3 -524,1113,3680,0,-0.07,31,57,2,4,male,2007,30.85399437,15,41,28.86894989,2,2,0,6.822724162,1.3,28 -525,1114,3820,0,1.5,18,33,3,4,female,2008,34.5776329,20,40,30.74178123,3,2,2,6.149212868,1.09,21.5 -526,1118,3140,1,-1.38,13,0,2,1,female,2008,24.93371964,13,40.57143021,27,1,0,0,6.488820443,1.135,18.8 -527,1119,3392,0,0.07,19,61,2,4,female,2007,25.25951576,10,40,23.92762566,2,2,0,7.011635866,1.22,23.1 -528,1123,3980,0,-0.02,24,39,2,6,male,2008,24.38237381,17,38,42.14476776,3,2,1,6.491330139,1.197,23.6 -529,1124,4022,1,1.74,22,8,3,4,female,2008,26.6193428,16,41,31.66118813,3,2,2,6.19028063,1.27,29.2 -530,1125,3720,1,0.34,17,22,2,1,female,2008,18.49569511,24,40.7142868,26,1,2,2,6.203969884,1.054,17.6 -531,1128,3600,0,1.17,24,42,3,4,female,2008,28.39372635,20,39,25.61735153,3,2,0,6.521560575,1.316,23.6 -532,1131,3500,0,1.68,11,31.125,3,6,female,2008,21.93634796,10,40,41.70705795,3,2,1,6.39835729,1.281,29.7 -533,1135,3300,0,-0.68,23,12.0625,2,6,male,2008,19.13265228,19,38.57143021,24.58607292,2,2,1,6.620009126,1.25,22.7 -534,1136,3040,0,-0.32,29,40,2,1,female,2007,26.03270149,9,39,34,3,2,0,6.773442847,1.21,23.9 -535,1140,3180,0,1.17,15,13,3,4,male,2009,30.4866848,20,40,21.9002285,2,2,1,6.031485284,1.2,25 -536,1141,3210,0,0.6,18,26.29999924,2,6,female,2008,24.91349411,7,40.42856979,31.94693565,2,2,1,6.5134611,1.263,26.2 -537,1142,2740,0,-1.18,16,11,2,1,male,2008,21.95324516,17,38.42856979,28,2,1,0,6.570955966,1.16,18.6 -538,1145,2960,0,-1.51,15,33,2,1,female,2009,24.1307888,20,41.42856979,21,1,0,0,6.502281542,1.181,18.2 -539,1148,3460,0,-0.97,25,11,2,1,female,2007,23.63755035,12,41.7142868,29,3,2,1,6.696668948,1.183,19.5 -540,1149,2800,0,-1.99,23,1.0625,2,6,male,2007,24.44180298,9,37.57143021,32.28938293,3,2,2,7.028177048,1.196,18 -541,1151,2980,0,1.78,18,31.375,3,6,female,2008,29.37239647,15,38.1428566,33.81074524,3,2,2,6.560004563,1.205,27.5 -542,1153,3620,0,-0.42,26,8,2,1,male,2008,24.83695602,20,39.2857132,41,3,0,0,6.573693817,1.245,23.6 -543,1154,3200,0,1.61,20,28,3,1,male,2007,29.90770721,20,37.8571434,18,1,2,0,6.841889117,1.276,36.6 -544,1155,2770,0,-1.33,14,55,2,6,male,2008,24.91349411,25,37.8571434,24.37689209,2,2,0,6.116358658,1.132,17.6 -545,1156,3000,0,1.19,27,25,3,6,female,2007,22.03856659,7,38.7142868,34.629776,3,2,1,6.847250742,1.201,27.6 -546,1160,3100,0,0.58,27,23.0625,2,6,male,2008,21.484375,8,39.8571434,27.86525726,2,2,1,6.598334474,1.19,25.1 -547,1161,3150,0,1.85,18,24,3,6,female,2008,24.60973358,25,39,24.27792931,2,2,0,6.622975131,1.197,26.6 -548,1162,2860,0,-1.1,22,22,2,6,male,2008,20.56933022,12,38.42856979,26.29628181,3,2,0,6.46954141,1.154,24.9 -549,1164,3200,0,-0.01,19,27,2,6,male,2007,21.875,12,38.8571434,24.80669594,2,2,1,6.439310974,1.124,19.4 -550,1167,2820,0,2.97,13,13,4,6,female,2007,28.515625,3,38,37.89798737,2,2,2,6.324435318,1.2,31.2 -551,1169,3340,0,1.08,24,40,3,6,female,2007,22.38631439,12,40.57143021,28,3,2,0,6.499771846,1.216,25.6 -552,1170,2720,1,0.96,17,8,2,1,male,2007,31.08959579,11,38.7142868,24,2,0,0,6.713096053,1.243,26.1 -553,1171,3888,0,-0.77,20,32,2,4,female,2008,31.14186859,20,40,23.28949738,1,2,0,6.428473648,1.29,23.6 -554,1172,2780,0,-0.1,21,26,2,1,female,2008,28.13590431,13,38,39.42505264,1,0,2,5.494752453,1.188,21.3 -555,1176,4010,0,0.91,17,14,2,1,male,2008,27.47711754,8,38.2857132,34,2,0,0,6.450262377,1.166,22.75 -556,1183,2760,0,3.31,15,7.0625,4,1,female,2008,33.32134628,15,38.1428566,32.72552872,1,1,2,6.740588638,1.235,34.8 -557,1184,3200,0,-1.01,30,32,2,4,female,2008,26.12861061,13,39,33.12252045,3,2,2,6.275039927,1.14,18 -558,1185,2870,0,-0.1,18,25,2,6,female,2008,21.64412117,6,37.7142868,30.27085686,3,2,2,6.428473648,1.108,20.8 -559,1186,3980,0,0.57,19,28,2,4,male,2008,25.08896065,20,40,28,3,2,0,5.702829112,1.18,22 -560,1187,3810,0,-0.18,24,15,2,1,male,2007,40.33377838,20,41.8571434,28.02190208,3,2,0,7.041752225,1.244,23.6 -561,1190,4093,0,3.31,22,17,4,4,male,2007,36.49376297,20,40,34.08059311,2,2,2,7.028177048,1.26,38.8 -562,1191,3380,0,2.63,15,61.42857361,4,6,male,2008,23.73323822,25,39.8571434,32.23092651,2,2,0,6.477640885,1.305,34.3 -563,1192,3520,1,1.28,23,76,3,1,male,2007,28.02371597,10,37.8571434,22,3,2,1,6.746064339,1.219,25.95 -564,1195,2920,0,0.57,26,11,2,6,male,2007,25.21735764,10,35.8571434,36.56373978,3,2,1,6.390143737,1.213,23.8 -565,1197,3460,0,-0.82,27,18,2,1,male,2008,22.5,9,38,24,1,0,0,6.661305042,1.19,20.3 -566,1202,3670,0,0.49,16,29,2,6,male,2008,28.76397133,8,40,27.63716888,2,2,2,6.453228382,1.232,24.4 -567,1203,4036,1,0.62,27,11,2,4,female,2008,30.85399437,20,40,28.01369858,3,2,1,6.475017112,1.2,23.6 -568,1204,4000,0,1.76,19,15,3,1,male,2008,38.89807129,15,40.42856979,26,3,0,2,6.206707734,1.231,27.5 -569,1206,2860,0,-0.31,24,18,2,6,female,2008,21.54509163,11,39.57143021,29.96986389,3,2,0,6.40942277,1.201,21.4 -570,1207,3690,1,0.15,23,60,2,4,female,2007,30.48780441,18,40,30.93310547,3,2,2,7.101984942,1.23,25.8 -571,1209,2530,0,0.71,17,6,2,6,female,2008,19.23356056,10.5,35.8571434,26.55024147,3,2,1,5.894592745,1.154,21.8 -572,1221,3230,0,2.82,24,68,4,6,male,2008,22.10028959,12,40,31.00820351,3,2,0,6.491330139,1.28,33.8 -573,1222,3280,0,0.19,24,27,2,6,male,2007,23.50780487,18,41.2857132,30.74178123,2,2,2,6.639174082,1.165,21.2 -574,1223,3210,0,-0.46,16,8,2,1,female,2008,25.8745842,6.5,38.2857132,30,2,0,2,6.461213781,1.224,21.9 -575,1224,4250,0,3.42,22,64,4,6,male,2008,21.45328712,20,40,35.11724091,2,2,0,6.647615788,1.247,34.9 -576,1229,4150,0,0.22,24,10,2,4,male,2007,29.06592751,11,39,26.67488098,2,2,0,7.425051335,1.31,27.3 -577,1230,3220,0,0.6,23,22.1875,2,6,female,2008,25.09950066,14,39,28.01796722,3,2,1,6.023271732,1.131,20.9 -578,1231,3260,0,-0.35,19,40,2,1,male,2007,21.35779572,5,39.2857132,27,1,0,2,6.770704997,1.097,21 -579,1232,3510,1,-0.63,12,30.1875,2,6,male,2007,24.44727898,10,35,23.44264603,3,2,0,6.442276979,1.19,21.7 -580,1235,3200,0,-0.7,27,22,2,1,female,2008,32.85969925,8,40.8571434,26,1,0,1,6.469427333,1.133,23.6 -581,1237,3744,0,1.21,28,32,3,4,male,2007,26.67276382,11,40,20.13926888,2,2,2,6.485854438,1.14,20 -582,1238,3220,0,0.15,26,21,2,1,male,2007,29.64782333,5,38.42856979,29,1,1,2,6.915811088,1.232,22.2 -583,1243,3660,0,-0.22,18,5,2,1,female,2008,20.19557762,12,38.8571434,35,3,2,1,6.507871321,1.183,20.95 -584,1245,3270,0,0.44,12,14,2,6,male,2008,27.14158249,15,37.42856979,36.61153793,2,2,1,6.275039927,1.209,26.9 -585,1248,3080,0,-0.58,19,48.4375,2,6,female,2007,20.703125,26,38.1428566,40.97868729,3,2,1,6.411932466,1.147,19 -586,1251,2930,0,0.22,24,26.53333282,2,6,male,2008,23.49523735,28,38.8571434,30.88671684,3,2,0,6.746064339,1.11,19.4 -587,1253,3109,1,-1.25,9,93,2,4,female,2008,24.76756668,15,40,24.77739716,2,2,1,5.894592745,1.11,16.7 -588,1254,3420,0,-1.09,12,18,2,1,female,2008,32.28305817,11,39.7142868,34,1,0,2,6.447752681,1.149,19.5 -589,1256,3360,0,0.25,12,40,2,1,female,2007,25.74154663,10,40.2857132,19,1,0,0,6.428587725,1.19,22.7 -590,1262,3360,0,-0.82,25,16,2,6,female,2007,24.39105884,16,39.7142868,38.39938354,3,2,1,6.672142368,1.147,18.6 -591,1263,3390,0,-0.2,16,25,2,6,female,2007,22.9481163,10,42,35,3,2,1,6.507757244,1.19,21.5 -592,1264,3080,0,0.14,24,22,2,6,male,2008,22.15102196,7,38.1428566,26.84968376,2,2,2,5.437257586,1.193,22.2 -593,1265,3880,0,-0.36,16,3,2,1,male,2008,35.08734131,20,40,39,1,0,2,6.143737166,1.135,19.15 -594,1267,3480,0,0.87,21,31,2,6,female,2007,25.71166229,0,39.57143021,23.31963539,3,2,0,6.420374173,1.223,25.2 -595,1271,4420,0,0.58,15,4,2,1,male,2007,28.93507385,9,41.1428566,24,2,0,1,6.694045175,1.227,24.5 -596,1272,2770,0,-0.52,25,30,2,4,male,2008,25.59373665,14,40,24.69794464,3,2,0,6.001368925,1.119,19.7 -597,1275,4660,1,2.35,17,44,4,1,male,2008,41.65205383,25.39999962,41.7142868,36,3,2,1,6.340748346,1.24,29.85 -598,1278,3704,0,0.03,26,48,2,4,male,2008,19.19530296,17,40,27.45342445,3,2,0,6.184804928,1.21,22.5 -599,1280,3520,0,-0.65,31,9,2,1,female,2007,32.85969925,5,41,34,3,2,2,6.822724162,1.22,21.4 -600,1281,2240,0,-0.1,34,6,2,1,female,2007,29.2481308,3,33.1428566,32,3,0,0,6.984257358,1.19,21.6 -601,1284,3240,0,-0.2,22,57,2,1,female,2007,35.8984375,10,38.2857132,37,2,2,0,6.863791923,1.184,21.1 -602,1288,3320,0,-0.26,12,21,2,1,female,2008,21.167696,10,40,26,3,1,0,6.023385809,1.247,23.2 -603,1293,2540,0,-0.43,21,14,2,6,female,2007,22.49135017,8,38,30.09611893,2,2,0,6.507757244,1.211,22.7 -604,1294,3843,0,0.01,22,43,2,4,male,2007,29.70564461,27,40,28.61621094,2,2,2,6.882842802,1.2,22.2 -605,1297,2900,0,1.94,31,34.4375,3,6,female,2008,33.56401443,17,40.42856979,32.15058136,2,2,1,6.809148985,1.234,29.7 -606,1299,4068,1,1.04,22,13,3,4,male,2008,27.37966537,20,41.2857132,22.03127861,3,2,2,6.497033995,1.25,26.5 -607,1301,3580,0,0.48,28,0,2,1,female,2008,23.52548981,5,40.7142868,36,3,2,2,6.401209217,1.254,25.35 \ No newline at end of file diff --git a/tests/testthat/data_files/GAMLSS/gamlss1.rda b/tests/testthat/data_files/GAMLSS/gamlss1.rda deleted file mode 100644 index d0b27439..00000000 Binary files a/tests/testthat/data_files/GAMLSS/gamlss1.rda and /dev/null differ diff --git a/tests/testthat/data_files/GAMLSS/gamlss2.csv b/tests/testthat/data_files/GAMLSS/gamlss2.csv deleted file mode 100644 index 08042799..00000000 --- a/tests/testthat/data_files/GAMLSS/gamlss2.csv +++ /dev/null @@ -1,497 +0,0 @@ -rowID,ID,e3_bw,hs_asthma,hs_zbmi_who,hs_correct_raven,hs_Gen_Tot,hs_bmi_c_cat,h_cohort,e3_sex_None,e3_yearbir_None,h_mbmi_None,hs_wgtgain_None,e3_gac_None,h_age_None,h_edumc_None,h_native_None,h_parity_None,hs_child_age_None,hs_c_height_None,hs_c_weight_None -1,5,3950,0,0.98,19,18,2,3,male,2005,22.15102196,20,43,20.86515999,1,2,0,9.451174994,1.37,34 -2,12,3660,0,2.71,24,19,4,3,male,2006,23.73866272,18,39,37.59890366,3,2,1,8.637805156,1.33,48 -3,19,3870,0,-0.46,34,15,2,5,female,2005,21.09375,9,41.1428566,32,3,2,0,9.505817933,1.37,28.5 -4,21,3710,0,1.4,28,33.4375,3,3,female,2006,28.47988701,22,40.57143021,32.07939911,1,2,1,8.547684235,1.267,30.7 -5,23,3040,0,-0.52,25,41,2,3,male,2006,19.56295586,13,41,25.39356613,2,2,0,8.479009811,1.27,24.4 -6,25,2490,0,1.8,34,32,3,3,female,2005,25.09950066,17,39,40.08761215,2,2,1,9.11430527,1.405,42.1 -7,26,3590,0,0.18,29,60,2,5,female,2005,26.5625,14,41,29.45616531,3,2,1,8.703627652,1.395,31.4 -8,27,2943,0,1.64,28,18,3,5,female,2006,30.48668503,15,41.1428566,40.16693878,3,2,2,8.629591604,1.303,33.8 -9,28,3590,0,-0.23,25,4,2,5,male,2006,19.13265306,20,39.57143021,28,3,2,0,8.68434862,1.243,24.1 -10,32,3060,0,0.57,31,16,2,5,male,2007,23.91883029,11,35,34,3,2,0,8.03559206,1.314,28.8 -11,34,3428,0,1.78,25,17,3,5,female,2006,26.67487526,15,43.57143021,23.55920601,2,2,0,8.624344057,1.297,36.1 -12,35,3370,0,-1.63,33,24,2,5,male,2006,20.76124567,10,38.57143021,37,3,2,1,8.314852841,1.34,23.6 -13,36,3620,0,-0.29,32,29,2,5,male,2005,24.09297052,20,39.42856979,31,2,0,2,8.884325804,1.393,30.2 -14,37,3850,0,0.77,30,2,2,5,female,2006,24.91349481,20,39.57143021,31,3,2,1,8.484713666,1.318,26.1 -15,39,3460,0,2.36,31,6,4,5,female,2005,30.79338244,8,39,34,2,0,1,8.695300023,1.367,36.6 -16,41,2880,0,1.08,27,29,3,3,male,2005,24.21875,10,40,29.62354469,1,2,0,9.037645448,1.356,27.4 -17,42,2660,0,0.01,33,19,2,3,male,2005,22.98742676,9,39,31.80834961,3,2,0,9.075975359,1.24,28.6 -18,43,3242,0,3.29,32,18.375,4,3,male,2005,35.62901688,0,41.2857132,33.5222435,3,2,0,9.703057267,1.425,54.4 -19,44,3460,0,-1.91,26,51,2,5,female,2006,19.1953028,12,40,32,3,2,1,8.446383755,1.225,23.3 -20,47,3300,0,-0.84,27,66,2,3,male,2005,24.55775261,10,39.42856979,21.44284821,1,2,0,9.075975359,1.249,21.8 -21,50,3764,0,-0.58,33,11,2,5,male,2006,18.82711104,14,41.42856979,33,2,2,2,8.54471823,1.252,23.6 -22,56,3290,0,-0.9,27,29.25,2,5,female,2007,21.71925011,6,35.8571434,40,3,2,1,6.918548939,1.213,21.3 -23,60,3150,0,0.94,30,16,2,3,male,2006,34.20582962,7,39,32.11391068,3,2,0,7.299110198,1.311,29.3 -24,62,1916,0,-1.07,30,0,2,5,male,2006,28.57796068,20,32.42856979,31,2,2,0,8.555897787,1.3,24.4 -25,69,3328,0,-0.26,35,29.3125,2,5,male,2005,23.14049587,15,38.1428566,40,3,0,1,7.93155373,1.297,26.1 -26,71,4204,0,-1,32,0,2,5,male,2006,18.8267935,18,41.8571434,30,3,0,0,8.413529546,1.445,26.1 -27,74,3490,1,0.13,33,3,2,5,male,2005,25.20920136,12,39.1428566,34,3,0,1,8.684462697,1.34,29 -28,78,3185,1,2.21,25,27,4,3,female,2005,36.35734177,12,39.42856979,16,2,1,0,8.955624002,1.37,41.6 -29,79,3360,0,2.94,32,47,4,3,male,2005,22.65625,15,39.7142868,33.4373703,2,2,1,9.032169747,1.343,48.6 -30,80,3620,0,1.08,24,2,3,5,male,2006,24.77209671,7,40,35,3,2,2,8.052019165,1.307,30.8 -31,82,4122,0,0.39,29,4,2,5,female,2006,19.72318339,15,40,38.23682404,3,0,1,9.582591832,1.355,30.7 -32,88,3080,0,2.42,28,25,4,3,male,2006,22.265625,10,38.8571434,38.0369606,1,2,1,8.654460415,1.34,38.1 -33,89,3230,0,-1.52,32,14,2,5,female,2005,18.68512111,25,40.7142868,26,2,0,0,8.583048141,1.38,25.9 -34,92,3680,0,-0.88,22,6,2,3,female,2005,17.63085365,20,40.1428566,35,1,2,0,9.215719827,1.315,25.4 -35,96,2010,0,-1.62,29,40.3125,2,3,female,2005,20.47826576,7.5,36.7142868,34.11635971,2,2,1,9.505817933,1.264,21.6 -36,100,3430,0,0.01,27,9,2,3,female,2006,23.30668068,9,41.57143021,32.90349197,3,2,1,8.164271047,1.34,28.3 -37,106,3760,0,0.55,31,13,2,5,female,2006,26.0932752,25,39.42856979,34,3,2,0,8.539470682,1.359,30 -38,109,2980,0,-0.42,26,16.1875,2,5,female,2006,18.68512111,12,40.7142868,29,2,2,1,8.824093087,1.27,22.6 -39,111,3400,0,-0.53,33,25,2,3,male,2005,32.8125,9,38.8571434,28.44353104,3,2,1,9.300365047,1.248,23.9 -40,112,3726,0,1.38,25,5.125,3,5,female,2006,18.81892395,15,40.1428566,33,2,2,1,8.167122975,1.38,36.7 -41,113,3242,0,-0.09,30,8,2,5,male,2005,19.47340584,12,41,35,3,2,1,8.829568789,1.3,27.1 -42,120,2575,0,1.28,34,14,3,3,male,2006,21.33821106,30,41.42856979,26.27789116,1,2,0,9.336185261,1.451,29.4 -43,121,3030,0,1.1,32,27,3,3,female,2005,24.9107666,5,41.1428566,30.01231956,2,2,0,8.769336071,1.41,32.9 -44,122,3320,0,0.65,25,15.0625,2,5,male,2006,20.2020202,18,41.1428566,32.36139679,3,2,0,8.271161305,1.39,33 -45,123,4472,0,-0.78,34,26.1875,2,5,female,2006,23.50780533,9,40,37,3,2,1,8.082135524,1.361,26 -46,124,3120,0,-0.26,25,8,2,3,male,2005,21.23057175,11,40.42856979,37,3,2,0,8.539470682,1.229,23.2 -47,125,4022,0,0.62,33,20.0625,2,5,female,2005,24.47709846,11,41.8571434,34,3,2,0,8.950034223,1.328,31.2 -48,128,3848,0,0.24,33,5,2,5,male,2005,19.3337307,11,41,33,2,0,1,8.741957563,1.256,23.2 -49,129,3952,0,0.11,31,2,2,5,male,2006,18.40134298,14,41.8571434,36,3,2,2,8.290212183,1.25,25 -50,131,1564,0,-1.1,32,26,2,5,female,2005,23.01117686,9,34.8571434,37.58795166,3,2,0,8.665297741,1.234,21.6 -51,135,3534,0,0.89,31,21,2,5,female,2006,20.56932966,12,39.1428566,29,3,2,1,8.334017796,1.4,32.6 -52,141,3460,0,1.97,25,7,3,3,female,2006,20.81165504,13,40.57143021,27,2,2,1,8.703741729,1.338,37.8 -53,144,3530,1,1.67,21,38.25,3,3,male,2006,26.83518028,11,40.42856979,39.42505264,3,2,1,8.194387406,1.336,33.9 -54,145,3650,0,-0.4,30,16,2,5,male,2006,21.20310523,12,41,33.12252045,3,2,2,8.492927219,1.429,25.5 -55,146,2750,0,-0.23,26,15.0625,2,3,female,2005,22.98190175,13,39.57143021,36.30390167,3,2,1,9.215719827,1.369,30.2 -56,149,3320,0,-1.38,30,9,2,5,female,2005,18.49649888,7,41,33,3,2,1,9.015742642,1.4,23.3 -57,151,3830,0,0.39,34,6,2,3,female,2005,34.66265106,18,41.2857132,39.09103394,1,2,1,8.777549624,1.366,30 -58,152,3720,0,-0.85,35,27.25,2,5,female,2006,26.953125,10,41.7142868,18.9347477,3,0,0,8.249144422,1.34,23.6 -59,154,3872,0,0.15,27,16.1875,2,5,male,2005,22.265625,12,41.1428566,35,3,0,1,8.911704312,1.355,30.5 -60,155,3310,0,2.28,33,25,4,3,female,2005,36.328125,9,40.42856979,32.87063599,1,2,0,9.618183892,1.409,47.4 -61,160,3400,0,1.17,28,18,3,3,female,2007,23.52941132,11,40,28.21628952,3,2,0,8.780173397,1.277,28.1 -62,162,2600,0,-0.93,34,18,2,5,female,2005,19.0194421,12,39.57143021,33,3,0,0,8.862422998,1.303,24.1 -63,164,3120,1,-1.38,33,8,2,5,male,2007,16.8525225,12,42,34,3,2,0,8.03559206,1.314,24.1 -64,165,2700,0,-0.08,32,10,2,3,male,2006,23.33546638,10,39.1428566,35.86858368,1,2,0,7.969883641,1.23,24.2 -65,166,3580,0,0.33,34,5,2,5,male,2006,20.93663912,12,40,33,3,2,0,8.796600502,1.32,28.8 -66,170,3900,0,1.74,30,17,3,3,female,2007,24.38652611,9,40.1428566,31.85489464,3,2,0,8.257357974,1.365,38.4 -67,171,3600,0,-0.5,32,18,2,3,male,2006,30.09143257,12,41.57143021,31.96988297,3,2,1,8.889915583,1.316,32 -68,175,3430,0,-0.21,34,40,2,3,female,2006,23.01037979,12,40.57143021,35.62765121,2,2,0,8.295801962,1.233,25.1 -69,179,3100,0,0.41,34,31.0625,2,3,female,2005,19.67516708,10,37.8571434,27.49349785,2,2,1,9.319758157,1.34,30.7 -70,180,3988,0,0.58,29,9,2,5,male,2006,24.9107666,28,41.42856979,24,2,2,0,8.610426648,1.39,33.4 -71,187,3220,0,0.14,34,12,2,3,female,2005,23.18339157,11,40,30.77618027,1,2,0,8.763746292,1.345,29.7 -72,188,3490,0,0.45,29,23.125,2,5,male,2007,25.09950066,5,40,30,3,2,1,8.153319644,1.359,30.6 -73,192,3100,0,1.36,26,10.125,3,3,male,2005,23.42209053,12,40.57143021,31,2,2,0,8.763746292,1.267,30.1 -74,193,4400,0,1.57,29,41,3,3,male,2005,21.30394936,23,39.2857132,37.58795166,2,2,0,9.130846452,1.35,34.9 -75,202,3155,0,-1.32,22,2.0625,2,5,male,2006,24.56747405,24,39.1428566,32,3,2,0,8.733744011,1.37,26.6 -76,205,4020,0,-0.89,32,0,2,5,male,2005,22.14532872,11,39.8571434,29,2,2,1,9.470225873,1.434,28.5 -77,209,3795,0,1.16,29,15.125,3,5,female,2006,36.80572128,15,40.7142868,19.06912994,3,2,0,8.07118412,1.414,32.9 -78,210,3430,0,0.08,34,6,2,3,female,2005,20.17325211,16,39.57143021,32.73921967,2,2,1,9.256673511,1.445,35.3 -79,215,3756,1,-0.1,30,5.0625,2,5,male,2006,21.91358025,15,39.7142868,37,3,2,1,8.150581793,1.28,24.1 -80,217,3330,0,0.28,31,3,2,5,male,2005,25.71166229,15,39.57143021,33,3,2,0,9.188227242,1.412,31.4 -81,221,3570,0,0.58,33,3,2,3,female,2005,20.19509315,13,40.2857132,27.69609833,2,1,0,9.451174994,1.34,30.7 -82,222,2980,0,-0.75,28,40.5625,2,3,male,2006,17.71541977,5,40.42856979,24.98562622,1,2,1,9.067761807,1.237,22.7 -83,227,3290,0,1.97,29,5,3,3,male,2005,24,13,40,34.97056961,1,2,1,8.681838923,1.34,35 -84,232,3645,0,0.44,26,8,2,5,female,2006,23.30668005,8,40.8571434,35,3,2,1,8.350558978,1.254,29.8 -85,235,3320,0,-0.91,28,14,2,3,female,2006,23.66524506,18,42.57143021,39.1457901,3,2,1,8.616130504,1.3,24.4 -86,236,3790,0,-0.22,36,23,2,5,male,2005,22.40817899,25,41.57143021,33.74674988,3,2,1,9.440109514,1.349,29.1 -87,240,3450,0,0.51,31,12,2,5,male,2006,30.8112461,8,39.57143021,34.42502213,3,2,0,8.689824321,1.38,32 -88,245,3180,0,-1.29,25,12.125,2,5,male,2005,18.02595738,10,39.57143021,36,3,2,0,9.284052019,1.325,25.3 -89,248,2780,0,0.04,35,25.125,2,3,male,2005,24.74093819,12,38.57143021,32.9500351,3,2,1,9.599018937,1.417,32.8 -90,249,3720,0,-0.9,27,15,2,5,male,2005,17.99816345,12,42.7142868,32,3,2,0,9.524868811,1.432,27.4 -91,250,3158,0,-0.94,34,18,2,5,male,2006,34.15365955,8,37.7142868,40,3,2,0,8.32318047,1.383,27.8 -92,251,2973,0,-0.25,32,9.125,2,5,female,2006,25.71100827,28,38.42856979,40,3,0,0,8.112365959,1.205,22.2 -93,254,3568,0,-0.37,29,16.0625,2,5,female,2006,20.42941836,16,40.7142868,39,3,2,0,8.265571526,1.29,24.7 -94,264,3150,0,-0.28,32,14,2,3,male,2005,22.03856659,10,42.2857132,30.06981468,3,2,0,8.19701118,1.41,33.3 -95,266,2570,0,2.12,24,52,4,3,female,2006,23.5303669,18,37.1428566,27.42778969,1,2,0,8.290326261,1.34,37.6 -96,268,3848,0,1.13,32,4,3,5,female,2005,20.76124567,13,41.57143021,36,3,0,1,8.889801506,1.309,31.9 -97,270,3594,0,1.14,36,28,3,5,female,2006,20.9566075,12,40,33,3,2,1,8.426990646,1.311,30.8 -98,272,3200,0,0.65,31,15,2,3,female,2006,22.77318573,20,41.57143021,35,2,2,0,8.353296829,1.37,32.6 -99,275,3330,0,-0.39,29,5,2,5,female,2006,21.0076678,12,40.57143021,31,2,2,0,8.459958932,1.438,31.4 -100,277,3870,0,0.53,28,11.125,2,5,male,2006,22.49134948,12,40,33,3,2,1,8.479237965,1.358,30.9 -101,279,2415,0,2.37,31,54,4,3,female,2005,26.98962021,14,34.2857132,34.96783066,2,2,2,8.736595939,1.383,43.1 -102,280,4230,0,-0.3,34,15,2,5,male,2006,23.33546614,18,40.8571434,26,2,2,0,8.709103354,1.32,27 -103,282,3550,0,0.51,33,16,2,5,male,2005,25.15589523,17,40.1428566,30,3,0,0,9.215719827,1.365,37.2 -104,284,2820,1,2.36,34,61,4,3,female,2006,29.7577858,10,39.42856979,26.67488098,1,2,1,9.582591832,1.387,45.7 -105,285,3680,0,3.19,30,69.75,4,3,male,2006,37.0447464,25,41.8571434,32.81314087,2,2,0,9.949463838,1.445,56.1 -106,290,4330,0,0.29,35,11.0625,2,5,male,2006,22.03172568,10,41.57143021,30,3,2,0,9.158110883,1.373,31.3 -107,292,3490,0,1.97,28,54,3,3,male,2005,28.04037857,10,40,29.57426453,2,2,1,9.371777321,1.315,36.3 -108,294,2410,0,-0.21,35,43,2,3,female,2005,24.16716194,10,40.8571434,35.42231369,3,2,0,8.980150582,1.361,29.1 -109,295,3032,0,1,33,24,3,5,male,2005,22.40587695,20,40.2857132,31,2,2,1,9.180013689,1.343,32.9 -110,297,3080,0,2.7,26,15,4,3,male,2006,38.93480301,9,37.8571434,35.34291458,2,2,0,8.79945243,1.312,39.1 -111,298,4378,0,1.11,32,12.1875,3,5,male,2007,22.64737696,12.5,40.2857132,32,3,2,0,8.005475702,1.432,32.8 -112,299,3202,0,2.61,33,37.3125,4,3,male,2005,35.2955513,0,40.1428566,28.7638607,2,2,0,9.618183892,1.432,48.3 -113,300,3360,0,0.75,31,32.25,2,5,female,2006,25.05930703,24,40,28,2,2,2,9.582591832,1.38,33.1 -114,301,4670,0,2.44,27,62,4,5,male,2005,24.22145329,8,42.1428566,24.58607292,2,2,0,8.747433265,1.48,39.1 -115,302,3160,0,2.16,26,49,4,3,male,2006,19.4674015,14,41.42856979,27.99033165,2,2,0,8.941820671,1.35,40.3 -116,303,3200,1,1.27,26,17.0625,3,5,female,2005,21.06674327,11,37.1428566,39,3,2,2,8.418777093,1.407,36.7 -117,305,3606,0,0.07,30,22.25,2,5,male,2007,22.4996371,10,39.42856979,32,3,2,0,8.150581793,1.3,25.2 -118,309,3370,0,1.01,19,58.5,3,3,male,2006,25.09950066,12,41.1428566,30.87200546,1,2,0,8.804928131,1.33,31.6 -119,311,3850,0,-0.36,29,9,2,5,male,2005,20.38156971,15,38.7142868,31,3,2,1,8.848733744,1.322,27 -120,316,3140,0,-0.14,23,9,2,5,female,2006,20.30741221,20,41.2857132,36.31040573,3,2,1,7.770020534,1.23,25.2 -121,317,3916,0,-0.73,34,20.1875,2,5,female,2006,25.60553633,12,41.8571434,30,3,2,0,8.290326261,1.272,23.6 -122,319,3084,0,0.1,32,13,2,5,female,2006,25.6543724,27,39,26,3,2,0,8.353296829,1.232,26.6 -123,321,3970,0,0.96,24,60,2,3,male,2006,25.76571274,10,38.7142868,36.22998047,3,2,0,7.780971937,1.329,32.2 -124,323,3862,0,1.47,33,10.25,3,5,male,2006,25.21735858,10,39.8571434,33,3,2,1,8.32318047,1.326,32.8 -125,325,3280,0,1.29,31,45,3,3,female,2005,20.19557762,20,41.42856979,38.23682404,1,2,0,9.270476842,1.359,35.4 -126,327,4540,0,-0.68,24,24,2,5,male,2005,26.4815197,19,41.2857132,24,2,0,0,8.944558522,1.333,26.7 -127,330,3608,0,0.02,34,21,2,5,female,2005,24.15881797,18,39.57143021,34.42502213,3,2,1,7.93155373,1.339,31.6 -128,332,3058,1,0.68,31,13.125,2,5,male,2006,26.6727633,17,37.42856979,32,3,0,0,8.06844627,1.33,27 -129,336,3722,0,2.48,26,120,4,3,female,2006,19.83471107,10,41,32.62696838,2,2,1,8.917180014,1.39,44.1 -130,338,3250,1,0.14,32,24.3125,2,5,female,2006,20.96436059,25,40.7142868,30,3,2,1,8.054871093,1.225,24 -131,339,3785,0,1.56,32,17.5,3,5,male,2006,23.83673469,10,40.7142868,28,3,2,0,8.158795346,1.451,39.4 -132,344,3860,0,1.77,32,57,3,3,female,2005,22.3132782,17,41.8571434,28.0834465,2,2,0,8.426990646,1.395,36.7 -133,346,3620,0,1.08,29,9.0625,3,3,male,2006,17.85651779,17,37.1428566,43.50547791,1,0,1,7.299110198,1.374,37.6 -134,347,3154,0,-0.58,33,59.375,2,5,female,2006,22.5710475,13,39.42856979,31,3,2,2,8.153433721,1.261,23.5 -135,348,3822,0,-1.11,33,28.0625,2,5,male,2006,24.56747405,15,42.2857132,29,3,2,0,8.06844627,1.232,21.7 -136,350,3608,0,-0.07,34,5.0625,2,5,female,2006,22.05805119,8,40.2857132,30,3,2,1,8.221765914,1.392,23.6 -137,352,2414,1,2.8,30,13,4,5,male,2006,28.93518519,11,35.42856979,36,3,0,0,8.301277664,1.303,38.1 -138,356,3454,0,-0.17,30,28.4375,2,5,female,2006,19.48696145,17,42.7142868,33.10335541,3,2,0,8.235569245,1.214,22.8 -139,357,3010,0,-0.08,32,29,2,3,male,2006,21.54509163,20,40.8571434,34.94045258,3,2,0,8.134154689,1.25,24.4 -140,362,3220,0,2.29,26,16.125,4,3,female,2006,26.29172325,13,42.1428566,31.16221809,3,2,0,8.416267397,1.29,33.3 -141,364,3490,0,1.06,34,1,3,5,female,2006,22.27530992,16,38.42856979,30,3,0,0,8.273899156,1.366,33.7 -142,365,3070,0,0.55,32,25.375,2,3,female,2005,22.1002903,17,41.42856979,30.6365509,3,2,0,9.683892311,1.334,31.4 -143,368,3675,0,0.16,28,17.125,2,5,female,2006,22.98190175,8.5,40,37,3,2,0,8.082135524,1.292,26.8 -144,369,2540,0,-0.5,29,5,2,3,female,2006,22.49135017,8,40,40.08761215,3,1,0,8.536504677,1.295,25.6 -145,370,3890,0,0.45,20,17,2,5,male,2006,17.99307958,21,40.57143021,37,3,2,1,8.167008898,1.416,33.1 -146,371,3882,0,-0.81,26,8,2,5,male,2006,20.47826661,15,41.7142868,30,3,2,0,8.125941136,1.35,27.1 -147,375,3180,0,0.79,26,48.375,2,3,male,2006,22.30814934,9,40,38.62559891,3,2,1,8.547684235,1.46,36.9 -148,377,3080,0,-0.37,35,20,2,3,male,2005,28.22838593,5,39.42856979,39.09650803,1,2,2,9.429272188,1.367,29.2 -149,378,3970,0,-0.03,27,47.3125,2,3,female,2005,20.70081711,17,41.42856979,24.11225128,3,2,0,8.736595939,1.328,28.8 -150,382,2550,0,-0.37,30,48.375,2,3,male,2006,18.49548531,18,38.57143021,28.32854271,3,2,0,7.556354095,1.26,21.7 -151,383,1757,0,-0.03,30,9.0625,2,5,male,2006,22.49134948,13,32.1428566,33,3,0,0,8.750285193,1.283,26.2 -152,384,3280,0,0.92,29,10.1875,2,3,female,2005,23.38435364,14,40,32.74195862,1,2,0,9.251311887,1.355,32.4 -153,385,3000,0,2.49,28,33.3125,4,3,male,2005,25.33333397,13,38.2857132,28.83059311,2,2,1,8.810403833,1.352,34.8 -154,388,3880,0,1.44,33,5.125,3,5,female,2007,21.33821064,24,40.42856979,33,2,2,2,8.161533196,1.262,30.2 -155,389,3475,0,0.72,32,55,2,3,male,2006,26.17519379,18,40.57143021,33.2840538,1,2,0,8.139744467,1.392,30.5 -156,390,4090,0,0.35,27,23.25,2,3,female,2006,27.29322433,21,41.7142868,27.38672066,1,2,0,8.988364134,1.33,29.7 -157,394,3480,0,0.16,28,49,2,3,male,2005,23.4375,14,40.1428566,31.46064377,1,1,0,8.84337212,1.312,28 -158,395,3242,0,0.47,24,4,2,5,male,2007,22.14532872,7,41.1428566,35.075737,3,2,1,6.921172713,1.25,28.2 -159,396,2780,0,-0.14,30,8,2,3,female,2006,21.07719612,8,38.42856979,31,2,2,1,8.032854209,1.215,25.7 -160,401,3940,1,0.86,25,36,2,5,male,2006,20.51913409,9,37.8571434,29,3,2,1,8.262833676,1.348,31.4 -161,403,3600,0,0.6,35,8,2,5,male,2006,20.390625,3,39.7142868,34,3,2,0,8.402578143,1.323,29.8 -162,404,3810,0,1.49,32,59.375,3,5,male,2006,27.7767067,14,40.8571434,32.90349197,3,2,2,8.657198266,1.39,37.6 -163,405,3608,0,-0.45,24,29.25,2,5,female,2006,22.40817899,20,39.1428566,33,3,2,1,8.28758841,1.313,25.9 -164,407,3550,0,2.75,32,20,4,3,male,2005,39.78286743,11,40.8571434,30.26146507,2,2,0,9.037645448,1.343,49 -165,411,2840,0,-1.11,34,11,2,5,male,2005,19.77769867,9,38,32,3,2,1,8.720054757,1.26,22.9 -166,412,3875,0,-0.89,27,13,2,3,male,2006,20.34279823,12,41.7142868,34.19028091,3,2,1,7.556354095,1.3,24.4 -167,413,3970,0,0.92,31,48.375,2,3,male,2005,24.67702103,8,39.8571434,32.46543503,2,2,1,9.11430527,1.325,31.8 -168,416,4000,0,-1.08,34,17.125,2,5,male,2006,36.80572128,10,41.7142868,32.60232544,3,0,1,8.627081907,1.375,27.3 -169,417,2890,0,0.24,28,7,2,3,female,2005,20.19509315,7,40,32.36139679,2,2,0,9.185489391,1.305,22.2 -170,439,4230,0,-0.06,31,21,2,5,male,2005,20.47826661,14,42.7142868,39,3,0,0,9.065023956,1.366,29.8 -171,442,3200,0,2.78,27,41.5625,4,3,female,2006,24.609375,22,41.8571434,25.29226494,1,2,0,8.586014146,1.38,38.1 -172,448,3355,0,1.13,28,13,3,3,female,2006,19.47340584,20,40,39.19233322,2,2,1,9.160734657,1.39,36.3 -173,451,2910,0,-0.74,22,56.3125,2,3,male,2005,23.62444687,9,39,29.89733124,1,2,0,9.297741273,1.29,27.6 -174,453,3520,0,2.98,33,76,4,3,male,2005,26.92743683,55,41,33.10335541,1,2,1,9.429272188,1.444,52 -175,458,3750,0,2.26,28,8,4,5,female,2005,24.38652644,11,40,43,3,2,0,8.826716861,1.36,37.5 -176,459,3120,1,1.03,27,49,3,3,male,2005,25.07812309,10,38.8571434,23.82204056,2,1,0,8.509354324,1.429,36.2 -177,461,3920,0,2.27,34,8,4,3,female,2005,40.77122498,2,40.1428566,34.6475029,2,2,1,8.840634269,1.33,39.7 -178,463,3502,0,-0.13,34,3,2,5,male,2007,20.61925365,20,41,34,3,2,1,8.073921971,1.388,29.7 -179,467,3180,0,-0.3,26,57,2,3,male,2006,21.50446892,18,40.7142868,35.92881775,3,2,1,8.777663701,1.29,23.7 -180,468,2970,0,-0.19,23,13,2,3,female,2005,21.15529442,18,42.1428566,32,2,2,0,8.851471595,1.295,26.3 -181,469,3415,0,2.45,30,5,4,5,male,2005,23.87511478,10,41.2857132,25,3,2,0,8.950034223,1.33,38.8 -182,470,2360,0,0.01,26,12,2,3,female,2005,22.89282036,16,38,27.06365585,1,2,0,8.840634269,1.347,29.6 -183,471,3400,0,0.14,29,41.3125,2,3,male,2006,18.90359116,6,41.1428566,33.40999222,2,2,1,8.364248232,1.306,27.4 -184,473,3640,0,0.76,26,19,2,3,female,2005,26.91272545,13,39.2857132,33.49213028,3,2,1,9.659251654,1.309,31.1 -185,476,3600,0,0.23,32,5,2,5,male,2005,21.10726644,8,40.57143021,34.00136948,3,0,2,8.591261693,1.353,30.6 -186,478,3290,0,-0.72,32,3,2,5,female,2007,26.89767075,20,39.1428566,29,3,0,1,6.954140999,1.216,21.5 -187,480,4850,0,-0.27,32,0,2,5,male,2006,23.80869017,20,40.57143021,35,3,2,2,8.087611225,1.402,30.2 -188,481,4350,0,1.22,25,4,3,5,male,2006,21.484375,10,42.2857132,31,2,2,1,8.429956651,1.386,32.4 -189,482,3950,1,-0.88,33,36.25,2,3,male,2006,20.3710289,12,43.2857132,19.06912994,1,2,0,8.134154689,1.206,19.6 -190,485,4016,0,-0.42,32,9,2,5,male,2005,21.383942,12,39,31,2,0,0,9.188227242,1.355,26.4 -191,490,2770,0,1.24,31,65,3,3,male,2006,20.95660782,25,41,27.70431137,1,2,1,8.189025781,1.359,28.3 -192,492,2710,0,-0.89,26,26,2,3,male,2005,37.05335617,8,37.2857132,38.02327347,3,2,1,9.549737623,1.317,26.2 -193,493,3442,0,-0.14,28,13.1875,2,5,female,2006,20.70081674,20,42.1428566,30,3,2,1,8.662673968,1.31,26.9 -194,497,3670,0,2.89,32,23,4,3,male,2005,20.39542198,8,42.2857132,34.45585251,1,2,1,8.736595939,1.39,46.5 -195,499,4064,1,0.63,29,13.125,2,5,female,2005,25.30864198,9,41.1428566,31,3,2,0,8.813027607,1.401,34 -196,501,3230,0,1.34,33,7,3,5,female,2005,26.29757785,12,36.8571434,41,3,2,1,8.875998175,1.432,39.4 -197,507,3820,0,-0.93,35,10,2,3,female,2005,25.15589523,18.5,42,31,3,2,1,8.769336071,1.306,25 -198,510,3230,0,2.39,25,50,4,3,female,2005,23.12467003,17,39.57143021,25.79055405,2,2,0,9.04312115,1.331,41.2 -199,515,3220,0,-2.5,30,7,1,3,female,2006,22.86236763,10,40,37.35523605,2,2,0,8.41889117,1.308,21.3 -200,517,3446,0,0.32,24,16,2,5,female,2006,18.40134298,15,38.2857132,34,3,2,1,8.257357974,1.333,29.1 -201,518,3222,0,-0.36,32,7,2,5,male,2005,18.37682515,12,40,36,3,0,1,9.075975359,1.377,29.7 -202,522,3395,0,2.37,32,20,4,3,male,2006,22.27531052,9,39.57143021,32.15605927,3,2,0,8.273899156,1.455,43.5 -203,524,2761,0,0.53,29,8,2,5,female,2006,21.45357371,12,38,29,2,2,0,8.503650468,1.347,30.7 -204,525,3750,0,-0.02,36,7,2,5,male,2006,24.77209671,15,41.42856979,31.73169136,3,2,1,8.744695414,1.39,30.8 -205,526,3950,0,1.29,34,25,3,5,female,2006,23.53304271,16,42.2857132,27,2,2,2,8.906228611,1.387,35.6 -206,531,3816,0,-0.43,17,28.5625,2,5,male,2006,23.91883029,4,39,36,3,0,0,7.252566735,1.28,24.5 -207,532,4328,0,-0.35,30,5.0625,2,5,female,2005,22.22906193,20,41.1428566,37,3,2,1,9.28678987,1.459,33.2 -208,536,3790,0,1.41,31,40,3,5,male,2006,25.20920136,17,40,30,3,2,1,7.780971937,1.365,34.5 -209,541,4335,1,-0.32,30,3,2,5,male,2006,22.65625,20,43,31,3,2,1,8.563883185,1.313,26.6 -210,543,3330,0,0.43,29,13,2,5,male,2006,23.046875,10,41,35.94797897,3,2,1,8.873374401,1.28,27.3 -211,544,3350,0,0.52,32,9,2,3,male,2005,15.88278389,11.5,41.42856979,28,3,2,1,8.810289756,1.26,26.8 -212,548,3530,0,0.65,30,19.25,2,3,female,2006,18.90690041,8,40.8571434,35.73716736,2,2,0,8.421743098,1.325,30.1 -213,550,3400,0,1.06,31,20,3,3,male,2005,23.42209053,25,37.7142868,29.75222397,2,2,0,9.451174994,1.345,34 -214,551,3625,0,1.22,32,8,3,5,female,2006,25.82644628,8,37.57143021,37,3,2,1,8.613164499,1.368,34.9 -215,553,3714,0,1.52,33,17,3,5,female,2005,22.64737696,17,38.7142868,31,3,2,1,8.925393566,1.415,39.6 -216,554,4390,1,1.23,31,2.0625,3,5,female,2007,25.37532234,20,40.2857132,37,3,2,2,6.954140999,1.368,34.3 -217,563,3500,0,0.06,30,13,2,3,female,2006,26.67276382,32,41.8571434,36.18891144,1,2,1,8.314738763,1.241,24.5 -218,567,4122,0,0.47,29,7.0625,2,5,female,2006,20.69049454,12,40.1428566,36,3,2,2,8.372461784,1.282,27.5 -219,568,2960,0,0.71,24,20,2,3,female,2006,22.86236763,15,40,31.3155365,3,2,0,8.777663701,1.339,29.85 -220,571,3150,0,-0.92,23,17.125,2,3,male,2006,22.67573738,7,37.8571434,38.58726883,1,2,1,8.481975816,1.36,27 -221,574,4280,0,2.97,21,97,4,3,female,2007,45.4887085,0,39.57143021,34.32717133,1,2,1,8.188911704,1.352,41.9 -222,576,2321,0,-1.3,30,7,2,5,female,2007,20.32443826,5,41.2857132,36,3,2,1,8.032854209,1.283,25.7 -223,580,3748,0,0.56,35,3,2,5,female,2005,20.04744562,17,40.7142868,33,3,2,1,8.947296372,1.361,31.1 -224,581,2708,0,-1.26,33,12.0625,2,5,male,2006,16.22406387,20,37.42856979,31,3,2,0,8.301277664,1.34,25.4 -225,583,3300,0,-0.54,23,19,2,3,female,2005,22.6002636,18,41.1428566,32.15058136,1,2,1,8.665297741,1.235,22.9 -226,584,3160,0,1.08,36,16.25,3,3,male,2006,21.33821106,9,42,36,3,1,0,8.347821127,1.28,29.1 -227,587,4584,0,0.1,19,18,2,5,male,2006,24.9107674,12,41.8571434,32,2,2,2,8.610426648,1.285,28 -228,590,3366,0,0.35,27,8.0625,2,5,male,2007,19.95728441,12,38.2857132,30,3,2,0,8.161533196,1.34,28.7 -229,591,3788,0,0.64,25,16.1875,2,5,female,2006,21.71925011,25,39,31,3,2,1,8.128793064,1.381,32.4 -230,595,3180,0,0.74,26,65.5625,2,3,female,2005,26.89767075,15,41.2857132,35.55920792,3,1,1,9.185489391,1.215,25.7 -231,596,3970,0,0.19,27,23,2,5,male,2005,22.49134948,20,40.1428566,30,3,2,1,9.363449692,1.368,30.9 -232,598,4328,0,1.15,33,8.0625,3,5,male,2005,20.46334457,28,39,36,3,2,2,8.917180014,1.405,35.9 -233,602,3660,0,-0.42,32,34,2,3,male,2005,25.78125,4,40,31.30458641,2,2,1,9.656513803,1.285,25.8 -234,606,3530,1,-0.26,24,47.0625,2,5,male,2006,21.60410478,25,40,26,2,2,0,8.213552361,1.305,25.8 -235,609,2596,0,1.33,24,8.125,3,5,female,2006,26.81359045,6,36.2857132,34,2,2,0,8.854209446,1.31,37.8 -236,610,3330,0,-0.43,35,9,2,5,female,2006,19.83471074,13,42.8571434,31,3,0,1,8.32318047,1.295,25.3 -237,611,4050,0,0.04,33,0,2,5,male,2006,22.94811574,15,39.57143021,31,2,2,0,8.314852841,1.244,24.6 -238,621,3660,1,-0.03,33,23,2,5,male,2006,24.60973358,10,41,33,2,2,1,8.876112252,1.377,28 -239,624,3280,0,0.74,31,3,2,3,male,2005,19.72103691,10,40,29.65366173,2,2,0,8.922655715,1.395,30.1 -240,629,3080,0,1.46,26,29,3,3,male,2006,25.39021873,12,38.2857132,30.87748146,3,2,0,8.041067762,1.414,36.8 -241,630,2990,0,-0.7,31,29,2,3,male,2006,19.26615715,8.5,37.8571434,36.7638588,3,2,0,8.030116359,1.285,27.3 -242,634,2910,0,0.57,25,22.25,2,3,female,2006,18.14486885,14,38.42856979,25.33607101,1,2,0,8.109514031,1.342,30.3 -243,635,4350,0,-0.85,28,2,2,5,male,2005,21.46193662,20,41.1428566,32,3,2,1,9.793406343,1.402,27.4 -244,636,4668,0,0.09,31,30,2,5,male,2007,20.38156971,18,41.2857132,32.22317886,3,2,1,8.109514031,1.341,23.6 -245,637,3280,0,1.58,30,18,3,3,female,2005,21.30394936,0,40.7142868,32.91444397,2,2,1,8.947296372,1.365,37.6 -246,638,3520,0,1.45,31,18,3,3,female,2006,26.56434441,13,41.1428566,33,3,2,0,8.550308008,1.34,34.6 -247,639,3100,0,-0.3,28,51,2,5,male,2007,28.19544411,13,39.2857132,40,3,2,2,8.062970568,1.34,27.5 -248,640,3614,0,-0.32,24,13,2,5,male,2006,22.7189744,16,40,33,3,0,0,8.344969199,1.352,27.3 -249,644,3475,1,-0.1,22,0,2,5,male,2007,20.76124567,10,41.8571434,37,3,2,2,8.065708419,1.315,27.1 -250,645,3750,1,2.85,33,13,4,3,male,2006,31.91930771,8,41.57143021,35.84667969,1,2,1,8.139744467,1.44,46.5 -251,647,4442,0,1.28,30,42,3,3,male,2006,27.68877792,19,44,30.49418259,2,2,0,8.583048141,1.31,31.4 -252,654,4080,0,-0.81,29,0,2,5,female,2006,20.32225287,12,40.7142868,31,3,0,0,8.224503765,1.336,25.8 -253,655,3362,0,-1.06,28,10,2,5,female,2006,26.64359862,8,39.7142868,35,3,2,1,8.854209446,1.302,23.9 -254,656,4274,0,-0.28,13,18,2,5,male,2006,21.2244898,8,41.57143021,31,3,2,1,8.388774812,1.337,26.3 -255,658,2500,0,-0.12,30,12,2,5,female,2006,38.89807129,15,39.7142868,32.85694885,2,2,0,8.596737394,1.421,31.5 -256,660,3266,0,0.71,32,30,2,5,male,2006,26.33288875,25,40,43.50547791,3,2,1,8.221879991,1.433,34.9 -257,661,2980,0,0.94,23,29,2,3,female,2006,20.19509315,20,40.42856979,25.80150604,2,2,0,8.126055213,1.33,28.2 -258,665,2740,0,-1.68,32,5,2,5,male,2006,17.00680272,17,38.7142868,35,2,2,2,8.665183664,1.25,21 -259,668,2760,0,0.13,31,7.0625,2,5,male,2006,16.22406387,20,34.8571434,37,3,2,2,8.180698152,1.27,25.8 -260,674,3910,0,-1.15,22,7,2,5,male,2006,20.32225287,20,40.7142868,32,3,2,0,8.824093087,1.315,24.9 -261,675,3210,0,-0.01,31,13.1875,2,5,female,2005,27.33564014,20,41.1428566,40.08761215,3,2,1,9.500456308,1.328,28.8 -262,677,3330,0,-0.65,28,6,2,3,female,2006,20.47826576,14,39.2857132,37.39630508,3,1,0,8.416267397,1.35,27.3 -263,678,3342,0,0.14,31,19,2,3,female,2005,24.03440666,10,39.8571434,35.21697617,3,2,1,8.281998631,1.268,25.8 -264,680,3090,0,2.21,33,48.4375,4,3,female,2006,28.125,8,39.1428566,34.8911705,3,2,0,8.183436003,1.328,37.9 -265,681,3740,0,0.87,36,29.3125,2,3,female,2005,23.33546638,9,39.7142868,31.58384705,3,2,0,8.506502396,1.3,30.7 -266,684,3630,0,1.95,32,0,3,5,male,2007,20.91070816,9,39.2857132,34,3,0,0,8.112251882,1.315,30.1 -267,685,3280,0,0.11,31,2,2,3,female,2006,26.89232254,8,42,34.47227859,3,2,1,8.750171116,1.407,28.2 -268,688,3700,0,2.05,29,17,4,5,female,2006,23.32341766,9,42.42856979,29,3,2,1,8.191649555,1.37,40.1 -269,690,4442,0,3.23,33,33.1875,4,5,male,2006,33.59375,11,41.57143021,37,2,2,1,8.90349076,1.52,57.3 -270,691,3300,0,1.34,28,25.125,3,3,male,2006,33.73250198,3,39.42856979,26.02053452,2,2,1,8.227241615,1.312,31.4 -271,693,4154,1,-0.99,28,4.0625,2,5,male,2006,24.44727891,11,42.2857132,34,3,2,1,8.265571526,1.34,26.2 -272,695,2943,0,0.53,25,13,2,5,female,2005,19.84126984,13,41.2857132,31,3,2,1,8.637805156,1.317,30.3 -273,702,4120,0,3.41,34,11,4,3,male,2005,26.171875,0,41.57143021,31.18959618,2,2,0,8.736595939,1.359,46.8 -274,703,3730,0,-0.94,35,4.125,2,5,male,2005,23.30668005,13,40,41,3,2,2,9.40189368,1.412,26.7 -275,708,3424,1,-0.23,34,3.0625,2,5,female,2006,21.4532872,5,40.57143021,30,2,2,0,8.440908054,1.247,24.1 -276,709,3478,0,0.68,30,7,2,5,female,2005,26.57312925,15,40.7142868,34,3,0,2,8.345083276,1.303,31.4 -277,710,3530,0,1.04,24,21,3,3,male,2006,21.604105,13,40.7142868,37.17727661,2,2,2,8.180698152,1.257,27.8 -278,713,3934,0,0.54,33,7,2,5,male,2006,20.2812331,17,40.2857132,30,3,2,0,8.555897787,1.409,33.3 -279,715,3604,0,0.03,22,2,2,5,female,2006,25.30864198,8,36.57143021,36,2,2,1,8.837782341,1.387,30.6 -280,716,3500,0,0.8,27,31.375,2,3,female,2006,35.55555725,5,40.42856979,31.9096508,1,2,1,8.432694501,1.24,23.3 -281,720,3300,0,1.98,30,43,3,3,female,2005,20.96436119,18,39.8571434,32.84051895,2,2,0,8.706365503,1.31,36.3 -282,724,3260,0,-1.15,32,16,2,5,female,2007,19.13265306,12,40.42856979,35,3,0,0,8.06844627,1.277,23.2 -283,731,3140,0,0.33,32,53.75,2,3,male,2006,22.7583065,17,38,33.12252045,3,2,0,8.279146703,1.359,29.7 -284,733,3565,0,-1.03,18,23,2,3,male,2006,20.4467411,13,39,33.6125946,2,2,1,8.492927219,1.248,22 -285,734,3740,0,-0.1,35,14.125,2,5,female,2006,22.95908737,20,40.1428566,37,3,2,0,8.213552361,1.361,27.9 -286,736,2926,0,-0.36,23,15,2,5,female,2007,22.12711525,12,40.57143021,31,3,2,0,6.954140999,1.28,21.4 -287,738,4340,0,0.8,34,2,2,5,male,2006,20.33832645,12,42.57143021,34,2,2,2,8.317704768,1.37,31.9 -288,739,3020,0,0.2,32,13,2,3,male,2005,21.35991478,11,38.8571434,32.35865784,3,2,0,8.87063655,1.404,32.2 -289,740,3250,0,1.47,31,55,3,3,female,2005,20.79673004,18,41,29.47022629,2,2,0,9.404631531,1.36,36.5 -290,746,4442,1,1.56,30,12,3,5,male,2006,34.57763236,20,42.1428566,27,3,2,0,8.213552361,1.341,26.7 -291,748,3768,0,-0.39,24,11,2,5,female,2006,20.06920415,15,40.8571434,27,2,2,0,8.186173854,1.304,24.8 -292,750,3040,0,-0.64,28,45.3125,2,3,male,2005,22.94213104,11,40,34.93223953,2,2,1,9.256787588,1.39,23.6 -293,751,3843,0,1.96,34,2,3,5,female,2007,40.33377838,15,41.7142868,38,3,2,1,8.114989733,1.389,39.6 -294,757,3378,0,0.4,34,29,2,5,female,2005,18.40134298,20,41.1428566,32,3,2,0,8.919803787,1.378,31.8 -295,760,2935,0,-0.35,34,45.375,2,5,female,2006,21.07719523,12,38.8571434,31,3,2,0,8.109514031,1.308,24.8 -296,763,4335,0,-0.48,19,2,2,5,male,2005,28.40054796,7,41.1428566,34,2,2,1,8.914442163,1.412,30.5 -297,767,4100,0,0.44,30,5.1875,2,5,male,2007,20.24489796,27,40.8571434,35,3,2,2,8.150581793,1.315,28.5 -298,770,3425,0,-1.19,29,17,2,3,male,2005,21.04804802,10.5,40.2857132,32.57494736,3,2,0,9.064909879,1.296,24.2 -299,771,4246,1,0.38,30,15,2,5,female,2005,23.45856238,13,41.8571434,35,3,2,0,8.873374401,1.33,29.2 -300,772,2825,0,-0.67,29,9,2,5,female,2006,21.875,20,41,33,3,0,0,7.014373717,1.395,28.6 -301,780,3660,0,-0.65,20,28,2,5,female,2005,20.04744562,11,38.7142868,34,3,2,1,8.451631303,1.275,24 -302,782,3916,0,-0.47,33,7,2,5,male,2006,19.03114187,14,41.1428566,32,3,2,0,8.413529546,1.357,26.2 -303,785,2780,0,1.68,30,16,3,3,female,2005,19.13265228,25,40.57143021,29.05954742,2,2,0,9.618183892,1.315,36.2 -304,786,3270,0,-0.12,25,41,2,3,male,2006,22.18934822,13,41.42856979,28.78302574,1,2,1,7.299110198,1.236,24.1 -305,793,3250,0,0.8,31,33,2,3,male,2005,22.3214283,18,40,31.71252632,2,2,1,9.949463838,1.452,32.2 -306,795,3460,0,-0.77,31,35.375,2,5,male,2007,23.80869017,13,39,34,3,2,0,8.062970568,1.34,26.4 -307,796,3300,0,-0.62,30,43,2,3,male,2006,18.37682515,9,40.2857132,31.45790482,2,2,0,8.596965549,1.34,22.7 -308,799,3710,0,1.74,33,11,3,3,male,2005,19.95728493,12,39.7142868,36.15605927,2,2,1,9.026694045,1.422,39.9 -309,800,2960,0,1.22,25,25,3,3,male,2006,31.10003662,20,39.57143021,27.09103394,3,2,0,8.632329455,1.315,32.3 -310,801,4406,0,0.31,34,7,2,5,female,2006,32.87197232,7,40.1428566,27.55099297,2,2,1,8.016427105,1.337,29 -311,808,3860,0,-0.72,31,24.25,2,5,female,2006,22.95908737,12,41.7142868,33,2,2,1,8.128793064,1.232,25.7 -312,811,3440,0,-0.5,28,3.125,2,5,male,2006,17.00680272,9,39.57143021,34,3,2,0,8.049281314,1.326,24.9 -313,814,4180,0,-0.11,33,5,2,5,female,2005,25.02976036,10,42.42856979,30,3,2,1,8.698151951,1.34,28.3 -314,815,3040,0,2.03,31,7.0625,4,3,female,2005,26.34649467,20,40,30.10266876,2,2,0,9.251311887,1.403,43.8 -315,817,3370,0,-0.62,31,49.3125,2,5,male,2006,21.79930796,35,40.42856979,27,2,2,0,8.295687885,1.283,24.1 -316,818,3202,0,0.42,33,8,2,5,female,2006,22.53061224,7,40,30,3,2,0,8.429956651,1.266,32.1 -317,821,3860,0,-0.43,33,8,2,5,male,2006,18.30576947,11,39.42856979,30,3,2,0,8.208190737,1.4,29.9 -318,823,3380,0,1.28,32,52,3,3,female,2005,22.03172493,9,40.42856979,29.85626221,2,2,0,9.900182523,1.405,38.1 -319,824,4100,0,0.8,32,2,2,5,male,2005,22.10028959,30,40.57143021,37,3,2,2,8.763746292,1.31,31.3 -320,826,4180,0,0.67,29,6.1875,2,5,male,2006,18.90690102,5,41.7142868,35,3,2,1,8.123317363,1.35,30.5 -321,840,3210,0,2.28,23,78.5,4,3,male,2006,24.87771988,20,40,37.37714005,1,2,1,8.254506046,1.275,33.6 -322,841,3400,0,0.96,32,5.0625,2,3,male,2005,19.25702858,10,38.8571434,33.24298477,3,2,0,9.369039471,1.378,30.9 -323,842,3490,0,-0.52,32,26,2,5,female,2006,21.63331531,13,40,31,3,2,0,8.503650468,1.341,27.2 -324,844,3690,0,0.62,32,20,2,3,female,2005,20.43816566,18,44.1428566,31.9096508,1,2,1,8.783139402,1.336,29.8 -325,850,3515,0,1.93,31,21,3,3,female,2005,22.14532852,13,40.42856979,36.21081543,3,2,0,7.93155373,1.29,34.3 -326,853,3338,0,1.13,33,10.25,3,5,male,2006,22.30935641,15,38.57143021,33,2,2,1,8.369723933,1.423,36.6 -327,857,3913,0,2.1,28,5,4,3,male,2006,22.4996376,8,40,32.16700745,2,2,1,8.221765914,1.345,36.4 -328,860,3420,0,0.82,32,10.0625,2,5,female,2007,20.41522491,8,41.42856979,32,3,2,1,8.153319644,1.319,24.9 -329,861,4070,0,1.1,24,60,3,3,female,2006,27.43484306,12.5,40.1428566,36.95550919,2,2,1,7.583960757,1.295,29.8 -330,862,2990,0,0.51,30,6,2,3,female,2007,19.87910271,10,39.8571434,33.74674988,3,2,0,8.010951403,1.266,26.9 -331,880,3530,1,2.95,32,26,4,3,male,2005,32.04587555,25,42,29.14168358,3,2,0,8.966461328,1.343,53.3 -332,881,3460,0,1.01,32,29.25,3,3,female,2006,24.84098053,23,40,36.48186111,2,2,0,7.909536847,1.359,34 -333,886,3650,0,1.01,32,10.0625,3,5,female,2005,24.18745232,8,42,33,3,2,0,8.911704312,1.435,38.1 -334,890,2990,0,0.27,24,10.125,2,3,male,2006,17.71541977,18,38.2857132,27.54551697,3,2,0,8.188911704,1.349,30.1 -335,894,3600,0,-0.85,32,26.1875,2,5,male,2006,24.38237298,15,39.57143021,37,3,2,1,8.186287931,1.266,25.4 -336,897,2680,0,-1.99,30,13,2,3,male,2006,20.06095505,10,39.8571434,30.90485954,2,2,0,8.969199179,1.325,23.7 -337,902,3200,0,0.35,33,13,2,5,female,2005,22.23098713,18,40.1428566,35,2,2,2,9.130846452,1.39,32.2 -338,905,3215,1,-0.79,31,20.25,2,5,male,2006,21.2244898,12,38.42856979,37.58795166,3,2,1,8.563883185,1.387,28.6 -339,907,3795,0,1.6,33,12.125,3,5,male,2006,26.42356982,16,39.8571434,35,3,2,2,8.191649555,1.432,38.6 -340,912,3396,0,-0.33,35,9,2,5,male,2006,22.14532872,10,41.57143021,33,3,2,0,8.07118412,1.37,29.2 -341,913,3050,0,-0.02,32,62,2,3,male,2006,19.14672279,9,37.8571434,39.96988297,2,2,1,7.909536847,1.195,23.2 -342,916,3130,1,-1.04,35,15,2,5,female,2006,28.36035153,12,38.2857132,28.48186111,2,2,0,8.060232717,1.195,20.1 -343,917,3040,0,-0.58,28,22.1875,2,3,female,2005,23.833004,32,41.1428566,36,2,2,2,7.225188227,1.298,30.5 -344,923,3500,0,-0.14,31,47,2,3,female,2006,20.1171875,12,39.2857132,38.23682404,3,2,1,8.492927219,1.28,26.3 -345,926,3015,0,-0.27,28,11,2,3,female,2005,18.68512154,15,36.8571434,40.97868729,2,2,0,8.952772074,1.405,33.3 -346,928,3460,0,-0.11,28,42.0625,2,3,female,2005,21.09375,7.5,41.2857132,31.18959618,2,2,0,8.695528177,1.418,31.7 -347,929,3670,1,-1.43,33,10.0625,2,3,male,2006,18.97092247,12,40.2857132,31.10472298,3,2,0,8.561259411,1.322,23.3 -348,930,3872,0,-2.11,27,8.0625,1,5,male,2006,21.61281179,12,41,36,3,2,1,8.189025781,1.284,21.8 -349,931,2800,0,2.44,34,23.5,4,3,male,2005,27.28174591,4,38.8571434,37.58795166,1,2,2,9.333219256,1.402,43.9 -350,932,3580,0,0.41,26,6,2,3,male,2006,28.62879181,17,38.8571434,32.22998047,2,2,1,8.082135524,1.345,29.7 -351,934,3500,0,0.89,26,42,2,3,female,2005,24.15881729,10,41.2857132,39.53182602,1,2,1,8.637805156,1.365,33.3 -352,937,4050,0,0.38,28,40,2,3,female,2005,20.3125,18,39.8571434,35.61669922,3,2,2,9.130846452,1.381,31.9 -353,938,3730,0,-0.31,31,7,2,5,female,2006,26.36560303,20,39.8571434,26,3,2,0,8.169746749,1.315,26.3 -354,939,2300,0,2.98,31,21,4,3,male,2005,21.56454468,20,36.42856979,26,2,2,0,8.881587953,1.35,48.1 -355,943,3255,0,-0.29,29,120.6875,2,3,male,2005,18.49548531,6,41.1428566,36.79285049,2,2,2,9.295117499,1.319,27.3 -356,946,3570,0,0.11,35,7,2,3,female,2005,20.57613182,20,39.1428566,28.02190208,3,2,0,10.21206936,1.342,30.4 -357,948,3872,0,0.84,31,58,2,3,male,2006,21.30394936,16,42,36,2,2,1,8.648984714,1.325,30.3 -358,949,2630,0,-0.13,31,16,2,5,male,2006,21.88707637,16,37.57143021,29.10736847,3,2,0,8.514601871,1.316,28.5 -359,950,2970,0,1.2,27,15.22222233,3,3,male,2005,25.47665977,9,37.8571434,35.60027313,1,2,0,9.429272188,1.336,33.2 -360,952,3668,0,-0.35,31,31,2,5,female,2005,21.61281179,20,41.2857132,36,3,2,2,8.919803787,1.313,26.7 -361,953,4230,1,-0.36,28,5,2,5,female,2005,20.79672989,13,42.7142868,27,3,2,1,9.297741273,1.35,23.6 -362,956,3100,0,0.11,30,33.3125,2,3,male,2005,24.02380943,11,40.7142868,31.55646896,2,2,1,9.095140315,1.298,28.2 -363,957,3648,0,1.94,28,8.125,3,5,male,2006,32.46489716,25,37.57143021,33,3,2,0,8.873374401,1.475,43.9 -364,958,3380,0,0.97,33,0,2,3,male,2005,24.9107666,12,40.2857132,32,3,2,1,8.736595939,1.414,30.1 -365,961,3700,0,-0.21,33,0,2,5,male,2005,25.09950066,10.5,41.8571434,32,3,2,0,9.188227242,1.385,33.1 -366,963,3850,0,0.2,32,3,2,5,female,2005,21.19274242,14,40.1428566,32,3,0,1,8.821241159,1.28,31 -367,966,3520,1,-1.01,33,36,2,3,male,2005,23.30668068,12,40.1428566,33.00205231,2,2,0,8.854209446,1.325,25.6 -368,968,3590,0,-0.23,34,1,2,5,female,2006,20.80856124,12,41,29,3,2,0,8.208190737,1.39,29.9 -369,971,3440,0,-0.81,35,15.0625,2,3,female,2005,18.40134298,18,41.57143021,32.12867737,1,2,0,9.798767967,1.28,27.4 -370,972,2877,0,0.68,29,3,2,5,female,2006,22.58270917,16,38.2857132,35,3,2,1,8.440908054,1.36,30.2 -371,973,3470,0,-0.07,31,1,2,5,female,2005,38.89807129,10,39,31.65776825,2,2,1,8.873374401,1.4,32.5 -372,977,3746,0,1.08,30,8,3,5,female,2006,23.73866213,20,41,34,3,2,1,8.572096737,1.348,33.3 -373,978,3850,0,0.04,32,1.0625,2,5,male,2006,20.42941836,13,41,35,3,0,0,7.947866758,1.256,24.9 -374,980,3010,0,-1.06,36,3,2,5,male,2006,18.93877551,20,41,27,3,2,0,8.128678987,1.304,24.4 -375,981,3020,0,0.66,32,12,2,5,female,2005,22.5710475,8,38.1428566,32,3,2,1,8.637805156,1.257,27.3 -376,983,3450,0,-0.14,31,4,2,5,male,2007,24.16326531,10,38.57143021,31,3,2,2,6.978781656,1.299,25.8 -377,986,4184,0,0.74,27,2.0625,2,5,female,2006,23.30668005,20,42.42856979,38,3,0,1,7.225188227,1.305,24.6 -378,989,3740,0,-0.7,27,13,2,5,male,2006,21.30394936,6,41,34,3,2,0,8.481975816,1.332,26.3 -379,990,3600,0,2.54,32,8,4,3,male,2005,19.43301392,24,40.7142868,32.03011703,2,2,0,9.103353867,1.389,33.5 -380,993,3080,0,2.07,34,22,4,3,male,2005,24.50894547,30,38.7142868,26.47227859,2,2,0,9.075975359,1.315,32.4 -381,995,3376,0,-0.21,34,9,2,5,male,2005,22.49134948,15,40.7142868,27,3,0,0,9.026694045,1.397,30.7 -382,996,2979,0,0.16,30,14,2,5,female,2006,27.28174591,14,41.8571434,33.77686691,2,0,0,8.213552361,1.34,25.5 -383,1000,2910,0,-0.5,24,17,2,3,female,2005,24.14151955,10,40.42856979,28.78302574,1,2,1,9.24287018,1.22,22.8 -384,1001,3590,0,-0.13,30,9,2,3,female,2005,20.30072975,8,41.42856979,35,3,2,0,8.826945015,1.448,33.1 -385,1003,3690,0,0.87,34,3,2,5,male,2005,24.05693475,12,40.8571434,35,2,0,0,8.881587953,1.415,35.2 -386,1004,3150,0,-0.05,32,37,2,3,female,2005,23.11111069,11,38.2857132,26,1,2,1,8.996577687,1.244,23.6 -387,1005,3374,0,-0.2,34,2,2,5,male,2005,22.265625,17,37.1428566,29,2,0,0,9.437257586,1.33,25.95 -388,1007,4652,0,-0.77,31,7.0625,2,5,male,2006,22.94811574,20,40.7142868,23,2,2,0,7.991786448,1.323,25.7 -389,1009,2860,0,0.28,29,43.5625,2,3,female,2005,19.38214493,23,40.7142868,32.73374557,1,2,1,8.985626283,1.23,22.4 -390,1016,2860,0,1.77,30,21,3,3,female,2005,22.95908737,22,42,27.69883728,2,2,1,8.996577687,1.345,39.1 -391,1017,3678,0,-0.89,33,3,2,5,female,2006,21.29529475,12,40.2857132,32,3,2,1,8.320328542,1.26,22.8 -392,1019,2064,0,1.18,28,0,3,5,female,2007,32.14664341,16,38.42856979,30,2,2,1,6.978781656,1.228,24.9 -393,1020,3770,0,2.82,28,45.3125,4,3,male,2005,22.86253357,18,41.57143021,28.83059311,2,2,1,9.648300251,1.452,58.4 -394,1023,2800,0,-0.03,29,7.0625,2,5,female,2006,19.46740129,10,41.1428566,33,3,2,0,8.837782341,1.307,27.4 -395,1025,3012,0,0.26,33,72.4375,2,5,male,2005,21.78649237,8,41.1428566,25,2,0,0,9.144535706,1.419,33.3 -396,1032,4006,0,1.8,35,2,3,5,female,2005,20.9839876,22,39.2857132,32,3,2,1,8.774697696,1.38,39.2 -397,1036,3195,0,-0.73,34,7,2,5,male,2006,24.57786715,8,39.1428566,39,3,2,1,8.51186402,1.261,23.5 -398,1039,3500,0,0,35,32,2,3,male,2006,23.01117706,9,38.7142868,33.87542725,2,2,1,8.763746292,1.336,28.7 -399,1044,3512,0,1.32,30,8,3,5,female,2006,22.40817899,15,38.57143021,30,3,0,1,8.235569245,1.3,33 -400,1049,3690,0,-0.56,35,1,2,5,male,2005,18.73278237,17,41.1428566,31.96988297,3,2,0,8.566621036,1.316,25.3 -401,1052,3590,0,-0.38,35,8,2,5,male,2006,21.17546272,12,39.1428566,33,3,2,0,7.956194387,1.3,26 -402,1053,3830,0,-0.63,27,21.0625,2,3,male,2005,37.81380081,10,41.42856979,27.62491417,3,2,0,10.0698152,1.536,36.5 -403,1054,3744,0,-1.27,28,47,2,5,male,2005,20.61925365,14,41.57143021,35,3,2,0,9.524868811,1.253,22.4 -404,1055,4465,1,1.16,30,15,3,5,male,2006,20.80856124,20,40.57143021,33,3,0,1,8.843258042,1.41,34.6 -405,1058,3690,0,1.22,35,57,3,3,male,2006,28.57796097,15,40.7142868,27.8247776,3,2,0,8.873374401,1.38,35.1 -406,1060,4330,0,0.05,33,8,2,5,male,2006,27.7767067,12,40.1428566,27,2,2,0,8.109514031,1.369,29.7 -407,1062,3584,0,-0.8,32,8.125,2,5,male,2005,26.5625,20,40,21.86995125,2,2,0,8.471024413,1.418,24.2 -408,1064,3320,0,0.89,30,29.1875,2,3,male,2005,20.76124573,10,40.7142868,34.41752243,2,2,1,9.305840748,1.385,34.2 -409,1066,2715,0,2.45,27,82,4,3,male,2006,23.92242241,11,39.1428566,30.86652946,1,2,0,8.588751996,1.335,38.4 -410,1067,2610,0,2.01,28,4,4,3,male,2006,20.6790123,9,37.8571434,35.48254776,2,2,0,7.665982204,1.414,40.6 -411,1068,2940,0,0.9,25,6,2,3,female,2005,22.50692558,10,39.1428566,30.43394852,2,2,0,8.857061373,1.247,29.9 -412,1069,3425,0,1.04,14,14.1875,3,3,male,2006,24.609375,16,39.57143021,29.31690598,3,2,0,8.153433721,1.355,33.3 -413,1072,3060,0,1.53,26,32,3,3,male,2006,28.39871788,16,41.57143021,36,3,2,1,8.487451517,1.33,33.3 -414,1074,3550,0,1.71,33,30,3,3,male,2006,38.97392273,0,40.7142868,34.23682404,1,2,0,9.245836185,1.39,38.3 -415,1080,2838,0,-0.74,25,4,2,5,male,2006,21.2962963,12,40.7142868,39,3,2,1,8.51186402,1.391,28.6 -416,1082,2640,0,-0.36,31,21.0625,2,5,female,2006,19.19530296,9,37.8571434,33.4248848,3,0,0,8.14795802,1.319,26.3 -417,1083,3960,0,-0.28,35,11,2,5,female,2007,24.85907356,16,41.8571434,32,3,2,0,8.161533196,1.29,25.4 -418,1090,2800,0,1.08,31,10,3,3,female,2005,23.051754,5,39.2857132,32.60232544,3,2,0,9.278576318,1.248,22.2 -419,1093,3825,0,1.07,27,2,3,5,male,2005,17.21108681,15,40.57143021,28,3,2,0,8.988364134,1.319,32 -420,1097,2990,0,0.21,27,24,2,3,female,2005,25.40281677,9,42.2857132,38.87747955,1,2,0,9.442961442,1.385,31.4 -421,1102,3740,0,0.35,31,29,2,5,female,2005,20.76124567,6,38.7142868,37,3,2,0,9.615217887,1.398,33.5 -422,1106,3755,0,2.54,20,8,4,3,male,2005,23.87543297,10.5,40,31,2,2,0,8.884325804,1.31,37.5 -423,1107,2960,0,-0.71,33,7,2,3,female,2005,20.06095505,8,39.7142868,38.95413971,3,2,1,8.851471595,1.304,25.2 -424,1110,3804,0,-1.03,35,10,2,5,female,2005,21.38593635,20,40.7142868,30,3,2,0,8.887063655,1.374,27.1 -425,1115,2255,0,-0.81,26,16.1875,2,5,female,2006,21.5349084,10,38.42856979,31,3,2,0,8.290326261,1.233,22 -426,1117,4064,1,-0.48,33,8,2,5,male,2006,23.7953599,22,40.7142868,35,3,0,2,7.956194387,1.418,25.5 -427,1122,3050,0,-0.57,33,13,2,3,male,2006,21.25850296,15,39.2857132,30.88295746,3,2,0,8.208190737,1.345,27.1 -428,1126,3212,1,-0.2,23,10.25,2,5,female,2006,25.46198063,11,41.1428566,35,3,2,1,7.014373717,1.177,20.9 -429,1127,3055,0,1.35,31,14,3,5,male,2007,25.40281677,12,39.8571434,36.29733276,3,2,2,8.027378508,1.34,31.2 -430,1130,3110,0,1.67,35,22.25,3,3,male,2005,19.19530296,8,40.1428566,23.55920601,2,2,0,9.516883413,1.435,41 -431,1132,3500,0,-0.07,31,14,2,3,male,2006,22.7583065,12,40.8571434,30.52703667,3,2,0,8.07118412,1.212,23 -432,1134,3600,0,0.54,30,31,2,3,male,2005,26.83518028,18,42,32,3,2,0,8.777549624,1.395,27.6 -433,1137,3110,0,2.12,21,99,4,3,male,2006,24.87771988,14,40,32.76659775,1,2,1,8.375085558,1.335,35.3 -434,1138,3140,0,-0.64,32,21,2,3,female,2005,25.7210331,9,38.2857132,31.08008194,2,2,1,9.703057267,1.24,22.9 -435,1144,4110,0,-0.73,30,2,2,5,female,2005,20.24489796,10,40.8571434,28,3,2,0,8.591261693,1.4,28.8 -436,1150,3102,0,0.5,32,16.1875,2,5,female,2007,20.2020202,8,36.57143021,33.99959183,3,0,0,7.197809719,1.227,24.6 -437,1157,3290,0,1.1,26,27,3,3,female,2006,20.95727348,10,40.57143021,36,3,2,1,8.443645905,1.335,32.5 -438,1158,3185,0,-0.39,32,19,2,3,female,2006,27.47562981,12,41.1428566,33.02121735,3,2,1,8.049281314,1.225,22.4 -439,1159,3326,0,-0.06,25,10.0625,2,5,male,2007,17.91508924,10,41.1428566,34,3,2,0,6.965092402,1.19,20.3 -440,1163,3270,0,0.58,32,3,2,5,female,2006,24.16716194,10,38.7142868,32,2,0,1,8.208190737,1.25,31.5 -441,1165,3212,0,0.09,34,25.3125,2,5,male,2005,27.35884546,10,38.7142868,38,3,2,2,8.610426648,1.289,24.7 -442,1168,3480,1,0.3,35,19,2,5,female,2005,23.87511478,14,39.2857132,39,3,2,2,8.637805156,1.336,29.5 -443,1174,3350,0,-0.46,27,14,2,3,male,2005,18.73278236,17,41.42856979,29.8617382,3,2,0,8.232717317,1.3,25.6 -444,1178,3060,0,-0.92,29,25,2,3,female,2005,17.4190731,15,40.1428566,26.47227859,2,2,0,9.251311887,1.333,26.3 -445,1179,3680,0,-0.93,28,4,2,5,female,2006,21.60410478,18,43,27,2,2,0,8.624344057,1.317,25 -446,1180,3380,0,-1.17,34,3,2,3,female,2005,19.81767654,16,41.42856979,25.57700157,2,2,1,8.845995893,1.395,25.7 -447,1181,2450,0,1.03,29,7,3,3,male,2005,25.07619286,7,41.7142868,36.93634415,1,2,0,9.642824549,1.319,31.9 -448,1189,3470,0,-0.27,32,14,2,3,male,2006,19.77769852,10,39.8571434,37.70568085,2,2,1,8.788501027,1.27,25.5 -449,1196,3854,0,1.76,32,9,3,5,female,2006,27.75510204,7,39.42856979,32,3,2,1,8.268309377,1.39,46.3 -450,1198,3470,0,0.62,29,7,2,5,male,2006,23.03004535,13,40.2857132,35,2,0,0,8.109514031,1.247,25.6 -451,1200,3770,0,-0.65,34,27,2,3,female,2005,30.8630352,3,40.1428566,29.01026726,1,2,0,9.404631531,1.355,27.8 -452,1201,4600,0,2.06,35,10,4,3,male,2005,24.91349481,12,42,32.1752243,2,2,1,9.618183892,1.4,41.6 -453,1205,3550,0,-0.42,33,9,2,5,male,2006,25.6543724,9,40.42856979,30,3,2,0,8.164271047,1.278,24.8 -454,1210,2920,0,-0.97,27,13,2,5,female,2006,22.49134948,12,37.2857132,36.39638138,3,2,2,8.563883185,1.225,21.5 -455,1211,3910,0,1.32,33,8.125,3,5,male,2005,23.83673469,12,43,35,2,2,1,9.130846452,1.51,42.7 -456,1212,3600,0,2.76,25,12,4,3,male,2006,29.40759659,15,40.1428566,24.96372414,2,2,1,10.03696099,1.434,50.9 -457,1213,3425,0,0.27,33,14,2,5,female,2005,18.507766,10,40.8571434,38.40930939,3,2,1,8.424366872,1.37,30.7 -458,1216,3608,0,-0.22,31,20.125,2,5,female,2005,18.36547291,17,40.7142868,32,3,2,1,8.930869268,1.39,29.8 -459,1218,3722,0,-1.1,30,7,2,5,female,2006,26.72992706,14,38.8571434,35,2,2,1,8.640771161,1.389,26.1 -460,1219,3910,0,0.09,32,22.3125,2,3,male,2006,23.42355728,25,40.1428566,26.8911705,3,2,0,8.826945015,1.254,23 -461,1220,3220,0,0.38,33,7,2,3,female,2005,22.95908737,11.5,40.1428566,30,2,2,0,8.506502396,1.214,26.8 -462,1225,4000,0,2.16,12,45.3125,4,3,female,2007,31.70738792,8,40.42856979,30,2,0,1,6.88569473,1.16,27.15 -463,1226,2080,0,-0.89,34,5.0625,2,5,male,2006,21.56454468,12,31.7142849,27,2,2,0,8.169746749,1.289,30.9 -464,1228,3736,0,-0.03,30,0,2,5,male,2007,19.83516296,10,40.8571434,29,3,2,0,6.918548939,1.197,22.1 -465,1233,3390,0,0.73,34,12,2,3,male,2006,19.83471107,23,39,31.9096508,3,2,0,8.057494867,1.361,31.4 -466,1234,3524,0,-0.35,35,2,2,5,male,2005,22.64737701,24,38.57143021,35,3,2,1,8.539242528,1.318,27.8 -467,1236,3232,0,0.99,34,10,2,5,female,2005,22.05805119,18,41.1428566,28,3,2,0,8.574834588,1.315,31.2 -468,1241,3630,0,-0.07,32,9,2,3,male,2006,27.51338577,10,39.1428566,30.05825615,2,2,0,9.549737623,1.404,31.8 -469,1242,4215,1,0.18,32,21,2,5,female,2005,23.7654321,10,41.42856979,36,3,2,1,8.75553274,1.31,30.3 -470,1246,3890,0,-0.34,28,12.25,2,5,female,2006,24.61810377,0,39.57143021,32,3,2,0,8.032854209,1.256,23.9 -471,1249,3650,0,1.01,30,5,3,3,male,2006,24.72946167,12,41.1428566,26.65023994,3,2,0,8.432694501,1.3,30.3 -472,1250,3400,0,3.97,26,42.4375,4,3,female,2006,23.03004456,9,40.7142868,31,3,2,1,8.84337212,1.524,55.9 -473,1255,3580,0,1.66,25,1,3,3,female,2005,23.03004456,18,40.7142868,27.50444984,2,2,0,9.086926762,1.374,38.8 -474,1257,3882,0,0.28,29,15,2,5,male,2005,25.90945695,28,41.1428566,30,2,2,0,8.648756559,1.305,23.9 -475,1258,3310,0,0.13,30,1.0625,2,3,male,2005,17.84651947,8,40.57143021,28.0848732,3,2,0,9.741159023,1.426,34.8 -476,1259,3350,0,1.45,27,36,3,3,male,2006,25.15315056,13,39.8571434,31.72621536,1,2,1,8.353296829,1.265,29.9 -477,1261,3210,0,0.63,32,9,2,5,male,2006,20.90419501,9,40.7142868,37,3,2,1,8.268309377,1.347,30.6 -478,1266,3340,0,0.6,26,17,2,3,female,2006,20.56933022,14,38.7142868,32.62696838,2,2,1,8.038329911,1.314,26 -479,1268,2935,0,-0.03,31,25,2,3,female,2005,25.39021873,20,41,33.83333206,1,2,1,8.865160849,1.263,25.5 -480,1269,3830,0,-0.81,33,45,2,3,male,2005,23.11111069,10,40.1428566,30.6420269,3,1,0,9.703057267,1.248,22.35 -481,1270,4075,0,0.42,31,3,2,5,male,2006,23.05456246,18,41.42856979,30,3,0,1,8.178074378,1.29,27.4 -482,1273,3714,0,0.28,32,23,2,5,female,2006,18.36547291,13,40,35,2,2,1,8.854209446,1.3,31.6 -483,1276,2780,0,1.47,31,9,3,3,female,2005,21.1927433,21,39.7142868,35.71800232,1,2,1,8.777549624,1.355,34.8 -484,1277,3800,0,-0.2,27,0,2,5,female,2005,18.37682515,15,41.57143021,33,3,2,0,9.295117499,1.35,28.9 -485,1279,4140,0,0.5,32,11.0625,2,5,male,2006,18.30576947,22,40.1428566,22.41392708,2,0,0,8.189025781,1.397,30 -486,1282,3050,0,0.32,13,0,2,5,male,2006,22.49134948,10,41.8571434,37,3,2,2,8.514715948,1.414,32.8 -487,1283,3730,0,0.2,29,7,2,5,female,2005,20.9839876,12,40.8571434,40,3,2,0,9.557723021,1.38,35.3 -488,1286,3150,0,0.46,24,10,2,3,female,2006,21.45328712,15,38.57143021,27.70705032,2,2,0,8.60244125,1.39,32.5 -489,1287,3212,0,-1.63,28,7.0625,2,5,female,2006,34.15365955,10,39.8571434,30,3,0,0,8.090349076,1.322,23.3 -490,1289,3560,0,-1.47,33,8,2,5,female,2005,22.09317005,10,39.57143021,35,2,2,1,8.851471595,1.366,25.7 -491,1290,2560,0,1.2,29,36,3,5,female,2005,27.63605442,14,40.1428566,33,3,2,0,8.867784622,1.355,28 -492,1292,3185,0,-0.61,31,22,2,3,male,2005,20.2020202,10,38.42856979,30.18754196,3,2,0,9.703057267,1.268,24.4 -493,1295,3690,0,3.45,26,13.25,4,3,male,2006,26.813591,30,41.42856979,32.20807648,2,2,2,8.49566507,1.377,41.7 -494,1296,2810,0,-0.41,30,26.0625,2,5,female,2006,25.30693205,14,39.57143021,24.68584442,3,0,0,8.279374857,1.235,23 -495,1298,3420,0,-0.46,34,28.5625,2,3,female,2006,22.49135017,9,39.57143021,31.73169136,3,2,0,8.63529546,1.2,23.6 -496,1300,4000,0,-1.18,32,18.3125,2,5,male,2006,20.79673004,20,41.57143021,36,3,2,1,8.114989733,1.336,24.6 \ No newline at end of file diff --git a/tests/testthat/data_files/GAMLSS/gamlss2.rda b/tests/testthat/data_files/GAMLSS/gamlss2.rda deleted file mode 100644 index 66bbaddf..00000000 Binary files a/tests/testthat/data_files/GAMLSS/gamlss2.rda and /dev/null differ diff --git a/tests/testthat/data_files/GAMLSS/gamlss3.csv b/tests/testthat/data_files/GAMLSS/gamlss3.csv deleted file mode 100644 index de53b7fc..00000000 --- a/tests/testthat/data_files/GAMLSS/gamlss3.csv +++ /dev/null @@ -1,199 +0,0 @@ -rowID,ID,e3_bw,hs_asthma,hs_zbmi_who,hs_correct_raven,hs_Gen_Tot,hs_bmi_c_cat,h_cohort,e3_sex_None,e3_yearbir_None,h_mbmi_None,hs_wgtgain_None,e3_gac_None,h_age_None,h_edumc_None,h_native_None,h_parity_None,hs_child_age_None,hs_c_height_None,hs_c_weight_None -1,4,3270,0,-0.76,28,54.5,2,2,female,2005,21.04804802,21,39.2857132,32.72552872,1,2,1,10.13826146,1.345,27.7 -2,7,3350,0,0.04,34,21.1875,2,2,male,2003,27.51717567,20,40,39.60027313,1,2,2,11.34302989,1.315,29.8 -3,9,3000,0,-1.78,35,19.0625,2,2,female,2004,23.02895164,12,40.8571434,30.3874054,2,2,1,10.71594798,1.51,24.3 -4,13,3390,0,0.2,30,26.3125,2,2,female,2004,21.64412117,5,40.42856979,34.23682404,3,2,1,10.57095597,1.435,31.5 -5,14,2850,0,-0.55,33,43.5625,2,2,male,2004,16.95501709,20,39.7142868,26.93223763,2,2,0,10.38478211,1.39,30.8 -6,20,3050,0,-0.01,31,36.25,2,2,female,2005,23.79536057,17,39,34.05612564,3,2,0,9.957563313,1.415,33.2 -7,22,3310,0,0.09,33,32.0625,2,2,female,2004,22.29099655,13,39.7142868,23.60301208,3,2,0,10.63928816,1.44,36.1 -8,24,3050,0,-0.84,32,75.5625,2,2,female,2003,28.46489143,5,41.57143021,27.74811745,3,2,0,11.08008214,1.425,31.8 -9,29,3700,1,0.85,31,23.375,2,2,female,2004,24.87771988,12,41.7142868,25.83709717,3,2,1,10.64191193,1.355,35.1 -10,31,3410,0,-1.47,31,19.0625,2,2,female,2004,20.44523048,13.5,40,38.19301987,3,2,1,10.67225645,1.435,26.1 -11,38,2780,0,-0.34,36,13.1875,2,2,female,2003,18.40332031,20,39.57143021,29.21834373,3,2,0,11.57574721,1.435,34.4 -12,51,3080,0,0.35,29,2,2,2,male,2005,20.65753937,15,39.7142868,27.10472298,3,2,0,10.26956423,1.485,39.1 -13,55,3460,0,0.75,28,31.1875,2,2,female,2005,19.79411316,20,41,40.16700745,3,1,0,10.5269222,1.685,37.8 -14,57,4010,0,-0.77,35,23,2,2,female,2004,18.14486885,25,41.1428566,40.8432579,1,2,2,10.90485969,1.53,36.7 -15,66,3410,0,0.28,31,9.0625,2,2,male,2004,20.46334457,10,40.42856979,36.64339447,2,1,2,11.34827744,1.45,37.4 -16,83,2580,0,1.16,33,16.3125,3,2,male,2004,27.34375,8,40.1428566,29.37713814,2,2,0,10.6914214,1.435,40.6 -17,84,3250,0,1.45,31,39.3125,3,2,male,2004,25.53670311,15,41.1428566,39.19233322,1,2,1,10.84462697,1.36,38.5 -18,86,3030,0,-0.52,33,9,2,2,female,2004,22.86253357,15,38,27.60848808,3,2,1,10.71047228,1.505,36.9 -19,110,3660,0,1.35,35,13.125,3,2,male,2005,26.48756027,18,37.8571434,21.86995125,1,2,0,10.36812685,1.435,40.5 -20,116,3400,1,0.07,36,46.63849258,2,2,male,2004,22.27531052,6,39.2857132,40.16700745,3,1,1,10.40098106,1.455,38.8 -21,117,3180,0,-1.88,32,20.22222137,2,2,female,2004,17.52448463,5,40.57143021,39.80287552,2,2,2,9.963153091,1.46,24.8 -22,126,3530,0,0.01,34,29.25,2,2,male,2004,22.16343689,11,41.2857132,28.8432579,3,2,0,10.63928816,1.43,34.3 -23,133,3720,1,0.25,35,15.125,2,2,female,2005,20.3244381,10,40.1428566,29.9520874,3,2,1,10.06148757,1.39,33.4 -24,137,3330,1,-0.18,34,41.5,2,2,male,2004,24.44727898,13.5,37.42856979,22.26694107,2,2,0,10.75975359,1.435,41.6 -25,153,3820,0,-0.58,34,23.1875,2,2,male,2004,23.19296074,13,41.2857132,40.56126022,3,2,1,11.18948209,1.42,33.3 -26,161,3850,1,-0.43,35,23,2,2,male,2003,19.85254478,16,40,28.43258095,2,2,2,11.18423454,1.4,31.9 -27,168,3780,0,-0.78,32,28.0625,2,2,male,2005,20.79673004,13,41.42856979,38.14647675,3,2,1,10.40668492,1.38,33.2 -28,173,3270,0,-0.6,33,26,2,2,female,2003,21.4174614,12,38.2857132,34.1327858,2,2,2,11.80835044,1.5,37.3 -29,178,3215,0,0.62,32,22.1875,2,2,female,2004,19.3337307,21,40.1428566,32.2546196,3,2,2,10.69952088,1.455,26.1 -30,181,3550,0,1.47,33,37.1875,3,2,male,2003,27.81588173,7,42.2857132,27.51539993,3,2,1,11.51825234,1.535,48 -31,186,3370,0,0.71,29,19.3125,2,2,female,2004,21.07719612,10,40.7142868,36.95550919,2,2,2,11.4002966,1.36,35.8 -32,195,3520,0,-1.11,34,11,2,2,male,2004,20.14797211,13,37.8571434,34.60095978,3,2,0,11.15674196,1.6,39 -33,201,3330,0,-1.17,32,11.125,2,2,male,2004,22.81131744,21,39.2857132,27.98631096,3,2,1,11.17590691,1.43,32.3 -34,208,2290,0,-0.27,34,56.375,2,2,male,2004,27.92728233,11,37.7142868,25.56878853,3,2,0,11.01163587,1.475,37.1 -35,212,3300,0,-1.07,33,24,2,2,female,2005,17.68850517,13,38,26.34086227,2,2,1,9.705566963,1.285,24.3 -36,213,3120,0,1.25,30,14.1875,3,2,male,2004,24.03461075,17,40.7142868,28.54483223,2,2,0,10.56548026,1.51,46.2 -37,214,3540,0,1.36,30,23.3125,3,2,male,2005,27.18090057,5,40.42856979,30.93223763,3,2,1,11.18948209,1.4,39.9 -38,216,3430,0,-0.47,34,34,2,2,male,2003,21.58579826,23,40.8571434,32.27364349,3,2,0,10.18206708,1.38,30 -39,237,3440,0,0.71,34,12.0625,2,2,male,2005,22.68905067,12,41.2857132,29.67282677,3,2,1,10.365389,1.44,38.5 -40,238,3030,0,0.28,34,6.125,2,2,female,2003,20.30072975,16,39.7142868,32.00547409,3,2,0,11.45254392,1.535,43 -41,253,2770,1,0.18,33,38.5625,2,2,female,2004,20.54569435,10,40,26.24777603,3,2,0,10.6914214,1.325,30.6 -42,263,2630,0,-1.62,35,3,2,2,female,2003,18.97092247,9,40,30.01231956,3,2,0,11.15674196,1.29,30.4 -43,273,2960,0,-0.98,34,14.1875,2,2,female,2003,25.15315056,20,40.2857132,17,2,2,0,12.10130048,1.52,37.1 -44,283,4060,0,0.57,35,32.125,2,2,male,2003,25.37532234,20,40.57143021,34,3,1,2,10.9486653,1.44,37.5 -45,306,3380,1,1.16,34,26.1875,3,2,female,2005,22.91892242,12,40.42856979,30.52703667,3,1,0,10.25861282,1.465,42.3 -46,310,3870,0,0.17,33,1,2,2,male,2004,33.12130737,14,38.2857132,30.15468788,2,2,0,10.26694045,1.39,33.1 -47,333,2740,0,1.14,34,6.25,3,2,female,2005,18.96192741,7,41.2857132,32.62696838,3,2,0,9.275952544,1.395,36.8 -48,334,3520,0,0.7,33,17.0625,2,2,female,2005,21.58579826,11,39.57143021,27.55099297,3,2,0,9.4865389,1.343,33.3 -49,341,3100,0,-0.23,30,26.125,2,2,female,2005,22.27530992,10,37.7142868,31.44695473,3,1,0,10.04243669,1.435,32.6 -50,349,2300,0,0.26,34,46.25,2,2,female,2004,20.54569435,10,35.8571434,38.87747955,3,2,2,10.3464522,1.455,32.3 -51,354,4070,0,-0.98,33,1.0625,2,2,male,2004,25.94436646,12,42.42856979,32.62696838,3,2,0,11.08555784,1.48,33.7 -52,355,3000,0,0.47,36,30.1875,2,2,female,2003,26.5625,12,37.8571434,28.73374367,1,2,1,11.23351586,1.52,42.9 -53,358,2870,1,0.07,27,55,2,2,male,2004,25.53670311,20,38.8571434,28.02737808,2,2,0,10.98973306,1.39,33.2 -54,359,2877,1,1.41,33,23.1875,3,2,male,2004,26.27477455,15,39.7142868,22.37371635,2,2,0,10.5927447,1.445,45.6 -55,366,3150,0,1.64,34,18.125,3,2,female,2004,19.28937912,8,40.42856979,40,3,2,0,11.05544148,1.45,46.7 -56,379,5260,0,1.97,34,37.4375,3,2,male,2004,25.97668266,20,40.42856979,30.79657555,2,2,1,10.31348392,1.51,46.1 -57,398,2860,0,-1.51,33,9,2,2,male,2004,18.67093468,6,38.57143021,30.34907532,2,2,2,11.23054985,1.396,28.6 -58,400,3920,0,-0.3,29,8.125,2,2,male,2004,21.17546272,13,39.8571434,31.29637146,3,2,1,10.98973306,1.64,45.9 -59,402,3580,0,-1.1,31,50.5,2,2,male,2004,19.9369297,8,41.1428566,28.38603783,3,2,0,10.66951859,1.405,29.7 -60,418,3010,0,0.47,29,15,2,2,male,2004,19.03114187,10,38.42856979,30.28884315,3,1,0,11.27173169,1.52,41.4 -61,422,3110,0,-1.07,34,33,2,2,male,2004,18.359375,12,38,29.99041748,2,2,1,10.23134839,1.3,25.2 -62,423,3290,0,-1.76,33,26.125,2,2,female,2003,19.83516312,12,40,37.1937027,3,2,2,11.59194616,1.515,33.3 -63,424,2930,0,1.45,28,17,3,2,female,2004,35.62901688,9,35.8571434,28.3449688,1,2,2,10.90485969,1.435,43.9 -64,428,3850,0,-0.73,34,9.0625,2,2,male,2004,20.5498867,6,41.42856979,27.21149826,3,2,0,11.03080082,1.455,33.1 -65,431,3910,0,1.68,36,21.125,3,2,female,2003,24.42583656,15,38.1428566,38.40930939,2,2,2,11.04996578,1.405,44.1 -66,435,3756,1,-1.1,34,48.3125,2,2,male,2003,20.12639236,8,39.57143021,30.8172493,1,2,1,11.23351586,1.395,29.8 -67,441,4800,0,3.05,33,82.6875,4,2,male,2003,31.4113884,10,39.2857132,33.65913773,3,2,1,11.24994296,1.57,71.1 -68,443,3360,0,1.13,33,33.1875,3,2,male,2004,31.50136566,12,40.2857132,29.23750877,3,1,0,11.33744011,1.51,44.5 -69,444,2810,1,1.18,33,52.3125,3,2,male,2003,20.390625,11,40,21.70020485,2,2,0,11.42790326,1.385,38.4 -70,450,3290,0,-0.28,36,11.0625,2,2,male,2003,19.95546913,13,42,25.12525749,3,2,0,11.61943874,1.46,35.3 -71,452,4150,1,1.27,34,84.875,3,2,female,2004,34.2935524,17,41,33.57973862,3,2,0,10.81998631,1.47,44.5 -72,456,3150,0,-0.52,32,33.1875,2,2,female,2005,20.12364388,14,40.42856979,26.96509171,2,2,1,10.02600958,1.345,28.3 -73,460,3620,0,-0.38,27,48,2,2,male,2004,24.76756668,22,42,33.24298477,2,2,0,11.07734428,1.405,32.4 -74,462,2730,0,-0.28,31,61.375,2,2,male,2003,22.98539734,6,39.8571434,27.22984505,2,2,0,11.15674196,1.405,33.8 -75,477,2520,0,-0.19,32,23.1875,2,2,female,2004,23.0871048,16,40.2857132,27.06365585,2,2,1,11.43862651,1.485,38.1 -76,479,3570,0,-1.11,26,35.125,2,2,male,2005,21.5349084,17,41.7142868,35,2,2,2,9.776865161,1.35,26.8 -77,487,3910,0,0.77,34,65.5625,2,2,male,2003,22.03172493,13,38,29.63449669,3,2,0,11.96988364,1.535,48.3 -78,506,4130,0,-0.46,33,72,2,2,female,2005,18.40332031,10,41.2857132,35.61669922,3,2,2,9.645448323,1.37,29.2 -79,509,2960,0,0.39,29,37.375,2,2,female,2003,22.67573738,8,41.42856979,31.60848808,2,2,2,11.59194616,1.36,26.1 -80,516,3200,0,-0.18,31,7.0625,2,2,male,2004,23.22543144,8,41.42856979,28.83504486,3,2,1,10.91318731,1.455,38 -81,537,3340,0,-1.05,27,52,2,2,female,2005,24.50894547,20,39.57143021,27.45342445,2,2,1,10.45300023,1.48,32.8 -82,538,2500,1,0.11,33,10.125,2,2,male,2004,32.86338806,17,39.2857132,28.9445591,2,2,1,10.94045175,1.32,30.7 -83,549,3400,0,0.74,32,19.0625,2,2,female,2003,23.61275101,10,41,29.98768044,2,2,0,11.76180698,1.53,44.6 -84,560,2780,1,-0.68,32,26.125,2,2,male,2003,19.26615715,9,36.2857132,29.78013611,3,2,2,11.72347707,1.37,30.3 -85,579,3510,0,0.11,34,31.4375,2,2,male,2003,23.59728241,13,40.1428566,35,1,2,0,11.46052932,1.405,34.5 -86,585,3440,0,-0.67,32,42,2,2,male,2005,24.47709846,13,40.57143021,35.75359344,3,2,2,9.538672142,1.345,33.1 -87,599,3070,0,1.12,35,15.3125,3,2,female,2004,27.28174591,20,39.42856979,37.82614517,3,2,0,10.57095597,1.52,47 -88,600,3590,0,0.56,35,18.375,2,2,male,2005,21.604105,10.5,40,38.85557938,3,2,2,9.927446954,1.536,33.5 -89,604,3970,0,0.06,35,33.125,2,2,female,2004,27.41480255,16,40.7142868,37.17727661,3,1,2,11.46326717,1.315,41.2 -90,608,2900,0,2.44,34,26.1875,4,2,male,2004,20.07960129,5,42,38.18480682,3,2,0,10.66951859,1.46,52 -91,613,2770,1,0.19,30,30.125,2,2,male,2004,19.44444466,13,36.8571434,21.21013069,2,2,0,10.59536847,1.685,65.1 -92,617,3630,1,1.78,36,29.25,3,2,male,2004,29.38475609,4,41,33.77686691,2,2,0,10.91581109,1.52,49.7 -93,619,3530,1,-0.35,35,16.1875,2,2,female,2004,28.19544411,13,41.57143021,24.12046623,3,2,0,10.49965777,1.45,34.8 -94,623,3410,0,3.23,34,43.375,4,2,female,2004,25.01352119,19,38.2857132,36.39151382,3,2,2,10.19575633,1.46,65.1 -95,627,3550,0,-0.03,31,9.1875,2,2,male,2003,20.96436119,12,40.7142868,34.11362076,2,2,1,11.23351586,1.485,37.6 -96,641,3700,0,1.51,31,54.1875,3,2,male,2005,26.76621437,11,40.57143021,25.43036461,3,2,0,10.00958248,1.4,34.6 -97,642,3500,0,-1.86,33,48,2,2,male,2003,24.81354713,20,41,29.01643753,3,2,0,11.37303217,1.44,36.5 -98,648,1780,0,1.4,31,37,3,2,male,2003,19.3337307,18,34.2857132,31.52908897,2,2,1,11.61943874,1.475,45.4 -99,653,3200,0,0.68,31,15.125,2,2,female,2004,20.12875748,13,40.42856979,24.90622902,3,2,1,10.41193247,1.44,38.3 -100,662,3534,0,0.05,34,18,2,2,male,2003,20.51163483,18,41.57143021,29.48117638,3,2,0,11.57574721,1.56,41.7 -101,663,3440,0,2.43,28,14.125,4,2,male,2004,22.265625,20,39.2857132,28.49281311,2,2,2,10.91866302,1.495,54.4 -102,664,3320,0,1.01,29,46.375,3,2,female,2004,19.53125,17,40.8571434,32,3,1,0,11.18685832,1.41,34.7 -103,671,3565,0,1.38,28,12.1875,3,2,male,2004,24.69040489,10,38,38.60917282,3,2,1,10.54608715,1.52,45.9 -104,673,3320,0,0.74,27,2.0625,2,2,male,2004,20.70081711,10,39.7142868,34.45585251,2,2,1,11.17590691,1.39,37.2 -105,683,3255,0,-1.88,34,13,2,2,male,2005,18.91576385,21,40.8571434,23,3,2,0,9.883641342,1.395,22.7 -106,694,2740,0,0.71,32,39.25,2,2,male,2003,20.6727562,13,39.42856979,34.51060867,2,2,1,10.48037874,1.455,38.5 -107,704,3040,0,1.36,27,35.375,3,2,female,2004,24.03440666,10,39.57143021,33.40451813,2,2,2,10.81188684,1.435,44.5 -108,719,2930,0,1.49,33,20,3,2,female,2005,18.98160553,10,41.2857132,29.68377876,3,2,2,10.12183436,1.42,34.7 -109,721,3180,0,1.14,34,39.25,3,2,male,2004,27.76342964,32,41,21.45927429,2,2,1,11.59217431,1.445,41.8 -110,722,3280,1,-0.88,34,8.125,2,2,male,2004,18.21019745,6.5,41,31.16221809,3,2,1,11.3977869,1.49,34.8 -111,723,3000,1,-0.01,36,35.25,2,2,male,2003,23.7118454,16,39.42856979,27.09650993,3,2,0,11.11019849,1.495,38 -112,737,2770,0,1.76,34,29,3,2,female,2003,34.41613388,0,37.57143021,36.7638588,2,2,2,11.55110655,1.53,56.9 -113,753,1910,0,-1.3,36,44.3125,2,2,female,2004,19.39618874,12,34.1428566,30.1382618,3,2,0,11.18948209,1.28,24.7 -114,758,4200,0,2.07,35,26.3125,4,2,male,2004,23.10843468,18,40.1428566,24.11225128,3,2,0,10.76534337,1.48,49.3 -115,762,4070,0,0.45,34,10,2,2,male,2004,24.23668671,9,41.8571434,29.53045845,3,1,1,10.52977413,1.39,35.9 -116,766,3885,1,1.26,36,12.0625,3,2,male,2004,22.92097092,8,40,25.04038239,2,2,0,10.91866302,1.52,45.8 -117,787,3370,0,0.55,34,15.1875,2,2,female,2004,34.52708817,7,41.7142868,27.52087593,2,2,0,10.50239562,1.335,33.2 -118,789,3220,0,-0.44,32,13.25,2,2,male,2004,20.20202065,18,40,32,3,2,0,9.820670773,1.48,34.3 -119,804,3740,0,-1.47,31,14,2,2,female,2003,17.0992775,17,38.1428566,38.74332809,2,2,0,11.32386493,1.41,28.9 -120,805,3120,0,-1.1,32,11,2,2,female,2003,24.609375,21,39.57143021,33.10335541,3,2,0,11.24172941,1.475,31.4 -121,827,3290,0,-2.23,34,18,1,2,female,2004,15.88278389,10,38.2857132,32.91444397,1,1,0,10.54905316,1.385,24.9 -122,831,3620,0,-0.32,36,24,2,2,female,2004,26.33288875,17,40.1428566,21.45927429,3,2,0,11.03627652,1.46,34.9 -123,832,2870,0,-0.94,35,15,2,2,male,2004,22.62184334,20,35.57143021,36.2600975,3,2,2,11.27173169,1.495,34.7 -124,833,1780,1,0.24,34,37,2,2,male,2004,24.09297052,16,34,27.12662506,2,2,0,10.68309377,1.434,35.5 -125,838,3340,0,-1.73,36,16.125,2,2,male,2004,20.02884102,10,38.8571434,28.48186111,3,2,0,10.54905316,1.345,24.3 -126,839,3540,0,0.96,34,47.3125,2,2,male,2004,35.32574463,5,40.2857132,29.11704254,2,2,1,11.00616016,1.36,35.1 -127,845,2640,0,1.28,34,57.5,3,2,male,2003,33.73250198,8,38.57143021,35.34839249,2,1,2,11.01437372,1.345,36.1 -128,867,3400,1,-2.05,35,69.5625,1,2,male,2003,19.140625,10,41.57143021,32.28401947,3,2,1,11.2253023,1.41,24.9 -129,869,3185,1,1.96,33,50.75,3,2,male,2004,27.64948082,3,37.8571434,25.05133438,2,2,1,10.97604381,1.455,50.2 -130,870,3730,0,2.45,30,54,4,2,female,2004,34.8825264,17,39,37.70568085,3,2,2,10.35728953,1.45,44 -131,871,3670,0,0.84,33,8.125,2,2,male,2003,25.63116837,6,40.1428566,36.80766678,2,2,1,11.51825234,1.535,45.1 -132,874,4340,0,-0.29,35,30.1875,2,2,male,2004,25.02976036,27,40.42856979,30.27241707,3,2,0,10.97604381,1.495,36.5 -133,875,3202,0,1.78,36,33.125,3,2,male,2003,20.95717049,15,39.57143021,28.38603783,3,2,0,11.49634953,1.5,49.1 -134,889,4550,0,-0.07,31,20,2,2,male,2003,20.51913452,16,39.7142868,30.14099884,3,2,0,11.40600046,1.515,37.4 -135,900,3090,0,-0.57,34,28,2,2,male,2003,20.02884102,10,41.1428566,24.53114319,3,2,0,12.06844627,1.43,33.8 -136,901,2550,0,-0.1,33,35.125,2,2,male,2004,20.56933022,10,39,28.86242294,3,2,2,11.72610084,1.38,32.7 -137,909,3530,0,-0.8,31,48.375,2,2,male,2004,22.12711525,11,40.42856979,39.92333984,3,2,2,10.00410678,1.35,27.7 -138,914,1280,1,1.06,33,34,3,2,female,2004,25.46198082,4,31.1428566,36.34223175,2,2,0,10.74321241,1.505,37.3 -139,922,3240,0,2.21,33,23.3125,4,2,male,2004,32.46489716,12,39.57143021,24.76369858,2,2,1,11.00616016,1.375,41.4 -140,942,3500,0,-1.05,34,24.1875,2,2,male,2004,22.65625,12,41.42856979,21.67556381,2,1,0,10.75154004,1.29,25.2 -141,944,3420,0,0.11,35,68,2,2,female,2004,19.89143372,12,41.2857132,28.17795944,3,2,1,11.24994296,1.4,34.9 -142,954,2710,1,0.42,33,25.3125,2,2,male,2005,18.27812195,19,39.57143021,29.86995125,3,1,0,10.81998631,1.425,35.4 -143,960,3390,1,-1.17,33,16,2,2,female,2004,26.98600006,10,40,29.90280724,3,1,1,10.34086242,1.385,29.5 -144,969,3940,0,1.42,31,17.1875,3,2,male,2004,25.8064518,24,40.1428566,33.17179871,2,2,0,10.52977413,1.42,39.9 -145,979,3480,0,0.41,26,21.1875,2,2,male,2004,32.66076279,0,40,24.73100662,2,2,0,10.3464522,1.34,31.1 -146,985,3670,0,1.62,34,34.375,3,2,female,2003,21.82995224,16,38.8571434,32.10129929,3,2,2,11.08008214,1.495,50.1 -147,991,3360,1,1.96,31,48.375,3,2,male,2003,31.23140907,20,42.57143021,29.51950645,3,2,0,11.2198266,1.43,50.1 -148,997,3570,0,0.26,34,22.25,2,2,male,2003,22.49135017,20,39.2857132,30.6365509,2,2,1,11.34576774,1.375,39.1 -149,1014,4250,0,1.57,31,42.125,3,2,male,2004,19.03149223,25,40.57143021,21.70020485,3,2,0,11.02806297,1.48,41.7 -150,1026,4440,0,-0.12,34,10.1875,2,2,male,2003,28.54828072,13,39.7142868,34.63381195,3,2,1,11.71241159,1.48,37.5 -151,1033,3420,0,0.06,33,24.0625,2,2,female,2004,28.37178612,13,41,32,3,2,0,10.93771389,1.45,36.7 -152,1034,4090,0,-0.35,32,25.125,2,2,male,2004,22.40817899,28,39.7142868,34.05612564,2,2,2,11.49634953,1.565,40.6 -153,1035,3490,0,0.39,35,39.125,2,2,male,2005,21.69664001,12,39.42856979,27.09650993,2,2,0,10.59810632,1.515,39.4 -154,1038,3790,1,-0.59,34,28,2,2,male,2004,18.49548531,17,42.57143021,28.78850174,2,2,0,11.15674196,1.46,33.8 -155,1042,3690,0,-0.09,33,43.6875,2,2,male,2004,26.70940208,12,36.57143021,25.43463326,2,2,0,11.24161533,1.435,37 -156,1045,3622,0,2.21,33,4.0625,4,2,male,2005,27.81588173,35,41,27.42505074,2,2,2,10.37907826,1.465,48.3 -157,1061,3500,0,-0.18,26,33,2,2,male,2005,20.3074131,21,38.57143021,22.0314846,2,2,0,9.659137577,1.445,57.3 -158,1063,4100,0,-0.34,35,27.125,2,2,male,2005,18.98160553,20,40.8571434,28,2,2,1,10.15183664,1.445,33.3 -159,1065,2620,1,2.27,32,17,4,2,female,2003,22.9481163,16,38.42856979,31.60848808,3,2,1,9.369039471,1.452,44 -160,1077,3360,0,-0.23,31,34.375,2,2,female,2003,26.42702484,10,38.42856979,33.89459229,3,2,2,10.73511294,1.485,36.6 -161,1078,3650,0,1.49,34,24,3,2,female,2003,24.38652611,8,40.1428566,35.13210297,3,2,0,11.34302989,1.46,46.7 -162,1079,3190,0,-1.07,36,10.0625,2,2,female,2005,21.30394936,10,40.1428566,28.44353104,3,2,1,9.538672142,1.345,26.3 -163,1086,2960,0,-0.23,33,25.3125,2,2,male,2005,20.79673004,8,40,35.94797897,3,2,1,10.16563997,1.415,32.7 -164,1095,3310,1,-0.73,33,12.0625,2,2,female,2004,18.30576897,12,37.57143021,29.48117638,1,2,0,10.40668492,1.46,32.8 -165,1105,3350,0,0.52,31,33.1875,2,2,male,2005,24.15093994,15,40.42856979,28.29294968,3,2,0,10.20933151,1.46,36.8 -166,1116,2850,1,1.01,34,89,3,2,male,2005,23.61275101,20,38.2857132,28,3,2,0,10.29968058,1.45,39.1 -167,1120,3680,1,-0.4,34,28,2,2,female,2004,20.390625,9,42.42856979,33.99589157,3,2,2,10.62297513,1.43,33.1 -168,1121,3220,0,-0.36,33,17.125,2,2,male,2003,25.72755432,12,38.2857132,26,2,2,1,11.03080082,1.55,39.2 -169,1129,3760,1,1.75,26,23.125,3,2,male,2003,25.47542572,10,41.42856979,30.6420269,2,2,2,11.70146019,1.485,46.2 -170,1133,2550,0,-0.76,32,35,2,2,male,2004,26.89232254,18,37.57143021,31.93155289,2,2,1,10.40645676,1.33,27.3 -171,1139,3350,0,1.46,31,37,3,2,female,2003,21.13252831,12,40.8571434,38.40930939,3,2,0,11.34576774,1.47,46.7 -172,1143,3680,0,-1.25,32,18,2,2,male,2004,17.00680351,21,37.7142868,26.87748146,3,2,1,10.59536847,1.435,30.5 -173,1146,2560,0,-1.52,28,1,2,2,female,2004,19.95728441,11,39.57143021,33.71115494,3,1,2,11.26625599,1.315,32.3 -174,1147,3460,0,0.05,33,26.3125,2,2,male,2005,19.81767654,13,40.1428566,26.73241997,3,2,1,10.35728953,1.37,31.5 -175,1152,3550,0,0.88,32,26.375,2,2,male,2005,24.42583656,19,38.57143021,24.7748127,3,2,0,10.5927447,1.53,43.5 -176,1166,3130,0,1.45,30,34,3,2,female,2003,29.58579826,3,39.1428566,31.27994537,3,2,1,11.22245038,1.465,46.4 -177,1173,1400,0,0.52,27,44.375,2,2,female,2003,30.25132179,0,30.8571434,20.98562622,1,2,0,11.48539813,1.475,41.1 -178,1175,3090,0,1.2,33,28.125,3,2,female,2004,24.16326531,8,40.7142868,30.56262779,3,2,0,11.24994296,1.45,36.3 -179,1177,3212,0,1.33,29,19,3,2,female,2003,22.64737701,9,40.7142868,31.55646896,3,2,1,11.62765229,1.58,51.3 -180,1182,3310,0,2.5,34,39.375,4,2,male,2004,28.76397133,30,39.57143021,29.23750877,2,2,0,11.04722793,1.425,51.6 -181,1188,3310,0,0.04,34,6.125,2,2,female,2004,20.62494469,10,36.42856979,28.005476,3,2,0,10.86926762,1.42,35.3 -182,1193,3960,0,-0.73,34,37.25,2,2,female,2004,29.71918678,15,39.7142868,30.43394852,2,2,1,10.66119097,1.355,28.7 -183,1194,2960,0,-0.32,34,12,2,2,female,2004,24.02380943,12.69999981,40.8571434,30.71321106,3,2,0,10.96783025,1.46,35.3 -184,1199,3140,1,0.44,29,34.3125,2,2,female,2003,20.44913673,30,40.57143021,27.1567421,2,2,1,10.19849418,1.52,41.4 -185,1208,3350,0,0.67,32,23.25,2,2,male,2004,23.42209053,8,41,30.10266876,2,2,0,10.58167922,1.375,33.8 -186,1214,3460,1,-1.47,31,13.125,2,2,female,2005,28.43531418,5,39.1428566,35.71526337,1,2,2,9.484029204,1.33,23.4 -187,1215,3820,0,0.84,28,24.25,2,2,male,2005,19.72318268,11,40.7142868,35.34839249,2,2,1,10.15731234,1.49,40.4 -188,1217,3640,0,-1.99,33,0,2,2,male,2004,22.4996376,15,38.7142868,30.02874756,3,2,0,10.51870865,1.495,27.6 -189,1227,3590,0,-1.24,32,43,2,2,female,2004,24.9107666,20,42,28.2546196,2,2,1,10.65309149,1.415,29.6 -190,1239,3770,0,-0.64,34,13.0625,2,2,female,2004,24.82883263,10,37.57143021,25.21013069,3,2,0,11.81930185,1.515,37.9 -191,1240,3040,0,-2.22,35,19,1,2,female,2004,30.25132179,12,39.57143021,27.69609833,2,2,0,10.77081907,1.316,25.9 -192,1244,3590,0,0.06,35,16.1875,2,2,female,2003,18.2898941,10,40.7142868,29.11704254,3,2,1,11.34576774,1.435,35.2 -193,1247,3400,1,-0.39,28,14.1875,2,2,male,2004,20.93663979,23,40.8571434,28.58589935,3,2,0,10.43680128,1.41,31.8 -194,1252,2820,0,-1.43,23,26.125,2,2,female,2004,19.23356056,15,39.2857132,22.82272339,2,2,0,10.34371435,1.325,24.4 -195,1260,3500,1,-0.92,31,29,2,2,female,2004,21.49489021,12,39.42856979,29.43463326,3,2,0,10.65845311,1.43,31.7 -196,1274,2930,0,0.47,33,6,2,2,female,2004,24.18745232,9,40.42856979,28.61875343,3,2,0,11.03080082,1.355,32.7 -197,1285,3080,0,1.93,35,8,3,2,female,2003,27.30448723,15,38.57143021,29.50581741,2,2,0,11.9835729,1.685,69.9 -198,1291,2800,0,1.05,31,23,3,2,female,2004,19.50685692,20,37.42856979,30.60095787,1,1,1,10.11362081,1.355,35.4 \ No newline at end of file diff --git a/tests/testthat/data_files/GAMLSS/gamlss3.rda b/tests/testthat/data_files/GAMLSS/gamlss3.rda deleted file mode 100644 index 0b2fa87d..00000000 Binary files a/tests/testthat/data_files/GAMLSS/gamlss3.rda and /dev/null differ diff --git a/tests/testthat/data_files/MEDIATION/UPBdata1.csv b/tests/testthat/data_files/MEDIATION/UPBdata1.csv deleted file mode 100644 index d95a3670..00000000 --- a/tests/testthat/data_files/MEDIATION/UPBdata1.csv +++ /dev/null @@ -1,386 +0,0 @@ -"","att","attbin","attcat","negaff","initiator","gender","educ","age","UPB" -"1",1.0005617251787,1,"M",0.840460963028066,"myself","F","M",41,1 -"2",-0.708588935066827,0,"L",-1.25746496925322,"both","M","M",42,0 -"3",-0.708588935066827,0,"L",-1.20225639208792,"both","F","H",43,0 -"4",0.606142342045117,1,"M",-0.374127734608467,"ex-partner","M","H",52,1 -"5",0.211722958911534,1,"M",1.94463250633401,"ex-partner","M","M",32,1 -"6",2.05234674686826,1,"H",-0.815796351930843,"ex-partner","M","H",47,0 -"7",-0.314169551933244,0,"L",-0.429336311773764,"ex-partner","F","M",52,1 -"8",0.343196086622728,1,"M",-1.25746496925322,"myself","M","H",54,0 -"9",-1.10300831820041,0,"L",-0.705379197600249,"myself","F","H",59,0 -"10",-0.051223296510855,0,"M",-0.926213506261437,"ex-partner","M","M",44,0 -"11",-0.708588935066827,0,"L",0.674835231532175,"myself","F","H",32,1 -"12",-0.051223296510855,0,"M",0.840460963028066,"ex-partner","F","M",51,1 -"13",-0.182696424222049,0,"L",-0.0428762716166852,"ex-partner","F","H",48,0 -"14",1.0005617251787,1,"M",2.33109254649108,"both","F","H",39,1 -"15",0.474669214333923,1,"M",-0.705379197600249,"both","F","M",33,0 -"16",-0.051223296510855,0,"M",0.343583768540394,"both","M","H",52,0 -"17",-1.3659545736228,0,"L",-0.208502003112576,"ex-partner","M","M",34,0 -"18",-0.051223296510855,0,"M",1.94463250633401,"both","F","L",45,1 -"19",0.737615469756312,1,"M",-0.429336311773764,"myself","F","M",39,0 -"20",0.474669214333923,1,"M",0.122749459879206,"ex-partner","M","M",51,1 -"21",0.737615469756312,1,"M",-0.374127734608467,"myself","F","H",28,1 -"22",-0.708588935066827,0,"L",0.840460963028066,"myself","M","M",37,1 -"23",0.343196086622728,1,"M",-0.153293425947279,"myself","F","M",29,0 -"24",0.737615469756312,1,"M",-1.25746496925322,"both","F","H",42,1 -"25",-1.3659545736228,0,"L",-1.09183923775733,"ex-partner","F","M",40,0 -"26",-1.3659545736228,0,"L",-0.208502003112576,"myself","F","H",47,0 -"27",-0.577115807355633,0,"L",-0.484544888939061,"myself","F","M",55,0 -"28",1.1320348528899,1,"M",0.619626654366878,"ex-partner","F","H",42,0 -"29",-1.3659545736228,0,"L",-0.815796351930843,"both","M","H",26,0 -"30",1.78940049144587,1,"H",-1.09183923775733,"ex-partner","F","M",34,0 -"31",-0.314169551933244,0,"L",-0.926213506261437,"myself","F","H",25,0 -"32",-1.3659545736228,0,"L",-1.20225639208792,"both","F","M",62,0 -"33",-0.445642679644438,0,"L",-0.87100492909614,"myself","M","H",62,0 -"34",-1.3659545736228,0,"L",-0.705379197600249,"myself","F","H",33,0 -"35",-0.051223296510855,0,"M",0.895669540193363,"myself","F","M",35,1 -"36",0.0802498312003395,1,"M",1.72379819767282,"ex-partner","F","M",38,0 -"37",1.0005617251787,1,"M",-0.153293425947279,"myself","F","M",42,1 -"38",-0.182696424222049,0,"L",-0.815796351930843,"myself","F","M",55,1 -"39",-0.840062062778022,0,"L",-0.0428762716166852,"myself","F","L",51,0 -"41",-0.708588935066827,0,"L",0.509209500036284,"myself","M","H",43,1 -"42",0.211722958911534,1,"M",0.0675408827139087,"ex-partner","F","H",40,1 -"43",1.0005617251787,1,"M",1.83421535200341,"ex-partner","F","H",61,0 -"44",-0.182696424222049,0,"L",1.50296388901163,"myself","F","H",46,1 -"45",0.869088597467506,1,"M",1.55817246617693,"ex-partner","M","M",47,1 -"46",-1.3659545736228,0,"L",0.840460963028066,"myself","F","M",51,0 -"47",-1.3659545736228,0,"L",0.0123323055486118,"myself","F","H",41,0 -"48",-0.971535190489216,0,"L",-1.03663066059203,"ex-partner","M","H",61,0 -"49",1.1320348528899,1,"M",0.0675408827139087,"myself","F","H",34,0 -"50",-0.708588935066827,0,"L",-0.484544888939061,"myself","F","M",54,1 -"51",-0.051223296510855,0,"M",1.88942392916871,"myself","F","H",42,1 -"52",-0.182696424222049,0,"L",-0.926213506261437,"myself","F","H",48,1 -"53",-0.971535190489216,0,"L",-0.0428762716166852,"both","M","H",59,0 -"54",-1.3659545736228,0,"L",-1.36788212358381,"ex-partner","M","M",47,0 -"55",-0.445642679644438,0,"L",-0.0428762716166852,"myself","F","M",49,0 -"56",1.1320348528899,1,"M",-0.760587774765546,"myself","F","H",51,0 -"57",-0.577115807355633,0,"L",-1.36788212358381,"myself","F","H",36,0 -"58",-0.314169551933244,0,"L",0.840460963028066,"ex-partner","F","M",46,0 -"60",1.1320348528899,1,"M",0.288375191375097,"ex-partner","F","H",41,1 -"61",-0.051223296510855,0,"M",-1.36788212358381,"myself","F","M",33,1 -"62",-0.182696424222049,0,"L",-0.429336311773764,"ex-partner","M","M",25,0 -"63",1.1320348528899,1,"M",-0.815796351930843,"ex-partner","F","M",38,0 -"64",1.1320348528899,1,"M",0.730043808697472,"ex-partner","F","H",47,0 -"65",-1.10300831820041,0,"L",-0.0980848487819821,"ex-partner","M","M",30,1 -"66",1.0005617251787,1,"M",2.27588396932579,"both","F","M",29,1 -"67",0.869088597467506,1,"M",-1.14704781492262,"myself","F","H",49,0 -"68",0.343196086622728,1,"M",-1.36788212358381,"myself","M","H",59,0 -"69",0.343196086622728,1,"M",-0.153293425947279,"myself","F","M",23,1 -"70",0.474669214333923,1,"M",0.343583768540394,"ex-partner","M","M",47,1 -"72",1.78940049144587,1,"H",2.33109254649108,"myself","M","M",54,1 -"73",0.606142342045117,1,"M",-0.705379197600249,"myself","F","M",35,0 -"74",-1.3659545736228,0,"L",-1.20225639208792,"myself","M","M",30,0 -"75",1.1320348528899,1,"M",1.11650384885455,"ex-partner","F","H",31,1 -"76",1.1320348528899,1,"M",-0.760587774765546,"both","F","M",41,0 -"77",-0.708588935066827,0,"L",2.38630112365638,"ex-partner","M","H",43,1 -"78",1.1320348528899,1,"M",-0.263710580277873,"myself","M","H",44,0 -"79",1.1320348528899,1,"M",1.50296388901163,"myself","F","M",46,0 -"80",2.57823925771303,1,"H",0.785252385862769,"both","M","M",54,1 -"81",-1.3659545736228,0,"L",-0.926213506261437,"both","M","M",42,0 -"82",-1.3659545736228,0,"L",-0.594962043269655,"myself","M","H",43,0 -"83",-1.3659545736228,0,"L",0.840460963028066,"myself","F","M",41,0 -"85",0.474669214333923,1,"M",1.22692100318514,"myself","M","M",58,0 -"86",0.869088597467506,1,"M",-0.484544888939061,"ex-partner","M","L",42,0 -"87",0.474669214333923,1,"M",-0.0428762716166852,"myself","M","M",47,1 -"88",-0.182696424222049,0,"L",0.619626654366878,"ex-partner","M","H",55,0 -"89",-0.051223296510855,0,"M",1.50296388901163,"ex-partner","M","H",49,1 -"90",-1.3659545736228,0,"L",0.509209500036284,"ex-partner","M","H",41,0 -"91",-1.3659545736228,0,"L",-0.926213506261437,"myself","F","M",43,0 -"92",0.0802498312003395,1,"M",-1.25746496925322,"both","F","M",45,0 -"94",-0.708588935066827,0,"L",-1.03663066059203,"both","F","M",54,0 -"95",-1.3659545736228,0,"L",-0.926213506261437,"ex-partner","F","H",39,0 -"96",-1.23448144591161,0,"L",1.11650384885455,"ex-partner","F","L",28,0 -"97",-1.3659545736228,0,"L",-0.484544888939061,"both","M","M",49,0 -"98",-0.445642679644438,0,"L",-0.31891915744317,"myself","F","H",48,1 -"99",0.737615469756312,1,"M",0.454000922870987,"ex-partner","M","H",37,1 -"100",-1.3659545736228,0,"L",0.454000922870987,"myself","F","M",47,0 -"101",0.606142342045117,1,"M",-0.0428762716166852,"myself","F","H",27,0 -"102",1.92087361915706,1,"H",-0.484544888939061,"myself","F","M",56,0 -"103",-0.051223296510855,0,"M",-1.20225639208792,"myself","M","L",62,0 -"104",-0.051223296510855,0,"M",-0.374127734608467,"both","M","H",33,0 -"105",0.474669214333923,1,"M",0.177958037044503,"ex-partner","M","M",47,1 -"106",0.211722958911534,1,"M",-0.87100492909614,"both","M","M",48,0 -"108",-0.971535190489216,0,"L",-1.36788212358381,"myself","F","H",42,0 -"109",-1.3659545736228,0,"L",-0.926213506261437,"myself","F","H",38,0 -"110",-0.051223296510855,0,"M",-0.484544888939061,"ex-partner","M","H",40,1 -"111",-1.3659545736228,0,"L",0.122749459879206,"myself","F","M",47,0 -"112",-0.708588935066827,0,"L",-0.153293425947279,"both","F","H",33,0 -"113",-0.314169551933244,0,"L",-0.760587774765546,"ex-partner","F","H",37,1 -"114",-0.314169551933244,0,"L",0.39879234570569,"myself","M","M",32,0 -"115",-0.577115807355633,0,"L",0.0675408827139087,"ex-partner","F","M",39,1 -"116",-0.840062062778022,0,"L",-0.208502003112576,"both","F","M",58,1 -"117",1.65792736373467,1,"H",0.122749459879206,"both","F","H",36,0 -"118",1.78940049144587,1,"H",-1.36788212358381,"myself","F","M",30,1 -"119",0.343196086622728,1,"M",0.674835231532175,"both","F","H",47,0 -"120",-0.182696424222049,0,"L",1.66858962050752,"myself","F","H",32,0 -"121",0.343196086622728,1,"M",-0.208502003112576,"myself","F","H",29,1 -"122",1.0005617251787,1,"M",0.840460963028066,"both","F","M",48,0 -"123",0.211722958911534,1,"M",-0.650170620434952,"myself","F","L",61,1 -"124",0.869088597467506,1,"M",-1.14704781492262,"myself","M","M",38,0 -"125",1.39498110831228,1,"H",0.454000922870987,"ex-partner","F","M",38,1 -"126",-0.840062062778022,0,"L",-1.36788212358381,"ex-partner","M","H",37,0 -"127",1.39498110831228,1,"H",0.0123323055486118,"both","M","H",52,0 -"128",-1.3659545736228,0,"L",-1.36788212358381,"both","F","H",40,0 -"129",-0.314169551933244,0,"L",-0.87100492909614,"ex-partner","M","M",56,0 -"130",0.606142342045117,1,"M",0.95087811735866,"ex-partner","F","L",33,0 -"131",1.26350798060109,1,"H",1.28212958035044,"ex-partner","F","H",55,1 -"132",-1.3659545736228,0,"L",-1.36788212358381,"myself","M","M",51,1 -"133",0.211722958911534,1,"M",-1.36788212358381,"myself","F","L",57,0 -"134",-0.840062062778022,0,"L",1.06129527168925,"myself","M","H",30,0 -"135",0.606142342045117,1,"M",1.55817246617693,"myself","F","M",43,0 -"136",1.52645423602348,1,"H",0.343583768540394,"myself","F","M",25,0 -"137",-0.051223296510855,0,"M",-1.03663066059203,"ex-partner","M","M",40,0 -"138",-1.3659545736228,0,"L",1.22692100318514,"ex-partner","M","M",49,1 -"139",-0.840062062778022,0,"L",-0.594962043269655,"both","M","H",31,0 -"140",1.26350798060109,1,"H",1.39254673468104,"ex-partner","M","H",43,1 -"141",1.0005617251787,1,"M",-0.87100492909614,"myself","F","H",43,0 -"142",1.52645423602348,1,"H",0.177958037044503,"myself","F","H",32,0 -"143",-0.314169551933244,0,"L",-0.815796351930843,"both","M","M",37,0 -"144",1.52645423602348,1,"H",-0.981422083426734,"myself","M","M",31,0 -"145",0.0802498312003395,1,"M",-0.263710580277873,"ex-partner","F","M",37,1 -"146",0.474669214333923,1,"M",-0.263710580277873,"ex-partner","F","M",45,0 -"147",-1.3659545736228,0,"L",-0.981422083426734,"myself","F","H",37,1 -"148",-1.3659545736228,0,"L",-1.36788212358381,"myself","M","M",51,0 -"149",-0.971535190489216,0,"L",0.840460963028066,"ex-partner","M","M",55,1 -"150",-0.577115807355633,0,"L",-1.20225639208792,"myself","M","H",56,1 -"151",-1.3659545736228,0,"L",-1.14704781492262,"ex-partner","F","M",54,1 -"152",-0.840062062778022,0,"L",0.454000922870987,"myself","F","L",52,0 -"153",-1.3659545736228,0,"L",-0.539753466104358,"myself","M","M",53,1 -"154",1.52645423602348,1,"H",1.72379819767282,"ex-partner","M","M",46,1 -"155",-0.182696424222049,0,"L",-1.36788212358381,"myself","F","M",39,0 -"156",-1.3659545736228,0,"L",-1.14704781492262,"myself","F","M",36,0 -"157",-0.840062062778022,0,"L",-1.14704781492262,"myself","M","M",54,0 -"158",-0.577115807355633,0,"L",-0.0980848487819821,"myself","F","M",47,0 -"159",-0.314169551933244,0,"L",-1.36788212358381,"both","M","H",35,0 -"160",0.737615469756312,1,"M",0.2331666142098,"ex-partner","F","H",38,1 -"161",-0.051223296510855,0,"M",1.50296388901163,"both","F","H",47,0 -"162",0.737615469756312,1,"M",0.730043808697472,"both","M","M",46,0 -"163",-0.577115807355633,0,"L",-1.09183923775733,"both","F","H",46,0 -"164",0.0802498312003395,1,"M",-0.263710580277873,"both","F","M",49,1 -"165",1.52645423602348,1,"H",0.840460963028066,"ex-partner","M","H",41,1 -"166",1.26350798060109,1,"H",0.785252385862769,"both","F","M",53,1 -"167",0.343196086622728,1,"M",1.72379819767282,"ex-partner","M","H",44,1 -"168",-0.051223296510855,0,"M",0.564418077201581,"myself","M","H",48,0 -"169",1.26350798060109,1,"H",-0.594962043269655,"ex-partner","M","M",48,0 -"170",-0.708588935066827,0,"L",-0.484544888939061,"myself","M","L",48,0 -"171",1.39498110831228,1,"H",-0.926213506261437,"myself","F","H",45,0 -"172",-1.3659545736228,0,"L",-1.36788212358381,"both","F","M",61,0 -"173",-0.708588935066827,0,"L",-1.36788212358381,"myself","F","H",63,0 -"175",-1.3659545736228,0,"L",-0.374127734608467,"ex-partner","M","H",47,0 -"176",-1.3659545736228,0,"L",-1.36788212358381,"myself","F","M",36,0 -"177",-1.3659545736228,0,"L",-0.0428762716166852,"myself","F","H",35,0 -"178",1.65792736373467,1,"H",-0.374127734608467,"myself","M","M",45,0 -"179",1.39498110831228,1,"H",1.28212958035044,"myself","F","H",37,0 -"180",1.65792736373467,1,"H",0.564418077201581,"both","M","M",43,1 -"181",1.39498110831228,1,"H",0.2331666142098,"ex-partner","F","M",48,0 -"182",-1.3659545736228,0,"L",-1.36788212358381,"myself","F","H",48,0 -"183",-0.051223296510855,0,"M",-0.31891915744317,"myself","M","H",35,1 -"184",-0.840062062778022,0,"L",-1.36788212358381,"both","F","H",46,0 -"185",-1.3659545736228,0,"L",0.0675408827139087,"myself","F","H",43,0 -"186",-0.971535190489216,0,"L",0.2331666142098,"ex-partner","F","H",33,0 -"187",0.474669214333923,1,"M",-1.36788212358381,"both","M","M",48,0 -"188",1.39498110831228,1,"H",1.83421535200341,"ex-partner","F","H",45,1 -"189",0.343196086622728,1,"M",0.2331666142098,"both","F","M",54,0 -"190",-0.971535190489216,0,"L",-0.484544888939061,"both","M","M",51,0 -"191",1.39498110831228,1,"H",0.343583768540394,"ex-partner","M","H",44,1 -"192",-0.708588935066827,0,"L",-0.484544888939061,"myself","F","H",26,0 -"193",-1.3659545736228,0,"L",-1.03663066059203,"ex-partner","M","H",33,0 -"194",0.474669214333923,1,"M",1.72379819767282,"ex-partner","M","M",68,0 -"195",1.26350798060109,1,"H",0.454000922870987,"myself","F","M",44,0 -"196",-1.3659545736228,0,"L",0.177958037044503,"both","M","H",38,1 -"197",0.606142342045117,1,"M",0.840460963028066,"ex-partner","F","H",35,1 -"198",-0.182696424222049,0,"L",-0.31891915744317,"myself","F","M",43,0 -"199",0.737615469756312,1,"M",-0.705379197600249,"myself","M","H",27,0 -"200",-0.445642679644438,0,"L",0.39879234570569,"ex-partner","M","M",49,0 -"201",-0.971535190489216,0,"L",-1.03663066059203,"myself","F","M",44,0 -"202",-0.840062062778022,0,"L",-1.25746496925322,"myself","M","H",50,0 -"203",2.31529300229065,1,"H",1.06129527168925,"ex-partner","F","H",49,0 -"204",0.474669214333923,1,"M",-0.705379197600249,"myself","M","L",39,0 -"205",1.39498110831228,1,"H",1.06129527168925,"both","F","H",28,1 -"206",0.869088597467506,1,"M",0.122749459879206,"myself","F","M",50,0 -"207",-1.3659545736228,0,"L",-1.36788212358381,"myself","F","M",37,0 -"208",0.343196086622728,1,"M",-1.36788212358381,"myself","F","M",32,0 -"210",-1.3659545736228,0,"L",1.28212958035044,"both","F","M",44,0 -"211",1.0005617251787,1,"M",0.895669540193363,"myself","F","M",33,0 -"212",-0.182696424222049,0,"L",0.177958037044503,"both","M","M",32,0 -"213",-0.708588935066827,0,"L",-1.03663066059203,"myself","M","L",36,1 -"214",2.05234674686826,1,"H",2.27588396932579,"ex-partner","M","M",60,1 -"215",-1.3659545736228,0,"L",0.730043808697472,"ex-partner","M","M",41,0 -"216",1.65792736373467,1,"H",1.17171242601985,"ex-partner","F","M",37,0 -"217",0.737615469756312,1,"M",1.77900677483811,"myself","F","H",28,1 -"218",0.211722958911534,1,"M",-1.03663066059203,"myself","F","M",34,0 -"219",-1.3659545736228,0,"L",-1.36788212358381,"myself","M","H",64,0 -"220",0.0802498312003395,1,"M",-0.87100492909614,"ex-partner","F","M",64,0 -"221",-1.3659545736228,0,"L",1.50296388901163,"ex-partner","F","M",49,0 -"222",1.39498110831228,1,"H",-1.36788212358381,"myself","M","H",49,0 -"223",0.474669214333923,1,"M",1.39254673468104,"ex-partner","F","M",43,0 -"224",0.0802498312003395,1,"M",-0.539753466104358,"myself","F","M",36,0 -"225",-0.840062062778022,0,"L",-0.926213506261437,"myself","M","M",40,0 -"226",0.211722958911534,1,"M",-0.926213506261437,"myself","F","M",38,0 -"227",-0.971535190489216,0,"L",-0.484544888939061,"ex-partner","F","M",54,0 -"228",-0.051223296510855,0,"M",2.22067539216049,"myself","F","H",44,1 -"229",-1.3659545736228,0,"L",0.509209500036284,"myself","F","M",45,0 -"230",-0.314169551933244,0,"L",-0.539753466104358,"myself","F","L",39,0 -"231",-1.3659545736228,0,"L",0.0123323055486118,"myself","F","M",50,0 -"232",-0.577115807355633,0,"L",0.288375191375097,"both","M","M",50,1 -"233",0.343196086622728,1,"M",-0.429336311773764,"myself","M","L",46,0 -"234",0.343196086622728,1,"M",1.55817246617693,"ex-partner","M","H",62,0 -"235",0.869088597467506,1,"M",-1.36788212358381,"myself","F","M",26,0 -"236",-0.445642679644438,0,"L",0.454000922870987,"both","M","H",35,0 -"237",1.26350798060109,1,"H",1.44775531184633,"myself","F","M",50,1 -"238",-1.3659545736228,0,"L",-0.815796351930843,"myself","F","M",55,0 -"239",0.343196086622728,1,"M",-0.705379197600249,"myself","F","H",37,1 -"240",0.606142342045117,1,"M",-1.36788212358381,"myself","F","M",43,0 -"241",0.343196086622728,1,"M",0.619626654366878,"myself","F","M",51,0 -"242",-0.445642679644438,0,"L",0.0675408827139087,"ex-partner","M","M",45,0 -"243",0.474669214333923,1,"M",1.39254673468104,"myself","F","M",45,0 -"244",-1.3659545736228,0,"L",-0.705379197600249,"myself","F","M",42,1 -"245",-1.3659545736228,0,"L",0.39879234570569,"myself","M","M",35,0 -"246",0.0802498312003395,1,"M",-0.429336311773764,"myself","M","L",50,1 -"247",-0.971535190489216,0,"L",-0.0428762716166852,"myself","M","H",50,0 -"248",-0.840062062778022,0,"L",-0.0980848487819821,"myself","M","H",63,1 -"249",-0.971535190489216,0,"L",-0.594962043269655,"both","M","M",54,0 -"250",1.65792736373467,1,"H",-0.815796351930843,"myself","F","M",35,0 -"251",1.26350798060109,1,"H",-0.208502003112576,"ex-partner","F","H",40,0 -"252",0.211722958911534,1,"M",-0.0428762716166852,"myself","F","M",37,1 -"253",-0.708588935066827,0,"L",0.674835231532175,"myself","F","M",25,1 -"254",1.26350798060109,1,"H",-0.0428762716166852,"myself","F","M",46,0 -"255",-0.182696424222049,0,"L",-1.36788212358381,"ex-partner","M","M",56,0 -"256",1.0005617251787,1,"M",-1.09183923775733,"myself","F","H",40,0 -"257",-0.708588935066827,0,"L",-1.20225639208792,"ex-partner","M","M",30,1 -"258",-0.182696424222049,0,"L",-0.0980848487819821,"both","M","H",32,1 -"259",0.0802498312003395,1,"M",1.66858962050752,"both","F","M",39,0 -"260",0.737615469756312,1,"M",-1.09183923775733,"myself","F","H",61,1 -"261",-0.445642679644438,0,"L",-0.31891915744317,"both","M","M",41,0 -"262",0.869088597467506,1,"M",1.55817246617693,"ex-partner","F","H",49,0 -"263",0.343196086622728,1,"M",-0.760587774765546,"both","F","H",30,0 -"264",0.474669214333923,1,"M",1.77900677483811,"myself","F","H",37,1 -"265",-1.3659545736228,0,"L",-1.36788212358381,"myself","F","M",46,1 -"266",1.0005617251787,1,"M",0.619626654366878,"ex-partner","M","M",45,1 -"267",1.92087361915706,1,"H",-0.705379197600249,"ex-partner","M","M",50,1 -"268",0.211722958911534,1,"M",-0.650170620434952,"ex-partner","M","M",62,1 -"269",-0.840062062778022,0,"L",-0.153293425947279,"both","F","M",31,0 -"270",0.737615469756312,1,"M",1.17171242601985,"myself","M","H",45,0 -"271",-0.182696424222049,0,"L",0.895669540193363,"ex-partner","F","M",43,1 -"272",0.0802498312003395,1,"M",0.619626654366878,"ex-partner","M","H",28,1 -"273",-0.708588935066827,0,"L",-0.484544888939061,"both","F","M",42,0 -"274",2.44676613000184,1,"H",1.61338104334222,"ex-partner","M","H",44,1 -"275",-0.051223296510855,0,"M",-0.31891915744317,"myself","F","M",43,0 -"277",-0.708588935066827,0,"L",0.785252385862769,"myself","F","M",47,1 -"278",1.0005617251787,1,"M",1.00608669452396,"ex-partner","M","M",49,1 -"279",1.39498110831228,1,"H",1.33733815751574,"ex-partner","M","M",33,1 -"280",0.0802498312003395,1,"M",0.619626654366878,"myself","F","H",43,0 -"281",1.0005617251787,1,"M",0.343583768540394,"myself","F","M",26,1 -"282",0.0802498312003395,1,"M",-0.263710580277873,"myself","F","M",44,0 -"283",-0.314169551933244,0,"L",-0.484544888939061,"myself","F","M",38,0 -"284",-1.3659545736228,0,"L",-0.0428762716166852,"ex-partner","M","L",37,1 -"285",-0.708588935066827,0,"L",-1.36788212358381,"both","M","H",68,0 -"286",-1.3659545736228,0,"L",-1.14704781492262,"myself","F","H",50,0 -"287",-1.3659545736228,0,"L",-1.36788212358381,"both","F","L",49,0 -"288",-1.3659545736228,0,"L",0.177958037044503,"myself","F","M",49,0 -"289",-1.3659545736228,0,"L",0.895669540193363,"ex-partner","F","M",36,0 -"290",-0.182696424222049,0,"L",-0.484544888939061,"ex-partner","M","M",43,0 -"291",0.474669214333923,1,"M",0.674835231532175,"myself","F","H",30,1 -"292",1.26350798060109,1,"H",0.619626654366878,"ex-partner","M","H",57,1 -"293",0.737615469756312,1,"M",1.17171242601985,"myself","F","M",52,0 -"294",-1.3659545736228,0,"L",-0.0428762716166852,"both","M","M",37,0 -"295",-0.840062062778022,0,"L",-0.705379197600249,"both","F","L",46,0 -"296",0.343196086622728,1,"M",-0.153293425947279,"ex-partner","M","H",35,1 -"297",0.343196086622728,1,"M",-0.374127734608467,"myself","F","L",22,1 -"298",1.0005617251787,1,"M",-0.815796351930843,"myself","F","H",37,0 -"299",0.606142342045117,1,"M",2.44150970082168,"ex-partner","F","M",28,1 -"301",-0.445642679644438,0,"L",0.674835231532175,"myself","F","M",30,0 -"302",-1.3659545736228,0,"L",0.0675408827139087,"both","F","M",54,0 -"303",-0.182696424222049,0,"L",0.619626654366878,"myself","F","H",35,0 -"304",-1.3659545736228,0,"L",-1.36788212358381,"both","F","M",35,0 -"305",-1.3659545736228,0,"L",-0.0980848487819821,"myself","F","M",48,0 -"306",0.474669214333923,1,"M",0.785252385862769,"myself","M","M",44,0 -"307",2.05234674686826,1,"H",0.122749459879206,"ex-partner","F","M",47,0 -"308",0.211722958911534,1,"M",0.2331666142098,"myself","F","M",33,1 -"309",0.869088597467506,1,"M",2.33109254649108,"ex-partner","F","H",47,1 -"310",1.39498110831228,1,"H",0.0675408827139087,"myself","F","M",44,1 -"311",2.18381987457945,1,"H",0.509209500036284,"ex-partner","M","H",48,0 -"312",1.39498110831228,1,"H",0.0675408827139087,"ex-partner","M","M",45,1 -"313",-0.577115807355633,0,"L",-1.25746496925322,"both","F","M",45,1 -"314",1.52645423602348,1,"H",3.04880404963994,"ex-partner","F","M",57,1 -"315",-0.445642679644438,0,"L",0.95087811735866,"both","M","M",47,1 -"316",-0.314169551933244,0,"L",-1.20225639208792,"both","F","M",42,0 -"317",0.343196086622728,1,"M",-1.36788212358381,"myself","F","H",67,0 -"318",0.211722958911534,1,"M",-0.926213506261437,"ex-partner","M","H",41,0 -"319",-0.708588935066827,0,"L",0.2331666142098,"ex-partner","M","M",43,1 -"320",-1.3659545736228,0,"L",-1.36788212358381,"myself","F","M",43,0 -"321",-1.3659545736228,0,"L",-0.484544888939061,"myself","F","H",33,0 -"322",0.211722958911534,1,"M",1.55817246617693,"ex-partner","F","H",31,0 -"323",-1.3659545736228,0,"L",-1.03663066059203,"myself","F","M",57,0 -"324",-1.23448144591161,0,"L",-0.926213506261437,"ex-partner","M","M",57,0 -"325",0.343196086622728,1,"M",-0.0980848487819821,"myself","M","H",50,1 -"326",-1.3659545736228,0,"L",-0.484544888939061,"ex-partner","M","M",46,0 -"327",-1.3659545736228,0,"L",-0.539753466104358,"ex-partner","F","M",51,0 -"328",-1.3659545736228,0,"L",0.39879234570569,"myself","F","L",52,1 -"329",-1.3659545736228,0,"L",-0.926213506261437,"myself","M","M",50,0 -"330",-0.708588935066827,0,"L",-0.760587774765546,"myself","M","H",40,0 -"331",1.1320348528899,1,"M",0.39879234570569,"ex-partner","F","H",35,1 -"332",0.343196086622728,1,"M",-0.0428762716166852,"both","F","H",39,0 -"333",0.343196086622728,1,"M",-0.815796351930843,"myself","M","H",50,0 -"334",-1.10300831820041,0,"L",-0.429336311773764,"myself","M","M",51,0 -"335",2.05234674686826,1,"H",1.66858962050752,"ex-partner","F","M",34,1 -"336",-0.708588935066827,0,"L",-0.815796351930843,"both","M","H",40,1 -"337",0.211722958911534,1,"M",-0.263710580277873,"myself","F","H",48,1 -"338",-0.577115807355633,0,"L",-0.0428762716166852,"ex-partner","M","M",51,1 -"339",0.343196086622728,1,"M",-0.484544888939061,"both","F","M",25,0 -"340",-0.971535190489216,0,"L",-0.705379197600249,"myself","M","L",31,0 -"341",-1.3659545736228,0,"L",2.1102582378299,"ex-partner","F","M",43,0 -"342",-0.708588935066827,0,"L",-0.263710580277873,"myself","M","H",49,0 -"343",-1.3659545736228,0,"L",-1.14704781492262,"myself","F","M",26,1 -"344",-0.840062062778022,0,"L",0.730043808697472,"myself","M","M",49,0 -"345",-0.051223296510855,0,"M",-0.374127734608467,"myself","F","L",44,0 -"346",-0.708588935066827,0,"L",0.895669540193363,"myself","F","M",44,1 -"347",-0.971535190489216,0,"L",0.454000922870987,"ex-partner","M","H",46,1 -"348",1.65792736373467,1,"H",1.39254673468104,"ex-partner","M","M",47,1 -"349",0.606142342045117,1,"M",-1.14704781492262,"ex-partner","M","H",31,1 -"350",1.26350798060109,1,"H",1.9998410834993,"myself","F","M",26,1 -"351",-0.577115807355633,0,"L",1.11650384885455,"myself","F","H",41,0 -"352",-0.445642679644438,0,"L",0.343583768540394,"ex-partner","M","H",39,1 -"353",0.869088597467506,1,"M",0.509209500036284,"myself","F","M",26,0 -"354",1.0005617251787,1,"M",1.28212958035044,"ex-partner","F","H",35,1 -"355",1.65792736373467,1,"H",-0.650170620434952,"both","F","M",29,1 -"356",-1.10300831820041,0,"L",-0.429336311773764,"myself","F","H",52,1 -"357",0.0802498312003395,1,"M",0.0675408827139087,"ex-partner","M","M",48,0 -"358",1.1320348528899,1,"M",1.44775531184633,"ex-partner","F","H",53,1 -"359",1.39498110831228,1,"H",-1.36788212358381,"myself","M","L",50,0 -"360",1.26350798060109,1,"H",1.94463250633401,"ex-partner","M","M",43,0 -"361",0.737615469756312,1,"M",0.840460963028066,"ex-partner","M","M",56,1 -"362",0.211722958911534,1,"M",-0.153293425947279,"myself","F","M",43,0 -"363",-0.182696424222049,0,"L",0.288375191375097,"myself","M","M",37,0 -"364",0.606142342045117,1,"M",0.454000922870987,"both","M","M",46,0 -"365",-0.840062062778022,0,"L",-0.374127734608467,"myself","F","M",31,0 -"366",-0.182696424222049,0,"L",-0.0980848487819821,"both","F","M",32,1 -"367",1.0005617251787,1,"M",-0.0428762716166852,"myself","F","H",35,0 -"368",0.211722958911534,1,"M",-0.650170620434952,"ex-partner","F","L",36,0 -"369",0.343196086622728,1,"M",-0.926213506261437,"myself","M","L",37,0 -"370",0.869088597467506,1,"M",0.122749459879206,"both","F","M",58,1 -"371",0.869088597467506,1,"M",-1.03663066059203,"myself","M","M",56,0 -"372",0.343196086622728,1,"M",0.509209500036284,"myself","M","H",51,0 -"373",1.39498110831228,1,"H",0.785252385862769,"ex-partner","M","M",43,1 -"374",1.39498110831228,1,"H",1.83421535200341,"myself","F","H",42,1 -"375",-0.971535190489216,0,"L",0.730043808697472,"myself","F","M",50,0 -"376",-1.3659545736228,0,"L",0.840460963028066,"myself","F","H",43,0 -"377",-0.051223296510855,0,"M",-0.539753466104358,"both","M","H",34,0 -"378",-0.182696424222049,0,"L",0.730043808697472,"myself","F","M",62,0 -"379",1.1320348528899,1,"M",0.2331666142098,"ex-partner","M","M",39,0 -"380",-0.971535190489216,0,"L",-0.429336311773764,"myself","M","M",57,0 -"381",-0.182696424222049,0,"L",0.0675408827139087,"ex-partner","M","M",54,1 -"382",0.737615469756312,1,"M",-0.594962043269655,"myself","M","M",41,0 -"383",1.1320348528899,1,"M",2.27588396932579,"both","F","H",26,1 -"384",-0.971535190489216,0,"L",-0.87100492909614,"ex-partner","M","M",54,0 -"385",-1.3659545736228,0,"L",-1.36788212358381,"myself","F","M",40,0 -"386",-0.577115807355633,0,"L",-1.31267354641852,"ex-partner","M","M",51,0 -"387",1.65792736373467,1,"H",0.674835231532175,"myself","F","H",45,1 -"388",2.31529300229065,1,"H",2.55192685515227,"ex-partner","F","M",40,1 -"389",0.0802498312003395,1,"M",0.730043808697472,"ex-partner","F","M",33,1 -"390",-1.23448144591161,0,"L",-1.31267354641852,"myself","F","H",47,1 -"392",0.0802498312003395,1,"M",2.22067539216049,"myself","F","H",28,0 -"393",0.474669214333923,1,"M",0.343583768540394,"ex-partner","M","M",37,1 -"394",-0.314169551933244,0,"L",0.454000922870987,"both","F","L",45,0 -"395",-1.10300831820041,0,"L",-0.760587774765546,"myself","F","H",36,0 -"396",0.869088597467506,1,"M",0.177958037044503,"ex-partner","M","H",57,1 diff --git a/tests/testthat/data_files/MEDIATION/UPBdata2.csv b/tests/testthat/data_files/MEDIATION/UPBdata2.csv deleted file mode 100644 index 84a815cc..00000000 --- a/tests/testthat/data_files/MEDIATION/UPBdata2.csv +++ /dev/null @@ -1,360 +0,0 @@ -"","att","attbin","attcat","negaff","initiator","gender","educ","age","UPB" -"1",1.1320348528899,0,"M",-0.926213506261437,"myself","M","M",41,1 -"2",-0.577115807355633,1,"M",-0.815796351930843,"myself","F","H",47,1 -"3",0.869088597467506,0,"M",1.44775531184633,"myself","F","M",40,0 -"4",-0.708588935066827,0,"H",-0.153293425947279,"ex-partner","F","H",31,1 -"5",-1.3659545736228,1,"L",-0.705379197600249,"ex-partner","F","M",43,0 -"6",1.26350798060109,0,"M",-0.484544888939061,"myself","M","M",33,1 -"7",1.39498110831228,1,"L",-0.0980848487819821,"myself","M","L",43,0 -"8",1.1320348528899,0,"L",0.674835231532175,"ex-partner","F","M",37,0 -"9",-0.182696424222049,1,"L",-0.705379197600249,"ex-partner","F","M",33,1 -"10",-0.182696424222049,1,"L",-0.153293425947279,"ex-partner","M","H",48,1 -"11",-0.445642679644438,0,"M",1.72379819767282,"ex-partner","F","H",51,0 -"12",1.78940049144587,1,"L",-1.36788212358381,"myself","F","M",56,1 -"13",1.1320348528899,1,"M",1.55817246617693,"myself","F","H",35,0 -"14",1.26350798060109,0,"L",0.177958037044503,"both","M","M",37,0 -"15",0.474669214333923,0,"L",-0.0980848487819821,"myself","F","H",58,0 -"16",1.0005617251787,0,"L",-0.926213506261437,"ex-partner","F","H",41,0 -"17",0.0802498312003395,0,"M",-1.36788212358381,"myself","F","H",50,0 -"18",0.474669214333923,1,"L",1.17171242601985,"myself","M","M",37,0 -"19",-1.3659545736228,0,"M",-0.705379197600249,"myself","M","M",51,0 -"20",2.05234674686826,1,"L",-0.650170620434952,"ex-partner","F","H",36,0 -"21",-1.3659545736228,0,"M",0.0123323055486118,"ex-partner","M","M",37,1 -"22",1.39498110831228,0,"L",-1.36788212358381,"myself","M","H",34,1 -"23",-0.708588935066827,1,"M",-0.815796351930843,"both","M","M",43,0 -"24",0.474669214333923,0,"L",-0.484544888939061,"myself","F","H",44,0 -"25",-0.708588935066827,0,"L",-0.153293425947279,"myself","M","M",48,1 -"26",-1.3659545736228,0,"M",1.55817246617693,"ex-partner","M","M",43,1 -"27",0.474669214333923,1,"L",-1.03663066059203,"ex-partner","F","L",35,0 -"28",-0.708588935066827,1,"M",-0.429336311773764,"myself","M","M",47,0 -"29",-1.3659545736228,1,"L",1.28212958035044,"ex-partner","F","M",28,1 -"30",-0.577115807355633,1,"L",-1.20225639208792,"ex-partner","F","H",52,1 -"31",-0.971535190489216,1,"M",-0.0428762716166852,"both","M","H",43,0 -"32",1.65792736373467,0,"H",-1.36788212358381,"myself","F","M",38,0 -"33",0.0802498312003395,1,"L",1.88942392916871,"ex-partner","F","M",46,0 -"34",0.211722958911534,1,"M",-0.539753466104358,"ex-partner","M","L",43,0 -"35",0.343196086622728,0,"L",-1.14704781492262,"ex-partner","F","M",31,0 -"36",-0.840062062778022,1,"M",2.33109254649108,"myself","F","H",49,1 -"37",-0.840062062778022,0,"M",2.44150970082168,"ex-partner","F","H",56,0 -"38",0.606142342045117,0,"H",-0.926213506261437,"both","F","M",37,1 -"39",-0.314169551933244,0,"H",-1.14704781492262,"myself","F","H",57,1 -"40",0.0802498312003395,0,"M",0.122749459879206,"ex-partner","F","H",41,0 -"41",0.474669214333923,1,"L",0.343583768540394,"myself","F","L",32,0 -"42",-0.971535190489216,1,"L",-0.981422083426734,"both","M","H",41,1 -"43",-0.971535190489216,1,"M",-1.14704781492262,"myself","F","H",61,0 -"44",0.869088597467506,1,"M",0.730043808697472,"ex-partner","F","H",60,0 -"45",0.606142342045117,0,"L",1.50296388901163,"myself","M","H",43,1 -"46",1.0005617251787,1,"L",-1.09183923775733,"myself","F","M",56,0 -"47",1.52645423602348,1,"M",0.288375191375097,"myself","M","M",28,0 -"48",1.65792736373467,1,"L",-1.03663066059203,"myself","M","H",37,0 -"49",-1.3659545736228,0,"M",1.33733815751574,"both","F","H",47,0 -"50",0.869088597467506,1,"L",0.509209500036284,"both","M","M",38,0 -"51",-0.182696424222049,1,"L",-0.760587774765546,"myself","M","M",37,1 -"52",0.474669214333923,1,"L",0.674835231532175,"both","M","H",46,0 -"53",-1.3659545736228,0,"M",2.27588396932579,"myself","F","L",42,0 -"54",-1.3659545736228,1,"M",0.730043808697472,"both","F","M",40,0 -"55",1.0005617251787,1,"L",0.288375191375097,"ex-partner","M","M",37,1 -"56",-1.3659545736228,1,"L",0.122749459879206,"myself","M","H",62,1 -"57",0.211722958911534,0,"M",-0.0428762716166852,"ex-partner","F","M",56,1 -"58",-0.840062062778022,1,"L",-1.36788212358381,"ex-partner","F","M",44,0 -"59",-0.051223296510855,1,"L",-0.815796351930843,"ex-partner","F","H",57,0 -"60",1.1320348528899,1,"L",-1.09183923775733,"myself","M","M",50,1 -"61",-0.314169551933244,0,"H",1.11650384885455,"myself","F","H",62,0 -"62",-0.182696424222049,0,"M",-0.374127734608467,"myself","M","M",29,1 -"63",1.0005617251787,0,"M",0.564418077201581,"both","F","H",56,1 -"64",0.211722958911534,0,"M",-0.0428762716166852,"ex-partner","M","M",42,0 -"65",-0.314169551933244,0,"M",-0.815796351930843,"myself","F","H",39,1 -"66",0.211722958911534,1,"M",0.895669540193363,"myself","M","M",44,0 -"67",-1.3659545736228,1,"H",0.730043808697472,"myself","M","M",48,0 -"68",0.0802498312003395,1,"L",-1.36788212358381,"myself","M","H",52,0 -"69",-1.3659545736228,1,"L",0.2331666142098,"myself","F","M",46,0 -"70",1.65792736373467,1,"M",-1.36788212358381,"both","M","M",32,1 -"71",0.474669214333923,1,"M",-0.31891915744317,"myself","M","M",49,0 -"72",0.343196086622728,0,"L",2.27588396932579,"both","M","M",46,1 -"73",0.737615469756312,0,"L",-0.263710580277873,"ex-partner","M","M",44,1 -"74",-1.3659545736228,0,"M",0.2331666142098,"myself","F","M",48,0 -"75",-1.3659545736228,0,"L",0.619626654366878,"ex-partner","F","H",53,0 -"76",-1.10300831820041,0,"M",1.11650384885455,"ex-partner","F","H",25,0 -"77",1.26350798060109,0,"L",-0.539753466104358,"both","M","M",43,1 -"78",0.211722958911534,1,"L",-1.36788212358381,"myself","F","M",51,0 -"79",0.869088597467506,1,"L",-0.153293425947279,"both","F","M",44,0 -"80",-0.051223296510855,0,"H",-1.36788212358381,"ex-partner","F","M",26,0 -"81",1.65792736373467,1,"L",0.0675408827139087,"myself","F","L",29,1 -"82",0.474669214333923,0,"L",0.619626654366878,"both","F","H",49,0 -"83",-1.3659545736228,0,"L",1.9998410834993,"ex-partner","F","M",44,0 -"84",2.44676613000184,1,"M",0.122749459879206,"ex-partner","M","H",42,0 -"85",-0.314169551933244,0,"M",1.83421535200341,"myself","M","M",54,1 -"86",2.57823925771303,1,"L",-1.20225639208792,"ex-partner","M","H",40,1 -"87",1.26350798060109,0,"M",-0.429336311773764,"ex-partner","M","M",63,0 -"88",-0.971535190489216,0,"M",-0.374127734608467,"ex-partner","F","H",26,0 -"89",0.869088597467506,0,"L",-0.539753466104358,"ex-partner","F","M",64,0 -"90",0.211722958911534,1,"H",0.454000922870987,"myself","M","M",35,0 -"91",0.869088597467506,0,"H",-1.25746496925322,"myself","F","M",49,0 -"92",-0.708588935066827,0,"L",-0.0428762716166852,"ex-partner","M","H",38,1 -"93",-0.182696424222049,1,"L",1.22692100318514,"myself","M","M",40,0 -"94",-1.3659545736228,1,"L",0.2331666142098,"myself","F","M",50,0 -"95",-0.708588935066827,1,"M",0.840460963028066,"myself","F","L",30,1 -"96",0.343196086622728,0,"M",3.04880404963994,"myself","F","M",37,0 -"97",0.0802498312003395,0,"L",-0.760587774765546,"ex-partner","F","M",55,0 -"98",-1.3659545736228,1,"H",2.22067539216049,"both","F","M",54,1 -"99",1.1320348528899,1,"L",1.72379819767282,"myself","F","H",33,0 -"100",1.1320348528899,0,"L",-0.31891915744317,"ex-partner","F","M",41,0 -"101",0.343196086622728,1,"H",1.55817246617693,"myself","M","M",49,1 -"102",-1.3659545736228,0,"M",0.619626654366878,"ex-partner","F","H",42,0 -"103",-0.182696424222049,1,"L",1.50296388901163,"myself","F","H",26,0 -"104",1.39498110831228,0,"M",-1.03663066059203,"myself","F","M",43,0 -"105",2.05234674686826,1,"L",1.17171242601985,"myself","M","H",29,0 -"106",-1.3659545736228,0,"H",-1.25746496925322,"ex-partner","F","M",39,1 -"107",-0.971535190489216,1,"L",1.39254673468104,"myself","F","M",35,0 -"108",0.869088597467506,1,"M",0.0675408827139087,"myself","M","M",48,0 -"109",-0.051223296510855,0,"M",0.840460963028066,"myself","F","M",46,0 -"110",-1.3659545736228,1,"L",-1.36788212358381,"ex-partner","F","H",39,0 -"111",1.1320348528899,0,"L",-0.0428762716166852,"myself","M","M",54,0 -"112",-0.051223296510855,0,"H",1.22692100318514,"both","F","H",32,1 -"113",-1.3659545736228,1,"L",-0.815796351930843,"myself","M","M",35,1 -"114",-0.971535190489216,1,"L",0.2331666142098,"myself","M","M",35,0 -"115",-0.445642679644438,0,"M",1.00608669452396,"ex-partner","F","H",35,0 -"116",-1.3659545736228,1,"L",-0.0428762716166852,"myself","F","M",46,1 -"117",-1.3659545736228,1,"H",0.619626654366878,"both","F","M",55,0 -"118",-0.182696424222049,1,"L",-0.208502003112576,"ex-partner","M","H",49,1 -"119",1.0005617251787,0,"M",-1.25746496925322,"myself","F","M",52,0 -"120",-0.708588935066827,1,"L",0.177958037044503,"both","F","L",43,0 -"121",0.737615469756312,1,"H",-0.0428762716166852,"myself","F","H",46,0 -"122",0.474669214333923,0,"L",-0.705379197600249,"myself","F","H",35,0 -"123",0.211722958911534,0,"L",-1.36788212358381,"myself","F","H",38,1 -"124",-0.051223296510855,1,"M",-1.20225639208792,"both","F","H",46,1 -"125",0.0802498312003395,0,"M",-1.36788212358381,"both","M","M",35,1 -"126",-0.971535190489216,0,"L",-0.484544888939061,"ex-partner","M","M",46,0 -"127",0.211722958911534,0,"L",-0.374127734608467,"ex-partner","F","H",25,1 -"128",0.211722958911534,1,"L",-0.705379197600249,"myself","F","M",51,0 -"129",1.92087361915706,0,"M",-0.0428762716166852,"myself","M","H",37,1 -"130",0.474669214333923,0,"L",0.122749459879206,"both","F","H",46,0 -"131",-1.3659545736228,0,"M",-0.208502003112576,"both","F","H",64,0 -"132",-0.840062062778022,0,"M",-0.0428762716166852,"myself","F","L",49,1 -"133",-1.3659545736228,0,"L",-0.374127734608467,"myself","M","M",43,1 -"134",-1.3659545736228,1,"H",-0.650170620434952,"myself","M","H",26,0 -"135",1.39498110831228,1,"M",0.454000922870987,"both","M","M",61,0 -"136",-0.708588935066827,1,"L",-0.31891915744317,"ex-partner","F","M",37,1 -"137",1.52645423602348,0,"L",-0.815796351930843,"both","F","M",32,1 -"138",1.1320348528899,0,"L",0.2331666142098,"myself","F","L",36,0 -"139",1.78940049144587,1,"L",-0.484544888939061,"myself","F","M",51,0 -"140",-1.3659545736228,0,"L",0.840460963028066,"both","M","M",39,0 -"141",0.211722958911534,0,"M",-0.484544888939061,"myself","F","M",55,0 -"142",1.26350798060109,1,"M",-0.429336311773764,"myself","F","H",34,1 -"143",-0.051223296510855,0,"M",0.39879234570569,"myself","M","M",47,1 -"144",-0.971535190489216,0,"L",1.06129527168925,"ex-partner","M","H",35,1 -"145",-0.971535190489216,1,"M",0.730043808697472,"myself","M","L",48,1 -"146",1.26350798060109,0,"M",-1.36788212358381,"myself","M","M",49,0 -"147",-1.3659545736228,1,"L",-1.03663066059203,"ex-partner","M","M",31,0 -"148",0.474669214333923,1,"M",1.06129527168925,"myself","M","H",49,0 -"149",1.65792736373467,1,"M",1.50296388901163,"myself","F","H",67,1 -"150",0.737615469756312,0,"M",1.28212958035044,"ex-partner","M","M",42,1 -"151",1.0005617251787,0,"L",-0.208502003112576,"both","F","H",26,0 -"152",1.1320348528899,1,"M",-1.36788212358381,"myself","F","M",45,0 -"153",1.92087361915706,0,"L",1.83421535200341,"myself","M","M",40,0 -"154",-0.840062062778022,1,"H",-1.20225639208792,"ex-partner","M","M",43,1 -"155",0.343196086622728,1,"L",0.509209500036284,"myself","F","L",62,0 -"156",0.0802498312003395,1,"L",0.0675408827139087,"both","M","H",47,0 -"157",-0.971535190489216,0,"M",0.177958037044503,"ex-partner","F","M",34,1 -"158",-0.840062062778022,1,"M",-1.20225639208792,"myself","F","M",48,0 -"159",0.343196086622728,1,"L",1.39254673468104,"ex-partner","F","H",50,1 -"160",-1.3659545736228,1,"L",0.0675408827139087,"ex-partner","M","L",42,0 -"161",-1.3659545736228,1,"L",0.785252385862769,"ex-partner","F","H",33,0 -"162",0.343196086622728,1,"L",-0.153293425947279,"myself","F","M",47,0 -"163",-1.3659545736228,0,"M",-0.374127734608467,"both","M","M",27,0 -"164",-0.051223296510855,1,"H",-0.705379197600249,"myself","F","M",36,0 -"165",-1.3659545736228,0,"L",2.38630112365638,"myself","M","M",54,0 -"166",0.343196086622728,0,"L",-0.0428762716166852,"ex-partner","F","M",50,0 -"167",-0.445642679644438,0,"L",0.122749459879206,"myself","M","L",39,1 -"168",1.39498110831228,0,"M",0.0675408827139087,"both","M","M",54,0 -"169",-0.445642679644438,1,"L",-0.594962043269655,"ex-partner","F","L",45,0 -"170",-0.051223296510855,1,"L",-0.208502003112576,"both","F","H",45,0 -"171",-0.840062062778022,0,"L",-0.484544888939061,"myself","F","M",52,0 -"172",-0.577115807355633,0,"M",-1.14704781492262,"ex-partner","F","H",47,0 -"173",1.1320348528899,0,"M",-0.594962043269655,"ex-partner","F","M",33,0 -"174",1.39498110831228,1,"L",-0.153293425947279,"ex-partner","F","M",57,0 -"175",-0.840062062778022,1,"M",0.343583768540394,"ex-partner","F","H",45,0 -"176",-0.840062062778022,1,"M",1.55817246617693,"both","M","H",32,0 -"177",-0.577115807355633,0,"L",0.177958037044503,"ex-partner","F","M",50,0 -"178",-0.708588935066827,1,"M",1.66858962050752,"both","M","H",50,0 -"179",-0.051223296510855,0,"M",0.730043808697472,"myself","F","H",31,1 -"180",-0.182696424222049,1,"L",-1.36788212358381,"myself","M","M",51,0 -"181",-1.3659545736228,1,"M",0.39879234570569,"myself","F","M",52,1 -"182",-0.708588935066827,0,"L",-0.760587774765546,"myself","M","M",51,1 -"183",0.737615469756312,1,"M",-0.484544888939061,"myself","F","M",47,0 -"184",0.211722958911534,0,"M",-1.36788212358381,"myself","F","H",62,0 -"185",-0.840062062778022,0,"L",-0.0980848487819821,"myself","F","H",53,0 -"186",-0.314169551933244,0,"L",-0.429336311773764,"ex-partner","M","M",45,0 -"187",0.606142342045117,1,"L",-0.484544888939061,"myself","F","M",38,0 -"188",-0.577115807355633,0,"L",-0.539753466104358,"ex-partner","F","M",54,0 -"189",0.606142342045117,0,"M",1.50296388901163,"myself","M","H",42,0 -"190",0.211722958911534,0,"H",-0.650170620434952,"ex-partner","M","M",51,1 -"191",-0.051223296510855,1,"H",0.509209500036284,"myself","F","M",43,1 -"192",-0.051223296510855,0,"M",-1.36788212358381,"both","F","H",57,0 -"193",0.869088597467506,1,"L",-1.03663066059203,"myself","F","H",59,1 -"194",-0.445642679644438,1,"M",-1.36788212358381,"myself","M","H",54,1 -"195",-0.445642679644438,1,"L",1.39254673468104,"myself","M","M",29,0 -"196",-0.708588935066827,0,"L",-1.36788212358381,"both","F","L",61,1 -"197",-0.051223296510855,1,"H",-0.705379197600249,"myself","F","M",43,0 -"198",-0.708588935066827,0,"L",0.785252385862769,"both","M","H",33,1 -"199",0.737615469756312,0,"L",1.55817246617693,"myself","M","H",47,0 -"200",1.52645423602348,0,"M",-0.484544888939061,"ex-partner","F","H",43,1 -"201",0.606142342045117,0,"M",0.840460963028066,"both","F","H",32,0 -"202",1.1320348528899,0,"H",-0.926213506261437,"myself","F","L",35,0 -"203",0.606142342045117,0,"H",0.454000922870987,"myself","F","M",45,1 -"204",1.39498110831228,1,"M",2.1102582378299,"ex-partner","F","H",51,1 -"205",0.343196086622728,1,"M",0.509209500036284,"both","F","H",43,0 -"206",-1.3659545736228,0,"M",0.343583768540394,"ex-partner","F","H",30,0 -"207",-0.708588935066827,0,"L",0.39879234570569,"both","F","H",25,0 -"208",0.737615469756312,0,"L",-0.594962043269655,"ex-partner","M","M",51,1 -"209",-1.3659545736228,0,"M",-0.429336311773764,"myself","F","H",40,1 -"210",-1.10300831820041,1,"L",-0.0980848487819821,"myself","M","M",44,1 -"211",-0.971535190489216,1,"L",-1.14704781492262,"myself","M","M",54,0 -"212",-0.577115807355633,0,"M",2.33109254649108,"ex-partner","M","M",43,0 -"213",-1.3659545736228,0,"L",-0.760587774765546,"myself","M","M",44,1 -"214",0.0802498312003395,1,"M",-0.926213506261437,"ex-partner","F","M",55,0 -"215",0.737615469756312,1,"L",-0.87100492909614,"ex-partner","M","M",43,0 -"216",-1.3659545736228,0,"L",-0.263710580277873,"both","F","M",33,0 -"217",-0.051223296510855,0,"L",1.77900677483811,"ex-partner","F","H",57,0 -"218",1.0005617251787,1,"L",0.343583768540394,"ex-partner","M","M",49,1 -"219",-1.3659545736228,1,"L",0.564418077201581,"myself","F","M",42,1 -"220",0.474669214333923,0,"H",-0.484544888939061,"both","F","M",50,0 -"221",-0.051223296510855,0,"M",-0.815796351930843,"myself","M","H",54,1 -"222",0.211722958911534,0,"L",0.840460963028066,"both","M","L",45,0 -"223",-0.708588935066827,0,"H",-0.263710580277873,"myself","F","M",37,1 -"224",0.474669214333923,0,"H",-0.594962043269655,"myself","F","H",37,0 -"225",1.52645423602348,1,"L",-0.484544888939061,"myself","F","M",22,0 -"226",1.0005617251787,1,"L",0.95087811735866,"myself","F","M",50,0 -"227",1.39498110831228,0,"L",-0.926213506261437,"both","M","M",52,1 -"228",-0.182696424222049,0,"M",1.11650384885455,"ex-partner","F","H",54,0 -"229",-1.3659545736228,0,"H",0.895669540193363,"myself","M","M",25,0 -"230",-1.23448144591161,1,"M",-1.36788212358381,"myself","F","H",57,0 -"231",1.26350798060109,1,"H",0.895669540193363,"myself","F","M",62,0 -"232",-1.3659545736228,1,"M",1.44775531184633,"ex-partner","F","M",47,0 -"233",1.39498110831228,0,"M",-1.36788212358381,"both","F","H",37,0 -"234",2.05234674686826,0,"L",-1.25746496925322,"ex-partner","F","H",41,0 -"235",0.737615469756312,0,"L",-0.539753466104358,"ex-partner","F","M",39,0 -"236",-1.3659545736228,0,"L",-0.815796351930843,"ex-partner","M","H",41,0 -"237",-0.971535190489216,1,"H",-0.594962043269655,"ex-partner","M","M",46,1 -"238",-1.3659545736228,0,"L",-1.25746496925322,"ex-partner","F","M",47,0 -"239",-1.3659545736228,1,"M",0.122749459879206,"ex-partner","F","H",39,1 -"240",-0.445642679644438,0,"M",-0.815796351930843,"ex-partner","M","M",48,1 -"241",0.343196086622728,1,"M",0.454000922870987,"both","F","H",34,1 -"242",-1.23448144591161,0,"M",-1.36788212358381,"myself","F","L",54,0 -"243",1.65792736373467,1,"H",-0.208502003112576,"ex-partner","F","H",62,1 -"244",1.0005617251787,1,"M",0.730043808697472,"both","F","H",54,0 -"245",-1.3659545736228,0,"M",-0.926213506261437,"both","F","H",33,0 -"246",-0.577115807355633,0,"L",0.0123323055486118,"myself","F","M",35,0 -"247",0.343196086622728,1,"H",-0.705379197600249,"both","M","M",44,0 -"248",1.0005617251787,1,"L",0.619626654366878,"ex-partner","M","M",50,1 -"249",1.52645423602348,1,"M",0.39879234570569,"myself","M","M",33,1 -"250",0.343196086622728,1,"L",1.94463250633401,"myself","F","M",51,0 -"251",2.31529300229065,0,"L",-0.926213506261437,"ex-partner","F","M",35,1 -"252",-0.051223296510855,1,"M",-0.153293425947279,"ex-partner","F","H",26,0 -"253",-0.314169551933244,0,"M",0.785252385862769,"both","F","M",41,1 -"254",-0.708588935066827,1,"H",-1.14704781492262,"myself","F","M",41,0 -"255",0.343196086622728,1,"H",0.343583768540394,"myself","M","H",36,0 -"256",-0.182696424222049,1,"L",-0.705379197600249,"ex-partner","F","M",45,0 -"257",0.211722958911534,0,"M",1.72379819767282,"ex-partner","F","H",40,0 -"258",0.343196086622728,0,"M",-1.09183923775733,"both","M","M",52,0 -"259",1.26350798060109,1,"L",-0.263710580277873,"ex-partner","M","M",54,1 -"260",-1.3659545736228,1,"L",0.840460963028066,"myself","M","L",45,0 -"261",0.0802498312003395,1,"M",-0.263710580277873,"myself","F","H",42,1 -"262",-0.708588935066827,1,"L",-0.650170620434952,"both","M","H",36,0 -"263",1.78940049144587,1,"M",0.343583768540394,"myself","F","H",45,1 -"264",1.26350798060109,0,"M",-1.09183923775733,"ex-partner","F","H",43,0 -"265",0.606142342045117,0,"L",0.895669540193363,"myself","F","M",44,1 -"266",-1.3659545736228,1,"H",0.454000922870987,"both","F","M",47,0 -"267",0.211722958911534,0,"L",-1.09183923775733,"ex-partner","M","H",63,1 -"268",-0.182696424222049,0,"M",0.454000922870987,"ex-partner","F","M",43,0 -"269",1.65792736373467,0,"M",-1.36788212358381,"myself","M","M",44,1 -"270",-1.3659545736228,1,"M",-0.926213506261437,"ex-partner","M","H",61,0 -"271",-1.3659545736228,0,"L",0.454000922870987,"both","M","M",26,0 -"272",-0.314169551933244,0,"L",0.785252385862769,"myself","M","M",36,1 -"273",-1.3659545736228,0,"M",-0.926213506261437,"ex-partner","F","M",51,0 -"274",-0.708588935066827,1,"M",-0.31891915744317,"ex-partner","M","M",47,0 -"275",-1.3659545736228,1,"L",0.0123323055486118,"ex-partner","M","H",48,0 -"276",-0.708588935066827,0,"M",1.72379819767282,"myself","M","H",34,0 -"277",0.343196086622728,1,"M",0.840460963028066,"ex-partner","F","M",42,0 -"278",-0.051223296510855,1,"L",-0.484544888939061,"both","F","M",50,1 -"279",-0.577115807355633,0,"M",-0.760587774765546,"myself","F","M",38,1 -"280",-0.051223296510855,0,"L",0.840460963028066,"ex-partner","M","H",58,1 -"281",-0.182696424222049,0,"M",-0.760587774765546,"myself","F","L",39,0 -"282",1.0005617251787,0,"L",-1.31267354641852,"both","M","M",40,0 -"283",-0.708588935066827,0,"L",1.77900677483811,"myself","F","M",42,1 -"284",0.0802498312003395,0,"L",1.94463250633401,"myself","M","H",51,1 -"285",-1.3659545736228,0,"H",-1.20225639208792,"myself","M","M",31,1 -"286",0.474669214333923,0,"H",0.454000922870987,"ex-partner","F","H",44,0 -"287",-0.840062062778022,1,"M",-0.0980848487819821,"both","M","M",38,1 -"288",0.869088597467506,0,"H",-0.981422083426734,"ex-partner","M","H",32,0 -"289",-1.3659545736228,0,"M",1.94463250633401,"myself","F","H",47,0 -"290",-1.3659545736228,1,"M",0.343583768540394,"myself","M","H",33,0 -"291",1.0005617251787,1,"M",0.2331666142098,"ex-partner","F","H",40,0 -"292",-0.971535190489216,0,"M",-0.926213506261437,"ex-partner","M","H",52,0 -"293",1.1320348528899,0,"L",0.509209500036284,"myself","F","H",57,1 -"294",0.606142342045117,1,"M",1.61338104334222,"ex-partner","M","M",43,0 -"295",-0.182696424222049,0,"M",-0.374127734608467,"ex-partner","M","H",37,0 -"296",0.606142342045117,1,"L",0.0675408827139087,"ex-partner","F","H",44,0 -"297",-0.314169551933244,1,"L",0.39879234570569,"myself","F","M",30,0 -"298",-0.840062062778022,1,"M",0.674835231532175,"myself","F","H",48,0 -"299",0.869088597467506,0,"L",-0.374127734608467,"myself","F","H",50,0 -"300",-0.708588935066827,0,"L",-1.36788212358381,"myself","F","H",45,0 -"301",1.39498110831228,1,"L",-1.03663066059203,"myself","F","M",37,0 -"302",-0.182696424222049,1,"M",-0.87100492909614,"both","F","H",43,0 -"303",-1.3659545736228,1,"H",0.840460963028066,"myself","M","H",56,0 -"304",-0.314169551933244,0,"M",-1.31267354641852,"myself","M","M",27,0 -"305",-1.10300831820041,0,"H",-1.14704781492262,"myself","M","L",30,1 -"306",-1.10300831820041,0,"L",-1.20225639208792,"myself","M","H",47,1 -"307",-1.3659545736228,1,"M",0.95087811735866,"myself","F","M",34,1 -"308",0.869088597467506,0,"M",-1.03663066059203,"myself","M","H",43,0 -"309",-0.577115807355633,0,"M",0.509209500036284,"myself","F","M",47,0 -"310",0.606142342045117,1,"H",-0.429336311773764,"myself","F","H",49,0 -"311",1.0005617251787,1,"H",-1.36788212358381,"myself","M","M",41,0 -"312",0.737615469756312,0,"M",-0.31891915744317,"both","F","M",49,1 -"313",0.343196086622728,1,"H",0.0675408827139087,"both","M","H",39,0 -"314",-0.708588935066827,1,"M",0.619626654366878,"myself","F","M",47,0 -"315",1.26350798060109,1,"L",0.288375191375097,"myself","F","M",28,0 -"316",-0.577115807355633,1,"M",-1.03663066059203,"myself","F","M",37,0 -"317",1.26350798060109,0,"L",-0.484544888939061,"ex-partner","F","M",47,1 -"318",1.39498110831228,0,"H",-0.0980848487819821,"myself","F","M",28,1 -"319",0.474669214333923,0,"L",-1.36788212358381,"ex-partner","F","H",28,0 -"320",0.343196086622728,0,"L",0.730043808697472,"ex-partner","M","M",26,0 -"321",1.39498110831228,1,"M",0.840460963028066,"ex-partner","F","H",28,1 -"322",-0.840062062778022,0,"H",1.06129527168925,"myself","M","M",40,1 -"323",1.39498110831228,1,"L",-0.429336311773764,"both","F","M",53,0 -"324",0.343196086622728,1,"H",-1.36788212358381,"both","F","M",36,0 -"325",1.1320348528899,1,"H",1.66858962050752,"myself","M","H",46,1 -"326",0.737615469756312,1,"L",-1.36788212358381,"myself","F","M",45,0 -"327",1.39498110831228,0,"L",0.619626654366878,"myself","F","M",47,0 -"328",0.737615469756312,0,"M",2.55192685515227,"ex-partner","M","M",37,0 -"329",-0.182696424222049,1,"L",0.674835231532175,"both","F","H",30,1 -"330",-0.445642679644438,1,"L",1.66858962050752,"both","M","M",41,1 -"331",-0.708588935066827,0,"L",1.17171242601985,"myself","F","M",55,1 -"332",-0.314169551933244,0,"H",-1.36788212358381,"myself","F","M",38,0 -"333",-0.314169551933244,0,"L",-0.429336311773764,"both","F","H",25,0 -"334",-0.708588935066827,1,"L",-0.0428762716166852,"ex-partner","M","M",49,1 -"335",-0.577115807355633,0,"M",-0.87100492909614,"myself","F","M",31,1 -"336",1.65792736373467,1,"L",-0.87100492909614,"ex-partner","F","H",58,0 -"337",0.343196086622728,0,"M",-0.374127734608467,"ex-partner","F","M",43,0 -"338",-0.182696424222049,0,"L",-0.926213506261437,"myself","M","M",45,1 -"339",-0.840062062778022,0,"M",-0.926213506261437,"myself","F","H",32,0 -"340",0.343196086622728,1,"H",0.177958037044503,"myself","F","H",33,0 -"341",-1.3659545736228,0,"L",-1.36788212358381,"ex-partner","M","M",39,0 -"342",2.05234674686826,0,"M",1.28212958035044,"myself","M","H",35,1 -"343",-1.3659545736228,1,"L",-0.0428762716166852,"myself","F","H",32,0 -"344",-0.840062062778022,0,"L",2.22067539216049,"both","F","H",45,0 -"345",1.52645423602348,1,"L",-1.25746496925322,"myself","F","H",46,1 -"346",1.0005617251787,0,"H",-1.36788212358381,"ex-partner","M","M",50,0 -"347",-1.23448144591161,1,"L",-1.36788212358381,"ex-partner","M","M",48,1 -"348",1.1320348528899,1,"L",0.2331666142098,"myself","F","H",68,1 -"349",-0.445642679644438,0,"M",0.895669540193363,"myself","F","M",41,0 -"350",-1.3659545736228,0,"H",-0.263710580277873,"myself","M","H",48,0 -"351",-0.182696424222049,0,"M",-0.87100492909614,"ex-partner","F","L",35,0 -"352",-1.3659545736228,0,"M",-0.0428762716166852,"ex-partner","M","M",30,0 -"353",-1.3659545736228,1,"M",0.674835231532175,"ex-partner","F","M",42,1 -"354",0.343196086622728,1,"H",-1.03663066059203,"ex-partner","M","M",46,0 -"355",-1.3659545736228,1,"M",0.674835231532175,"both","M","H",44,0 -"356",-0.314169551933244,0,"H",0.0675408827139087,"myself","M","H",33,0 -"357",-1.3659545736228,1,"M",-0.705379197600249,"ex-partner","M","H",48,0 -"358",0.0802498312003395,1,"M",2.27588396932579,"myself","F","H",55,1 -"359",-1.3659545736228,1,"M",-0.926213506261437,"myself","F","M",48,0 diff --git a/tests/testthat/data_files/MEDIATION/UPBdata3.csv b/tests/testthat/data_files/MEDIATION/UPBdata3.csv deleted file mode 100644 index c4c4b23b..00000000 --- a/tests/testthat/data_files/MEDIATION/UPBdata3.csv +++ /dev/null @@ -1,383 +0,0 @@ -"","att","attbin","attcat","negaff","initiator","gender","educ","age","UPB" -"1",1.39498110831228,0,"M",0.122749459879206,"myself","F","H",50,0 -"2",1.39498110831228,0,"M",0.343583768540394,"both","M","M",47,0 -"3",-1.3659545736228,0,"M",-1.03663066059203,"both","F","H",41,0 -"4",-1.3659545736228,0,"L",-1.25746496925322,"myself","F","M",47,0 -"5",0.211722958911534,0,"H",-0.87100492909614,"both","F","M",37,0 -"6",1.0005617251787,0,"H",-1.36788212358381,"myself","F","M",36,1 -"7",1.39498110831228,1,"M",-1.03663066059203,"ex-partner","F","H",37,0 -"8",-0.840062062778022,0,"M",-0.484544888939061,"myself","F","M",52,0 -"9",0.0802498312003395,1,"M",-0.208502003112576,"ex-partner","F","M",26,0 -"10",0.474669214333923,1,"L",0.122749459879206,"ex-partner","F","M",38,0 -"11",-0.182696424222049,1,"L",-1.36788212358381,"both","M","H",50,1 -"12",-1.3659545736228,0,"L",-0.429336311773764,"both","M","M",62,0 -"13",0.211722958911534,0,"M",-1.31267354641852,"myself","F","M",54,0 -"14",0.606142342045117,0,"L",0.2331666142098,"ex-partner","M","H",43,0 -"15",-1.3659545736228,1,"L",0.785252385862769,"myself","M","M",60,0 -"16",-0.182696424222049,1,"M",0.785252385862769,"ex-partner","F","H",35,1 -"17",0.0802498312003395,1,"L",0.895669540193363,"ex-partner","F","H",33,1 -"18",1.26350798060109,1,"L",-0.815796351930843,"ex-partner","M","H",41,1 -"19",1.1320348528899,1,"L",-0.263710580277873,"myself","F","M",30,0 -"20",-0.182696424222049,1,"M",-0.374127734608467,"myself","M","M",62,1 -"21",-1.3659545736228,0,"M",1.39254673468104,"ex-partner","M","M",37,0 -"22",0.606142342045117,0,"M",-0.594962043269655,"ex-partner","F","M",23,0 -"23",1.0005617251787,0,"L",1.9998410834993,"both","F","H",51,0 -"24",-0.971535190489216,1,"M",-0.705379197600249,"myself","F","H",61,0 -"25",0.869088597467506,1,"M",0.840460963028066,"ex-partner","M","H",62,1 -"26",0.737615469756312,0,"M",-1.09183923775733,"myself","F","H",26,0 -"27",0.737615469756312,0,"M",0.454000922870987,"myself","M","H",40,1 -"28",0.343196086622728,0,"L",1.55817246617693,"both","F","M",45,1 -"29",-0.840062062778022,1,"M",0.785252385862769,"ex-partner","M","M",41,0 -"30",1.52645423602348,1,"L",0.288375191375097,"myself","F","H",49,0 -"31",-0.840062062778022,0,"M",0.619626654366878,"myself","M","M",45,1 -"32",0.211722958911534,1,"H",-0.815796351930843,"ex-partner","F","H",54,1 -"33",-1.3659545736228,1,"H",0.674835231532175,"ex-partner","F","M",43,1 -"34",0.343196086622728,0,"M",-1.36788212358381,"myself","M","H",42,0 -"35",-1.3659545736228,1,"H",-0.484544888939061,"myself","F","L",37,1 -"36",-1.3659545736228,0,"L",0.288375191375097,"ex-partner","F","M",31,1 -"37",-1.3659545736228,1,"L",1.11650384885455,"myself","F","M",55,0 -"38",1.52645423602348,0,"M",-0.926213506261437,"ex-partner","M","H",47,0 -"39",-0.708588935066827,1,"L",1.77900677483811,"myself","M","H",27,1 -"40",0.869088597467506,0,"M",-1.25746496925322,"both","F","M",44,0 -"41",0.343196086622728,0,"L",1.55817246617693,"both","M","M",34,1 -"42",1.39498110831228,1,"L",-0.760587774765546,"both","M","H",43,0 -"43",1.0005617251787,0,"L",1.50296388901163,"myself","F","M",42,0 -"44",-0.314169551933244,1,"M",-0.484544888939061,"myself","M","M",56,0 -"45",0.606142342045117,1,"L",-0.263710580277873,"both","F","H",35,1 -"46",1.0005617251787,0,"H",-0.815796351930843,"myself","F","L",30,0 -"47",1.1320348528899,0,"M",-0.0428762716166852,"myself","F","H",33,1 -"48",-1.3659545736228,0,"H",-0.374127734608467,"myself","F","M",43,0 -"49",-0.971535190489216,1,"L",1.17171242601985,"myself","M","M",45,0 -"50",1.1320348528899,0,"L",0.840460963028066,"myself","F","H",47,0 -"51",0.211722958911534,0,"M",0.0675408827139087,"myself","F","M",56,0 -"52",-1.3659545736228,0,"L",-0.484544888939061,"myself","F","H",49,0 -"53",0.869088597467506,1,"M",0.674835231532175,"ex-partner","F","M",37,1 -"54",-0.577115807355633,1,"L",-1.20225639208792,"both","F","M",43,0 -"55",0.211722958911534,0,"L",-1.20225639208792,"myself","F","M",49,0 -"56",0.211722958911534,1,"M",0.840460963028066,"myself","M","M",28,0 -"57",-1.3659545736228,0,"L",0.730043808697472,"ex-partner","F","M",49,0 -"58",-0.708588935066827,0,"L",-0.0428762716166852,"myself","M","M",35,0 -"59",1.65792736373467,1,"L",-1.14704781492262,"ex-partner","F","M",40,1 -"60",-1.3659545736228,1,"M",-0.650170620434952,"ex-partner","F","H",22,0 -"61",1.39498110831228,1,"L",0.840460963028066,"ex-partner","M","H",43,0 -"62",-0.708588935066827,0,"H",1.83421535200341,"both","F","M",43,1 -"63",-1.10300831820041,0,"M",-0.0428762716166852,"ex-partner","F","M",45,0 -"64",-0.708588935066827,0,"L",-0.0428762716166852,"both","M","M",56,1 -"65",0.0802498312003395,0,"H",2.33109254649108,"both","M","L",41,1 -"66",-0.051223296510855,0,"M",0.840460963028066,"myself","M","H",54,1 -"67",1.65792736373467,1,"M",1.39254673468104,"myself","M","H",67,1 -"68",-0.445642679644438,0,"L",-1.36788212358381,"myself","M","H",33,0 -"69",-0.971535190489216,1,"H",0.343583768540394,"myself","F","M",50,0 -"70",1.26350798060109,0,"M",-0.705379197600249,"myself","F","M",41,1 -"71",1.39498110831228,1,"L",0.454000922870987,"myself","F","M",44,1 -"72",0.737615469756312,0,"L",-0.31891915744317,"both","F","M",46,0 -"73",-1.3659545736228,0,"H",0.730043808697472,"ex-partner","F","H",49,1 -"74",1.39498110831228,1,"L",-1.20225639208792,"myself","F","H",37,0 -"75",-0.051223296510855,1,"M",-0.0428762716166852,"myself","M","H",43,0 -"76",-0.577115807355633,0,"L",-0.263710580277873,"myself","F","H",30,0 -"77",1.1320348528899,0,"M",-0.0428762716166852,"ex-partner","F","H",26,0 -"78",-0.445642679644438,1,"M",-0.484544888939061,"myself","M","M",48,1 -"79",-1.3659545736228,0,"L",-0.0428762716166852,"ex-partner","F","M",28,0 -"80",1.39498110831228,0,"L",0.895669540193363,"myself","M","M",40,1 -"81",-1.3659545736228,0,"L",-0.705379197600249,"myself","F","H",56,0 -"82",0.0802498312003395,0,"M",-0.429336311773764,"ex-partner","M","H",32,1 -"83",-1.3659545736228,1,"M",-0.981422083426734,"myself","M","H",46,0 -"84",1.78940049144587,0,"L",-1.14704781492262,"myself","M","H",43,0 -"85",0.0802498312003395,0,"M",-1.25746496925322,"both","F","M",54,1 -"86",-1.3659545736228,1,"H",1.83421535200341,"ex-partner","M","M",43,1 -"87",-0.971535190489216,1,"M",2.22067539216049,"ex-partner","F","L",46,0 -"88",1.1320348528899,0,"L",0.177958037044503,"ex-partner","M","L",37,0 -"89",0.343196086622728,0,"L",2.27588396932579,"ex-partner","F","H",32,0 -"90",0.0802498312003395,0,"M",0.39879234570569,"ex-partner","F","M",46,1 -"91",-1.3659545736228,1,"M",-0.484544888939061,"ex-partner","M","M",48,1 -"92",0.737615469756312,1,"H",-0.484544888939061,"myself","M","M",43,0 -"93",-0.182696424222049,0,"L",-0.705379197600249,"ex-partner","F","H",43,1 -"94",0.737615469756312,1,"L",-0.705379197600249,"myself","F","M",49,0 -"95",0.606142342045117,1,"M",-0.0980848487819821,"ex-partner","M","H",31,0 -"96",0.606142342045117,1,"M",0.730043808697472,"both","M","H",40,0 -"97",-0.051223296510855,0,"L",-1.36788212358381,"both","M","H",48,1 -"98",1.1320348528899,1,"L",0.840460963028066,"both","F","M",30,0 -"99",-0.971535190489216,0,"L",-1.25746496925322,"myself","F","H",32,1 -"100",1.0005617251787,1,"H",-0.484544888939061,"myself","M","H",33,1 -"101",0.869088597467506,1,"L",0.619626654366878,"ex-partner","M","M",51,1 -"102",-0.051223296510855,1,"M",0.509209500036284,"ex-partner","M","L",45,0 -"103",-0.971535190489216,0,"L",-1.20225639208792,"both","F","M",48,1 -"104",2.05234674686826,1,"L",-0.31891915744317,"ex-partner","F","H",54,0 -"105",-1.3659545736228,1,"L",-0.429336311773764,"both","M","M",25,0 -"106",-0.051223296510855,1,"L",0.0675408827139087,"myself","F","L",31,0 -"107",-0.577115807355633,0,"L",-1.36788212358381,"ex-partner","M","M",54,0 -"108",1.0005617251787,1,"M",-0.815796351930843,"myself","M","H",47,0 -"109",0.0802498312003395,0,"L",-0.153293425947279,"ex-partner","M","M",40,1 -"110",-0.051223296510855,0,"H",0.177958037044503,"myself","F","M",44,1 -"111",-0.708588935066827,0,"H",0.0675408827139087,"ex-partner","M","L",49,0 -"112",0.343196086622728,1,"M",-0.705379197600249,"both","M","M",45,0 -"113",0.606142342045117,1,"M",-1.20225639208792,"myself","F","H",62,0 -"114",0.606142342045117,0,"L",1.28212958035044,"myself","M","M",50,0 -"115",-0.445642679644438,0,"L",0.895669540193363,"myself","F","L",42,0 -"116",-0.708588935066827,0,"L",0.619626654366878,"myself","F","L",47,0 -"117",-1.3659545736228,0,"M",1.50296388901163,"myself","M","H",57,0 -"118",-0.708588935066827,0,"L",-0.484544888939061,"myself","F","M",47,0 -"119",-1.3659545736228,1,"L",-0.484544888939061,"myself","F","H",57,0 -"120",-1.3659545736228,1,"L",0.343583768540394,"ex-partner","M","M",33,0 -"121",0.343196086622728,0,"M",-0.815796351930843,"ex-partner","F","M",41,1 -"122",-0.182696424222049,0,"H",-0.594962043269655,"myself","M","M",43,0 -"123",-0.840062062778022,1,"M",-0.926213506261437,"ex-partner","F","M",45,1 -"124",-1.3659545736228,1,"M",0.343583768540394,"ex-partner","F","M",50,1 -"125",-0.182696424222049,0,"L",-0.539753466104358,"myself","F","H",27,1 -"126",-0.051223296510855,0,"L",-0.539753466104358,"myself","F","H",42,0 -"127",-0.708588935066827,1,"M",1.50296388901163,"myself","F","M",34,0 -"128",2.05234674686826,0,"M",-0.31891915744317,"ex-partner","F","M",46,0 -"129",1.0005617251787,0,"M",-0.0980848487819821,"myself","M","M",37,1 -"130",0.606142342045117,0,"H",-0.0428762716166852,"myself","F","H",39,1 -"131",-0.314169551933244,1,"L",-1.36788212358381,"myself","F","M",48,1 -"132",0.474669214333923,1,"M",-0.31891915744317,"myself","M","M",40,1 -"133",-0.577115807355633,0,"H",0.288375191375097,"both","M","M",55,0 -"134",0.474669214333923,1,"M",0.343583768540394,"ex-partner","F","M",37,1 -"135",0.343196086622728,0,"M",1.66858962050752,"both","M","H",39,0 -"136",-0.182696424222049,1,"L",-1.03663066059203,"myself","F","H",49,0 -"137",0.0802498312003395,0,"M",1.61338104334222,"myself","F","H",52,0 -"138",-0.708588935066827,0,"L",-0.981422083426734,"myself","M","H",68,1 -"139",1.39498110831228,0,"L",0.177958037044503,"ex-partner","F","H",34,1 -"140",-1.3659545736228,0,"M",-0.0428762716166852,"ex-partner","M","M",39,0 -"141",-0.971535190489216,1,"M",-0.594962043269655,"myself","M","M",36,1 -"142",-1.3659545736228,1,"L",-0.87100492909614,"myself","F","H",28,0 -"143",-0.182696424222049,0,"M",0.0123323055486118,"ex-partner","F","H",42,1 -"144",-1.23448144591161,1,"H",1.55817246617693,"ex-partner","F","H",40,0 -"145",0.211722958911534,0,"L",1.28212958035044,"myself","M","M",34,0 -"146",-0.314169551933244,1,"L",-0.815796351930843,"myself","M","H",37,0 -"147",0.737615469756312,1,"L",1.44775531184633,"myself","M","M",57,1 -"148",0.0802498312003395,1,"L",1.66858962050752,"myself","M","H",46,0 -"149",2.57823925771303,0,"L",2.22067539216049,"ex-partner","M","H",58,1 -"150",1.26350798060109,0,"L",-0.484544888939061,"myself","F","H",62,0 -"151",-1.3659545736228,0,"H",0.509209500036284,"ex-partner","F","M",49,0 -"152",-1.3659545736228,1,"M",2.27588396932579,"ex-partner","M","M",29,1 -"153",-0.840062062778022,1,"L",0.0675408827139087,"ex-partner","M","H",52,1 -"154",-0.445642679644438,0,"M",-0.760587774765546,"myself","F","H",39,0 -"155",0.474669214333923,0,"M",1.88942392916871,"myself","M","H",43,1 -"156",1.1320348528899,1,"L",-0.926213506261437,"myself","M","M",49,0 -"157",0.343196086622728,0,"L",0.674835231532175,"ex-partner","M","L",26,0 -"158",-0.314169551933244,0,"H",1.39254673468104,"ex-partner","M","L",35,1 -"159",-1.3659545736228,1,"H",0.95087811735866,"myself","F","H",47,1 -"160",2.18381987457945,1,"M",1.22692100318514,"ex-partner","F","M",39,1 -"161",1.26350798060109,1,"M",-1.36788212358381,"ex-partner","F","M",51,0 -"162",0.343196086622728,0,"L",-0.760587774765546,"both","M","H",34,0 -"163",-1.3659545736228,0,"M",0.2331666142098,"myself","M","H",33,0 -"164",-0.840062062778022,1,"L",-0.0980848487819821,"both","F","L",35,0 -"165",-0.051223296510855,1,"L",-1.09183923775733,"myself","F","M",51,1 -"166",-1.3659545736228,0,"L",-0.926213506261437,"ex-partner","F","M",28,0 -"167",1.52645423602348,0,"M",0.895669540193363,"ex-partner","F","M",54,0 -"168",1.52645423602348,0,"L",0.122749459879206,"ex-partner","F","H",59,0 -"169",1.0005617251787,0,"L",1.17171242601985,"myself","F","M",42,0 -"170",-0.971535190489216,0,"H",-0.374127734608467,"myself","M","M",37,0 -"171",-1.3659545736228,0,"L",1.50296388901163,"myself","M","M",36,0 -"172",-1.23448144591161,0,"M",0.785252385862769,"myself","M","H",45,1 -"173",-0.445642679644438,1,"L",-1.09183923775733,"myself","M","M",34,0 -"174",-0.840062062778022,1,"M",-1.36788212358381,"myself","M","M",35,0 -"175",-1.3659545736228,0,"M",1.72379819767282,"ex-partner","F","H",48,1 -"176",0.869088597467506,0,"M",-0.0980848487819821,"myself","F","H",62,1 -"177",0.474669214333923,0,"M",-0.374127734608467,"ex-partner","F","M",63,1 -"178",1.26350798060109,1,"M",2.33109254649108,"myself","F","M",51,0 -"179",2.44676613000184,0,"L",-0.926213506261437,"ex-partner","F","M",25,0 -"180",-0.182696424222049,0,"L",-1.14704781492262,"ex-partner","F","M",51,0 -"181",0.474669214333923,0,"L",-0.760587774765546,"ex-partner","F","H",59,0 -"182",0.211722958911534,0,"L",-1.20225639208792,"ex-partner","F","M",47,0 -"183",1.65792736373467,0,"H",0.840460963028066,"myself","F","M",44,0 -"184",-1.3659545736228,1,"M",1.72379819767282,"myself","F","M",45,1 -"185",0.211722958911534,0,"M",1.06129527168925,"myself","M","M",41,0 -"186",-0.182696424222049,0,"L",-0.429336311773764,"myself","F","M",25,0 -"187",-0.708588935066827,1,"L",-0.208502003112576,"ex-partner","F","M",42,0 -"188",2.05234674686826,0,"L",0.0123323055486118,"both","M","H",35,1 -"189",1.0005617251787,1,"L",-1.36788212358381,"ex-partner","F","M",55,1 -"190",0.474669214333923,0,"H",-0.926213506261437,"both","F","H",42,0 -"191",1.52645423602348,0,"L",-1.36788212358381,"ex-partner","M","L",53,0 -"192",-0.708588935066827,1,"M",-1.03663066059203,"myself","F","H",56,1 -"193",-0.708588935066827,0,"M",-0.374127734608467,"myself","F","H",64,1 -"194",0.343196086622728,1,"M",0.509209500036284,"myself","M","H",44,1 -"195",0.869088597467506,1,"L",-0.0428762716166852,"myself","M","M",61,1 -"196",-0.314169551933244,1,"M",-1.36788212358381,"ex-partner","F","H",40,0 -"197",-0.708588935066827,0,"M",0.619626654366878,"ex-partner","M","M",26,0 -"198",-1.10300831820041,1,"M",1.94463250633401,"both","F","L",33,0 -"199",-0.314169551933244,1,"L",-1.36788212358381,"ex-partner","M","H",44,0 -"200",-0.182696424222049,1,"H",-1.36788212358381,"both","M","H",55,1 -"201",0.0802498312003395,1,"M",1.39254673468104,"myself","F","M",31,0 -"202",-1.3659545736228,1,"M",-0.429336311773764,"myself","M","M",48,0 -"203",0.869088597467506,0,"L",-0.208502003112576,"ex-partner","M","M",44,0 -"204",-0.708588935066827,0,"L",0.840460963028066,"ex-partner","M","H",35,0 -"205",0.474669214333923,1,"H",0.39879234570569,"myself","F","H",33,0 -"206",0.0802498312003395,0,"M",1.94463250633401,"ex-partner","F","M",49,0 -"207",0.737615469756312,1,"M",1.06129527168925,"myself","M","M",61,1 -"208",1.26350798060109,1,"M",-0.815796351930843,"myself","F","M",42,0 -"209",1.52645423602348,1,"M",0.0123323055486118,"ex-partner","F","M",59,0 -"210",1.26350798060109,0,"M",0.2331666142098,"both","M","H",53,0 -"211",0.343196086622728,0,"L",-1.36788212358381,"myself","F","H",39,0 -"212",-1.3659545736228,1,"M",1.72379819767282,"myself","F","L",41,0 -"213",-0.182696424222049,1,"H",3.04880404963994,"both","F","M",43,0 -"214",0.343196086622728,0,"L",-0.594962043269655,"ex-partner","M","M",47,1 -"215",0.343196086622728,1,"L",0.0675408827139087,"ex-partner","F","M",37,0 -"216",0.211722958911534,0,"H",-0.650170620434952,"myself","F","M",50,0 -"217",-1.10300831820041,0,"L",0.730043808697472,"ex-partner","F","H",47,0 -"218",1.0005617251787,0,"L",0.2331666142098,"myself","F","H",32,1 -"219",1.1320348528899,1,"H",1.44775531184633,"myself","M","M",38,1 -"220",0.737615469756312,1,"L",1.17171242601985,"ex-partner","F","H",45,0 -"221",0.606142342045117,0,"M",0.39879234570569,"both","F","L",44,1 -"222",0.869088597467506,1,"L",0.0675408827139087,"myself","F","H",61,0 -"223",0.474669214333923,0,"L",-1.36788212358381,"ex-partner","F","L",45,1 -"224",1.92087361915706,1,"M",2.44150970082168,"myself","F","M",33,0 -"225",-1.3659545736228,0,"L",0.454000922870987,"ex-partner","M","H",37,1 -"226",-1.3659545736228,1,"M",1.66858962050752,"ex-partner","F","H",46,1 -"227",-0.577115807355633,1,"M",-1.14704781492262,"myself","F","M",51,0 -"228",1.26350798060109,0,"H",0.619626654366878,"both","F","H",51,0 -"229",1.39498110831228,0,"H",-0.705379197600249,"myself","M","M",35,0 -"230",1.1320348528899,1,"L",-0.539753466104358,"myself","F","M",42,1 -"231",-1.3659545736228,1,"L",-0.705379197600249,"both","F","H",52,0 -"232",1.1320348528899,1,"L",-0.87100492909614,"myself","F","M",52,0 -"233",0.737615469756312,1,"M",0.509209500036284,"myself","F","M",51,1 -"234",-1.23448144591161,0,"M",0.730043808697472,"ex-partner","M","M",48,0 -"235",0.343196086622728,1,"L",-0.484544888939061,"myself","F","M",43,0 -"236",0.869088597467506,1,"H",0.895669540193363,"myself","F","M",44,1 -"237",-0.971535190489216,1,"M",1.72379819767282,"ex-partner","F","M",63,0 -"238",-1.3659545736228,0,"H",0.509209500036284,"both","M","H",48,1 -"239",0.606142342045117,1,"M",-1.36788212358381,"ex-partner","F","M",54,1 -"240",0.869088597467506,0,"H",-0.208502003112576,"ex-partner","F","M",48,1 -"241",0.211722958911534,0,"M",0.0675408827139087,"myself","F","H",50,0 -"242",0.211722958911534,0,"L",1.00608669452396,"ex-partner","F","M",44,0 -"243",0.737615469756312,1,"L",0.39879234570569,"myself","M","H",49,0 -"244",-0.445642679644438,0,"L",0.39879234570569,"both","F","M",40,0 -"245",-0.577115807355633,0,"M",-0.650170620434952,"myself","M","H",35,1 -"246",0.343196086622728,1,"M",-1.03663066059203,"both","F","M",47,0 -"247",-1.3659545736228,1,"L",0.454000922870987,"ex-partner","F","M",44,1 -"248",-1.3659545736228,1,"M",0.454000922870987,"myself","M","H",41,0 -"249",-0.971535190489216,1,"L",1.22692100318514,"ex-partner","M","M",47,1 -"250",1.92087361915706,0,"M",1.50296388901163,"ex-partner","F","H",28,0 -"251",-1.3659545736228,1,"L",-0.263710580277873,"ex-partner","F","M",37,0 -"252",-0.971535190489216,1,"L",-0.429336311773764,"myself","F","M",43,1 -"253",0.343196086622728,0,"M",-1.36788212358381,"myself","F","M",64,0 -"254",-0.314169551933244,0,"M",0.0675408827139087,"ex-partner","M","M",44,0 -"255",1.0005617251787,0,"M",0.343583768540394,"ex-partner","F","M",68,1 -"256",1.26350798060109,1,"L",-1.25746496925322,"ex-partner","M","M",50,0 -"257",1.1320348528899,1,"M",-0.153293425947279,"myself","F","H",37,0 -"258",1.0005617251787,1,"L",-1.36788212358381,"both","M","L",44,0 -"259",-0.051223296510855,0,"M",-0.484544888939061,"both","F","H",32,1 -"260",-0.182696424222049,0,"L",-1.03663066059203,"both","F","H",36,0 -"261",1.65792736373467,0,"H",-0.539753466104358,"myself","F","M",43,0 -"262",-0.051223296510855,1,"H",-0.926213506261437,"ex-partner","F","M",54,1 -"263",0.211722958911534,0,"H",0.454000922870987,"ex-partner","F","M",35,0 -"264",-0.314169551933244,0,"M",0.454000922870987,"myself","F","M",47,1 -"265",0.343196086622728,1,"L",-1.36788212358381,"myself","F","H",47,0 -"266",0.474669214333923,1,"L",-1.14704781492262,"myself","M","M",41,1 -"267",-1.3659545736228,0,"L",0.674835231532175,"ex-partner","F","M",48,0 -"268",-0.840062062778022,0,"L",-0.760587774765546,"myself","F","M",39,0 -"269",1.39498110831228,1,"M",-0.374127734608467,"ex-partner","M","M",57,0 -"270",1.39498110831228,0,"M",-1.03663066059203,"myself","M","M",26,0 -"271",-0.445642679644438,0,"H",1.55817246617693,"myself","M","M",48,1 -"272",-1.3659545736228,1,"L",-0.263710580277873,"myself","M","L",42,1 -"273",-0.971535190489216,1,"M",-0.926213506261437,"both","M","H",36,0 -"274",-1.3659545736228,1,"M",-1.09183923775733,"ex-partner","F","H",48,0 -"275",2.31529300229065,1,"M",-0.153293425947279,"ex-partner","M","M",50,1 -"276",-0.182696424222049,1,"H",0.122749459879206,"myself","F","H",40,0 -"277",-0.577115807355633,1,"M",-0.815796351930843,"myself","M","M",41,1 -"278",0.474669214333923,0,"L",-0.705379197600249,"ex-partner","F","M",39,0 -"279",-0.708588935066827,0,"L",0.564418077201581,"myself","M","H",47,0 -"280",-0.840062062778022,0,"M",1.77900677483811,"myself","F","M",39,0 -"281",0.737615469756312,0,"L",-0.263710580277873,"myself","M","M",41,1 -"282",0.211722958911534,0,"L",-1.36788212358381,"myself","M","M",32,0 -"283",-0.182696424222049,1,"L",1.11650384885455,"myself","F","M",46,0 -"284",-1.3659545736228,0,"L",-1.03663066059203,"ex-partner","M","H",28,0 -"285",-0.445642679644438,1,"L",1.94463250633401,"both","M","H",30,0 -"286",0.474669214333923,1,"M",-0.926213506261437,"myself","M","M",49,0 -"287",-0.840062062778022,0,"L",-0.153293425947279,"myself","F","H",52,1 -"288",-0.182696424222049,1,"L",1.33733815751574,"both","F","H",57,0 -"289",-0.840062062778022,0,"M",-0.815796351930843,"myself","M","M",37,0 -"290",1.65792736373467,1,"M",-0.429336311773764,"ex-partner","F","H",31,0 -"291",-0.708588935066827,1,"L",-0.87100492909614,"both","F","H",51,0 -"292",-0.708588935066827,0,"L",-0.484544888939061,"both","F","H",36,0 -"293",-0.577115807355633,0,"L",0.177958037044503,"myself","M","M",33,0 -"294",0.343196086622728,0,"L",-0.926213506261437,"ex-partner","F","M",49,0 -"295",1.0005617251787,1,"M",0.619626654366878,"myself","F","M",43,0 -"296",-0.971535190489216,1,"H",-0.429336311773764,"myself","F","H",33,1 -"297",1.1320348528899,1,"M",-0.926213506261437,"ex-partner","M","M",46,0 -"298",-0.314169551933244,1,"L",1.28212958035044,"ex-partner","F","M",51,0 -"299",-0.051223296510855,1,"M",-0.650170620434952,"myself","F","M",38,1 -"300",-1.3659545736228,0,"L",-0.0980848487819821,"both","F","H",40,0 -"301",0.474669214333923,1,"M",-1.09183923775733,"myself","F","M",53,1 -"302",1.65792736373467,1,"L",1.06129527168925,"myself","M","L",58,0 -"303",-1.3659545736228,1,"L",-1.36788212358381,"both","M","H",50,0 -"304",-1.3659545736228,1,"L",-1.36788212358381,"myself","M","M",50,0 -"305",0.343196086622728,0,"H",-0.0980848487819821,"myself","F","H",47,0 -"306",0.343196086622728,0,"M",0.177958037044503,"both","M","M",43,0 -"307",-0.182696424222049,1,"M",0.0675408827139087,"myself","F","M",45,0 -"308",-0.577115807355633,0,"L",0.619626654366878,"both","M","M",30,0 -"309",-1.10300831820041,0,"M",-0.815796351930843,"myself","M","M",31,1 -"310",-0.708588935066827,1,"M",0.840460963028066,"ex-partner","M","M",46,0 -"311",-0.051223296510855,0,"L",-0.0428762716166852,"ex-partner","M","M",33,0 -"312",-0.971535190489216,0,"L",-0.926213506261437,"both","M","M",38,1 -"313",-0.840062062778022,1,"L",-0.0428762716166852,"myself","F","M",37,1 -"314",-1.3659545736228,1,"L",-1.36788212358381,"both","M","H",32,0 -"315",0.869088597467506,0,"H",1.83421535200341,"both","M","M",35,1 -"316",-0.708588935066827,1,"L",-0.263710580277873,"both","F","M",40,0 -"317",-0.314169551933244,1,"H",0.785252385862769,"myself","F","M",28,1 -"318",-0.708588935066827,1,"L",2.55192685515227,"myself","F","H",47,0 -"319",0.343196086622728,1,"H",-0.31891915744317,"myself","F","M",54,0 -"320",0.343196086622728,1,"L",-0.926213506261437,"ex-partner","M","M",47,0 -"321",0.474669214333923,0,"M",2.33109254649108,"both","F","H",47,1 -"322",-0.051223296510855,1,"L",0.730043808697472,"myself","F","L",25,0 -"323",-0.051223296510855,0,"H",-0.0428762716166852,"both","F","M",50,0 -"324",-1.3659545736228,1,"L",-1.36788212358381,"myself","M","H",35,0 -"325",-0.445642679644438,0,"M",0.2331666142098,"myself","M","H",51,0 -"326",2.05234674686826,1,"H",0.674835231532175,"both","F","M",29,0 -"327",1.39498110831228,0,"L",0.454000922870987,"myself","F","H",32,1 -"328",-0.182696424222049,1,"L",0.619626654366878,"ex-partner","F","H",51,1 -"329",1.65792736373467,0,"M",0.730043808697472,"myself","M","M",55,1 -"330",1.26350798060109,0,"M",-0.87100492909614,"myself","M","M",38,1 -"331",-1.3659545736228,0,"L",0.177958037044503,"myself","F","M",48,1 -"332",-1.3659545736228,0,"L",0.0675408827139087,"myself","M","H",45,0 -"333",0.0802498312003395,0,"L",0.343583768540394,"myself","F","H",39,0 -"334",-0.051223296510855,1,"L",-0.87100492909614,"ex-partner","M","H",30,1 -"335",-1.3659545736228,1,"L",-0.484544888939061,"ex-partner","F","M",46,0 -"336",-0.051223296510855,1,"M",0.840460963028066,"myself","F","H",29,0 -"337",0.474669214333923,0,"L",0.454000922870987,"both","F","H",36,0 -"338",-1.3659545736228,1,"M",2.38630112365638,"myself","F","H",54,1 -"339",-0.051223296510855,1,"H",-1.25746496925322,"both","F","M",25,1 -"340",-0.708588935066827,1,"L",-0.594962043269655,"ex-partner","M","M",61,1 -"341",1.39498110831228,1,"M",-1.20225639208792,"myself","M","H",50,0 -"342",-0.314169551933244,1,"L",-0.0980848487819821,"myself","F","H",55,0 -"343",-1.3659545736228,0,"M",-1.03663066059203,"myself","M","M",42,1 -"344",-0.445642679644438,0,"M",-1.36788212358381,"myself","M","M",43,0 -"345",-0.182696424222049,0,"L",0.840460963028066,"myself","F","L",31,1 -"346",-1.3659545736228,0,"M",0.840460963028066,"myself","F","M",38,0 -"347",1.26350798060109,0,"L",-1.36788212358381,"myself","M","H",37,0 -"348",-0.577115807355633,1,"L",-0.374127734608467,"both","F","L",43,0 -"349",-0.051223296510855,1,"M",1.28212958035044,"both","F","H",50,0 -"350",-1.10300831820041,1,"H",1.55817246617693,"ex-partner","F","M",46,0 -"351",-0.051223296510855,1,"H",-0.208502003112576,"myself","M","H",30,1 -"352",0.737615469756312,0,"M",-0.0428762716166852,"both","M","M",26,0 -"353",1.1320348528899,0,"M",-1.36788212358381,"ex-partner","F","M",52,1 -"354",0.0802498312003395,1,"L",-0.0428762716166852,"ex-partner","F","M",46,0 -"355",-1.3659545736228,1,"M",-0.539753466104358,"myself","M","M",46,1 -"356",-1.3659545736228,0,"M",-0.484544888939061,"ex-partner","F","M",31,1 -"357",-1.3659545736228,0,"H",-1.36788212358381,"both","M","H",36,0 -"358",-0.840062062778022,1,"L",0.564418077201581,"ex-partner","M","M",26,1 -"359",-1.3659545736228,0,"M",-1.36788212358381,"myself","F","M",51,0 -"360",-0.708588935066827,0,"M",-0.153293425947279,"both","F","M",43,1 -"361",-1.3659545736228,0,"M",2.27588396932579,"ex-partner","F","M",43,0 -"362",1.0005617251787,0,"L",2.1102582378299,"myself","M","M",33,0 -"363",0.869088597467506,1,"L",-1.36788212358381,"both","F","H",38,1 -"364",-0.971535190489216,1,"M",-1.36788212358381,"myself","F","H",45,0 -"365",-0.314169551933244,1,"M",-1.31267354641852,"myself","M","M",39,0 -"366",1.65792736373467,1,"L",-0.926213506261437,"both","F","H",49,0 -"367",0.343196086622728,1,"L",0.2331666142098,"myself","M","L",58,0 -"368",0.0802498312003395,0,"L",-1.36788212358381,"ex-partner","F","H",54,1 -"369",1.1320348528899,1,"L",1.11650384885455,"myself","M","H",48,1 -"370",-1.3659545736228,0,"M",-1.36788212358381,"both","F","M",32,0 -"371",2.31529300229065,1,"L",-0.374127734608467,"myself","M","M",29,0 -"372",-0.840062062778022,0,"H",0.2331666142098,"both","F","L",35,1 -"373",1.0005617251787,1,"M",-0.705379197600249,"ex-partner","F","H",36,0 -"374",0.737615469756312,0,"M",-0.153293425947279,"both","F","M",54,0 -"375",-0.708588935066827,1,"L",0.95087811735866,"both","F","H",49,1 -"376",-0.577115807355633,0,"L",0.122749459879206,"myself","M","M",37,0 -"377",0.211722958911534,0,"M",-1.14704781492262,"ex-partner","M","M",45,1 -"378",1.39498110831228,0,"L",0.122749459879206,"ex-partner","F","H",38,1 -"379",-1.3659545736228,0,"H",-0.705379197600249,"myself","F","H",52,0 -"380",-1.3659545736228,1,"M",-1.14704781492262,"myself","F","H",57,0 -"381",-1.3659545736228,0,"L",0.509209500036284,"ex-partner","F","M",35,0 -"382",1.78940049144587,0,"L",-1.14704781492262,"myself","F","H",44,0 diff --git a/tests/testthat/data_files/MEDIATION/framing.csv b/tests/testthat/data_files/MEDIATION/framing.csv deleted file mode 100644 index 4a87497f..00000000 --- a/tests/testthat/data_files/MEDIATION/framing.csv +++ /dev/null @@ -1,266 +0,0 @@ -"","cond","anx","age","educ","gender","income","emo","p_harm","tone","eth","treat","english","immigr","anti_info","cong_mesg" -"1","3","a little anxious",45,"high school","male",13,7,6,0,1,0,"Oppose",4,0,1 -"2","4","somewhat anxious",73,"bachelor's degree or higher","male",16,6,3,0,0,0,"Favor",3,0,0 -"3","2","a little anxious",53,"some college","female",3,8,7,1,0,0,"Strongly Oppose",3,0,0 -"4","1","not anxious at all",45,"high school","male",14,9,8,1,1,1,"Strongly Oppose",4,0,1 -"5","3","somewhat anxious",55,"some college","female",12,5,5,0,1,0,"Strongly Oppose",2,0,0 -"6","1","a little anxious",85,"high school","female",3,5,6,1,1,1,"Strongly Oppose",4,0,0 -"7","1","a little anxious",58,"high school","female",10,10,8,1,1,1,"Oppose",4,0,0 -"8","2","a little anxious",53,"some college","male",9,8,7,1,0,0,"Favor",4,1,1 -"9","1","a little anxious",52,"some college","female",14,8,5,1,1,1,"Strongly Oppose",3,0,0 -"10","4","very anxious",42,"some college","male",15,3,2,0,0,0,"Oppose",2,0,0 -"11","4","a little anxious",38,"bachelor's degree or higher","female",9,11,8,0,0,0,"Strongly Oppose",4,1,1 -"12","4","very anxious",38,"high school","male",6,9,8,0,0,0,"Strongly Oppose",4,1,1 -"13","4","a little anxious",26,"bachelor's degree or higher","female",10,8,6,0,0,0,"Oppose",3,0,1 -"14","1","not anxious at all",52,"some college","male",11,10,8,1,1,1,"Strongly Oppose",4,0,1 -"15","1","very anxious",48,"some college","male",19,3,3,1,1,1,"Oppose",2,0,0 -"16","2","not anxious at all",62,"high school","female",10,12,8,1,0,0,"Strongly Oppose",4,1,1 -"17","1","not anxious at all",41,"less than high school","female",7,9,8,1,1,1,"Oppose",4,0,0 -"18","3","somewhat anxious",54,"high school","male",11,6,6,0,1,0,"Strongly Oppose",4,0,0 -"19","1","a little anxious",69,"high school","female",9,8,7,1,1,1,"Strongly Oppose",4,0,0 -"20","1","somewhat anxious",71,"less than high school","male",6,6,6,1,1,1,"Strongly Oppose",1,0,0 -"21","3","somewhat anxious",62,"some college","male",14,4,5,0,1,0,"Oppose",2,0,0 -"22","2","very anxious",41,"some college","male",13,3,6,1,0,0,"Strongly Oppose",3,0,0 -"23","3","a little anxious",60,"high school","female",11,7,7,0,1,0,"Strongly Oppose",4,0,1 -"24","4","somewhat anxious",62,"some college","male",17,6,8,0,0,0,"Oppose",4,0,1 -"25","4","somewhat anxious",31,"bachelor's degree or higher","male",13,7,5,0,0,0,"Strongly Oppose",4,0,0 -"26","3","somewhat anxious",50,"some college","female",13,4,2,0,1,0,"Strongly Oppose",2,0,0 -"27","3","a little anxious",48,"high school","male",7,9,5,0,1,0,"Strongly Oppose",4,0,1 -"28","2","somewhat anxious",29,"some college","male",10,6,4,1,0,0,"Strongly Favor",2,0,0 -"29","3","a little anxious",64,"high school","female",5,9,5,0,1,0,"Oppose",4,0,0 -"30","3","very anxious",65,"high school","female",12,4,6,0,1,0,"Strongly Oppose",4,0,1 -"31","4","not anxious at all",66,"less than high school","female",4,12,8,0,0,0,"Oppose",4,0,0 -"32","1","not anxious at all",68,"high school","female",9,11,8,1,1,1,"Strongly Oppose",4,0,1 -"33","4","somewhat anxious",43,"high school","female",15,6,6,0,0,0,"Favor",3,0,0 -"34","3","a little anxious",57,"bachelor's degree or higher","female",12,7,5,0,1,0,"Oppose",3,0,0 -"35","3","somewhat anxious",41,"high school","male",11,9,4,0,1,0,"Strongly Oppose",4,0,0 -"36","2","somewhat anxious",85,"bachelor's degree or higher","male",13,7,7,1,0,0,"Strongly Oppose",3,0,1 -"37","4","a little anxious",70,"bachelor's degree or higher","male",15,8,8,0,0,0,"Strongly Oppose",4,0,1 -"38","3","a little anxious",65,"bachelor's degree or higher","male",14,8,6,0,1,0,"Strongly Oppose",4,0,0 -"39","2","a little anxious",67,"less than high school","female",11,11,8,1,0,0,"Strongly Oppose",4,1,1 -"40","1","a little anxious",68,"some college","female",9,6,5,1,1,1,"Favor",2,0,0 -"41","2","somewhat anxious",64,"some college","male",13,5,5,1,0,0,"Strongly Oppose",2,0,0 -"42","1","a little anxious",37,"some college","male",13,10,8,1,1,1,"Strongly Oppose",4,0,1 -"43","3","not anxious at all",45,"high school","female",7,10,7,0,1,0,"Strongly Oppose",4,0,0 -"44","3","a little anxious",81,"less than high school","female",14,9,7,0,1,0,"Oppose",4,0,1 -"45","2","somewhat anxious",51,"high school","female",10,6,6,1,0,0,"Strongly Oppose",3,0,0 -"46","1","a little anxious",53,"some college","male",12,10,8,1,1,1,"Strongly Oppose",4,0,1 -"47","4","somewhat anxious",62,"high school","female",9,6,5,0,0,0,"Strongly Oppose",4,0,0 -"48","2","a little anxious",42,"less than high school","male",8,9,8,1,0,0,"Oppose",4,0,1 -"49","1","a little anxious",71,"some college","female",12,8,8,1,1,1,"Strongly Oppose",4,0,0 -"50","1","a little anxious",56,"high school","male",11,11,8,1,1,1,"Strongly Oppose",4,0,1 -"51","1","a little anxious",67,"less than high school","female",8,10,5,1,1,1,"Oppose",4,0,1 -"52","4","a little anxious",77,"some college","female",6,7,6,0,0,0,"Strongly Oppose",2,1,0 -"53","1","not anxious at all",24,"some college","female",15,11,7,1,1,1,"Strongly Oppose",4,1,1 -"54","4","a little anxious",42,"high school","male",3,7,5,0,0,0,"Oppose",2,0,0 -"55","3","very anxious",25,"bachelor's degree or higher","female",11,3,4,0,1,0,"Oppose",2,0,0 -"56","1","a little anxious",60,"high school","female",12,8,6,1,1,1,"Oppose",4,0,0 -"57","1","somewhat anxious",43,"some college","male",14,10,8,1,1,1,"Strongly Oppose",1,0,1 -"58","1","a little anxious",60,"some college","male",6,9,6,1,1,1,"Strongly Oppose",3,0,0 -"59","4","not anxious at all",31,"high school","male",11,11,7,0,0,0,"Strongly Oppose",4,1,0 -"60","2","somewhat anxious",47,"some college","female",13,7,6,1,0,0,"Favor",3,0,0 -"61","1","very anxious",32,"bachelor's degree or higher","female",10,3,2,1,1,1,"Favor",2,0,0 -"62","2","somewhat anxious",66,"some college","male",8,8,7,1,0,0,"Strongly Oppose",3,0,0 -"63","2","very anxious",44,"high school","female",15,6,8,1,0,0,"Strongly Oppose",4,0,0 -"64","2","somewhat anxious",46,"high school","male",17,6,4,1,0,0,"Strongly Oppose",3,0,0 -"65","4","very anxious",41,"high school","female",10,3,3,0,0,0,"Strongly Oppose",2,0,0 -"66","2","a little anxious",75,"high school","female",9,7,4,1,0,0,"Strongly Oppose",3,0,0 -"67","1","not anxious at all",53,"bachelor's degree or higher","male",10,12,8,1,1,1,"Strongly Oppose",4,0,1 -"68","3","very anxious",60,"bachelor's degree or higher","male",12,3,4,0,1,0,"Favor",2,0,0 -"69","3","very anxious",75,"high school","female",2,4,6,0,1,0,"Favor",2,0,0 -"70","2","not anxious at all",45,"high school","male",9,12,8,1,0,0,"Strongly Oppose",4,0,0 -"71","2","not anxious at all",69,"less than high school","female",5,12,8,1,0,0,"Strongly Oppose",4,0,1 -"72","4","somewhat anxious",67,"high school","female",15,6,4,0,0,0,"Strongly Oppose",3,0,0 -"73","4","somewhat anxious",20,"high school","male",9,5,5,0,0,0,"Oppose",2,0,0 -"74","1","somewhat anxious",43,"bachelor's degree or higher","male",16,6,4,1,1,1,"Strongly Oppose",2,0,0 -"75","4","a little anxious",32,"some college","male",10,9,8,0,0,0,"Strongly Oppose",4,0,0 -"76","3","somewhat anxious",39,"high school","male",12,5,4,0,1,0,"Favor",3,0,0 -"77","3","very anxious",53,"bachelor's degree or higher","female",13,4,3,0,1,0,"Favor",2,0,0 -"78","2","not anxious at all",57,"some college","female",2,12,8,1,0,0,"Strongly Oppose",4,1,0 -"79","4","a little anxious",62,"high school","female",7,8,7,0,0,0,"Strongly Oppose",3,1,1 -"80","2","a little anxious",69,"high school","female",7,9,8,1,0,0,"Strongly Oppose",4,0,0 -"81","2","somewhat anxious",44,"high school","female",13,7,6,1,0,0,"Oppose",4,0,0 -"82","1","not anxious at all",57,"high school","male",11,12,8,1,1,1,"Strongly Oppose",4,0,0 -"83","4","a little anxious",27,"some college","female",15,7,4,0,0,0,"Strongly Oppose",2,0,0 -"84","3","somewhat anxious",82,"bachelor's degree or higher","female",17,7,5,0,1,0,"Oppose",2,0,0 -"85","4","somewhat anxious",84,"high school","male",12,6,6,0,0,0,"Strongly Oppose",3,1,1 -"86","3","somewhat anxious",54,"some college","female",13,5,6,0,1,0,"Oppose",2,0,0 -"87","2","very anxious",36,"less than high school","male",11,4,6,1,0,0,"Oppose",4,0,0 -"88","1","not anxious at all",47,"some college","male",13,12,8,1,1,1,"Strongly Oppose",4,1,1 -"89","1","very anxious",28,"bachelor's degree or higher","female",12,3,6,1,1,1,"Strongly Oppose",4,0,0 -"90","2","very anxious",42,"high school","female",14,4,8,1,0,0,"Strongly Oppose",4,0,1 -"91","3","very anxious",60,"high school","male",6,7,8,0,1,0,"Strongly Oppose",4,0,0 -"92","1","very anxious",55,"bachelor's degree or higher","male",15,3,4,1,1,1,"Strongly Oppose",3,0,0 -"93","2","a little anxious",55,"high school","female",6,9,7,1,0,0,"Strongly Oppose",4,0,0 -"94","4","not anxious at all",61,"some college","male",12,12,8,0,0,0,"Strongly Oppose",4,1,1 -"95","3","somewhat anxious",84,"high school","female",11,5,2,0,1,0,"Favor",2,0,0 -"96","4","not anxious at all",45,"high school","female",3,10,8,0,0,0,"Oppose",1,0,1 -"97","1","a little anxious",67,"some college","male",7,8,8,1,1,1,"Oppose",3,0,0 -"98","2","not anxious at all",24,"some college","male",12,11,8,1,0,0,"Strongly Oppose",4,0,0 -"99","2","not anxious at all",64,"less than high school","male",11,10,7,1,0,0,"Strongly Oppose",4,1,1 -"100","1","a little anxious",72,"high school","female",7,10,3,1,1,1,"Strongly Oppose",4,0,0 -"101","2","not anxious at all",40,"high school","female",4,12,8,1,0,0,"Strongly Favor",1,0,1 -"102","4","not anxious at all",35,"bachelor's degree or higher","female",11,9,8,0,0,0,"Strongly Oppose",4,1,1 -"103","1","not anxious at all",69,"high school","female",8,12,8,1,1,1,"Oppose",4,0,1 -"104","1","a little anxious",30,"less than high school","female",6,11,7,1,1,1,"Oppose",4,0,0 -"105","2","a little anxious",45,"high school","female",7,8,8,1,0,0,"Strongly Oppose",3,0,0 -"106","4","very anxious",35,"some college","male",9,3,4,0,0,0,"Oppose",2,0,0 -"107","4","not anxious at all",47,"high school","male",11,10,8,0,0,0,"Oppose",3,1,1 -"108","4","a little anxious",53,"some college","male",11,5,4,0,0,0,"Strongly Oppose",2,0,0 -"109","3","a little anxious",75,"high school","male",4,9,6,0,1,0,"Oppose",2,0,0 -"110","1","somewhat anxious",70,"high school","female",13,8,6,1,1,1,"Favor",3,0,0 -"111","1","somewhat anxious",56,"high school","female",8,7,8,1,1,1,"Strongly Oppose",4,0,1 -"112","3","a little anxious",70,"less than high school","female",7,8,8,0,1,0,"Strongly Oppose",3,0,0 -"113","4","somewhat anxious",35,"bachelor's degree or higher","male",11,4,3,0,0,0,"Strongly Oppose",2,0,0 -"114","1","not anxious at all",54,"bachelor's degree or higher","female",11,12,6,1,1,1,"Strongly Oppose",4,0,0 -"115","2","somewhat anxious",76,"bachelor's degree or higher","male",12,5,6,1,0,0,"Strongly Oppose",2,0,0 -"116","1","a little anxious",65,"high school","female",13,9,6,1,1,1,"Strongly Oppose",4,1,1 -"117","2","somewhat anxious",22,"high school","male",12,5,4,1,0,0,"Oppose",2,0,0 -"118","3","somewhat anxious",28,"high school","male",13,8,8,0,1,0,"Strongly Oppose",4,0,1 -"119","4","very anxious",26,"bachelor's degree or higher","male",11,3,5,0,0,0,"Favor",3,0,0 -"120","1","somewhat anxious",67,"high school","male",13,5,6,1,1,1,"Strongly Oppose",4,0,0 -"121","4","very anxious",58,"high school","male",13,5,4,0,0,0,"Strongly Oppose",3,0,1 -"122","3","somewhat anxious",34,"some college","female",16,6,3,0,1,0,"Strongly Oppose",3,0,0 -"123","2","very anxious",29,"bachelor's degree or higher","female",1,5,6,1,0,0,"Oppose",2,0,0 -"124","3","a little anxious",61,"less than high school","male",13,10,6,0,1,0,"Oppose",4,0,1 -"125","4","not anxious at all",58,"some college","female",6,11,8,0,0,0,"Strongly Oppose",4,0,0 -"126","1","very anxious",46,"some college","female",10,5,4,1,1,1,"Oppose",2,0,0 -"127","3","not anxious at all",73,"less than high school","female",6,8,6,0,1,0,"Strongly Oppose",4,0,1 -"128","4","very anxious",23,"bachelor's degree or higher","male",1,3,3,0,0,0,"Strongly Oppose",1,0,0 -"129","3","very anxious",19,"high school","male",15,4,6,0,1,0,"Strongly Oppose",3,0,0 -"130","2","somewhat anxious",35,"some college","male",8,4,4,1,0,0,"Strongly Oppose",2,0,0 -"131","2","very anxious",29,"bachelor's degree or higher","male",19,4,5,1,0,0,"Strongly Oppose",3,0,0 -"132","2","very anxious",53,"bachelor's degree or higher","male",8,3,3,1,0,0,"Strongly Oppose",3,0,0 -"133","3","a little anxious",72,"bachelor's degree or higher","male",12,7,6,0,1,0,"Oppose",3,0,1 -"134","3","somewhat anxious",36,"bachelor's degree or higher","male",14,5,4,0,1,0,"Favor",1,0,0 -"135","1","not anxious at all",26,"less than high school","male",5,11,8,1,1,1,"Strongly Oppose",3,0,0 -"136","2","a little anxious",46,"bachelor's degree or higher","female",13,7,8,1,0,0,"Strongly Oppose",4,0,1 -"137","3","a little anxious",31,"high school","male",6,9,8,0,1,0,"Strongly Oppose",4,0,0 -"138","2","a little anxious",70,"high school","female",1,8,7,1,0,0,"Strongly Oppose",4,0,0 -"139","4","a little anxious",65,"bachelor's degree or higher","male",13,7,6,0,0,0,"Strongly Oppose",3,0,1 -"140","4","very anxious",69,"less than high school","female",1,4,4,0,0,0,"Oppose",2,0,0 -"141","4","very anxious",72,"bachelor's degree or higher","male",11,4,4,0,0,0,"Oppose",2,0,0 -"142","1","not anxious at all",71,"less than high school","female",13,12,8,1,1,1,"Strongly Oppose",4,1,1 -"143","2","very anxious",62,"some college","male",12,4,6,1,0,0,"Oppose",3,0,0 -"144","3","a little anxious",37,"bachelor's degree or higher","male",13,7,5,0,1,0,"Oppose",3,0,0 -"145","2","very anxious",36,"high school","female",5,3,6,1,0,0,"Oppose",3,0,0 -"146","4","somewhat anxious",47,"some college","female",9,4,4,0,0,0,"Favor",3,0,0 -"147","3","somewhat anxious",47,"bachelor's degree or higher","male",16,5,4,0,1,0,"Oppose",3,0,0 -"148","1","very anxious",28,"bachelor's degree or higher","male",4,3,3,1,1,1,"Oppose",3,0,0 -"149","2","somewhat anxious",34,"bachelor's degree or higher","female",11,5,6,1,0,0,"Oppose",2,0,0 -"150","2","very anxious",69,"bachelor's degree or higher","male",10,3,4,1,0,0,"Favor",2,0,0 -"151","3","a little anxious",47,"high school","male",12,10,8,0,1,0,"Oppose",3,0,1 -"152","1","not anxious at all",73,"high school","male",11,11,8,1,1,1,"Strongly Oppose",4,0,1 -"153","3","very anxious",63,"high school","female",10,3,3,0,1,0,"Strongly Oppose",2,0,0 -"154","2","somewhat anxious",33,"less than high school","male",1,7,4,1,0,0,"Strongly Oppose",2,0,0 -"155","1","somewhat anxious",42,"high school","female",6,7,4,1,1,1,"Oppose",2,0,0 -"156","3","somewhat anxious",43,"high school","female",7,5,6,0,1,0,"Strongly Oppose",4,1,1 -"157","4","very anxious",50,"bachelor's degree or higher","female",16,3,4,0,0,0,"Oppose",2,0,0 -"158","2","somewhat anxious",56,"bachelor's degree or higher","male",10,6,7,1,0,0,"Strongly Oppose",3,0,1 -"159","3","somewhat anxious",28,"some college","female",11,6,6,0,1,0,"Strongly Oppose",2,0,0 -"160","1","somewhat anxious",44,"some college","female",13,8,8,1,1,1,"Oppose",4,0,0 -"161","3","somewhat anxious",38,"bachelor's degree or higher","female",9,5,6,0,1,0,"Oppose",1,0,0 -"162","1","not anxious at all",34,"bachelor's degree or higher","female",14,11,7,1,1,1,"Strongly Oppose",2,0,0 -"163","2","very anxious",56,"some college","male",16,3,3,1,0,0,"Strongly Oppose",2,0,0 -"164","3","somewhat anxious",47,"bachelor's degree or higher","male",11,4,6,0,1,0,"Oppose",2,0,0 -"165","4","somewhat anxious",42,"bachelor's degree or higher","male",7,7,6,0,0,0,"Strongly Oppose",4,0,1 -"166","3","somewhat anxious",53,"some college","female",16,4,5,0,1,0,"Strongly Oppose",2,0,0 -"167","3","very anxious",38,"bachelor's degree or higher","female",11,4,4,0,1,0,"Strongly Favor",1,0,0 -"168","2","somewhat anxious",50,"bachelor's degree or higher","female",11,6,4,1,0,0,"Favor",3,0,0 -"169","3","a little anxious",21,"high school","male",15,8,7,0,1,0,"Strongly Oppose",3,0,1 -"170","4","somewhat anxious",25,"some college","male",18,5,6,0,0,0,"Strongly Oppose",3,0,0 -"171","3","very anxious",58,"high school","female",16,5,8,0,1,0,"Oppose",4,0,1 -"172","4","somewhat anxious",39,"some college","male",10,5,7,0,0,0,"Strongly Oppose",3,1,0 -"173","4","not anxious at all",26,"some college","female",7,12,8,0,0,0,"Strongly Oppose",4,0,0 -"174","4","somewhat anxious",61,"some college","female",8,8,6,0,0,0,"Strongly Oppose",4,0,1 -"175","1","somewhat anxious",29,"some college","female",11,5,4,1,1,1,"Oppose",1,0,0 -"176","3","not anxious at all",39,"some college","female",12,12,7,0,1,0,"Strongly Oppose",4,0,1 -"177","2","somewhat anxious",40,"bachelor's degree or higher","male",11,7,6,1,0,0,"Strongly Oppose",4,0,1 -"178","1","somewhat anxious",30,"bachelor's degree or higher","female",11,4,4,1,1,1,"Strongly Favor",2,0,0 -"179","2","very anxious",64,"bachelor's degree or higher","female",10,3,5,1,0,0,"Oppose",1,0,0 -"180","2","a little anxious",50,"less than high school","male",5,10,7,1,0,0,"Strongly Oppose",3,0,1 -"181","2","somewhat anxious",33,"bachelor's degree or higher","female",12,9,8,1,0,0,"Strongly Oppose",4,0,0 -"182","3","somewhat anxious",35,"high school","male",9,6,6,0,1,0,"Oppose",4,0,1 -"183","1","somewhat anxious",26,"bachelor's degree or higher","female",16,6,5,1,1,1,"Oppose",3,0,0 -"184","1","not anxious at all",44,"some college","male",16,10,8,1,1,1,"Strongly Oppose",4,0,0 -"185","1","somewhat anxious",44,"some college","male",13,6,6,1,1,1,"Oppose",4,0,1 -"186","1","not anxious at all",25,"some college","male",11,12,8,1,1,1,"Strongly Oppose",4,1,1 -"187","3","very anxious",44,"bachelor's degree or higher","male",17,3,4,0,1,0,"Oppose",1,0,0 -"188","2","a little anxious",51,"bachelor's degree or higher","female",17,9,8,1,0,0,"Strongly Oppose",4,1,1 -"189","2","very anxious",62,"bachelor's degree or higher","female",14,5,6,1,0,0,"Strongly Oppose",3,0,0 -"190","4","very anxious",55,"bachelor's degree or higher","female",18,3,8,0,0,0,"Strongly Oppose",4,0,1 -"191","3","somewhat anxious",43,"bachelor's degree or higher","male",13,5,6,0,1,0,"Strongly Oppose",3,0,1 -"192","4","very anxious",53,"bachelor's degree or higher","male",12,3,3,0,0,0,"Strongly Oppose",3,1,1 -"193","3","a little anxious",49,"some college","female",10,6,4,0,1,0,"Oppose",3,0,1 -"194","3","somewhat anxious",34,"some college","male",11,5,4,0,1,0,"Favor",2,0,0 -"195","4","not anxious at all",36,"high school","male",11,9,7,0,0,0,"Strongly Oppose",4,0,0 -"196","2","very anxious",31,"bachelor's degree or higher","male",11,3,3,1,0,0,"Strongly Oppose",3,0,1 -"197","4","somewhat anxious",57,"bachelor's degree or higher","female",15,5,5,0,0,0,"Strongly Oppose",2,0,0 -"198","2","somewhat anxious",18,"less than high school","female",16,6,6,1,0,0,"Oppose",1,0,0 -"199","3","somewhat anxious",37,"bachelor's degree or higher","female",12,5,6,0,1,0,"Strongly Oppose",3,0,0 -"200","3","very anxious",63,"bachelor's degree or higher","male",16,3,4,0,1,0,"Strongly Oppose",1,0,0 -"201","2","a little anxious",48,"bachelor's degree or higher","female",16,8,8,1,0,0,"Oppose",3,0,0 -"202","4","not anxious at all",32,"high school","male",13,12,8,0,0,0,"Strongly Oppose",4,0,1 -"203","2","a little anxious",28,"some college","female",9,7,5,1,0,0,"Oppose",2,0,0 -"204","4","somewhat anxious",45,"high school","female",13,6,5,0,0,0,"Favor",3,0,0 -"205","1","a little anxious",59,"some college","male",13,7,8,1,1,1,"Oppose",4,1,1 -"206","4","not anxious at all",82,"high school","female",10,11,8,0,0,0,"Strongly Oppose",3,1,0 -"207","2","very anxious",62,"bachelor's degree or higher","female",2,4,4,1,0,0,"Favor",2,0,0 -"208","1","very anxious",35,"bachelor's degree or higher","female",19,4,5,1,1,1,"Oppose",3,0,0 -"209","4","very anxious",47,"some college","female",15,4,5,0,0,0,"Oppose",1,0,1 -"210","3","not anxious at all",65,"some college","male",15,11,8,0,1,0,"Strongly Oppose",2,0,0 -"211","1","a little anxious",62,"high school","male",13,8,8,1,1,1,"Strongly Oppose",4,0,0 -"212","4","a little anxious",59,"bachelor's degree or higher","female",18,7,7,0,0,0,"Strongly Oppose",4,0,1 -"213","4","somewhat anxious",51,"bachelor's degree or higher","female",9,6,6,0,0,0,"Oppose",2,0,0 -"214","1","somewhat anxious",33,"high school","female",12,8,6,1,1,1,"Strongly Oppose",4,0,0 -"215","1","a little anxious",27,"some college","female",8,9,6,1,1,1,"Oppose",3,0,0 -"216","2","somewhat anxious",54,"bachelor's degree or higher","female",10,5,3,1,0,0,"Strongly Oppose",2,1,0 -"217","3","very anxious",58,"bachelor's degree or higher","male",5,3,2,0,1,0,"Favor",1,0,0 -"218","2","very anxious",20,"some college","male",3,3,3,1,0,0,"Strongly Favor",2,0,0 -"219","3","very anxious",47,"bachelor's degree or higher","male",5,3,3,0,1,0,"Oppose",3,0,0 -"220","2","a little anxious",29,"high school","male",12,10,7,1,0,0,"Oppose",4,1,1 -"221","3","not anxious at all",54,"high school","female",4,12,8,0,1,0,"Strongly Oppose",4,0,0 -"222","1","a little anxious",24,"bachelor's degree or higher","female",7,7,6,1,1,1,"Oppose",3,0,0 -"223","2","not anxious at all",47,"high school","female",10,12,8,1,0,0,"Strongly Oppose",4,1,1 -"224","3","a little anxious",25,"some college","female",11,7,3,0,1,0,"Oppose",2,0,0 -"225","4","somewhat anxious",28,"high school","male",10,5,6,0,0,0,"Oppose",3,0,0 -"226","2","somewhat anxious",57,"bachelor's degree or higher","male",16,7,6,1,0,0,"Strongly Favor",3,0,1 -"227","4","a little anxious",26,"high school","male",8,10,6,0,0,0,"Strongly Oppose",4,0,0 -"228","1","a little anxious",43,"high school","male",7,7,7,1,1,1,"Strongly Favor",3,0,1 -"229","4","somewhat anxious",35,"high school","male",12,6,6,0,0,0,"Strongly Oppose",4,0,1 -"230","4","a little anxious",29,"bachelor's degree or higher","female",11,7,5,0,0,0,"Oppose",2,0,0 -"231","2","very anxious",26,"some college","female",14,5,4,1,0,0,"Oppose",3,0,0 -"232","3","not anxious at all",18,"high school","female",15,12,8,0,1,0,"Strongly Oppose",4,0,0 -"233","4","very anxious",60,"bachelor's degree or higher","female",12,3,2,0,0,0,"Oppose",1,0,0 -"234","4","very anxious",42,"bachelor's degree or higher","female",15,3,3,0,0,0,"Strongly Oppose",2,0,0 -"235","1","a little anxious",29,"high school","female",15,10,8,1,1,1,"Strongly Oppose",4,0,1 -"236","3","somewhat anxious",57,"bachelor's degree or higher","female",10,5,4,0,1,0,"Favor",1,0,0 -"237","2","not anxious at all",53,"high school","female",14,10,8,1,0,0,"Strongly Oppose",4,0,1 -"238","3","very anxious",27,"some college","male",6,3,6,0,1,0,"Strongly Oppose",3,0,0 -"239","1","a little anxious",25,"bachelor's degree or higher","male",8,9,7,1,1,1,"Strongly Oppose",4,0,1 -"240","3","somewhat anxious",37,"some college","female",7,7,4,0,1,0,"Strongly Oppose",2,0,0 -"241","1","a little anxious",25,"some college","female",12,7,7,1,1,1,"Oppose",3,0,1 -"242","1","very anxious",38,"bachelor's degree or higher","female",13,4,3,1,1,1,"Strongly Oppose",3,0,0 -"243","1","somewhat anxious",39,"bachelor's degree or higher","female",15,5,5,1,1,1,"Strongly Oppose",3,0,0 -"244","1","somewhat anxious",26,"some college","male",7,7,6,1,1,1,"Strongly Oppose",4,0,1 -"245","4","very anxious",45,"bachelor's degree or higher","female",18,5,3,0,0,0,"Strongly Oppose",3,0,0 -"246","2","somewhat anxious",27,"some college","male",13,5,7,1,0,0,"Favor",4,0,0 -"247","3","very anxious",46,"high school","male",12,3,5,0,1,0,"Oppose",2,0,0 -"248","1","somewhat anxious",62,"high school","male",3,5,2,1,1,1,"Strongly Oppose",3,0,0 -"249","3","somewhat anxious",44,"high school","female",12,6,5,0,1,0,"Oppose",2,0,0 -"250","3","somewhat anxious",65,"bachelor's degree or higher","male",9,6,8,0,1,0,"Strongly Oppose",3,0,0 -"251","2","not anxious at all",34,"bachelor's degree or higher","male",8,12,7,1,0,0,"Oppose",3,0,0 -"252","4","somewhat anxious",66,"high school","female",11,7,8,0,0,0,"Oppose",3,1,1 -"253","3","very anxious",44,"high school","female",14,3,4,0,1,0,"Favor",2,0,0 -"254","1","a little anxious",34,"high school","male",13,7,5,1,1,1,"Oppose",3,0,1 -"255","4","a little anxious",43,"some college","male",10,11,8,0,0,0,"Strongly Oppose",4,0,0 -"256","2","a little anxious",30,"high school","male",9,8,7,1,0,0,"Strongly Oppose",4,0,0 -"257","1","not anxious at all",27,"some college","female",17,12,7,1,1,1,"Strongly Oppose",4,0,1 -"258","1","a little anxious",20,"high school","female",17,8,4,1,1,1,"Oppose",2,0,1 -"259","2","a little anxious",56,"high school","female",10,10,8,1,0,0,"Strongly Oppose",3,0,0 -"260","2","not anxious at all",42,"high school","male",12,10,7,1,0,0,"Oppose",4,0,1 -"261","3","somewhat anxious",44,"bachelor's degree or higher","male",17,7,6,0,1,0,"Oppose",1,0,0 -"262","4","somewhat anxious",28,"bachelor's degree or higher","female",14,6,6,0,0,0,"Strongly Oppose",1,0,1 -"263","2","very anxious",38,"bachelor's degree or higher","female",14,3,6,1,0,0,"Favor",2,0,0 -"264","1","somewhat anxious",29,"bachelor's degree or higher","male",10,9,7,1,1,1,"Strongly Oppose",4,0,1 -"265","4","very anxious",52,"some college","female",1,3,2,0,0,0,"Oppose",2,0,0 diff --git a/tests/testthat/data_files/MEDIATION/student.csv b/tests/testthat/data_files/MEDIATION/student.csv deleted file mode 100644 index 8fffcda9..00000000 --- a/tests/testthat/data_files/MEDIATION/student.csv +++ /dev/null @@ -1,9680 +0,0 @@ -"","fight","attachment","work","score","late","coed","smorale","gender","income","free","pared","catholic","SCH_ID" -"1",0,0,0,46,1,1,5,1,10,3,0,0,1 -"2",1,0,0,48,5,1,5,0,9,3,0,0,1 -"3",1,1,0,72,3,1,5,1,13,3,1,0,1 -"4",0,1,1,57,1,1,5,0,12,3,0,0,1 -"5",0,1,0,51,2,1,5,0,11,3,0,0,1 -"6",0,1,1,52,2,1,5,0,7,3,0,0,1 -"7",0,1,0,42,3,1,5,0,7,3,0,0,1 -"8",0,1,0,41,2,1,5,0,4,3,0,0,1 -"9",0,1,0,28,2,1,5,1,8,4,0,0,2 -"10",0,0,0,56,1,1,5,0,12,4,1,0,2 -"11",0,1,0,53,1,1,5,1,10,4,0,0,2 -"12",0,1,0,41,2,1,5,1,9,4,0,0,2 -"13",0,0,1,52,5,1,5,1,6,4,0,0,2 -"14",0,1,1,56,1,1,5,0,8,4,1,0,2 -"15",1,1,1,54,2,1,5,1,9,4,0,0,2 -"16",1,1,1,53,2,1,5,0,5,4,0,0,2 -"17",1,1,0,49,5,1,5,1,7,4,0,0,2 -"18",0,1,1,56,2,1,5,0,10,4,1,0,2 -"19",0,1,0,57,2,1,5,0,9,3,0,0,3 -"20",0,1,1,61,5,1,5,1,11,3,1,0,3 -"21",0,1,0,47,3,1,5,1,9,3,0,0,3 -"22",0,1,0,43,1,1,5,0,7,3,0,0,3 -"23",0,1,0,64,1,1,5,0,10,3,1,0,3 -"24",0,0,0,51,2,1,5,0,10,3,1,0,3 -"25",0,1,1,48,2,1,5,0,10,3,0,0,3 -"26",0,1,1,41,2,1,5,1,5,3,0,0,3 -"27",1,1,1,55,2,1,5,0,9,3,0,0,3 -"28",0,1,0,55,3,1,5,1,10,3,0,0,3 -"29",0,1,1,52,3,1,5,1,10,3,1,0,3 -"30",0,1,1,55,1,1,5,0,8,3,1,0,3 -"31",0,1,0,63,3,1,5,0,11,3,1,0,3 -"32",0,0,0,48,2,1,5,1,10,3,1,0,3 -"33",0,1,0,49,3,1,5,1,8,3,0,0,3 -"34",0,0,0,63,1,0,5,0,11,1,1,1,4 -"35",0,1,1,37,3,0,5,0,8,1,0,1,4 -"36",0,1,1,49,4,0,5,0,9,1,0,1,4 -"37",0,1,0,54,2,0,5,0,10,1,1,1,4 -"38",0,1,0,62,2,0,5,0,10,1,0,1,4 -"39",0,1,1,55,2,0,5,0,11,1,1,1,4 -"40",1,1,0,37,2,0,5,0,11,1,1,1,4 -"41",0,1,0,58,1,0,5,0,8,1,0,1,4 -"42",1,1,0,55,2,0,5,0,10,1,0,1,4 -"43",1,0,0,33,2,0,5,0,6,1,0,1,4 -"44",1,1,1,55,3,0,5,0,9,1,0,1,4 -"45",1,1,1,53,2,0,5,0,12,1,1,1,4 -"46",0,1,0,52,3,0,5,0,11,1,0,1,4 -"47",0,1,1,59,3,0,5,0,10,1,0,1,4 -"48",0,1,1,60,3,0,5,1,10,1,1,1,4 -"49",0,1,0,51,1,0,5,0,12,1,0,1,4 -"50",0,1,1,49,5,0,5,0,8,1,0,1,4 -"51",0,1,0,51,3,0,5,0,7,1,0,1,4 -"52",0,0,1,50,3,0,5,0,10,1,1,1,4 -"53",0,0,1,59,2,1,4,0,11,1,1,0,5 -"54",0,0,0,59,2,1,4,0,12,1,1,0,5 -"55",0,0,0,43,2,1,4,1,9,1,0,0,5 -"56",0,1,1,49,2,1,4,0,10,1,0,0,5 -"57",0,1,0,47,3,1,4,0,11,1,0,0,5 -"58",0,0,1,67,3,1,4,1,11,1,0,0,5 -"59",0,1,1,34,2,1,4,1,8,1,1,0,5 -"60",0,1,0,64,2,1,4,0,11,1,1,0,5 -"61",0,1,1,63,3,1,4,1,9,1,1,0,5 -"62",1,1,0,63,3,1,4,0,11,1,1,0,5 -"63",0,1,1,55,3,1,4,1,10,1,0,0,5 -"64",1,1,1,50,5,1,4,1,9,1,0,0,5 -"65",0,1,0,53,4,1,4,0,10,1,1,0,5 -"66",0,1,1,56,3,1,4,1,12,1,1,0,5 -"67",0,1,0,61,2,1,4,1,9,1,0,0,5 -"68",0,1,1,63,3,1,4,1,11,1,0,0,5 -"69",0,0,0,64,2,1,4,1,11,1,1,0,5 -"70",0,1,0,48,1,1,5,1,12,1,1,0,6 -"71",0,1,0,59,3,1,5,0,9,1,1,0,6 -"72",0,1,1,41,3,1,5,1,6,1,1,0,6 -"73",1,1,1,48,2,1,5,1,11,1,0,0,6 -"74",0,1,0,58,1,1,5,1,12,1,1,0,6 -"75",0,1,0,70,1,1,5,0,11,1,1,0,6 -"76",0,0,0,46,1,1,5,0,12,1,1,0,6 -"77",1,1,0,62,2,1,5,0,13,1,1,0,6 -"78",0,1,1,57,2,1,5,0,13,1,1,0,6 -"79",0,1,1,62,2,1,5,1,11,1,1,0,6 -"80",0,1,0,57,1,1,5,1,9,1,0,0,6 -"81",0,1,1,48,3,1,5,1,10,1,1,0,6 -"82",0,1,0,50,2,1,5,1,8,1,1,0,6 -"83",0,0,1,65,1,1,5,1,11,1,1,0,6 -"84",0,1,0,53,1,1,5,1,9,1,1,0,6 -"85",0,1,1,51,2,1,5,0,11,1,1,0,6 -"86",0,1,0,45,3,1,5,1,13,1,1,0,6 -"87",0,1,0,52,2,1,4,1,10,6,0,0,7 -"88",0,0,0,49,3,1,4,1,8,6,0,0,7 -"89",0,1,0,52,1,1,4,1,8,6,0,0,7 -"90",0,1,0,57,1,1,4,1,10,6,1,0,7 -"91",0,1,0,42,2,1,4,1,8,6,1,0,7 -"92",0,1,0,45,2,1,4,0,10,6,0,0,7 -"93",0,1,0,41,1,1,4,1,5,6,0,0,7 -"94",0,1,1,44,3,1,4,0,9,6,0,0,7 -"95",0,0,1,37,3,1,4,1,5,6,0,0,7 -"96",0,1,0,61,2,1,4,0,8,6,0,0,7 -"97",0,1,0,59,1,1,4,1,10,6,1,0,7 -"98",0,1,0,43,2,1,4,1,10,6,0,0,7 -"99",0,1,1,59,1,1,5,0,10,3,1,0,8 -"100",0,1,1,53,1,1,5,1,10,3,1,0,8 -"101",0,1,1,42,1,1,5,1,7,3,0,0,8 -"102",0,1,1,61,2,1,5,1,11,3,1,0,8 -"103",0,1,1,34,1,1,5,1,9,3,0,0,8 -"104",0,1,1,66,3,1,5,0,8,3,0,0,8 -"105",0,1,0,59,1,1,5,1,11,3,1,0,8 -"106",1,1,0,48,1,1,5,0,10,3,0,0,8 -"107",0,1,1,49,2,1,5,1,10,3,0,0,8 -"108",0,1,1,50,2,1,5,0,9,3,0,0,8 -"109",0,1,0,37,2,1,5,0,10,3,0,0,8 -"110",0,0,1,60,3,1,5,1,11,3,0,0,8 -"111",0,1,0,54,1,1,5,0,8,3,1,0,8 -"112",0,1,0,62,2,1,5,0,12,3,1,0,8 -"113",0,1,0,60,2,1,5,0,11,3,1,0,8 -"114",0,1,0,66,1,1,5,0,9,3,0,0,8 -"115",0,1,1,58,2,1,5,0,10,3,0,0,8 -"116",0,1,0,52,1,1,5,1,8,3,0,0,8 -"117",0,1,1,42,1,1,5,1,9,3,0,0,8 -"118",0,1,1,38,2,1,5,0,5,3,0,0,8 -"119",0,1,1,51,5,1,5,0,11,3,1,0,8 -"120",1,1,1,52,3,1,5,0,10,3,0,0,8 -"121",0,1,0,56,1,1,5,1,12,3,1,0,8 -"122",0,0,1,53,1,1,5,0,9,3,0,0,8 -"123",1,0,1,45,3,1,5,1,7,3,1,0,8 -"124",0,0,1,53,4,1,3,1,7,1,0,0,9 -"125",0,1,0,52,1,1,3,0,8,1,0,0,9 -"126",1,1,0,62,2,1,3,1,10,1,0,0,9 -"127",0,1,0,62,3,1,3,1,9,1,0,0,9 -"128",0,1,0,62,3,1,3,0,8,1,0,0,9 -"129",0,0,0,52,1,1,3,0,8,1,0,0,9 -"130",0,1,0,43,5,1,3,1,11,1,1,0,9 -"131",0,1,0,60,2,1,3,0,6,1,0,0,9 -"132",0,1,1,45,3,1,3,0,8,1,0,0,9 -"133",0,1,1,48,2,1,3,1,7,1,0,0,9 -"134",0,1,0,53,1,1,3,1,9,1,0,0,9 -"135",1,1,0,63,2,1,3,0,11,1,1,0,9 -"136",0,1,0,55,2,1,3,1,11,1,0,0,9 -"137",0,1,0,49,2,1,3,1,10,1,1,0,9 -"138",0,1,1,57,1,1,4,1,9,3,0,0,10 -"139",0,1,0,49,2,1,4,1,3,3,0,0,10 -"140",0,1,0,50,1,1,4,0,6,3,0,0,10 -"141",0,1,0,49,1,1,4,1,8,3,1,0,10 -"142",0,0,0,48,2,1,4,0,9,3,0,0,10 -"143",0,1,1,66,3,1,4,1,8,3,0,0,10 -"144",0,1,0,56,2,1,4,0,7,3,1,0,10 -"145",0,1,0,39,2,1,4,1,8,3,0,0,10 -"146",0,1,1,40,1,1,4,0,13,3,1,0,10 -"147",1,1,1,33,1,1,4,1,10,3,0,0,10 -"148",0,1,0,49,2,1,4,1,13,3,1,0,10 -"149",0,1,0,54,2,1,4,0,9,3,0,0,10 -"150",0,1,1,43,2,1,4,1,8,3,0,0,10 -"151",0,0,0,57,1,1,4,1,3,3,0,0,10 -"152",0,1,1,53,3,1,4,0,9,3,1,0,10 -"153",0,0,0,59,3,1,4,0,10,3,0,0,10 -"154",0,1,1,42,4,1,4,0,8,3,0,0,10 -"155",0,1,0,49,2,1,4,1,9,3,0,0,10 -"156",1,1,0,47,2,1,4,1,10,3,0,0,10 -"157",0,1,0,65,3,1,4,1,9,2,1,0,11 -"158",0,1,0,72,1,1,4,1,10,2,1,0,11 -"159",0,1,1,50,5,1,4,1,11,2,0,0,11 -"160",0,1,0,59,1,1,4,0,9,2,0,0,11 -"161",1,1,1,62,2,1,4,0,5,2,0,0,11 -"162",0,1,1,40,1,1,4,1,4,2,1,0,11 -"163",0,0,1,57,5,1,4,0,10,2,0,0,11 -"164",0,1,1,55,2,1,4,1,10,2,0,0,11 -"165",0,1,0,65,1,1,4,1,11,2,0,0,11 -"166",0,1,0,47,3,1,4,0,3,2,1,0,11 -"167",0,0,1,46,1,1,4,1,9,2,0,0,11 -"168",0,1,0,72,1,1,4,0,12,2,1,0,11 -"169",0,1,1,50,3,1,4,1,9,2,0,0,11 -"170",0,1,1,49,1,1,4,1,11,2,0,0,11 -"171",0,1,0,60,1,1,4,0,10,2,1,0,11 -"172",0,0,1,48,3,1,4,1,7,2,1,0,11 -"173",0,1,1,47,3,1,4,1,11,2,0,0,11 -"174",1,1,1,66,2,1,3,0,8,3,1,0,12 -"175",0,0,1,43,2,1,3,0,9,3,0,0,12 -"176",0,1,1,65,2,1,3,1,12,3,1,0,12 -"177",1,1,0,63,2,1,3,1,11,3,1,0,12 -"178",0,1,0,58,1,1,3,1,10,3,0,0,12 -"179",0,1,0,51,3,1,3,1,8,3,0,0,12 -"180",0,1,0,47,3,1,3,1,9,3,0,0,12 -"181",0,1,1,52,2,1,3,1,9,3,0,0,12 -"182",0,1,1,56,5,1,3,1,10,3,0,0,12 -"183",1,1,0,50,2,1,3,0,2,3,0,0,12 -"184",0,1,0,43,1,1,3,1,11,3,1,0,12 -"185",0,1,1,64,2,1,3,1,11,3,0,0,12 -"186",0,1,1,48,1,1,3,1,10,3,0,0,12 -"187",0,1,1,57,1,1,3,0,11,3,1,0,12 -"188",0,1,1,62,1,1,3,0,11,3,1,0,12 -"189",0,1,0,48,3,1,3,0,9,3,0,0,12 -"190",0,1,0,52,2,1,4,0,9,1,1,0,13 -"191",1,1,1,51,5,1,4,1,11,1,0,0,13 -"192",0,1,1,38,2,1,4,1,13,1,1,0,13 -"193",0,1,0,39,5,1,4,0,12,1,0,0,13 -"194",0,1,1,34,1,1,4,0,9,1,0,0,13 -"195",0,1,1,32,2,1,4,0,9,1,0,0,13 -"196",0,1,0,56,1,0,5,0,9,3,0,1,14 -"197",0,1,0,62,3,0,5,0,12,3,1,1,14 -"198",0,1,1,45,1,0,5,0,10,3,0,1,14 -"199",1,1,0,47,1,0,5,1,10,3,1,1,14 -"200",1,1,0,46,2,0,5,1,10,3,1,1,14 -"201",0,1,0,49,1,0,5,0,12,3,1,1,14 -"202",0,1,0,60,1,0,5,0,11,3,0,1,14 -"203",0,1,1,54,2,0,5,0,8,3,1,1,14 -"204",1,0,1,62,5,0,5,0,12,3,1,1,14 -"205",1,1,0,40,2,0,5,0,9,3,0,1,14 -"206",0,1,0,50,2,0,5,0,8,3,0,1,14 -"207",0,0,0,63,1,0,5,0,10,3,0,1,14 -"208",0,1,0,63,2,0,5,0,10,3,1,1,14 -"209",0,1,0,66,1,0,5,0,12,3,1,1,14 -"210",0,1,0,58,2,0,5,0,13,3,1,1,14 -"211",0,1,0,51,1,0,5,0,8,3,0,1,14 -"212",0,1,0,55,2,0,5,0,12,3,1,1,14 -"213",0,1,0,53,1,0,5,0,9,3,0,1,14 -"214",1,0,0,52,2,0,5,0,9,3,0,1,14 -"215",0,1,0,49,2,0,5,0,12,3,0,1,14 -"216",0,1,0,58,2,0,5,0,12,3,0,1,14 -"217",0,1,0,54,2,0,5,0,9,3,0,1,14 -"218",0,1,0,40,1,0,5,0,3,3,1,1,14 -"219",1,1,0,47,2,0,5,0,4,3,1,1,14 -"220",0,1,1,61,1,1,5,1,10,2,1,0,15 -"221",0,1,0,57,1,1,5,1,10,2,0,0,15 -"222",0,1,0,67,3,1,5,0,11,2,1,0,15 -"223",0,1,0,64,1,1,5,0,11,2,1,0,15 -"224",0,1,0,42,2,1,5,1,7,2,1,0,15 -"225",0,1,0,63,3,1,5,1,10,2,0,0,15 -"226",1,1,1,46,2,1,5,0,9,2,0,0,15 -"227",0,1,0,44,2,1,5,1,8,2,0,0,15 -"228",0,1,1,42,4,1,5,1,10,2,0,0,15 -"229",0,1,1,49,3,1,5,0,9,2,0,0,15 -"230",0,1,1,46,2,1,5,0,11,2,0,0,15 -"231",0,1,1,61,2,1,5,1,10,2,0,0,15 -"232",0,1,0,43,2,1,4,0,10,7,0,0,16 -"233",0,1,0,38,2,1,4,0,10,7,0,0,16 -"234",0,1,1,48,3,1,4,0,8,7,0,0,16 -"235",0,1,0,40,3,1,4,0,12,7,1,0,16 -"236",0,1,0,36,3,1,4,1,7,7,1,0,16 -"237",0,1,0,45,3,1,4,0,6,7,0,0,16 -"238",1,1,1,47,3,1,4,0,7,7,0,0,16 -"239",0,1,1,42,3,1,4,1,7,7,0,0,16 -"240",0,1,1,38,2,1,4,1,4,7,0,0,16 -"241",1,1,0,43,3,1,4,1,5,7,0,0,16 -"242",0,1,0,51,3,1,4,0,8,7,0,0,16 -"243",1,1,0,41,3,1,4,0,6,7,0,0,16 -"244",1,1,0,46,2,1,4,1,7,7,0,0,16 -"245",1,1,1,34,5,1,4,0,5,7,0,0,16 -"246",1,1,0,45,2,1,4,1,10,7,0,0,16 -"247",0,1,0,49,3,1,5,1,11,1,0,0,17 -"248",1,0,0,61,2,1,5,0,9,1,1,0,17 -"249",0,1,0,60,1,1,5,0,9,1,0,0,17 -"250",0,1,0,60,2,1,5,0,8,1,1,0,17 -"251",0,1,0,54,2,1,5,0,8,1,0,0,17 -"252",0,1,1,48,1,1,5,0,9,1,1,0,17 -"253",0,1,0,48,1,1,5,0,6,1,0,0,17 -"254",0,1,0,55,2,1,5,1,8,1,0,0,17 -"255",0,1,0,59,1,1,5,1,10,1,1,0,17 -"256",0,0,1,53,2,1,5,1,13,1,1,0,17 -"257",0,1,0,56,1,1,5,1,11,1,1,0,17 -"258",0,1,0,68,1,1,5,0,13,1,1,0,17 -"259",0,1,0,56,3,1,5,0,12,1,1,0,17 -"260",0,1,0,63,3,1,5,1,9,1,0,0,17 -"261",0,1,0,55,2,1,5,0,13,1,1,0,17 -"262",0,1,1,70,2,1,5,1,10,1,1,0,17 -"263",0,1,0,59,3,1,5,0,13,1,1,0,17 -"264",0,1,0,45,1,1,5,0,13,1,1,0,17 -"265",0,1,0,66,2,1,5,1,8,1,0,0,17 -"266",0,1,0,51,2,1,5,0,13,1,1,0,17 -"267",0,1,0,64,2,1,5,1,13,1,1,0,17 -"268",0,1,0,47,5,1,3,1,11,3,0,0,18 -"269",0,1,1,60,5,1,3,1,10,3,0,0,18 -"270",0,1,0,64,3,1,3,1,11,3,1,0,18 -"271",0,1,0,59,3,1,3,0,11,3,1,0,18 -"272",0,1,0,65,3,1,3,1,10,3,0,0,18 -"273",1,0,0,61,2,1,3,0,11,3,0,0,18 -"274",0,1,0,55,2,1,3,0,12,3,1,0,18 -"275",0,1,1,44,4,1,3,0,10,3,0,0,18 -"276",0,0,1,64,5,1,3,0,11,3,1,0,18 -"277",0,1,0,47,1,1,3,0,8,3,1,0,18 -"278",0,1,1,56,1,1,3,1,10,3,0,0,18 -"279",0,1,0,45,1,1,3,0,10,3,1,0,18 -"280",0,1,0,35,5,1,3,1,7,3,0,0,18 -"281",0,1,0,74,3,1,3,1,7,3,1,0,18 -"282",0,1,0,36,2,1,3,1,8,3,0,0,18 -"283",0,1,0,60,2,1,3,0,9,3,1,0,18 -"284",0,1,1,56,2,1,3,1,9,3,0,0,18 -"285",0,1,0,56,2,1,3,1,8,3,0,0,18 -"286",0,1,0,62,2,1,3,1,9,3,1,0,18 -"287",0,1,0,47,4,1,4,0,9,5,1,0,19 -"288",1,1,0,57,1,1,4,0,2,5,0,0,19 -"289",0,0,0,39,1,1,4,0,10,5,0,0,19 -"290",0,1,0,37,5,1,4,1,3,5,0,0,19 -"291",0,1,0,51,3,1,4,1,10,5,0,0,19 -"292",1,1,0,52,3,1,4,0,10,5,0,0,19 -"293",0,1,0,51,1,1,4,1,4,5,0,0,19 -"294",0,1,0,64,3,1,4,1,10,5,0,0,19 -"295",0,1,0,46,2,1,4,1,10,5,0,0,19 -"296",0,1,0,59,1,1,4,1,9,5,0,0,19 -"297",0,1,0,60,1,1,4,1,10,5,1,0,19 -"298",0,1,0,46,2,1,4,1,8,5,1,0,19 -"299",0,1,0,60,1,1,4,1,9,5,0,0,19 -"300",0,1,0,58,3,1,4,1,11,3,1,0,20 -"301",0,1,0,59,2,1,4,0,11,3,1,0,20 -"302",0,1,0,59,2,1,4,0,5,3,0,0,20 -"303",0,1,0,46,2,1,4,0,8,3,0,0,20 -"304",0,1,0,59,3,1,4,0,9,3,1,0,20 -"305",1,0,1,34,3,1,4,0,2,3,0,0,20 -"306",0,1,0,62,3,1,4,1,10,3,1,0,20 -"307",0,1,1,52,3,1,4,1,2,3,0,0,20 -"308",0,1,1,36,2,1,4,0,9,3,0,0,20 -"309",0,1,1,56,2,1,4,1,9,3,0,0,20 -"310",0,1,1,68,2,1,4,1,11,3,1,0,20 -"311",0,1,1,41,5,1,5,1,6,1,0,1,21 -"312",0,1,1,46,1,1,5,0,11,1,1,1,21 -"313",0,1,1,59,2,1,5,0,12,1,1,1,21 -"314",0,1,0,60,2,1,5,0,10,1,1,1,21 -"315",0,1,1,56,1,1,5,0,11,1,1,1,21 -"316",0,1,1,57,1,1,5,0,12,1,1,1,21 -"317",0,1,1,59,2,1,5,1,11,1,1,1,21 -"318",0,1,0,62,2,1,5,0,8,1,1,1,21 -"319",0,1,1,52,1,1,5,1,9,1,0,1,21 -"320",0,1,1,65,2,1,5,1,10,1,1,1,21 -"321",0,1,1,44,1,1,5,1,10,1,1,1,21 -"322",0,1,1,59,1,1,5,1,9,1,0,1,21 -"323",0,1,0,66,3,1,5,1,11,1,1,1,21 -"324",0,1,1,46,2,1,5,0,8,1,0,1,21 -"325",0,1,1,50,2,1,5,0,9,1,0,1,21 -"326",0,1,0,51,2,1,5,0,10,1,0,1,21 -"327",0,1,0,59,2,1,5,1,9,1,0,1,21 -"328",0,1,1,62,2,1,5,1,12,1,1,1,21 -"329",1,1,1,52,2,1,5,1,11,1,0,1,21 -"330",0,0,1,37,5,1,5,1,9,1,0,1,21 -"331",0,1,1,64,1,1,5,1,9,1,0,1,21 -"332",0,1,1,66,3,1,5,1,10,1,1,1,21 -"333",0,1,0,57,2,1,5,0,11,1,0,1,21 -"334",0,1,1,58,1,1,5,1,11,1,0,1,21 -"335",0,1,0,50,2,1,5,1,10,1,0,1,21 -"336",0,1,0,55,2,1,5,1,9,4,0,0,22 -"337",0,1,0,57,2,1,5,0,11,4,0,0,22 -"338",0,1,0,52,1,1,5,0,9,4,1,0,22 -"339",0,0,0,61,2,1,5,0,7,4,0,0,22 -"340",1,1,0,45,1,1,5,0,11,4,0,0,22 -"341",0,1,0,65,2,1,5,0,11,4,1,0,22 -"342",0,1,0,30,2,1,5,1,10,4,0,0,22 -"343",1,1,0,57,1,1,5,0,6,4,0,0,22 -"344",0,1,0,66,1,1,5,0,12,4,0,0,22 -"345",0,1,0,60,3,1,5,0,8,4,0,0,22 -"346",0,1,0,43,2,1,5,1,10,4,0,0,22 -"347",0,1,0,53,1,1,5,0,10,4,0,0,22 -"348",0,1,0,44,2,0,4,1,10,3,0,1,23 -"349",0,1,1,55,1,0,4,1,12,3,0,1,23 -"350",1,1,0,45,2,0,4,0,6,3,0,1,23 -"351",0,1,0,43,3,0,4,0,12,3,1,1,23 -"352",0,1,1,52,2,0,4,1,10,3,0,1,23 -"353",0,1,1,52,2,0,4,0,11,3,0,1,23 -"354",0,1,1,51,2,0,4,1,8,3,0,1,23 -"355",0,1,1,58,2,0,4,1,10,3,0,1,23 -"356",0,1,0,37,5,0,4,1,10,3,0,1,23 -"357",0,1,0,59,1,0,4,1,5,3,0,1,23 -"358",0,1,1,57,1,0,4,1,14,3,1,1,23 -"359",0,1,0,51,2,0,4,1,8,3,1,1,23 -"360",0,1,1,57,1,0,4,1,10,3,0,1,23 -"361",0,1,1,64,3,0,4,1,10,3,1,1,23 -"362",0,1,0,43,1,0,4,1,10,3,0,1,23 -"363",0,1,0,44,2,0,4,1,7,3,0,1,23 -"364",0,1,1,56,2,0,4,1,9,3,0,1,23 -"365",0,1,0,50,3,1,4,1,1,1,0,0,24 -"366",0,1,1,58,2,1,4,1,8,1,1,0,24 -"367",0,1,0,53,1,1,4,1,6,1,0,0,24 -"368",0,1,0,47,3,1,4,1,7,1,0,0,24 -"369",0,1,0,50,1,1,4,0,8,1,1,0,24 -"370",0,1,0,44,1,1,4,1,8,1,0,0,24 -"371",0,1,1,54,1,1,4,0,8,1,0,0,24 -"372",0,1,1,42,1,1,4,1,7,1,1,0,24 -"373",0,1,1,55,3,1,4,0,10,1,1,0,24 -"374",0,1,1,51,3,1,4,1,9,1,1,0,24 -"375",0,1,0,67,2,1,4,1,10,1,1,0,24 -"376",0,1,1,48,3,1,4,1,11,1,1,0,24 -"377",0,1,0,42,2,1,4,1,8,1,0,0,24 -"378",0,1,1,52,4,1,4,0,8,1,0,0,24 -"379",0,1,0,50,2,1,4,1,8,1,1,0,24 -"380",0,1,1,40,2,1,4,1,12,1,0,0,24 -"381",0,0,0,56,2,1,4,1,9,1,0,0,24 -"382",0,1,1,48,3,1,4,0,11,1,0,0,24 -"383",0,1,0,49,2,1,4,1,13,1,1,0,24 -"384",0,1,0,49,5,1,4,1,7,1,0,0,24 -"385",0,1,1,35,2,1,4,1,6,1,0,0,24 -"386",0,1,1,50,3,1,4,0,7,1,0,0,24 -"387",0,1,0,42,1,1,4,1,10,1,0,0,24 -"388",0,1,1,60,2,1,4,1,10,1,1,0,24 -"389",0,1,1,63,4,1,4,1,8,1,0,0,24 -"390",0,1,0,53,2,1,4,1,9,1,1,0,24 -"391",0,1,0,64,2,1,4,1,10,1,1,0,24 -"392",0,1,0,51,1,1,4,0,11,1,1,0,24 -"393",0,1,0,45,3,1,4,0,8,1,0,0,24 -"394",0,1,1,55,2,1,4,0,3,1,1,0,24 -"395",0,1,0,56,3,1,4,1,8,1,0,0,24 -"396",0,1,0,57,2,1,4,1,5,1,0,0,24 -"397",0,1,0,58,2,1,4,0,8,1,1,0,24 -"398",1,1,0,58,4,1,4,0,10,1,1,0,24 -"399",0,1,1,67,1,1,4,1,9,1,0,0,24 -"400",1,1,1,50,1,1,4,0,8,1,0,0,24 -"401",0,1,0,51,1,1,4,0,10,1,0,0,24 -"402",0,0,1,46,3,1,4,0,9,1,0,0,24 -"403",0,1,0,57,2,1,4,0,10,1,1,0,24 -"404",0,1,0,55,2,1,4,1,5,1,1,0,24 -"405",1,1,1,53,3,1,4,0,9,1,1,0,24 -"406",0,1,1,61,2,1,4,0,13,1,1,0,24 -"407",0,1,0,49,2,1,4,1,8,3,0,0,25 -"408",0,1,0,43,5,1,4,0,7,3,0,0,25 -"409",0,1,0,44,2,1,4,1,7,3,0,0,25 -"410",1,0,1,45,2,1,4,0,9,3,0,0,25 -"411",1,0,1,36,3,1,4,0,10,3,1,0,25 -"412",0,0,1,56,4,1,4,0,9,3,0,0,25 -"413",0,1,0,69,2,1,4,0,10,3,1,0,25 -"414",0,1,0,75,2,1,4,0,10,3,0,0,25 -"415",0,1,0,51,2,1,4,0,9,3,0,0,25 -"416",0,1,1,50,2,1,4,1,8,3,0,0,25 -"417",1,1,0,51,3,1,4,0,12,3,1,0,25 -"418",0,1,1,60,2,1,4,0,9,3,0,0,25 -"419",0,0,0,50,1,1,4,1,9,3,0,0,25 -"420",0,1,0,28,5,1,4,1,11,3,0,0,25 -"421",1,1,1,44,5,1,4,0,10,3,0,0,25 -"422",0,1,1,45,2,1,4,1,9,3,0,0,25 -"423",0,1,0,53,1,1,4,1,9,3,0,0,25 -"424",0,1,1,52,2,1,4,1,8,3,0,0,25 -"425",1,1,1,62,1,1,4,1,10,3,1,0,25 -"426",0,1,0,37,2,1,4,1,11,3,1,0,25 -"427",0,0,0,51,2,1,4,0,8,3,0,0,25 -"428",0,0,1,60,3,1,4,0,10,3,0,0,25 -"429",1,0,1,42,4,1,4,0,9,3,0,0,25 -"430",0,1,1,56,4,1,4,1,15,3,1,0,25 -"431",0,1,1,63,2,1,5,1,12,1,1,0,26 -"432",0,1,1,44,1,1,5,1,14,1,1,0,26 -"433",0,1,0,55,2,1,5,0,9,1,1,0,26 -"434",0,1,1,57,4,1,5,1,8,1,0,0,26 -"435",0,1,1,59,1,1,5,0,8,1,1,0,26 -"436",0,1,1,52,1,1,5,0,10,1,1,0,26 -"437",0,1,1,51,2,1,5,0,12,1,1,0,26 -"438",0,0,0,52,2,1,5,1,11,1,0,0,26 -"439",0,1,1,53,3,1,5,0,11,1,0,0,26 -"440",0,1,0,50,3,1,5,1,9,1,1,0,26 -"441",0,1,1,55,3,1,5,0,10,1,1,0,26 -"442",0,1,1,68,2,1,5,1,10,1,1,0,26 -"443",1,1,1,53,4,1,5,0,8,1,0,0,26 -"444",0,1,1,55,1,1,5,1,11,1,1,0,26 -"445",0,1,1,48,1,1,5,1,9,1,1,0,27 -"446",0,1,0,58,2,1,5,1,13,1,0,0,27 -"447",0,1,0,67,2,1,5,1,12,1,0,0,27 -"448",0,1,0,60,3,1,5,1,11,1,1,0,27 -"449",0,1,1,73,1,1,5,0,9,1,1,0,27 -"450",0,1,1,61,1,1,5,0,10,1,1,0,27 -"451",0,0,1,48,3,1,5,0,12,1,1,0,27 -"452",0,1,1,54,2,1,5,0,10,1,0,0,27 -"453",0,1,1,66,1,1,5,0,12,1,1,0,27 -"454",0,1,1,57,1,1,5,1,12,1,0,0,27 -"455",1,1,0,50,2,1,5,1,10,1,0,0,27 -"456",0,1,0,61,2,1,5,0,10,1,1,0,27 -"457",0,1,1,65,1,1,5,0,11,1,1,0,27 -"458",0,1,0,53,2,1,5,1,9,1,1,0,27 -"459",0,1,0,58,3,1,5,0,11,1,1,0,27 -"460",0,1,1,52,3,1,5,0,6,1,0,0,27 -"461",0,1,1,64,1,1,5,0,9,1,1,0,27 -"462",0,1,1,50,2,1,5,1,8,1,0,0,27 -"463",0,1,1,67,5,1,5,0,11,1,1,0,27 -"464",0,1,1,44,1,1,5,0,10,1,0,0,27 -"465",0,1,0,45,1,1,4,1,10,5,0,0,28 -"466",0,1,1,61,2,1,4,0,10,5,1,0,28 -"467",0,1,0,48,2,1,4,0,10,5,0,0,28 -"468",0,0,1,46,1,1,4,1,10,5,0,0,28 -"469",1,1,0,34,3,1,4,0,8,5,0,0,28 -"470",0,0,1,44,5,1,4,1,8,5,1,0,28 -"471",0,1,1,49,3,1,4,1,9,5,1,0,28 -"472",0,1,0,40,5,1,4,0,9,5,0,0,28 -"473",0,1,1,54,5,1,4,1,11,5,1,0,28 -"474",0,1,1,52,2,1,4,0,10,5,0,0,28 -"475",0,1,0,61,2,1,4,0,9,5,1,0,28 -"476",1,1,1,35,2,1,4,1,6,5,0,0,28 -"477",0,1,0,40,4,1,4,0,3,5,0,0,28 -"478",0,1,0,43,1,1,4,1,9,5,1,0,28 -"479",0,1,0,40,4,1,4,1,8,5,1,0,28 -"480",0,1,0,51,2,1,4,0,8,5,1,0,28 -"481",1,1,1,53,3,1,4,0,9,4,0,0,29 -"482",0,1,0,45,1,1,4,1,10,4,0,0,29 -"483",0,1,0,41,2,1,4,1,5,4,0,0,29 -"484",1,0,0,50,3,1,4,0,10,4,0,0,29 -"485",0,1,0,50,2,1,4,1,10,4,1,0,29 -"486",0,1,0,45,2,1,4,0,10,4,1,0,29 -"487",0,1,0,46,2,1,4,1,9,4,0,0,29 -"488",1,1,0,43,3,1,4,0,3,4,0,0,29 -"489",0,1,1,60,3,1,4,1,10,4,0,0,29 -"490",0,1,0,57,2,1,4,1,11,4,1,0,29 -"491",1,1,0,43,2,1,4,1,6,4,0,0,29 -"492",0,1,1,36,1,1,4,0,11,4,0,0,29 -"493",1,1,0,49,2,1,4,0,9,4,0,0,29 -"494",0,1,1,43,2,1,4,0,8,4,0,0,29 -"495",0,1,0,53,2,1,5,1,9,1,0,1,30 -"496",0,1,0,67,1,1,5,0,12,1,1,1,30 -"497",0,1,1,59,3,1,5,0,12,1,0,1,30 -"498",0,1,0,67,2,1,5,0,13,1,0,1,30 -"499",0,1,0,47,2,1,5,1,9,1,1,1,30 -"500",0,1,0,62,1,1,5,0,12,1,1,1,30 -"501",0,1,0,51,2,1,5,1,9,1,1,1,30 -"502",0,1,1,59,2,1,5,1,11,1,1,1,30 -"503",0,1,0,35,2,1,5,1,12,1,1,1,30 -"504",0,1,0,48,3,1,5,1,11,1,1,1,30 -"505",0,1,1,58,2,1,5,1,10,1,0,1,30 -"506",0,1,0,61,1,1,5,1,12,1,1,1,30 -"507",0,1,0,59,3,1,5,1,12,1,1,1,30 -"508",0,1,0,68,1,1,5,0,13,1,1,1,30 -"509",0,1,0,62,2,1,5,0,10,1,1,1,30 -"510",0,1,0,47,1,1,5,1,9,1,1,1,30 -"511",0,1,1,50,1,1,5,1,12,1,1,1,30 -"512",0,1,1,56,1,1,5,1,12,1,1,1,30 -"513",0,1,0,63,1,1,5,0,11,1,1,1,30 -"514",0,1,0,44,3,1,5,1,12,1,0,1,30 -"515",1,1,1,56,1,1,5,0,10,1,1,1,30 -"516",0,1,0,47,3,1,5,1,10,1,0,1,30 -"517",0,1,1,50,2,1,5,0,13,1,1,1,30 -"518",0,0,0,37,3,1,4,1,7,6,0,0,31 -"519",0,1,0,38,2,1,4,1,10,6,0,0,31 -"520",1,1,0,46,2,1,4,0,8,6,0,0,31 -"521",1,0,1,50,3,1,4,0,10,6,0,0,31 -"522",0,1,1,40,3,1,4,1,6,6,0,0,31 -"523",0,1,0,52,3,1,4,1,8,6,0,0,31 -"524",0,0,1,37,1,1,4,0,9,6,0,0,31 -"525",0,1,0,41,4,1,4,0,7,6,0,0,31 -"526",0,1,1,34,3,1,4,0,8,6,0,0,31 -"527",0,1,1,54,3,1,4,0,7,6,1,0,31 -"528",0,1,0,44,3,1,4,1,7,6,1,0,31 -"529",0,1,0,42,2,1,4,1,7,6,0,0,31 -"530",0,1,0,52,3,1,4,0,8,6,0,0,31 -"531",0,1,1,46,3,1,4,0,8,6,0,0,31 -"532",0,1,1,38,2,1,4,1,9,6,1,0,31 -"533",0,0,0,67,2,1,4,1,5,1,1,0,32 -"534",0,1,0,66,2,1,4,0,10,1,1,0,32 -"535",0,1,0,58,1,1,4,1,9,1,1,0,32 -"536",0,1,1,68,2,1,4,0,13,1,1,0,32 -"537",0,1,0,55,1,1,4,0,12,1,1,0,32 -"538",0,1,1,51,3,1,4,0,10,1,1,0,32 -"539",0,0,0,73,1,1,4,0,13,1,0,0,32 -"540",0,1,0,63,2,1,4,1,12,1,1,0,32 -"541",0,1,1,72,2,1,4,1,11,1,1,0,32 -"542",0,1,0,58,3,1,4,1,11,1,1,0,32 -"543",0,1,1,60,1,1,4,1,9,1,1,0,32 -"544",0,1,0,70,2,1,4,0,12,1,1,0,32 -"545",0,1,1,72,1,1,4,0,13,1,1,0,32 -"546",0,1,1,58,1,1,4,1,9,1,0,0,32 -"547",0,1,0,48,1,1,4,0,10,1,1,0,32 -"548",0,1,0,54,2,1,4,1,13,1,1,0,32 -"549",0,1,0,58,1,1,4,0,9,1,1,0,32 -"550",0,1,0,58,2,1,4,0,13,1,1,0,32 -"551",0,1,0,46,1,1,4,0,6,1,0,0,32 -"552",0,1,1,51,2,1,4,1,10,1,0,0,32 -"553",0,1,0,57,2,1,4,0,13,1,0,0,32 -"554",0,1,0,50,3,1,4,0,12,1,1,0,32 -"555",0,1,0,62,3,1,4,0,13,1,1,0,32 -"556",0,1,0,59,2,1,4,1,12,1,1,0,32 -"557",0,1,0,56,3,1,4,1,6,1,1,0,32 -"558",0,1,0,62,3,1,4,0,11,1,1,0,32 -"559",0,1,0,46,2,1,3,1,11,5,0,0,33 -"560",0,1,0,49,4,1,3,0,9,5,0,0,33 -"561",0,1,1,43,1,1,3,1,10,5,0,0,33 -"562",1,1,1,46,3,1,3,0,7,5,0,0,33 -"563",0,1,0,46,4,1,3,0,8,5,0,0,33 -"564",0,1,0,51,2,1,3,0,7,5,0,0,33 -"565",1,1,1,42,2,1,3,0,9,5,1,0,33 -"566",0,0,0,48,2,1,3,0,10,5,0,0,33 -"567",0,1,1,47,1,1,3,0,10,5,0,0,33 -"568",0,1,1,36,2,1,3,0,11,5,0,0,33 -"569",1,1,1,38,1,1,3,1,7,5,0,0,33 -"570",0,1,1,30,2,1,3,1,7,5,0,0,33 -"571",1,1,1,53,3,1,3,0,9,5,0,0,33 -"572",0,1,0,54,1,1,3,0,7,5,0,0,33 -"573",0,1,0,37,1,1,3,0,10,5,0,0,33 -"574",0,1,0,54,1,1,3,0,10,5,0,0,33 -"575",0,1,0,36,1,1,2,0,7,6,1,0,34 -"576",0,1,0,38,1,1,2,0,6,6,0,0,34 -"577",0,1,0,50,2,1,2,1,8,6,0,0,34 -"578",0,1,0,62,3,1,2,1,10,6,0,0,34 -"579",0,1,0,32,4,1,2,1,5,6,0,0,34 -"580",0,1,0,36,3,1,2,1,5,6,1,0,34 -"581",0,1,0,49,3,1,2,1,4,6,1,0,34 -"582",1,1,1,29,3,1,2,1,9,6,1,0,34 -"583",0,1,0,38,3,1,2,1,4,6,0,0,34 -"584",0,1,0,48,1,1,3,1,7,4,0,0,35 -"585",0,1,0,48,1,1,3,1,11,4,1,0,35 -"586",0,1,0,51,2,1,3,1,7,4,0,0,35 -"587",1,1,1,40,2,1,3,0,8,4,0,0,35 -"588",0,1,1,69,2,1,3,0,12,4,0,0,35 -"589",0,1,1,49,1,1,3,1,5,4,0,0,35 -"590",0,1,0,56,1,1,3,1,11,4,0,0,35 -"591",0,1,1,45,2,1,3,0,12,4,1,0,35 -"592",0,0,1,45,2,1,3,1,10,4,0,0,35 -"593",0,1,0,47,2,1,3,1,7,4,1,0,35 -"594",0,1,0,47,5,1,3,1,8,4,0,0,35 -"595",0,1,0,54,2,1,3,0,12,4,1,0,35 -"596",0,1,1,44,3,1,3,0,9,4,0,0,35 -"597",0,1,0,52,2,1,3,1,9,4,1,0,35 -"598",0,1,1,52,3,1,3,1,10,4,0,0,35 -"599",0,1,0,52,1,1,3,1,10,4,0,0,35 -"600",0,1,0,44,2,1,3,1,9,4,0,0,35 -"601",0,1,1,49,4,1,3,1,11,4,0,0,35 -"602",0,1,0,61,1,1,3,1,11,4,0,0,35 -"603",0,1,0,60,3,1,4,0,5,1,1,0,36 -"604",0,1,0,48,1,1,4,1,10,1,0,0,36 -"605",0,1,1,53,1,1,4,0,8,1,0,0,36 -"606",0,1,1,36,2,1,4,1,9,1,0,0,36 -"607",0,1,0,45,1,1,4,1,4,1,0,0,36 -"608",0,1,1,58,2,1,4,0,8,1,0,0,36 -"609",0,1,0,31,1,1,4,0,11,1,0,0,36 -"610",0,1,0,39,3,1,4,1,9,1,1,0,36 -"611",0,1,0,61,3,1,4,1,11,1,0,0,36 -"612",0,1,1,61,2,1,4,0,8,1,1,0,36 -"613",0,1,0,49,2,0,5,1,11,1,1,1,37 -"614",0,0,1,48,5,0,5,1,9,1,0,1,37 -"615",0,1,1,60,2,0,5,1,12,1,0,1,37 -"616",0,1,1,55,1,0,5,1,9,1,1,1,37 -"617",0,1,1,52,2,0,5,1,10,1,0,1,37 -"618",0,1,1,67,1,0,5,1,13,1,1,1,37 -"619",0,1,1,65,2,0,5,1,12,1,1,1,37 -"620",0,1,1,52,2,0,5,1,9,1,0,1,37 -"621",0,1,0,62,2,0,5,1,10,1,1,1,37 -"622",0,0,0,61,2,0,5,1,8,1,1,1,37 -"623",0,1,0,64,1,0,5,1,8,1,1,1,37 -"624",0,1,0,46,1,0,5,1,11,1,1,1,37 -"625",0,1,0,53,1,0,5,1,10,1,0,1,37 -"626",0,1,1,63,1,0,5,1,11,1,1,1,37 -"627",0,1,0,59,2,0,5,1,11,1,0,1,37 -"628",0,1,1,54,1,0,5,1,10,1,1,1,37 -"629",0,1,0,66,2,0,5,1,12,1,1,1,37 -"630",0,1,0,44,1,0,5,1,12,1,1,1,37 -"631",0,1,0,41,2,1,4,1,8,4,1,0,38 -"632",0,1,0,48,1,1,4,1,7,4,1,0,38 -"633",0,1,0,50,1,1,4,0,8,4,0,0,38 -"634",0,1,1,54,1,1,4,1,7,4,0,0,38 -"635",0,1,0,59,2,1,4,1,8,4,0,0,38 -"636",0,1,0,54,3,1,4,1,5,4,1,0,38 -"637",0,1,1,57,2,1,4,0,9,4,0,0,38 -"638",0,1,0,52,1,1,4,1,10,4,1,0,38 -"639",0,1,0,49,2,1,4,1,9,4,0,0,38 -"640",0,1,0,58,3,1,4,1,11,4,0,0,38 -"641",0,1,0,49,1,1,4,1,9,4,0,0,38 -"642",1,1,0,51,3,1,4,0,8,4,0,0,38 -"643",0,1,1,56,5,1,4,0,8,4,0,0,38 -"644",0,1,1,44,1,1,4,1,8,4,0,0,38 -"645",0,1,0,57,1,1,4,1,6,4,1,0,38 -"646",0,1,1,33,2,1,4,0,5,4,1,0,38 -"647",1,1,0,39,3,1,4,1,9,4,0,0,38 -"648",0,1,0,55,1,1,4,0,10,4,1,0,38 -"649",1,1,1,42,3,1,4,1,7,4,0,0,38 -"650",0,1,0,30,1,1,4,1,5,4,0,0,38 -"651",0,1,0,62,3,1,4,1,12,1,1,0,39 -"652",0,1,1,60,3,1,4,1,13,1,1,0,39 -"653",0,1,1,54,1,1,4,0,9,1,0,0,39 -"654",0,1,0,69,2,1,4,0,13,1,0,0,39 -"655",0,1,0,62,1,1,4,1,13,1,1,0,39 -"656",0,1,1,63,1,1,4,0,13,1,1,0,39 -"657",0,1,1,57,1,1,4,1,13,1,1,0,39 -"658",0,1,1,56,2,1,4,1,12,1,1,0,39 -"659",0,1,1,68,2,1,4,1,13,1,1,0,39 -"660",0,1,0,48,3,1,4,1,12,1,1,0,39 -"661",0,1,0,67,2,1,4,1,13,1,1,0,39 -"662",0,1,0,53,2,1,4,0,10,1,1,0,39 -"663",0,1,0,59,1,1,4,0,13,1,1,0,39 -"664",0,1,0,50,3,1,4,0,9,1,0,0,39 -"665",0,0,1,50,1,1,4,1,12,1,0,0,39 -"666",0,1,1,67,1,1,4,1,9,1,1,0,39 -"667",0,1,1,65,3,1,4,1,8,1,1,0,39 -"668",0,1,0,59,3,1,4,1,11,1,1,0,39 -"669",1,0,0,45,4,1,5,0,12,1,1,1,40 -"670",0,1,0,56,1,1,5,0,13,1,1,1,40 -"671",0,1,1,67,2,1,5,1,12,1,1,1,40 -"672",0,1,0,44,2,1,5,0,11,1,1,1,40 -"673",0,1,0,55,2,1,5,0,10,1,0,1,40 -"674",1,0,1,54,2,1,5,0,11,1,0,1,40 -"675",0,1,1,49,4,1,5,1,11,1,0,1,40 -"676",0,1,1,50,2,1,5,0,12,1,1,1,40 -"677",0,1,1,52,1,1,5,1,10,1,0,1,40 -"678",0,1,0,60,1,1,5,1,11,1,1,1,40 -"679",0,1,1,60,2,1,5,0,12,1,1,1,40 -"680",0,1,1,63,1,1,5,1,11,1,1,1,40 -"681",1,1,0,35,2,1,5,1,12,1,1,1,40 -"682",0,1,0,67,1,1,5,1,13,1,1,1,40 -"683",0,1,0,62,2,1,5,1,11,1,1,1,40 -"684",0,1,0,60,2,1,5,1,12,1,0,1,40 -"685",1,1,1,66,3,1,5,1,11,1,1,1,40 -"686",1,1,1,44,4,1,3,1,9,4,1,0,41 -"687",0,1,1,29,1,1,3,0,8,4,0,0,41 -"688",0,1,1,31,5,1,3,1,11,4,0,0,41 -"689",0,1,0,62,2,1,3,0,9,4,0,0,41 -"690",0,1,0,47,2,1,3,0,8,4,0,0,41 -"691",0,1,1,64,1,1,3,0,8,4,0,0,41 -"692",0,1,1,53,1,1,3,0,9,4,0,0,41 -"693",0,1,1,50,1,1,3,0,9,4,0,0,41 -"694",0,1,1,55,2,1,3,0,9,4,0,0,41 -"695",0,1,1,57,1,1,3,0,11,4,0,0,41 -"696",0,1,1,41,2,1,3,0,10,4,1,0,41 -"697",0,1,0,57,1,1,3,1,11,4,0,0,41 -"698",0,1,1,27,3,1,3,1,2,4,0,0,41 -"699",0,1,0,54,2,1,4,0,8,4,0,0,42 -"700",0,1,1,39,2,1,4,1,7,4,0,0,42 -"701",0,1,1,47,3,1,4,0,10,4,1,0,42 -"702",0,1,0,59,1,1,4,0,10,4,1,0,42 -"703",0,1,0,50,4,1,4,0,7,4,0,0,42 -"704",1,1,1,41,2,1,4,1,12,4,0,0,42 -"705",0,0,0,40,3,1,4,1,7,4,0,0,42 -"706",0,1,0,64,1,1,4,1,9,4,1,0,42 -"707",0,1,0,62,1,1,4,0,9,4,0,0,42 -"708",0,1,1,50,3,1,4,1,9,4,0,0,42 -"709",0,1,0,38,2,1,4,1,9,4,1,0,42 -"710",0,1,1,41,4,1,4,1,7,4,0,0,42 -"711",0,1,1,41,1,1,4,1,8,4,0,0,42 -"712",1,1,0,45,5,1,4,0,10,4,0,0,42 -"713",0,0,1,60,1,1,4,0,11,4,1,0,42 -"714",0,1,0,47,4,1,4,0,8,4,0,0,42 -"715",0,1,1,40,4,1,4,1,7,4,0,0,42 -"716",0,0,1,55,3,1,4,0,8,4,0,0,42 -"717",0,1,1,58,5,1,5,0,11,1,1,0,43 -"718",0,1,1,39,1,1,5,0,8,1,1,0,43 -"719",0,0,1,62,3,1,5,0,8,1,0,0,43 -"720",1,0,1,49,2,1,5,0,10,1,0,0,43 -"721",0,1,0,60,1,1,5,0,10,1,1,0,43 -"722",0,0,0,68,2,1,5,0,12,1,1,0,43 -"723",0,1,1,59,2,1,5,1,11,1,1,0,43 -"724",0,1,1,58,1,1,5,1,6,1,0,0,43 -"725",0,1,0,46,5,1,5,0,1,1,0,0,43 -"726",0,1,1,49,2,1,5,1,10,1,0,0,43 -"727",0,1,0,56,2,1,5,0,12,1,1,0,43 -"728",0,1,1,51,1,1,5,1,10,1,0,0,43 -"729",0,1,1,50,2,1,5,0,9,1,0,0,43 -"730",0,1,0,51,2,1,5,1,9,1,1,0,43 -"731",0,1,1,44,2,1,5,1,9,1,1,0,43 -"732",0,1,0,73,1,1,5,0,13,1,1,0,43 -"733",0,1,1,62,3,1,5,0,11,1,1,0,43 -"734",0,1,1,46,2,1,5,1,11,1,0,0,43 -"735",0,1,0,42,2,1,5,0,9,1,1,0,43 -"736",0,1,1,67,1,1,5,1,11,1,0,0,43 -"737",0,1,0,47,1,1,5,0,9,1,1,0,43 -"738",0,1,1,58,1,1,3,0,10,5,0,0,44 -"739",0,1,0,44,2,1,3,0,12,5,0,0,44 -"740",0,1,0,69,1,1,3,1,7,5,1,0,44 -"741",0,1,0,44,2,1,3,1,10,5,1,0,44 -"742",0,1,0,35,4,1,3,1,6,5,0,0,44 -"743",0,1,0,52,2,1,3,1,10,5,0,0,44 -"744",0,1,0,41,2,1,3,1,10,5,1,0,44 -"745",1,1,0,51,2,1,3,1,5,5,0,0,44 -"746",0,1,0,37,1,1,3,0,1,5,0,0,44 -"747",0,1,0,48,2,1,3,0,5,5,0,0,44 -"748",0,1,0,42,2,1,3,1,9,5,0,0,44 -"749",0,1,1,60,2,1,3,1,9,5,1,0,44 -"750",0,1,0,46,2,1,3,1,8,5,0,0,44 -"751",1,1,0,62,2,1,3,0,12,5,1,0,44 -"752",0,1,1,34,1,1,3,1,8,5,0,0,44 -"753",1,1,0,36,1,1,3,0,5,5,0,0,44 -"754",1,1,0,46,3,1,3,1,8,5,0,0,44 -"755",0,1,1,71,2,1,5,0,11,1,1,0,45 -"756",0,1,0,61,3,1,5,1,10,1,0,0,45 -"757",0,1,0,38,2,1,5,0,6,1,0,0,45 -"758",1,0,1,42,1,1,5,0,10,1,0,0,45 -"759",0,0,0,59,1,1,5,1,9,1,0,0,45 -"760",0,1,1,50,1,1,5,1,6,1,0,0,45 -"761",0,1,1,59,2,1,5,1,10,1,1,0,45 -"762",0,1,0,48,1,1,5,1,11,1,1,0,45 -"763",0,1,1,48,1,1,5,1,3,1,0,0,45 -"764",0,1,0,51,1,1,5,0,9,1,1,0,45 -"765",0,1,0,38,2,1,5,0,9,1,1,0,45 -"766",0,1,1,64,5,1,5,1,14,1,1,0,45 -"767",0,1,0,50,2,1,5,1,7,1,1,0,45 -"768",1,1,1,30,2,1,5,1,10,1,0,0,45 -"769",0,1,0,47,3,1,5,1,7,1,0,0,45 -"770",0,1,0,55,1,1,5,1,10,1,0,0,45 -"771",1,1,1,47,2,1,5,0,9,1,1,0,45 -"772",0,1,0,45,4,1,5,1,11,1,0,0,45 -"773",0,1,0,59,1,1,5,1,9,1,0,0,45 -"774",0,1,0,46,2,1,5,1,12,1,0,0,45 -"775",0,1,0,49,1,1,5,0,10,1,1,0,45 -"776",0,1,0,59,1,1,5,1,11,1,0,0,45 -"777",0,1,0,66,2,1,5,0,9,1,1,0,45 -"778",0,1,0,53,1,1,5,0,3,1,0,0,45 -"779",0,1,1,30,3,1,5,1,6,4,0,0,46 -"780",1,1,0,45,1,1,5,0,10,4,0,0,46 -"781",0,1,0,37,1,1,5,1,5,4,0,0,46 -"782",0,0,0,58,1,1,5,1,4,4,0,0,46 -"783",0,1,0,54,2,1,5,1,6,4,0,0,46 -"784",0,1,1,55,2,1,5,1,9,4,0,0,46 -"785",0,1,0,44,3,1,5,0,10,4,0,0,46 -"786",0,1,1,47,2,1,5,0,9,4,0,0,46 -"787",0,1,0,54,1,1,5,0,8,4,1,0,46 -"788",0,1,1,68,1,1,5,0,11,4,0,0,46 -"789",0,1,0,49,1,1,5,0,10,4,0,0,46 -"790",0,1,1,56,2,1,5,0,10,4,0,0,46 -"791",0,1,0,42,2,1,5,1,7,4,0,0,46 -"792",0,1,1,39,2,1,5,1,11,4,1,0,46 -"793",0,1,1,48,1,1,5,1,10,4,0,0,46 -"794",0,1,0,53,1,1,5,1,8,4,0,0,46 -"795",1,0,1,40,5,1,5,1,10,4,0,0,46 -"796",0,1,1,62,1,1,5,0,10,4,1,0,46 -"797",1,1,1,46,1,1,5,0,8,3,0,0,47 -"798",0,0,0,51,3,1,5,0,8,3,1,0,47 -"799",0,1,0,76,1,1,5,0,11,3,1,0,47 -"800",0,0,0,55,1,1,5,0,13,3,1,0,47 -"801",0,1,0,60,1,1,5,0,11,3,1,0,47 -"802",0,1,0,65,2,1,5,0,11,3,0,0,47 -"803",0,0,0,53,1,1,5,0,11,3,1,0,47 -"804",1,1,0,40,3,1,5,1,11,3,0,0,47 -"805",0,1,0,52,1,1,5,1,10,3,0,0,47 -"806",0,1,1,63,1,1,5,0,9,3,1,0,47 -"807",0,1,0,48,1,1,5,0,6,3,0,0,47 -"808",0,1,0,46,1,1,5,0,6,3,0,0,47 -"809",0,1,0,48,1,1,5,0,6,3,0,0,47 -"810",0,1,0,53,3,1,5,0,9,3,0,0,47 -"811",0,1,0,59,5,1,5,1,11,3,0,0,47 -"812",0,1,0,52,3,1,5,1,9,3,0,0,47 -"813",0,1,1,60,3,1,5,1,10,3,1,0,47 -"814",0,1,0,55,2,1,5,1,5,3,0,0,47 -"815",0,1,0,51,1,1,5,0,10,3,0,0,47 -"816",0,1,0,56,1,1,5,0,11,3,0,0,47 -"817",1,1,0,45,4,1,5,1,10,3,0,0,47 -"818",0,1,0,54,1,1,4,1,5,4,0,0,48 -"819",0,1,1,41,1,1,4,1,8,4,1,0,48 -"820",0,1,1,50,2,1,4,1,9,4,0,0,48 -"821",0,1,0,60,1,1,4,0,6,4,0,0,48 -"822",0,0,1,54,2,1,4,1,11,4,1,0,48 -"823",0,1,1,57,1,1,4,0,7,4,0,0,48 -"824",0,1,1,61,1,1,4,1,9,4,0,0,48 -"825",0,1,1,67,1,1,4,1,6,4,0,0,48 -"826",0,1,0,58,2,1,4,1,12,4,0,0,48 -"827",0,1,1,50,2,1,4,0,6,4,0,0,48 -"828",0,1,0,28,2,1,4,0,6,4,1,0,48 -"829",0,1,1,51,1,1,4,0,10,4,0,0,48 -"830",0,1,0,47,2,1,4,1,5,4,0,0,48 -"831",0,1,1,59,3,1,4,1,5,4,0,0,48 -"832",0,1,0,52,2,1,4,0,9,4,0,0,48 -"833",0,1,1,68,1,1,4,1,9,4,0,0,48 -"834",0,1,1,70,1,1,4,0,10,4,0,0,48 -"835",0,1,1,56,1,1,4,1,10,4,0,0,48 -"836",0,1,0,54,1,1,4,0,11,4,1,0,48 -"837",1,1,0,61,2,1,4,0,10,4,0,0,48 -"838",0,1,1,42,3,1,3,1,9,3,1,0,49 -"839",0,1,1,64,1,1,3,1,12,3,1,0,49 -"840",0,1,0,45,2,1,3,0,8,3,0,0,49 -"841",0,1,0,53,3,1,3,0,9,3,1,0,49 -"842",0,0,0,55,2,1,3,1,11,3,0,0,49 -"843",0,1,0,58,3,1,3,0,11,3,1,0,49 -"844",0,1,0,56,1,1,3,1,9,3,0,0,49 -"845",0,1,1,63,1,1,3,1,7,3,0,0,49 -"846",0,1,0,45,2,1,3,0,8,3,0,0,49 -"847",1,0,0,57,2,1,3,0,5,3,0,0,49 -"848",1,0,1,27,5,1,3,0,10,3,1,0,49 -"849",0,1,0,56,1,1,3,1,10,3,1,0,49 -"850",0,1,0,44,1,1,3,1,11,3,0,0,49 -"851",0,1,0,50,2,1,3,1,7,3,0,0,49 -"852",0,1,0,58,2,1,3,0,10,3,1,0,49 -"853",0,1,0,78,2,1,3,0,10,3,1,0,49 -"854",0,1,0,54,1,1,3,0,10,3,1,0,49 -"855",0,1,0,64,5,1,3,1,9,3,1,0,49 -"856",0,1,0,67,1,1,4,1,12,1,1,0,50 -"857",1,0,1,50,3,1,4,0,11,1,0,0,50 -"858",0,0,0,42,3,1,4,1,11,1,0,0,50 -"859",1,1,0,51,2,1,4,1,8,1,0,0,50 -"860",0,1,0,53,1,1,4,0,9,1,1,0,50 -"861",0,1,0,39,2,1,4,1,8,1,0,0,50 -"862",0,0,1,50,5,1,4,0,10,1,0,0,50 -"863",0,0,1,59,5,1,4,0,11,1,1,0,50 -"864",0,1,0,50,1,1,4,1,11,1,1,0,50 -"865",1,1,0,54,2,1,4,1,10,1,1,0,50 -"866",0,1,1,62,1,1,4,1,11,1,1,0,50 -"867",0,1,1,42,3,1,4,1,6,1,0,0,50 -"868",0,1,1,49,2,1,4,1,12,1,1,0,50 -"869",0,1,0,59,5,1,4,0,9,1,0,0,50 -"870",1,0,1,38,4,1,4,1,9,1,0,0,50 -"871",1,1,0,42,3,1,4,1,7,1,0,0,50 -"872",0,1,1,45,1,1,4,1,10,1,1,0,50 -"873",1,1,1,44,3,1,4,0,10,1,0,0,50 -"874",0,1,0,46,3,1,4,0,12,1,0,0,50 -"875",0,1,0,48,3,1,3,1,5,6,0,0,51 -"876",0,1,0,52,1,1,3,1,5,6,1,0,51 -"877",1,1,1,55,3,1,3,0,10,6,0,0,51 -"878",0,1,0,43,5,1,3,1,6,6,0,0,51 -"879",0,1,1,39,1,1,3,1,7,6,0,0,51 -"880",0,1,0,49,5,1,3,0,9,6,1,0,51 -"881",0,0,0,59,2,1,3,1,10,6,0,0,51 -"882",1,1,0,23,4,1,3,1,6,6,0,0,51 -"883",0,0,0,33,2,1,3,1,9,6,0,0,51 -"884",0,1,1,49,3,1,3,0,10,6,0,0,51 -"885",0,1,0,49,4,1,3,0,9,6,0,0,51 -"886",0,0,0,64,2,1,3,0,7,6,0,0,51 -"887",0,1,0,39,2,1,3,1,8,6,0,0,51 -"888",0,1,0,53,1,1,3,1,10,6,0,0,51 -"889",0,0,0,51,1,1,3,0,9,6,0,0,51 -"890",0,1,0,31,2,1,3,0,7,6,1,0,51 -"891",0,1,0,34,1,1,3,1,2,6,0,0,51 -"892",0,1,1,52,3,1,4,1,6,6,0,0,52 -"893",0,1,1,54,2,1,4,1,10,6,0,0,52 -"894",0,1,1,58,2,1,4,0,12,6,1,0,52 -"895",0,1,1,60,2,1,4,1,7,1,0,0,53 -"896",0,1,0,38,1,1,4,0,9,1,0,0,53 -"897",0,1,1,55,1,1,4,1,9,1,0,0,53 -"898",0,1,0,44,1,1,4,1,10,1,1,0,53 -"899",0,1,1,55,3,1,4,1,10,1,0,0,53 -"900",0,1,0,40,2,1,4,1,8,1,1,0,53 -"901",0,1,0,48,3,1,4,0,10,1,1,0,53 -"902",0,1,1,56,1,1,4,0,12,1,1,0,53 -"903",1,0,0,44,3,1,4,0,9,1,1,0,53 -"904",1,0,0,45,3,1,4,0,8,1,0,0,53 -"905",1,1,0,39,3,1,4,0,10,1,0,0,53 -"906",0,1,1,60,3,1,4,1,11,1,1,0,53 -"907",1,0,1,36,3,1,4,0,8,1,0,0,53 -"908",1,1,1,71,2,1,4,0,12,1,1,0,53 -"909",0,1,0,33,1,1,4,1,13,1,1,0,53 -"910",0,1,1,38,2,1,4,0,2,1,0,0,53 -"911",0,1,0,51,3,1,4,1,13,1,1,0,53 -"912",0,1,0,48,2,1,4,1,10,1,1,0,53 -"913",0,1,0,44,2,1,4,1,12,1,1,0,53 -"914",0,1,0,70,2,1,4,0,11,1,1,0,53 -"915",0,1,0,52,1,1,4,1,9,1,1,0,53 -"916",0,1,1,43,2,1,4,1,7,1,0,0,53 -"917",0,1,0,42,2,1,4,1,10,1,0,0,53 -"918",0,1,1,61,2,1,4,1,10,1,1,0,53 -"919",0,1,1,64,2,1,4,0,9,1,0,0,53 -"920",1,1,0,54,5,1,2,0,10,6,0,0,54 -"921",0,1,0,46,1,1,2,0,8,6,0,0,54 -"922",0,1,0,47,5,1,2,1,8,6,0,0,54 -"923",0,1,1,52,2,1,2,1,10,6,0,0,54 -"924",0,1,0,53,3,1,2,1,11,6,1,0,54 -"925",0,1,0,34,5,1,2,0,10,6,0,0,54 -"926",0,1,0,39,1,1,2,1,5,6,0,0,54 -"927",0,1,0,37,2,1,2,0,2,6,0,0,54 -"928",0,1,0,37,1,1,2,0,5,6,0,0,54 -"929",0,1,0,54,3,1,2,1,12,6,0,0,54 -"930",0,1,0,49,5,1,2,1,7,6,0,0,54 -"931",0,0,0,36,5,1,2,1,10,6,0,0,54 -"932",1,1,1,40,5,1,2,1,10,6,0,0,54 -"933",0,1,0,42,4,1,2,1,5,6,0,0,54 -"934",0,1,1,56,3,1,2,1,5,6,0,0,54 -"935",0,1,0,44,3,1,2,0,6,6,0,0,54 -"936",0,1,0,58,5,1,2,1,9,6,0,0,54 -"937",0,1,0,50,2,1,4,0,11,4,1,0,55 -"938",0,1,0,69,2,1,4,1,12,4,1,0,55 -"939",0,1,1,57,2,1,4,1,9,4,0,0,55 -"940",0,1,0,59,1,1,4,1,8,4,0,0,55 -"941",0,1,0,34,2,1,4,0,8,4,0,0,55 -"942",0,1,0,60,5,1,4,1,9,4,0,0,55 -"943",0,1,0,58,3,1,4,1,7,4,0,0,55 -"944",0,0,1,56,3,1,4,0,13,4,1,0,55 -"945",1,1,0,37,2,1,4,0,8,4,0,0,55 -"946",0,1,0,45,2,1,4,1,10,4,1,0,55 -"947",0,1,0,41,2,1,4,1,7,4,0,0,55 -"948",0,0,0,73,5,1,4,1,9,1,1,0,56 -"949",0,1,0,62,5,1,4,1,8,1,0,0,56 -"950",0,1,0,53,3,1,4,1,10,1,0,0,56 -"951",0,1,0,52,2,1,4,1,9,1,0,0,56 -"952",0,1,0,58,1,1,4,0,13,1,1,0,56 -"953",0,1,1,37,1,1,4,0,13,1,1,0,56 -"954",0,1,1,60,2,1,4,0,8,1,0,0,56 -"955",0,1,1,61,2,1,4,0,13,1,1,0,56 -"956",0,1,0,72,1,1,4,0,10,1,1,0,56 -"957",1,0,1,57,5,1,4,0,13,1,1,0,56 -"958",0,1,0,54,3,1,4,1,10,1,0,0,56 -"959",0,1,0,59,2,1,4,0,5,1,1,0,56 -"960",0,0,0,39,2,1,4,0,13,1,1,0,56 -"961",0,1,0,54,2,1,4,1,12,1,1,0,56 -"962",0,1,0,42,2,1,4,0,5,1,0,0,56 -"963",0,1,0,63,2,1,4,0,11,1,0,0,56 -"964",1,1,1,65,5,1,4,0,11,1,1,0,56 -"965",0,1,0,58,2,1,4,1,11,1,0,0,56 -"966",0,1,0,63,3,1,4,0,13,1,0,0,56 -"967",0,1,0,50,3,1,3,0,9,4,0,0,57 -"968",0,1,1,51,3,1,3,1,10,4,0,0,57 -"969",1,1,0,53,3,1,3,1,8,4,0,0,57 -"970",0,1,0,32,2,1,3,0,12,4,0,0,57 -"971",0,1,0,50,1,1,3,1,10,4,0,0,57 -"972",1,1,1,46,5,1,3,1,9,4,0,0,57 -"973",0,1,0,52,2,1,3,1,9,4,0,0,57 -"974",0,0,0,50,5,1,3,0,6,4,0,0,57 -"975",1,1,1,48,5,1,3,1,6,4,0,0,57 -"976",0,1,1,48,2,1,3,1,4,4,0,0,57 -"977",0,1,1,48,2,1,3,1,7,4,0,0,57 -"978",0,1,1,45,2,1,3,1,10,4,0,0,57 -"979",0,1,0,36,3,1,3,0,9,4,1,0,57 -"980",0,1,0,44,1,1,5,0,8,1,0,0,58 -"981",0,1,1,57,2,1,5,1,7,1,0,0,58 -"982",0,1,0,45,2,1,5,1,9,1,0,0,58 -"983",0,1,0,46,1,1,4,0,8,4,0,0,59 -"984",0,1,0,61,2,1,4,0,9,4,1,0,59 -"985",1,1,0,55,2,1,4,0,11,4,0,0,59 -"986",0,1,0,48,2,1,4,0,8,4,1,0,59 -"987",1,1,0,36,3,1,4,1,9,4,0,0,59 -"988",0,1,0,31,2,1,4,1,11,4,0,0,59 -"989",0,1,1,44,2,1,4,0,5,4,0,0,59 -"990",0,1,1,39,2,1,4,0,6,4,0,0,59 -"991",1,1,1,43,3,1,4,0,9,4,0,0,59 -"992",0,1,0,46,3,1,4,1,6,4,1,0,59 -"993",0,1,0,48,4,1,4,0,11,4,1,0,59 -"994",0,1,0,49,1,1,4,1,9,4,0,0,59 -"995",0,1,0,64,3,1,4,1,12,4,1,0,59 -"996",0,1,0,67,2,1,4,1,10,4,0,0,59 -"997",0,1,1,50,2,1,4,0,10,4,0,0,59 -"998",0,1,0,42,3,1,4,0,1,4,0,0,59 -"999",0,1,1,55,5,1,4,0,12,1,1,0,60 -"1000",1,0,1,52,3,1,4,1,11,1,1,0,60 -"1001",0,1,1,48,3,1,4,1,10,1,1,0,60 -"1002",0,0,1,57,2,1,4,0,11,1,1,0,60 -"1003",0,1,1,42,3,1,4,1,10,1,0,0,60 -"1004",0,1,1,54,2,1,4,1,12,1,1,0,60 -"1005",0,1,1,66,2,1,4,0,13,1,1,0,60 -"1006",0,1,1,51,3,1,4,0,12,1,1,0,60 -"1007",0,1,0,44,5,1,4,1,9,1,1,0,60 -"1008",1,1,1,59,1,1,4,0,13,1,1,0,60 -"1009",0,0,0,80,1,1,4,1,9,1,0,0,60 -"1010",0,1,0,58,2,1,4,1,12,1,1,0,60 -"1011",0,1,1,53,3,1,4,0,10,1,1,0,60 -"1012",1,1,1,44,5,1,4,1,9,1,1,0,60 -"1013",0,1,1,56,1,1,4,0,10,1,0,0,60 -"1014",0,1,0,52,4,1,4,0,10,1,1,0,60 -"1015",0,0,0,48,3,1,4,0,13,1,1,0,60 -"1016",0,1,1,63,2,1,4,1,9,1,1,0,60 -"1017",0,1,0,52,1,1,4,1,6,1,1,0,60 -"1018",0,1,0,58,1,1,4,1,11,1,0,0,60 -"1019",0,1,1,47,2,1,4,1,11,1,0,0,60 -"1020",0,1,1,45,2,1,4,1,12,1,1,0,60 -"1021",1,1,0,60,1,1,4,0,10,5,1,0,61 -"1022",0,0,0,54,5,1,4,0,10,5,0,0,61 -"1023",0,1,0,53,5,1,4,1,12,5,1,0,61 -"1024",0,1,0,51,3,1,4,1,10,5,0,0,61 -"1025",0,1,0,48,1,1,4,1,8,5,0,0,61 -"1026",0,0,0,38,5,1,4,0,6,5,0,0,61 -"1027",1,0,0,46,5,1,4,0,12,5,1,0,61 -"1028",0,1,0,49,2,1,4,0,5,5,1,0,61 -"1029",1,1,0,53,2,1,4,0,5,5,0,0,61 -"1030",0,1,1,38,2,1,4,1,8,5,1,0,61 -"1031",0,1,0,64,2,1,4,0,11,3,1,0,62 -"1032",0,1,0,47,2,1,4,0,7,3,0,0,62 -"1033",0,1,1,42,5,1,4,0,5,3,0,0,62 -"1034",0,1,0,56,1,1,4,1,4,3,1,0,62 -"1035",0,1,0,42,2,1,4,1,7,3,0,0,62 -"1036",0,1,1,42,2,1,4,1,9,3,0,0,62 -"1037",0,1,1,42,2,1,4,1,5,3,0,0,62 -"1038",0,1,0,55,3,1,4,1,5,3,1,0,62 -"1039",0,1,0,56,3,1,4,1,6,3,0,0,62 -"1040",0,0,1,33,3,1,4,1,7,3,0,0,62 -"1041",1,1,1,46,5,1,4,0,9,3,0,0,62 -"1042",0,1,1,60,1,1,4,0,9,3,0,0,62 -"1043",0,1,0,50,3,1,4,1,10,3,0,0,62 -"1044",0,1,0,40,2,1,5,1,8,2,0,0,63 -"1045",0,0,0,54,2,1,5,0,7,2,0,0,63 -"1046",0,0,0,58,2,1,5,0,11,2,0,0,63 -"1047",0,1,0,58,1,1,5,0,8,2,0,0,63 -"1048",0,1,1,42,1,1,5,0,9,2,0,0,63 -"1049",0,1,1,47,1,1,5,1,10,2,1,0,63 -"1050",0,1,0,54,1,1,5,1,12,2,1,0,63 -"1051",0,1,0,49,2,1,5,1,9,2,0,0,63 -"1052",0,1,1,51,1,1,5,0,10,2,1,0,63 -"1053",0,1,1,31,1,1,5,0,3,2,0,0,63 -"1054",0,1,0,64,2,1,5,0,11,2,0,0,63 -"1055",0,1,1,55,3,1,3,1,12,3,1,0,64 -"1056",0,1,0,45,3,1,3,0,10,3,1,0,64 -"1057",0,1,0,52,1,1,3,1,11,3,1,0,64 -"1058",0,1,1,55,3,1,3,0,10,3,0,0,64 -"1059",0,1,1,59,3,1,3,0,9,3,1,0,64 -"1060",0,1,0,46,1,1,3,1,12,3,0,0,64 -"1061",0,1,1,63,4,1,3,1,13,3,0,0,64 -"1062",0,1,1,59,1,1,3,0,11,3,1,0,64 -"1063",0,1,0,61,1,1,3,0,9,3,0,0,64 -"1064",0,1,0,44,1,1,3,0,11,3,1,0,64 -"1065",0,1,0,43,3,1,3,1,9,3,0,0,64 -"1066",1,1,0,44,3,1,3,0,10,3,1,0,64 -"1067",0,0,1,44,3,1,3,1,10,3,1,0,64 -"1068",0,1,0,42,2,1,3,1,10,3,0,0,64 -"1069",0,1,0,28,3,1,3,1,10,3,0,0,64 -"1070",0,1,1,55,1,1,4,1,8,6,0,0,65 -"1071",0,1,1,44,2,1,4,1,5,6,0,0,65 -"1072",0,1,0,49,5,1,4,0,9,6,0,0,65 -"1073",1,1,0,42,1,1,4,0,7,6,0,0,65 -"1074",0,1,1,53,2,1,4,0,7,6,0,0,65 -"1075",1,0,1,60,2,1,4,0,10,6,0,0,65 -"1076",0,1,1,51,1,1,4,1,8,6,0,0,65 -"1077",0,1,0,31,1,1,4,0,10,6,1,0,65 -"1078",0,1,0,40,2,1,4,1,10,6,1,0,65 -"1079",0,1,1,44,2,1,4,0,2,6,0,0,65 -"1080",0,1,0,62,2,1,4,1,10,6,1,0,65 -"1081",1,1,0,53,3,1,4,1,11,6,1,0,65 -"1082",0,1,0,57,1,1,4,0,10,6,0,0,65 -"1083",0,1,0,37,1,1,4,1,5,6,0,0,65 -"1084",0,1,1,54,3,1,4,0,5,6,0,0,65 -"1085",0,1,1,53,5,1,4,0,8,3,1,0,66 -"1086",0,1,1,63,1,1,4,0,7,3,0,0,66 -"1087",0,1,1,58,1,1,4,1,11,3,0,0,66 -"1088",0,1,1,49,2,1,4,0,9,3,0,0,66 -"1089",0,1,1,58,1,1,4,1,4,3,0,0,66 -"1090",0,1,0,54,3,1,4,0,10,3,0,0,66 -"1091",0,1,0,62,1,1,4,0,5,3,0,0,66 -"1092",0,1,0,37,2,1,4,0,9,3,0,0,66 -"1093",0,1,0,56,1,1,4,1,7,3,0,0,66 -"1094",0,1,0,50,1,1,4,0,6,3,0,0,66 -"1095",0,1,1,60,5,1,4,1,6,3,0,0,66 -"1096",0,1,1,47,3,1,5,0,10,4,1,0,67 -"1097",0,1,0,59,1,1,5,0,9,4,0,0,67 -"1098",0,1,0,58,1,1,5,0,6,4,0,0,67 -"1099",0,1,1,52,3,1,5,1,10,4,0,0,67 -"1100",0,1,1,47,3,1,5,0,9,4,0,0,67 -"1101",0,1,0,46,5,1,5,1,9,4,1,0,67 -"1102",0,1,1,57,2,1,5,1,10,4,1,0,67 -"1103",0,1,0,49,1,1,5,0,10,4,1,0,67 -"1104",1,1,0,40,5,1,5,0,8,4,0,0,67 -"1105",0,1,0,43,2,1,5,1,6,4,0,0,67 -"1106",0,1,1,46,1,1,5,1,3,4,0,0,67 -"1107",0,1,0,56,2,1,5,1,11,4,1,0,67 -"1108",0,1,1,57,1,1,5,0,5,4,0,0,67 -"1109",0,1,1,49,2,1,5,0,10,4,0,0,67 -"1110",0,1,0,47,5,0,5,0,12,1,0,1,68 -"1111",0,1,0,45,4,0,5,0,10,1,0,1,68 -"1112",0,1,1,51,5,0,5,0,11,1,1,1,68 -"1113",0,1,0,43,1,0,5,0,12,1,1,1,68 -"1114",0,0,0,43,2,0,5,0,8,1,0,1,68 -"1115",0,1,0,58,2,0,5,0,11,1,1,1,68 -"1116",0,1,0,45,1,0,5,0,10,1,0,1,68 -"1117",0,0,0,62,3,0,5,0,11,1,0,1,68 -"1118",0,0,0,63,3,0,5,0,10,1,1,1,68 -"1119",0,1,1,46,1,0,5,0,10,1,0,1,68 -"1120",0,1,1,70,1,0,5,0,11,1,0,1,68 -"1121",0,1,1,57,1,0,5,0,10,1,0,1,68 -"1122",0,1,0,49,1,0,5,0,7,1,0,1,68 -"1123",0,0,0,55,2,0,5,0,10,1,0,1,68 -"1124",0,1,0,48,1,0,5,0,10,1,0,1,68 -"1125",0,1,1,41,2,0,5,0,10,1,0,1,68 -"1126",1,0,1,63,4,1,4,0,12,1,1,0,69 -"1127",0,1,0,56,2,1,4,1,11,1,1,0,69 -"1128",1,0,1,55,5,1,4,1,12,1,1,0,69 -"1129",0,1,0,56,2,1,4,0,10,1,0,0,69 -"1130",0,1,1,53,3,1,4,1,12,1,1,0,69 -"1131",0,1,0,59,2,1,4,1,13,1,1,0,69 -"1132",0,0,0,50,3,1,4,0,11,1,1,0,69 -"1133",0,0,0,54,3,1,4,1,12,1,1,0,69 -"1134",0,1,0,57,2,1,4,1,10,1,1,0,69 -"1135",0,1,0,54,2,1,4,1,9,1,1,0,69 -"1136",0,1,0,51,2,1,4,1,10,1,1,0,69 -"1137",1,1,0,52,1,1,4,0,13,1,1,0,69 -"1138",0,1,0,48,5,1,4,1,9,1,0,0,69 -"1139",1,1,1,29,5,1,4,0,12,1,1,0,69 -"1140",0,0,0,55,1,1,4,1,10,1,1,0,69 -"1141",0,1,1,53,3,1,4,1,8,1,1,0,69 -"1142",0,1,1,59,1,1,4,0,10,1,0,0,69 -"1143",0,1,0,54,2,1,4,1,10,1,0,0,69 -"1144",0,1,0,52,3,1,3,0,9,3,0,0,70 -"1145",0,1,1,35,3,1,3,1,10,3,0,0,70 -"1146",0,1,1,25,3,1,3,0,8,3,1,0,70 -"1147",0,1,0,35,3,1,3,0,8,3,1,0,70 -"1148",1,1,0,41,4,1,3,1,8,3,0,0,70 -"1149",0,1,0,48,3,1,3,0,3,3,0,0,70 -"1150",0,1,0,41,5,1,3,0,10,3,0,0,70 -"1151",0,0,0,30,2,1,3,0,11,3,0,0,70 -"1152",0,1,0,40,5,1,3,1,6,3,0,0,70 -"1153",0,1,0,31,3,1,3,1,9,3,0,0,70 -"1154",0,1,0,39,3,1,3,0,10,3,0,0,70 -"1155",1,1,0,31,2,1,3,0,10,3,0,0,70 -"1156",0,1,0,46,3,1,3,1,9,3,0,0,70 -"1157",0,1,0,55,1,1,3,0,9,3,0,0,70 -"1158",1,0,1,58,3,1,3,0,11,3,0,0,70 -"1159",0,1,0,55,1,1,3,1,11,3,0,0,70 -"1160",0,0,0,50,3,1,3,0,11,3,1,0,70 -"1161",1,1,0,40,4,1,3,1,8,3,0,0,70 -"1162",0,1,0,40,2,1,3,0,9,3,1,0,70 -"1163",0,1,1,52,3,1,3,1,9,3,0,0,70 -"1164",0,1,0,36,2,1,3,1,8,3,0,0,70 -"1165",1,1,0,50,5,1,3,1,8,3,0,0,70 -"1166",0,1,0,43,2,1,4,1,9,5,0,0,71 -"1167",0,1,1,56,1,1,4,0,9,5,1,0,71 -"1168",0,1,1,57,2,1,4,1,4,5,0,0,71 -"1169",0,1,1,48,2,1,4,1,7,5,0,0,71 -"1170",0,1,1,44,1,1,4,1,3,5,0,0,71 -"1171",1,0,0,51,3,1,4,0,5,5,0,0,71 -"1172",0,1,1,53,1,1,4,0,9,5,0,0,71 -"1173",0,1,0,52,3,1,4,1,8,5,0,0,71 -"1174",1,1,1,38,3,1,4,1,10,5,0,0,71 -"1175",0,1,0,61,1,1,4,0,8,5,0,0,71 -"1176",0,1,0,59,1,1,4,0,10,5,0,0,71 -"1177",0,1,1,57,2,1,4,1,10,5,0,0,71 -"1178",0,1,0,54,5,1,4,1,10,5,1,0,71 -"1179",0,1,0,52,1,1,4,1,9,5,0,0,71 -"1180",0,1,1,27,3,1,4,1,10,5,1,0,71 -"1181",1,0,0,47,2,1,4,0,10,5,0,0,71 -"1182",1,0,0,41,4,1,4,0,8,5,0,0,71 -"1183",0,1,1,40,2,1,4,1,7,2,0,0,72 -"1184",0,1,0,49,2,1,4,1,10,2,0,0,72 -"1185",1,1,1,25,3,1,4,1,9,2,0,0,72 -"1186",1,1,1,46,3,1,4,0,8,2,0,0,72 -"1187",0,1,0,48,2,1,4,0,5,2,0,0,72 -"1188",0,1,0,41,4,1,4,1,7,2,0,0,72 -"1189",1,1,1,28,1,1,4,1,3,2,1,0,72 -"1190",0,1,1,48,1,1,4,1,10,2,0,0,72 -"1191",0,1,1,46,2,1,4,1,11,2,0,0,72 -"1192",0,0,1,39,2,1,4,1,9,2,0,0,72 -"1193",0,1,1,40,1,1,4,1,8,2,0,0,72 -"1194",0,1,1,38,1,1,4,1,6,2,1,0,72 -"1195",0,1,1,42,2,1,4,0,11,3,0,0,73 -"1196",0,1,0,69,1,1,4,0,9,3,1,0,73 -"1197",0,1,0,64,2,1,4,0,11,3,1,0,73 -"1198",0,1,0,54,1,1,4,1,5,3,0,0,73 -"1199",0,1,0,44,2,1,4,1,8,3,0,0,73 -"1200",0,1,1,52,3,1,4,0,8,3,0,0,73 -"1201",0,1,0,59,3,1,4,0,8,3,1,0,73 -"1202",0,1,0,52,2,1,4,1,8,3,0,0,73 -"1203",0,1,0,47,3,1,4,1,9,3,1,0,73 -"1204",0,0,1,38,5,1,4,1,6,3,1,0,73 -"1205",0,1,0,30,3,1,4,1,8,3,0,0,73 -"1206",0,1,0,64,5,1,4,1,10,3,1,0,73 -"1207",0,1,1,38,3,1,4,1,8,3,1,0,73 -"1208",0,0,0,45,3,1,4,0,6,3,0,0,73 -"1209",0,1,0,42,2,1,4,1,10,3,0,0,73 -"1210",1,1,1,59,1,1,4,0,10,1,0,0,74 -"1211",0,1,1,60,2,1,4,1,10,1,0,0,74 -"1212",0,1,1,56,1,1,4,1,9,1,1,0,74 -"1213",1,0,1,56,3,1,4,0,13,1,0,0,74 -"1214",1,0,1,48,3,1,4,0,11,1,0,0,74 -"1215",0,1,0,59,2,1,4,1,11,1,1,0,74 -"1216",0,1,1,59,2,1,4,0,11,1,1,0,74 -"1217",0,1,1,49,3,1,4,0,9,1,0,0,74 -"1218",0,1,1,65,2,1,4,1,10,1,1,0,74 -"1219",0,1,0,62,1,1,4,1,13,1,0,0,74 -"1220",0,1,0,50,1,1,4,1,11,1,1,0,74 -"1221",0,1,0,58,2,1,4,1,10,1,1,0,74 -"1222",0,1,0,52,2,1,4,1,13,1,1,0,74 -"1223",0,0,1,68,1,1,4,0,10,1,1,0,74 -"1224",0,1,0,54,2,1,4,1,10,1,0,0,74 -"1225",0,0,0,48,3,1,4,1,10,1,0,0,74 -"1226",0,1,0,38,1,1,4,0,11,1,0,0,74 -"1227",0,1,1,48,1,1,4,1,10,1,1,0,74 -"1228",0,1,1,61,1,1,4,0,11,1,0,0,74 -"1229",1,1,1,65,4,1,4,0,9,1,0,0,74 -"1230",0,1,1,56,2,1,4,1,11,1,1,0,74 -"1231",0,0,1,45,2,1,4,1,10,1,1,0,75 -"1232",0,1,0,46,2,1,4,0,9,1,0,0,75 -"1233",0,0,0,49,3,1,4,1,5,1,0,0,75 -"1234",0,1,0,58,2,1,4,1,7,1,0,0,75 -"1235",0,1,1,49,1,1,4,1,6,1,0,0,75 -"1236",0,1,1,48,4,1,4,1,9,1,0,0,75 -"1237",0,1,0,46,1,1,4,1,12,1,1,0,75 -"1238",0,1,0,39,2,1,4,1,9,6,0,0,76 -"1239",0,1,1,47,2,1,4,1,4,6,1,0,76 -"1240",1,1,1,43,2,1,4,0,9,6,0,0,76 -"1241",0,1,1,47,2,1,4,0,7,6,0,0,76 -"1242",0,1,0,46,1,1,4,1,2,6,0,0,76 -"1243",0,1,1,54,2,1,4,0,8,6,0,0,76 -"1244",1,1,0,35,1,1,4,0,6,6,0,0,76 -"1245",0,0,0,44,1,1,4,1,6,6,0,0,76 -"1246",0,1,0,58,2,1,4,0,10,6,0,0,76 -"1247",0,1,0,45,2,1,4,1,7,6,0,0,76 -"1248",0,1,1,41,5,1,4,0,10,6,0,0,76 -"1249",0,1,0,37,2,1,4,1,11,6,0,0,76 -"1250",0,1,1,72,1,1,4,1,10,6,1,0,76 -"1251",0,1,0,50,1,1,4,0,5,6,0,0,76 -"1252",1,1,0,41,3,1,4,0,9,6,0,0,76 -"1253",0,1,1,53,3,1,4,1,7,5,0,0,77 -"1254",0,1,0,61,2,1,4,1,6,5,1,0,77 -"1255",0,1,1,37,3,1,4,1,8,5,0,0,77 -"1256",0,1,0,61,2,1,4,1,10,5,1,0,77 -"1257",0,1,1,38,2,1,4,1,5,5,1,0,77 -"1258",0,1,1,35,5,1,4,0,7,5,0,0,77 -"1259",0,1,1,43,3,1,4,0,13,5,1,0,77 -"1260",0,1,1,41,3,1,4,0,1,5,1,0,77 -"1261",0,1,0,42,3,1,4,0,12,5,1,0,77 -"1262",0,1,0,37,2,1,4,1,8,5,1,0,77 -"1263",0,1,0,51,2,1,4,0,12,5,1,0,77 -"1264",0,1,0,41,2,1,4,1,10,5,1,0,77 -"1265",0,1,0,56,2,1,4,1,10,5,0,0,77 -"1266",0,1,1,42,2,1,4,1,13,5,1,0,77 -"1267",0,1,1,50,5,1,4,0,11,5,1,0,77 -"1268",1,1,1,56,3,1,4,0,9,5,0,0,77 -"1269",0,1,0,37,2,1,4,1,9,5,0,0,77 -"1270",0,1,0,49,3,1,4,0,11,5,0,0,77 -"1271",0,1,1,41,2,1,4,1,11,5,1,0,77 -"1272",0,1,0,62,5,1,4,1,7,5,1,0,77 -"1273",1,1,0,33,3,1,4,1,7,5,1,0,77 -"1274",0,1,1,43,2,1,4,1,10,2,1,0,78 -"1275",0,1,0,65,2,1,4,1,8,2,1,0,78 -"1276",1,1,0,51,4,1,4,1,10,2,1,0,78 -"1277",0,1,1,58,2,1,4,0,12,2,1,0,78 -"1278",0,1,1,55,1,1,4,1,11,2,0,0,78 -"1279",1,1,0,48,4,1,4,0,12,2,1,0,78 -"1280",0,1,0,58,2,1,4,1,12,2,1,0,78 -"1281",0,1,0,64,1,1,4,0,11,2,1,0,78 -"1282",0,1,0,54,2,1,4,0,11,2,1,0,78 -"1283",0,1,1,75,1,1,4,0,5,2,1,0,78 -"1284",0,1,0,71,1,1,4,0,10,2,1,0,78 -"1285",1,1,1,43,5,1,4,1,9,2,1,0,78 -"1286",0,1,0,58,1,1,4,0,12,2,1,0,78 -"1287",0,1,1,53,3,1,4,1,11,2,1,0,78 -"1288",0,1,1,55,1,1,4,1,11,2,1,0,78 -"1289",0,1,0,60,2,1,4,0,12,1,1,1,79 -"1290",0,1,0,43,4,1,4,0,4,1,0,1,79 -"1291",0,1,0,47,3,1,4,0,10,1,1,1,79 -"1292",0,1,0,53,2,1,4,1,12,1,1,1,79 -"1293",0,1,1,69,3,1,4,0,12,1,1,1,79 -"1294",1,1,1,64,5,1,4,0,10,1,1,1,79 -"1295",0,1,0,62,1,1,4,1,8,1,0,1,79 -"1296",0,1,0,42,2,1,4,0,13,1,0,1,79 -"1297",0,1,1,70,2,1,4,0,12,1,1,1,79 -"1298",0,1,1,42,2,1,4,1,10,1,1,1,79 -"1299",0,1,0,66,2,1,4,0,13,1,1,1,79 -"1300",0,1,0,56,3,1,4,1,12,1,1,1,79 -"1301",0,1,1,45,2,1,4,1,9,1,0,1,79 -"1302",0,1,0,59,2,1,4,0,12,1,1,1,79 -"1303",0,1,1,75,2,1,4,0,13,1,1,1,79 -"1304",0,1,0,39,2,1,4,0,11,1,1,1,79 -"1305",0,1,1,43,3,1,4,1,11,1,1,1,79 -"1306",0,1,1,53,2,1,4,1,13,1,1,1,79 -"1307",0,1,0,63,2,1,4,1,11,1,1,1,79 -"1308",0,1,1,55,3,1,4,0,10,1,0,1,79 -"1309",0,1,0,80,1,1,4,1,12,1,1,1,79 -"1310",0,0,0,40,2,1,4,0,6,1,0,1,79 -"1311",0,1,1,52,1,1,4,1,11,1,1,1,79 -"1312",0,1,0,40,3,1,4,0,12,1,1,1,79 -"1313",0,1,1,55,3,1,4,1,11,1,1,1,79 -"1314",0,1,1,65,3,1,4,0,10,1,0,1,79 -"1315",0,1,0,44,1,1,4,1,11,1,1,1,79 -"1316",0,1,1,52,2,1,4,1,10,1,1,1,79 -"1317",1,1,0,58,3,1,4,0,10,2,1,0,80 -"1318",0,0,0,64,3,1,4,0,11,2,1,0,80 -"1319",1,0,0,48,2,1,4,0,9,2,0,0,80 -"1320",0,1,0,60,2,1,4,0,12,2,1,0,80 -"1321",0,1,0,53,2,1,4,1,8,2,0,0,80 -"1322",1,0,0,50,2,1,4,0,8,2,1,0,80 -"1323",0,1,1,60,2,1,4,0,12,2,1,0,80 -"1324",0,1,0,35,3,1,4,1,10,2,1,0,80 -"1325",1,0,1,60,2,1,4,0,7,2,1,0,80 -"1326",0,1,0,65,1,1,4,1,7,2,0,0,80 -"1327",0,1,0,66,3,1,4,0,10,2,1,0,80 -"1328",0,1,0,56,1,1,4,1,10,2,0,0,80 -"1329",0,0,1,53,5,1,4,1,9,2,0,0,80 -"1330",0,1,0,51,2,1,4,1,10,1,0,1,81 -"1331",0,1,0,54,2,1,4,0,12,1,1,1,81 -"1332",0,1,0,67,2,1,4,0,9,1,1,1,81 -"1333",0,1,1,51,3,1,4,1,13,1,1,1,81 -"1334",0,1,0,60,4,1,4,1,11,1,1,1,81 -"1335",1,1,0,59,1,1,4,0,7,1,0,1,81 -"1336",0,1,1,54,2,1,4,0,12,1,1,1,81 -"1337",0,1,0,51,3,1,4,1,8,1,0,1,81 -"1338",0,1,1,53,2,1,4,0,11,1,0,1,81 -"1339",0,1,1,56,3,1,4,0,10,1,1,1,81 -"1340",1,1,0,59,2,1,4,0,11,1,1,1,81 -"1341",0,1,0,42,1,1,4,1,8,1,1,1,81 -"1342",0,1,0,52,4,1,4,1,11,1,1,1,81 -"1343",0,1,1,47,2,1,4,1,5,1,0,1,81 -"1344",0,1,0,48,2,1,4,0,7,1,1,1,81 -"1345",0,1,1,46,3,1,4,1,13,1,1,1,81 -"1346",0,0,1,49,3,1,4,1,13,1,1,1,81 -"1347",0,1,0,40,4,1,4,1,12,1,1,1,81 -"1348",0,0,0,56,2,1,4,1,4,5,0,0,82 -"1349",0,1,0,63,1,1,4,0,10,5,1,0,82 -"1350",0,1,1,65,2,1,4,1,11,5,0,0,82 -"1351",0,1,0,50,1,1,4,0,3,5,0,0,82 -"1352",0,1,0,61,1,1,4,0,8,5,0,0,82 -"1353",0,1,0,62,1,1,4,1,10,5,0,0,82 -"1354",0,1,1,55,1,1,4,1,9,5,0,0,82 -"1355",0,1,1,55,4,1,4,0,6,5,0,0,82 -"1356",1,1,0,59,1,1,4,0,10,5,1,0,82 -"1357",1,1,0,31,2,1,4,1,11,5,1,0,82 -"1358",0,1,0,61,2,1,4,1,10,5,0,0,82 -"1359",1,1,1,48,3,1,4,1,5,5,0,0,82 -"1360",1,1,0,47,1,1,4,1,3,5,0,0,82 -"1361",0,1,0,64,2,1,4,0,12,5,0,0,82 -"1362",0,1,0,58,3,1,4,0,12,4,1,0,83 -"1363",0,1,1,58,1,1,4,1,12,4,1,0,83 -"1364",0,1,0,63,3,1,4,0,12,4,1,0,83 -"1365",0,1,1,51,3,1,4,1,10,4,1,0,83 -"1366",0,1,0,77,3,1,4,0,11,4,1,0,83 -"1367",0,1,0,55,2,1,4,1,12,4,1,0,83 -"1368",0,1,0,55,2,1,4,1,7,4,0,0,83 -"1369",0,1,0,44,3,1,4,0,9,4,0,0,83 -"1370",0,1,0,70,2,1,4,0,10,4,1,0,83 -"1371",0,1,0,56,3,1,4,1,10,4,0,0,83 -"1372",0,1,0,59,1,1,4,1,11,4,1,0,83 -"1373",0,1,0,63,1,1,4,1,8,4,1,0,83 -"1374",0,1,0,52,1,1,4,1,8,4,1,0,83 -"1375",0,1,0,38,3,1,4,1,9,4,0,0,83 -"1376",0,1,0,61,3,1,4,0,11,4,1,0,83 -"1377",0,1,0,60,3,1,4,1,10,4,0,0,83 -"1378",1,1,0,52,2,1,4,0,6,4,0,0,83 -"1379",0,1,1,61,3,1,4,1,9,4,1,0,83 -"1380",0,1,0,51,3,1,4,1,8,4,1,0,83 -"1381",0,1,0,74,1,1,4,0,12,4,1,0,83 -"1382",0,1,0,54,2,1,4,1,12,4,1,0,83 -"1383",0,1,0,60,3,1,4,1,9,4,0,0,83 -"1384",0,1,0,68,2,1,4,0,12,4,1,0,83 -"1385",0,1,0,63,1,0,4,0,11,1,1,1,84 -"1386",0,1,0,58,3,0,4,0,10,1,1,1,84 -"1387",1,1,0,52,2,0,4,0,12,1,1,1,84 -"1388",0,1,1,72,3,0,4,0,12,1,1,1,84 -"1389",0,1,1,58,2,0,4,0,12,1,1,1,84 -"1390",0,1,0,59,1,0,4,0,10,1,1,1,84 -"1391",0,1,0,65,1,0,4,0,12,1,1,1,84 -"1392",0,1,0,74,1,0,4,0,10,1,1,1,84 -"1393",0,1,0,60,1,0,4,0,12,1,1,1,84 -"1394",0,1,1,61,2,0,4,0,12,1,1,1,84 -"1395",0,1,0,57,2,0,4,0,11,1,0,1,84 -"1396",0,1,0,69,1,0,4,0,13,1,1,1,84 -"1397",0,1,0,58,2,0,4,0,9,1,1,1,84 -"1398",0,1,0,66,2,0,4,0,12,1,1,1,84 -"1399",0,1,0,48,3,1,4,1,12,5,0,0,85 -"1400",0,1,0,53,2,1,4,1,8,5,0,0,85 -"1401",0,1,0,47,3,1,4,1,9,5,0,0,85 -"1402",0,1,0,49,2,1,4,1,12,5,1,0,85 -"1403",1,1,0,37,2,1,4,1,9,5,0,0,85 -"1404",1,1,1,46,3,1,4,1,9,5,0,0,85 -"1405",0,1,0,37,2,1,4,1,8,5,0,0,85 -"1406",0,1,0,61,5,1,4,0,9,5,0,0,85 -"1407",0,1,0,40,4,1,4,0,5,5,1,0,85 -"1408",0,1,0,72,2,1,4,0,9,5,0,0,85 -"1409",0,1,0,49,5,1,4,0,8,5,0,0,85 -"1410",0,1,1,36,5,1,4,1,9,5,0,0,85 -"1411",0,0,1,38,2,1,4,1,10,5,0,0,86 -"1412",0,0,0,55,2,1,4,0,7,5,0,0,86 -"1413",0,1,0,45,2,1,4,1,8,5,0,0,86 -"1414",0,1,0,52,2,1,4,0,10,5,0,0,86 -"1415",0,1,0,45,1,1,4,1,8,5,0,0,86 -"1416",0,1,1,49,2,1,4,1,9,5,0,0,86 -"1417",1,1,1,43,1,1,4,0,7,5,1,0,86 -"1418",0,1,0,49,2,1,4,1,4,5,0,0,86 -"1419",0,1,1,48,2,1,4,1,7,5,0,0,86 -"1420",1,0,1,52,3,1,4,0,10,5,1,0,86 -"1421",0,1,0,67,2,1,4,1,9,5,0,0,86 -"1422",0,1,0,60,3,1,4,0,11,5,1,0,86 -"1423",0,1,1,49,2,1,4,0,6,5,0,0,86 -"1424",0,1,0,47,3,1,4,0,10,5,0,0,86 -"1425",0,1,1,59,2,1,4,1,9,3,0,0,87 -"1426",1,1,0,62,3,1,4,0,5,3,0,0,87 -"1427",0,1,1,53,1,1,4,0,9,3,0,0,87 -"1428",0,1,0,57,3,1,4,0,13,3,0,0,87 -"1429",0,1,0,54,2,1,4,1,9,3,1,0,87 -"1430",0,1,0,53,1,1,4,1,9,3,1,0,87 -"1431",0,1,0,51,2,1,4,1,10,3,0,0,87 -"1432",0,1,0,36,4,1,4,1,7,3,0,0,87 -"1433",0,1,1,56,2,1,4,1,8,3,0,0,87 -"1434",0,1,0,53,2,1,4,0,8,3,1,0,87 -"1435",0,1,1,71,2,1,4,1,11,3,0,0,87 -"1436",0,1,0,63,4,1,4,1,9,3,0,0,87 -"1437",1,1,0,39,1,1,4,1,8,3,0,0,87 -"1438",0,1,0,56,2,1,4,1,11,3,1,0,87 -"1439",1,0,0,50,1,1,4,0,10,3,0,0,87 -"1440",0,1,0,60,1,1,4,1,9,3,0,0,87 -"1441",0,1,0,54,1,1,4,0,9,3,0,0,87 -"1442",0,1,1,59,2,1,4,1,8,3,0,0,87 -"1443",0,1,0,58,2,1,4,1,9,3,1,0,87 -"1444",0,1,0,48,3,1,4,0,9,3,0,0,87 -"1445",0,1,0,50,3,1,4,1,9,3,0,0,87 -"1446",0,1,0,49,1,1,4,1,8,3,0,0,87 -"1447",0,1,0,47,2,1,4,1,9,3,0,0,87 -"1448",0,1,1,65,1,1,4,0,10,3,1,0,87 -"1449",1,1,0,50,2,1,4,0,10,1,1,0,88 -"1450",0,1,1,53,2,1,4,1,8,1,0,0,88 -"1451",0,1,0,59,2,1,4,0,11,1,0,0,88 -"1452",0,1,0,50,2,1,4,0,12,1,1,0,88 -"1453",0,1,0,61,3,1,4,1,12,1,0,0,88 -"1454",0,1,0,63,3,1,4,1,11,1,1,0,88 -"1455",0,1,1,47,1,1,4,0,10,1,0,0,88 -"1456",0,1,0,68,1,1,4,1,8,1,1,0,88 -"1457",0,1,1,74,2,1,4,1,11,1,1,0,88 -"1458",1,0,0,43,2,1,4,0,10,1,0,0,88 -"1459",0,1,0,57,2,1,4,0,11,1,1,0,88 -"1460",0,1,1,56,3,1,4,1,12,1,0,0,88 -"1461",0,1,0,54,2,1,4,0,11,1,0,0,88 -"1462",0,1,1,50,2,1,4,1,11,1,1,0,88 -"1463",0,1,1,45,2,1,4,0,12,1,1,0,88 -"1464",0,1,0,54,3,1,4,1,7,1,0,0,88 -"1465",0,1,1,32,3,1,4,1,9,1,1,0,88 -"1466",0,1,0,40,2,1,4,1,9,1,1,0,88 -"1467",0,1,0,52,3,1,4,1,10,1,1,0,88 -"1468",0,1,0,59,3,1,4,0,7,1,1,0,88 -"1469",0,0,0,41,3,1,4,0,9,1,1,0,88 -"1470",0,1,0,57,2,1,4,1,11,1,1,0,88 -"1471",0,0,1,43,3,1,4,0,9,1,1,0,88 -"1472",1,1,1,48,3,1,4,0,11,1,1,0,88 -"1473",0,0,1,52,2,1,4,0,10,1,0,0,88 -"1474",0,1,0,55,5,1,4,1,11,1,1,0,88 -"1475",0,1,1,80,2,1,3,0,12,2,1,0,89 -"1476",0,0,1,33,5,1,3,0,11,2,0,0,89 -"1477",0,1,1,65,2,1,3,1,10,2,0,0,89 -"1478",0,1,1,57,2,1,3,0,9,2,0,0,89 -"1479",0,1,0,37,3,1,3,0,10,2,0,0,89 -"1480",0,1,0,51,1,1,3,1,10,2,1,0,89 -"1481",0,1,1,37,5,1,3,1,9,2,0,0,89 -"1482",0,1,0,57,1,1,3,0,11,2,0,0,89 -"1483",0,1,1,45,4,1,3,1,10,2,0,0,89 -"1484",0,1,1,59,1,1,3,0,9,2,0,0,89 -"1485",0,1,0,61,5,1,3,0,9,2,0,0,89 -"1486",0,1,1,61,1,1,3,1,14,2,1,0,89 -"1487",0,0,1,47,3,1,3,0,7,2,1,0,89 -"1488",0,1,0,67,2,1,3,0,10,2,0,0,89 -"1489",0,1,0,44,5,1,3,1,10,2,1,0,89 -"1490",0,1,0,54,1,1,3,0,8,2,1,0,89 -"1491",0,1,0,42,2,1,5,1,8,5,0,0,90 -"1492",0,1,1,52,2,1,5,0,10,5,0,0,90 -"1493",0,1,0,75,2,1,5,0,10,5,0,0,90 -"1494",0,0,1,34,1,1,5,1,10,5,1,0,90 -"1495",0,1,1,45,1,1,5,0,10,5,0,0,90 -"1496",0,1,0,46,2,1,5,1,10,5,1,0,90 -"1497",0,1,0,52,2,1,5,0,13,5,1,0,90 -"1498",0,1,0,42,1,1,5,1,9,5,1,0,90 -"1499",0,1,1,48,2,1,5,1,8,5,0,0,90 -"1500",0,1,0,51,4,1,5,1,7,5,0,0,90 -"1501",1,1,0,46,5,1,5,1,8,5,0,0,90 -"1502",1,1,1,47,2,1,5,0,10,5,0,0,90 -"1503",1,1,0,37,2,1,5,0,7,5,0,0,90 -"1504",0,1,0,50,2,1,5,0,10,5,1,0,90 -"1505",0,1,0,38,3,1,5,0,9,5,0,0,90 -"1506",0,1,0,56,2,1,5,0,11,5,0,0,90 -"1507",0,1,1,41,5,1,5,1,9,5,1,0,90 -"1508",0,1,0,41,1,1,5,0,7,5,0,0,90 -"1509",0,1,1,49,2,1,5,0,12,5,1,0,90 -"1510",0,1,0,62,1,1,5,0,9,5,0,0,90 -"1511",0,1,0,38,1,1,5,0,8,5,0,0,90 -"1512",0,1,0,55,1,1,5,1,3,5,0,0,90 -"1513",0,1,1,61,1,1,5,1,10,5,0,0,90 -"1514",1,0,0,50,4,1,4,1,8,1,0,0,91 -"1515",0,1,1,48,5,1,4,1,12,1,1,0,91 -"1516",0,1,0,57,2,1,4,1,1,1,0,0,91 -"1517",0,1,1,36,3,1,4,0,11,1,0,0,91 -"1518",0,1,0,51,2,1,4,0,10,1,1,0,91 -"1519",0,1,1,56,2,1,4,0,12,1,0,0,91 -"1520",0,1,1,50,2,1,4,1,9,1,0,0,91 -"1521",1,1,0,31,3,1,4,0,5,1,0,0,91 -"1522",0,1,1,58,1,1,4,0,12,1,1,0,91 -"1523",0,0,0,57,3,1,4,1,9,1,1,0,91 -"1524",0,1,1,59,2,1,4,0,8,1,0,0,91 -"1525",0,0,0,56,3,1,4,0,10,1,0,0,91 -"1526",1,1,1,48,3,1,4,1,11,1,1,0,91 -"1527",0,1,1,53,2,1,3,1,11,3,0,0,92 -"1528",0,1,1,49,2,1,3,1,9,3,0,0,92 -"1529",0,0,0,39,3,1,3,1,4,3,0,0,92 -"1530",0,1,1,55,3,1,3,1,6,3,0,0,92 -"1531",1,1,0,53,5,1,3,1,7,3,1,0,92 -"1532",0,1,0,43,2,1,3,0,11,3,1,0,92 -"1533",0,1,0,63,1,1,3,1,12,3,1,0,92 -"1534",0,1,1,39,3,1,3,1,9,3,0,0,92 -"1535",0,1,1,37,1,1,3,1,6,3,1,0,92 -"1536",1,1,1,56,4,1,3,0,11,3,1,0,92 -"1537",0,1,0,40,3,1,3,1,4,3,1,0,92 -"1538",1,1,0,40,4,1,3,0,8,3,0,0,92 -"1539",1,1,0,29,3,1,3,0,7,3,0,0,92 -"1540",0,1,1,28,4,1,3,1,3,3,0,0,92 -"1541",1,1,0,40,2,1,3,0,9,3,0,0,92 -"1542",0,1,1,29,4,1,3,1,10,3,0,0,92 -"1543",0,1,1,47,3,1,3,1,9,3,0,0,92 -"1544",0,0,1,50,5,1,3,0,3,3,0,0,92 -"1545",0,1,1,44,1,1,3,1,11,3,1,0,92 -"1546",0,1,0,32,1,1,3,0,8,3,0,0,92 -"1547",1,1,0,43,3,1,3,0,7,3,1,0,92 -"1548",0,1,1,53,2,1,3,0,10,3,0,0,92 -"1549",0,1,0,46,4,1,3,1,9,3,0,0,92 -"1550",0,1,1,41,1,1,3,1,7,3,0,0,92 -"1551",0,1,0,51,3,1,3,0,7,3,0,0,92 -"1552",0,1,0,66,1,1,4,0,12,1,1,0,93 -"1553",0,0,1,67,5,1,4,1,13,1,1,0,93 -"1554",0,0,1,59,4,1,4,1,11,1,0,0,93 -"1555",1,1,0,61,2,1,4,0,12,1,1,0,93 -"1556",1,1,0,55,2,1,4,0,10,1,0,0,93 -"1557",0,1,0,57,3,1,4,0,9,1,1,0,93 -"1558",0,1,1,62,3,1,4,1,12,1,0,0,93 -"1559",0,0,0,56,2,1,4,0,6,1,0,0,93 -"1560",0,1,1,74,1,1,4,0,10,1,1,0,93 -"1561",1,1,0,59,1,1,4,0,7,1,0,0,93 -"1562",0,1,1,59,3,1,4,1,12,1,1,0,93 -"1563",0,1,0,41,3,1,4,1,11,1,0,0,93 -"1564",0,1,0,59,3,1,4,1,11,1,1,0,93 -"1565",0,1,0,49,2,1,4,1,11,1,1,0,93 -"1566",0,1,1,61,5,1,4,1,10,1,1,0,93 -"1567",0,1,0,39,2,1,4,1,12,1,1,0,93 -"1568",0,1,1,51,4,1,4,1,7,1,1,0,93 -"1569",0,0,0,57,3,1,4,0,11,1,1,0,93 -"1570",0,0,0,67,4,1,4,0,8,1,0,0,93 -"1571",0,1,1,48,1,1,4,1,5,1,0,0,93 -"1572",0,1,1,45,4,1,4,1,10,1,0,0,93 -"1573",1,1,1,69,3,1,4,0,10,1,0,0,93 -"1574",0,1,1,71,2,1,4,0,13,1,1,0,94 -"1575",0,1,0,63,3,1,4,1,12,1,1,0,94 -"1576",0,0,0,61,5,1,4,0,9,1,0,0,94 -"1577",0,1,1,59,3,1,4,0,8,1,0,0,94 -"1578",0,1,0,50,1,1,4,1,12,1,1,0,94 -"1579",0,1,1,57,2,1,4,1,11,1,0,0,94 -"1580",0,1,1,67,3,1,4,0,10,1,1,0,94 -"1581",0,1,1,66,2,1,4,0,12,1,1,0,94 -"1582",0,1,1,82,2,1,4,0,11,1,1,0,94 -"1583",0,1,1,61,3,1,4,0,10,1,1,0,94 -"1584",0,1,1,44,5,1,4,1,10,1,1,0,95 -"1585",0,1,0,48,5,1,4,0,13,1,0,0,95 -"1586",0,1,0,45,5,1,4,1,8,1,0,0,95 -"1587",0,1,0,56,2,1,4,0,7,1,0,0,95 -"1588",0,1,0,50,1,1,4,0,10,1,1,0,95 -"1589",0,1,1,66,2,1,4,1,12,1,1,0,95 -"1590",0,0,0,46,5,1,4,1,10,1,0,0,95 -"1591",0,1,0,55,1,1,4,0,4,1,0,0,95 -"1592",0,1,0,45,4,1,4,1,2,1,0,0,95 -"1593",0,1,0,68,4,1,4,0,12,1,1,0,95 -"1594",0,1,0,50,1,1,4,0,11,1,1,0,95 -"1595",0,1,1,48,3,1,4,0,10,1,1,0,95 -"1596",0,1,0,56,3,1,4,0,12,1,1,0,95 -"1597",0,1,1,46,2,1,3,0,4,6,0,0,96 -"1598",0,0,0,47,3,1,3,0,9,6,0,0,96 -"1599",0,1,0,58,4,1,3,1,11,6,0,0,96 -"1600",1,1,0,39,2,1,3,1,3,6,0,0,96 -"1601",1,1,1,25,2,1,3,1,2,6,0,0,96 -"1602",0,1,0,65,3,1,3,1,12,6,1,0,96 -"1603",1,0,0,35,5,1,3,0,10,6,0,0,96 -"1604",0,1,1,43,2,1,3,1,8,6,0,0,96 -"1605",0,1,0,38,3,1,3,1,9,6,1,0,96 -"1606",0,1,0,47,5,1,3,1,9,6,1,0,96 -"1607",0,1,0,50,5,1,3,0,8,6,0,0,96 -"1608",0,0,1,47,3,1,3,0,6,6,1,0,96 -"1609",0,1,1,61,1,1,3,1,9,6,1,0,96 -"1610",0,1,0,49,2,1,3,1,3,6,0,0,96 -"1611",0,1,1,54,3,1,3,1,10,6,0,0,96 -"1612",0,0,1,42,2,1,3,0,10,6,0,0,96 -"1613",0,0,1,48,4,1,3,1,5,6,0,0,96 -"1614",0,0,0,42,3,1,3,0,10,6,0,0,96 -"1615",1,1,0,45,3,1,3,1,9,6,0,0,96 -"1616",0,1,1,45,3,1,4,1,6,3,0,0,97 -"1617",0,1,0,58,3,1,4,1,11,3,1,0,97 -"1618",0,1,1,50,1,1,4,1,10,3,0,0,97 -"1619",0,0,0,59,2,1,4,1,9,3,0,0,97 -"1620",0,1,0,61,1,1,4,1,10,3,1,0,97 -"1621",0,1,1,57,2,1,4,1,9,3,0,0,97 -"1622",0,1,0,38,3,1,4,0,8,3,0,0,97 -"1623",0,0,1,38,4,1,4,1,10,3,1,0,97 -"1624",0,1,1,28,2,1,4,0,10,3,0,0,97 -"1625",0,1,0,49,2,1,4,1,9,3,0,0,97 -"1626",0,1,1,59,1,1,4,0,8,3,1,0,97 -"1627",0,1,1,46,1,1,4,1,7,3,0,0,97 -"1628",0,0,1,39,2,1,4,1,3,3,0,0,97 -"1629",0,1,0,65,4,1,4,0,12,3,1,0,97 -"1630",0,1,1,67,5,1,4,0,7,3,1,0,97 -"1631",0,1,1,52,2,1,4,1,11,3,1,0,97 -"1632",0,1,1,58,4,1,4,1,10,3,0,0,97 -"1633",0,1,0,58,1,1,4,1,12,3,1,0,97 -"1634",1,1,0,48,2,1,4,1,10,3,0,0,97 -"1635",0,0,1,48,5,1,4,1,7,3,0,0,97 -"1636",1,0,1,48,5,1,4,1,8,3,0,0,97 -"1637",0,0,1,59,2,1,4,1,9,3,1,0,97 -"1638",1,1,1,49,2,1,4,0,7,3,0,0,97 -"1639",0,1,0,25,4,1,4,1,5,3,1,0,97 -"1640",0,1,0,60,1,1,4,1,10,3,1,0,97 -"1641",0,1,1,52,2,1,4,1,6,3,0,0,97 -"1642",0,1,0,63,2,1,4,1,9,3,0,0,97 -"1643",0,1,1,37,2,1,4,1,9,3,0,0,97 -"1644",0,1,0,40,5,1,4,0,10,3,0,0,97 -"1645",0,1,0,42,3,1,4,1,8,1,0,0,98 -"1646",0,1,1,58,3,1,4,1,13,1,1,0,98 -"1647",0,1,1,63,4,1,4,0,3,1,1,0,98 -"1648",0,1,0,48,1,1,4,0,8,1,0,0,98 -"1649",0,1,0,57,3,1,4,0,11,1,1,0,98 -"1650",0,1,0,57,1,1,4,0,12,1,1,0,98 -"1651",0,1,0,33,1,1,4,0,9,1,1,0,98 -"1652",0,0,1,51,3,1,4,0,13,1,1,0,98 -"1653",0,1,1,56,3,1,4,0,7,1,0,0,98 -"1654",0,0,0,50,2,1,4,1,11,1,1,0,98 -"1655",0,1,1,62,1,1,4,1,12,1,1,0,98 -"1656",0,0,1,56,3,1,4,0,10,1,1,0,98 -"1657",0,0,0,66,3,1,4,0,8,1,1,0,98 -"1658",0,1,0,55,3,1,4,0,8,1,0,0,98 -"1659",0,1,1,58,2,1,4,1,13,1,1,0,98 -"1660",1,1,0,80,2,1,4,0,12,1,1,0,98 -"1661",1,0,1,60,4,1,4,0,11,1,0,0,98 -"1662",0,1,0,53,3,1,4,1,12,1,1,0,98 -"1663",0,0,0,52,3,1,4,0,12,1,1,0,98 -"1664",1,1,1,62,3,1,4,0,12,1,1,0,98 -"1665",0,0,1,56,4,1,4,1,12,1,0,0,98 -"1666",0,1,0,51,2,1,4,1,12,1,0,0,98 -"1667",0,1,0,60,1,1,4,0,11,1,1,0,98 -"1668",0,1,1,52,1,1,4,0,11,5,0,0,99 -"1669",0,1,1,40,3,1,4,1,7,5,0,0,99 -"1670",0,1,0,61,2,1,4,1,8,5,0,0,99 -"1671",0,1,0,68,2,1,4,0,10,5,1,0,99 -"1672",0,1,1,50,3,1,4,1,8,5,0,0,99 -"1673",0,1,0,55,1,1,4,1,9,5,1,0,99 -"1674",0,1,0,59,3,1,4,1,9,5,1,0,99 -"1675",0,1,0,45,2,1,4,1,9,5,0,0,99 -"1676",0,1,1,51,1,1,4,1,10,5,1,0,99 -"1677",0,0,0,58,4,1,4,1,10,5,0,0,99 -"1678",0,1,1,41,4,1,4,1,4,5,1,0,99 -"1679",0,1,0,41,1,1,4,1,5,5,0,0,99 -"1680",0,1,1,49,3,1,4,1,10,5,1,0,99 -"1681",0,1,1,51,2,1,4,0,10,5,1,0,99 -"1682",1,1,0,48,1,1,4,0,12,5,0,0,99 -"1683",0,1,1,55,1,1,4,1,7,5,0,0,99 -"1684",0,1,0,53,3,1,4,0,8,5,1,0,99 -"1685",0,1,0,62,2,1,4,1,12,5,1,0,99 -"1686",1,1,1,52,1,1,4,1,10,5,0,0,99 -"1687",0,1,1,43,2,1,4,1,10,5,0,0,99 -"1688",0,1,1,58,1,1,4,1,7,5,1,0,99 -"1689",0,1,0,42,2,1,4,1,10,5,0,0,99 -"1690",0,1,0,49,4,1,4,0,9,5,1,0,99 -"1691",1,0,0,46,2,1,4,0,8,5,0,0,99 -"1692",0,1,0,55,2,1,4,1,7,5,0,0,99 -"1693",0,1,0,50,1,1,5,1,6,4,1,0,100 -"1694",0,1,1,65,3,1,5,0,10,4,1,0,100 -"1695",1,1,1,54,2,1,5,0,5,4,1,0,100 -"1696",0,1,1,50,3,1,5,0,8,4,0,0,100 -"1697",0,1,1,58,3,1,5,0,14,4,1,0,100 -"1698",0,1,0,62,1,1,5,0,10,4,1,0,100 -"1699",0,1,0,58,1,1,5,0,10,4,1,0,100 -"1700",0,1,1,69,1,1,5,0,9,4,0,0,100 -"1701",0,1,0,50,2,1,5,1,10,4,1,0,100 -"1702",0,1,0,66,2,1,5,1,12,4,1,0,100 -"1703",0,1,1,49,5,1,5,1,9,4,0,0,100 -"1704",0,1,0,72,1,1,5,0,9,4,0,0,100 -"1705",0,1,1,59,3,1,5,0,10,4,0,0,100 -"1706",0,0,0,48,3,1,5,1,12,4,0,0,100 -"1707",1,1,1,63,1,1,5,0,9,4,1,0,100 -"1708",0,1,0,59,1,1,5,0,11,4,1,0,100 -"1709",0,1,0,55,1,1,5,0,6,4,1,0,100 -"1710",0,1,0,60,2,1,5,1,13,4,1,0,100 -"1711",1,1,0,57,3,1,5,0,8,4,0,0,100 -"1712",0,1,1,44,4,1,5,0,9,4,0,0,100 -"1713",0,0,1,53,2,1,5,0,10,4,1,0,100 -"1714",0,1,0,44,1,1,4,0,9,6,0,0,101 -"1715",1,1,0,38,1,1,4,0,6,6,0,0,101 -"1716",1,1,0,50,2,1,4,0,9,6,0,0,101 -"1717",0,1,0,41,2,1,4,0,10,6,0,0,101 -"1718",1,0,1,43,5,1,4,0,7,6,0,0,101 -"1719",0,1,1,55,2,1,4,0,7,1,0,0,102 -"1720",0,1,0,62,4,1,4,1,9,1,0,0,102 -"1721",0,1,1,62,3,1,4,1,11,1,1,0,102 -"1722",0,1,1,60,2,1,4,1,11,1,1,0,102 -"1723",0,1,1,61,2,1,4,0,9,1,0,0,102 -"1724",0,1,1,51,1,1,4,1,9,1,1,0,102 -"1725",0,1,0,64,1,1,4,0,10,1,0,0,102 -"1726",0,1,0,53,2,1,4,1,11,1,0,0,102 -"1727",0,1,1,46,1,1,4,1,8,1,1,0,102 -"1728",1,1,1,38,1,1,4,1,7,1,0,0,102 -"1729",0,1,1,66,1,1,4,1,8,1,0,0,102 -"1730",0,1,1,62,2,1,4,1,10,1,1,0,102 -"1731",0,1,0,51,2,1,4,1,10,1,0,0,102 -"1732",0,1,0,64,3,1,4,1,12,1,1,0,102 -"1733",0,1,0,66,1,1,4,1,11,1,0,0,102 -"1734",0,1,0,45,1,1,4,0,10,1,0,0,102 -"1735",0,1,1,45,2,1,4,0,9,1,1,0,102 -"1736",1,1,1,59,2,1,4,0,11,1,0,0,102 -"1737",1,1,0,71,1,1,4,0,10,1,1,0,102 -"1738",1,1,1,46,1,1,4,0,12,1,0,0,102 -"1739",0,1,0,53,3,1,4,0,16,1,0,0,102 -"1740",1,1,1,29,5,1,4,0,9,1,0,0,102 -"1741",1,0,0,46,1,1,4,0,11,1,1,0,102 -"1742",0,1,0,60,1,1,4,0,9,1,0,0,102 -"1743",1,1,0,40,2,1,4,0,8,1,0,0,102 -"1744",0,0,1,54,3,1,4,0,6,1,0,0,102 -"1745",0,1,1,61,3,1,4,1,8,1,0,0,102 -"1746",0,1,0,62,3,1,4,0,9,1,0,0,102 -"1747",1,1,0,51,1,1,4,0,11,1,1,0,102 -"1748",0,1,0,53,2,1,5,0,11,1,1,0,103 -"1749",0,1,0,82,2,1,5,0,10,1,1,0,103 -"1750",0,0,0,63,4,1,5,1,11,1,0,0,103 -"1751",0,1,1,50,3,1,5,1,12,1,1,0,103 -"1752",0,1,0,54,2,1,5,1,7,1,1,0,103 -"1753",0,1,0,70,1,1,5,0,1,1,0,0,103 -"1754",0,1,0,64,3,1,5,1,12,1,1,0,103 -"1755",0,1,0,60,1,1,5,1,10,1,1,0,103 -"1756",0,1,0,65,3,1,5,1,10,1,1,0,103 -"1757",0,1,0,38,5,1,5,0,5,1,0,0,103 -"1758",0,0,0,63,4,1,5,1,12,1,1,0,103 -"1759",0,0,1,56,3,1,5,1,10,1,0,0,103 -"1760",0,0,1,54,3,1,5,1,8,1,1,0,103 -"1761",1,1,0,78,2,1,5,0,9,1,1,0,103 -"1762",0,1,0,63,3,1,5,0,7,1,0,0,103 -"1763",0,1,1,62,2,1,5,1,12,1,1,0,103 -"1764",1,0,0,50,5,1,5,0,9,1,1,0,103 -"1765",0,1,0,64,1,1,5,1,9,1,0,0,103 -"1766",0,1,1,62,2,1,5,1,13,1,1,0,103 -"1767",0,1,0,59,3,1,5,1,10,1,1,0,103 -"1768",0,1,0,73,2,1,5,1,9,1,1,0,103 -"1769",0,1,1,48,2,1,4,1,10,2,0,0,104 -"1770",0,1,0,57,2,1,4,1,9,2,0,0,104 -"1771",1,1,0,43,3,1,4,0,11,2,0,0,104 -"1772",0,1,1,45,4,1,4,0,2,2,0,0,104 -"1773",0,1,0,55,1,1,4,1,10,2,1,0,104 -"1774",0,1,0,61,1,1,4,0,10,2,1,0,104 -"1775",0,1,0,64,1,1,4,0,11,2,1,0,104 -"1776",0,0,1,58,5,1,4,0,13,2,1,0,104 -"1777",0,1,1,50,2,1,4,1,8,2,0,0,104 -"1778",1,0,0,55,1,1,4,0,9,2,0,0,104 -"1779",0,1,0,45,1,1,4,1,10,2,1,0,104 -"1780",0,1,1,60,1,1,4,1,6,2,0,0,104 -"1781",0,1,1,57,2,1,4,1,12,2,1,0,104 -"1782",0,1,0,46,1,1,4,1,8,2,1,0,104 -"1783",0,1,1,52,3,1,4,0,10,2,0,0,104 -"1784",1,1,0,40,5,1,4,1,9,2,0,0,104 -"1785",0,1,1,39,2,1,4,1,8,2,0,0,104 -"1786",0,0,0,50,2,1,4,1,10,2,1,0,104 -"1787",0,1,0,50,2,1,4,1,6,2,0,0,104 -"1788",0,1,0,55,2,1,2,0,10,6,0,0,105 -"1789",0,1,0,38,4,1,2,0,8,6,1,0,105 -"1790",0,1,0,55,2,1,2,1,5,6,0,0,105 -"1791",0,1,0,35,2,1,2,0,7,6,0,0,105 -"1792",0,1,0,33,3,1,2,1,10,6,0,0,105 -"1793",1,0,1,26,2,1,2,1,10,6,0,0,105 -"1794",0,1,0,52,2,1,2,0,7,6,0,0,105 -"1795",0,1,1,54,3,1,2,0,7,6,0,0,105 -"1796",1,1,0,40,4,1,2,1,5,6,0,0,105 -"1797",0,1,0,33,5,1,5,1,9,3,1,0,106 -"1798",0,1,1,61,2,1,5,0,8,3,1,0,106 -"1799",1,1,0,33,3,1,5,0,9,3,1,0,106 -"1800",0,1,0,53,2,1,5,0,10,3,1,0,106 -"1801",0,1,0,49,1,1,5,0,8,3,0,0,106 -"1802",0,1,1,63,1,1,5,1,10,3,0,0,106 -"1803",0,1,1,48,1,1,5,1,9,3,0,0,106 -"1804",0,1,0,64,3,1,5,1,11,3,1,0,106 -"1805",0,1,1,42,3,1,5,1,9,3,0,0,106 -"1806",0,1,0,46,2,1,5,0,3,3,0,0,106 -"1807",0,1,0,73,2,1,5,0,8,3,0,0,106 -"1808",0,1,0,51,2,1,5,1,10,3,0,0,106 -"1809",0,1,1,56,2,1,5,0,12,3,1,0,106 -"1810",0,1,0,55,2,1,4,1,9,4,1,0,107 -"1811",0,1,0,51,2,1,4,0,10,4,1,0,107 -"1812",0,1,0,66,1,1,4,0,8,4,0,0,107 -"1813",0,0,1,56,3,1,4,0,9,4,0,0,107 -"1814",0,1,1,50,1,1,4,0,9,4,0,0,107 -"1815",0,1,0,49,3,1,4,0,11,4,1,0,107 -"1816",0,0,1,48,3,1,4,0,9,4,0,0,107 -"1817",0,1,0,54,1,1,4,0,3,4,0,0,107 -"1818",0,1,0,51,1,1,4,1,10,4,0,0,107 -"1819",0,1,0,54,2,1,4,1,10,4,0,0,107 -"1820",0,1,1,45,1,1,4,0,9,4,0,0,107 -"1821",0,1,0,48,1,1,4,0,8,4,0,0,107 -"1822",0,1,0,53,1,1,4,1,4,4,0,0,107 -"1823",0,1,0,46,2,1,4,0,11,4,1,0,107 -"1824",0,1,0,59,1,1,4,0,8,4,0,0,107 -"1825",0,1,0,48,3,1,4,1,4,4,0,0,107 -"1826",0,1,0,50,2,1,4,1,10,4,0,0,107 -"1827",0,1,1,50,2,1,4,1,9,4,0,0,107 -"1828",0,1,1,62,1,1,4,0,9,4,0,0,108 -"1829",0,1,1,40,3,1,4,0,9,4,1,0,108 -"1830",0,1,0,44,2,1,4,1,5,4,0,0,108 -"1831",0,1,1,58,3,1,4,1,11,4,0,0,108 -"1832",0,1,1,65,2,1,4,1,10,4,0,0,108 -"1833",0,1,0,66,1,1,4,0,12,4,0,0,108 -"1834",1,1,0,57,2,1,4,1,10,4,0,0,108 -"1835",0,0,0,50,2,1,4,0,9,4,0,0,108 -"1836",0,1,0,51,2,1,4,0,9,4,1,0,108 -"1837",0,1,0,54,1,1,4,1,10,4,1,0,108 -"1838",0,1,0,47,2,1,4,1,10,4,0,0,108 -"1839",0,1,1,34,3,1,4,1,10,4,1,0,108 -"1840",0,1,1,38,2,1,4,1,4,4,0,0,108 -"1841",0,1,0,41,1,1,4,0,10,4,1,0,108 -"1842",0,1,0,54,3,1,4,1,12,4,0,0,108 -"1843",0,1,1,49,2,1,4,1,11,4,1,0,108 -"1844",0,1,1,58,5,1,4,0,12,4,1,0,108 -"1845",0,1,0,34,2,1,4,0,11,4,1,0,108 -"1846",0,1,0,47,1,1,4,0,11,4,0,0,108 -"1847",0,1,0,48,2,1,4,0,11,4,1,0,108 -"1848",1,1,0,26,2,1,4,1,8,4,0,0,108 -"1849",0,1,0,53,3,1,4,0,10,2,0,0,109 -"1850",0,1,1,58,2,1,4,0,12,2,1,0,109 -"1851",0,0,1,57,2,1,4,0,9,2,0,0,109 -"1852",0,1,0,56,2,1,4,1,8,2,1,0,109 -"1853",0,1,1,61,3,1,4,0,7,2,0,0,109 -"1854",0,0,1,60,2,1,4,0,12,2,0,0,109 -"1855",0,1,0,51,2,1,4,0,11,2,0,0,109 -"1856",1,1,0,40,4,1,4,0,9,2,0,0,109 -"1857",0,1,1,60,2,1,4,1,12,2,1,0,109 -"1858",0,1,1,49,2,1,4,0,9,2,0,0,109 -"1859",0,1,1,60,3,1,4,1,8,2,1,0,109 -"1860",0,1,0,29,2,1,4,1,13,2,1,0,109 -"1861",0,1,0,51,1,1,4,0,9,2,0,0,109 -"1862",0,1,1,70,2,1,4,1,12,2,1,0,109 -"1863",0,1,1,43,3,1,4,1,8,2,1,0,109 -"1864",1,0,0,19,5,1,5,0,11,1,1,0,110 -"1865",0,1,0,70,2,1,5,1,12,1,1,0,110 -"1866",0,1,0,48,2,1,5,1,9,1,1,0,110 -"1867",0,1,0,45,2,1,5,1,13,1,1,0,110 -"1868",0,1,1,55,1,1,5,1,9,1,0,0,110 -"1869",0,1,0,56,1,1,5,1,11,1,1,0,110 -"1870",0,1,1,61,2,1,5,1,10,1,1,0,110 -"1871",0,0,1,35,1,1,5,0,7,1,0,0,110 -"1872",0,1,1,55,2,1,5,0,12,1,1,0,110 -"1873",0,1,0,64,2,1,5,0,12,1,1,0,110 -"1874",0,1,0,69,2,1,5,1,13,1,1,0,110 -"1875",0,1,0,60,2,1,5,1,12,1,1,0,110 -"1876",0,1,1,48,3,1,5,1,11,1,1,0,110 -"1877",0,1,1,46,3,1,5,1,9,1,1,0,110 -"1878",0,1,1,41,2,1,5,0,8,1,1,0,110 -"1879",1,1,1,60,2,1,5,0,11,1,1,0,110 -"1880",0,0,0,57,1,1,5,0,10,1,1,0,110 -"1881",0,1,0,64,1,1,5,0,8,1,1,0,110 -"1882",0,1,0,54,1,1,5,1,7,2,1,0,111 -"1883",0,1,0,50,1,1,5,1,12,2,1,0,111 -"1884",0,1,0,66,1,1,5,1,8,2,1,0,111 -"1885",0,1,0,67,1,1,5,0,8,2,1,0,111 -"1886",1,1,0,57,1,1,5,1,7,2,0,0,111 -"1887",0,1,0,53,1,1,5,1,10,2,0,0,111 -"1888",0,1,0,41,1,1,5,0,6,2,1,0,111 -"1889",0,1,0,56,1,0,3,0,10,1,1,1,112 -"1890",0,1,0,50,1,0,3,0,1,1,1,1,112 -"1891",0,1,0,72,1,0,3,1,12,1,0,1,112 -"1892",0,1,0,67,2,0,3,0,12,1,1,1,112 -"1893",0,1,1,60,1,0,3,0,11,1,0,1,112 -"1894",0,1,1,66,1,0,3,0,13,1,0,1,112 -"1895",0,1,0,64,1,0,3,0,11,1,0,1,112 -"1896",0,1,0,52,1,0,3,0,12,1,1,1,112 -"1897",0,1,0,62,1,0,3,0,11,1,1,1,112 -"1898",0,1,1,47,2,0,3,0,9,1,0,1,112 -"1899",0,1,0,65,3,0,3,0,10,1,1,1,112 -"1900",0,1,0,51,1,0,3,0,12,1,1,1,112 -"1901",0,1,0,49,1,0,3,0,12,1,0,1,112 -"1902",0,1,0,53,2,0,3,0,12,1,1,1,112 -"1903",0,1,0,52,1,1,3,0,8,4,1,0,113 -"1904",0,1,0,48,1,1,3,1,10,4,0,0,113 -"1905",0,1,0,49,1,1,3,0,10,4,0,0,113 -"1906",0,1,0,63,2,1,3,0,12,4,1,0,113 -"1907",0,1,0,62,2,1,3,1,9,4,0,0,113 -"1908",0,1,1,65,2,1,3,0,11,4,1,0,113 -"1909",0,1,0,43,1,1,3,1,8,4,1,0,113 -"1910",0,1,0,44,2,1,3,1,9,4,1,0,113 -"1911",1,0,1,45,5,1,3,0,10,4,0,0,113 -"1912",0,1,0,46,2,1,3,1,8,4,1,0,113 -"1913",1,0,1,55,3,1,3,0,7,4,0,0,113 -"1914",0,1,0,54,4,1,3,1,11,4,1,0,113 -"1915",0,1,1,34,3,1,4,1,8,6,0,0,114 -"1916",0,1,0,57,2,1,4,1,8,6,1,0,114 -"1917",0,1,1,50,2,1,4,1,8,6,0,0,114 -"1918",0,1,0,28,3,1,4,0,3,6,0,0,114 -"1919",0,1,0,48,3,1,4,1,9,6,0,0,114 -"1920",0,1,0,66,1,1,4,0,4,6,0,0,114 -"1921",0,1,1,60,1,1,4,0,8,6,0,0,114 -"1922",0,1,0,59,2,1,4,1,9,6,0,0,114 -"1923",0,1,0,43,2,1,4,0,9,6,0,0,114 -"1924",1,1,0,44,2,1,4,0,8,6,0,0,114 -"1925",0,1,0,48,3,1,4,1,8,6,1,0,114 -"1926",0,1,1,43,2,1,4,1,9,6,0,0,114 -"1927",0,1,0,39,4,1,3,1,6,5,0,0,115 -"1928",0,1,1,38,1,1,3,0,9,5,0,0,115 -"1929",0,1,0,55,3,1,3,0,9,5,0,0,115 -"1930",1,1,1,43,1,1,3,0,7,5,0,0,115 -"1931",0,1,1,43,5,1,3,0,8,5,1,0,115 -"1932",0,1,1,45,2,1,3,0,11,5,0,0,115 -"1933",0,1,0,40,1,1,3,1,7,5,0,0,115 -"1934",1,0,0,45,5,1,3,0,10,5,0,0,115 -"1935",0,0,1,56,3,1,3,1,9,1,0,0,116 -"1936",0,1,0,53,3,1,3,0,8,1,0,0,116 -"1937",0,1,1,56,2,1,3,1,10,1,0,0,116 -"1938",0,1,1,51,2,1,3,1,10,1,1,0,116 -"1939",0,1,0,46,2,1,3,0,7,1,0,0,116 -"1940",0,1,0,55,1,1,3,1,10,1,0,0,116 -"1941",0,1,0,54,1,1,3,1,8,1,1,0,116 -"1942",0,0,1,57,1,1,3,1,9,1,1,0,116 -"1943",0,1,0,60,1,1,3,1,9,1,1,0,116 -"1944",0,1,0,57,2,1,3,0,9,1,1,0,116 -"1945",0,1,0,64,2,1,3,0,10,1,1,0,116 -"1946",0,1,1,60,2,1,3,1,12,1,1,0,116 -"1947",0,1,1,44,3,1,4,1,7,1,0,0,117 -"1948",0,1,1,46,3,1,4,0,9,1,1,0,117 -"1949",0,1,0,39,2,1,4,1,10,1,0,0,117 -"1950",0,1,0,61,1,1,4,1,10,1,1,0,117 -"1951",0,1,0,65,2,1,4,1,12,1,1,0,117 -"1952",1,1,1,42,5,1,4,0,8,1,0,0,117 -"1953",0,1,1,56,1,1,4,1,8,1,1,0,117 -"1954",0,1,0,65,2,1,4,0,8,1,1,0,117 -"1955",0,1,0,52,2,1,4,1,11,1,0,0,117 -"1956",0,1,0,47,2,1,4,1,9,1,1,0,117 -"1957",0,1,1,53,1,1,4,1,10,1,1,0,117 -"1958",0,1,0,60,1,1,4,0,9,1,0,0,117 -"1959",0,1,0,58,1,0,5,0,11,1,1,1,118 -"1960",0,1,0,40,5,0,5,0,3,1,1,1,118 -"1961",0,1,0,56,4,0,5,0,7,1,0,1,118 -"1962",0,1,1,44,3,0,5,0,9,1,0,1,118 -"1963",0,1,0,53,1,0,5,1,9,1,0,1,118 -"1964",0,0,1,53,5,0,5,0,9,1,0,1,118 -"1965",1,0,0,60,5,0,5,0,13,1,1,1,118 -"1966",0,1,0,50,1,0,5,1,11,1,1,1,118 -"1967",0,1,0,48,3,0,5,0,9,1,1,1,118 -"1968",0,1,0,56,2,0,5,0,10,1,1,1,118 -"1969",0,1,0,48,3,0,5,1,9,1,0,1,118 -"1970",0,0,1,45,2,1,3,1,9,5,0,0,119 -"1971",0,0,0,50,4,1,3,0,10,5,1,0,119 -"1972",0,0,0,37,2,1,3,0,11,5,1,0,119 -"1973",0,1,0,51,3,1,3,0,9,5,0,0,119 -"1974",1,1,0,59,2,1,3,0,9,5,1,0,119 -"1975",0,1,1,47,1,1,3,1,6,5,0,0,119 -"1976",0,1,0,55,3,1,3,1,12,5,1,0,119 -"1977",0,1,1,49,3,1,3,1,7,5,1,0,119 -"1978",0,0,1,61,3,1,3,1,12,5,1,0,119 -"1979",0,1,0,27,2,1,3,0,9,5,0,0,119 -"1980",1,1,1,46,3,1,3,0,7,5,1,0,119 -"1981",1,0,1,32,5,1,3,1,6,5,0,0,119 -"1982",0,1,0,51,1,1,3,0,10,5,1,0,119 -"1983",0,1,0,61,1,1,3,1,10,5,1,0,119 -"1984",0,1,1,59,5,1,5,1,10,4,1,0,120 -"1985",0,1,1,50,5,1,5,1,9,4,1,0,120 -"1986",1,1,1,63,2,1,5,0,11,4,1,0,120 -"1987",0,1,1,44,2,1,5,1,9,4,0,0,120 -"1988",0,1,0,53,3,1,5,0,8,4,0,0,120 -"1989",0,1,1,63,1,1,5,1,7,4,1,0,120 -"1990",0,1,1,56,3,1,5,1,10,4,1,0,120 -"1991",0,1,1,59,3,1,5,1,10,4,0,0,120 -"1992",0,1,0,45,3,1,5,1,8,4,0,0,120 -"1993",0,1,1,49,2,1,5,1,8,4,0,0,120 -"1994",1,1,0,49,2,1,5,0,13,4,1,0,120 -"1995",0,1,1,39,1,1,5,1,9,4,0,0,120 -"1996",1,1,1,50,3,1,5,0,7,4,1,0,120 -"1997",0,1,1,58,3,1,5,1,9,4,1,0,120 -"1998",0,1,0,55,1,1,5,1,9,4,0,0,120 -"1999",0,1,1,49,3,1,5,1,11,4,1,0,120 -"2000",0,1,1,47,4,1,5,1,10,4,0,0,120 -"2001",0,1,0,39,1,1,5,1,10,4,0,0,120 -"2002",0,1,1,43,2,1,5,1,13,4,0,0,120 -"2003",0,1,0,70,2,1,5,0,12,4,1,0,120 -"2004",0,1,0,61,1,1,5,0,12,4,1,0,120 -"2005",0,1,1,51,1,1,5,0,9,4,1,0,120 -"2006",0,0,0,52,1,1,5,0,10,4,1,0,120 -"2007",0,1,1,46,3,1,5,0,10,4,1,0,120 -"2008",0,1,1,39,2,1,5,0,10,4,0,0,120 -"2009",0,1,1,53,5,1,5,0,10,4,0,0,120 -"2010",0,1,1,49,3,1,2,0,10,3,1,0,121 -"2011",0,0,1,24,5,1,2,0,10,3,0,0,121 -"2012",0,1,0,45,3,1,2,0,8,3,0,0,121 -"2013",0,0,1,43,4,1,2,0,10,3,1,0,121 -"2014",0,1,0,60,3,1,2,1,12,3,0,0,121 -"2015",0,1,1,59,2,1,2,1,11,3,1,0,121 -"2016",0,1,0,43,2,1,2,0,7,3,0,0,121 -"2017",0,1,0,28,2,1,2,0,10,3,0,0,121 -"2018",0,1,0,44,4,1,2,1,9,3,0,0,121 -"2019",0,1,0,54,3,1,2,0,10,3,1,0,121 -"2020",0,1,0,50,2,1,2,1,6,3,0,0,121 -"2021",0,1,0,46,3,1,2,1,9,3,0,0,121 -"2022",0,1,0,39,4,1,2,0,7,3,1,0,121 -"2023",0,1,0,65,1,1,2,0,9,3,1,0,121 -"2024",1,1,1,63,1,1,2,0,10,3,1,0,121 -"2025",0,1,0,42,3,1,2,1,9,3,0,0,121 -"2026",0,1,0,66,1,1,2,1,14,3,1,0,121 -"2027",0,1,0,55,1,1,2,1,9,3,1,0,121 -"2028",0,1,0,49,2,1,2,1,9,3,0,0,121 -"2029",0,1,0,42,2,1,2,1,9,3,1,0,121 -"2030",0,1,0,45,2,1,2,0,10,3,0,0,121 -"2031",0,1,1,66,1,1,2,1,10,3,1,0,121 -"2032",0,1,0,53,1,1,4,0,11,7,1,0,122 -"2033",0,1,0,43,2,1,4,0,8,7,0,0,122 -"2034",0,1,0,55,3,1,4,1,9,7,0,0,122 -"2035",0,1,1,47,1,1,4,1,8,7,0,0,122 -"2036",1,1,0,36,3,1,4,0,4,7,0,0,122 -"2037",0,1,0,40,2,1,4,1,5,7,0,0,122 -"2038",0,1,1,48,1,1,4,0,2,7,0,0,122 -"2039",0,1,0,43,1,1,4,1,5,7,0,0,122 -"2040",0,1,0,44,2,1,4,0,5,7,0,0,122 -"2041",1,1,0,30,3,1,4,0,7,7,0,0,122 -"2042",0,1,0,53,5,1,5,0,9,4,0,0,123 -"2043",0,1,0,40,5,1,5,1,10,4,1,0,123 -"2044",0,1,0,62,5,1,5,1,9,4,1,0,123 -"2045",0,1,0,38,2,1,5,1,9,4,0,0,123 -"2046",0,0,0,47,1,1,5,0,9,4,0,0,123 -"2047",1,1,0,38,3,1,5,0,6,4,0,0,123 -"2048",1,0,0,51,2,1,5,0,11,4,1,0,123 -"2049",0,1,0,49,1,1,5,1,2,4,0,0,123 -"2050",0,1,1,51,2,1,5,0,8,4,0,0,123 -"2051",1,1,0,39,4,1,5,1,10,4,0,0,123 -"2052",0,0,0,47,3,1,5,0,8,4,0,0,123 -"2053",0,1,0,40,2,1,5,1,9,4,0,0,123 -"2054",0,1,0,45,2,1,5,1,11,4,0,0,123 -"2055",0,0,0,53,1,1,5,1,5,4,0,0,123 -"2056",0,1,1,52,2,1,5,1,9,4,0,0,123 -"2057",0,1,1,57,1,1,5,1,8,4,0,0,123 -"2058",1,0,0,32,2,1,5,0,3,4,0,0,123 -"2059",1,1,0,44,1,1,5,0,6,4,0,0,123 -"2060",0,1,0,46,2,1,5,1,5,4,0,0,123 -"2061",0,1,0,41,3,1,5,1,6,4,0,0,123 -"2062",0,1,1,51,1,1,3,0,10,4,1,0,124 -"2063",0,1,0,70,2,1,3,1,10,4,0,0,124 -"2064",0,0,1,45,3,1,3,1,6,4,0,0,124 -"2065",1,0,0,61,5,1,3,0,8,4,0,0,124 -"2066",0,1,0,37,2,1,3,1,7,4,0,0,124 -"2067",0,1,0,37,3,1,3,1,4,4,0,0,124 -"2068",0,1,0,51,2,1,3,0,10,4,1,0,124 -"2069",0,1,0,37,2,1,3,0,7,4,0,0,124 -"2070",0,1,0,57,2,1,3,0,9,4,0,0,124 -"2071",1,1,1,51,3,1,3,0,9,4,0,0,124 -"2072",0,1,0,59,3,1,3,0,11,4,1,0,124 -"2073",0,1,0,59,3,1,3,1,12,4,1,0,124 -"2074",0,1,0,47,2,1,3,0,11,4,1,0,124 -"2075",0,1,0,50,1,1,3,0,7,4,0,0,124 -"2076",0,1,1,59,1,1,3,1,11,4,1,0,124 -"2077",0,1,1,36,2,1,3,0,10,4,0,0,124 -"2078",0,1,0,57,2,1,3,0,10,4,0,0,124 -"2079",0,1,0,53,2,1,3,1,10,4,0,0,124 -"2080",1,1,0,40,2,1,3,0,9,4,1,0,124 -"2081",0,1,0,53,3,1,3,0,6,4,0,0,124 -"2082",0,0,1,25,3,1,4,1,8,5,0,0,125 -"2083",0,1,0,42,2,1,4,0,10,5,0,0,125 -"2084",1,1,0,53,3,1,4,0,9,5,0,0,125 -"2085",0,1,0,36,3,1,4,1,11,5,1,0,125 -"2086",0,1,0,46,5,1,4,0,5,5,0,0,125 -"2087",0,1,0,50,2,1,4,0,8,5,1,0,125 -"2088",0,1,1,49,1,1,4,1,9,5,1,0,125 -"2089",0,1,1,59,2,1,4,1,8,5,0,0,125 -"2090",0,1,0,48,1,1,4,1,8,5,0,0,125 -"2091",0,1,0,44,3,1,4,1,6,5,1,0,125 -"2092",0,1,0,51,2,1,4,1,11,5,0,0,125 -"2093",0,1,0,63,1,1,4,1,9,5,0,0,125 -"2094",0,1,1,45,1,1,5,0,13,1,1,0,126 -"2095",0,1,0,52,3,1,5,0,12,1,1,0,126 -"2096",0,1,0,60,2,1,5,1,12,1,1,0,126 -"2097",0,1,1,53,5,1,5,0,12,1,1,0,126 -"2098",0,1,0,51,3,1,5,1,12,1,1,0,126 -"2099",0,0,1,49,4,1,5,1,10,1,1,0,126 -"2100",0,1,0,58,2,1,5,1,12,1,1,0,126 -"2101",1,0,0,49,5,1,5,0,12,1,1,0,126 -"2102",1,1,0,41,4,1,5,1,9,1,1,0,126 -"2103",0,1,1,60,1,1,5,0,11,1,1,0,126 -"2104",0,1,0,62,2,1,5,1,9,1,1,0,126 -"2105",0,1,0,61,2,1,5,1,11,1,1,0,126 -"2106",0,1,1,64,2,1,5,0,12,1,1,0,126 -"2107",1,1,1,70,2,1,5,0,12,1,1,0,126 -"2108",0,1,0,64,2,1,5,0,9,1,1,0,126 -"2109",0,1,0,59,1,1,5,1,11,1,1,0,126 -"2110",1,1,1,52,3,1,5,0,10,1,1,0,126 -"2111",0,1,1,58,1,1,5,0,11,1,1,0,126 -"2112",0,1,0,57,3,1,5,0,13,1,1,0,126 -"2113",0,1,0,55,2,1,5,0,12,1,1,0,126 -"2114",1,1,1,64,3,1,5,0,10,1,1,0,126 -"2115",0,1,0,61,2,1,5,0,11,1,1,0,126 -"2116",0,1,0,57,2,1,5,0,4,1,1,0,126 -"2117",0,0,0,52,2,1,5,0,13,1,1,0,126 -"2118",0,1,1,59,3,1,4,1,10,3,1,0,127 -"2119",1,1,1,64,2,1,4,0,12,3,1,0,127 -"2120",0,1,1,60,2,1,4,0,13,3,0,0,127 -"2121",0,1,0,56,3,1,4,0,10,3,0,0,127 -"2122",0,1,1,74,2,1,4,0,8,3,0,0,127 -"2123",0,1,0,60,2,1,4,1,11,3,1,0,127 -"2124",0,1,1,71,2,1,4,1,11,3,1,0,127 -"2125",0,1,0,61,1,1,4,0,11,3,1,0,127 -"2126",0,1,0,60,1,1,4,1,13,3,1,0,127 -"2127",0,1,0,72,3,1,4,1,10,3,0,0,127 -"2128",0,1,0,76,2,1,4,1,11,3,1,0,127 -"2129",0,1,0,60,2,1,5,1,8,1,1,0,128 -"2130",1,1,1,61,2,1,5,0,11,1,1,0,128 -"2131",1,1,0,69,2,1,5,0,12,1,1,0,128 -"2132",0,1,0,60,2,1,5,1,9,1,1,0,128 -"2133",0,1,0,74,2,1,5,0,13,1,1,0,128 -"2134",0,1,0,61,4,1,5,0,10,1,1,0,128 -"2135",0,0,0,57,3,1,5,1,12,1,1,0,128 -"2136",0,0,0,55,3,1,5,0,13,1,1,0,128 -"2137",0,1,0,62,2,1,5,0,12,1,1,0,128 -"2138",0,1,1,69,2,1,5,1,12,1,1,0,128 -"2139",0,1,0,56,1,1,5,0,12,1,1,0,128 -"2140",0,1,0,49,3,1,5,1,12,1,1,0,128 -"2141",1,1,1,57,3,1,5,0,6,1,1,0,128 -"2142",0,0,0,69,2,1,5,0,12,1,1,0,128 -"2143",0,1,1,62,2,1,5,1,13,1,1,0,128 -"2144",0,1,0,74,2,1,5,1,13,1,1,0,128 -"2145",0,1,0,56,2,1,5,1,13,1,1,0,128 -"2146",0,1,1,70,3,1,5,0,13,1,1,0,128 -"2147",0,1,0,70,4,1,5,1,12,1,1,0,128 -"2148",0,1,1,65,1,1,5,0,12,1,1,0,128 -"2149",0,1,0,42,3,1,3,1,10,5,1,0,129 -"2150",1,0,1,55,1,1,3,0,8,5,1,0,129 -"2151",0,1,0,44,1,1,3,0,3,5,0,0,129 -"2152",0,1,0,61,1,1,3,1,10,5,1,0,129 -"2153",0,1,0,49,1,1,3,0,8,5,0,0,129 -"2154",0,1,0,65,2,1,3,1,9,5,0,0,129 -"2155",0,1,0,43,1,1,3,1,7,5,0,0,129 -"2156",0,1,0,43,2,1,3,1,7,5,0,0,129 -"2157",0,0,0,54,1,1,3,1,10,5,1,0,129 -"2158",0,1,0,48,1,1,3,0,6,5,0,0,129 -"2159",0,1,0,63,2,1,3,1,9,5,0,0,129 -"2160",0,1,0,63,1,1,3,1,10,5,0,0,129 -"2161",1,1,1,43,3,1,3,0,9,5,0,0,129 -"2162",0,1,1,52,1,1,3,1,9,5,0,0,129 -"2163",0,1,1,65,1,1,3,1,11,5,1,0,129 -"2164",0,1,1,46,1,1,3,1,9,5,0,0,129 -"2165",0,0,1,52,2,1,3,0,8,5,0,0,129 -"2166",0,1,0,30,1,1,3,1,5,5,0,0,129 -"2167",0,1,0,56,1,1,3,0,11,5,0,0,129 -"2168",0,1,0,51,3,1,3,1,9,5,0,0,129 -"2169",0,1,0,35,2,1,3,1,8,5,0,0,129 -"2170",1,0,0,47,5,1,3,0,8,5,0,0,129 -"2171",0,1,0,37,1,1,4,1,7,5,0,0,130 -"2172",0,1,0,32,3,1,4,1,8,5,1,0,130 -"2173",1,1,0,42,5,1,4,1,6,5,1,0,130 -"2174",1,0,1,30,3,1,4,0,12,5,1,0,130 -"2175",0,1,0,46,3,1,4,0,2,5,0,0,130 -"2176",0,1,1,36,2,1,4,1,6,5,0,0,130 -"2177",0,1,0,53,3,1,4,0,5,5,0,0,130 -"2178",0,0,1,41,5,1,4,1,5,5,0,0,130 -"2179",0,1,1,40,5,1,4,0,10,5,1,0,130 -"2180",0,0,0,46,4,1,4,0,10,5,0,0,130 -"2181",0,0,0,54,4,1,4,1,12,5,1,0,130 -"2182",0,1,0,63,3,1,4,0,8,5,0,0,130 -"2183",0,1,1,49,1,1,4,0,7,5,0,0,130 -"2184",0,1,0,46,4,1,4,0,9,5,1,0,130 -"2185",0,1,1,43,4,1,4,1,8,5,0,0,130 -"2186",0,1,0,50,2,1,4,0,8,5,0,0,130 -"2187",0,1,1,39,4,1,4,1,9,5,0,0,130 -"2188",0,1,1,44,2,1,4,0,3,5,0,0,130 -"2189",0,1,0,50,1,1,4,1,5,5,0,0,130 -"2190",0,0,1,50,4,1,4,1,9,5,1,0,130 -"2191",0,1,1,33,2,1,4,0,3,5,0,0,130 -"2192",0,1,1,48,1,1,4,0,7,5,0,0,130 -"2193",1,1,0,35,2,1,4,0,6,5,0,0,130 -"2194",0,1,0,41,2,1,4,1,2,5,1,0,130 -"2195",0,1,0,38,3,1,4,0,5,5,0,0,130 -"2196",0,1,0,56,2,1,4,0,10,5,1,0,130 -"2197",0,1,0,42,3,1,4,1,9,5,0,0,130 -"2198",0,1,1,58,2,0,4,1,12,1,1,1,131 -"2199",1,1,0,52,3,0,4,0,12,1,1,1,131 -"2200",0,1,0,70,1,0,4,0,11,1,0,1,131 -"2201",0,1,0,55,2,0,4,0,11,1,0,1,131 -"2202",0,1,0,62,1,0,4,0,5,1,0,1,131 -"2203",0,1,1,51,3,0,4,0,10,1,0,1,131 -"2204",0,1,1,53,1,0,4,0,11,1,0,1,131 -"2205",0,1,1,45,2,0,4,0,11,1,0,1,131 -"2206",0,1,1,53,2,0,4,0,11,1,0,1,131 -"2207",0,1,0,51,1,0,4,0,11,1,0,1,131 -"2208",0,1,0,54,3,0,4,0,12,1,1,1,131 -"2209",0,1,0,50,2,0,4,0,12,1,0,1,131 -"2210",0,1,0,33,1,0,4,0,9,1,1,1,131 -"2211",0,1,0,51,2,0,4,0,12,1,1,1,131 -"2212",0,0,0,54,2,0,4,1,11,1,0,1,131 -"2213",0,1,0,53,3,0,4,0,9,1,0,1,131 -"2214",0,1,0,36,2,0,4,0,8,1,1,1,131 -"2215",0,1,1,41,1,0,4,0,12,1,1,1,131 -"2216",0,1,1,45,1,0,4,0,11,1,0,1,131 -"2217",0,1,0,51,2,0,4,0,10,1,1,1,131 -"2218",0,1,1,52,1,0,4,0,12,1,1,1,131 -"2219",0,0,0,48,5,0,4,0,11,1,1,1,131 -"2220",0,1,0,72,3,0,4,1,9,1,1,1,131 -"2221",0,1,0,45,2,1,3,1,11,3,1,0,132 -"2222",0,1,1,63,1,1,3,1,8,3,0,0,132 -"2223",1,1,1,49,3,1,3,1,9,3,0,0,132 -"2224",1,1,1,47,1,1,3,1,10,3,0,0,132 -"2225",0,1,1,52,1,1,3,0,10,3,0,0,132 -"2226",0,1,0,66,1,1,3,0,11,3,0,0,132 -"2227",0,1,0,70,1,1,3,0,10,3,0,0,132 -"2228",1,0,1,36,1,1,3,0,9,3,0,0,132 -"2229",0,1,0,50,1,1,3,1,8,3,0,0,132 -"2230",0,1,1,66,3,1,3,0,9,3,1,0,132 -"2231",0,1,0,54,2,1,3,0,8,3,1,0,132 -"2232",0,0,0,43,3,1,3,0,12,3,1,0,132 -"2233",0,1,1,59,2,1,3,0,11,3,0,0,132 -"2234",1,1,1,48,2,1,3,0,10,3,1,0,132 -"2235",0,1,1,61,1,1,3,0,10,3,1,0,132 -"2236",0,1,1,51,1,1,3,1,10,3,0,0,132 -"2237",0,1,1,46,1,1,3,0,12,3,0,0,132 -"2238",1,1,1,43,2,1,3,0,6,3,0,0,132 -"2239",0,1,0,48,2,1,3,1,9,3,0,0,132 -"2240",0,1,0,56,1,1,4,1,9,5,0,0,133 -"2241",0,1,0,52,1,1,4,1,11,5,0,0,133 -"2242",1,1,0,32,2,1,4,0,6,5,0,0,133 -"2243",0,1,1,60,2,1,4,1,9,5,0,0,133 -"2244",0,1,0,41,1,1,4,1,7,5,0,0,133 -"2245",0,1,0,57,3,1,4,1,9,5,0,0,133 -"2246",0,0,0,38,3,1,4,0,8,5,0,0,133 -"2247",1,1,1,55,2,1,4,0,10,5,0,0,133 -"2248",0,1,0,48,2,1,4,1,9,5,0,0,133 -"2249",0,1,0,52,3,1,4,1,10,5,0,0,133 -"2250",1,1,1,37,3,1,4,1,9,5,0,0,133 -"2251",0,0,0,55,2,1,4,0,9,5,0,0,133 -"2252",1,1,0,48,2,1,4,1,6,5,0,0,133 -"2253",1,0,1,53,2,1,4,0,10,5,0,0,133 -"2254",0,1,0,57,3,1,4,0,10,5,1,0,133 -"2255",0,1,1,44,1,1,4,1,6,5,0,0,133 -"2256",0,1,1,47,3,1,4,1,5,5,0,0,133 -"2257",0,1,0,52,2,1,4,0,9,5,0,0,133 -"2258",0,1,0,54,2,1,4,1,12,5,1,0,133 -"2259",0,1,1,50,3,1,4,1,11,1,0,0,134 -"2260",0,1,1,60,2,1,4,0,12,1,0,0,134 -"2261",0,1,0,70,1,1,4,0,12,1,1,0,134 -"2262",0,1,1,46,3,1,4,0,8,1,1,0,134 -"2263",0,1,1,56,2,1,4,0,11,1,1,0,134 -"2264",1,0,1,53,4,1,4,0,8,1,1,0,134 -"2265",1,0,1,54,3,1,4,0,13,1,1,0,134 -"2266",0,1,1,63,3,1,4,1,10,1,0,0,134 -"2267",0,1,1,54,5,1,4,1,11,1,0,0,134 -"2268",0,1,0,72,1,1,4,0,10,1,1,0,134 -"2269",0,1,1,58,2,1,4,1,9,1,1,0,134 -"2270",0,1,0,52,2,1,4,1,10,1,1,0,134 -"2271",0,1,1,72,3,1,4,1,8,1,0,0,134 -"2272",0,0,0,44,2,1,4,0,10,1,0,1,135 -"2273",0,1,0,45,2,1,4,0,11,1,1,1,135 -"2274",0,1,1,55,1,1,4,1,10,1,0,1,135 -"2275",0,1,1,46,2,1,4,1,10,1,0,1,135 -"2276",0,1,1,51,2,1,4,1,9,1,0,1,135 -"2277",0,1,1,63,2,1,4,0,11,1,1,1,135 -"2278",0,1,1,67,3,1,4,0,12,1,1,1,135 -"2279",0,1,0,49,2,1,4,1,12,1,0,1,135 -"2280",1,1,1,48,4,1,4,1,9,1,0,1,135 -"2281",0,1,1,53,2,1,4,1,13,1,0,1,135 -"2282",0,1,1,48,1,1,4,0,13,1,0,1,135 -"2283",0,1,1,57,3,1,4,1,11,1,1,1,135 -"2284",0,1,0,61,1,1,4,0,8,1,0,1,135 -"2285",0,0,1,59,1,1,4,0,11,1,1,1,135 -"2286",0,1,0,49,2,1,4,1,10,1,1,1,135 -"2287",0,1,1,53,1,1,4,0,11,1,1,1,135 -"2288",0,1,1,49,3,1,4,0,13,1,1,1,135 -"2289",0,1,0,73,1,1,4,0,11,1,1,1,135 -"2290",0,0,1,54,3,1,4,1,9,4,0,0,136 -"2291",1,0,1,60,1,1,4,0,10,4,1,0,136 -"2292",1,1,1,47,1,1,4,0,5,4,0,0,136 -"2293",1,1,1,39,3,1,4,0,5,4,1,0,136 -"2294",0,1,1,47,3,1,4,1,9,4,0,0,136 -"2295",0,1,1,45,3,1,4,0,5,4,0,0,136 -"2296",0,1,0,52,2,1,4,0,9,4,1,0,136 -"2297",1,0,1,53,2,1,4,1,4,4,0,0,136 -"2298",0,0,0,63,2,1,4,0,8,4,0,0,136 -"2299",0,1,1,58,1,1,4,0,14,4,1,0,136 -"2300",0,1,0,38,2,1,4,1,3,4,0,0,136 -"2301",0,1,0,49,3,1,4,1,6,4,0,0,136 -"2302",0,1,1,52,3,1,4,0,12,4,1,0,136 -"2303",1,1,1,57,2,1,4,0,10,4,1,0,136 -"2304",1,1,1,51,1,1,4,0,9,4,1,0,136 -"2305",1,1,0,50,3,1,4,1,8,4,0,0,136 -"2306",0,1,1,38,2,1,4,1,4,4,0,0,136 -"2307",0,1,0,61,3,1,3,1,10,4,0,0,137 -"2308",0,1,0,43,3,1,3,1,8,4,0,0,137 -"2309",0,1,0,52,3,1,3,1,10,4,0,0,137 -"2310",0,1,0,49,3,1,3,1,13,4,1,0,137 -"2311",1,1,1,50,3,1,3,1,9,4,0,0,137 -"2312",0,1,0,44,3,1,3,1,8,4,0,0,137 -"2313",1,1,1,44,3,1,3,1,8,4,0,0,137 -"2314",0,1,0,48,2,1,3,0,6,4,0,0,137 -"2315",0,0,1,46,3,1,3,0,8,4,0,0,137 -"2316",0,1,1,44,2,1,3,1,9,4,0,0,137 -"2317",0,1,0,58,2,1,3,1,10,4,1,0,137 -"2318",0,1,1,48,3,1,3,0,9,4,0,0,137 -"2319",0,1,0,66,1,1,4,1,10,3,1,0,138 -"2320",1,1,0,55,5,1,4,0,10,3,0,0,138 -"2321",0,1,0,49,1,1,4,1,9,3,0,0,138 -"2322",0,1,0,52,1,1,4,1,11,3,0,0,138 -"2323",1,1,0,57,3,1,4,0,10,3,0,0,138 -"2324",0,1,1,61,4,1,4,1,9,3,0,0,138 -"2325",0,0,1,54,1,1,4,0,10,3,0,0,138 -"2326",0,1,1,54,2,1,4,1,8,3,0,0,138 -"2327",0,1,1,67,2,1,4,1,10,3,0,0,138 -"2328",0,1,0,54,1,1,4,1,12,3,0,0,138 -"2329",0,1,1,48,2,1,4,0,11,3,0,0,138 -"2330",1,0,1,50,5,1,4,0,11,3,1,0,138 -"2331",0,1,0,54,3,1,4,0,10,3,0,0,138 -"2332",0,1,1,61,1,1,4,1,10,3,0,0,138 -"2333",0,0,0,65,2,1,4,1,9,3,0,0,138 -"2334",1,0,1,62,3,1,4,0,10,3,1,0,138 -"2335",0,1,1,66,2,1,4,1,8,3,0,0,138 -"2336",0,1,1,53,1,1,4,1,10,3,1,0,138 -"2337",0,1,1,54,2,1,4,1,8,3,0,0,138 -"2338",0,0,0,55,1,1,4,0,6,3,0,0,138 -"2339",0,1,0,59,1,1,4,1,12,3,1,0,138 -"2340",0,0,1,62,1,1,4,0,11,3,1,0,138 -"2341",0,1,1,66,1,1,4,1,10,3,1,0,138 -"2342",0,1,0,61,2,1,4,1,10,3,1,0,138 -"2343",0,0,0,45,3,1,4,0,10,3,1,0,138 -"2344",0,0,0,29,5,1,4,0,9,3,1,0,138 -"2345",0,1,0,56,2,1,4,0,11,3,1,0,138 -"2346",0,1,0,49,1,1,4,0,7,6,0,0,139 -"2347",0,1,0,52,2,1,4,1,6,6,0,0,139 -"2348",0,1,0,55,1,1,4,1,10,6,1,0,139 -"2349",0,1,0,50,1,1,4,1,11,6,1,0,139 -"2350",0,1,1,51,3,1,4,1,8,6,0,0,139 -"2351",0,1,0,44,1,1,4,0,9,6,0,0,139 -"2352",0,1,0,50,2,1,4,1,8,6,0,0,139 -"2353",1,1,0,49,1,1,4,1,5,6,0,0,139 -"2354",0,1,1,48,2,1,4,1,11,6,1,0,139 -"2355",0,1,0,45,3,1,4,1,7,6,1,0,139 -"2356",0,1,0,68,1,1,4,0,11,6,0,0,139 -"2357",0,0,0,58,4,1,4,0,7,6,0,0,139 -"2358",0,1,1,47,2,1,4,0,11,6,0,0,139 -"2359",0,1,1,50,3,1,4,1,3,6,0,0,139 -"2360",0,1,1,56,2,1,4,0,10,3,1,0,140 -"2361",0,1,0,39,1,1,4,0,9,3,0,0,140 -"2362",0,1,1,66,2,1,4,0,13,3,1,0,140 -"2363",0,1,0,34,1,1,4,0,8,3,0,0,140 -"2364",0,1,0,43,1,1,4,0,10,3,1,0,140 -"2365",0,1,1,33,3,1,4,0,4,3,0,0,140 -"2366",0,1,1,49,2,1,4,1,5,3,0,0,140 -"2367",0,1,0,59,1,1,4,1,9,3,0,0,140 -"2368",1,1,0,38,2,1,4,0,8,3,0,0,140 -"2369",1,1,0,30,2,1,4,0,8,3,0,0,140 -"2370",0,1,0,47,2,1,4,0,10,3,0,0,140 -"2371",0,1,0,56,1,1,4,1,9,3,0,0,140 -"2372",1,1,0,57,3,1,4,0,10,3,1,0,140 -"2373",0,1,0,45,1,1,4,1,9,3,0,0,140 -"2374",0,1,0,40,2,1,4,0,10,3,0,0,140 -"2375",0,1,0,58,2,1,4,1,9,3,0,0,140 -"2376",0,1,1,40,1,1,4,1,10,3,0,0,140 -"2377",0,1,1,50,2,1,4,0,10,3,0,0,140 -"2378",0,0,1,45,2,1,4,1,8,3,0,0,140 -"2379",0,1,1,53,1,1,4,0,10,3,1,0,140 -"2380",0,1,0,40,3,1,4,1,6,3,0,0,140 -"2381",0,1,0,61,3,1,4,1,9,3,1,0,140 -"2382",0,0,0,35,3,1,4,1,7,3,0,0,140 -"2383",0,1,0,41,2,1,4,0,9,3,0,0,140 -"2384",0,1,0,47,2,1,4,1,8,2,0,0,141 -"2385",1,1,0,39,3,1,4,0,6,2,0,0,141 -"2386",0,1,0,62,5,1,4,0,11,2,1,0,141 -"2387",0,1,1,47,4,1,4,0,10,2,1,0,141 -"2388",0,1,0,44,4,1,4,0,10,2,0,0,141 -"2389",0,1,0,48,2,1,4,0,11,2,1,0,141 -"2390",0,0,1,47,5,1,4,0,5,2,1,0,141 -"2391",1,1,0,41,1,1,4,0,6,2,0,0,141 -"2392",0,1,0,57,2,1,4,0,9,2,0,0,141 -"2393",0,1,0,49,2,1,4,1,8,2,1,0,141 -"2394",0,1,0,51,2,1,4,0,12,2,0,0,141 -"2395",0,0,0,43,3,1,4,1,9,2,1,0,141 -"2396",0,1,1,39,3,1,4,1,8,2,1,0,141 -"2397",0,1,0,50,2,1,4,1,5,2,0,0,141 -"2398",0,1,1,50,3,1,4,0,10,2,1,0,141 -"2399",0,1,0,50,5,1,4,0,10,2,1,0,141 -"2400",0,1,0,49,3,1,4,0,11,2,1,0,141 -"2401",0,1,0,53,2,1,4,1,13,2,1,0,141 -"2402",0,1,0,58,1,1,4,1,9,2,1,0,141 -"2403",1,0,0,59,1,1,4,0,12,2,1,0,141 -"2404",0,0,0,46,3,1,4,0,12,2,1,0,141 -"2405",0,1,0,51,3,1,4,1,10,2,0,0,141 -"2406",0,1,0,56,1,1,4,0,7,2,1,0,141 -"2407",0,1,0,45,2,1,4,1,5,2,1,0,141 -"2408",0,1,0,59,1,1,4,0,10,2,0,0,141 -"2409",0,0,0,52,2,1,4,1,10,2,1,0,141 -"2410",0,1,0,43,2,1,4,0,8,2,1,0,141 -"2411",1,1,0,48,3,1,4,0,7,2,1,0,141 -"2412",0,0,0,57,1,1,4,1,4,2,1,0,141 -"2413",0,1,1,47,2,1,4,0,7,1,0,0,142 -"2414",0,1,0,37,5,1,4,0,4,1,0,0,142 -"2415",0,1,0,30,3,1,4,0,9,1,1,0,142 -"2416",0,1,1,45,2,1,4,0,11,1,0,0,142 -"2417",1,1,1,42,3,1,4,1,8,1,0,0,142 -"2418",0,0,0,47,2,1,4,0,10,1,1,0,142 -"2419",0,1,0,60,4,1,4,1,8,1,0,0,142 -"2420",0,1,1,33,5,1,4,0,2,1,1,0,142 -"2421",1,1,1,36,4,1,4,1,9,1,0,0,142 -"2422",0,1,0,59,2,1,4,0,10,1,0,0,142 -"2423",0,1,0,50,2,1,4,1,7,1,0,0,142 -"2424",0,1,0,57,2,1,4,1,7,1,1,0,142 -"2425",0,1,0,44,2,1,4,1,12,1,1,0,142 -"2426",0,1,0,62,2,1,4,0,5,1,0,0,142 -"2427",1,1,0,41,3,1,4,0,14,1,1,0,142 -"2428",0,1,0,46,4,1,4,1,5,4,0,0,143 -"2429",0,1,1,62,1,1,4,0,8,4,1,0,143 -"2430",0,1,1,45,2,1,4,0,9,4,0,0,143 -"2431",1,1,1,45,3,1,4,0,10,4,0,0,143 -"2432",1,1,1,56,5,1,4,0,10,4,0,0,143 -"2433",0,1,0,64,3,1,4,0,5,4,0,0,143 -"2434",0,1,0,45,3,1,4,1,12,4,0,0,143 -"2435",0,1,0,48,4,1,4,1,9,4,0,0,143 -"2436",0,1,1,50,2,1,4,0,10,4,1,0,143 -"2437",0,1,0,54,1,1,4,0,6,4,1,0,143 -"2438",0,1,0,46,2,1,4,1,9,4,1,0,143 -"2439",0,1,1,36,3,1,4,1,8,4,0,0,143 -"2440",0,1,1,53,3,1,4,0,7,3,0,0,144 -"2441",0,1,0,56,1,1,4,1,11,3,1,0,144 -"2442",0,1,0,72,3,1,4,1,11,3,1,0,144 -"2443",0,1,1,50,1,1,4,1,13,3,1,0,144 -"2444",1,0,1,55,5,1,4,1,9,3,1,0,144 -"2445",0,1,0,62,4,1,4,0,12,3,1,0,144 -"2446",0,1,0,28,1,1,4,1,7,3,0,0,144 -"2447",0,1,0,47,2,1,4,1,11,3,0,0,144 -"2448",0,1,1,66,3,1,4,0,11,3,1,0,144 -"2449",0,1,1,36,2,1,4,1,9,3,1,0,144 -"2450",0,1,1,32,5,1,4,0,7,3,0,0,144 -"2451",0,0,1,53,5,1,4,0,11,3,0,0,144 -"2452",0,1,0,50,2,1,4,0,12,3,1,0,144 -"2453",1,0,1,48,3,1,4,0,8,3,0,0,144 -"2454",0,0,0,47,1,1,4,1,9,3,1,0,144 -"2455",0,1,0,51,2,1,4,1,9,3,0,0,144 -"2456",0,1,1,47,5,1,4,0,10,3,1,0,144 -"2457",0,1,1,63,3,1,4,1,11,3,1,0,144 -"2458",0,1,1,58,3,1,4,1,13,3,1,0,144 -"2459",0,1,0,49,1,1,4,0,10,3,1,0,144 -"2460",0,1,0,48,1,1,4,1,12,2,1,0,145 -"2461",1,1,0,56,2,1,4,0,11,2,1,0,145 -"2462",0,1,0,60,3,1,4,1,10,2,0,0,145 -"2463",0,1,1,63,3,1,4,1,11,2,0,0,145 -"2464",0,1,1,62,1,1,4,1,12,2,1,0,145 -"2465",0,1,1,50,2,1,4,1,13,2,0,0,145 -"2466",0,1,0,57,1,1,4,0,12,2,0,0,145 -"2467",0,1,1,53,2,1,4,1,11,2,1,0,145 -"2468",0,1,1,60,3,1,4,1,10,2,0,0,145 -"2469",0,1,1,43,2,1,4,0,10,2,1,0,145 -"2470",0,1,1,60,4,1,4,1,10,2,1,0,145 -"2471",1,1,1,51,4,1,4,0,12,2,1,0,145 -"2472",0,1,1,65,1,1,4,1,11,2,0,0,145 -"2473",0,1,0,48,2,1,4,0,8,2,0,0,145 -"2474",0,1,1,53,1,1,4,0,12,2,1,0,145 -"2475",0,1,1,62,1,1,4,1,11,2,1,0,145 -"2476",0,1,1,60,2,1,4,1,12,2,1,0,145 -"2477",0,1,0,46,2,1,5,1,8,6,0,0,146 -"2478",0,1,0,52,3,1,5,1,10,6,0,0,146 -"2479",1,1,1,49,2,1,5,0,5,6,0,0,146 -"2480",0,1,0,55,1,1,5,1,10,6,0,0,146 -"2481",0,1,1,39,2,1,5,1,10,6,0,0,146 -"2482",0,1,0,48,1,1,5,0,10,6,0,0,146 -"2483",0,0,0,45,2,1,5,0,5,6,0,0,146 -"2484",0,1,0,47,2,1,5,1,3,6,0,0,146 -"2485",1,1,0,45,3,1,5,1,9,6,0,0,146 -"2486",0,1,1,52,1,1,5,1,9,6,0,0,146 -"2487",0,0,0,57,3,1,5,1,5,6,1,0,146 -"2488",0,1,0,53,1,1,5,1,6,6,0,0,146 -"2489",0,1,1,59,1,1,5,0,8,6,0,0,146 -"2490",0,1,1,56,1,1,4,0,12,2,1,0,147 -"2491",0,1,1,56,1,1,4,0,11,2,1,0,147 -"2492",0,0,0,61,2,1,4,0,10,2,1,0,147 -"2493",0,1,0,63,1,1,4,1,12,2,1,0,147 -"2494",0,1,1,48,1,1,4,0,7,2,0,0,147 -"2495",0,1,1,47,2,1,4,0,10,2,0,0,147 -"2496",0,0,0,62,1,1,4,0,11,2,1,0,147 -"2497",0,1,1,58,1,1,4,1,13,2,1,0,147 -"2498",0,1,1,55,3,1,4,1,10,2,1,0,147 -"2499",0,1,1,43,3,1,4,0,9,2,0,0,147 -"2500",0,1,0,64,1,1,4,1,8,2,0,0,147 -"2501",0,1,0,62,2,1,4,1,9,2,0,0,147 -"2502",0,0,0,43,5,1,4,0,9,2,0,0,147 -"2503",0,1,0,51,1,1,4,0,7,2,1,0,147 -"2504",0,1,1,51,3,1,4,1,11,2,0,0,147 -"2505",0,1,0,66,2,1,4,1,9,2,1,0,147 -"2506",0,1,0,61,3,1,4,0,12,2,1,0,147 -"2507",0,0,0,69,1,1,4,0,13,2,1,0,147 -"2508",0,1,1,48,1,1,4,0,11,2,1,0,147 -"2509",0,1,0,59,1,1,4,0,10,2,0,0,147 -"2510",0,1,0,57,1,1,4,1,11,2,0,0,147 -"2511",0,1,0,49,5,1,4,1,7,3,0,0,148 -"2512",0,1,0,55,2,1,4,0,10,3,0,0,148 -"2513",0,1,0,48,3,1,4,0,10,3,0,0,148 -"2514",0,1,0,54,2,1,4,0,9,3,0,0,148 -"2515",1,1,0,45,2,1,4,0,5,3,0,0,148 -"2516",0,1,1,48,4,1,4,1,7,3,0,0,148 -"2517",0,1,0,65,1,1,4,1,8,3,0,0,148 -"2518",0,1,0,50,1,1,4,0,10,3,1,0,148 -"2519",0,1,0,46,3,1,4,0,10,3,0,0,148 -"2520",0,1,0,46,2,1,4,1,9,3,0,0,148 -"2521",0,0,0,52,5,1,4,0,9,3,0,0,148 -"2522",0,1,1,45,2,1,4,0,7,3,0,0,148 -"2523",1,1,1,44,2,1,4,0,5,3,0,0,148 -"2524",0,1,0,55,1,1,4,1,9,3,0,0,148 -"2525",0,1,1,29,3,1,4,0,10,3,1,0,148 -"2526",0,1,0,49,2,1,4,1,9,3,1,0,148 -"2527",0,1,0,60,1,1,4,1,10,3,1,0,148 -"2528",0,0,1,58,2,1,4,1,12,3,1,0,148 -"2529",0,1,1,64,3,1,3,1,8,3,1,0,149 -"2530",0,1,0,27,2,1,3,1,6,3,0,0,149 -"2531",0,0,0,36,5,1,3,1,10,3,0,0,149 -"2532",0,1,0,50,3,1,3,0,10,3,1,0,149 -"2533",1,0,0,46,3,1,3,0,9,3,0,0,149 -"2534",0,1,0,45,2,1,3,1,10,3,0,0,149 -"2535",1,1,1,37,3,1,3,0,5,3,0,0,149 -"2536",0,0,0,52,5,1,3,0,9,3,0,0,149 -"2537",0,1,0,38,5,1,3,0,7,3,0,0,149 -"2538",0,1,0,55,2,1,3,1,11,3,1,0,149 -"2539",0,1,0,50,1,1,3,0,10,3,0,0,149 -"2540",0,1,1,66,2,1,4,0,9,4,1,0,150 -"2541",1,1,0,50,5,1,4,1,8,4,0,0,150 -"2542",0,1,1,62,2,1,4,1,10,4,0,0,150 -"2543",0,1,0,34,5,1,4,0,8,4,1,0,150 -"2544",1,1,1,59,3,1,4,1,6,4,0,0,150 -"2545",0,1,1,49,2,1,4,1,9,4,1,0,150 -"2546",0,0,0,36,1,1,4,1,6,4,0,0,150 -"2547",0,1,1,44,3,1,4,1,4,4,0,0,150 -"2548",0,1,1,53,3,1,4,0,11,4,1,0,150 -"2549",0,1,0,65,3,1,4,0,11,4,0,0,150 -"2550",0,0,0,54,3,1,4,0,10,4,0,0,150 -"2551",0,1,1,44,4,1,4,0,10,4,1,0,150 -"2552",0,1,0,53,2,1,4,0,11,4,0,0,150 -"2553",0,1,0,34,5,1,4,0,2,4,0,0,150 -"2554",0,1,0,55,5,1,4,0,11,4,0,0,150 -"2555",0,1,0,45,1,1,4,1,10,4,0,0,150 -"2556",0,1,0,64,3,1,4,1,11,4,1,0,150 -"2557",0,1,0,63,4,1,4,1,11,4,0,0,150 -"2558",0,1,1,38,3,1,4,0,8,4,0,0,150 -"2559",0,1,1,68,2,1,4,0,10,2,1,0,151 -"2560",0,1,1,42,2,1,4,0,12,2,0,0,151 -"2561",0,1,0,53,2,1,4,1,7,2,1,0,151 -"2562",0,1,0,73,4,1,4,1,11,2,1,0,151 -"2563",0,1,1,42,2,1,4,1,11,2,1,0,151 -"2564",0,1,0,55,3,1,4,0,13,2,1,0,151 -"2565",0,1,0,55,3,1,4,0,9,2,0,0,151 -"2566",0,1,1,63,2,1,4,1,13,2,1,0,151 -"2567",0,1,0,65,4,1,4,1,7,2,1,0,151 -"2568",0,1,1,64,2,1,4,1,12,2,1,0,151 -"2569",0,1,0,74,2,1,4,0,12,2,1,0,151 -"2570",0,1,1,44,4,1,4,0,12,2,1,0,151 -"2571",0,1,0,60,2,1,4,1,8,2,1,0,151 -"2572",0,1,1,35,4,1,4,1,7,2,0,0,151 -"2573",0,0,0,52,2,1,4,1,12,2,1,0,151 -"2574",0,1,1,60,3,1,4,1,12,2,1,0,151 -"2575",0,1,1,71,3,1,4,0,11,2,1,0,151 -"2576",0,1,0,72,4,1,4,1,12,2,1,0,151 -"2577",0,1,1,51,2,1,4,0,12,2,1,0,151 -"2578",0,1,0,55,3,1,4,0,10,2,0,0,151 -"2579",0,1,0,78,2,1,4,0,12,1,1,0,152 -"2580",0,1,0,64,1,1,5,0,12,1,1,0,153 -"2581",0,1,0,52,3,1,5,1,9,1,0,0,153 -"2582",0,1,1,59,2,1,5,1,8,1,0,0,153 -"2583",0,1,0,46,2,1,5,1,5,1,0,0,153 -"2584",0,1,1,72,1,1,5,1,10,1,1,0,153 -"2585",0,1,1,62,2,1,5,0,12,1,1,0,153 -"2586",0,1,0,53,5,1,5,1,12,1,1,0,153 -"2587",0,1,0,55,2,1,5,1,8,1,1,0,153 -"2588",0,0,0,50,3,1,5,0,12,1,1,0,153 -"2589",0,1,0,42,3,1,5,0,12,1,1,0,153 -"2590",0,1,0,61,1,1,5,0,13,1,1,0,153 -"2591",0,0,0,56,1,1,5,0,12,1,1,0,153 -"2592",0,1,0,65,2,1,5,1,11,1,1,0,153 -"2593",0,1,1,67,1,1,4,1,11,2,1,0,154 -"2594",0,1,0,44,2,1,4,1,8,2,0,0,154 -"2595",0,1,1,70,1,1,4,0,9,2,1,0,154 -"2596",0,1,0,51,2,1,4,0,8,2,0,0,154 -"2597",0,0,1,68,5,1,4,1,9,2,1,0,154 -"2598",0,1,1,67,3,1,4,0,10,2,1,0,154 -"2599",0,1,0,50,3,1,4,0,10,2,1,0,154 -"2600",0,0,1,52,3,1,4,0,10,2,1,0,154 -"2601",0,1,0,47,2,1,4,1,9,2,1,0,154 -"2602",0,1,0,65,1,1,4,0,12,2,1,0,154 -"2603",0,0,1,59,1,1,4,0,11,2,1,0,154 -"2604",1,1,0,42,5,1,4,1,6,2,0,0,154 -"2605",0,1,0,56,4,1,4,0,11,2,1,0,154 -"2606",0,0,1,53,3,1,4,0,11,2,1,0,154 -"2607",0,1,0,56,3,1,4,1,9,2,1,0,154 -"2608",0,1,1,61,2,1,4,1,10,2,0,0,154 -"2609",0,1,1,53,3,1,4,1,11,2,1,0,154 -"2610",0,1,1,64,1,1,4,0,12,2,1,0,154 -"2611",0,1,0,60,1,1,4,0,9,2,1,0,154 -"2612",0,1,1,50,3,1,4,1,10,3,0,0,155 -"2613",0,1,1,54,1,1,4,0,11,3,0,0,155 -"2614",0,1,0,55,2,1,4,0,9,3,0,0,155 -"2615",0,1,1,55,1,1,4,1,9,3,0,0,155 -"2616",1,1,1,58,1,1,4,0,9,3,1,0,155 -"2617",0,1,0,63,3,1,4,1,11,3,1,0,155 -"2618",0,1,0,61,2,1,4,1,10,3,0,0,155 -"2619",0,1,1,46,1,1,4,1,9,3,0,0,155 -"2620",0,1,0,61,2,1,4,1,11,3,0,0,155 -"2621",0,1,1,54,3,1,4,1,11,3,0,0,155 -"2622",0,1,0,49,3,1,4,1,7,3,0,0,155 -"2623",0,0,0,52,2,1,4,0,9,3,0,0,155 -"2624",0,1,0,47,1,1,4,1,10,3,0,0,155 -"2625",0,1,1,58,3,1,4,0,8,3,0,0,155 -"2626",0,1,0,50,4,1,4,0,8,3,0,0,155 -"2627",0,1,1,50,2,0,5,1,9,1,0,1,156 -"2628",0,1,1,50,1,0,5,1,12,1,1,1,156 -"2629",0,1,0,49,3,0,5,1,10,1,1,1,156 -"2630",0,1,1,51,1,0,5,1,9,1,0,1,156 -"2631",0,1,0,54,2,0,5,1,12,1,1,1,156 -"2632",0,1,0,47,1,0,5,1,11,1,0,1,156 -"2633",0,1,1,54,1,0,5,1,10,1,1,1,156 -"2634",0,1,0,49,2,0,5,1,12,1,1,1,156 -"2635",0,1,0,63,2,0,5,0,7,1,1,1,156 -"2636",0,1,1,57,2,0,5,1,12,1,1,1,156 -"2637",0,1,0,65,1,0,5,1,13,1,1,1,156 -"2638",0,1,1,59,1,0,5,1,10,1,1,1,156 -"2639",0,1,1,51,2,0,5,1,10,1,1,1,156 -"2640",0,1,0,46,1,0,5,1,9,1,0,1,156 -"2641",0,1,0,42,2,0,5,1,11,1,0,1,156 -"2642",0,1,1,67,1,0,5,0,10,1,1,1,156 -"2643",0,1,1,53,2,0,5,1,11,1,1,1,156 -"2644",0,1,1,50,1,0,5,1,9,1,0,1,156 -"2645",0,1,1,46,3,0,5,0,10,1,0,1,156 -"2646",0,1,0,62,3,0,5,1,12,1,1,1,156 -"2647",0,1,0,62,1,0,5,1,10,1,0,1,156 -"2648",0,1,0,51,1,0,5,1,11,1,0,1,156 -"2649",0,1,0,37,2,1,4,1,10,2,0,0,157 -"2650",0,1,1,67,2,1,4,0,8,2,0,0,157 -"2651",0,0,1,46,5,1,4,0,5,2,0,0,157 -"2652",1,1,1,36,2,1,4,1,11,2,1,0,157 -"2653",0,1,0,47,1,1,4,1,7,2,0,0,157 -"2654",0,1,0,54,2,1,4,0,3,2,0,0,157 -"2655",1,1,1,34,5,1,4,0,10,2,0,0,157 -"2656",0,1,0,52,1,1,4,1,9,2,1,0,157 -"2657",0,0,1,55,2,1,4,0,8,2,0,0,157 -"2658",1,0,1,53,1,1,4,0,10,2,0,0,157 -"2659",0,1,0,55,1,1,4,1,9,2,0,0,157 -"2660",0,1,1,53,2,1,4,0,13,2,0,0,157 -"2661",0,1,0,54,1,1,4,1,10,2,1,0,157 -"2662",0,1,0,65,1,1,4,0,10,2,0,0,157 -"2663",0,1,0,64,2,1,4,1,10,2,1,0,157 -"2664",0,1,1,53,3,1,4,1,9,2,1,0,157 -"2665",0,1,0,46,3,1,4,1,5,2,0,0,157 -"2666",1,0,1,51,3,1,4,0,10,2,0,0,157 -"2667",0,1,1,40,3,1,4,1,2,2,0,0,157 -"2668",0,1,0,59,1,1,4,1,8,2,0,0,157 -"2669",0,0,1,46,2,1,4,0,9,2,0,0,157 -"2670",0,1,0,33,1,1,3,1,13,3,0,0,158 -"2671",0,1,0,47,2,1,3,1,4,3,0,0,158 -"2672",0,1,0,49,1,1,3,1,7,3,0,0,158 -"2673",0,1,0,37,3,1,3,1,6,3,0,0,158 -"2674",0,1,0,44,3,1,3,1,10,3,0,0,158 -"2675",0,1,0,37,2,1,3,1,10,3,0,0,158 -"2676",0,1,1,56,2,1,3,0,11,3,0,0,158 -"2677",0,1,1,45,2,1,3,1,6,3,0,0,158 -"2678",0,1,0,48,1,1,3,0,5,3,0,0,158 -"2679",1,1,0,46,2,1,3,0,4,3,0,0,158 -"2680",0,1,1,48,4,1,3,1,8,3,0,0,158 -"2681",0,1,0,57,2,1,3,0,8,3,0,0,158 -"2682",0,1,1,50,4,1,3,1,4,3,0,0,158 -"2683",0,1,1,53,1,1,3,1,5,3,1,0,158 -"2684",0,1,0,33,2,1,3,0,9,3,0,0,158 -"2685",0,1,0,43,2,1,3,1,11,3,0,0,158 -"2686",1,0,0,36,1,1,3,1,8,3,1,0,158 -"2687",1,1,0,58,2,1,3,0,9,3,0,0,158 -"2688",0,1,1,41,2,1,3,1,10,3,0,0,158 -"2689",0,1,1,48,2,1,3,1,9,3,1,0,158 -"2690",0,1,1,34,2,1,3,1,11,3,1,0,158 -"2691",0,1,0,49,1,1,3,1,9,3,0,0,158 -"2692",0,1,1,64,3,1,3,0,12,3,1,0,158 -"2693",0,1,0,22,2,1,3,1,6,3,0,0,158 -"2694",0,0,0,54,1,1,3,0,10,3,0,0,158 -"2695",0,0,1,46,1,1,3,1,9,3,0,0,158 -"2696",0,1,1,39,2,1,3,0,7,3,1,0,158 -"2697",0,1,0,73,1,1,5,1,10,5,0,0,159 -"2698",0,1,0,42,1,1,5,0,8,5,0,0,159 -"2699",0,1,0,63,2,1,5,1,9,5,1,0,159 -"2700",1,1,0,45,2,1,5,0,5,5,0,0,159 -"2701",0,1,0,44,1,1,5,1,4,5,0,0,159 -"2702",0,1,0,61,4,1,5,1,11,5,0,0,159 -"2703",0,1,0,30,2,1,5,1,7,5,0,0,159 -"2704",0,1,1,53,3,1,5,1,12,5,0,0,159 -"2705",0,1,0,56,2,1,5,0,12,5,1,0,159 -"2706",0,1,0,52,2,1,5,1,10,5,0,0,159 -"2707",0,1,1,53,1,1,5,1,8,5,0,0,159 -"2708",0,1,0,43,2,1,5,1,3,5,0,0,159 -"2709",0,1,1,53,3,1,5,1,7,5,0,0,159 -"2710",0,1,1,50,2,1,5,1,5,5,0,0,159 -"2711",0,1,0,45,2,1,5,0,5,5,0,0,159 -"2712",0,1,1,36,3,1,5,1,6,5,0,0,159 -"2713",0,1,0,40,2,1,5,1,7,5,0,0,159 -"2714",0,1,1,26,2,1,5,1,9,5,0,0,159 -"2715",1,1,0,35,2,1,2,1,10,7,0,0,160 -"2716",0,1,0,49,4,1,2,0,7,7,0,0,160 -"2717",0,1,0,49,3,1,2,0,11,7,0,0,160 -"2718",0,1,0,36,2,1,2,0,12,7,1,0,160 -"2719",0,1,1,57,2,1,2,0,6,7,1,0,160 -"2720",0,1,0,48,1,1,2,0,7,7,0,0,160 -"2721",0,1,0,41,2,1,2,1,6,7,0,0,160 -"2722",0,1,1,43,3,1,2,1,5,7,1,0,160 -"2723",0,1,0,51,4,1,2,0,8,7,0,0,160 -"2724",0,1,1,36,1,1,2,1,3,7,0,0,160 -"2725",0,1,1,34,5,1,2,0,11,7,0,0,160 -"2726",1,1,1,32,2,1,2,1,4,7,0,0,160 -"2727",0,1,0,71,2,1,5,0,12,4,1,0,161 -"2728",0,1,0,59,1,1,5,0,8,4,0,0,161 -"2729",0,1,0,37,1,1,5,1,4,4,0,0,161 -"2730",0,1,0,53,1,1,5,0,7,4,1,0,161 -"2731",0,1,0,47,5,1,5,1,7,4,0,0,161 -"2732",1,0,0,55,2,1,5,0,7,4,0,0,161 -"2733",0,1,0,53,2,1,5,1,3,4,0,0,161 -"2734",0,1,0,43,2,1,5,1,3,4,0,0,161 -"2735",0,1,0,49,2,1,5,1,1,4,0,0,161 -"2736",0,1,0,55,5,1,5,1,8,4,0,0,161 -"2737",0,1,1,51,5,1,5,1,9,4,0,0,161 -"2738",0,1,0,56,2,1,5,0,8,4,0,0,161 -"2739",0,1,0,40,2,1,5,1,6,4,0,0,161 -"2740",0,1,1,44,2,1,5,1,8,4,0,0,161 -"2741",0,1,0,39,1,1,5,0,4,4,0,0,161 -"2742",0,1,0,42,4,1,5,0,9,4,0,0,161 -"2743",0,1,0,70,1,1,5,0,10,4,0,0,161 -"2744",0,1,0,42,2,1,5,0,9,4,0,0,161 -"2745",0,1,0,41,3,1,4,1,9,3,0,0,162 -"2746",0,1,1,50,2,1,4,0,10,3,0,0,162 -"2747",0,1,1,47,1,1,4,1,10,3,0,0,162 -"2748",0,1,0,59,3,1,4,0,7,3,0,0,162 -"2749",0,1,1,60,1,1,4,1,8,3,0,0,162 -"2750",1,0,1,50,5,1,4,0,9,3,0,0,162 -"2751",0,1,0,58,2,1,4,1,9,3,0,0,162 -"2752",0,1,0,57,1,1,4,0,11,3,0,0,162 -"2753",0,1,0,47,2,1,4,0,8,3,0,0,162 -"2754",0,1,0,53,1,1,4,1,10,3,1,0,162 -"2755",0,1,0,62,1,1,4,1,9,3,1,0,162 -"2756",0,1,0,44,4,1,4,1,8,3,0,0,162 -"2757",0,1,0,52,1,1,4,1,13,3,1,0,162 -"2758",0,1,1,57,5,1,4,1,10,3,0,0,162 -"2759",0,1,1,60,2,1,4,0,12,3,1,0,162 -"2760",0,1,0,50,1,1,4,0,6,3,0,0,162 -"2761",0,1,1,45,1,1,4,1,10,3,0,0,162 -"2762",0,0,0,47,4,1,4,0,10,3,0,0,162 -"2763",1,0,1,61,2,1,4,0,9,3,0,0,162 -"2764",0,1,0,50,1,1,4,0,9,3,0,0,162 -"2765",0,1,1,60,2,1,4,0,12,3,0,0,162 -"2766",0,1,1,65,4,1,4,0,8,3,1,0,162 -"2767",0,1,0,45,2,1,4,0,10,3,0,0,162 -"2768",0,1,0,48,1,1,5,1,8,1,1,1,163 -"2769",0,1,0,61,1,1,5,0,11,1,1,1,163 -"2770",0,1,0,66,1,1,5,0,11,1,1,1,163 -"2771",0,0,1,53,5,1,5,1,9,1,1,1,163 -"2772",0,1,0,67,1,1,5,0,11,1,1,1,163 -"2773",0,1,0,56,2,1,5,1,13,1,1,1,163 -"2774",0,1,0,69,2,1,5,1,13,1,1,1,163 -"2775",0,1,1,66,5,1,5,0,8,1,1,1,163 -"2776",0,1,1,58,1,1,5,0,11,1,0,1,163 -"2777",0,1,1,60,4,1,5,0,7,1,0,1,163 -"2778",0,1,0,56,1,1,5,0,11,1,1,1,163 -"2779",0,1,1,58,2,1,5,1,10,1,0,1,163 -"2780",0,1,0,56,2,1,5,0,12,1,1,1,163 -"2781",0,1,1,51,2,1,5,1,10,1,0,1,163 -"2782",0,1,0,56,1,1,5,1,10,1,0,1,163 -"2783",0,1,0,46,2,1,3,0,8,3,0,0,164 -"2784",0,1,0,65,2,1,3,1,9,3,0,0,164 -"2785",1,1,0,65,4,1,3,0,10,3,0,0,164 -"2786",1,1,0,42,5,1,3,0,6,3,0,0,164 -"2787",0,1,0,55,5,1,3,0,11,3,1,0,164 -"2788",1,1,1,54,4,1,3,0,10,3,0,0,164 -"2789",1,1,0,43,4,1,3,1,10,3,1,0,164 -"2790",0,1,0,64,3,1,3,1,9,3,1,0,164 -"2791",0,1,0,53,3,1,3,1,12,3,1,0,164 -"2792",0,1,1,43,2,1,3,0,6,3,0,0,164 -"2793",0,1,0,62,2,1,3,0,12,3,1,0,164 -"2794",0,1,0,62,3,1,3,1,11,3,1,0,164 -"2795",0,1,1,45,1,1,3,1,11,3,1,0,164 -"2796",0,1,0,64,1,1,3,0,10,3,1,0,164 -"2797",1,0,1,60,3,1,3,0,6,3,0,0,164 -"2798",0,1,1,49,3,1,3,0,6,3,0,0,164 -"2799",0,0,0,37,4,1,3,1,10,3,0,0,164 -"2800",0,1,0,61,3,1,3,1,12,3,0,0,164 -"2801",1,1,0,56,1,1,3,0,9,3,1,0,164 -"2802",0,1,0,53,1,1,3,0,9,3,0,0,164 -"2803",1,1,0,32,4,1,3,0,5,3,0,0,164 -"2804",0,1,0,33,4,1,3,1,10,3,0,0,164 -"2805",1,1,1,59,3,1,3,1,13,3,1,0,164 -"2806",0,1,1,46,3,1,3,1,9,3,0,0,164 -"2807",0,1,0,40,3,1,3,1,7,3,0,0,164 -"2808",0,1,0,60,5,1,3,0,8,3,0,0,164 -"2809",0,1,0,54,1,1,3,0,5,4,0,0,165 -"2810",0,1,0,36,1,1,3,1,9,4,0,0,165 -"2811",0,1,1,55,2,1,3,0,10,4,1,0,165 -"2812",0,1,1,54,3,1,3,1,9,4,0,0,165 -"2813",0,0,1,60,2,1,3,1,12,4,1,0,165 -"2814",0,1,1,64,2,1,3,0,13,4,1,0,165 -"2815",0,1,1,52,2,1,3,0,10,4,0,0,165 -"2816",0,1,1,56,2,1,3,0,9,4,0,0,165 -"2817",1,1,0,64,2,1,3,0,9,4,0,0,165 -"2818",0,1,0,37,1,1,3,1,10,4,1,0,165 -"2819",0,1,0,58,2,1,3,0,13,4,1,0,165 -"2820",0,1,0,52,1,1,3,0,12,4,0,0,165 -"2821",1,1,1,41,2,1,3,0,4,4,0,0,165 -"2822",0,1,1,61,1,1,3,1,10,4,1,0,165 -"2823",0,1,1,50,1,1,3,0,13,4,0,0,165 -"2824",0,1,0,63,2,1,3,0,11,4,1,0,165 -"2825",0,1,0,66,1,1,3,0,10,4,1,0,165 -"2826",0,1,1,57,1,1,4,1,13,1,1,1,166 -"2827",0,1,0,56,2,1,4,1,12,1,1,1,166 -"2828",0,1,1,61,2,1,4,1,11,1,1,1,166 -"2829",0,1,1,50,3,1,4,1,10,1,1,1,166 -"2830",0,1,0,58,1,1,4,0,12,1,1,1,166 -"2831",0,1,0,65,1,1,4,1,11,1,1,1,166 -"2832",0,1,0,66,2,1,4,0,12,1,1,1,166 -"2833",0,1,0,62,2,1,4,1,10,1,1,1,166 -"2834",0,1,1,50,2,1,4,1,12,1,1,1,166 -"2835",0,1,0,65,3,1,4,0,11,1,1,1,166 -"2836",0,1,0,57,3,1,4,0,12,1,1,1,166 -"2837",0,1,0,55,5,1,3,1,10,1,0,0,167 -"2838",0,1,1,54,5,1,3,1,10,1,1,0,167 -"2839",0,1,0,49,2,1,3,1,8,1,1,0,167 -"2840",0,0,1,43,5,1,3,0,8,1,1,0,167 -"2841",0,0,1,39,4,1,3,1,8,1,0,0,167 -"2842",0,1,0,38,5,1,3,1,9,1,0,0,167 -"2843",0,0,0,46,5,1,3,1,12,1,1,0,167 -"2844",0,1,0,51,1,1,3,1,7,1,1,0,167 -"2845",0,1,0,33,2,1,4,1,11,3,0,0,168 -"2846",0,1,0,46,1,1,4,1,7,3,0,0,168 -"2847",0,1,1,62,3,1,4,1,11,3,1,0,168 -"2848",0,1,0,58,3,1,4,0,9,3,0,0,168 -"2849",0,1,1,38,3,1,4,1,9,3,0,0,168 -"2850",0,1,0,56,2,1,4,0,10,3,1,0,168 -"2851",0,1,0,59,2,1,4,0,9,3,1,0,168 -"2852",0,1,1,50,2,1,4,0,11,3,1,0,168 -"2853",0,1,0,44,4,1,4,1,8,3,0,0,168 -"2854",1,1,0,53,2,1,4,1,5,3,0,0,168 -"2855",1,1,0,55,5,1,4,1,11,3,1,0,168 -"2856",0,1,1,41,5,1,4,0,9,3,0,0,168 -"2857",0,1,1,63,3,1,4,0,10,3,1,0,168 -"2858",1,1,1,71,1,1,4,0,7,1,1,0,169 -"2859",0,1,1,42,4,1,4,0,10,1,1,0,169 -"2860",0,1,1,50,1,1,4,1,9,1,0,0,169 -"2861",0,1,0,67,3,1,4,1,7,1,1,0,169 -"2862",1,1,1,61,5,1,4,0,11,1,1,0,169 -"2863",0,1,1,68,2,1,4,1,12,1,0,0,169 -"2864",0,1,1,57,1,1,4,0,9,1,1,0,169 -"2865",0,1,1,59,2,1,4,0,9,1,0,0,169 -"2866",1,0,0,45,4,1,4,0,9,1,0,0,169 -"2867",0,1,1,58,2,1,4,1,10,1,0,0,169 -"2868",1,0,1,64,5,1,4,0,7,1,0,0,169 -"2869",0,0,1,48,3,1,4,1,10,1,0,0,169 -"2870",1,1,0,48,2,1,4,0,1,1,0,0,169 -"2871",0,0,0,65,2,1,4,1,9,1,0,0,169 -"2872",1,0,1,51,5,1,4,0,10,1,0,0,169 -"2873",0,1,1,63,1,1,4,1,7,1,0,0,169 -"2874",1,0,1,45,5,1,4,0,6,1,0,0,169 -"2875",1,1,0,49,1,1,4,0,3,1,0,0,169 -"2876",1,0,1,48,2,1,4,0,6,1,0,0,169 -"2877",0,1,0,49,3,1,4,1,9,6,0,0,170 -"2878",0,1,0,41,2,1,4,0,12,6,0,0,170 -"2879",0,1,0,45,3,1,4,0,5,6,0,0,170 -"2880",1,0,0,40,2,1,4,0,8,6,0,0,170 -"2881",1,1,1,42,3,1,4,1,10,6,0,0,170 -"2882",0,1,0,41,3,1,4,1,9,6,1,0,170 -"2883",0,1,1,40,3,1,4,1,2,6,0,0,170 -"2884",0,1,1,47,3,1,4,1,5,6,0,0,170 -"2885",1,1,0,38,2,1,4,0,8,6,0,0,170 -"2886",0,1,1,35,3,1,4,1,9,6,1,0,170 -"2887",1,1,1,49,3,1,4,0,9,6,1,0,170 -"2888",1,1,0,39,5,1,4,1,10,6,0,0,170 -"2889",0,1,1,30,3,1,4,0,7,6,0,0,170 -"2890",0,1,0,58,2,1,4,0,10,6,0,0,170 -"2891",0,1,0,40,2,1,4,0,4,6,1,0,170 -"2892",0,1,1,66,3,1,4,0,10,6,1,0,170 -"2893",0,1,0,57,1,1,4,1,10,6,0,0,170 -"2894",0,1,0,35,3,1,4,1,6,5,1,0,171 -"2895",0,1,0,53,3,1,4,0,6,5,0,0,171 -"2896",0,1,0,44,5,1,4,0,11,5,1,0,171 -"2897",0,1,0,49,2,1,4,0,12,1,1,1,172 -"2898",0,1,0,69,1,1,4,1,11,1,1,1,172 -"2899",0,1,0,43,3,1,4,0,11,1,1,1,172 -"2900",1,1,0,49,3,1,4,0,10,1,0,1,172 -"2901",0,1,0,64,1,1,4,1,13,1,1,1,172 -"2902",0,1,1,55,1,1,4,1,10,1,1,1,172 -"2903",0,1,0,76,1,1,4,0,12,1,1,1,172 -"2904",0,1,0,48,2,1,4,1,10,1,0,1,172 -"2905",0,1,1,75,3,1,4,1,12,1,1,1,172 -"2906",0,1,0,70,1,1,4,1,11,1,1,1,172 -"2907",0,1,0,64,2,1,4,1,12,1,1,1,172 -"2908",0,1,0,58,2,1,4,0,12,1,1,1,172 -"2909",0,1,0,53,2,1,4,1,13,1,0,1,172 -"2910",0,1,0,78,1,1,4,0,13,1,1,1,172 -"2911",0,1,0,54,3,1,4,0,11,1,0,1,172 -"2912",0,1,1,54,1,1,4,1,11,1,1,1,172 -"2913",1,1,0,52,2,1,4,1,11,1,0,1,172 -"2914",0,1,1,50,1,1,4,0,12,1,0,1,172 -"2915",0,1,0,48,1,1,4,1,13,1,0,1,172 -"2916",0,1,0,57,2,1,4,0,8,1,0,1,172 -"2917",0,1,0,53,2,1,4,1,12,1,1,1,172 -"2918",1,1,0,60,1,1,4,0,13,1,1,1,172 -"2919",0,1,1,54,2,1,4,0,11,1,1,1,172 -"2920",0,1,0,62,2,1,5,1,12,1,1,0,173 -"2921",0,1,1,77,2,1,5,1,10,1,1,0,173 -"2922",0,1,0,41,2,1,5,0,11,1,1,0,173 -"2923",0,1,0,66,3,1,5,0,11,1,0,0,173 -"2924",0,0,0,35,5,1,5,0,6,1,0,0,173 -"2925",0,1,0,61,3,1,5,1,12,1,1,0,173 -"2926",0,0,0,32,4,1,5,0,11,1,0,0,173 -"2927",0,1,0,61,3,1,5,0,9,1,1,0,173 -"2928",0,1,0,59,5,1,5,1,9,1,0,0,173 -"2929",0,1,1,69,2,1,5,0,11,1,1,0,173 -"2930",0,1,1,49,1,1,5,0,11,1,0,0,173 -"2931",0,0,1,54,3,1,5,1,12,1,0,0,173 -"2932",0,1,0,69,1,1,5,0,13,1,1,0,173 -"2933",0,1,1,60,2,1,5,1,13,1,0,0,173 -"2934",0,1,0,54,2,1,5,0,13,1,1,0,173 -"2935",0,1,0,56,1,1,5,0,12,1,1,0,173 -"2936",0,1,0,54,5,1,5,1,7,1,0,0,173 -"2937",0,1,0,49,2,1,5,0,9,1,1,0,173 -"2938",0,1,0,58,1,1,5,1,11,1,0,0,173 -"2939",0,1,0,62,1,1,5,1,10,1,1,0,173 -"2940",0,1,0,44,3,1,2,0,10,3,0,0,174 -"2941",0,1,0,40,4,1,2,0,7,3,1,0,174 -"2942",0,1,1,49,1,1,2,0,9,3,0,0,174 -"2943",0,1,0,48,2,1,2,1,10,3,0,0,174 -"2944",0,1,0,51,3,1,2,0,9,3,0,0,174 -"2945",1,1,0,57,5,1,2,0,4,3,0,0,174 -"2946",0,1,0,64,1,1,2,1,8,3,0,0,174 -"2947",1,1,0,50,3,1,2,0,10,3,1,0,174 -"2948",0,1,0,48,5,1,2,1,10,3,0,0,174 -"2949",0,1,0,51,4,1,2,1,5,3,0,0,174 -"2950",1,1,0,60,1,1,2,0,10,3,1,0,174 -"2951",0,1,0,59,1,1,2,0,12,3,1,0,174 -"2952",0,1,0,54,3,1,2,0,7,3,1,0,174 -"2953",0,1,0,53,3,1,2,1,3,3,0,0,174 -"2954",0,1,0,48,3,1,2,0,3,3,1,0,174 -"2955",1,1,1,60,5,1,2,0,13,3,1,0,174 -"2956",0,1,0,48,2,1,2,0,11,3,0,0,174 -"2957",0,1,0,58,3,1,2,1,11,3,1,0,174 -"2958",0,1,0,49,1,1,2,0,9,3,0,0,174 -"2959",0,1,0,61,2,1,4,1,13,1,1,0,175 -"2960",0,1,0,68,1,1,4,0,12,1,1,0,175 -"2961",0,0,0,62,3,1,4,0,13,1,0,0,175 -"2962",0,1,0,60,2,1,4,1,13,1,1,0,175 -"2963",0,1,0,76,2,1,4,1,12,1,1,0,175 -"2964",0,1,0,58,2,1,4,1,13,1,1,0,175 -"2965",0,1,1,66,1,1,4,1,13,1,1,0,175 -"2966",0,1,0,56,1,1,4,1,11,1,1,0,175 -"2967",0,1,0,45,2,1,4,0,8,1,1,0,175 -"2968",0,1,0,65,1,1,4,1,13,1,1,0,175 -"2969",0,1,0,61,1,1,4,1,12,1,1,0,175 -"2970",0,1,0,61,1,1,4,0,10,1,1,0,175 -"2971",0,1,0,61,2,1,4,1,12,1,1,0,175 -"2972",0,1,0,58,3,1,4,0,13,1,0,0,175 -"2973",0,1,0,70,1,1,4,1,13,1,1,0,175 -"2974",0,1,0,65,3,1,4,0,13,1,1,0,175 -"2975",0,1,1,52,1,1,4,1,12,1,1,0,175 -"2976",0,1,0,77,1,1,4,0,12,1,1,0,175 -"2977",0,0,0,57,2,1,4,0,13,1,1,0,175 -"2978",0,1,0,46,3,1,4,0,7,1,0,0,175 -"2979",0,1,0,70,2,1,4,0,13,1,1,0,175 -"2980",0,1,0,56,1,1,4,1,12,1,1,0,175 -"2981",0,1,1,69,2,1,4,0,13,1,1,0,175 -"2982",0,1,0,62,1,1,4,1,13,1,1,0,175 -"2983",0,1,1,63,2,1,4,1,12,1,1,0,175 -"2984",0,1,0,55,3,1,4,1,12,1,1,0,175 -"2985",0,1,1,57,2,1,4,1,13,1,1,0,175 -"2986",0,1,0,65,1,1,4,0,10,1,1,0,175 -"2987",0,1,0,57,1,1,4,1,10,1,0,0,175 -"2988",0,1,0,60,2,1,4,1,12,1,1,0,175 -"2989",0,1,0,71,3,1,4,0,10,1,1,0,175 -"2990",1,0,0,59,1,1,4,0,12,1,1,0,175 -"2991",0,1,0,83,1,1,4,0,14,1,1,0,175 -"2992",0,1,0,68,3,1,4,1,12,1,1,0,175 -"2993",1,1,0,52,2,1,4,0,13,1,1,0,175 -"2994",0,1,0,60,1,1,4,0,11,1,1,0,175 -"2995",0,0,0,50,3,1,4,1,13,1,1,0,175 -"2996",0,1,0,61,3,1,4,1,12,1,1,0,175 -"2997",0,1,1,64,3,1,4,1,12,1,1,0,175 -"2998",0,1,0,56,2,1,4,0,13,1,1,0,175 -"2999",0,1,0,56,2,1,4,0,12,1,1,0,175 -"3000",0,1,0,62,2,1,4,1,13,1,1,0,175 -"3001",0,1,0,76,1,1,4,0,13,1,1,0,175 -"3002",0,0,0,57,1,1,4,0,13,1,1,0,175 -"3003",0,1,1,51,1,1,5,0,10,3,0,0,176 -"3004",0,1,0,62,1,1,5,1,12,3,0,0,176 -"3005",0,1,1,49,3,1,5,0,6,3,0,0,176 -"3006",0,0,1,49,2,1,5,0,8,3,1,0,176 -"3007",0,1,1,58,2,1,5,0,12,3,1,0,176 -"3008",0,1,0,40,5,1,5,0,11,3,0,0,176 -"3009",0,1,0,52,1,1,5,0,10,3,0,0,176 -"3010",0,1,0,46,5,1,5,1,12,3,1,0,176 -"3011",0,1,0,36,2,1,5,0,8,3,0,0,176 -"3012",0,1,0,61,2,1,5,1,12,3,1,0,176 -"3013",0,0,0,53,2,1,5,0,12,3,1,0,176 -"3014",0,1,0,54,1,1,5,1,10,3,1,0,176 -"3015",0,1,1,61,2,1,5,0,13,3,1,0,176 -"3016",0,1,1,45,4,1,5,0,11,3,1,0,176 -"3017",0,1,0,51,2,1,5,0,7,3,0,0,176 -"3018",0,1,0,78,1,1,5,0,13,3,1,0,176 -"3019",0,1,0,61,2,1,5,1,11,3,1,0,176 -"3020",0,1,1,56,2,1,4,0,8,5,0,0,177 -"3021",0,1,0,78,1,1,4,1,11,5,0,0,177 -"3022",0,1,0,49,1,1,4,1,8,5,0,0,177 -"3023",0,0,0,51,4,1,4,1,10,5,0,0,177 -"3024",0,1,0,38,1,1,4,1,10,5,0,0,177 -"3025",0,1,0,51,3,1,4,0,8,5,1,0,177 -"3026",0,1,1,45,3,1,4,1,3,5,0,0,177 -"3027",1,1,1,41,3,1,4,1,5,5,0,0,177 -"3028",0,1,0,54,2,1,4,1,10,5,1,0,177 -"3029",0,1,1,65,1,1,4,1,9,5,0,0,177 -"3030",0,1,1,51,2,1,4,1,10,5,1,0,177 -"3031",0,1,1,53,1,1,3,1,9,3,1,0,178 -"3032",0,1,0,52,2,1,3,1,11,3,1,0,178 -"3033",0,1,0,56,3,1,3,0,10,3,1,0,178 -"3034",0,1,0,46,3,1,3,1,9,3,0,0,178 -"3035",0,1,1,46,3,1,3,1,10,3,1,0,178 -"3036",0,1,1,47,2,1,3,1,8,3,1,0,178 -"3037",0,1,0,48,5,1,3,1,12,3,0,0,178 -"3038",0,1,1,59,1,1,3,0,5,3,0,0,178 -"3039",0,1,0,64,1,1,3,0,9,3,0,0,178 -"3040",0,1,0,45,1,1,3,1,10,3,1,0,178 -"3041",0,1,1,58,3,1,3,1,9,3,0,0,178 -"3042",0,1,0,54,1,1,3,1,9,3,0,0,178 -"3043",1,0,0,65,2,1,3,0,9,3,0,0,178 -"3044",1,0,1,31,3,1,3,0,9,3,0,0,178 -"3045",0,1,0,60,1,1,3,1,9,3,1,0,178 -"3046",0,0,1,59,4,1,3,1,12,3,1,0,178 -"3047",0,0,1,41,3,1,5,1,11,1,0,0,179 -"3048",0,1,1,61,1,1,5,1,11,1,1,0,179 -"3049",0,1,1,45,3,1,5,0,12,1,1,0,179 -"3050",0,1,0,52,2,1,5,1,10,1,1,0,179 -"3051",0,1,0,67,1,1,5,0,9,1,1,0,179 -"3052",0,1,1,67,1,1,5,1,12,1,1,0,179 -"3053",0,1,0,56,2,1,5,0,11,1,0,0,179 -"3054",0,1,1,53,1,1,5,0,9,1,1,0,179 -"3055",0,1,0,50,3,1,5,1,11,1,1,0,179 -"3056",0,1,1,56,2,1,5,1,11,1,1,0,179 -"3057",0,0,1,50,5,1,5,1,11,1,1,0,179 -"3058",0,1,1,58,1,1,5,0,12,1,1,0,179 -"3059",0,1,1,73,3,1,5,0,10,1,1,0,179 -"3060",0,1,1,67,1,1,5,0,9,1,0,0,179 -"3061",0,1,0,60,4,1,5,0,11,1,1,0,179 -"3062",0,1,1,60,5,1,4,1,10,1,1,1,180 -"3063",0,1,0,56,2,1,4,0,11,1,1,1,180 -"3064",0,1,0,44,3,1,4,1,12,1,1,1,180 -"3065",0,1,0,64,4,1,4,0,11,1,1,1,180 -"3066",0,1,0,47,2,1,4,0,4,1,0,1,180 -"3067",0,1,1,59,1,1,4,1,11,1,1,1,180 -"3068",1,1,0,61,1,1,4,0,12,1,1,1,180 -"3069",0,1,0,70,2,1,4,0,10,1,1,1,180 -"3070",1,0,0,53,4,1,4,0,12,1,1,1,180 -"3071",0,1,0,61,2,1,4,1,12,1,1,1,180 -"3072",0,0,1,45,2,1,4,0,10,1,0,1,180 -"3073",0,1,1,65,2,1,4,0,11,1,1,1,180 -"3074",0,1,1,58,3,1,4,1,11,1,1,1,180 -"3075",0,1,0,62,5,1,4,0,11,1,1,1,180 -"3076",0,0,0,64,5,1,4,1,12,1,1,1,180 -"3077",0,1,0,64,2,1,4,1,12,1,1,1,180 -"3078",0,1,0,66,1,1,4,0,10,1,1,1,180 -"3079",0,1,0,59,2,1,4,1,9,1,0,1,180 -"3080",0,1,1,59,2,1,4,1,10,1,1,1,180 -"3081",0,1,0,51,2,1,4,1,10,1,0,1,180 -"3082",1,0,1,56,5,1,4,0,11,1,0,1,180 -"3083",0,1,1,53,1,1,4,1,10,1,0,1,180 -"3084",0,0,0,44,2,1,4,1,9,1,0,1,180 -"3085",0,1,1,60,1,1,4,0,9,1,0,1,180 -"3086",0,1,0,75,2,1,4,1,11,1,1,1,180 -"3087",0,1,0,62,4,1,4,1,12,1,0,1,180 -"3088",0,1,0,70,2,1,4,0,12,1,0,1,180 -"3089",0,1,0,67,1,1,4,0,9,1,0,1,180 -"3090",1,1,1,29,3,1,4,0,9,1,0,0,181 -"3091",0,0,0,55,2,1,4,0,4,1,0,0,181 -"3092",0,1,1,53,2,1,4,1,12,1,1,0,181 -"3093",1,1,0,33,2,1,4,1,9,1,0,0,181 -"3094",0,1,1,50,2,1,4,0,9,1,0,0,181 -"3095",1,1,0,49,2,1,4,1,2,1,0,0,181 -"3096",0,1,0,62,1,1,4,1,12,1,0,0,181 -"3097",0,0,0,72,2,1,4,0,10,1,1,0,181 -"3098",0,1,0,46,5,1,4,1,7,1,0,0,181 -"3099",0,1,0,50,2,1,4,1,10,1,1,0,181 -"3100",1,1,1,37,5,1,4,0,7,1,0,0,181 -"3101",0,1,0,60,2,1,4,0,11,1,0,0,181 -"3102",0,1,1,38,2,1,4,0,8,1,0,0,181 -"3103",1,1,0,29,2,1,4,1,1,1,1,0,181 -"3104",0,0,0,54,4,1,4,1,9,1,0,0,181 -"3105",0,1,0,51,1,1,4,0,11,1,0,0,181 -"3106",0,1,1,57,2,1,4,0,8,1,0,0,181 -"3107",1,1,1,42,2,1,4,1,10,1,1,0,181 -"3108",0,1,0,51,3,1,4,0,12,1,1,0,181 -"3109",0,0,0,51,1,1,4,0,11,1,1,0,181 -"3110",0,0,1,61,2,1,4,0,9,1,0,0,181 -"3111",0,1,0,57,5,1,4,1,10,1,1,0,181 -"3112",0,1,0,59,2,1,4,0,9,1,0,0,181 -"3113",0,1,1,34,1,1,4,1,8,1,0,0,181 -"3114",0,1,0,56,2,1,5,0,10,3,0,0,182 -"3115",0,0,1,61,2,1,5,0,10,3,1,0,182 -"3116",0,1,0,60,2,1,5,1,7,3,0,0,182 -"3117",0,1,0,61,3,1,5,0,9,3,0,0,182 -"3118",0,1,0,52,1,1,5,1,9,3,0,0,182 -"3119",0,1,1,53,5,1,5,1,10,3,0,0,182 -"3120",0,1,1,67,1,1,5,1,10,3,1,0,182 -"3121",0,1,0,43,2,1,5,0,11,3,0,0,182 -"3122",0,1,0,51,3,1,5,1,8,3,0,0,182 -"3123",1,0,1,56,1,1,5,0,10,3,1,0,182 -"3124",0,1,0,42,1,1,5,1,10,3,1,0,182 -"3125",0,1,0,66,3,1,2,0,9,3,0,0,183 -"3126",0,1,0,50,1,1,2,1,6,3,0,0,183 -"3127",0,0,1,51,2,1,2,0,9,3,0,0,183 -"3128",0,1,1,56,5,1,2,0,12,3,0,0,183 -"3129",0,1,0,54,2,1,2,1,10,3,1,0,183 -"3130",0,1,1,48,5,1,2,1,7,3,0,0,183 -"3131",0,1,0,45,5,1,2,0,9,3,0,0,183 -"3132",0,1,0,44,5,1,2,1,7,3,0,0,183 -"3133",0,1,0,56,5,1,2,0,9,3,0,0,183 -"3134",0,1,1,48,5,1,2,1,10,3,0,0,183 -"3135",0,1,0,35,1,1,2,0,9,3,0,0,183 -"3136",1,1,0,61,3,1,2,0,10,3,0,0,183 -"3137",0,1,0,45,1,1,2,1,12,3,0,0,183 -"3138",0,1,0,55,2,1,2,1,8,3,1,0,183 -"3139",0,1,0,48,3,1,2,0,7,3,1,0,183 -"3140",0,1,0,67,2,1,2,0,5,3,0,0,183 -"3141",0,1,0,62,5,1,2,1,10,3,0,0,183 -"3142",0,1,1,49,2,1,4,1,10,4,0,1,184 -"3143",0,1,0,66,2,1,4,0,11,4,1,1,184 -"3144",0,1,0,61,1,1,4,0,10,4,0,1,184 -"3145",0,1,0,49,2,1,4,0,13,4,0,1,184 -"3146",0,1,0,56,5,1,4,0,8,4,1,1,184 -"3147",0,1,0,65,1,1,4,0,10,4,1,1,184 -"3148",0,1,1,45,5,1,4,1,9,4,0,1,184 -"3149",0,1,0,44,1,1,4,1,14,4,0,1,184 -"3150",0,1,1,57,2,1,4,1,7,4,1,1,184 -"3151",0,1,0,50,2,1,4,0,9,4,0,1,184 -"3152",0,1,0,56,1,1,4,0,10,4,0,1,184 -"3153",0,1,0,61,1,1,4,0,10,4,1,1,184 -"3154",0,0,0,57,3,1,4,0,10,4,1,1,184 -"3155",0,1,1,69,2,1,4,0,9,4,1,1,184 -"3156",0,1,1,69,1,1,4,1,11,4,0,1,184 -"3157",1,0,0,59,2,1,4,0,9,4,0,1,184 -"3158",0,1,1,46,2,1,4,1,10,4,0,1,184 -"3159",0,1,1,47,2,1,4,1,11,4,0,1,184 -"3160",0,1,0,45,1,1,4,1,9,4,0,1,184 -"3161",0,1,0,49,2,1,4,0,9,4,1,1,184 -"3162",0,0,0,47,1,0,4,0,12,1,1,1,185 -"3163",0,1,1,57,1,0,4,0,12,1,1,1,185 -"3164",0,0,1,57,1,0,4,0,11,1,1,1,185 -"3165",1,1,0,54,1,0,4,0,12,1,0,1,185 -"3166",0,1,0,61,1,0,4,0,13,1,0,1,185 -"3167",0,1,0,48,2,0,4,0,12,1,1,1,185 -"3168",0,0,1,56,1,0,4,0,10,1,1,1,185 -"3169",0,1,0,58,1,0,4,0,12,1,1,1,185 -"3170",1,1,1,52,3,0,4,0,12,1,1,1,185 -"3171",0,1,1,61,2,0,4,0,10,1,1,1,185 -"3172",0,0,1,54,2,0,4,0,9,1,1,1,185 -"3173",0,1,0,55,1,0,4,0,11,1,1,1,185 -"3174",1,1,1,64,1,0,4,0,13,1,1,1,185 -"3175",0,1,1,59,2,0,5,0,11,1,1,1,186 -"3176",0,1,0,67,3,0,5,0,12,1,1,1,186 -"3177",0,1,0,68,1,0,5,0,12,1,1,1,186 -"3178",0,1,1,63,2,0,5,1,10,1,1,1,186 -"3179",0,1,1,65,1,0,5,0,12,1,1,1,186 -"3180",0,1,0,65,1,0,5,0,13,1,1,1,186 -"3181",0,1,0,59,1,0,5,1,13,1,0,1,186 -"3182",0,1,1,54,1,0,5,1,12,1,1,1,186 -"3183",0,1,0,72,2,0,5,0,11,1,1,1,186 -"3184",0,1,0,54,1,0,5,0,9,1,0,1,186 -"3185",0,1,0,49,3,0,5,0,11,1,0,1,186 -"3186",0,1,1,68,2,0,5,0,11,1,1,1,186 -"3187",0,1,1,69,3,0,5,1,7,1,0,1,186 -"3188",0,0,0,58,1,0,5,0,12,1,1,1,186 -"3189",0,1,1,54,2,0,5,0,11,1,0,1,186 -"3190",0,1,0,62,1,0,5,0,12,1,1,1,186 -"3191",1,1,0,63,2,0,5,0,10,1,1,1,186 -"3192",0,1,0,52,3,0,5,0,8,1,1,0,187 -"3193",0,1,1,59,2,0,5,1,12,1,1,0,187 -"3194",0,1,0,55,2,0,5,1,9,1,0,0,187 -"3195",0,1,0,58,2,0,5,1,9,1,1,0,187 -"3196",0,1,1,60,2,0,5,1,13,1,1,0,187 -"3197",0,1,1,54,2,0,5,1,13,1,1,0,187 -"3198",1,0,1,60,3,0,5,1,13,1,1,0,187 -"3199",0,1,1,66,3,0,5,1,12,1,1,0,187 -"3200",0,1,0,54,2,0,5,1,12,1,1,0,187 -"3201",0,1,1,57,2,0,5,1,9,1,1,0,187 -"3202",0,1,1,55,2,0,5,1,9,1,1,0,187 -"3203",0,1,1,71,3,0,5,1,13,1,1,0,187 -"3204",0,1,0,59,1,0,5,1,13,1,1,0,187 -"3205",0,1,1,62,3,0,5,1,13,1,0,0,187 -"3206",0,1,0,70,1,0,5,1,13,1,1,0,187 -"3207",0,1,1,59,1,0,5,1,11,1,0,0,187 -"3208",1,1,0,54,2,0,5,1,12,1,1,0,187 -"3209",0,1,1,49,1,0,5,1,13,1,1,0,187 -"3210",0,1,0,65,2,0,5,1,13,1,1,0,187 -"3211",0,1,1,43,3,1,3,1,8,1,0,0,188 -"3212",0,1,1,59,3,1,3,1,11,1,1,0,188 -"3213",0,1,1,55,2,1,3,0,11,1,1,0,188 -"3214",0,1,1,45,3,1,3,0,9,1,0,0,188 -"3215",0,1,0,57,1,1,3,0,9,1,0,0,188 -"3216",0,1,0,69,3,1,3,0,10,1,1,0,188 -"3217",0,1,1,48,3,1,3,1,7,1,0,0,188 -"3218",1,1,1,38,1,1,3,0,8,1,0,0,188 -"3219",0,1,0,62,3,1,3,0,10,1,1,0,188 -"3220",0,1,1,60,2,1,3,0,8,1,0,0,188 -"3221",0,0,1,42,5,1,3,1,4,1,0,0,188 -"3222",0,1,0,58,1,1,3,0,11,1,0,0,188 -"3223",0,1,0,52,4,1,3,1,8,1,1,0,188 -"3224",0,1,0,54,1,1,3,0,11,1,1,0,188 -"3225",0,0,0,54,3,1,3,1,10,1,1,0,188 -"3226",0,1,0,67,1,1,3,1,10,1,1,0,188 -"3227",0,1,1,50,4,1,3,1,9,1,0,0,188 -"3228",0,1,0,71,1,1,3,0,9,1,0,0,188 -"3229",0,1,1,67,1,1,3,0,12,1,1,0,188 -"3230",0,1,0,49,1,1,3,0,7,1,0,0,188 -"3231",0,1,1,53,3,1,3,1,11,1,1,0,188 -"3232",0,1,0,65,1,1,3,0,12,1,1,0,188 -"3233",0,1,0,41,2,1,3,1,9,1,0,0,188 -"3234",0,1,1,51,5,1,4,1,6,3,0,0,189 -"3235",0,1,1,47,2,1,4,1,10,3,1,0,189 -"3236",0,1,1,53,3,1,4,1,7,3,0,0,189 -"3237",0,1,0,66,2,1,4,0,11,3,1,0,189 -"3238",0,1,0,61,2,1,4,1,9,3,0,0,189 -"3239",0,1,0,52,3,1,4,1,12,3,1,0,189 -"3240",0,1,0,59,1,1,4,0,8,3,0,0,189 -"3241",0,1,0,51,1,1,4,1,10,3,1,0,189 -"3242",1,1,0,33,2,1,4,0,12,3,1,0,189 -"3243",0,1,0,41,1,1,4,1,7,3,0,0,189 -"3244",0,1,0,40,1,1,4,0,10,3,1,0,189 -"3245",0,1,0,46,1,1,4,0,8,3,0,0,189 -"3246",0,1,0,53,2,1,3,1,8,1,0,0,190 -"3247",0,1,1,43,1,1,3,1,10,1,0,0,190 -"3248",1,1,0,61,2,1,3,0,7,1,1,0,190 -"3249",0,1,0,59,1,1,3,1,11,1,0,0,190 -"3250",0,1,1,51,1,1,3,0,9,1,0,0,190 -"3251",0,1,0,53,2,1,3,0,10,1,0,0,190 -"3252",1,1,0,41,2,1,3,0,9,1,0,0,190 -"3253",0,1,0,59,3,1,3,0,9,1,0,0,190 -"3254",0,1,0,65,1,1,3,0,9,1,0,0,190 -"3255",0,1,0,47,3,1,3,1,6,1,0,0,190 -"3256",0,0,0,38,2,1,3,0,9,1,0,0,190 -"3257",0,1,1,63,1,1,3,0,11,1,1,0,190 -"3258",0,1,0,43,2,1,3,1,6,1,0,0,190 -"3259",0,1,0,47,2,1,3,1,8,1,0,0,190 -"3260",0,1,1,58,1,1,3,0,10,1,0,0,190 -"3261",0,0,0,64,3,1,3,0,9,1,0,0,190 -"3262",0,1,0,65,2,1,3,0,10,1,0,0,190 -"3263",0,1,1,48,3,1,3,0,10,1,0,0,190 -"3264",0,1,0,71,3,1,5,1,12,2,1,0,191 -"3265",0,1,0,73,3,1,5,1,12,2,1,0,191 -"3266",1,0,0,68,5,1,5,0,9,2,1,0,191 -"3267",0,1,0,69,1,1,5,1,9,2,1,0,191 -"3268",0,1,1,73,2,1,5,0,13,2,1,0,191 -"3269",0,1,0,60,5,1,5,1,12,2,1,0,191 -"3270",0,1,0,62,4,1,5,1,10,2,1,0,191 -"3271",0,1,0,79,2,1,5,1,6,2,1,0,191 -"3272",0,1,0,68,1,1,5,1,12,2,1,0,191 -"3273",0,1,0,59,2,1,5,1,11,2,0,0,191 -"3274",0,1,0,78,5,1,5,1,13,2,1,0,191 -"3275",0,1,0,62,3,1,5,1,9,2,1,0,191 -"3276",0,1,0,54,1,1,5,1,12,2,1,0,191 -"3277",0,1,0,59,2,1,5,1,11,2,0,0,191 -"3278",0,1,0,60,2,1,5,1,10,2,0,0,191 -"3279",0,1,0,77,2,1,5,1,11,2,1,0,191 -"3280",0,1,0,78,2,1,5,0,11,2,1,0,191 -"3281",0,1,1,66,3,1,5,1,6,2,0,0,191 -"3282",0,1,0,61,3,1,5,1,12,2,1,0,191 -"3283",1,0,1,62,2,1,5,1,11,2,0,0,191 -"3284",0,1,1,78,2,1,5,1,3,2,1,0,191 -"3285",0,0,0,67,2,1,5,1,9,2,1,0,191 -"3286",0,1,0,66,1,1,5,0,8,2,1,0,191 -"3287",0,1,0,60,2,1,5,1,11,2,1,0,191 -"3288",0,1,1,72,3,1,5,1,9,2,1,0,191 -"3289",0,1,0,62,2,1,5,1,14,2,1,0,191 -"3290",0,1,1,49,4,1,4,1,11,4,1,0,192 -"3291",1,0,0,49,5,1,4,0,12,4,1,0,192 -"3292",0,1,1,57,3,1,4,0,10,4,1,0,192 -"3293",0,1,0,58,5,1,4,1,11,4,1,0,192 -"3294",0,1,0,53,2,1,4,1,11,4,1,0,192 -"3295",0,1,0,38,1,1,4,0,12,4,1,0,192 -"3296",0,0,1,44,2,1,5,1,3,5,0,0,193 -"3297",0,1,0,34,3,1,5,1,9,5,0,0,193 -"3298",0,1,0,41,2,1,5,1,11,5,1,0,193 -"3299",0,1,0,48,1,1,5,1,9,5,1,0,193 -"3300",0,1,1,39,2,1,5,1,8,5,0,0,193 -"3301",0,1,0,46,1,1,5,0,8,5,1,0,193 -"3302",0,1,0,53,2,1,5,0,11,5,0,0,193 -"3303",1,0,0,55,4,1,5,0,9,5,1,0,193 -"3304",0,1,0,35,2,1,5,0,6,5,0,0,193 -"3305",0,1,1,56,2,1,5,0,10,5,1,0,193 -"3306",0,1,0,45,2,1,5,1,8,5,0,0,193 -"3307",0,1,1,61,1,1,5,0,9,5,0,0,193 -"3308",1,1,1,50,2,1,5,1,9,5,0,0,193 -"3309",0,1,1,51,2,1,5,1,10,5,0,0,193 -"3310",0,1,0,49,4,1,5,1,10,5,1,0,193 -"3311",1,1,0,29,4,1,5,0,10,5,0,0,193 -"3312",0,1,0,50,1,1,4,1,10,4,0,0,194 -"3313",0,1,1,50,2,1,4,1,8,4,1,0,194 -"3314",0,0,0,50,4,1,4,0,8,4,1,0,194 -"3315",1,1,0,48,3,1,4,0,12,4,1,0,194 -"3316",0,1,1,62,2,1,4,1,4,4,0,0,194 -"3317",0,1,0,67,2,1,4,1,12,4,1,0,194 -"3318",0,1,1,62,3,1,4,1,10,4,1,0,194 -"3319",0,1,1,53,1,1,4,1,9,4,1,0,194 -"3320",0,1,1,58,2,1,4,0,9,4,1,0,194 -"3321",0,1,0,71,3,1,4,0,13,4,1,0,194 -"3322",0,1,0,66,1,1,5,1,6,1,0,0,195 -"3323",0,1,1,66,2,1,5,1,10,1,1,0,195 -"3324",0,1,0,71,3,1,5,1,10,1,0,0,195 -"3325",0,1,0,55,2,1,5,0,10,1,0,0,195 -"3326",0,1,0,62,2,1,5,0,10,1,0,0,195 -"3327",0,1,0,69,2,1,5,0,11,1,1,0,195 -"3328",0,1,0,51,1,1,5,1,7,1,1,0,195 -"3329",0,1,0,63,2,1,5,1,8,1,0,0,195 -"3330",0,1,1,58,3,1,5,1,5,1,0,0,195 -"3331",0,0,0,61,4,1,5,1,7,1,1,0,195 -"3332",0,1,0,67,5,1,5,1,6,1,0,0,195 -"3333",0,0,0,68,3,1,5,1,11,1,1,0,195 -"3334",0,0,1,74,1,1,5,0,12,1,1,0,195 -"3335",0,0,0,70,5,1,5,0,8,1,0,0,195 -"3336",0,0,0,64,2,1,5,0,11,1,1,0,195 -"3337",0,1,0,70,2,1,5,0,10,1,1,0,195 -"3338",0,1,0,57,2,1,5,1,10,1,1,0,195 -"3339",0,1,0,59,2,1,4,1,12,3,1,0,196 -"3340",0,1,1,55,3,1,4,1,11,3,0,0,196 -"3341",0,1,1,56,1,1,4,0,11,3,1,0,196 -"3342",0,1,1,69,3,1,4,1,12,3,1,0,196 -"3343",0,1,0,64,3,1,4,1,11,3,0,0,196 -"3344",0,1,1,46,3,1,4,0,5,3,0,0,196 -"3345",0,1,0,68,1,1,4,1,11,3,1,0,196 -"3346",0,1,1,63,1,1,4,0,13,3,1,0,196 -"3347",0,1,1,61,1,1,4,0,7,3,1,0,196 -"3348",0,0,0,60,5,1,4,0,8,3,0,0,196 -"3349",0,1,0,51,2,1,4,1,9,3,1,0,196 -"3350",0,1,0,54,3,1,4,0,8,3,0,0,196 -"3351",0,1,1,56,2,1,4,0,9,3,0,0,196 -"3352",0,1,0,38,1,1,4,1,12,3,1,0,196 -"3353",0,1,1,56,1,1,4,1,13,3,1,0,196 -"3354",0,1,1,37,5,1,4,1,9,3,0,0,196 -"3355",0,1,0,51,2,1,4,1,9,3,1,0,196 -"3356",0,1,1,70,1,1,4,1,8,3,0,0,196 -"3357",0,1,0,41,5,1,4,0,13,3,0,0,196 -"3358",0,1,0,72,5,1,4,0,10,3,1,0,196 -"3359",0,1,0,57,3,1,4,1,10,3,1,0,196 -"3360",0,1,1,51,2,1,5,1,4,7,0,0,197 -"3361",0,1,1,47,2,1,5,0,5,7,0,0,197 -"3362",0,1,0,51,1,1,5,1,5,7,0,0,197 -"3363",0,1,0,51,4,1,5,0,9,7,0,0,197 -"3364",0,1,0,40,3,1,5,1,6,7,0,0,197 -"3365",1,1,1,42,5,1,5,1,8,7,0,0,197 -"3366",0,1,0,55,3,1,5,1,10,7,0,0,197 -"3367",0,1,0,47,2,1,5,0,5,7,1,0,197 -"3368",0,1,0,43,1,1,5,0,9,7,0,0,197 -"3369",0,1,0,40,2,1,5,0,9,7,0,0,197 -"3370",0,1,1,54,1,1,5,0,8,7,0,0,197 -"3371",0,1,1,39,3,1,5,0,9,7,0,0,197 -"3372",0,1,0,62,3,1,5,1,10,7,0,0,197 -"3373",0,0,1,34,2,1,5,0,10,7,1,0,197 -"3374",0,1,0,60,1,1,5,1,10,7,0,0,197 -"3375",0,1,1,59,3,1,5,1,8,7,0,0,197 -"3376",0,1,0,54,2,1,4,0,11,1,1,1,198 -"3377",1,1,0,65,2,1,4,0,9,1,1,1,198 -"3378",0,1,0,58,1,1,4,1,12,1,1,1,198 -"3379",0,1,0,56,2,1,4,1,13,1,1,1,198 -"3380",0,1,0,69,2,1,4,1,11,1,1,1,198 -"3381",0,0,0,52,4,1,4,1,12,1,1,1,198 -"3382",0,1,0,58,2,1,4,0,12,1,1,1,198 -"3383",0,1,1,53,2,1,4,1,12,1,1,1,198 -"3384",0,1,0,52,2,1,4,0,11,1,1,1,198 -"3385",0,0,0,56,2,1,4,1,12,1,0,1,198 -"3386",0,1,0,67,1,1,4,1,11,1,1,1,198 -"3387",0,1,0,60,3,1,4,0,12,1,1,1,198 -"3388",0,1,1,69,3,1,4,0,12,1,1,1,198 -"3389",1,0,0,45,5,1,4,0,12,1,1,1,198 -"3390",1,1,1,42,2,1,4,0,11,1,0,1,198 -"3391",0,1,0,72,1,1,4,0,11,1,1,1,198 -"3392",0,1,1,74,3,1,4,0,8,1,1,1,198 -"3393",0,1,0,62,2,1,4,1,13,1,0,1,198 -"3394",0,1,0,54,2,1,4,1,7,1,1,1,198 -"3395",0,0,1,49,2,1,5,0,13,1,1,1,199 -"3396",0,1,0,54,2,1,5,1,10,1,1,1,199 -"3397",0,1,1,50,1,1,5,1,9,1,0,1,199 -"3398",0,1,0,58,2,1,5,0,12,1,1,1,199 -"3399",0,1,0,55,2,1,5,0,12,1,1,1,199 -"3400",1,1,0,51,3,1,5,0,10,1,1,1,199 -"3401",0,1,1,48,3,1,5,1,9,1,1,1,199 -"3402",0,1,0,60,3,1,5,1,13,1,1,1,199 -"3403",1,1,1,41,3,1,5,0,10,1,0,1,199 -"3404",0,1,1,48,2,1,5,0,12,1,1,1,199 -"3405",0,1,0,59,3,1,5,0,11,1,1,1,199 -"3406",0,1,0,42,2,1,5,1,12,1,1,1,199 -"3407",0,1,0,57,1,1,5,1,12,1,1,1,199 -"3408",0,1,0,44,3,1,5,1,7,1,0,1,199 -"3409",0,1,0,49,2,1,5,0,11,1,1,1,199 -"3410",0,1,1,44,2,1,4,0,8,5,0,0,200 -"3411",1,1,0,33,5,1,4,0,8,5,0,0,200 -"3412",0,1,0,42,2,1,4,1,9,5,0,0,200 -"3413",0,1,0,43,2,1,4,0,9,5,0,0,200 -"3414",1,1,1,40,2,1,4,0,9,5,0,0,200 -"3415",1,0,0,47,5,1,4,0,6,5,0,0,200 -"3416",0,1,0,45,1,1,4,1,8,5,0,0,200 -"3417",0,1,0,33,1,1,4,0,8,5,0,0,200 -"3418",0,1,0,28,2,1,4,1,9,5,0,0,200 -"3419",0,1,1,32,4,1,4,1,7,5,1,0,200 -"3420",0,1,1,39,3,1,4,1,6,5,0,0,200 -"3421",0,0,1,48,3,1,4,0,9,5,0,0,200 -"3422",0,0,0,51,3,1,4,1,9,5,0,0,200 -"3423",0,1,0,44,4,1,4,1,6,5,0,0,200 -"3424",0,1,0,42,3,1,4,1,5,5,0,0,200 -"3425",0,1,0,41,1,1,4,0,5,5,0,0,200 -"3426",0,1,1,39,2,1,4,0,8,5,0,0,200 -"3427",0,1,0,48,3,1,4,1,5,5,0,0,200 -"3428",0,1,0,42,2,1,4,1,10,5,0,0,200 -"3429",0,1,0,45,2,1,5,0,10,1,0,0,201 -"3430",0,1,0,58,2,1,5,1,10,1,1,0,201 -"3431",0,1,0,55,4,1,5,1,10,1,1,0,201 -"3432",0,1,0,51,3,1,5,1,12,1,1,0,201 -"3433",0,1,1,44,4,1,5,1,9,1,0,0,201 -"3434",0,1,0,46,3,1,5,0,10,1,1,0,201 -"3435",0,0,1,63,5,1,5,0,10,1,1,0,201 -"3436",0,1,0,45,2,1,5,1,12,1,1,0,201 -"3437",0,1,0,60,2,1,5,0,11,1,1,0,201 -"3438",0,1,0,49,1,1,5,1,10,1,1,0,201 -"3439",0,0,1,52,2,1,5,1,8,1,1,0,201 -"3440",0,1,1,52,2,1,5,1,10,1,1,0,201 -"3441",0,1,0,46,2,1,5,1,10,1,1,0,201 -"3442",0,1,0,57,3,1,5,0,11,1,1,0,201 -"3443",0,1,0,47,3,1,5,1,12,1,0,0,201 -"3444",0,1,0,37,2,1,5,1,9,1,1,0,201 -"3445",0,1,0,48,1,1,5,1,10,1,0,0,201 -"3446",0,1,1,47,4,1,5,1,8,1,0,0,201 -"3447",0,1,1,67,4,1,5,0,5,1,0,0,201 -"3448",0,1,1,58,5,1,5,0,8,1,1,0,201 -"3449",0,1,1,59,1,1,5,1,6,1,0,0,201 -"3450",0,1,0,59,2,1,5,1,8,1,1,0,201 -"3451",1,1,1,61,3,1,5,0,7,6,0,0,202 -"3452",1,1,0,43,5,1,5,0,8,6,0,0,202 -"3453",1,1,0,53,1,1,5,0,10,6,0,0,202 -"3454",0,1,1,43,3,1,5,1,5,6,0,0,202 -"3455",0,1,1,62,1,1,5,0,11,6,1,0,202 -"3456",0,0,1,44,4,1,5,1,9,6,0,0,202 -"3457",0,1,0,54,3,1,5,0,8,6,0,0,202 -"3458",0,1,0,44,3,1,5,1,7,6,0,0,202 -"3459",0,1,0,80,3,1,5,0,12,6,1,0,202 -"3460",1,1,0,52,3,1,5,0,2,6,0,0,202 -"3461",0,0,0,63,2,1,5,0,8,6,0,0,202 -"3462",0,1,0,56,1,1,5,0,9,6,1,0,202 -"3463",0,1,0,43,1,1,5,0,5,6,0,0,202 -"3464",0,1,1,49,2,1,5,1,10,6,0,0,202 -"3465",0,1,1,42,5,1,5,1,8,6,0,0,202 -"3466",0,1,0,61,2,1,5,1,9,6,1,0,202 -"3467",0,1,0,58,2,1,5,1,10,6,1,0,202 -"3468",0,1,0,59,5,1,5,0,11,1,1,0,203 -"3469",0,1,0,59,2,1,5,0,12,1,1,0,203 -"3470",0,1,0,59,3,1,5,1,12,1,1,0,203 -"3471",0,1,0,53,3,1,5,0,10,1,1,0,203 -"3472",0,1,0,60,2,1,5,0,10,1,1,0,203 -"3473",0,0,0,57,3,1,5,1,11,1,1,0,203 -"3474",0,0,0,42,1,1,5,1,9,1,0,0,203 -"3475",0,0,0,54,1,1,5,0,10,1,1,0,203 -"3476",0,1,1,43,3,1,5,1,12,1,1,0,203 -"3477",0,1,1,42,2,1,5,1,10,1,1,0,203 -"3478",0,1,1,49,3,1,4,1,11,1,1,0,204 -"3479",0,1,0,37,2,1,4,1,9,1,0,0,204 -"3480",1,1,1,51,3,1,4,0,8,1,0,0,204 -"3481",0,1,0,58,2,1,5,1,10,1,1,1,205 -"3482",0,1,1,54,2,1,5,1,9,1,0,1,205 -"3483",0,1,0,62,2,1,5,1,10,1,1,1,205 -"3484",0,1,1,39,2,1,5,0,10,1,1,1,205 -"3485",0,1,1,60,2,1,5,1,12,1,1,1,205 -"3486",0,1,0,55,5,1,5,0,10,1,1,1,205 -"3487",0,0,0,39,2,1,5,0,11,1,0,1,205 -"3488",0,1,0,54,1,1,5,0,10,1,0,1,205 -"3489",0,1,1,45,3,1,5,1,10,1,1,1,205 -"3490",0,1,1,49,2,1,4,1,9,5,0,0,206 -"3491",0,1,0,63,1,1,4,1,9,5,0,0,206 -"3492",0,1,0,46,2,1,4,1,8,5,0,0,206 -"3493",0,1,0,49,2,1,4,0,8,5,0,0,206 -"3494",0,1,1,32,3,1,4,1,6,5,0,0,206 -"3495",1,1,1,45,2,1,4,0,12,5,0,0,206 -"3496",0,1,0,55,2,1,4,1,11,5,0,0,206 -"3497",0,1,0,57,1,1,4,1,9,5,1,0,206 -"3498",0,1,0,60,1,1,4,1,8,5,1,0,206 -"3499",0,1,0,48,1,1,4,0,9,5,1,0,206 -"3500",0,1,1,49,1,1,4,1,9,5,1,0,206 -"3501",0,1,0,61,2,1,4,0,8,5,0,0,206 -"3502",0,1,1,44,2,1,4,1,9,5,0,0,206 -"3503",0,1,0,61,1,1,4,1,5,5,0,0,206 -"3504",0,1,1,57,1,1,4,0,9,5,1,0,206 -"3505",0,1,1,38,2,1,4,0,6,5,0,0,206 -"3506",0,1,0,40,2,1,4,1,10,5,0,0,206 -"3507",0,1,0,39,2,1,4,1,8,5,0,0,206 -"3508",0,1,1,57,1,1,4,1,9,5,1,0,206 -"3509",0,1,0,69,1,1,4,0,9,5,1,0,206 -"3510",0,1,0,56,2,1,4,1,8,5,0,0,206 -"3511",0,1,0,46,1,1,4,1,6,5,0,0,206 -"3512",0,1,0,59,1,1,3,0,12,1,1,0,207 -"3513",0,1,1,73,5,1,3,0,12,1,1,0,207 -"3514",1,1,1,40,5,1,3,0,11,1,0,0,207 -"3515",1,1,0,58,4,1,3,0,8,1,0,0,207 -"3516",0,1,1,64,1,1,3,0,8,1,0,0,207 -"3517",1,1,0,53,2,1,3,0,12,1,1,0,207 -"3518",0,1,1,55,3,1,3,1,5,1,0,0,207 -"3519",0,1,0,61,2,1,3,0,11,1,1,0,207 -"3520",0,1,1,76,3,1,3,0,9,1,0,0,207 -"3521",0,1,0,47,4,1,3,1,11,1,0,0,207 -"3522",1,0,1,64,3,1,3,0,12,1,1,0,207 -"3523",0,1,0,41,2,1,3,1,11,1,0,0,207 -"3524",0,0,0,52,1,1,5,0,10,1,0,1,208 -"3525",0,1,1,64,1,1,5,1,11,1,0,1,208 -"3526",0,1,0,64,1,1,5,1,8,1,0,1,208 -"3527",0,1,1,59,2,1,5,1,11,1,1,1,208 -"3528",0,1,0,59,3,1,5,1,10,1,0,1,208 -"3529",0,1,1,60,2,1,5,1,9,1,1,1,208 -"3530",0,1,0,52,2,1,5,0,9,1,0,1,208 -"3531",0,1,0,68,1,1,5,1,11,1,1,1,208 -"3532",0,1,0,50,3,1,5,1,12,1,1,1,208 -"3533",0,1,1,45,5,1,5,0,6,1,1,1,208 -"3534",0,1,1,46,2,1,5,0,11,1,1,1,208 -"3535",0,1,1,53,1,1,5,1,9,1,0,1,208 -"3536",0,1,0,56,1,1,5,0,8,1,0,1,208 -"3537",0,1,0,68,2,1,5,0,11,1,1,1,208 -"3538",0,1,1,48,2,1,5,0,9,1,0,1,208 -"3539",0,1,0,63,3,1,5,0,10,1,0,1,208 -"3540",1,1,1,49,3,1,5,0,10,1,0,1,208 -"3541",0,1,0,53,1,1,5,1,10,1,1,1,208 -"3542",0,0,0,33,2,1,4,0,8,5,0,0,209 -"3543",1,1,1,41,2,1,4,0,9,5,1,0,209 -"3544",0,1,0,66,2,1,4,1,7,5,1,0,209 -"3545",0,1,0,31,2,1,4,1,5,5,1,0,209 -"3546",0,1,1,46,2,1,4,0,9,5,0,0,209 -"3547",0,1,0,51,2,1,4,0,6,5,1,0,209 -"3548",0,1,1,39,3,1,4,1,9,5,1,0,209 -"3549",1,0,0,51,5,1,4,1,6,5,0,0,209 -"3550",0,0,0,34,1,1,4,0,9,5,0,0,209 -"3551",0,1,0,47,2,1,4,1,8,5,0,0,209 -"3552",0,1,0,38,2,1,4,1,7,5,0,0,209 -"3553",1,1,1,40,1,1,4,0,9,5,0,0,209 -"3554",0,1,1,38,1,1,4,1,2,5,1,0,209 -"3555",0,1,1,30,2,1,4,1,8,5,0,0,209 -"3556",0,1,1,44,2,1,4,1,9,5,1,0,209 -"3557",0,1,0,39,2,1,4,0,11,5,1,0,209 -"3558",0,1,0,45,1,1,4,0,6,5,0,0,209 -"3559",0,1,1,29,3,1,4,0,11,5,1,0,209 -"3560",0,1,0,41,2,1,4,1,10,5,1,0,209 -"3561",0,1,0,54,4,1,4,0,12,1,1,1,210 -"3562",0,1,1,67,2,1,4,1,9,1,1,1,210 -"3563",0,1,1,52,2,1,4,0,12,1,1,1,210 -"3564",0,1,1,60,3,1,4,1,12,1,1,1,210 -"3565",0,1,1,57,5,1,4,0,10,1,1,1,210 -"3566",0,1,0,50,2,1,4,0,12,1,1,1,210 -"3567",0,1,1,52,2,1,4,0,11,1,0,1,210 -"3568",0,1,0,46,1,1,4,0,8,1,1,1,210 -"3569",0,1,1,46,2,1,4,1,11,1,1,1,210 -"3570",0,1,0,64,2,1,4,1,12,1,0,1,210 -"3571",0,1,1,54,1,1,4,1,8,1,1,1,210 -"3572",0,1,0,55,3,1,4,1,12,1,1,1,210 -"3573",0,1,0,61,2,1,4,1,12,1,1,1,210 -"3574",0,1,0,61,2,1,4,1,9,1,1,1,210 -"3575",0,1,0,56,2,1,4,0,10,1,0,1,210 -"3576",0,1,0,56,2,1,4,0,7,1,1,1,210 -"3577",0,0,0,64,4,1,4,0,12,1,1,1,210 -"3578",0,1,1,59,2,1,4,1,10,1,1,1,210 -"3579",0,1,1,65,5,1,4,0,10,1,1,0,211 -"3580",0,1,0,47,2,1,4,1,10,1,1,0,211 -"3581",0,1,1,61,1,1,4,1,9,1,0,0,211 -"3582",0,0,0,59,2,1,4,0,12,1,0,0,211 -"3583",0,1,0,61,1,1,4,1,13,1,1,0,211 -"3584",0,1,0,44,2,1,4,0,11,1,0,0,211 -"3585",0,1,1,57,1,1,4,0,11,1,1,0,211 -"3586",0,1,0,77,1,1,4,0,16,1,1,0,211 -"3587",0,1,1,52,2,1,4,0,12,1,0,0,211 -"3588",1,0,1,47,5,1,4,0,8,1,0,0,211 -"3589",0,1,1,52,1,1,4,1,10,1,0,0,211 -"3590",0,1,0,67,2,1,4,1,10,1,0,0,211 -"3591",0,1,0,61,2,1,4,1,13,1,1,0,211 -"3592",0,1,0,64,2,1,4,0,12,1,1,0,211 -"3593",0,1,1,42,5,1,4,0,8,1,1,0,211 -"3594",0,1,0,69,2,1,4,0,13,1,1,0,211 -"3595",0,0,1,49,3,1,4,1,12,1,0,0,211 -"3596",0,1,0,68,1,1,4,1,11,1,1,0,211 -"3597",0,1,1,32,2,1,4,1,11,1,1,0,211 -"3598",0,1,1,60,2,0,4,0,10,1,1,1,212 -"3599",0,1,1,68,3,0,4,0,11,1,1,1,212 -"3600",0,1,1,60,1,0,4,0,12,1,1,1,212 -"3601",0,0,0,60,2,0,4,0,11,1,0,1,212 -"3602",0,1,0,60,2,0,4,1,12,1,1,1,212 -"3603",0,1,1,56,2,0,4,0,12,1,0,1,212 -"3604",0,0,0,63,2,0,4,0,10,1,0,1,212 -"3605",0,1,1,53,2,0,4,0,11,1,0,1,212 -"3606",0,1,0,62,2,0,4,0,14,1,1,1,212 -"3607",0,1,0,67,2,0,4,0,11,1,1,1,212 -"3608",0,1,0,57,1,0,4,0,10,1,0,1,212 -"3609",0,1,1,60,2,0,4,0,10,1,1,1,212 -"3610",0,1,1,58,1,0,4,0,14,1,1,1,212 -"3611",1,0,1,60,2,0,4,0,10,1,0,1,212 -"3612",0,1,1,56,1,0,4,0,12,1,1,1,212 -"3613",0,1,0,64,5,0,4,0,13,1,1,1,212 -"3614",0,1,0,39,2,1,3,1,8,5,1,0,213 -"3615",0,1,0,57,2,1,3,1,10,5,1,0,213 -"3616",0,1,1,47,2,1,3,1,5,5,0,0,213 -"3617",0,1,0,45,3,1,3,1,11,5,1,0,213 -"3618",0,1,1,44,5,1,3,1,9,5,0,0,213 -"3619",0,1,1,45,2,1,3,1,5,5,0,0,213 -"3620",0,1,0,35,3,1,3,0,12,5,0,0,213 -"3621",0,1,1,54,1,1,3,1,7,5,0,0,213 -"3622",0,1,0,54,1,1,3,0,9,5,0,0,213 -"3623",1,1,1,54,2,1,3,0,9,5,0,0,213 -"3624",0,1,0,55,1,1,3,1,8,5,0,0,213 -"3625",0,1,0,58,2,1,3,0,7,5,1,0,213 -"3626",0,1,1,56,1,1,3,0,7,5,0,0,213 -"3627",0,1,0,36,3,1,3,0,9,5,0,0,213 -"3628",0,1,1,41,1,1,3,0,10,5,1,0,213 -"3629",0,1,0,60,1,1,3,0,5,5,0,0,213 -"3630",1,1,1,39,4,1,3,0,3,5,0,0,213 -"3631",1,1,0,45,5,1,3,0,10,5,0,0,213 -"3632",0,1,0,55,2,1,3,1,9,5,0,0,213 -"3633",0,1,0,46,3,1,4,1,6,6,0,0,214 -"3634",0,1,0,58,2,1,4,1,9,6,1,0,214 -"3635",0,0,0,52,4,1,4,0,9,6,0,0,214 -"3636",0,1,0,60,3,1,4,1,7,6,1,0,214 -"3637",0,1,0,58,1,1,4,1,7,6,0,0,214 -"3638",0,1,0,35,5,1,4,1,6,6,0,0,214 -"3639",0,1,1,41,4,1,4,1,4,6,0,0,214 -"3640",0,1,0,61,1,1,4,1,12,6,1,0,214 -"3641",0,1,1,29,2,1,4,0,9,6,1,0,214 -"3642",0,1,0,53,2,1,4,0,8,6,0,0,214 -"3643",1,0,1,50,4,1,4,0,6,6,0,0,214 -"3644",0,1,0,58,2,1,4,1,10,6,1,0,214 -"3645",0,1,0,50,3,1,4,1,8,6,0,0,214 -"3646",0,1,1,45,1,1,4,1,8,6,1,0,214 -"3647",0,1,0,44,1,1,4,1,10,6,1,0,214 -"3648",0,1,1,61,1,1,4,0,8,6,1,0,214 -"3649",1,1,1,64,1,1,4,0,9,1,0,1,215 -"3650",0,1,1,50,3,1,4,1,10,1,0,1,215 -"3651",0,0,0,62,2,1,4,0,11,1,1,1,215 -"3652",0,1,1,62,3,1,4,0,11,1,0,1,215 -"3653",0,1,1,65,2,1,4,0,11,1,1,1,215 -"3654",0,1,0,62,5,1,4,1,11,1,1,1,215 -"3655",0,1,0,52,1,1,4,1,11,1,1,1,215 -"3656",0,1,0,56,2,1,4,1,9,1,1,1,215 -"3657",0,1,0,40,2,1,4,1,10,1,0,1,215 -"3658",0,1,0,62,1,1,4,1,12,1,1,1,215 -"3659",0,1,1,58,1,1,4,1,13,1,1,1,215 -"3660",0,1,0,53,3,1,4,1,7,1,0,1,215 -"3661",0,1,0,55,1,1,4,1,11,1,1,1,215 -"3662",0,1,0,49,1,1,4,0,8,1,0,1,215 -"3663",0,1,0,58,2,1,4,1,6,1,0,1,215 -"3664",0,0,1,66,1,1,4,0,12,1,1,1,215 -"3665",0,1,0,48,2,1,4,1,10,1,0,1,215 -"3666",0,1,1,65,3,1,4,1,10,1,1,1,215 -"3667",0,1,0,47,1,1,4,1,10,1,0,1,215 -"3668",0,1,0,39,4,1,5,0,10,1,1,0,216 -"3669",0,1,1,60,1,1,5,1,9,1,0,0,216 -"3670",0,1,0,60,1,1,5,0,11,1,0,0,216 -"3671",0,1,1,45,2,1,5,1,8,1,0,0,216 -"3672",0,1,1,65,1,1,5,1,11,1,1,0,216 -"3673",0,1,0,64,1,1,5,0,11,1,0,0,216 -"3674",0,1,0,51,2,1,5,1,10,1,1,0,216 -"3675",0,1,1,62,1,1,5,1,10,1,1,0,216 -"3676",0,1,1,61,2,1,5,1,11,1,1,0,216 -"3677",0,1,1,48,4,1,5,1,9,1,1,0,216 -"3678",0,1,0,60,2,1,5,1,11,1,1,0,216 -"3679",0,1,1,64,2,1,5,0,8,1,1,0,216 -"3680",0,1,1,53,1,1,5,0,12,1,1,0,216 -"3681",0,0,0,37,3,1,5,1,9,1,1,0,216 -"3682",0,1,0,58,3,1,5,0,8,1,0,0,216 -"3683",0,1,0,45,2,1,5,1,6,1,0,0,216 -"3684",0,1,1,57,3,1,5,1,10,1,0,0,216 -"3685",0,1,0,60,4,1,5,0,6,1,0,0,216 -"3686",0,1,1,54,2,1,5,1,12,1,1,0,216 -"3687",0,1,1,53,1,1,5,0,11,1,0,0,216 -"3688",0,1,0,69,3,1,5,0,11,1,1,1,217 -"3689",0,1,0,59,2,1,5,1,11,1,0,1,217 -"3690",0,0,0,54,2,1,5,1,12,1,1,1,217 -"3691",0,1,0,65,1,1,5,1,13,1,1,1,217 -"3692",0,1,0,54,3,1,5,1,13,1,1,1,217 -"3693",0,1,0,54,1,1,5,1,12,1,1,1,217 -"3694",0,1,0,53,2,1,5,1,13,1,1,1,217 -"3695",0,1,1,56,4,1,5,1,12,1,0,1,217 -"3696",0,1,0,66,2,1,5,1,12,1,0,1,217 -"3697",0,1,0,52,2,1,5,1,11,1,1,1,217 -"3698",0,1,0,48,2,1,5,0,9,1,0,1,217 -"3699",0,1,0,59,1,1,5,1,12,1,1,1,217 -"3700",0,1,1,58,2,1,5,0,12,1,1,1,217 -"3701",0,1,1,45,3,1,5,0,13,1,1,1,217 -"3702",0,1,0,57,5,1,5,0,11,1,1,1,217 -"3703",0,1,0,63,1,1,5,1,13,1,1,1,217 -"3704",0,1,0,61,1,1,5,1,11,1,1,1,217 -"3705",0,0,0,62,1,1,5,0,9,1,0,1,217 -"3706",0,1,1,55,1,1,5,0,10,1,1,1,217 -"3707",0,1,1,64,2,0,4,1,11,1,1,1,218 -"3708",0,1,0,64,3,0,4,1,10,1,1,1,218 -"3709",0,1,1,49,3,0,4,1,11,1,1,1,218 -"3710",0,1,0,58,2,0,4,1,12,1,1,1,218 -"3711",0,1,0,52,2,0,4,1,11,1,0,1,218 -"3712",0,1,0,56,2,0,4,1,13,1,1,1,218 -"3713",1,1,1,53,2,0,4,1,13,1,1,1,218 -"3714",0,1,0,62,3,0,4,1,13,1,1,1,218 -"3715",0,1,0,53,1,0,4,1,12,1,1,1,218 -"3716",0,1,0,47,3,0,4,1,12,1,1,1,218 -"3717",0,1,0,71,3,0,4,1,10,1,1,1,218 -"3718",0,1,1,57,2,0,4,1,13,1,1,1,218 -"3719",1,1,0,58,1,0,4,1,9,1,0,1,218 -"3720",0,1,0,69,2,0,4,1,10,1,1,1,218 -"3721",0,1,0,69,3,0,4,0,12,1,1,1,218 -"3722",0,1,0,45,2,0,4,1,11,1,1,1,218 -"3723",0,1,0,57,3,0,4,1,12,1,1,1,218 -"3724",0,1,0,64,2,0,4,1,12,1,1,1,218 -"3725",0,1,1,59,3,0,4,1,13,1,1,1,218 -"3726",0,1,0,59,2,0,4,1,8,1,1,1,218 -"3727",0,1,0,62,5,0,4,1,9,1,1,1,218 -"3728",0,1,1,51,1,0,4,1,13,1,1,1,218 -"3729",0,1,1,54,2,0,4,1,12,1,1,1,218 -"3730",0,1,1,61,2,0,5,0,13,1,0,1,219 -"3731",0,1,0,46,3,0,5,0,10,1,1,1,219 -"3732",1,1,1,72,1,0,5,0,13,1,1,1,219 -"3733",0,1,1,52,1,0,5,0,11,1,0,1,219 -"3734",0,1,1,54,2,0,5,0,10,1,1,1,219 -"3735",1,1,0,45,2,0,5,0,12,1,1,1,219 -"3736",0,1,0,59,1,0,5,0,11,1,0,1,219 -"3737",1,1,1,56,1,0,5,0,12,1,1,1,219 -"3738",0,1,0,63,2,0,5,0,10,1,0,1,219 -"3739",0,1,1,55,1,0,5,0,12,1,0,1,219 -"3740",0,1,1,48,2,0,5,0,8,1,1,1,219 -"3741",0,1,0,60,1,0,5,0,9,1,1,1,219 -"3742",0,1,1,59,1,0,5,0,12,1,0,1,219 -"3743",1,0,0,46,4,0,5,0,11,1,1,1,219 -"3744",0,1,0,52,1,0,5,0,10,1,1,1,219 -"3745",0,1,1,52,1,0,5,0,10,1,1,1,219 -"3746",0,1,0,47,1,0,5,0,11,1,1,1,219 -"3747",0,1,0,62,1,0,5,0,11,1,1,1,219 -"3748",1,1,1,71,5,0,5,0,13,1,1,1,219 -"3749",0,1,1,65,2,0,5,0,12,1,0,1,219 -"3750",0,1,1,55,2,0,5,0,12,1,1,1,219 -"3751",0,1,0,48,5,1,3,0,2,7,0,0,220 -"3752",0,1,1,46,2,1,3,0,8,7,1,0,220 -"3753",0,1,1,36,2,1,3,1,5,7,1,0,220 -"3754",0,0,1,35,4,1,3,0,6,7,0,0,220 -"3755",0,1,1,33,5,1,3,1,9,7,0,0,220 -"3756",1,1,1,34,3,1,3,0,7,7,0,0,220 -"3757",0,1,0,51,1,1,3,0,11,7,0,0,220 -"3758",0,0,1,30,3,1,3,0,3,7,0,0,220 -"3759",1,1,0,47,3,1,3,0,5,7,0,0,220 -"3760",0,1,1,38,5,1,3,0,10,7,0,0,220 -"3761",1,1,0,33,5,1,3,1,5,7,0,0,220 -"3762",0,0,1,32,2,1,3,0,6,7,0,0,220 -"3763",0,1,0,39,2,1,3,1,8,7,0,0,220 -"3764",0,1,0,59,2,1,4,1,9,1,1,0,221 -"3765",0,1,0,48,3,1,4,1,12,1,1,0,221 -"3766",0,1,1,56,2,1,4,1,7,1,0,0,221 -"3767",0,1,0,49,1,1,4,1,9,1,0,0,221 -"3768",0,1,0,68,1,1,4,0,11,1,1,0,221 -"3769",0,0,0,50,4,1,4,0,11,1,0,0,221 -"3770",0,1,0,58,2,1,4,0,13,1,1,0,221 -"3771",0,1,0,57,3,1,4,0,11,1,0,1,222 -"3772",0,0,1,51,3,1,4,1,12,1,1,1,222 -"3773",0,1,0,45,2,1,4,1,10,1,1,1,222 -"3774",0,1,0,47,2,1,4,1,11,1,0,1,222 -"3775",0,1,0,60,1,1,4,1,12,1,1,1,222 -"3776",0,1,1,53,2,1,4,1,10,1,1,1,222 -"3777",0,1,0,61,1,1,4,1,10,1,0,1,222 -"3778",0,1,1,48,3,1,4,1,12,1,1,1,222 -"3779",0,1,0,60,2,1,4,1,11,1,0,1,222 -"3780",0,1,0,55,2,1,4,1,12,1,1,1,222 -"3781",0,1,1,52,2,1,4,1,12,1,1,1,222 -"3782",0,1,1,60,1,1,4,1,10,1,1,1,222 -"3783",0,1,1,52,1,1,4,1,7,1,0,1,222 -"3784",1,0,1,57,4,1,4,1,9,1,1,1,222 -"3785",0,1,1,59,2,1,4,1,8,1,1,1,222 -"3786",0,1,1,61,2,1,4,1,10,1,1,1,222 -"3787",0,1,0,59,3,1,4,1,12,1,1,1,222 -"3788",0,1,0,49,2,1,4,1,11,1,1,1,222 -"3789",0,1,0,64,2,1,4,0,8,1,0,1,222 -"3790",0,1,0,43,2,1,3,0,11,3,1,0,223 -"3791",0,1,1,49,3,1,3,1,7,3,1,0,223 -"3792",0,1,1,47,2,1,3,0,10,3,0,0,223 -"3793",0,0,0,36,5,1,3,1,9,3,0,0,223 -"3794",0,1,0,35,2,1,3,1,12,3,1,0,223 -"3795",0,1,1,45,2,1,3,0,9,3,0,0,223 -"3796",0,1,0,60,2,1,3,1,10,3,1,0,223 -"3797",1,1,1,59,2,1,3,0,11,3,0,0,223 -"3798",0,1,0,59,1,1,3,1,10,3,0,0,223 -"3799",0,1,1,52,4,1,3,1,10,3,0,0,223 -"3800",0,1,1,56,3,1,3,1,11,3,0,0,223 -"3801",0,1,1,51,1,1,3,1,9,3,0,0,223 -"3802",0,1,1,53,1,1,3,0,10,3,0,0,223 -"3803",0,1,0,44,2,1,3,1,6,4,0,0,224 -"3804",0,1,1,48,2,1,3,1,4,4,0,0,224 -"3805",0,1,1,42,2,1,3,0,7,4,0,0,224 -"3806",0,1,0,51,1,1,3,1,10,4,0,0,224 -"3807",0,1,0,48,3,1,3,1,7,4,0,0,224 -"3808",0,0,1,48,1,1,3,0,9,4,0,0,224 -"3809",0,1,0,71,1,1,3,1,9,4,0,0,224 -"3810",0,1,0,58,2,1,3,0,9,4,0,0,224 -"3811",0,1,1,61,1,1,3,1,9,4,0,0,224 -"3812",0,1,0,49,2,1,3,1,5,4,0,0,224 -"3813",0,1,0,61,1,1,3,1,10,4,1,0,224 -"3814",0,1,0,43,2,1,3,1,9,4,0,0,224 -"3815",0,1,1,58,3,1,5,1,10,3,1,0,225 -"3816",0,1,0,54,2,1,5,1,11,3,0,0,225 -"3817",0,1,0,44,2,1,5,1,9,3,0,0,225 -"3818",0,1,0,40,1,1,5,1,11,3,1,0,225 -"3819",0,1,0,49,1,1,5,1,7,3,1,0,225 -"3820",0,1,1,56,2,1,5,0,10,3,0,0,225 -"3821",0,1,0,49,2,1,5,1,13,3,0,0,225 -"3822",0,1,0,38,1,1,5,1,10,3,1,0,225 -"3823",0,1,0,48,2,1,5,0,10,3,0,0,225 -"3824",0,1,1,69,2,1,5,1,6,3,0,0,225 -"3825",0,1,1,57,1,1,5,1,10,3,0,0,225 -"3826",0,1,1,52,2,1,5,0,11,3,0,0,225 -"3827",1,1,1,44,4,1,5,0,9,3,0,0,225 -"3828",0,1,1,56,3,1,5,1,9,3,0,0,225 -"3829",0,1,0,52,2,1,5,1,9,3,0,0,225 -"3830",0,0,0,46,4,1,4,0,13,1,1,0,226 -"3831",0,1,0,43,5,1,4,1,8,1,0,0,226 -"3832",0,1,0,62,2,1,4,0,9,1,0,0,226 -"3833",0,1,0,59,2,1,4,0,12,1,0,0,226 -"3834",0,0,0,76,3,1,4,0,9,1,0,0,226 -"3835",0,1,0,59,3,1,4,1,10,1,1,0,226 -"3836",0,1,0,52,3,1,4,1,11,1,1,0,226 -"3837",0,1,0,55,3,1,4,0,10,1,1,0,226 -"3838",0,1,1,52,2,1,4,0,10,1,0,0,226 -"3839",0,1,0,62,3,1,4,1,11,1,1,0,226 -"3840",1,1,1,60,3,1,4,0,12,1,1,0,226 -"3841",0,1,0,57,3,1,4,1,10,1,0,0,226 -"3842",0,1,0,52,2,1,4,1,10,1,0,0,226 -"3843",0,1,0,54,1,1,4,0,11,1,0,0,226 -"3844",0,1,0,61,2,1,4,0,11,1,1,0,226 -"3845",0,1,1,61,3,1,4,0,10,1,1,0,226 -"3846",0,1,0,57,2,1,4,0,10,1,0,0,226 -"3847",0,1,0,40,2,1,4,1,13,1,1,0,226 -"3848",0,1,0,48,2,1,4,1,9,1,0,0,226 -"3849",0,1,1,58,1,1,4,0,11,1,0,0,226 -"3850",0,1,0,63,2,1,4,0,10,1,1,0,226 -"3851",0,1,0,58,3,1,4,1,11,1,1,0,226 -"3852",0,1,0,54,1,1,4,1,10,1,1,0,226 -"3853",1,1,1,68,1,1,4,0,11,1,0,0,226 -"3854",0,0,1,59,3,1,4,1,12,1,1,0,226 -"3855",0,1,0,53,3,1,4,1,9,1,1,0,226 -"3856",0,1,0,48,3,1,4,1,12,1,1,0,226 -"3857",0,1,1,60,2,1,4,1,10,1,0,0,226 -"3858",0,1,0,50,2,1,4,0,10,1,1,0,226 -"3859",0,1,1,60,2,1,4,1,11,1,1,0,226 -"3860",1,1,0,69,2,1,4,0,11,1,0,0,226 -"3861",0,1,0,52,2,1,4,0,11,1,1,0,226 -"3862",0,1,0,54,3,1,4,0,12,1,1,0,226 -"3863",0,1,1,47,3,1,4,1,11,1,1,0,226 -"3864",0,1,0,37,2,1,4,0,8,3,0,0,227 -"3865",0,1,0,64,4,1,4,0,12,3,0,0,227 -"3866",1,1,1,42,2,1,4,0,11,3,1,0,227 -"3867",0,1,1,54,3,1,4,0,3,3,0,0,227 -"3868",0,1,1,50,3,1,4,1,5,3,0,0,227 -"3869",0,1,1,60,3,1,4,0,9,3,0,0,227 -"3870",0,1,0,58,1,1,4,1,12,3,1,0,227 -"3871",1,0,1,58,5,1,4,0,11,3,1,0,227 -"3872",1,1,0,45,1,1,4,1,7,3,1,0,227 -"3873",1,1,0,40,5,1,4,1,10,6,0,0,228 -"3874",0,1,0,48,3,1,4,0,10,6,1,0,228 -"3875",0,1,0,47,3,1,4,0,6,6,0,0,228 -"3876",0,1,1,55,2,1,4,1,9,6,1,0,228 -"3877",0,1,1,31,2,1,4,1,6,6,1,0,228 -"3878",0,1,1,48,3,1,4,0,7,6,0,0,228 -"3879",0,1,1,50,5,1,4,1,7,6,0,0,228 -"3880",0,1,0,30,2,1,4,1,10,6,0,0,228 -"3881",0,1,0,40,2,1,4,1,13,6,0,0,228 -"3882",0,1,0,71,2,1,4,0,3,5,0,0,229 -"3883",0,1,0,69,3,1,4,1,11,5,0,0,229 -"3884",0,1,0,50,2,1,4,1,9,5,1,0,229 -"3885",1,1,1,54,5,1,4,1,8,5,1,0,229 -"3886",1,1,0,56,3,1,4,1,7,5,0,0,229 -"3887",0,1,0,45,5,1,4,1,5,5,1,0,229 -"3888",0,1,1,46,2,1,4,0,3,5,0,0,229 -"3889",0,1,0,51,3,1,4,1,2,5,0,0,229 -"3890",1,1,0,60,1,1,4,0,8,5,1,0,229 -"3891",0,1,0,23,3,1,4,1,5,5,0,0,229 -"3892",0,0,0,48,3,1,4,0,9,5,1,0,229 -"3893",0,1,0,46,2,1,4,1,6,5,0,0,229 -"3894",0,1,0,47,5,1,4,1,9,5,0,0,229 -"3895",0,1,1,45,4,1,4,0,4,5,0,0,229 -"3896",0,1,0,42,5,1,4,1,9,5,1,0,229 -"3897",1,1,1,49,2,1,4,0,8,5,0,0,229 -"3898",0,1,1,43,2,1,4,0,4,5,0,0,229 -"3899",0,1,0,49,3,1,5,1,9,2,1,0,230 -"3900",0,1,0,57,1,1,5,1,12,2,1,0,230 -"3901",0,1,1,50,1,1,5,0,12,2,1,0,230 -"3902",0,1,0,59,2,1,5,1,12,2,1,0,230 -"3903",0,1,1,48,1,1,5,0,5,2,0,0,230 -"3904",0,0,1,57,2,1,5,1,11,2,1,0,230 -"3905",0,1,0,27,5,1,5,1,5,2,0,0,230 -"3906",0,1,0,66,2,1,5,0,13,2,1,0,230 -"3907",0,1,0,56,1,1,5,0,8,2,1,0,230 -"3908",0,1,1,61,1,1,5,0,11,2,1,0,230 -"3909",0,1,1,55,3,1,5,1,11,2,1,0,230 -"3910",0,1,1,80,1,1,5,0,11,2,1,0,230 -"3911",0,1,0,49,2,1,5,1,7,2,0,0,230 -"3912",0,1,1,55,5,1,4,1,13,2,1,0,231 -"3913",0,1,1,49,1,1,4,0,7,2,1,0,231 -"3914",0,1,0,55,5,1,4,1,13,2,1,0,231 -"3915",0,1,0,57,1,1,4,0,9,2,1,0,231 -"3916",1,1,1,37,2,1,4,1,9,2,0,0,231 -"3917",0,1,0,53,1,1,4,1,12,2,1,0,231 -"3918",0,1,1,58,3,1,4,0,11,2,1,0,231 -"3919",0,1,1,61,2,1,4,0,10,2,1,0,231 -"3920",0,1,0,46,5,1,4,0,11,2,0,0,231 -"3921",1,1,0,44,4,1,4,0,9,2,1,0,231 -"3922",0,1,1,66,3,1,4,1,12,2,1,0,231 -"3923",0,1,0,51,4,1,4,0,11,2,1,0,231 -"3924",0,1,0,49,1,1,4,0,10,2,1,0,231 -"3925",0,1,1,38,2,1,4,0,12,2,1,0,231 -"3926",1,1,0,41,3,1,4,1,12,2,1,0,231 -"3927",0,1,0,55,2,1,4,0,8,4,0,0,232 -"3928",0,1,0,48,2,1,4,0,8,4,0,0,232 -"3929",0,1,0,55,2,1,4,1,8,4,1,0,232 -"3930",1,1,0,48,2,1,4,0,11,4,0,0,232 -"3931",0,1,0,49,1,1,4,1,11,4,0,0,232 -"3932",0,1,0,32,1,1,4,1,11,4,0,0,232 -"3933",0,1,0,55,1,1,4,1,9,4,0,0,232 -"3934",0,1,0,42,1,1,4,1,8,4,0,0,232 -"3935",0,1,0,54,1,1,4,0,7,4,0,0,232 -"3936",0,1,1,46,3,1,4,1,9,4,0,0,232 -"3937",1,1,0,46,2,1,4,0,2,4,0,0,232 -"3938",0,1,1,72,1,1,4,1,9,4,1,0,232 -"3939",0,1,0,60,1,1,4,1,10,4,1,0,232 -"3940",0,1,1,49,2,1,4,1,5,4,0,0,232 -"3941",0,1,1,64,2,1,4,1,9,4,0,0,232 -"3942",0,1,0,49,1,1,4,1,9,4,0,0,232 -"3943",0,1,1,54,2,1,5,1,7,1,0,0,233 -"3944",0,1,0,45,1,1,5,0,7,1,0,0,233 -"3945",0,1,0,71,3,1,5,1,12,1,1,0,233 -"3946",0,1,1,64,3,1,5,0,11,1,1,0,233 -"3947",0,1,0,65,3,1,5,1,12,1,1,0,233 -"3948",0,1,0,66,3,1,5,0,13,1,1,0,233 -"3949",0,1,0,57,4,1,5,0,13,1,1,0,233 -"3950",0,1,0,57,2,1,5,0,13,1,1,0,233 -"3951",0,1,0,54,2,1,5,1,8,1,1,0,233 -"3952",1,1,0,58,2,1,5,0,12,1,1,0,233 -"3953",0,1,0,64,1,1,5,1,12,1,1,0,233 -"3954",0,1,0,63,2,1,5,1,12,1,1,0,233 -"3955",0,1,0,64,3,1,5,1,12,1,1,0,233 -"3956",0,1,1,48,2,1,5,1,9,1,0,0,233 -"3957",0,1,1,62,2,1,5,1,13,1,0,0,233 -"3958",0,1,0,60,1,1,5,0,16,1,1,0,233 -"3959",0,1,0,63,2,1,5,1,12,1,1,0,233 -"3960",0,1,0,52,2,1,5,0,12,1,1,0,233 -"3961",0,1,0,62,1,1,5,1,11,1,1,0,233 -"3962",0,1,0,47,3,1,5,1,8,1,1,0,233 -"3963",0,1,1,54,1,1,5,0,12,1,1,0,233 -"3964",0,1,1,69,2,1,5,1,9,1,1,0,233 -"3965",0,1,0,55,1,1,5,1,1,1,0,0,233 -"3966",0,1,1,65,4,1,5,1,10,1,1,0,233 -"3967",0,1,1,62,1,1,5,1,11,4,0,0,234 -"3968",0,1,0,54,5,1,5,1,10,4,0,0,234 -"3969",1,0,0,40,2,1,5,0,7,4,0,0,234 -"3970",0,0,0,59,5,1,5,0,9,4,0,0,234 -"3971",0,1,0,56,1,1,5,1,9,4,0,0,234 -"3972",0,1,0,51,4,1,5,1,7,4,0,0,234 -"3973",0,1,0,47,2,1,5,1,9,4,0,0,234 -"3974",0,1,0,61,5,1,5,1,9,4,1,0,234 -"3975",0,1,0,47,1,1,5,1,7,4,0,0,234 -"3976",0,1,1,45,4,1,5,0,10,4,0,0,234 -"3977",0,1,1,43,4,1,5,1,9,4,0,0,234 -"3978",1,1,1,47,3,1,5,1,8,4,0,0,234 -"3979",0,1,0,40,3,1,5,0,10,4,0,0,234 -"3980",0,1,0,50,2,1,5,1,11,4,1,0,234 -"3981",0,1,1,54,4,1,5,1,7,4,0,0,234 -"3982",0,1,0,44,4,1,5,1,11,4,1,0,234 -"3983",0,1,0,69,1,1,4,0,1,5,0,0,235 -"3984",0,1,1,37,3,1,4,0,5,5,1,0,235 -"3985",1,1,1,30,4,1,4,1,9,5,1,0,235 -"3986",0,1,1,67,3,1,4,0,9,5,0,0,235 -"3987",1,0,0,50,5,1,4,1,5,5,0,0,235 -"3988",0,1,1,43,5,1,4,1,8,5,0,0,235 -"3989",0,0,1,42,4,1,4,1,9,5,0,0,235 -"3990",0,1,0,50,3,1,4,1,7,5,1,0,235 -"3991",0,1,0,49,2,1,4,1,11,2,1,0,236 -"3992",0,1,1,40,1,1,4,1,10,2,0,0,236 -"3993",0,1,1,47,1,1,4,1,9,2,0,0,236 -"3994",0,1,0,69,1,1,4,0,11,2,0,0,236 -"3995",1,1,0,45,3,1,4,1,8,2,1,0,236 -"3996",1,1,1,55,2,1,4,0,9,2,1,0,236 -"3997",0,1,1,48,1,1,4,0,10,2,0,0,236 -"3998",0,1,0,57,1,1,4,1,11,2,1,0,236 -"3999",0,1,0,61,1,1,4,1,10,2,1,0,236 -"4000",0,1,1,48,1,1,4,0,12,2,1,0,236 -"4001",0,1,0,72,1,1,4,1,10,2,0,0,236 -"4002",0,1,0,62,1,1,4,1,9,2,0,0,236 -"4003",1,1,1,65,2,1,4,0,9,2,0,0,236 -"4004",0,1,1,49,1,1,4,1,8,2,0,0,236 -"4005",0,1,1,57,3,1,4,0,10,2,0,0,236 -"4006",0,1,1,30,2,1,4,1,10,2,0,0,236 -"4007",0,1,0,52,1,1,4,0,11,2,0,0,236 -"4008",0,1,1,47,1,1,4,1,9,2,0,0,236 -"4009",1,1,0,66,2,1,4,0,10,2,1,0,236 -"4010",0,1,1,46,1,1,4,1,8,2,0,0,236 -"4011",0,1,0,61,1,1,4,1,10,2,0,0,236 -"4012",0,1,0,48,2,1,4,1,8,2,0,0,236 -"4013",0,1,1,38,1,1,4,1,7,2,1,0,236 -"4014",0,1,1,47,3,1,4,1,12,2,0,0,236 -"4015",0,1,1,54,2,1,4,1,10,2,0,0,236 -"4016",0,1,1,48,3,1,4,0,12,1,0,0,237 -"4017",0,1,0,58,2,1,4,1,7,1,1,0,237 -"4018",1,1,0,43,2,1,4,1,8,1,0,0,237 -"4019",0,1,0,40,2,1,4,1,6,1,0,0,237 -"4020",0,1,0,61,2,1,4,0,9,1,0,0,237 -"4021",0,0,0,62,1,1,4,0,10,1,1,0,237 -"4022",0,1,0,59,3,1,4,1,12,1,1,0,237 -"4023",0,1,0,56,2,1,4,0,12,1,0,0,237 -"4024",1,1,1,40,2,1,4,0,11,1,0,0,237 -"4025",0,1,0,25,3,1,4,1,10,1,0,0,237 -"4026",0,1,0,62,2,1,4,0,10,1,0,0,237 -"4027",0,1,0,44,2,1,4,1,7,1,1,0,237 -"4028",0,1,0,36,2,1,4,0,7,1,1,0,237 -"4029",1,1,0,54,4,1,4,0,10,1,0,0,237 -"4030",0,1,1,51,1,1,4,0,12,1,0,0,237 -"4031",0,1,0,56,2,1,4,1,9,1,1,0,237 -"4032",0,1,0,64,2,1,4,0,10,1,0,0,237 -"4033",0,1,0,57,2,1,4,1,8,1,1,0,237 -"4034",0,1,1,46,5,1,4,0,6,1,0,0,237 -"4035",0,1,0,56,3,1,4,0,10,1,1,0,237 -"4036",0,1,1,51,2,1,4,0,7,1,0,0,237 -"4037",0,1,0,56,2,1,4,0,11,1,0,0,237 -"4038",0,1,0,60,4,1,4,0,10,1,0,0,237 -"4039",0,1,0,52,2,1,4,0,10,1,0,0,237 -"4040",0,1,1,55,2,1,4,1,11,4,1,0,238 -"4041",0,1,1,64,2,1,4,1,9,4,1,0,238 -"4042",0,1,1,49,2,1,4,0,10,4,1,0,238 -"4043",1,1,1,55,2,1,4,0,12,4,1,0,238 -"4044",0,1,1,67,2,1,4,0,12,4,0,0,238 -"4045",0,1,1,55,1,1,4,0,12,4,1,0,238 -"4046",0,1,1,60,1,1,4,0,10,4,1,0,238 -"4047",0,1,1,58,2,1,4,0,12,4,1,0,238 -"4048",0,1,0,52,3,1,4,0,13,4,0,0,238 -"4049",0,1,1,47,2,1,4,1,9,4,0,0,238 -"4050",0,1,0,59,5,1,4,1,11,4,1,0,238 -"4051",0,1,1,52,1,1,4,0,5,4,0,0,238 -"4052",0,0,0,59,2,1,4,0,10,4,1,0,238 -"4053",0,1,1,60,1,1,4,1,10,4,1,0,238 -"4054",0,1,1,47,2,1,4,0,9,4,0,0,238 -"4055",0,1,1,39,3,1,4,1,10,4,0,0,238 -"4056",0,1,1,56,2,1,4,1,10,4,0,0,238 -"4057",0,1,0,61,2,1,5,0,11,5,0,0,239 -"4058",0,1,1,48,5,1,5,0,11,5,1,0,239 -"4059",0,1,0,55,2,1,5,1,10,5,1,0,239 -"4060",0,0,0,44,3,1,5,1,9,5,0,0,239 -"4061",0,1,0,51,2,1,5,0,2,5,0,0,239 -"4062",0,1,1,47,2,1,5,0,9,5,0,0,239 -"4063",0,1,0,50,3,1,5,1,8,5,0,0,239 -"4064",0,1,1,41,3,1,5,0,10,5,0,0,239 -"4065",0,1,0,57,3,1,5,0,12,5,1,0,239 -"4066",0,1,0,24,3,1,5,1,7,5,0,0,239 -"4067",0,1,0,36,2,1,5,1,8,5,0,0,239 -"4068",0,1,0,64,1,1,5,0,6,5,0,0,239 -"4069",0,1,0,46,3,1,5,1,8,5,0,0,239 -"4070",0,1,1,46,2,1,5,0,10,5,1,0,239 -"4071",1,1,1,41,1,1,5,0,11,5,1,0,239 -"4072",0,1,1,37,2,1,5,0,5,5,0,0,239 -"4073",0,0,0,62,3,1,4,1,11,1,0,0,240 -"4074",0,1,0,68,1,1,4,0,12,1,1,0,240 -"4075",0,1,1,54,1,1,4,1,12,1,0,0,240 -"4076",0,1,1,56,5,1,4,1,8,1,0,0,240 -"4077",0,1,0,68,2,1,4,1,10,1,1,0,240 -"4078",0,1,1,55,3,1,4,1,10,1,1,0,240 -"4079",0,0,1,47,4,1,4,0,8,1,0,0,240 -"4080",0,1,0,65,1,1,4,0,9,1,1,0,240 -"4081",0,1,0,55,3,1,4,1,10,1,0,0,240 -"4082",0,1,0,53,1,1,4,1,12,1,1,0,240 -"4083",0,1,1,60,2,1,4,0,10,1,1,0,240 -"4084",0,1,0,55,2,1,4,1,11,1,1,0,240 -"4085",0,1,0,60,3,1,4,0,12,1,1,0,240 -"4086",0,1,0,63,3,1,4,1,11,1,1,0,240 -"4087",0,1,0,65,1,1,4,1,10,1,1,0,240 -"4088",0,0,0,41,5,1,4,0,8,1,0,0,240 -"4089",0,1,0,72,2,1,4,0,10,1,1,0,240 -"4090",0,1,0,58,2,1,4,0,10,1,0,0,240 -"4091",0,1,1,60,3,1,4,1,10,1,1,0,240 -"4092",0,1,1,45,2,1,4,0,10,5,1,0,241 -"4093",0,1,1,49,2,1,4,1,10,5,0,0,241 -"4094",0,1,0,49,2,1,4,0,12,5,1,0,241 -"4095",0,1,1,49,1,1,4,1,8,5,0,0,241 -"4096",0,1,0,65,1,1,4,0,7,5,0,0,241 -"4097",1,0,0,34,2,1,4,1,2,5,0,0,241 -"4098",1,1,1,40,5,1,4,0,7,5,0,0,241 -"4099",1,1,1,36,5,1,4,0,6,5,0,0,241 -"4100",0,1,0,54,1,1,4,1,9,5,0,0,241 -"4101",0,0,1,53,1,1,4,0,9,5,0,0,241 -"4102",0,1,0,57,2,1,4,1,9,5,0,0,241 -"4103",1,1,0,36,1,1,4,1,10,5,1,0,241 -"4104",1,1,0,42,1,1,4,0,9,5,0,0,241 -"4105",0,1,0,62,2,1,4,1,9,5,0,0,241 -"4106",1,1,0,58,1,1,4,0,11,5,0,0,241 -"4107",0,1,1,33,1,1,4,0,9,5,0,0,241 -"4108",0,1,1,64,2,1,4,1,11,5,1,0,241 -"4109",1,1,0,40,3,1,4,0,10,5,0,0,241 -"4110",0,1,0,41,5,1,4,0,5,5,0,0,241 -"4111",1,1,0,35,2,1,4,0,7,5,0,0,241 -"4112",1,0,0,47,3,1,4,1,6,5,0,0,241 -"4113",0,1,0,56,1,1,4,0,4,5,0,0,241 -"4114",0,1,0,45,1,1,4,0,10,3,1,0,242 -"4115",0,1,0,51,1,1,4,1,10,3,0,0,242 -"4116",0,1,1,48,2,1,4,1,12,3,1,0,242 -"4117",0,1,0,67,2,1,4,0,11,3,0,0,242 -"4118",0,1,1,42,3,1,4,0,6,3,0,0,242 -"4119",0,1,0,55,1,1,4,1,12,3,1,0,242 -"4120",0,1,1,56,3,1,4,0,10,3,0,0,242 -"4121",0,1,1,56,1,1,4,1,8,3,0,0,242 -"4122",0,1,0,23,3,1,4,1,10,3,1,0,242 -"4123",1,1,0,35,2,1,4,0,6,3,0,0,242 -"4124",1,1,0,48,2,1,4,1,13,3,1,0,242 -"4125",0,1,0,42,3,1,4,1,11,3,1,0,242 -"4126",0,1,0,53,1,1,4,1,12,3,0,0,242 -"4127",0,1,1,58,2,1,4,0,8,3,0,0,242 -"4128",0,1,0,58,2,1,4,0,11,3,1,0,242 -"4129",0,1,1,41,2,1,4,1,9,3,1,0,242 -"4130",0,1,0,54,1,1,4,1,8,3,0,0,242 -"4131",0,1,0,46,1,1,4,1,6,3,0,0,242 -"4132",0,1,0,54,2,1,5,1,9,5,1,0,243 -"4133",0,1,0,61,2,1,5,0,11,5,1,0,243 -"4134",0,1,0,45,2,1,5,0,8,5,0,0,243 -"4135",0,1,0,56,1,1,5,0,8,5,0,0,243 -"4136",0,1,1,49,3,1,5,1,9,5,1,0,243 -"4137",0,1,0,58,2,1,5,1,4,5,0,0,243 -"4138",0,0,0,27,2,1,5,1,2,5,0,0,243 -"4139",0,1,0,56,2,1,5,1,8,5,0,0,243 -"4140",0,1,0,61,3,1,5,1,11,5,1,0,243 -"4141",0,1,1,65,1,1,5,1,8,5,0,0,243 -"4142",0,1,1,61,2,1,5,1,9,5,0,0,243 -"4143",0,1,0,46,2,1,5,0,9,5,0,0,243 -"4144",0,1,1,46,3,1,5,0,4,5,0,0,243 -"4145",1,1,0,55,3,1,5,0,8,5,0,0,243 -"4146",0,1,1,46,1,1,5,1,9,5,0,0,243 -"4147",1,0,0,36,4,1,5,1,9,5,0,0,243 -"4148",1,1,1,53,2,1,5,0,11,5,0,0,243 -"4149",0,1,1,56,2,1,5,1,11,5,1,0,243 -"4150",0,1,0,48,1,1,5,0,11,5,0,0,243 -"4151",1,1,0,54,3,1,5,1,5,5,0,0,243 -"4152",0,0,0,62,2,1,5,0,14,5,1,0,243 -"4153",0,1,0,45,1,1,5,1,6,5,1,0,243 -"4154",1,1,1,40,3,1,5,0,4,5,0,0,243 -"4155",0,1,1,32,2,1,5,0,5,5,1,0,243 -"4156",0,1,0,50,1,1,5,1,7,5,0,0,243 -"4157",1,1,0,45,3,1,5,1,10,5,0,0,243 -"4158",0,1,1,44,2,1,5,1,10,5,0,0,243 -"4159",0,1,0,43,3,1,5,1,7,6,0,0,244 -"4160",0,1,0,35,2,1,5,1,7,6,0,0,244 -"4161",0,1,0,49,3,1,5,1,8,6,0,0,244 -"4162",1,1,1,52,1,1,5,1,9,6,0,0,244 -"4163",0,1,1,53,1,1,5,1,10,6,0,0,244 -"4164",1,1,1,45,1,1,5,0,9,6,0,0,244 -"4165",0,1,1,56,1,1,5,1,9,6,0,0,244 -"4166",0,1,1,57,1,1,5,1,12,6,1,0,244 -"4167",0,1,1,58,1,1,5,0,7,6,0,0,244 -"4168",0,1,1,50,2,1,5,0,9,6,0,0,244 -"4169",0,1,1,59,2,1,5,1,8,6,1,0,244 -"4170",0,0,1,58,4,1,5,0,7,6,0,0,244 -"4171",0,1,0,55,1,1,5,1,9,6,0,0,244 -"4172",0,1,1,44,1,1,5,1,10,6,1,0,244 -"4173",0,1,0,51,1,1,5,0,6,6,1,0,244 -"4174",0,0,1,54,2,1,5,0,8,6,1,0,244 -"4175",0,1,0,37,2,1,5,1,9,6,0,0,244 -"4176",0,1,1,49,3,1,5,1,8,6,0,0,244 -"4177",0,1,1,55,2,1,5,1,7,6,0,0,244 -"4178",0,1,0,53,2,1,5,1,8,6,0,0,244 -"4179",0,1,1,53,1,1,5,0,11,6,0,0,244 -"4180",0,1,0,40,3,1,5,1,6,6,0,0,244 -"4181",0,0,0,38,1,1,5,1,8,6,0,0,244 -"4182",0,1,0,47,2,1,5,0,5,6,0,0,244 -"4183",1,1,1,46,1,1,5,0,6,6,0,0,244 -"4184",0,1,1,48,1,1,4,1,10,1,1,0,245 -"4185",0,1,0,44,2,1,4,0,5,1,0,0,245 -"4186",1,1,0,51,5,1,4,0,9,1,0,0,245 -"4187",0,1,1,47,3,1,4,1,11,1,0,0,245 -"4188",1,1,0,31,4,1,4,1,10,1,1,0,245 -"4189",0,1,0,64,1,1,4,0,9,1,1,0,245 -"4190",0,1,1,63,4,1,4,1,10,1,0,0,245 -"4191",0,0,1,37,2,1,4,0,8,1,0,0,245 -"4192",0,1,0,60,1,1,4,1,7,1,0,0,245 -"4193",1,1,0,55,2,1,4,0,10,1,1,0,245 -"4194",0,0,0,55,2,1,4,0,6,1,0,1,246 -"4195",0,1,0,55,2,1,4,1,6,1,1,1,246 -"4196",0,1,0,53,1,1,4,1,11,1,1,1,246 -"4197",0,1,1,53,3,1,4,1,11,1,1,1,246 -"4198",0,1,0,58,4,1,4,1,10,1,1,1,246 -"4199",0,1,1,55,3,1,4,1,11,1,1,1,246 -"4200",1,1,1,47,2,1,4,0,10,1,1,1,246 -"4201",0,0,0,56,3,1,4,0,10,1,0,1,246 -"4202",1,1,1,67,1,1,4,0,11,1,1,1,246 -"4203",0,1,0,60,4,1,4,0,11,1,0,1,246 -"4204",0,1,1,50,3,1,4,1,9,1,0,1,246 -"4205",0,1,0,61,1,1,4,1,5,1,0,1,246 -"4206",0,0,1,58,5,1,4,0,10,1,1,1,246 -"4207",0,1,0,53,2,1,4,1,10,1,1,1,246 -"4208",0,1,0,61,2,1,4,0,12,1,0,1,246 -"4209",0,1,0,48,4,1,4,1,12,1,1,1,246 -"4210",0,1,1,48,2,1,4,1,11,1,1,1,246 -"4211",0,1,0,61,4,1,4,1,6,1,1,1,246 -"4212",0,1,1,42,2,1,4,0,10,1,0,1,246 -"4213",0,1,1,40,1,1,4,0,12,1,0,1,246 -"4214",0,1,1,55,2,1,4,0,9,1,0,1,246 -"4215",0,0,0,52,2,0,5,1,12,1,1,1,247 -"4216",0,1,0,51,1,0,5,0,10,1,0,1,247 -"4217",0,1,0,71,1,0,5,1,11,1,1,1,247 -"4218",0,1,0,55,1,0,5,1,12,1,1,1,247 -"4219",0,1,0,55,2,0,5,1,9,1,1,1,247 -"4220",0,0,1,61,3,0,5,1,12,1,0,1,247 -"4221",0,1,0,47,2,0,5,1,13,1,1,1,247 -"4222",0,1,1,59,1,0,5,1,7,1,1,1,247 -"4223",0,1,0,68,1,0,5,1,10,1,1,1,247 -"4224",0,0,0,63,2,0,5,1,12,1,1,1,247 -"4225",0,1,0,53,2,0,5,1,11,1,0,1,247 -"4226",0,1,0,47,1,0,5,1,9,1,0,1,247 -"4227",0,1,0,56,3,0,5,1,11,1,1,1,247 -"4228",0,1,1,49,1,0,5,0,11,1,0,1,247 -"4229",0,1,1,61,3,0,5,1,10,1,0,1,247 -"4230",1,1,0,62,5,1,3,0,6,6,0,0,248 -"4231",1,1,1,48,5,1,3,0,7,6,0,0,248 -"4232",0,1,1,34,5,1,3,0,8,6,0,0,248 -"4233",0,1,0,36,3,1,3,1,6,6,0,0,248 -"4234",0,1,0,45,1,1,3,1,4,6,0,0,248 -"4235",1,1,1,37,3,1,3,1,9,6,1,0,248 -"4236",1,1,0,45,5,1,3,0,8,6,0,0,248 -"4237",0,1,0,67,4,1,3,0,7,6,0,0,248 -"4238",0,1,1,45,2,1,3,1,6,6,0,0,248 -"4239",0,1,1,53,2,1,3,0,8,6,0,0,248 -"4240",0,1,0,42,4,1,3,1,9,6,0,0,248 -"4241",1,1,0,44,4,1,3,0,4,6,0,0,248 -"4242",0,1,0,53,1,1,3,0,8,6,0,0,248 -"4243",0,1,0,51,1,1,3,0,11,6,0,0,248 -"4244",0,1,0,59,1,1,3,1,6,6,0,0,248 -"4245",0,1,0,49,1,1,2,1,8,7,0,0,249 -"4246",1,1,1,64,3,1,2,0,7,7,0,0,249 -"4247",1,1,0,39,3,1,2,0,9,7,0,0,249 -"4248",1,1,0,25,2,1,2,1,11,7,0,0,249 -"4249",0,1,0,32,2,1,2,1,12,7,0,0,249 -"4250",0,0,1,36,2,1,2,0,10,7,0,0,249 -"4251",1,1,1,32,5,1,2,1,6,7,0,0,249 -"4252",0,1,1,56,3,1,2,1,8,7,0,0,249 -"4253",0,1,0,35,3,1,2,0,8,7,0,0,249 -"4254",1,1,1,47,4,1,2,1,3,7,0,0,249 -"4255",0,1,0,46,3,1,2,1,8,7,0,0,249 -"4256",0,1,0,47,1,1,2,0,8,7,1,0,249 -"4257",0,1,1,38,5,1,2,0,9,7,0,0,249 -"4258",0,1,0,45,1,1,2,1,6,7,0,0,249 -"4259",0,1,1,40,2,1,2,1,9,7,0,0,249 -"4260",0,1,0,50,2,1,2,1,9,7,0,0,249 -"4261",1,1,1,44,1,1,2,0,8,7,0,0,249 -"4262",0,1,0,69,1,1,4,1,10,3,1,1,250 -"4263",0,1,0,56,1,1,4,0,9,3,0,1,250 -"4264",1,1,1,54,1,1,4,0,10,3,1,1,250 -"4265",0,1,0,67,2,1,4,1,11,3,1,1,250 -"4266",0,1,1,51,2,1,4,1,11,3,1,1,250 -"4267",0,1,0,58,1,1,4,1,9,3,0,1,250 -"4268",0,1,0,61,2,1,4,1,14,3,1,1,250 -"4269",0,1,0,52,2,1,4,0,10,3,1,1,250 -"4270",0,1,1,58,2,1,4,0,12,3,1,1,250 -"4271",1,1,0,56,1,1,4,0,10,3,0,1,250 -"4272",0,1,0,62,3,1,4,1,6,3,0,1,250 -"4273",0,1,1,45,1,1,4,1,12,3,0,1,250 -"4274",0,1,0,52,1,1,4,1,10,3,1,1,250 -"4275",0,1,1,62,2,1,4,1,12,3,1,1,250 -"4276",0,1,0,61,2,1,4,0,10,3,1,1,250 -"4277",0,1,1,37,5,1,4,1,10,5,0,0,251 -"4278",0,1,0,49,2,1,4,0,8,5,1,0,251 -"4279",0,0,0,46,1,1,4,1,5,5,0,0,251 -"4280",0,1,0,40,3,1,4,0,10,5,0,0,251 -"4281",0,1,0,33,1,1,4,0,5,5,1,0,251 -"4282",0,1,0,38,3,1,4,1,9,5,0,0,251 -"4283",0,1,1,33,1,1,4,0,7,5,0,0,251 -"4284",0,1,0,42,3,1,4,1,9,5,0,0,251 -"4285",1,1,0,45,2,1,4,0,9,5,0,0,251 -"4286",0,0,0,40,5,1,4,1,3,5,0,0,251 -"4287",0,0,1,38,5,1,4,0,8,5,1,0,251 -"4288",0,1,0,43,3,1,4,0,7,5,0,0,251 -"4289",0,1,0,47,3,1,4,0,5,5,0,0,251 -"4290",1,1,0,41,2,1,4,1,9,5,0,0,251 -"4291",1,1,1,49,3,1,4,1,11,5,1,0,251 -"4292",0,1,0,46,2,1,4,1,9,5,1,0,252 -"4293",1,1,0,53,1,1,4,0,13,5,0,0,252 -"4294",0,1,0,44,2,1,4,1,10,5,1,0,252 -"4295",1,1,1,47,3,1,4,0,13,5,1,0,252 -"4296",0,1,1,55,2,1,4,0,9,5,0,0,252 -"4297",0,1,0,57,3,1,4,0,6,5,0,0,252 -"4298",0,1,0,56,2,0,3,0,13,1,1,1,253 -"4299",0,1,0,67,1,0,3,0,11,1,1,1,253 -"4300",0,1,0,52,3,0,3,0,8,1,1,1,253 -"4301",0,1,0,57,3,0,3,0,9,1,0,1,253 -"4302",0,1,0,59,1,0,3,0,9,1,0,1,253 -"4303",1,1,0,41,2,0,3,0,4,1,0,1,253 -"4304",1,1,0,49,1,0,3,0,5,1,0,1,253 -"4305",1,1,1,46,5,0,3,0,2,1,0,1,253 -"4306",0,0,0,54,1,0,3,0,12,1,1,1,253 -"4307",0,1,0,50,2,0,3,0,11,1,0,1,253 -"4308",0,1,0,46,2,0,3,0,11,1,0,1,253 -"4309",0,1,0,51,2,0,3,0,10,1,0,1,253 -"4310",1,1,1,63,2,0,3,0,10,1,1,1,253 -"4311",1,1,0,43,2,0,3,0,9,1,0,1,253 -"4312",0,1,0,57,3,0,3,0,11,1,0,1,253 -"4313",0,1,0,56,3,0,3,0,8,1,1,1,253 -"4314",1,1,1,50,3,1,5,0,12,1,1,0,254 -"4315",0,1,1,53,2,1,5,0,11,1,0,0,254 -"4316",0,1,0,61,1,1,5,0,10,1,1,0,254 -"4317",0,1,1,63,5,1,5,1,12,1,1,0,254 -"4318",0,0,0,69,1,1,5,0,13,1,1,0,254 -"4319",0,0,0,69,1,1,5,1,10,1,1,0,254 -"4320",0,1,0,51,2,1,5,1,9,1,1,0,254 -"4321",0,1,0,61,2,1,5,1,12,1,1,0,254 -"4322",0,1,0,63,2,1,5,0,11,1,1,0,254 -"4323",0,1,0,53,2,1,5,1,8,1,1,0,254 -"4324",0,1,0,57,1,1,5,0,11,1,1,0,254 -"4325",0,1,0,56,1,1,5,0,11,1,1,0,254 -"4326",0,1,0,66,2,1,5,0,12,1,1,0,254 -"4327",0,1,1,38,2,1,4,1,11,1,1,0,255 -"4328",0,0,1,58,3,1,4,0,11,1,0,0,255 -"4329",0,1,1,48,1,1,4,0,9,1,0,0,255 -"4330",0,1,0,73,2,1,4,0,12,1,0,0,255 -"4331",0,1,1,46,1,1,4,1,11,1,0,0,255 -"4332",0,1,1,36,2,1,4,1,10,1,0,0,255 -"4333",0,1,1,48,2,1,4,1,11,1,1,0,255 -"4334",0,1,1,55,3,1,4,1,8,1,0,0,255 -"4335",0,1,1,59,2,1,4,0,10,1,1,0,255 -"4336",1,0,1,39,5,1,4,0,4,1,0,0,255 -"4337",0,1,0,44,2,1,4,0,10,1,1,0,255 -"4338",0,1,1,58,2,1,4,1,11,1,1,0,255 -"4339",0,1,0,63,1,1,4,0,10,1,0,0,255 -"4340",0,1,0,52,1,1,4,0,11,1,1,0,255 -"4341",1,1,1,49,2,1,4,0,7,1,0,0,255 -"4342",0,0,1,64,2,1,4,0,9,1,0,0,255 -"4343",0,1,0,58,2,1,4,0,10,1,1,0,255 -"4344",0,1,0,46,2,1,4,1,7,1,1,0,255 -"4345",0,1,0,63,3,1,4,0,15,1,1,0,255 -"4346",0,1,0,52,2,1,4,0,7,1,0,0,255 -"4347",1,0,1,66,5,1,4,1,12,1,0,0,255 -"4348",0,1,0,49,2,1,3,1,10,7,0,0,256 -"4349",0,1,0,41,2,1,3,0,9,7,0,0,256 -"4350",0,1,1,41,2,1,3,1,8,7,0,0,256 -"4351",0,1,0,38,3,1,3,1,10,7,0,0,256 -"4352",0,1,1,32,4,1,3,1,4,7,1,0,256 -"4353",1,0,1,37,5,1,3,1,10,7,0,0,256 -"4354",0,1,0,37,1,1,3,1,7,7,0,0,256 -"4355",1,1,0,32,4,1,3,0,10,7,0,0,256 -"4356",0,1,0,36,2,1,3,0,4,7,0,0,256 -"4357",0,1,0,61,1,1,5,1,12,1,1,0,257 -"4358",0,1,1,60,2,1,5,1,12,1,1,0,257 -"4359",0,1,0,57,2,1,5,1,11,1,0,0,257 -"4360",0,1,1,58,2,1,5,1,11,1,1,0,257 -"4361",0,0,1,43,2,1,5,0,9,1,0,0,257 -"4362",0,1,0,45,2,1,5,0,10,1,0,0,257 -"4363",0,1,0,45,3,1,5,0,9,1,1,0,257 -"4364",0,1,1,49,2,1,5,0,7,1,0,0,257 -"4365",0,1,0,61,1,1,5,0,10,1,1,0,257 -"4366",0,1,1,43,2,1,2,1,8,6,0,0,258 -"4367",0,1,1,45,2,1,2,1,7,6,0,0,258 -"4368",1,1,0,51,3,1,2,1,11,6,0,0,258 -"4369",0,1,0,48,1,1,2,1,9,6,0,0,258 -"4370",0,0,0,54,3,1,2,1,9,6,0,0,258 -"4371",0,1,1,42,3,1,2,1,5,6,0,0,258 -"4372",0,1,0,36,5,1,2,1,8,6,0,0,258 -"4373",0,1,1,41,2,1,2,1,1,6,0,0,258 -"4374",0,1,0,47,3,1,2,1,9,6,0,0,258 -"4375",0,1,0,29,5,1,2,0,10,6,1,0,258 -"4376",0,1,1,21,2,1,2,1,1,6,0,0,258 -"4377",1,1,1,40,5,1,2,0,9,6,0,0,258 -"4378",0,1,0,40,2,1,2,1,6,6,0,0,258 -"4379",1,1,0,46,2,1,2,0,10,6,0,0,258 -"4380",0,1,0,51,4,1,2,1,6,6,0,0,258 -"4381",0,1,0,56,2,1,2,1,9,6,0,0,258 -"4382",0,1,0,55,2,1,2,0,10,6,1,0,258 -"4383",0,1,0,53,2,1,3,0,9,1,0,0,259 -"4384",0,1,0,43,3,1,3,1,8,1,0,0,259 -"4385",0,1,0,53,2,1,3,1,11,1,1,0,259 -"4386",0,1,1,52,1,1,5,0,8,1,1,1,260 -"4387",0,1,1,51,2,1,5,1,10,1,1,1,260 -"4388",0,1,0,48,1,1,5,0,9,1,1,1,260 -"4389",0,1,1,60,1,1,5,1,10,1,1,1,260 -"4390",0,1,0,51,2,1,5,1,12,1,1,1,260 -"4391",0,1,1,58,3,1,5,0,10,1,1,1,260 -"4392",0,1,0,52,2,1,5,0,9,1,1,1,260 -"4393",0,0,1,44,2,1,5,1,7,1,0,1,260 -"4394",0,0,1,51,2,1,5,1,10,1,0,1,260 -"4395",0,1,1,47,2,1,5,0,11,1,1,1,260 -"4396",0,1,1,66,2,1,5,1,13,1,1,1,260 -"4397",0,1,0,58,3,1,5,0,10,1,1,1,260 -"4398",0,1,1,60,3,1,5,0,12,1,0,1,260 -"4399",0,1,0,63,2,1,5,0,12,1,1,1,260 -"4400",0,1,1,45,3,1,5,1,11,1,0,1,260 -"4401",0,1,0,44,3,1,3,1,11,1,1,1,261 -"4402",0,1,1,51,2,1,3,1,11,1,1,1,261 -"4403",0,1,0,43,1,1,3,0,10,1,1,1,261 -"4404",0,1,1,56,2,1,3,1,6,1,0,1,261 -"4405",0,1,1,37,2,1,3,1,8,1,0,1,261 -"4406",0,1,1,55,3,1,3,1,11,1,1,1,261 -"4407",1,1,1,50,4,1,3,0,5,1,0,1,261 -"4408",1,1,0,48,1,1,3,1,10,1,1,1,261 -"4409",0,1,1,56,5,1,3,0,8,1,1,1,261 -"4410",0,1,0,61,3,1,3,0,11,1,1,1,261 -"4411",0,1,0,38,4,1,3,0,11,1,1,1,261 -"4412",0,1,1,52,2,1,3,0,8,1,1,1,261 -"4413",1,1,1,36,3,1,3,1,8,1,0,1,261 -"4414",0,1,1,45,3,1,3,1,11,1,0,1,261 -"4415",0,1,1,35,3,1,3,1,9,1,0,1,261 -"4416",1,1,0,46,1,1,3,0,5,1,0,1,261 -"4417",0,1,1,39,1,1,3,1,1,1,0,1,261 -"4418",1,1,1,51,3,1,3,0,12,1,1,1,261 -"4419",0,1,1,65,1,1,5,0,10,1,0,0,262 -"4420",0,1,0,65,2,1,5,0,10,1,0,0,262 -"4421",1,1,0,31,2,1,5,0,8,1,0,0,262 -"4422",0,1,0,85,3,1,5,0,12,1,1,0,262 -"4423",0,1,1,56,2,1,5,1,12,1,0,0,262 -"4424",0,1,1,53,5,1,5,1,12,1,0,0,262 -"4425",0,1,1,44,3,1,5,0,9,1,0,0,262 -"4426",0,1,0,62,1,1,5,0,12,1,1,0,262 -"4427",0,1,0,48,1,1,5,1,11,1,1,0,262 -"4428",0,1,0,68,3,1,5,1,12,1,1,0,262 -"4429",0,1,0,57,1,1,5,1,11,1,1,0,262 -"4430",0,1,1,72,2,1,5,0,9,1,0,0,262 -"4431",0,1,1,58,1,1,5,0,8,1,1,0,262 -"4432",0,1,0,64,2,1,5,1,13,1,1,0,262 -"4433",0,1,0,61,2,1,5,0,11,1,0,0,262 -"4434",0,1,1,69,3,1,5,0,9,1,1,0,262 -"4435",0,1,1,55,2,1,5,1,12,1,1,0,262 -"4436",0,1,0,61,1,1,5,1,9,1,0,0,262 -"4437",1,1,0,37,2,1,5,0,9,1,0,0,262 -"4438",0,1,1,53,4,1,5,1,11,1,1,0,262 -"4439",0,1,0,58,3,1,5,0,10,1,0,0,262 -"4440",0,1,1,49,2,1,5,1,11,1,1,0,262 -"4441",0,1,1,59,2,1,5,1,10,1,0,0,262 -"4442",1,1,1,40,5,1,5,0,8,1,1,0,262 -"4443",0,1,1,43,2,1,5,1,10,1,0,0,262 -"4444",0,1,0,51,2,1,5,0,11,1,1,0,262 -"4445",0,0,0,57,2,1,5,0,8,1,0,0,262 -"4446",0,0,0,52,2,1,5,0,11,1,1,0,262 -"4447",0,1,1,53,2,1,5,1,9,3,0,0,263 -"4448",0,1,0,31,1,1,5,1,10,3,1,0,263 -"4449",0,0,0,60,3,1,5,0,10,3,1,0,263 -"4450",1,1,0,65,2,1,5,0,7,3,0,0,263 -"4451",1,0,1,52,2,1,5,0,9,3,1,0,263 -"4452",0,1,0,41,3,1,5,0,1,3,0,0,263 -"4453",0,0,1,54,2,1,5,1,8,3,1,0,263 -"4454",0,1,1,49,1,1,5,1,9,3,1,0,263 -"4455",0,1,1,59,1,1,5,1,8,3,0,0,263 -"4456",0,1,0,44,3,1,5,1,7,3,0,0,263 -"4457",0,1,1,36,2,1,5,1,5,3,0,0,263 -"4458",0,1,0,46,2,1,5,1,9,3,1,0,263 -"4459",0,1,1,58,1,1,5,1,10,3,0,0,263 -"4460",0,1,1,56,2,1,5,1,9,3,0,0,263 -"4461",0,1,0,59,1,1,5,0,10,3,1,0,263 -"4462",0,1,0,61,3,1,5,0,10,3,0,0,263 -"4463",0,1,1,54,2,1,5,0,11,3,0,0,263 -"4464",0,1,0,54,1,1,5,0,9,3,0,0,263 -"4465",0,1,0,45,3,1,5,1,8,3,0,0,263 -"4466",0,1,0,52,3,1,5,0,8,3,0,0,263 -"4467",0,1,0,52,1,1,5,0,7,3,0,0,263 -"4468",0,1,1,49,1,1,5,0,9,3,0,0,263 -"4469",0,1,0,67,2,1,5,1,10,3,0,0,263 -"4470",0,1,0,57,1,1,5,1,9,3,0,0,263 -"4471",0,1,0,39,1,1,4,0,8,3,0,0,264 -"4472",0,1,0,53,2,1,4,1,10,3,1,0,264 -"4473",0,1,1,62,3,1,4,0,11,3,1,0,264 -"4474",1,1,0,67,1,1,4,0,12,3,1,0,264 -"4475",0,0,1,62,3,1,4,0,9,3,0,0,264 -"4476",0,1,1,51,1,1,4,1,9,3,0,0,264 -"4477",0,1,0,59,2,1,4,1,9,3,0,0,264 -"4478",0,1,0,47,2,1,4,1,9,3,0,0,264 -"4479",0,1,0,36,2,1,4,0,10,3,0,0,264 -"4480",0,1,0,70,1,1,4,0,10,3,0,0,264 -"4481",0,0,1,55,1,1,4,0,10,3,1,0,264 -"4482",0,1,0,50,2,1,4,1,10,3,0,0,264 -"4483",0,1,1,57,3,1,4,1,11,3,1,0,264 -"4484",0,0,0,58,2,1,5,0,10,1,1,1,265 -"4485",0,1,1,50,3,1,5,1,10,1,0,1,265 -"4486",0,1,0,46,4,1,5,0,10,1,1,1,265 -"4487",0,0,0,65,2,1,5,0,11,1,1,1,265 -"4488",0,1,0,59,3,1,5,0,7,1,0,1,265 -"4489",0,1,1,41,2,1,5,1,13,1,0,1,265 -"4490",0,1,1,46,3,1,5,1,10,1,0,1,265 -"4491",0,1,1,52,2,1,5,0,8,1,0,1,265 -"4492",0,1,0,39,3,1,5,1,8,1,0,1,265 -"4493",0,1,1,41,2,1,5,1,4,1,1,1,265 -"4494",0,1,1,36,2,1,5,1,9,1,0,1,265 -"4495",0,1,1,52,2,1,5,0,10,1,1,1,265 -"4496",0,1,0,41,4,1,5,0,12,1,0,1,265 -"4497",0,1,0,53,1,1,5,1,8,1,0,1,265 -"4498",0,1,0,65,5,1,5,1,9,1,0,1,265 -"4499",0,1,0,47,1,1,5,1,10,1,1,1,265 -"4500",0,0,1,38,3,1,5,1,9,1,1,1,265 -"4501",1,1,1,48,2,1,5,0,10,1,0,1,265 -"4502",0,1,1,60,5,1,5,0,10,1,1,1,265 -"4503",0,1,1,54,2,1,5,1,9,1,1,1,265 -"4504",0,1,1,37,5,1,4,1,6,6,1,0,266 -"4505",0,1,0,39,5,1,4,1,8,6,1,0,266 -"4506",1,1,1,40,3,1,4,0,8,6,1,0,266 -"4507",0,1,0,47,5,1,4,0,4,6,0,0,266 -"4508",0,1,0,38,3,1,4,1,6,6,0,0,266 -"4509",0,1,1,26,3,1,4,1,7,6,0,0,266 -"4510",0,1,0,33,2,1,4,1,9,6,0,0,266 -"4511",0,1,0,36,3,1,4,1,8,6,0,0,266 -"4512",1,1,1,45,3,1,4,0,9,6,1,0,266 -"4513",0,1,0,40,2,1,4,1,11,6,0,0,267 -"4514",0,1,0,33,2,1,4,0,4,6,0,0,267 -"4515",0,1,1,50,3,1,4,1,9,6,0,0,267 -"4516",0,0,0,41,2,1,4,1,8,6,0,0,267 -"4517",1,1,0,26,3,1,4,0,4,6,1,0,267 -"4518",0,1,1,37,3,1,4,1,9,6,0,0,267 -"4519",1,1,0,43,2,1,4,0,3,6,0,0,267 -"4520",0,1,0,40,1,1,4,0,12,6,1,0,267 -"4521",0,1,0,52,2,1,4,1,8,6,0,0,267 -"4522",0,1,0,47,3,1,4,0,9,6,0,0,267 -"4523",1,1,0,45,3,1,4,1,10,6,1,0,267 -"4524",1,1,1,34,3,1,4,0,5,6,0,0,267 -"4525",0,1,1,45,1,1,5,1,12,1,1,0,268 -"4526",0,1,0,68,1,1,5,0,9,1,0,0,268 -"4527",0,1,0,58,1,1,5,0,11,1,1,0,268 -"4528",0,1,0,52,1,1,5,1,8,1,0,0,268 -"4529",0,1,1,54,2,1,5,1,12,1,0,0,268 -"4530",1,0,1,60,2,1,5,0,5,1,1,0,268 -"4531",0,1,0,75,2,1,5,0,9,1,0,0,268 -"4532",0,1,0,65,2,1,5,1,12,1,0,0,268 -"4533",0,1,1,45,1,1,5,1,11,1,1,0,268 -"4534",0,1,0,79,1,1,5,0,11,1,1,0,268 -"4535",0,1,1,55,1,1,5,0,8,1,0,0,268 -"4536",0,1,0,63,1,1,5,1,12,1,0,0,268 -"4537",0,1,1,61,2,1,5,1,10,1,1,0,268 -"4538",0,1,1,40,2,1,5,0,11,1,0,0,268 -"4539",0,1,0,68,1,1,5,1,11,1,0,0,268 -"4540",1,1,0,61,1,1,5,0,9,1,0,0,268 -"4541",0,1,0,49,1,1,5,0,9,1,0,0,268 -"4542",0,1,0,52,2,1,5,1,11,1,0,0,268 -"4543",0,1,0,62,1,1,5,1,9,2,0,0,269 -"4544",0,0,0,62,3,1,5,0,9,2,0,0,269 -"4545",0,0,0,52,3,1,5,0,9,2,0,0,269 -"4546",0,1,1,56,2,1,5,0,9,2,1,0,269 -"4547",0,1,1,58,2,1,5,1,7,2,0,0,269 -"4548",1,0,0,54,1,1,5,0,11,2,0,0,269 -"4549",0,0,0,65,1,1,5,0,12,2,1,0,269 -"4550",0,1,0,65,2,1,5,1,11,2,1,0,269 -"4551",0,1,0,63,3,1,5,0,11,2,1,0,269 -"4552",0,1,1,60,1,1,5,0,9,2,0,0,269 -"4553",0,1,1,59,2,1,5,1,11,2,0,0,269 -"4554",0,1,1,76,1,1,5,0,11,2,1,0,269 -"4555",1,1,1,52,2,1,5,1,10,2,1,0,269 -"4556",0,1,0,63,2,1,5,0,8,2,0,0,269 -"4557",0,1,0,62,1,1,5,0,10,2,0,0,269 -"4558",0,1,1,64,1,1,5,0,10,2,0,0,269 -"4559",0,1,0,57,1,1,5,1,11,2,1,0,269 -"4560",0,1,0,34,1,1,5,1,3,2,0,0,269 -"4561",0,1,0,59,2,1,5,0,10,2,0,0,269 -"4562",1,1,1,48,2,1,5,0,11,2,0,0,269 -"4563",1,1,1,32,4,1,5,1,7,2,0,0,269 -"4564",1,1,1,44,1,1,5,1,8,2,1,0,269 -"4565",0,1,0,51,1,1,4,1,5,7,0,0,270 -"4566",0,0,0,43,3,1,4,0,2,7,0,0,270 -"4567",0,1,0,46,3,1,4,1,8,7,0,0,270 -"4568",0,1,0,47,1,1,4,0,10,7,0,0,270 -"4569",0,1,1,51,1,1,4,1,9,7,1,0,270 -"4570",1,0,1,47,2,1,4,0,9,7,0,0,270 -"4571",0,1,0,49,1,1,4,0,9,7,1,0,270 -"4572",0,1,1,49,1,1,4,1,9,7,0,0,270 -"4573",1,0,0,39,4,1,4,0,7,7,0,0,270 -"4574",0,1,1,30,2,1,4,1,11,7,0,0,270 -"4575",0,0,0,45,2,1,4,0,12,7,0,0,270 -"4576",0,1,1,41,1,1,4,1,8,7,0,0,270 -"4577",0,1,0,39,3,1,4,1,4,7,0,0,270 -"4578",0,1,0,33,4,1,4,1,1,6,0,0,271 -"4579",0,1,0,49,1,1,4,0,3,6,1,0,271 -"4580",0,1,0,29,1,1,4,0,5,6,1,0,271 -"4581",0,1,0,49,2,1,4,0,8,6,1,0,271 -"4582",0,1,0,44,3,1,4,0,6,6,1,0,271 -"4583",0,1,1,55,3,1,4,1,7,6,0,0,271 -"4584",0,1,1,45,2,1,4,0,2,6,1,0,271 -"4585",0,1,0,54,2,1,4,1,10,6,0,0,271 -"4586",0,1,0,53,2,1,4,1,9,6,0,0,271 -"4587",0,1,0,55,5,1,4,0,6,6,0,0,271 -"4588",0,1,1,45,1,1,4,1,5,6,0,0,271 -"4589",1,1,0,36,3,1,4,1,3,6,0,0,271 -"4590",1,1,0,50,1,1,4,1,3,6,0,0,271 -"4591",0,1,1,58,2,1,4,1,10,6,0,0,271 -"4592",0,1,0,43,1,1,4,0,12,6,1,0,271 -"4593",0,1,0,52,4,1,4,1,6,6,0,0,271 -"4594",0,1,0,59,1,1,4,0,10,6,1,0,271 -"4595",0,1,0,43,3,1,4,1,7,6,0,0,271 -"4596",0,1,1,41,1,1,4,1,5,6,0,0,271 -"4597",0,1,0,55,2,1,4,0,1,6,0,0,271 -"4598",0,1,0,43,3,1,4,1,9,6,0,0,271 -"4599",1,1,0,45,5,1,4,0,8,6,0,0,271 -"4600",0,1,0,44,1,1,4,1,4,6,0,0,271 -"4601",0,0,0,41,1,1,4,1,6,6,0,0,271 -"4602",0,1,0,56,2,1,3,0,11,3,0,0,272 -"4603",0,1,0,51,5,1,3,0,5,3,1,0,272 -"4604",0,1,0,34,4,1,3,1,6,3,1,0,272 -"4605",0,1,1,39,3,1,3,1,6,3,0,0,272 -"4606",1,1,1,31,4,1,3,0,8,3,0,0,272 -"4607",0,1,0,36,4,1,3,1,8,3,1,0,272 -"4608",0,1,1,52,4,1,3,0,11,3,0,0,272 -"4609",0,1,0,33,2,1,3,1,10,3,0,0,272 -"4610",0,1,1,48,5,1,3,0,9,3,0,0,272 -"4611",0,1,0,33,1,1,3,0,7,3,0,0,272 -"4612",0,1,0,41,2,1,3,0,10,3,0,0,272 -"4613",1,1,0,41,5,1,3,0,8,3,1,0,272 -"4614",0,1,0,61,2,1,3,1,12,3,0,0,272 -"4615",0,1,1,37,5,1,3,1,12,3,0,0,272 -"4616",0,1,0,46,3,1,3,0,10,3,1,0,272 -"4617",0,1,0,25,2,1,3,1,8,3,1,0,272 -"4618",0,1,0,51,1,1,3,0,10,3,1,0,272 -"4619",0,1,1,23,3,1,3,1,8,3,0,0,272 -"4620",1,1,1,50,4,1,3,1,9,3,0,0,272 -"4621",0,1,0,38,2,1,3,0,8,3,0,0,272 -"4622",0,1,1,34,2,1,3,0,5,3,1,0,272 -"4623",0,0,1,46,5,1,3,1,11,3,0,0,272 -"4624",0,1,0,36,4,1,3,1,11,3,0,0,272 -"4625",0,1,0,42,5,1,3,0,11,3,1,0,272 -"4626",0,1,0,47,1,1,4,1,8,4,0,0,273 -"4627",0,1,0,57,5,1,4,0,10,4,1,0,273 -"4628",0,1,0,40,3,1,4,0,3,4,0,0,273 -"4629",0,1,0,34,3,1,4,1,2,4,0,0,273 -"4630",1,0,1,32,2,1,4,1,10,4,0,0,273 -"4631",0,1,0,56,3,1,4,1,10,4,0,0,273 -"4632",1,1,1,33,5,1,4,0,2,4,1,0,273 -"4633",0,1,1,46,1,1,4,1,6,4,0,0,273 -"4634",0,1,0,48,4,1,4,0,8,4,0,0,273 -"4635",0,1,0,60,3,1,4,1,12,4,1,0,273 -"4636",0,0,1,31,3,1,4,0,9,4,0,0,273 -"4637",0,1,0,43,2,1,4,1,1,4,0,0,273 -"4638",0,0,0,36,3,1,4,0,10,5,1,0,274 -"4639",1,0,1,50,5,1,4,0,6,5,0,0,274 -"4640",0,1,0,44,1,1,4,0,5,5,0,0,274 -"4641",0,1,0,37,3,1,4,0,4,5,0,0,274 -"4642",0,0,0,54,2,1,4,0,9,5,0,0,274 -"4643",0,0,0,59,2,1,4,1,9,5,1,0,274 -"4644",1,0,0,32,1,1,4,0,11,5,0,0,274 -"4645",0,1,0,53,2,1,4,0,7,5,0,0,274 -"4646",0,1,0,46,3,1,4,1,5,5,0,0,274 -"4647",0,1,1,54,3,1,4,0,3,5,0,0,274 -"4648",0,1,0,50,1,1,4,0,11,5,0,0,274 -"4649",0,1,1,34,2,1,4,1,6,5,0,0,274 -"4650",0,1,1,56,3,1,4,0,9,5,0,0,274 -"4651",0,1,0,52,2,1,4,1,11,5,1,0,274 -"4652",0,1,0,42,3,1,4,0,8,5,0,0,274 -"4653",0,1,1,70,2,1,4,1,11,5,1,0,274 -"4654",0,0,0,68,2,1,4,0,8,5,0,0,274 -"4655",0,1,0,54,3,1,4,0,12,5,0,0,274 -"4656",1,1,0,47,2,1,4,0,5,5,0,0,274 -"4657",0,1,0,49,2,1,4,1,9,7,1,0,275 -"4658",0,1,0,49,1,1,4,0,8,7,0,0,275 -"4659",1,1,1,50,1,1,4,0,9,7,0,0,275 -"4660",1,1,1,39,3,1,4,0,1,7,0,0,275 -"4661",0,0,1,48,1,1,4,0,8,7,0,0,275 -"4662",0,1,0,57,2,1,4,1,9,7,0,0,275 -"4663",0,1,0,37,2,1,4,1,8,7,0,0,275 -"4664",0,1,1,28,3,1,4,1,9,7,0,0,275 -"4665",0,1,0,58,1,1,4,1,9,7,1,0,275 -"4666",0,1,1,46,2,1,4,1,6,7,0,0,275 -"4667",0,1,1,53,2,1,4,1,9,7,0,0,275 -"4668",0,1,0,42,3,1,4,1,10,7,1,0,275 -"4669",0,1,0,38,1,1,4,1,10,7,0,0,275 -"4670",0,1,0,45,2,1,4,1,6,7,0,0,275 -"4671",1,1,1,63,3,1,4,0,9,7,0,0,275 -"4672",1,1,0,57,1,1,4,1,4,7,0,0,275 -"4673",0,1,0,51,3,0,5,0,12,1,1,1,276 -"4674",0,1,0,49,3,0,5,1,11,1,1,1,276 -"4675",0,1,0,50,2,0,5,0,12,1,1,1,276 -"4676",0,1,0,57,3,0,5,1,9,1,0,1,276 -"4677",0,1,1,55,2,0,5,1,11,1,1,1,276 -"4678",1,1,1,41,5,0,5,1,10,1,0,1,276 -"4679",0,1,0,66,2,0,5,1,12,1,1,1,276 -"4680",0,1,1,50,1,0,5,1,13,1,1,1,276 -"4681",0,1,0,46,2,0,5,1,11,1,1,1,276 -"4682",0,1,1,50,2,0,5,1,12,1,1,1,276 -"4683",0,1,0,75,3,0,5,1,11,1,1,1,276 -"4684",0,1,0,59,2,0,5,1,9,1,1,1,276 -"4685",0,1,1,54,1,0,5,1,10,1,1,1,276 -"4686",0,1,0,42,2,0,5,1,11,1,0,1,276 -"4687",0,1,0,52,1,0,5,1,11,1,0,1,276 -"4688",0,1,1,50,2,0,5,1,13,1,1,1,276 -"4689",0,1,0,41,2,0,5,1,8,1,1,1,276 -"4690",0,1,0,53,3,0,5,1,10,1,0,1,276 -"4691",0,1,0,65,3,0,5,1,10,1,1,1,276 -"4692",0,1,0,45,1,0,5,0,11,1,1,1,276 -"4693",0,1,1,51,1,0,5,1,11,1,1,1,276 -"4694",0,1,1,64,1,0,5,1,12,1,1,1,276 -"4695",0,0,0,57,2,0,5,1,9,1,1,1,276 -"4696",0,1,1,49,4,0,5,1,12,1,1,1,276 -"4697",1,1,1,58,2,0,5,1,12,1,1,1,276 -"4698",0,1,0,42,2,0,5,1,11,1,1,1,276 -"4699",0,1,1,60,3,0,5,1,9,1,1,1,276 -"4700",0,1,0,76,1,1,5,1,12,3,1,0,277 -"4701",0,1,1,52,1,1,5,1,13,3,1,0,277 -"4702",0,1,1,66,3,1,5,0,10,3,1,0,277 -"4703",0,1,1,62,1,1,5,0,9,3,0,0,277 -"4704",0,0,1,64,5,1,4,1,13,1,1,0,278 -"4705",0,1,1,57,5,1,4,1,12,1,0,0,278 -"4706",1,0,1,48,4,1,4,0,10,1,1,0,278 -"4707",0,1,0,52,1,1,4,1,8,1,0,0,278 -"4708",0,1,1,73,2,1,4,0,9,1,1,0,278 -"4709",0,0,0,49,4,1,4,1,13,1,1,0,278 -"4710",0,1,1,57,2,1,4,1,12,1,1,0,278 -"4711",1,0,0,38,5,1,4,1,9,1,1,0,278 -"4712",0,1,1,63,2,1,4,1,11,1,1,0,278 -"4713",0,1,1,67,2,1,4,1,12,1,1,0,278 -"4714",1,0,0,26,3,1,4,0,8,5,0,0,279 -"4715",1,1,1,45,1,1,4,0,6,5,0,0,279 -"4716",0,1,1,47,2,1,4,1,3,5,1,0,279 -"4717",0,1,0,49,2,1,4,0,10,5,0,0,279 -"4718",0,1,0,60,4,1,4,0,10,5,0,0,279 -"4719",0,1,1,46,2,1,4,0,5,5,0,0,279 -"4720",0,1,0,63,3,1,4,1,10,5,1,0,279 -"4721",0,1,0,50,1,1,4,0,9,5,0,0,279 -"4722",0,1,0,53,2,1,4,0,8,5,0,0,279 -"4723",0,1,1,58,2,1,4,1,8,5,1,0,279 -"4724",0,1,0,39,3,1,4,0,8,5,0,0,279 -"4725",0,1,1,51,2,1,4,1,5,5,0,0,279 -"4726",0,1,1,59,1,1,4,1,12,5,1,0,279 -"4727",0,1,1,47,2,1,4,1,6,5,0,0,279 -"4728",0,1,0,56,1,1,4,1,13,1,1,0,280 -"4729",0,1,1,62,2,1,4,1,9,1,1,0,280 -"4730",0,0,0,73,3,1,4,0,10,1,1,0,280 -"4731",0,1,1,57,4,1,4,1,10,1,1,0,280 -"4732",0,1,0,66,2,1,4,1,10,1,1,0,280 -"4733",0,0,0,62,2,1,4,1,12,1,1,0,280 -"4734",0,1,1,71,1,1,4,0,13,1,1,0,280 -"4735",0,1,0,44,2,1,4,1,13,1,1,0,280 -"4736",1,1,0,72,4,1,4,0,13,1,1,0,280 -"4737",0,1,1,59,1,1,4,1,12,1,1,0,280 -"4738",0,1,1,60,2,1,4,1,12,1,1,0,280 -"4739",0,1,0,46,2,1,4,0,6,1,0,0,280 -"4740",0,1,1,53,2,1,4,0,12,1,1,0,280 -"4741",0,1,1,76,3,1,4,1,13,1,1,0,280 -"4742",0,1,1,66,2,1,4,1,13,1,1,0,280 -"4743",0,1,0,62,1,1,4,0,13,1,1,0,280 -"4744",0,1,0,69,2,1,4,0,12,1,1,0,280 -"4745",0,1,0,75,2,1,4,0,13,1,0,0,280 -"4746",0,1,0,50,1,1,5,0,12,1,1,1,281 -"4747",0,0,0,57,3,1,5,0,11,1,1,1,281 -"4748",0,1,1,41,2,1,5,1,11,1,0,1,281 -"4749",0,1,1,57,3,1,5,1,10,1,0,1,281 -"4750",0,1,1,41,3,1,5,0,13,1,1,1,281 -"4751",0,1,0,60,3,1,5,0,13,1,1,1,281 -"4752",0,1,0,63,2,1,5,1,12,1,0,1,281 -"4753",0,1,1,57,2,1,5,0,11,1,1,1,281 -"4754",0,1,0,59,2,1,5,1,9,1,0,1,281 -"4755",0,0,0,57,4,1,5,1,11,1,0,1,281 -"4756",0,1,0,70,1,1,5,0,12,1,1,1,281 -"4757",0,1,0,55,2,1,5,1,8,1,0,1,281 -"4758",1,1,0,43,3,1,5,0,11,1,1,1,281 -"4759",0,1,0,58,1,1,5,1,10,1,1,1,281 -"4760",0,1,1,65,1,1,5,0,12,1,1,1,281 -"4761",0,1,0,49,2,1,5,1,10,1,1,1,281 -"4762",0,1,0,50,1,1,5,0,11,1,1,1,281 -"4763",0,0,1,60,3,1,5,0,13,1,1,1,281 -"4764",1,1,1,56,5,1,5,1,12,1,1,1,281 -"4765",0,1,1,65,3,1,5,0,12,1,1,1,281 -"4766",0,1,0,53,2,1,5,0,12,1,1,1,281 -"4767",0,1,1,67,2,1,5,1,12,1,1,1,281 -"4768",0,1,1,55,2,1,5,0,9,1,0,1,281 -"4769",0,1,0,59,3,1,4,1,9,6,0,0,282 -"4770",1,1,0,44,5,1,4,0,5,6,0,0,282 -"4771",0,1,1,33,2,1,4,0,5,6,1,0,282 -"4772",0,1,0,40,2,1,4,0,9,6,0,0,282 -"4773",0,1,0,52,2,1,4,1,2,6,0,0,282 -"4774",0,1,0,38,2,1,4,1,3,6,0,0,282 -"4775",0,1,1,43,2,1,4,1,7,6,0,0,282 -"4776",0,1,1,50,2,1,4,1,8,6,0,0,282 -"4777",0,1,0,40,3,1,4,0,5,6,1,0,282 -"4778",0,1,0,51,2,1,4,1,6,6,1,0,282 -"4779",0,1,1,43,3,1,4,1,9,6,0,0,282 -"4780",0,1,0,51,2,1,4,1,10,6,0,0,282 -"4781",0,1,0,57,2,1,4,0,12,6,0,0,282 -"4782",0,1,1,32,2,1,4,1,4,6,0,0,282 -"4783",0,1,0,59,1,1,4,1,3,6,0,0,282 -"4784",1,0,1,35,2,1,4,1,8,6,0,0,282 -"4785",0,1,0,47,2,1,4,0,7,6,0,0,282 -"4786",0,1,1,42,1,1,4,0,10,6,0,0,282 -"4787",0,1,1,56,2,1,3,1,10,6,0,0,283 -"4788",0,1,0,49,4,1,3,0,10,6,1,0,283 -"4789",0,1,1,53,3,1,3,1,11,6,0,0,283 -"4790",0,1,0,47,1,1,3,1,10,6,1,0,283 -"4791",0,1,1,55,2,1,3,0,10,6,0,0,283 -"4792",0,1,1,44,1,1,3,1,5,6,0,0,283 -"4793",0,0,0,39,2,1,3,0,7,6,1,0,283 -"4794",0,1,1,47,2,1,3,1,10,6,1,0,283 -"4795",0,1,0,54,3,1,3,1,7,6,0,0,283 -"4796",0,1,1,58,2,1,3,1,8,6,0,0,283 -"4797",0,1,0,54,1,1,3,0,9,6,0,0,283 -"4798",0,1,1,63,3,1,3,1,11,6,0,0,283 -"4799",0,1,0,32,1,1,3,1,4,6,0,0,283 -"4800",0,1,0,58,1,1,3,0,8,6,0,0,283 -"4801",0,1,0,60,1,0,5,1,9,1,0,1,284 -"4802",0,1,1,55,1,0,5,1,12,1,1,1,284 -"4803",0,1,0,66,1,0,5,1,10,1,1,1,284 -"4804",0,1,1,52,3,0,5,1,12,1,1,1,284 -"4805",0,1,1,58,1,0,5,1,9,1,0,1,284 -"4806",0,1,0,63,4,0,5,1,9,1,1,1,284 -"4807",0,1,0,52,1,0,5,1,7,1,1,1,284 -"4808",0,1,1,51,3,0,5,1,10,1,1,1,284 -"4809",0,1,0,65,2,0,5,1,12,1,1,1,284 -"4810",0,1,0,54,1,0,5,1,9,1,0,1,284 -"4811",0,1,0,55,1,0,5,1,10,1,0,1,284 -"4812",0,1,1,45,1,0,5,1,12,1,1,1,284 -"4813",0,1,0,32,1,0,5,1,10,1,0,1,284 -"4814",0,1,0,56,1,0,5,1,10,1,0,1,284 -"4815",0,1,1,51,3,0,5,0,11,1,1,1,284 -"4816",0,1,1,48,1,0,5,1,10,1,0,1,284 -"4817",0,1,1,60,2,0,5,1,11,1,0,1,284 -"4818",0,1,0,52,2,0,5,1,15,1,1,1,284 -"4819",0,1,1,57,1,0,5,1,10,1,1,1,284 -"4820",0,1,0,57,1,0,5,1,6,1,1,1,284 -"4821",0,1,1,51,1,0,5,1,8,1,1,1,284 -"4822",0,1,0,48,1,0,5,1,6,1,0,1,284 -"4823",0,1,0,56,2,0,5,1,10,1,1,1,284 -"4824",0,1,0,63,2,1,5,1,7,5,0,0,285 -"4825",0,1,0,59,1,1,5,0,8,5,0,0,285 -"4826",0,1,0,53,1,1,5,0,9,5,0,0,285 -"4827",0,1,0,53,2,1,5,1,5,5,0,0,285 -"4828",0,1,1,56,1,1,5,1,6,5,1,0,285 -"4829",0,1,0,60,3,1,5,1,11,5,1,0,285 -"4830",0,1,0,61,4,1,5,0,2,5,1,0,285 -"4831",0,1,0,62,3,1,5,1,9,5,0,0,285 -"4832",0,1,0,54,2,1,5,1,8,5,0,0,285 -"4833",0,0,0,64,1,1,5,0,11,5,1,0,285 -"4834",0,1,1,56,1,1,5,1,9,5,1,0,285 -"4835",0,1,0,60,1,1,5,1,9,5,1,0,285 -"4836",0,1,0,64,1,1,5,0,10,5,1,0,285 -"4837",0,1,0,45,1,1,5,1,9,5,1,0,285 -"4838",0,1,1,53,3,1,5,1,10,5,0,0,285 -"4839",0,1,0,58,2,1,5,0,10,5,0,0,285 -"4840",0,1,0,58,1,1,5,0,13,5,0,0,285 -"4841",0,1,1,53,5,1,5,1,10,5,0,0,285 -"4842",0,1,1,60,1,1,5,1,9,5,0,0,285 -"4843",0,1,0,62,2,1,5,1,9,5,0,0,285 -"4844",1,1,1,44,2,1,5,0,10,5,1,0,285 -"4845",0,1,0,52,1,1,5,1,4,5,1,0,285 -"4846",0,1,0,54,1,1,5,0,8,5,0,0,285 -"4847",0,1,0,55,3,1,5,1,7,5,0,0,285 -"4848",0,1,0,42,2,1,5,1,11,5,1,0,285 -"4849",1,1,0,50,1,1,5,0,8,5,1,0,285 -"4850",0,1,0,49,5,1,5,1,11,5,1,0,285 -"4851",0,1,0,46,1,1,5,0,10,5,0,0,285 -"4852",0,1,1,53,2,1,5,0,8,5,0,0,285 -"4853",0,1,0,52,2,1,5,0,6,5,0,0,285 -"4854",1,0,0,64,3,1,4,0,11,2,0,0,286 -"4855",0,1,1,54,1,1,4,0,9,2,0,0,286 -"4856",0,1,0,57,2,1,4,1,8,2,0,0,286 -"4857",0,1,0,68,1,1,4,0,10,2,0,0,286 -"4858",0,0,0,64,2,1,4,0,8,2,0,0,286 -"4859",0,1,0,60,3,1,4,0,12,2,1,0,286 -"4860",0,1,0,49,1,1,4,1,8,2,0,0,286 -"4861",0,0,1,66,1,1,4,0,12,2,1,0,286 -"4862",0,1,1,60,1,1,4,1,9,2,1,0,286 -"4863",1,1,1,55,4,1,4,1,9,2,0,0,286 -"4864",1,1,0,56,2,1,4,0,9,2,0,0,286 -"4865",0,1,0,62,3,1,4,1,12,2,1,0,286 -"4866",0,1,1,65,3,1,4,0,9,2,0,0,286 -"4867",0,1,0,48,2,1,4,1,12,2,0,0,286 -"4868",0,1,0,62,1,1,4,1,11,2,1,0,286 -"4869",0,1,0,66,2,1,4,1,13,2,1,0,286 -"4870",0,0,1,58,3,1,4,1,12,2,1,0,286 -"4871",0,1,0,47,1,1,4,0,9,2,0,0,286 -"4872",0,1,0,63,1,1,4,1,11,2,1,0,286 -"4873",1,0,0,38,3,1,4,0,12,2,0,0,286 -"4874",1,0,1,51,2,1,4,0,10,2,0,0,286 -"4875",0,1,1,72,2,1,4,0,11,2,1,0,286 -"4876",0,1,0,63,2,1,4,1,10,2,1,0,286 -"4877",0,1,0,54,3,1,4,0,12,2,1,0,286 -"4878",0,1,0,57,2,1,5,0,10,6,0,0,287 -"4879",0,1,0,71,1,1,5,0,8,6,1,0,287 -"4880",0,1,0,62,3,1,5,1,12,6,1,0,287 -"4881",0,1,0,70,3,1,5,0,9,6,1,0,287 -"4882",0,1,0,40,2,1,5,0,9,6,0,0,287 -"4883",0,1,0,51,5,1,5,1,9,6,0,0,287 -"4884",0,1,0,31,3,1,5,1,5,6,0,0,287 -"4885",0,1,1,72,2,1,5,1,10,6,1,0,287 -"4886",0,1,0,65,1,1,5,0,11,6,1,0,287 -"4887",0,1,0,58,3,1,5,1,9,6,1,0,287 -"4888",0,1,1,48,1,1,5,1,9,6,0,0,287 -"4889",0,1,1,62,4,1,5,1,9,6,0,0,287 -"4890",0,1,0,56,3,1,5,1,10,6,0,0,287 -"4891",1,1,1,51,2,1,5,0,11,6,1,0,287 -"4892",0,1,0,58,1,1,5,1,10,6,1,0,287 -"4893",0,0,1,47,3,1,5,1,9,3,0,0,288 -"4894",0,1,0,59,3,1,5,0,11,3,1,0,288 -"4895",0,1,1,41,2,1,5,1,10,3,1,0,288 -"4896",0,1,0,35,2,1,5,0,9,3,0,0,288 -"4897",1,1,0,48,2,1,5,0,9,3,0,0,288 -"4898",0,1,0,59,2,1,5,0,11,3,0,0,288 -"4899",0,1,1,52,1,1,5,1,6,3,1,0,288 -"4900",0,1,1,40,3,1,5,0,11,3,1,0,288 -"4901",0,1,0,38,2,1,5,1,9,3,1,0,288 -"4902",0,1,0,62,2,1,5,1,11,3,1,0,288 -"4903",0,1,1,57,1,1,5,0,10,3,1,0,288 -"4904",0,1,1,49,2,1,5,1,7,3,0,0,288 -"4905",0,1,0,59,2,1,5,0,11,3,1,0,288 -"4906",0,0,1,37,1,1,5,1,12,3,1,0,288 -"4907",1,1,0,53,2,1,5,1,8,3,0,0,288 -"4908",0,1,0,30,3,1,5,1,12,3,1,0,288 -"4909",1,1,1,32,1,1,5,0,7,3,0,0,288 -"4910",0,1,1,32,3,1,5,1,5,3,0,0,288 -"4911",0,1,1,46,2,1,4,1,11,4,0,0,289 -"4912",0,1,0,55,1,1,4,0,10,4,0,0,289 -"4913",0,1,0,60,1,1,4,0,3,4,1,0,289 -"4914",1,0,0,41,2,1,4,0,5,4,0,0,289 -"4915",0,1,0,49,3,1,4,1,3,4,0,0,289 -"4916",0,1,0,52,2,1,4,1,6,4,0,0,289 -"4917",0,1,0,32,3,1,4,1,1,4,0,0,289 -"4918",0,0,0,56,3,1,4,0,8,4,1,0,289 -"4919",0,1,0,66,5,1,4,1,10,4,1,0,289 -"4920",0,1,0,41,2,1,4,0,9,4,1,0,289 -"4921",0,1,0,47,4,1,4,1,9,4,0,0,289 -"4922",0,1,0,57,2,1,4,0,7,4,0,0,289 -"4923",0,1,0,73,3,1,4,1,11,4,0,0,289 -"4924",0,1,1,53,5,1,4,0,4,4,0,0,289 -"4925",0,1,0,52,3,1,4,0,8,4,0,0,289 -"4926",0,1,0,50,2,1,4,0,10,4,0,0,289 -"4927",0,1,0,63,5,1,4,0,8,4,0,0,289 -"4928",0,1,1,62,3,1,4,1,8,4,0,0,289 -"4929",0,1,0,57,2,1,4,1,10,4,0,0,289 -"4930",1,1,0,60,1,1,4,0,10,4,0,0,289 -"4931",1,1,0,57,5,1,4,0,8,4,0,0,289 -"4932",0,1,1,45,2,1,4,1,10,4,0,0,289 -"4933",0,1,0,42,2,1,4,1,9,6,0,0,290 -"4934",0,1,0,57,3,1,4,0,6,6,0,0,290 -"4935",0,1,1,58,2,1,4,0,10,6,0,0,290 -"4936",0,1,0,58,1,1,4,1,5,6,1,0,290 -"4937",0,1,1,47,2,1,4,0,9,6,0,0,290 -"4938",0,1,0,29,1,1,4,1,9,6,1,0,290 -"4939",0,1,0,40,2,1,4,1,9,6,0,0,290 -"4940",0,0,0,41,5,1,4,0,8,6,0,0,290 -"4941",0,1,0,50,1,1,5,1,11,1,0,0,291 -"4942",0,1,0,42,1,1,5,1,7,1,0,0,291 -"4943",0,1,0,46,2,1,5,0,7,1,0,0,291 -"4944",0,1,1,58,3,1,5,0,12,1,1,0,292 -"4945",0,1,0,63,5,1,5,1,10,1,1,0,292 -"4946",0,1,1,50,2,1,5,1,10,1,1,0,292 -"4947",1,0,1,66,5,1,5,0,10,1,1,0,292 -"4948",0,1,1,45,3,1,5,1,12,1,0,0,292 -"4949",0,1,1,59,1,1,5,0,9,1,1,0,292 -"4950",1,1,1,54,5,1,5,0,10,1,1,0,292 -"4951",0,1,0,55,1,1,5,1,9,1,0,0,292 -"4952",0,1,1,49,5,1,5,0,9,1,1,0,292 -"4953",0,0,1,47,3,1,5,1,11,1,1,0,292 -"4954",0,0,1,65,3,1,5,0,10,1,1,0,292 -"4955",0,0,1,44,1,1,5,1,9,1,0,0,292 -"4956",1,0,1,47,1,1,5,0,10,1,0,0,292 -"4957",0,1,0,58,3,1,5,1,11,1,1,0,292 -"4958",0,1,1,56,2,1,5,1,6,1,1,0,292 -"4959",0,1,1,51,2,1,5,0,10,1,1,0,292 -"4960",0,1,1,70,1,1,5,1,12,1,1,0,292 -"4961",0,1,1,62,3,1,5,0,12,1,1,0,292 -"4962",0,1,0,59,1,1,5,1,10,1,1,0,292 -"4963",0,1,0,64,1,1,5,0,6,1,0,0,292 -"4964",1,1,1,74,1,1,5,0,12,1,1,0,292 -"4965",0,1,1,43,2,1,5,1,12,1,1,0,292 -"4966",0,1,0,58,1,1,3,0,10,4,0,0,293 -"4967",1,1,0,44,2,1,3,1,10,4,1,0,293 -"4968",0,1,0,52,3,1,3,1,10,4,1,0,293 -"4969",0,1,1,58,1,1,3,0,11,4,0,0,293 -"4970",0,1,1,39,3,1,3,1,7,4,0,0,293 -"4971",0,1,0,51,3,1,3,0,5,4,1,0,293 -"4972",0,1,1,41,4,1,3,1,7,4,0,0,293 -"4973",0,1,1,55,4,1,3,1,9,4,0,0,293 -"4974",0,1,0,63,1,1,3,1,9,4,0,0,293 -"4975",0,1,1,65,1,1,3,1,6,4,0,0,293 -"4976",0,1,0,59,1,1,3,0,10,4,0,0,293 -"4977",1,0,1,59,5,1,3,0,11,4,1,0,293 -"4978",0,1,0,49,4,1,3,0,11,4,0,0,293 -"4979",0,1,1,45,4,1,3,1,12,4,0,0,293 -"4980",0,1,0,71,1,1,3,1,10,4,1,0,293 -"4981",0,1,0,64,2,1,3,1,11,4,1,0,293 -"4982",0,1,1,39,2,1,3,0,8,4,1,0,293 -"4983",0,1,0,36,2,1,3,1,5,4,0,0,293 -"4984",1,1,1,41,5,1,3,0,9,4,0,0,293 -"4985",0,1,0,44,3,1,3,1,11,4,1,0,293 -"4986",1,1,1,51,3,1,3,1,11,4,0,0,293 -"4987",0,1,0,60,2,1,3,1,9,4,0,0,293 -"4988",0,1,1,50,1,0,5,1,10,4,0,0,294 -"4989",0,0,1,51,5,0,5,1,10,4,0,0,294 -"4990",0,1,1,56,1,0,5,1,7,4,0,0,294 -"4991",0,1,0,38,4,0,5,1,5,4,0,0,294 -"4992",0,1,0,44,2,0,5,1,7,4,1,0,294 -"4993",0,1,0,44,2,0,5,1,2,4,1,0,294 -"4994",0,0,1,53,4,0,5,1,9,4,0,0,294 -"4995",1,1,1,59,5,0,5,1,11,4,1,0,294 -"4996",1,1,0,52,3,0,5,1,9,4,0,0,294 -"4997",0,1,1,44,2,0,5,1,10,4,0,0,294 -"4998",0,1,1,43,2,0,5,1,4,4,0,0,294 -"4999",0,1,0,34,2,0,5,1,7,4,0,0,294 -"5000",0,1,0,40,1,0,5,1,9,4,1,0,294 -"5001",0,1,0,57,3,0,5,1,8,4,0,0,294 -"5002",0,0,0,48,5,1,3,1,10,7,0,0,295 -"5003",0,1,0,33,1,1,3,0,7,7,0,0,295 -"5004",0,1,0,36,1,1,4,1,5,7,1,0,296 -"5005",0,1,0,39,1,1,4,1,6,7,0,0,296 -"5006",0,1,0,43,2,1,4,1,4,7,0,0,296 -"5007",0,1,0,26,1,1,4,1,4,7,0,0,296 -"5008",1,1,1,24,1,1,4,0,5,7,0,0,296 -"5009",0,1,1,57,1,1,4,0,9,7,0,0,296 -"5010",0,1,0,55,1,1,4,1,9,7,1,0,296 -"5011",0,1,0,41,1,1,4,1,6,7,1,0,296 -"5012",0,1,1,39,2,1,4,0,4,7,0,0,296 -"5013",0,1,1,48,2,1,4,1,8,7,0,0,296 -"5014",1,1,0,41,2,1,4,0,7,7,0,0,296 -"5015",0,0,0,51,3,1,4,0,10,7,0,0,296 -"5016",0,1,0,41,3,1,4,0,6,7,1,0,296 -"5017",0,1,0,42,1,1,4,1,5,7,0,0,296 -"5018",0,1,0,48,3,1,4,0,10,7,0,0,296 -"5019",0,0,1,23,2,1,4,0,7,7,0,0,296 -"5020",0,0,0,42,5,1,4,0,2,7,0,0,296 -"5021",0,1,1,42,3,1,4,0,3,7,0,0,296 -"5022",1,1,0,39,3,1,4,0,8,7,0,0,296 -"5023",0,1,0,35,1,1,4,0,8,7,0,0,296 -"5024",0,1,1,57,2,1,4,0,7,7,0,0,296 -"5025",0,1,0,52,1,1,4,0,7,7,0,0,296 -"5026",0,1,0,60,3,1,4,1,6,6,1,0,297 -"5027",0,1,0,39,3,1,4,1,5,6,0,0,297 -"5028",0,1,0,43,3,1,4,1,7,6,0,0,297 -"5029",0,1,0,27,1,1,4,1,5,6,1,0,297 -"5030",0,1,0,54,5,1,4,0,10,6,1,0,297 -"5031",1,0,1,38,3,1,4,0,11,6,1,0,297 -"5032",0,1,0,32,2,1,4,1,10,6,1,0,297 -"5033",0,1,0,60,5,1,4,1,7,6,0,0,297 -"5034",0,1,0,51,1,1,4,1,10,6,1,0,297 -"5035",0,1,0,36,5,1,4,1,9,6,0,0,297 -"5036",0,1,0,44,2,1,4,0,11,6,0,0,297 -"5037",0,1,0,35,3,1,4,0,9,6,0,0,297 -"5038",0,1,0,41,1,1,4,1,8,6,0,0,297 -"5039",0,1,0,56,3,1,4,0,10,6,0,0,297 -"5040",0,1,0,44,3,1,4,1,6,6,0,0,297 -"5041",0,1,0,39,5,1,4,1,10,6,0,0,297 -"5042",0,1,0,32,2,1,4,1,9,6,0,0,297 -"5043",0,1,0,41,2,1,4,0,8,6,0,0,297 -"5044",0,1,0,59,1,1,5,1,12,1,0,1,298 -"5045",0,0,1,48,1,1,5,1,13,1,1,1,298 -"5046",0,1,0,57,3,1,5,1,11,1,1,1,298 -"5047",0,1,0,62,2,1,5,0,10,1,0,1,298 -"5048",0,1,0,54,1,1,5,1,11,1,0,1,298 -"5049",0,1,0,44,1,1,5,1,10,1,0,1,298 -"5050",0,1,1,64,1,1,5,0,11,1,0,1,298 -"5051",0,1,1,52,2,1,5,1,11,1,1,1,298 -"5052",0,1,1,57,2,1,5,0,8,1,0,1,298 -"5053",0,1,0,58,2,1,5,1,12,1,0,1,298 -"5054",0,1,1,64,1,1,5,1,12,1,1,1,298 -"5055",0,1,0,53,2,1,5,1,9,1,1,1,298 -"5056",0,1,0,62,1,1,5,0,11,1,1,1,298 -"5057",1,1,0,37,3,1,3,1,8,3,0,0,299 -"5058",0,1,0,26,2,1,3,0,8,3,0,0,299 -"5059",0,1,0,60,4,1,3,0,10,3,1,0,299 -"5060",0,1,0,52,3,1,3,0,7,3,0,0,299 -"5061",1,0,0,31,4,1,3,1,10,3,0,0,299 -"5062",0,0,0,48,2,1,3,0,6,3,0,0,299 -"5063",1,1,0,47,2,1,3,0,7,3,0,0,299 -"5064",0,1,0,62,1,1,3,0,8,3,0,0,299 -"5065",1,0,0,55,4,1,3,1,10,3,0,0,299 -"5066",0,1,0,47,2,1,3,1,10,3,0,0,299 -"5067",0,1,0,50,1,1,3,0,8,3,1,0,299 -"5068",0,1,0,50,4,1,3,0,9,3,0,0,299 -"5069",0,1,1,35,3,1,3,0,8,3,0,0,299 -"5070",0,1,0,52,2,1,3,0,9,3,0,0,299 -"5071",0,1,0,62,1,1,3,0,7,3,0,0,299 -"5072",0,1,0,55,2,1,3,0,9,3,0,0,299 -"5073",0,1,1,35,1,1,3,1,12,3,0,0,299 -"5074",0,1,1,57,1,1,3,1,8,3,0,0,299 -"5075",0,1,0,53,3,1,3,1,10,3,1,0,299 -"5076",0,0,0,39,3,1,3,1,8,3,0,0,299 -"5077",0,1,0,58,3,1,3,1,11,3,1,0,299 -"5078",0,1,0,37,2,1,3,0,9,3,0,0,299 -"5079",0,1,0,42,1,1,3,0,12,3,0,0,299 -"5080",0,1,0,54,1,1,3,0,10,3,0,0,299 -"5081",1,1,0,44,3,1,3,0,7,3,0,0,299 -"5082",0,1,0,65,2,1,5,0,9,4,0,0,300 -"5083",0,1,0,41,2,1,5,1,7,4,0,0,300 -"5084",0,1,1,46,1,1,5,0,5,4,0,0,300 -"5085",0,0,0,66,4,1,5,0,10,4,1,0,300 -"5086",0,1,0,29,2,1,5,0,10,4,0,0,300 -"5087",0,1,0,53,2,1,5,1,10,4,1,0,300 -"5088",0,1,0,47,3,1,5,1,8,4,0,0,300 -"5089",0,1,1,65,2,1,5,0,6,4,1,0,300 -"5090",1,1,0,47,2,1,5,0,11,4,0,0,300 -"5091",0,1,1,39,2,1,5,0,6,4,0,0,300 -"5092",0,1,0,47,1,1,5,1,8,4,0,0,300 -"5093",0,1,0,48,4,1,5,1,7,4,0,0,300 -"5094",0,1,0,55,4,1,5,0,10,4,0,0,300 -"5095",1,1,0,49,3,1,3,1,9,1,1,0,301 -"5096",0,1,1,53,2,1,3,0,9,1,0,0,301 -"5097",1,1,0,53,1,1,4,0,10,2,1,0,302 -"5098",0,1,1,40,2,1,4,0,10,2,0,0,302 -"5099",0,0,0,54,5,1,4,0,11,2,1,0,302 -"5100",0,1,0,40,2,1,4,0,11,2,0,0,302 -"5101",0,1,1,53,4,1,4,0,9,2,0,0,302 -"5102",0,1,1,62,2,1,4,0,11,2,1,0,302 -"5103",0,0,0,49,4,1,4,0,11,2,0,0,302 -"5104",0,1,0,65,2,1,4,1,12,2,1,0,302 -"5105",0,1,1,41,3,1,4,1,9,2,0,0,302 -"5106",0,1,0,44,1,1,4,0,5,2,0,0,302 -"5107",0,1,0,54,2,1,4,0,10,2,1,0,302 -"5108",0,1,1,67,1,1,4,1,9,2,1,0,302 -"5109",0,1,0,47,3,1,4,1,9,2,0,0,302 -"5110",0,1,1,51,1,1,4,0,7,2,0,0,302 -"5111",0,1,0,61,2,1,4,1,11,2,0,0,302 -"5112",0,1,1,47,1,1,3,1,10,3,0,0,303 -"5113",0,1,1,49,2,1,3,1,10,3,0,0,303 -"5114",0,1,1,69,2,1,3,1,9,3,0,0,303 -"5115",0,1,0,62,2,1,3,1,10,3,0,0,303 -"5116",0,1,0,48,1,1,3,0,11,3,1,0,303 -"5117",0,1,0,48,1,1,3,1,11,3,0,0,303 -"5118",0,1,0,56,2,1,3,1,9,3,1,0,303 -"5119",0,0,1,44,4,1,3,0,9,3,0,0,303 -"5120",0,1,0,69,2,1,3,1,11,3,1,0,303 -"5121",0,1,1,51,2,1,3,0,11,3,1,0,303 -"5122",0,1,0,49,3,1,3,1,11,3,1,0,303 -"5123",0,1,0,56,1,1,3,1,7,3,0,0,303 -"5124",0,1,0,56,1,1,3,0,10,3,0,0,303 -"5125",0,1,0,51,2,1,3,1,9,3,0,0,303 -"5126",0,1,0,50,2,1,3,1,4,3,0,0,303 -"5127",0,1,0,54,2,1,3,0,10,3,0,0,303 -"5128",0,1,1,50,3,1,3,0,9,3,1,0,303 -"5129",0,1,0,66,3,1,3,1,12,3,1,0,303 -"5130",0,1,0,35,2,1,3,1,9,3,1,0,303 -"5131",0,1,0,71,1,1,3,1,10,3,1,0,303 -"5132",0,1,1,56,1,1,4,1,11,2,1,0,304 -"5133",0,1,1,44,4,1,4,0,11,2,1,0,304 -"5134",0,1,0,41,2,1,4,1,9,2,0,0,304 -"5135",0,1,0,55,2,1,4,1,8,2,0,0,304 -"5136",0,1,0,56,1,1,4,1,10,2,1,0,304 -"5137",0,1,0,44,2,1,4,0,10,2,0,0,304 -"5138",1,1,1,61,4,1,4,0,12,2,1,0,304 -"5139",0,1,1,43,2,1,4,1,11,2,1,0,304 -"5140",0,1,0,54,2,1,4,0,7,2,0,0,304 -"5141",0,1,0,65,3,1,4,0,11,2,1,0,304 -"5142",0,1,1,51,1,1,4,1,10,2,0,0,304 -"5143",0,1,0,44,1,1,4,1,12,2,0,0,304 -"5144",0,1,1,56,2,1,4,0,9,5,1,0,305 -"5145",1,1,1,68,5,1,4,1,10,5,1,0,305 -"5146",0,1,0,59,2,1,4,0,7,5,0,0,305 -"5147",0,1,1,50,2,1,4,1,3,5,0,0,305 -"5148",0,1,0,56,1,1,4,1,7,5,0,0,305 -"5149",0,1,0,65,1,1,4,0,8,5,1,0,305 -"5150",0,1,1,31,2,1,4,1,9,5,0,0,305 -"5151",0,1,1,48,5,1,4,0,9,5,0,0,305 -"5152",0,1,0,41,2,1,4,1,7,5,1,0,305 -"5153",0,0,0,62,4,1,4,0,10,5,1,0,305 -"5154",0,1,0,40,3,1,4,0,8,5,0,0,305 -"5155",0,1,0,45,2,1,4,1,10,5,1,0,305 -"5156",0,1,1,47,2,1,4,0,8,5,0,0,305 -"5157",0,1,0,59,2,1,4,0,6,5,1,0,305 -"5158",0,1,1,54,2,1,4,1,13,5,1,0,305 -"5159",0,1,0,52,1,1,4,1,9,5,0,0,305 -"5160",0,1,0,55,2,1,4,0,10,5,1,0,305 -"5161",0,1,0,37,5,1,4,1,8,5,0,0,305 -"5162",0,1,0,50,5,1,4,1,9,5,0,0,305 -"5163",0,1,0,31,2,1,4,1,6,5,0,0,305 -"5164",0,1,0,67,2,1,3,1,10,5,0,0,306 -"5165",0,0,0,59,2,1,3,0,5,5,0,0,306 -"5166",0,1,1,48,2,1,3,1,5,5,0,0,306 -"5167",0,1,1,52,1,1,3,1,10,5,0,0,306 -"5168",0,1,0,40,4,1,3,1,7,5,0,0,306 -"5169",0,1,0,57,1,1,3,1,9,5,0,0,306 -"5170",0,1,1,64,1,1,3,0,10,5,0,0,306 -"5171",0,1,0,61,1,1,3,1,10,5,1,0,306 -"5172",0,1,1,52,3,1,3,1,9,5,1,0,306 -"5173",0,1,1,50,2,1,3,0,9,5,0,0,306 -"5174",0,1,1,41,2,1,3,1,9,5,0,0,306 -"5175",0,0,0,34,2,1,3,1,8,5,0,0,306 -"5176",1,1,1,32,1,1,3,0,5,5,0,0,306 -"5177",0,1,0,58,1,1,3,1,10,5,0,0,306 -"5178",0,1,0,53,1,1,3,0,10,5,0,0,306 -"5179",0,1,1,45,3,1,3,0,9,5,0,0,306 -"5180",0,1,0,53,2,1,4,1,9,4,0,0,307 -"5181",0,1,1,42,2,1,4,0,11,4,1,0,307 -"5182",0,1,0,62,1,1,4,1,11,4,1,0,307 -"5183",0,1,1,62,1,1,4,1,8,4,1,0,307 -"5184",0,1,0,60,2,1,4,0,11,4,1,0,307 -"5185",1,1,0,64,2,1,4,0,10,4,0,0,307 -"5186",0,1,0,67,2,1,4,0,12,4,1,0,307 -"5187",0,0,0,52,2,1,4,1,12,4,0,0,307 -"5188",0,1,1,43,2,1,4,1,12,4,1,0,307 -"5189",0,1,0,50,2,1,4,1,11,4,0,0,307 -"5190",0,1,1,53,1,1,4,1,11,4,1,0,307 -"5191",0,1,1,76,1,1,4,1,12,4,1,0,307 -"5192",0,0,1,50,1,1,4,0,10,4,0,0,307 -"5193",0,1,0,46,1,1,4,1,10,4,0,0,307 -"5194",0,1,1,49,1,1,4,0,12,4,0,0,307 -"5195",0,1,0,66,1,1,4,1,12,4,1,0,307 -"5196",0,1,1,36,1,1,4,0,12,4,1,0,307 -"5197",0,0,0,49,1,1,4,1,7,4,1,0,307 -"5198",0,1,0,60,2,1,4,0,12,4,0,0,307 -"5199",0,1,1,47,3,1,4,0,10,4,1,0,307 -"5200",0,0,1,54,2,1,4,1,6,4,0,0,307 -"5201",0,0,1,52,5,1,3,1,7,4,1,0,308 -"5202",0,1,0,57,2,1,3,1,12,4,1,0,308 -"5203",0,1,0,48,1,1,3,1,9,4,0,0,308 -"5204",0,1,1,48,2,1,3,0,10,4,0,0,308 -"5205",0,0,0,59,3,1,3,1,12,4,1,0,308 -"5206",0,1,0,37,3,1,3,1,8,4,0,0,308 -"5207",0,1,0,60,3,1,3,1,12,4,1,0,308 -"5208",0,1,0,47,5,1,3,1,9,4,0,0,308 -"5209",0,1,0,50,3,1,3,1,11,4,1,0,308 -"5210",1,1,1,42,1,1,3,0,8,4,1,0,308 -"5211",0,1,1,44,2,1,3,1,9,4,0,0,308 -"5212",0,1,0,47,1,1,3,1,10,4,0,0,308 -"5213",0,1,1,47,1,1,3,0,9,4,0,0,308 -"5214",0,1,1,56,1,1,3,0,7,4,0,0,308 -"5215",0,1,1,49,2,1,3,0,10,4,0,0,308 -"5216",0,1,0,50,4,1,3,0,9,4,0,0,308 -"5217",0,1,0,42,3,1,3,1,9,4,0,0,308 -"5218",0,1,1,65,3,1,3,0,9,4,0,0,308 -"5219",0,1,0,45,4,1,3,1,8,4,0,0,308 -"5220",0,1,0,51,1,1,3,1,10,4,0,0,308 -"5221",0,1,1,41,1,1,3,1,11,4,0,0,308 -"5222",0,1,0,61,2,1,5,1,10,3,1,0,309 -"5223",0,1,0,48,3,1,5,0,9,3,1,0,309 -"5224",0,1,0,45,2,1,5,1,11,3,1,0,309 -"5225",1,1,1,61,2,1,5,1,11,3,0,0,309 -"5226",0,1,1,66,1,1,5,1,10,3,1,0,309 -"5227",0,1,0,65,3,1,5,0,12,3,1,0,309 -"5228",0,1,0,49,1,1,5,0,11,3,1,0,309 -"5229",0,1,0,60,3,1,5,1,12,3,0,0,309 -"5230",0,1,1,50,2,1,5,0,8,3,0,0,309 -"5231",0,1,1,44,2,1,5,1,11,3,0,0,309 -"5232",0,1,1,51,2,1,5,0,8,3,1,0,309 -"5233",0,1,1,62,1,1,5,1,7,3,1,0,309 -"5234",0,1,0,63,2,1,5,0,10,3,1,0,309 -"5235",0,1,0,62,2,1,5,0,10,3,1,0,309 -"5236",1,0,0,50,1,1,5,1,11,3,0,0,309 -"5237",0,1,1,40,3,1,5,1,10,3,0,0,309 -"5238",0,1,0,52,3,1,5,1,7,3,0,0,309 -"5239",0,1,0,42,5,1,5,1,9,3,0,0,309 -"5240",0,1,1,58,3,1,5,1,8,3,0,0,309 -"5241",0,1,0,54,1,1,4,1,9,4,0,0,310 -"5242",0,1,0,63,4,1,4,0,10,4,0,0,310 -"5243",0,1,0,59,2,1,4,1,12,4,1,0,310 -"5244",0,1,0,47,2,1,4,1,10,4,1,0,310 -"5245",1,1,0,51,2,1,4,1,11,4,1,0,310 -"5246",0,1,1,67,1,1,4,0,9,4,0,0,310 -"5247",0,1,1,66,2,1,4,0,12,4,1,0,310 -"5248",1,1,1,49,3,1,4,0,8,4,1,0,310 -"5249",0,1,1,62,1,1,4,0,9,4,0,0,310 -"5250",1,1,0,53,3,1,4,0,4,4,0,0,310 -"5251",0,1,1,46,2,1,4,0,7,4,0,0,310 -"5252",0,1,0,72,2,1,4,1,13,4,0,0,310 -"5253",0,1,1,40,2,1,4,1,10,4,0,0,310 -"5254",1,1,0,49,5,1,4,0,10,4,0,0,310 -"5255",1,0,1,45,1,1,4,0,10,4,1,0,310 -"5256",0,1,0,48,1,1,4,1,9,4,0,0,310 -"5257",0,1,1,52,1,1,4,0,9,4,0,0,310 -"5258",1,1,0,54,2,1,5,1,9,4,0,0,311 -"5259",0,1,0,52,3,1,5,0,8,4,0,0,311 -"5260",0,1,0,45,2,1,5,1,8,4,1,0,311 -"5261",0,1,1,54,2,1,5,1,9,4,0,0,311 -"5262",1,1,1,40,2,1,5,0,10,4,0,0,311 -"5263",1,1,0,56,5,1,5,1,10,4,1,0,311 -"5264",0,1,0,76,3,1,5,1,7,4,0,0,311 -"5265",0,0,1,57,2,1,5,0,8,4,1,0,311 -"5266",0,1,1,43,2,1,5,1,3,4,0,0,311 -"5267",0,1,0,57,3,1,5,0,12,4,1,0,311 -"5268",0,1,0,67,1,1,5,0,10,4,1,0,311 -"5269",0,1,0,51,4,1,5,1,9,4,0,0,311 -"5270",0,1,0,51,4,1,5,1,10,4,0,0,311 -"5271",0,1,1,43,5,1,5,1,9,4,1,0,311 -"5272",0,1,0,48,2,1,5,0,12,4,1,0,311 -"5273",0,1,0,49,3,1,5,0,9,4,0,0,311 -"5274",0,1,0,42,2,1,5,0,9,4,0,0,311 -"5275",0,0,1,48,4,1,5,1,11,4,1,0,311 -"5276",0,1,0,44,2,1,5,1,6,4,0,0,311 -"5277",1,1,0,48,2,1,5,1,10,4,1,0,311 -"5278",1,1,1,37,5,1,5,0,11,4,0,0,311 -"5279",0,1,0,23,3,1,4,0,12,1,0,0,312 -"5280",0,1,1,53,1,1,4,0,6,1,1,0,312 -"5281",1,0,0,38,1,1,4,1,3,1,0,0,312 -"5282",0,1,1,52,1,1,4,1,9,1,1,0,312 -"5283",0,1,0,52,1,1,4,1,11,1,1,0,312 -"5284",1,1,1,37,2,1,4,1,9,1,1,0,312 -"5285",0,1,1,44,2,1,4,0,8,1,0,0,312 -"5286",0,1,0,58,1,1,4,1,7,1,0,0,312 -"5287",0,1,0,37,3,1,4,1,10,1,0,0,312 -"5288",0,1,0,52,2,1,4,1,10,1,1,0,312 -"5289",0,1,0,60,1,1,4,1,7,1,1,0,312 -"5290",0,1,0,53,2,1,4,1,13,1,1,0,312 -"5291",0,1,0,39,4,1,4,1,12,1,1,0,312 -"5292",1,1,1,55,5,1,4,0,4,1,1,0,312 -"5293",0,1,0,61,1,1,4,0,9,1,0,0,312 -"5294",0,1,1,44,2,1,4,0,5,1,1,0,312 -"5295",0,1,1,44,1,1,4,1,8,1,0,0,312 -"5296",1,1,1,42,4,1,4,0,10,1,0,0,312 -"5297",0,1,1,55,2,1,4,0,11,4,0,0,313 -"5298",1,1,0,41,2,1,4,0,10,4,0,0,313 -"5299",0,1,0,53,3,1,4,1,10,4,1,0,313 -"5300",0,1,0,46,1,1,4,0,10,4,1,0,313 -"5301",0,1,0,20,2,1,4,1,9,4,0,0,313 -"5302",0,1,1,33,1,1,4,1,9,4,0,0,313 -"5303",0,1,1,33,2,1,4,1,10,4,0,0,313 -"5304",0,1,0,46,2,1,4,0,9,4,1,0,313 -"5305",0,0,0,48,1,1,4,0,9,4,1,0,313 -"5306",0,0,1,45,2,1,4,0,10,4,1,0,313 -"5307",0,1,0,48,1,1,4,0,13,4,1,0,313 -"5308",0,1,0,51,3,1,4,0,10,4,0,0,313 -"5309",0,1,0,55,3,1,4,0,11,4,0,0,313 -"5310",0,1,0,44,2,1,4,1,10,4,1,0,313 -"5311",0,1,0,49,2,1,4,0,9,4,1,0,313 -"5312",0,1,0,43,3,1,4,0,9,4,0,0,313 -"5313",0,1,1,69,3,1,4,1,12,4,1,0,313 -"5314",0,1,0,45,3,1,4,1,10,4,0,0,313 -"5315",0,1,0,44,2,1,4,0,7,4,0,0,313 -"5316",0,1,1,29,5,1,4,0,7,4,0,0,313 -"5317",0,1,0,22,2,1,4,1,8,4,0,0,313 -"5318",0,1,0,58,3,1,4,1,10,4,1,0,313 -"5319",0,1,0,30,3,1,5,0,12,1,0,0,314 -"5320",1,1,0,37,3,1,5,0,11,1,1,0,314 -"5321",1,0,1,42,5,1,5,0,9,1,1,0,314 -"5322",0,1,0,62,3,1,5,1,11,1,0,0,314 -"5323",0,1,0,46,3,1,5,0,9,1,1,0,314 -"5324",0,1,0,47,1,1,5,0,10,3,1,0,315 -"5325",0,1,0,50,2,1,5,1,10,3,0,0,315 -"5326",0,1,1,43,2,1,5,0,10,3,0,0,315 -"5327",0,0,0,28,3,1,5,0,8,3,0,0,315 -"5328",0,1,0,52,2,1,5,0,10,3,0,0,315 -"5329",1,1,1,47,1,1,5,0,12,3,0,0,315 -"5330",0,1,0,49,1,1,5,0,9,3,1,0,315 -"5331",1,1,1,44,2,1,5,0,8,3,0,0,315 -"5332",0,1,1,36,2,1,5,1,9,3,0,0,315 -"5333",0,1,0,35,2,1,5,1,4,3,0,0,315 -"5334",0,1,0,65,1,1,5,1,9,3,1,0,315 -"5335",0,1,0,48,1,1,5,0,5,3,0,0,315 -"5336",0,1,0,46,2,1,5,1,12,3,1,0,315 -"5337",0,1,0,55,3,1,5,0,9,3,0,0,315 -"5338",0,1,0,50,2,1,5,1,12,3,1,0,315 -"5339",0,1,0,37,2,1,5,1,3,3,0,0,315 -"5340",0,1,0,33,2,1,5,1,5,3,0,0,315 -"5341",1,0,0,36,5,1,5,1,9,3,0,0,315 -"5342",1,0,1,49,5,1,5,0,5,3,0,0,315 -"5343",0,1,0,44,1,1,5,0,11,3,0,0,315 -"5344",0,1,1,56,5,1,5,1,12,3,0,0,315 -"5345",0,1,1,52,2,1,4,0,8,5,0,0,316 -"5346",1,1,0,50,3,1,4,1,8,5,1,0,316 -"5347",0,1,0,55,1,1,4,1,5,5,0,0,316 -"5348",0,1,1,48,3,1,4,0,10,5,0,0,316 -"5349",0,1,0,40,2,1,4,0,8,5,0,0,316 -"5350",0,0,0,47,1,1,4,0,7,5,1,0,316 -"5351",0,1,0,51,2,1,4,0,9,5,0,0,316 -"5352",0,1,0,34,1,1,4,1,10,5,0,0,316 -"5353",0,1,1,53,2,1,4,0,10,5,1,0,316 -"5354",0,1,0,67,5,1,4,0,8,5,0,0,316 -"5355",0,1,1,67,1,1,4,0,11,5,1,0,316 -"5356",0,1,1,47,1,1,4,1,9,5,0,0,316 -"5357",0,1,1,62,2,1,4,0,11,5,0,0,316 -"5358",0,1,0,64,2,1,4,0,10,2,1,0,317 -"5359",0,0,0,61,3,1,4,0,8,2,0,0,317 -"5360",0,1,1,62,3,1,4,1,7,2,0,0,317 -"5361",0,1,1,58,2,1,4,1,9,2,1,0,317 -"5362",0,1,1,55,2,1,4,1,9,2,0,0,317 -"5363",0,1,0,47,2,1,4,1,10,2,1,0,317 -"5364",0,1,1,52,2,1,4,0,12,2,1,0,317 -"5365",0,1,0,55,2,1,4,1,10,2,0,0,317 -"5366",0,1,1,60,5,1,4,1,11,2,1,0,317 -"5367",0,1,0,54,2,1,4,1,8,2,0,0,317 -"5368",1,1,1,59,2,1,4,0,9,2,1,0,317 -"5369",0,0,1,54,3,1,4,1,9,2,0,0,317 -"5370",0,1,1,54,4,1,4,0,10,2,1,0,317 -"5371",0,0,1,50,3,1,4,1,13,2,1,0,317 -"5372",0,1,1,51,3,1,4,0,5,2,0,0,317 -"5373",0,1,0,47,1,1,4,1,9,2,1,0,317 -"5374",0,1,0,72,2,1,4,0,12,2,1,0,317 -"5375",1,1,1,55,1,1,4,0,10,2,0,0,317 -"5376",0,1,0,32,2,1,4,1,7,2,0,0,317 -"5377",0,1,0,62,2,1,4,1,9,2,0,0,317 -"5378",0,1,0,60,4,1,4,1,9,2,1,0,317 -"5379",0,0,1,52,2,1,4,0,9,2,0,0,317 -"5380",0,1,0,30,5,1,4,1,9,7,0,0,318 -"5381",0,1,0,24,3,1,4,1,7,7,0,0,318 -"5382",0,1,0,62,2,1,4,1,9,3,0,0,319 -"5383",0,1,1,50,2,1,4,0,4,3,0,0,319 -"5384",0,0,0,41,2,1,4,1,11,3,1,0,319 -"5385",0,1,1,34,1,1,4,0,10,3,1,0,319 -"5386",1,0,0,62,5,1,4,0,9,3,0,0,319 -"5387",0,1,1,50,1,1,4,1,9,3,0,0,319 -"5388",0,1,0,34,1,1,4,0,8,3,0,0,319 -"5389",0,1,0,35,2,1,4,1,12,3,1,0,319 -"5390",0,1,1,58,1,1,4,0,10,3,0,0,319 -"5391",0,1,1,40,1,1,4,1,6,3,0,0,319 -"5392",1,0,1,45,3,1,4,0,5,3,0,0,319 -"5393",0,1,1,58,2,1,4,0,8,3,1,0,319 -"5394",0,1,1,47,3,1,4,0,9,3,0,0,319 -"5395",0,1,0,38,3,1,4,0,7,3,0,0,319 -"5396",0,1,1,59,2,1,4,0,6,3,0,0,319 -"5397",1,1,0,35,2,1,4,1,8,3,0,0,319 -"5398",0,1,1,38,2,1,4,0,12,3,1,0,319 -"5399",1,0,1,42,5,1,4,0,10,3,1,0,319 -"5400",0,1,1,55,3,1,4,1,9,3,0,0,319 -"5401",0,1,1,51,1,1,4,0,7,3,0,0,319 -"5402",0,1,1,56,1,1,4,0,10,3,1,0,319 -"5403",1,1,0,46,4,1,4,1,10,3,1,0,319 -"5404",0,1,0,40,2,1,4,0,10,3,0,0,319 -"5405",0,1,1,53,3,1,4,0,12,3,0,0,319 -"5406",0,0,1,34,5,1,4,0,9,3,0,0,319 -"5407",0,1,1,43,2,1,4,1,12,3,0,0,319 -"5408",0,1,1,43,3,1,4,1,8,3,0,0,319 -"5409",0,1,0,47,2,1,4,0,5,2,0,0,320 -"5410",0,1,0,62,1,1,4,0,10,2,1,0,320 -"5411",0,1,0,49,3,1,4,0,7,2,1,0,320 -"5412",0,1,0,59,3,1,4,1,10,2,1,0,320 -"5413",0,1,1,29,4,1,4,0,10,2,0,0,320 -"5414",1,1,0,38,1,1,4,0,7,2,0,0,320 -"5415",0,0,0,47,3,1,4,1,12,2,0,0,320 -"5416",1,1,0,30,1,1,4,1,6,2,0,0,320 -"5417",1,1,0,52,1,1,4,0,11,2,0,0,320 -"5418",0,0,0,53,1,1,4,1,8,2,0,0,320 -"5419",0,1,0,55,1,1,4,1,10,2,0,0,320 -"5420",0,1,1,43,2,1,4,1,8,2,0,0,320 -"5421",0,1,1,44,2,1,4,1,12,2,1,0,320 -"5422",0,1,0,49,3,1,4,0,7,2,0,0,320 -"5423",0,1,0,62,1,1,4,0,12,2,0,0,320 -"5424",0,1,0,57,2,1,4,1,10,2,0,0,320 -"5425",0,1,1,57,1,1,4,0,12,2,0,0,320 -"5426",0,1,0,56,1,1,4,0,10,2,1,0,320 -"5427",0,1,0,59,3,1,4,0,7,2,0,0,320 -"5428",0,1,0,71,2,1,4,0,9,2,1,0,320 -"5429",0,1,0,39,1,1,4,0,1,2,0,0,320 -"5430",0,1,0,63,1,1,4,0,9,2,1,0,320 -"5431",0,1,1,54,1,1,4,0,9,2,1,0,320 -"5432",0,1,0,36,3,1,4,1,4,2,0,0,321 -"5433",1,1,1,41,5,1,4,0,9,2,0,0,321 -"5434",0,1,0,37,5,1,4,0,9,2,0,0,321 -"5435",0,1,0,60,2,1,4,0,6,2,0,0,321 -"5436",0,1,0,44,5,1,4,0,9,2,0,0,321 -"5437",0,1,1,32,5,1,4,0,8,2,0,0,321 -"5438",0,1,0,66,1,1,4,0,11,2,1,0,321 -"5439",0,1,0,59,4,1,4,1,11,2,1,0,321 -"5440",1,1,0,30,3,1,4,1,6,2,0,0,321 -"5441",0,1,0,50,2,1,4,1,6,2,0,0,321 -"5442",0,1,0,55,2,1,4,1,10,2,0,0,321 -"5443",0,1,0,45,4,1,4,0,9,2,0,0,321 -"5444",0,1,1,50,5,1,4,1,10,2,1,0,321 -"5445",0,1,1,51,2,1,4,1,11,2,0,0,321 -"5446",0,1,0,34,3,1,4,1,9,2,0,0,321 -"5447",0,1,0,55,3,1,4,1,8,2,0,0,321 -"5448",1,1,0,59,3,1,4,0,8,2,0,0,321 -"5449",1,0,0,48,5,1,4,0,10,2,0,0,321 -"5450",0,1,0,56,2,1,4,0,10,2,0,0,321 -"5451",0,1,1,50,3,1,4,1,8,2,0,0,321 -"5452",0,1,1,50,2,1,4,0,12,2,0,0,321 -"5453",0,1,0,32,2,1,4,0,4,2,0,0,321 -"5454",0,0,0,43,5,1,4,1,2,2,0,0,321 -"5455",0,1,0,37,5,1,4,1,7,2,1,0,321 -"5456",0,1,1,45,5,1,4,1,13,2,1,1,322 -"5457",0,1,0,58,2,1,4,0,15,2,1,1,322 -"5458",0,1,0,38,1,1,4,1,11,2,1,1,322 -"5459",0,1,1,51,2,1,4,1,12,2,1,1,322 -"5460",0,1,0,65,2,1,4,1,10,2,1,1,322 -"5461",0,0,0,58,2,1,4,0,12,2,1,1,322 -"5462",0,1,0,67,2,1,4,1,9,2,1,1,322 -"5463",0,0,0,49,2,1,4,1,15,2,1,1,322 -"5464",0,1,0,71,1,1,4,0,11,2,1,1,322 -"5465",0,1,0,53,3,1,4,0,10,2,0,1,322 -"5466",0,0,1,57,1,1,4,0,11,2,0,1,322 -"5467",0,1,0,52,2,1,4,0,9,2,1,1,322 -"5468",0,1,0,57,2,1,4,0,8,2,0,1,322 -"5469",0,1,0,56,2,1,4,0,9,2,1,1,322 -"5470",0,1,1,49,2,1,4,1,12,2,1,1,322 -"5471",0,1,1,56,2,1,4,0,11,2,1,1,322 -"5472",0,1,0,47,2,1,4,0,11,2,1,1,322 -"5473",0,1,0,59,2,1,4,0,10,3,1,0,323 -"5474",0,1,0,60,3,1,4,0,10,3,1,0,323 -"5475",0,1,1,54,1,1,4,0,8,3,1,0,323 -"5476",0,1,0,51,4,1,4,1,10,3,1,0,323 -"5477",0,1,1,59,4,1,4,1,11,3,1,0,323 -"5478",0,1,0,43,3,1,4,1,13,3,1,0,323 -"5479",0,1,0,55,1,1,4,1,9,3,1,0,323 -"5480",0,1,1,52,2,1,4,1,11,3,0,0,323 -"5481",0,1,1,64,3,1,4,0,11,3,1,0,323 -"5482",0,1,0,60,2,1,4,1,12,3,0,0,323 -"5483",0,0,1,58,3,1,4,0,8,3,1,0,323 -"5484",1,0,0,42,2,1,4,0,9,3,1,0,323 -"5485",0,1,0,73,2,1,4,1,11,3,1,0,323 -"5486",0,1,0,53,3,1,4,1,9,3,1,0,323 -"5487",0,1,0,65,1,1,4,1,11,3,1,0,323 -"5488",0,1,0,59,2,1,4,0,9,7,0,0,324 -"5489",0,1,0,47,2,1,4,1,6,7,0,0,324 -"5490",0,1,1,49,3,1,4,0,8,7,0,0,324 -"5491",0,1,0,52,2,1,4,1,8,7,1,0,324 -"5492",0,1,1,49,5,1,4,0,12,7,1,0,324 -"5493",0,1,0,69,2,1,4,0,7,7,1,0,324 -"5494",0,1,0,56,1,1,4,0,1,7,0,0,324 -"5495",0,1,0,46,2,1,4,0,8,7,0,0,324 -"5496",0,1,0,59,3,1,4,1,7,7,1,0,324 -"5497",0,1,0,55,2,1,4,1,6,7,0,0,324 -"5498",0,1,0,54,4,1,4,1,10,7,1,0,324 -"5499",0,1,0,51,2,1,4,1,9,7,1,0,324 -"5500",0,1,0,71,2,1,4,0,9,7,1,0,324 -"5501",0,1,0,45,1,1,4,1,7,7,0,0,324 -"5502",0,1,0,49,3,1,4,1,14,7,1,0,324 -"5503",0,1,0,61,2,1,4,0,8,7,0,0,324 -"5504",0,1,0,48,4,1,4,1,6,7,0,0,324 -"5505",0,1,0,60,2,1,4,0,6,7,0,0,324 -"5506",0,1,1,57,1,1,4,0,8,7,0,0,324 -"5507",0,0,0,62,5,1,4,0,12,7,1,0,324 -"5508",0,1,0,61,5,1,4,1,5,7,0,0,324 -"5509",0,1,0,48,2,1,4,1,7,7,1,0,324 -"5510",0,1,1,49,1,1,4,0,10,4,0,0,325 -"5511",0,1,1,58,3,1,4,1,11,4,0,0,325 -"5512",0,1,0,47,1,1,4,1,12,4,1,0,325 -"5513",0,1,1,40,1,1,4,1,4,4,0,0,325 -"5514",0,0,0,57,1,1,4,0,11,4,1,0,325 -"5515",0,1,1,59,1,1,4,1,8,4,0,0,325 -"5516",0,1,1,58,2,1,4,1,10,4,0,0,325 -"5517",0,0,1,51,3,1,4,0,9,4,0,0,325 -"5518",0,1,1,44,3,1,4,0,9,4,0,0,325 -"5519",0,1,1,42,2,1,4,1,8,4,0,0,325 -"5520",1,1,1,25,2,1,4,1,9,4,0,0,325 -"5521",0,1,1,47,2,1,4,1,5,4,0,0,325 -"5522",0,1,0,48,2,1,4,0,9,4,1,0,325 -"5523",0,1,1,67,4,1,4,0,12,1,1,0,326 -"5524",0,1,1,67,5,1,4,1,9,1,1,0,326 -"5525",0,1,0,35,2,1,4,1,11,1,0,0,326 -"5526",0,1,1,72,3,1,4,0,11,1,1,0,326 -"5527",0,1,0,58,2,1,4,1,13,1,1,0,326 -"5528",0,1,0,40,4,1,4,0,12,1,1,0,326 -"5529",0,1,0,70,2,1,4,0,12,1,1,0,326 -"5530",0,0,0,48,2,1,4,0,9,1,1,0,326 -"5531",1,0,0,75,3,1,4,0,12,1,1,0,326 -"5532",0,1,1,59,2,1,4,0,13,1,1,0,326 -"5533",0,0,0,69,3,1,4,0,13,1,1,0,326 -"5534",0,1,0,66,1,1,4,1,10,1,0,0,326 -"5535",0,1,0,63,2,1,4,0,9,1,0,0,326 -"5536",0,1,0,67,3,1,4,0,13,1,1,0,326 -"5537",0,1,0,68,2,1,4,0,12,1,1,0,326 -"5538",0,1,0,65,1,1,4,1,10,1,1,0,326 -"5539",0,0,1,57,4,1,4,0,11,1,1,0,326 -"5540",0,1,0,53,2,1,4,1,10,1,0,0,326 -"5541",0,1,1,73,5,1,4,0,12,1,1,0,326 -"5542",0,1,0,71,1,1,4,0,10,1,1,0,326 -"5543",0,1,1,61,2,1,4,0,12,1,1,0,326 -"5544",0,1,0,69,3,1,4,0,10,1,1,0,326 -"5545",0,1,0,62,5,1,4,1,10,1,1,0,326 -"5546",0,0,1,50,5,1,4,0,10,1,1,0,326 -"5547",0,0,1,68,5,1,4,1,13,1,1,0,326 -"5548",0,1,1,68,2,1,4,0,12,1,1,0,326 -"5549",0,1,1,62,2,1,4,1,12,1,1,0,326 -"5550",0,1,1,59,3,1,4,1,11,1,1,0,326 -"5551",0,1,0,61,5,1,4,1,10,1,0,0,327 -"5552",0,1,1,57,2,1,4,1,10,1,1,0,327 -"5553",0,1,0,58,5,1,4,1,12,1,1,0,327 -"5554",1,1,0,59,3,1,4,0,10,1,1,0,327 -"5555",0,1,0,61,3,1,4,0,12,1,1,0,327 -"5556",0,1,0,40,4,1,4,1,12,1,0,0,327 -"5557",0,1,1,60,2,1,4,0,13,1,1,0,327 -"5558",1,1,0,49,3,1,4,1,11,1,1,0,327 -"5559",0,1,0,51,1,1,4,1,10,1,1,0,327 -"5560",0,1,0,50,3,1,4,1,13,1,1,0,327 -"5561",0,1,0,46,4,1,4,0,8,1,0,0,327 -"5562",1,1,0,49,5,1,4,0,11,1,1,0,327 -"5563",0,1,1,48,1,1,4,0,11,1,1,0,327 -"5564",0,1,0,54,3,1,4,0,11,1,1,0,327 -"5565",0,1,0,39,1,1,4,0,13,1,0,0,327 -"5566",0,1,0,51,2,1,4,0,13,1,1,0,327 -"5567",0,1,1,60,2,1,4,0,12,1,1,0,327 -"5568",0,1,0,42,2,1,4,1,10,1,0,0,327 -"5569",0,1,0,36,2,0,3,1,9,1,0,1,328 -"5570",0,1,0,33,3,0,3,1,10,1,0,1,328 -"5571",0,1,0,63,1,0,3,1,11,1,1,1,328 -"5572",1,1,0,38,2,0,3,1,8,1,0,1,328 -"5573",0,1,0,64,3,0,3,1,11,1,0,1,328 -"5574",0,1,0,55,1,0,3,0,3,1,0,1,328 -"5575",0,1,0,56,1,0,3,1,11,1,0,1,328 -"5576",0,1,0,50,2,0,3,1,11,1,1,1,328 -"5577",0,1,0,44,1,0,3,1,11,1,0,1,328 -"5578",1,1,0,46,1,0,3,1,11,1,0,1,328 -"5579",0,1,1,52,1,0,3,1,11,1,0,1,328 -"5580",0,0,0,57,2,0,3,1,11,1,0,1,328 -"5581",0,1,0,56,2,0,3,1,11,1,0,1,328 -"5582",0,1,1,62,3,0,3,1,9,1,0,1,328 -"5583",0,1,0,56,3,0,3,1,7,1,0,1,328 -"5584",0,1,0,59,3,0,3,1,6,1,0,1,328 -"5585",0,1,0,47,2,0,3,1,10,1,0,1,328 -"5586",0,1,0,51,1,0,3,1,4,1,1,1,328 -"5587",0,1,0,61,1,0,3,1,10,1,0,1,328 -"5588",0,1,0,53,2,1,4,1,10,2,1,0,329 -"5589",0,1,1,36,3,1,4,1,9,2,0,0,329 -"5590",0,0,1,41,2,1,4,0,9,2,0,0,329 -"5591",0,1,0,43,1,1,4,0,10,2,0,0,329 -"5592",0,1,0,72,3,1,4,1,11,2,0,0,329 -"5593",1,0,1,43,3,1,4,0,8,2,0,0,329 -"5594",0,1,0,48,2,1,4,1,9,2,0,0,329 -"5595",0,1,0,56,2,1,4,1,10,2,0,0,329 -"5596",0,1,1,45,2,1,4,0,11,2,1,0,329 -"5597",0,1,0,69,1,1,4,1,10,2,0,0,329 -"5598",0,1,0,42,2,1,4,1,10,2,0,0,329 -"5599",0,1,0,53,2,1,4,0,10,2,0,0,329 -"5600",0,1,0,49,1,1,4,1,6,2,1,0,329 -"5601",1,0,0,53,2,1,4,0,8,2,0,0,329 -"5602",0,1,0,68,1,1,4,0,10,2,1,0,329 -"5603",0,1,0,61,3,1,4,1,7,2,0,0,329 -"5604",0,1,1,40,1,1,4,0,8,2,1,0,329 -"5605",0,1,1,69,3,1,4,0,12,2,1,0,329 -"5606",0,1,0,53,3,1,4,1,10,2,0,0,329 -"5607",0,1,0,44,1,1,4,1,9,2,1,0,329 -"5608",0,1,1,53,1,1,4,1,10,2,0,0,329 -"5609",1,1,0,38,4,1,5,0,8,6,0,0,330 -"5610",1,1,0,30,3,1,5,0,5,6,0,0,330 -"5611",0,1,1,53,1,1,5,0,13,6,0,0,330 -"5612",0,1,0,51,2,1,5,0,7,6,0,0,330 -"5613",0,1,1,36,4,1,5,0,11,6,1,0,330 -"5614",0,1,0,56,2,1,5,0,9,6,1,0,330 -"5615",0,1,0,50,2,1,5,1,10,6,1,0,330 -"5616",1,0,1,38,3,1,5,1,7,6,1,0,330 -"5617",0,1,1,52,4,1,5,1,9,6,0,0,330 -"5618",0,1,0,28,1,1,5,1,8,6,0,0,330 -"5619",0,1,1,32,3,1,4,1,10,6,0,0,331 -"5620",0,1,0,52,3,1,4,1,9,6,0,0,331 -"5621",0,1,0,26,3,1,4,0,6,6,0,0,331 -"5622",0,0,0,61,2,1,4,0,9,1,0,0,332 -"5623",0,1,0,53,1,1,4,0,11,1,1,0,332 -"5624",0,1,1,53,1,1,4,1,11,1,1,0,332 -"5625",0,1,1,59,5,1,4,0,13,1,0,0,332 -"5626",0,1,0,50,4,1,4,1,10,1,1,0,332 -"5627",0,1,0,58,2,1,4,1,12,1,1,0,332 -"5628",0,1,1,54,2,1,4,1,10,1,1,0,332 -"5629",0,1,1,40,2,1,4,0,11,1,0,0,332 -"5630",1,0,0,56,3,1,4,0,12,1,1,0,332 -"5631",0,1,0,46,4,1,4,1,9,1,0,0,332 -"5632",0,1,1,66,2,1,4,0,11,1,1,0,332 -"5633",0,1,0,43,2,1,4,1,12,1,1,0,332 -"5634",0,1,0,59,2,1,4,0,12,1,1,0,332 -"5635",0,1,0,48,3,1,4,0,8,1,1,0,332 -"5636",0,1,0,51,2,1,4,1,12,1,1,0,332 -"5637",1,1,0,45,2,1,4,0,9,1,1,0,332 -"5638",0,1,0,56,1,1,4,1,12,1,1,0,332 -"5639",0,1,1,60,1,1,4,0,12,1,0,0,332 -"5640",0,0,0,48,1,1,4,1,9,1,1,0,332 -"5641",0,1,1,47,2,1,4,0,10,1,1,0,332 -"5642",0,1,0,58,2,1,4,0,12,1,1,0,332 -"5643",0,1,0,52,1,1,4,1,12,1,1,0,332 -"5644",0,1,1,59,3,1,4,0,2,1,0,0,332 -"5645",0,1,1,49,2,1,4,1,9,5,0,0,333 -"5646",0,1,1,63,2,1,4,1,12,5,0,0,333 -"5647",0,1,1,46,2,1,4,1,10,5,0,0,333 -"5648",0,0,1,51,5,1,4,1,10,5,1,0,333 -"5649",0,1,0,68,3,1,4,1,9,5,1,0,333 -"5650",0,1,1,51,2,1,4,0,8,5,0,0,333 -"5651",0,1,1,47,1,1,4,1,10,5,1,0,333 -"5652",0,1,0,56,1,1,4,0,9,5,1,0,333 -"5653",0,1,1,41,2,1,4,0,12,5,0,0,333 -"5654",0,1,1,64,3,1,4,1,9,5,0,0,333 -"5655",0,1,0,52,5,1,4,1,11,5,0,0,333 -"5656",0,1,0,35,2,1,4,0,11,5,1,0,333 -"5657",0,1,1,59,1,1,4,1,9,5,0,0,333 -"5658",0,1,0,54,2,1,4,1,6,5,0,0,333 -"5659",0,1,1,38,3,1,4,1,10,5,0,0,333 -"5660",0,0,0,49,5,1,4,1,5,5,0,0,333 -"5661",0,1,1,57,2,1,4,1,6,5,0,0,333 -"5662",0,1,0,33,1,1,4,0,9,5,1,0,333 -"5663",0,1,0,46,3,1,4,1,9,5,0,0,333 -"5664",0,1,0,71,2,1,4,1,13,1,1,0,334 -"5665",0,1,0,68,5,1,4,1,12,1,1,0,334 -"5666",0,1,0,61,1,1,4,1,11,1,1,0,334 -"5667",0,1,0,58,1,1,4,1,10,1,0,0,334 -"5668",0,1,0,72,4,1,4,0,11,1,1,0,334 -"5669",0,1,0,59,2,1,4,0,9,1,1,0,334 -"5670",1,1,1,62,3,1,4,0,11,1,0,0,334 -"5671",1,0,1,56,3,1,4,0,9,1,1,0,334 -"5672",0,1,0,67,3,1,4,1,9,1,0,0,334 -"5673",0,1,0,69,2,1,4,0,12,1,1,0,334 -"5674",0,0,0,68,2,1,4,1,10,1,1,0,334 -"5675",0,1,0,64,5,1,4,1,1,1,1,0,334 -"5676",0,1,0,67,2,1,4,0,11,1,1,0,334 -"5677",0,1,0,72,2,1,4,0,9,1,1,0,334 -"5678",0,1,1,69,5,1,4,0,12,1,1,0,334 -"5679",0,1,0,58,2,1,4,1,12,1,1,0,334 -"5680",0,1,1,57,2,1,4,1,10,1,1,0,334 -"5681",0,1,0,58,1,1,4,1,13,1,1,0,334 -"5682",0,1,0,58,1,1,4,1,8,1,0,0,334 -"5683",0,1,1,46,3,1,5,0,11,5,0,0,335 -"5684",0,1,0,56,1,1,5,1,11,5,0,0,335 -"5685",0,1,0,46,1,1,5,0,10,5,1,0,335 -"5686",0,1,0,55,5,1,5,1,10,5,1,0,335 -"5687",0,1,0,49,1,1,5,0,10,5,0,0,335 -"5688",0,1,0,57,3,1,5,1,12,5,1,0,335 -"5689",0,1,0,54,1,1,5,0,11,5,1,0,335 -"5690",0,1,1,49,2,1,5,1,8,5,1,0,335 -"5691",0,1,0,46,3,1,5,0,7,5,0,0,335 -"5692",0,1,0,54,3,1,5,1,8,5,0,0,335 -"5693",0,1,0,44,2,1,5,1,11,5,1,0,335 -"5694",0,1,1,61,4,1,5,0,9,5,0,0,335 -"5695",0,1,1,55,1,1,5,1,8,5,0,0,335 -"5696",1,1,1,45,2,1,5,0,10,5,1,0,335 -"5697",0,1,0,46,3,1,5,1,10,5,1,0,335 -"5698",0,1,0,62,5,1,5,1,11,5,1,0,335 -"5699",0,0,0,54,2,1,5,1,9,5,0,0,335 -"5700",0,0,1,53,3,1,5,1,4,5,0,0,335 -"5701",0,0,0,46,2,1,5,0,8,5,0,0,335 -"5702",0,0,0,61,2,1,5,0,9,5,0,0,335 -"5703",1,0,0,50,5,1,4,0,5,3,0,0,336 -"5704",1,1,0,46,1,1,4,0,10,3,1,0,336 -"5705",0,1,0,52,3,1,4,1,9,3,0,0,336 -"5706",0,1,1,49,3,1,4,1,12,3,1,0,336 -"5707",1,1,0,44,3,1,4,0,9,3,0,0,336 -"5708",0,1,1,38,2,1,4,1,6,3,0,0,336 -"5709",0,1,1,58,5,1,4,1,10,3,1,0,336 -"5710",0,1,1,53,1,1,4,0,10,3,0,0,336 -"5711",1,1,0,49,2,1,4,0,10,3,1,0,336 -"5712",0,1,0,42,3,1,4,0,7,3,0,0,336 -"5713",0,1,0,50,3,1,4,1,10,3,1,0,336 -"5714",0,1,0,63,1,1,4,1,10,3,1,0,336 -"5715",0,1,0,49,2,0,2,1,10,1,1,0,337 -"5716",1,1,1,48,3,0,2,1,12,1,1,0,337 -"5717",0,1,0,52,3,0,2,1,9,1,1,0,337 -"5718",0,1,0,52,1,0,2,1,10,1,1,0,337 -"5719",0,1,0,52,1,0,2,1,9,1,1,0,337 -"5720",0,1,1,54,2,0,2,1,11,1,1,0,337 -"5721",0,1,0,65,2,0,2,1,11,1,1,0,337 -"5722",0,1,0,59,1,0,2,1,8,1,1,0,337 -"5723",0,1,0,52,2,0,2,1,8,1,1,0,337 -"5724",0,0,0,53,3,0,2,1,9,1,1,0,337 -"5725",0,1,0,60,2,0,2,1,9,1,1,0,337 -"5726",0,0,0,49,3,1,4,1,5,7,0,0,338 -"5727",1,1,1,47,2,1,4,0,6,7,0,0,338 -"5728",0,1,0,54,1,1,4,1,8,7,0,0,338 -"5729",0,1,0,59,2,1,4,0,9,7,1,0,338 -"5730",0,1,0,42,1,1,4,0,9,7,1,0,338 -"5731",0,1,0,44,5,1,4,1,5,7,0,0,338 -"5732",0,1,0,51,2,1,4,1,9,7,0,0,338 -"5733",0,1,0,42,2,1,4,0,6,7,0,0,338 -"5734",1,1,0,59,1,1,4,0,5,7,1,0,338 -"5735",0,1,0,49,2,1,4,1,8,7,0,0,338 -"5736",0,1,0,64,1,1,4,0,11,7,1,0,338 -"5737",0,1,0,69,2,1,4,0,7,7,0,0,338 -"5738",0,1,0,46,1,1,4,1,4,7,0,0,338 -"5739",0,1,0,59,2,1,4,1,4,7,0,0,338 -"5740",0,1,0,48,1,1,4,0,8,7,0,0,338 -"5741",0,1,0,56,2,1,4,0,10,7,1,0,338 -"5742",0,1,0,46,2,1,4,1,9,7,1,0,338 -"5743",0,1,0,69,4,1,4,1,12,3,1,0,339 -"5744",1,1,1,54,3,1,4,0,11,3,0,0,339 -"5745",0,1,1,41,3,1,4,0,5,3,0,0,339 -"5746",0,1,0,71,3,1,4,1,12,3,1,0,339 -"5747",0,1,0,59,3,1,4,1,10,3,1,0,339 -"5748",0,1,0,59,2,1,4,0,10,3,0,0,339 -"5749",0,1,0,75,1,1,4,0,11,3,0,0,339 -"5750",0,1,0,38,2,1,3,1,10,3,0,0,340 -"5751",0,1,0,61,3,1,3,1,13,3,1,0,340 -"5752",0,1,1,58,1,1,3,0,7,3,0,0,340 -"5753",0,1,0,43,5,1,3,1,12,3,1,0,340 -"5754",0,1,0,42,2,1,3,1,8,3,0,0,340 -"5755",0,0,0,56,2,1,3,1,9,3,0,0,340 -"5756",1,1,0,42,1,1,3,0,9,3,0,0,340 -"5757",0,1,0,36,2,1,3,1,6,3,0,0,340 -"5758",1,1,1,43,1,1,3,1,10,3,0,0,340 -"5759",1,0,0,43,3,1,3,0,7,3,0,0,340 -"5760",0,1,1,44,2,1,3,1,7,3,0,0,340 -"5761",1,1,1,48,2,1,3,0,9,3,0,0,340 -"5762",0,1,1,67,3,1,3,1,9,3,0,0,340 -"5763",1,0,1,47,2,1,3,1,10,3,0,0,340 -"5764",0,1,1,62,3,1,3,0,10,3,1,0,340 -"5765",0,1,1,54,2,1,3,1,11,3,1,0,340 -"5766",1,1,0,44,2,1,3,0,9,3,0,0,340 -"5767",0,1,1,41,4,1,3,1,10,3,0,0,340 -"5768",0,1,0,80,2,1,3,0,8,3,1,0,340 -"5769",1,1,1,48,3,1,3,0,11,3,0,0,340 -"5770",0,1,0,61,1,1,5,1,10,1,0,1,341 -"5771",0,1,1,53,4,1,5,0,10,1,1,1,341 -"5772",0,1,0,55,2,1,5,1,13,1,1,1,341 -"5773",0,1,1,57,3,1,5,0,12,1,0,1,341 -"5774",1,0,0,57,2,1,5,0,12,1,1,1,341 -"5775",0,1,0,57,3,1,5,1,10,1,1,1,341 -"5776",0,1,0,63,2,1,5,0,13,1,1,1,341 -"5777",0,1,0,69,3,1,5,1,12,1,1,1,341 -"5778",0,1,1,67,2,1,5,1,6,1,1,1,341 -"5779",0,1,0,53,4,1,5,0,10,1,1,1,341 -"5780",1,1,0,62,1,1,5,0,9,1,0,1,341 -"5781",0,1,0,67,2,1,5,0,11,1,1,1,341 -"5782",0,1,0,64,2,1,4,0,8,5,1,0,342 -"5783",0,1,0,33,2,1,4,1,5,5,0,0,342 -"5784",0,1,0,50,1,1,4,0,8,5,1,0,342 -"5785",0,1,0,63,2,1,4,1,11,5,1,0,342 -"5786",0,1,1,54,2,1,4,1,10,5,0,0,342 -"5787",1,1,0,34,4,1,4,1,10,5,0,0,342 -"5788",0,1,0,63,2,1,4,0,12,5,1,0,342 -"5789",0,1,0,63,4,1,4,0,9,5,0,0,342 -"5790",0,1,0,64,2,1,4,0,11,5,1,0,342 -"5791",0,1,0,52,3,1,4,1,4,5,1,0,342 -"5792",0,1,0,47,2,1,4,0,7,5,0,0,342 -"5793",0,1,0,50,2,1,4,0,8,5,0,0,342 -"5794",0,1,1,64,2,1,4,1,10,5,1,0,342 -"5795",0,1,0,46,2,1,4,0,10,5,0,0,342 -"5796",0,1,0,59,1,1,4,0,10,5,0,0,342 -"5797",0,1,0,54,1,1,4,0,10,5,0,0,342 -"5798",0,1,1,55,3,1,4,1,10,5,1,0,342 -"5799",0,1,1,70,2,1,5,0,9,1,1,0,343 -"5800",1,0,1,41,5,1,5,1,9,1,0,0,343 -"5801",0,1,1,54,3,1,5,1,10,1,0,0,343 -"5802",0,1,0,56,3,1,5,1,10,1,0,0,343 -"5803",0,1,1,66,1,1,5,0,11,1,1,0,343 -"5804",0,1,0,62,3,1,3,1,11,3,1,0,344 -"5805",0,1,0,51,3,1,3,1,9,3,0,0,344 -"5806",0,1,0,47,5,1,3,1,6,3,0,0,344 -"5807",1,1,0,50,3,1,3,0,6,3,1,0,344 -"5808",0,1,0,43,3,1,3,1,6,3,0,0,344 -"5809",0,1,1,61,4,1,3,1,12,3,1,0,344 -"5810",0,1,1,64,5,1,3,0,12,3,1,0,344 -"5811",0,1,1,39,3,1,3,1,9,3,0,0,344 -"5812",0,0,1,47,3,1,3,1,11,3,0,0,344 -"5813",1,1,0,58,2,1,3,0,6,3,0,0,344 -"5814",0,1,1,57,1,1,3,1,10,3,1,0,344 -"5815",0,1,1,57,3,1,3,1,10,3,1,0,344 -"5816",0,1,1,49,5,1,3,0,10,3,1,0,344 -"5817",0,1,0,59,2,1,3,0,10,3,0,0,344 -"5818",0,1,0,74,2,1,3,0,7,3,1,0,344 -"5819",0,1,1,51,2,1,3,1,10,3,0,0,344 -"5820",0,1,0,65,2,1,3,1,9,3,1,0,344 -"5821",0,1,0,61,2,1,3,0,10,3,0,0,344 -"5822",0,1,1,52,3,1,4,1,10,5,0,0,345 -"5823",0,1,0,58,3,1,4,1,11,5,0,0,345 -"5824",0,0,0,41,2,1,4,1,10,5,0,0,345 -"5825",0,1,0,45,2,1,4,1,2,5,0,0,345 -"5826",0,1,0,41,2,1,4,1,6,5,0,0,345 -"5827",0,1,0,35,5,1,4,0,9,5,0,0,345 -"5828",0,1,0,51,5,1,4,0,10,5,1,0,345 -"5829",0,1,0,66,1,1,4,0,10,5,0,0,345 -"5830",0,1,0,46,1,1,4,0,3,5,0,0,345 -"5831",0,1,0,57,2,1,4,0,9,5,0,0,345 -"5832",0,1,0,48,1,1,4,1,8,5,0,0,345 -"5833",1,1,1,39,2,1,4,1,5,5,0,0,345 -"5834",0,1,0,65,2,1,4,0,8,5,0,0,345 -"5835",0,0,0,56,2,1,4,0,12,5,1,0,345 -"5836",1,1,1,49,3,1,4,1,8,5,1,0,345 -"5837",0,1,0,59,2,1,4,1,6,5,0,0,345 -"5838",0,0,0,43,2,1,4,0,7,5,0,0,345 -"5839",0,1,0,58,3,1,4,1,11,5,1,0,345 -"5840",0,1,0,46,3,1,4,0,4,5,0,0,345 -"5841",0,1,0,48,3,1,4,0,5,5,0,0,345 -"5842",0,1,1,49,3,1,4,1,8,5,0,0,345 -"5843",0,1,1,54,2,1,4,1,10,5,1,0,345 -"5844",0,0,0,71,1,1,4,0,11,5,0,0,345 -"5845",0,1,1,60,2,1,4,0,9,5,0,0,345 -"5846",0,1,0,48,2,1,4,1,10,5,0,0,345 -"5847",0,1,0,40,1,1,4,0,3,5,0,0,345 -"5848",0,1,0,46,2,0,4,1,10,4,1,1,346 -"5849",0,1,0,44,1,0,4,1,6,4,1,1,346 -"5850",0,1,1,41,2,0,4,1,8,4,0,1,346 -"5851",1,1,0,38,2,0,4,1,7,4,1,1,346 -"5852",0,0,1,48,1,0,4,1,6,4,0,1,346 -"5853",0,1,0,33,3,0,4,1,4,4,0,1,346 -"5854",0,1,1,43,2,0,4,1,8,4,1,1,346 -"5855",1,1,0,54,1,0,4,1,13,4,0,1,346 -"5856",0,1,1,51,1,0,4,1,6,4,0,1,346 -"5857",0,1,0,44,1,0,4,1,11,4,1,1,346 -"5858",0,0,1,38,2,1,4,0,10,3,0,0,347 -"5859",0,1,1,64,1,1,4,1,10,3,0,0,347 -"5860",0,1,1,50,3,1,4,0,11,3,1,0,347 -"5861",1,0,1,51,2,1,4,0,9,3,0,0,347 -"5862",0,1,0,64,1,1,4,1,9,3,0,0,347 -"5863",0,1,0,65,2,1,4,1,9,3,0,0,347 -"5864",0,1,1,53,1,1,4,0,7,3,0,0,347 -"5865",0,1,0,55,1,1,4,0,8,3,0,0,347 -"5866",0,1,1,63,3,1,4,1,9,3,0,0,347 -"5867",0,1,0,36,5,1,4,0,9,3,0,0,347 -"5868",1,1,1,36,3,1,4,0,6,3,0,0,347 -"5869",0,1,1,53,4,1,4,1,10,3,1,0,347 -"5870",0,1,1,46,2,1,4,1,9,3,0,0,347 -"5871",0,1,1,65,2,1,4,0,11,3,1,0,347 -"5872",0,1,1,47,2,1,4,0,8,3,0,0,347 -"5873",0,1,0,49,3,1,4,1,9,3,0,0,347 -"5874",0,1,1,61,2,1,4,1,8,3,0,0,347 -"5875",0,1,0,57,2,1,4,0,10,3,0,0,347 -"5876",0,1,1,63,2,1,4,0,9,3,0,0,347 -"5877",0,1,0,54,4,1,4,1,10,3,0,0,347 -"5878",0,1,1,44,3,1,4,0,9,3,0,0,347 -"5879",1,1,0,40,2,1,4,0,9,3,1,0,347 -"5880",0,1,1,39,1,1,4,1,10,3,0,0,347 -"5881",0,1,1,44,2,1,4,0,10,3,0,0,347 -"5882",0,1,0,42,2,1,4,0,9,3,0,0,347 -"5883",0,1,1,53,3,1,4,1,9,3,0,0,347 -"5884",0,0,1,58,1,1,4,0,6,3,0,0,347 -"5885",0,0,1,34,3,1,4,1,4,3,1,0,347 -"5886",0,1,1,52,2,1,4,1,10,1,0,0,348 -"5887",0,0,1,46,2,1,4,0,10,1,0,0,348 -"5888",0,1,1,37,2,1,4,1,9,1,0,0,348 -"5889",1,0,0,51,2,1,4,0,10,1,0,0,348 -"5890",0,1,0,50,1,1,4,1,10,1,1,0,348 -"5891",0,1,1,48,2,1,4,0,11,1,0,0,348 -"5892",0,1,0,39,3,1,4,0,6,1,0,0,348 -"5893",0,1,0,43,1,1,4,1,11,1,0,0,348 -"5894",0,1,1,42,2,1,4,1,12,1,1,0,348 -"5895",0,0,0,60,2,1,4,0,8,1,0,0,348 -"5896",0,0,0,52,2,1,4,1,11,1,1,0,348 -"5897",0,1,1,50,2,1,4,1,8,1,0,0,348 -"5898",0,1,0,58,1,1,4,1,7,1,0,0,348 -"5899",0,0,0,50,3,1,4,0,9,1,0,0,348 -"5900",0,1,1,60,1,1,4,1,9,1,0,0,348 -"5901",0,1,0,33,3,1,4,0,7,1,0,0,348 -"5902",0,1,0,64,5,1,5,0,7,4,1,0,349 -"5903",0,1,0,75,1,1,5,0,9,4,0,0,349 -"5904",0,1,0,48,3,1,5,0,3,4,1,0,349 -"5905",1,1,0,43,2,1,5,1,9,4,1,0,349 -"5906",0,1,1,54,1,1,5,0,10,4,0,0,349 -"5907",0,1,0,38,5,1,5,1,10,4,0,0,349 -"5908",0,1,0,44,2,1,5,0,10,4,1,0,349 -"5909",0,1,1,60,3,1,5,0,11,4,0,0,349 -"5910",0,1,0,54,3,1,5,1,10,4,1,0,349 -"5911",1,1,0,44,2,1,5,0,9,5,0,0,350 -"5912",0,1,0,50,4,1,5,1,7,5,0,0,350 -"5913",0,1,0,53,2,1,5,1,8,5,0,0,350 -"5914",0,0,0,52,1,1,5,1,9,5,0,0,350 -"5915",0,1,1,40,2,1,5,1,8,5,0,0,350 -"5916",0,1,0,59,4,1,5,1,11,5,1,0,350 -"5917",0,1,0,51,2,1,5,1,8,5,0,0,350 -"5918",1,0,0,33,3,1,5,0,12,5,0,0,350 -"5919",0,1,0,56,2,1,5,1,6,5,0,0,350 -"5920",0,1,0,45,1,1,5,1,11,5,0,0,350 -"5921",0,1,0,53,2,1,5,0,5,5,1,0,350 -"5922",0,1,0,43,5,1,5,1,7,5,0,0,350 -"5923",0,1,0,54,3,1,5,1,10,5,1,0,350 -"5924",0,1,0,63,1,1,5,1,9,5,0,0,350 -"5925",0,1,0,38,1,1,5,1,6,5,1,0,350 -"5926",1,0,1,42,4,1,5,1,8,5,0,0,350 -"5927",0,1,0,51,5,1,3,1,12,5,1,0,351 -"5928",0,1,0,58,2,1,3,1,10,5,0,0,351 -"5929",0,1,0,37,3,1,3,1,13,5,0,0,351 -"5930",0,0,0,39,5,1,3,1,8,5,0,0,351 -"5931",0,1,0,47,5,1,3,0,8,5,0,0,351 -"5932",0,1,0,51,3,1,3,0,11,5,1,0,351 -"5933",0,0,1,60,3,1,3,0,12,5,1,0,351 -"5934",0,1,1,67,2,1,3,0,11,5,0,0,351 -"5935",0,1,1,47,5,1,3,0,10,5,0,0,351 -"5936",0,1,0,71,3,1,3,1,11,5,1,0,351 -"5937",0,1,0,53,2,1,3,0,13,5,0,0,351 -"5938",1,1,0,57,4,1,3,0,9,5,0,0,351 -"5939",0,1,0,57,3,1,3,1,9,5,1,0,351 -"5940",0,1,1,61,3,1,3,1,11,5,1,0,351 -"5941",0,0,1,47,1,1,3,0,8,5,0,0,351 -"5942",0,1,0,77,1,1,3,1,10,5,1,0,351 -"5943",0,1,0,68,2,1,3,1,6,5,0,0,351 -"5944",1,1,0,46,3,1,3,0,10,5,0,0,351 -"5945",0,1,0,68,3,1,3,1,11,5,0,0,351 -"5946",0,1,0,72,2,1,4,0,10,5,1,0,352 -"5947",0,1,0,56,3,1,4,1,8,5,0,0,352 -"5948",0,1,0,47,1,1,4,0,11,5,0,0,352 -"5949",0,1,0,61,3,1,4,0,10,5,1,0,352 -"5950",0,0,0,47,1,1,4,1,9,5,0,0,352 -"5951",0,1,0,52,1,1,4,0,3,5,0,0,352 -"5952",0,1,0,55,1,1,4,0,10,5,0,0,352 -"5953",0,0,0,62,1,1,4,0,9,5,0,0,352 -"5954",0,0,1,33,2,1,4,1,8,5,0,0,352 -"5955",0,1,0,72,1,1,4,0,13,5,1,0,352 -"5956",1,0,0,53,1,1,4,1,11,5,1,0,352 -"5957",0,0,0,33,2,1,4,1,7,5,0,0,352 -"5958",0,1,1,37,2,1,4,1,9,5,0,0,352 -"5959",0,1,0,56,2,1,4,1,11,5,0,0,352 -"5960",0,1,1,47,1,1,5,1,6,1,1,0,353 -"5961",0,1,1,35,2,1,5,1,6,1,0,0,353 -"5962",0,1,0,34,2,1,5,1,5,1,1,0,353 -"5963",0,1,0,59,3,1,3,0,8,6,1,0,354 -"5964",0,1,0,62,2,1,3,1,9,6,0,0,354 -"5965",0,1,0,49,2,1,3,1,8,6,0,0,354 -"5966",0,1,0,47,1,1,3,1,7,6,0,0,354 -"5967",0,1,0,54,2,1,3,1,12,6,1,0,354 -"5968",0,1,1,58,1,1,3,0,9,6,1,0,354 -"5969",1,1,1,39,1,1,3,0,8,6,0,0,354 -"5970",0,1,1,59,2,1,3,1,9,6,0,0,354 -"5971",0,1,1,66,1,1,3,1,9,6,0,0,354 -"5972",0,1,0,51,1,1,3,1,10,6,1,0,354 -"5973",0,1,0,39,1,1,3,1,8,6,0,0,354 -"5974",0,1,0,50,2,1,5,0,10,4,1,0,355 -"5975",0,1,1,51,1,1,5,1,8,4,0,0,355 -"5976",0,1,0,41,3,1,5,0,7,4,0,0,355 -"5977",0,1,1,63,2,1,5,1,11,4,1,0,355 -"5978",0,1,0,60,2,1,5,0,10,4,1,0,355 -"5979",0,1,0,57,1,1,5,1,6,4,0,0,355 -"5980",0,1,1,45,2,1,5,0,6,4,0,0,355 -"5981",0,1,0,51,1,1,5,1,12,4,0,0,355 -"5982",0,1,0,38,2,1,5,0,7,4,0,0,355 -"5983",0,1,0,33,2,1,5,0,3,4,0,0,355 -"5984",0,1,1,53,3,1,5,1,8,4,0,0,355 -"5985",0,1,0,57,2,1,5,1,9,4,0,0,355 -"5986",0,1,0,56,2,1,5,0,9,4,0,0,355 -"5987",1,1,1,32,2,1,5,0,3,4,0,0,355 -"5988",0,1,0,50,1,1,5,1,10,4,0,0,355 -"5989",1,1,0,39,1,1,5,0,12,4,1,0,355 -"5990",0,1,0,45,2,1,5,1,9,4,0,0,355 -"5991",0,1,0,51,2,1,5,0,3,4,0,0,355 -"5992",0,1,0,54,1,1,5,0,12,4,0,0,355 -"5993",0,1,1,49,1,1,5,1,10,4,1,0,355 -"5994",0,1,0,55,2,1,5,1,10,4,0,0,355 -"5995",0,1,0,35,1,1,5,1,7,4,0,0,355 -"5996",0,1,0,47,2,1,5,1,5,4,0,0,355 -"5997",1,1,0,52,5,1,5,0,7,4,0,0,355 -"5998",0,1,0,47,1,1,5,1,11,1,1,0,356 -"5999",0,1,0,50,1,1,5,0,9,1,1,0,356 -"6000",0,0,0,46,1,1,5,0,13,1,1,0,356 -"6001",1,1,0,53,4,1,5,1,12,1,1,0,356 -"6002",0,1,1,44,4,1,5,1,10,1,1,0,356 -"6003",1,1,0,40,3,1,5,0,12,1,0,0,356 -"6004",0,1,0,74,3,1,5,0,12,1,1,0,356 -"6005",0,1,1,64,3,1,5,1,11,1,1,0,356 -"6006",0,1,0,47,1,1,5,0,11,1,0,0,356 -"6007",0,1,1,35,1,1,5,1,7,1,1,0,356 -"6008",0,1,1,54,1,1,5,1,10,1,0,0,356 -"6009",0,0,1,48,5,1,5,0,12,1,1,0,356 -"6010",0,0,0,75,2,1,5,0,12,1,1,0,356 -"6011",0,1,0,58,1,1,5,1,12,1,1,0,356 -"6012",0,1,1,49,1,1,5,0,11,1,1,0,356 -"6013",1,0,0,72,3,1,5,0,13,1,1,0,356 -"6014",0,0,0,51,1,1,5,1,10,1,0,0,356 -"6015",0,1,0,58,2,1,5,1,11,1,1,0,356 -"6016",0,1,1,53,2,1,5,1,11,1,1,0,356 -"6017",0,1,1,45,2,1,5,1,9,1,0,0,356 -"6018",0,1,0,48,3,1,5,0,10,1,1,0,356 -"6019",0,1,0,50,2,1,5,1,10,1,1,0,356 -"6020",0,1,0,57,1,1,5,1,12,1,1,0,356 -"6021",0,1,1,57,1,1,5,0,10,1,1,0,356 -"6022",0,1,0,43,1,1,5,1,10,1,0,0,356 -"6023",0,1,0,61,1,1,5,0,12,1,1,0,356 -"6024",0,0,0,49,1,1,5,0,11,1,1,0,356 -"6025",1,1,0,50,1,1,5,0,10,1,1,0,356 -"6026",0,1,0,59,1,1,5,0,10,1,1,0,356 -"6027",0,1,0,50,3,1,5,0,12,1,1,0,356 -"6028",0,1,0,54,1,1,5,1,11,1,1,0,356 -"6029",0,1,0,63,3,1,5,1,11,1,0,0,356 -"6030",0,1,0,56,5,1,5,0,9,1,1,0,356 -"6031",0,1,0,52,1,1,5,1,13,1,1,0,356 -"6032",0,1,0,55,1,1,5,1,10,1,0,0,356 -"6033",0,0,0,50,2,1,5,0,7,1,0,0,356 -"6034",0,1,0,42,2,1,4,1,9,5,0,0,357 -"6035",0,1,0,56,1,1,4,1,10,5,0,0,357 -"6036",0,1,0,53,1,1,4,0,9,5,0,0,357 -"6037",0,1,0,53,3,1,4,1,11,5,1,0,357 -"6038",0,1,0,46,3,1,4,1,6,5,0,0,357 -"6039",1,0,0,43,1,1,4,1,8,5,0,0,357 -"6040",0,1,0,58,1,1,4,0,13,5,1,0,357 -"6041",0,1,0,53,1,1,4,0,12,5,1,0,357 -"6042",0,1,1,49,2,1,4,1,8,5,0,0,357 -"6043",0,1,0,50,3,1,4,1,7,5,0,0,357 -"6044",0,1,0,60,2,1,4,1,8,5,0,0,357 -"6045",1,1,0,43,3,1,4,1,8,5,0,0,357 -"6046",0,1,0,51,2,1,4,1,10,5,0,0,357 -"6047",0,0,0,57,2,1,4,1,9,5,1,0,357 -"6048",0,1,0,51,2,1,4,1,6,5,0,0,357 -"6049",0,0,1,58,2,1,4,0,12,5,1,0,357 -"6050",0,1,0,56,4,1,4,1,11,1,0,0,358 -"6051",0,1,1,51,2,1,4,0,11,1,1,0,358 -"6052",0,0,0,55,2,1,4,1,5,1,0,0,358 -"6053",0,1,1,64,3,1,4,1,13,1,1,0,358 -"6054",0,1,0,57,3,1,4,1,11,1,0,0,358 -"6055",0,1,0,52,2,1,4,0,8,1,1,0,358 -"6056",0,0,0,60,5,1,4,1,13,1,1,0,358 -"6057",1,0,0,51,2,1,4,0,12,1,1,0,358 -"6058",1,1,0,41,2,1,4,0,10,1,0,0,358 -"6059",0,1,0,58,2,1,4,0,12,1,1,0,358 -"6060",0,1,0,57,4,1,4,0,12,1,1,0,358 -"6061",0,1,0,55,4,1,4,0,9,1,0,0,358 -"6062",0,1,0,66,2,1,4,1,12,1,1,0,358 -"6063",0,1,1,55,1,1,4,0,12,1,1,0,358 -"6064",0,1,0,65,3,1,4,1,12,1,1,0,358 -"6065",1,1,0,50,3,1,4,0,10,1,1,0,358 -"6066",0,1,0,43,2,1,4,0,12,1,1,0,358 -"6067",0,1,1,60,2,1,4,0,11,1,1,0,358 -"6068",1,0,0,64,4,1,4,0,10,1,0,0,358 -"6069",0,1,0,61,5,1,4,0,12,1,1,0,358 -"6070",0,1,1,45,2,1,4,0,11,1,0,0,358 -"6071",1,0,1,59,3,1,4,1,9,1,0,0,358 -"6072",0,1,0,59,2,1,4,1,9,1,1,0,358 -"6073",0,1,1,49,3,1,3,0,9,4,0,0,359 -"6074",0,1,0,45,2,1,3,0,9,4,1,0,359 -"6075",0,1,1,62,2,1,3,1,10,4,1,0,359 -"6076",0,0,0,40,5,1,3,1,10,4,1,0,359 -"6077",1,1,0,52,3,1,3,0,8,4,1,0,359 -"6078",0,1,1,38,2,1,3,0,10,4,0,0,359 -"6079",0,1,1,63,3,1,3,1,11,4,0,0,359 -"6080",0,1,1,45,1,1,3,0,11,4,0,0,359 -"6081",0,1,0,58,1,1,3,0,7,4,0,0,359 -"6082",0,0,1,50,1,1,3,0,12,4,0,0,359 -"6083",0,1,0,62,2,1,3,1,10,4,0,0,359 -"6084",0,1,0,45,3,1,3,1,10,4,0,0,359 -"6085",0,1,1,62,1,1,3,1,7,4,0,0,359 -"6086",0,0,0,59,2,1,3,0,9,4,0,0,359 -"6087",0,1,0,44,3,1,3,0,6,4,1,0,359 -"6088",1,1,0,55,3,1,3,0,11,4,1,0,360 -"6089",1,0,1,53,1,1,3,1,4,4,0,0,360 -"6090",0,1,1,24,2,1,3,1,7,4,0,0,360 -"6091",0,1,1,42,1,1,3,1,9,4,0,0,360 -"6092",1,0,0,51,5,1,3,0,4,4,0,0,360 -"6093",0,1,0,31,1,1,3,1,6,4,0,0,360 -"6094",0,0,0,37,1,1,3,0,7,4,0,0,360 -"6095",0,1,1,58,2,1,3,0,9,4,0,0,360 -"6096",0,1,1,40,3,1,3,1,6,4,0,0,360 -"6097",0,1,1,60,2,1,3,1,7,4,0,0,360 -"6098",0,1,1,37,1,1,3,1,10,4,1,0,360 -"6099",1,1,1,56,1,1,3,1,9,4,0,0,360 -"6100",1,1,1,55,2,1,3,0,11,4,1,0,360 -"6101",0,1,1,45,3,1,3,0,10,4,0,0,360 -"6102",1,0,0,29,4,1,3,0,8,4,0,0,360 -"6103",0,1,0,59,2,1,3,0,12,4,0,0,360 -"6104",0,1,1,51,2,1,3,1,8,4,0,0,360 -"6105",0,1,1,64,3,1,3,0,9,4,0,0,360 -"6106",1,1,1,62,2,1,3,0,9,4,1,0,360 -"6107",0,1,1,50,2,1,3,1,9,4,0,0,360 -"6108",0,1,1,61,1,1,3,0,9,4,0,0,360 -"6109",0,1,0,60,1,1,3,1,11,4,0,0,360 -"6110",0,1,1,47,2,1,3,0,11,4,0,0,360 -"6111",0,0,1,38,2,1,3,0,10,4,0,0,360 -"6112",0,1,0,38,1,1,3,1,11,4,0,0,360 -"6113",0,0,1,64,2,1,3,0,7,4,1,0,360 -"6114",0,1,0,56,1,1,3,0,11,4,0,0,360 -"6115",0,1,1,50,3,1,3,0,8,4,0,0,360 -"6116",0,1,0,47,1,1,3,1,9,4,0,0,360 -"6117",0,1,0,46,2,1,3,1,10,4,0,0,360 -"6118",1,1,1,49,3,1,3,0,10,4,0,0,360 -"6119",0,0,0,49,1,1,3,0,6,4,0,0,360 -"6120",0,1,0,43,3,1,4,1,12,2,0,0,361 -"6121",0,1,0,44,3,1,4,1,8,2,0,0,361 -"6122",0,0,0,41,3,1,4,1,8,2,0,0,361 -"6123",0,1,0,50,2,1,4,1,12,2,1,0,361 -"6124",1,1,1,51,3,1,4,0,12,2,1,0,361 -"6125",0,1,0,54,1,1,4,1,12,2,1,0,361 -"6126",0,0,1,32,5,1,4,1,5,2,0,0,361 -"6127",0,1,1,53,3,1,4,1,10,2,1,0,361 -"6128",0,1,0,63,2,1,4,1,12,2,1,0,361 -"6129",0,1,0,57,1,1,4,0,9,2,0,0,361 -"6130",0,1,0,41,3,1,4,0,12,2,1,0,361 -"6131",0,1,0,56,5,1,4,1,10,2,1,0,361 -"6132",0,1,0,46,2,1,4,1,7,2,1,0,361 -"6133",0,1,0,44,2,1,4,1,10,1,0,0,362 -"6134",0,1,0,48,2,1,4,0,3,1,0,0,362 -"6135",0,1,1,40,2,1,4,1,9,1,0,0,362 -"6136",0,1,0,45,2,1,4,1,11,1,0,0,362 -"6137",0,1,0,42,2,1,4,1,5,1,0,0,362 -"6138",0,0,0,52,3,1,4,0,7,1,0,0,362 -"6139",0,1,0,54,3,1,4,1,8,1,0,0,362 -"6140",1,1,1,50,3,1,4,1,10,1,0,0,362 -"6141",0,0,0,54,2,1,4,0,11,1,0,0,362 -"6142",0,1,0,54,2,1,4,1,13,1,1,0,362 -"6143",0,1,1,50,2,1,4,0,9,1,0,0,362 -"6144",0,1,0,50,1,1,4,1,11,1,1,0,362 -"6145",0,1,0,60,2,1,4,0,9,1,0,0,362 -"6146",1,1,1,29,2,1,4,0,5,1,0,0,362 -"6147",0,1,0,70,2,1,4,0,10,1,1,0,362 -"6148",0,1,0,52,1,1,4,1,10,1,0,0,362 -"6149",0,1,0,60,2,1,4,1,8,1,0,0,362 -"6150",1,1,1,56,2,1,4,0,7,1,0,0,362 -"6151",1,1,0,53,3,1,4,0,8,1,1,0,362 -"6152",0,1,0,67,3,1,4,0,11,1,1,0,362 -"6153",0,1,0,57,5,1,4,1,6,1,0,0,362 -"6154",0,1,1,62,1,1,4,1,12,1,1,0,363 -"6155",0,0,1,55,3,1,4,0,9,1,0,0,363 -"6156",0,1,0,67,2,1,4,1,10,1,0,0,363 -"6157",0,1,0,53,3,1,4,1,8,1,0,0,363 -"6158",0,1,1,50,3,1,4,0,9,1,0,0,363 -"6159",1,1,1,42,2,1,4,1,10,1,0,0,363 -"6160",0,1,0,38,2,1,4,1,8,1,0,0,363 -"6161",0,1,0,50,2,1,4,1,10,1,1,0,363 -"6162",0,1,0,49,2,1,4,1,12,1,0,0,363 -"6163",0,1,0,55,1,1,4,0,9,1,1,0,363 -"6164",0,1,0,47,2,1,4,1,10,1,1,0,363 -"6165",0,1,0,59,1,1,4,0,6,1,0,0,363 -"6166",0,1,0,44,1,1,4,1,3,1,0,0,363 -"6167",0,0,1,44,5,1,4,1,12,1,1,0,363 -"6168",0,1,1,60,1,1,4,1,12,1,1,0,363 -"6169",1,1,0,53,1,1,4,0,10,1,0,0,363 -"6170",0,0,0,39,3,1,4,1,10,1,0,0,363 -"6171",0,1,0,55,1,1,5,0,5,1,0,1,364 -"6172",0,1,0,69,2,1,5,0,12,1,1,1,364 -"6173",1,1,0,57,2,1,5,1,8,1,0,1,364 -"6174",1,0,1,49,5,1,5,1,10,1,0,1,364 -"6175",0,1,1,48,3,1,5,0,6,1,0,1,364 -"6176",0,1,0,71,2,1,5,0,10,1,1,1,364 -"6177",0,1,0,57,1,1,5,1,11,1,1,1,364 -"6178",0,1,0,75,1,1,5,1,11,1,1,1,364 -"6179",0,1,1,66,1,1,5,0,11,1,1,1,364 -"6180",0,1,1,57,1,1,5,0,12,1,1,1,364 -"6181",1,1,1,47,2,1,5,1,7,1,1,1,364 -"6182",0,1,1,65,2,1,5,1,14,1,1,1,364 -"6183",0,1,0,56,2,1,5,0,13,1,0,1,364 -"6184",1,1,1,44,4,1,5,1,8,1,0,1,364 -"6185",0,1,1,57,2,1,5,0,10,1,0,1,364 -"6186",0,1,0,40,1,1,5,1,13,1,0,0,365 -"6187",0,1,0,57,2,1,5,1,9,1,1,0,365 -"6188",0,1,0,55,2,1,5,1,9,1,1,0,365 -"6189",0,1,1,51,1,1,5,0,9,1,0,0,365 -"6190",1,1,0,62,2,1,5,0,10,1,0,0,365 -"6191",1,0,0,36,2,1,5,1,2,1,0,0,365 -"6192",0,1,0,64,3,1,5,1,10,1,1,0,365 -"6193",0,1,1,46,3,1,5,1,11,1,0,0,365 -"6194",0,1,1,53,1,1,5,1,13,1,1,0,365 -"6195",0,1,0,49,3,1,5,1,13,1,1,0,365 -"6196",0,1,0,66,1,1,5,1,10,1,1,0,365 -"6197",0,1,0,59,2,1,5,0,10,1,1,0,365 -"6198",0,1,1,42,1,1,5,0,9,1,0,0,365 -"6199",0,1,1,49,1,1,5,0,11,1,0,0,365 -"6200",0,0,0,60,1,1,5,0,12,1,1,0,365 -"6201",1,0,1,45,3,1,5,0,10,1,0,0,365 -"6202",0,1,0,54,3,1,5,1,11,1,0,0,365 -"6203",0,0,0,53,4,1,5,1,12,1,1,0,365 -"6204",0,1,0,53,1,1,5,1,11,1,0,0,365 -"6205",0,1,0,45,1,1,5,1,10,1,1,0,365 -"6206",0,1,1,51,1,1,5,0,9,1,0,0,365 -"6207",1,1,0,54,2,1,4,0,8,3,0,0,366 -"6208",0,0,0,38,2,1,4,0,9,3,0,0,366 -"6209",0,1,0,42,2,1,4,1,9,3,0,0,366 -"6210",0,0,0,68,4,1,4,0,10,3,0,0,366 -"6211",1,0,0,49,4,1,4,0,9,3,1,0,366 -"6212",1,0,1,42,3,1,4,0,11,3,0,0,366 -"6213",0,1,0,37,1,1,4,1,10,3,1,0,366 -"6214",0,1,0,65,3,1,4,0,11,3,1,0,366 -"6215",1,1,1,43,1,1,4,0,10,3,0,0,366 -"6216",0,0,0,39,1,1,4,1,12,3,0,0,366 -"6217",1,1,1,69,5,1,4,0,12,3,1,0,366 -"6218",0,1,0,48,5,1,4,0,7,3,1,0,366 -"6219",0,0,0,45,4,1,4,1,9,3,1,0,366 -"6220",0,1,0,56,3,1,3,1,12,5,1,0,367 -"6221",0,0,0,51,2,1,3,1,9,5,0,0,367 -"6222",0,1,0,42,1,1,3,1,10,5,0,0,367 -"6223",0,1,1,55,1,1,3,1,11,5,0,0,367 -"6224",0,1,1,52,1,1,3,1,4,5,0,0,367 -"6225",0,1,0,58,3,1,3,0,11,5,1,0,367 -"6226",0,1,1,65,2,1,3,1,12,5,1,0,367 -"6227",0,1,1,32,2,1,3,0,9,5,1,0,367 -"6228",0,1,1,40,2,1,3,1,3,5,1,0,367 -"6229",0,1,0,41,3,1,3,1,8,5,0,0,367 -"6230",0,1,0,30,2,1,3,0,7,5,0,0,367 -"6231",0,1,0,48,3,1,3,0,4,5,0,0,367 -"6232",0,1,0,58,2,1,3,0,11,5,1,0,367 -"6233",0,1,0,54,2,1,3,1,8,5,1,0,367 -"6234",1,1,0,35,3,1,3,1,5,5,0,0,367 -"6235",1,1,1,61,5,1,3,0,7,5,1,0,367 -"6236",0,1,0,52,2,1,3,1,6,5,0,0,367 -"6237",0,1,0,54,2,1,4,0,8,4,1,0,368 -"6238",0,1,0,48,2,1,4,1,8,4,1,0,368 -"6239",0,1,0,71,1,1,4,0,9,4,0,0,368 -"6240",0,0,0,39,3,1,4,1,8,4,0,0,368 -"6241",0,1,1,41,2,1,4,1,6,4,0,0,368 -"6242",0,1,0,48,1,1,4,1,9,4,0,0,368 -"6243",1,1,0,55,5,1,4,0,12,4,1,0,368 -"6244",0,0,1,50,1,1,4,0,9,4,0,0,368 -"6245",0,1,0,64,2,1,4,0,10,4,1,0,368 -"6246",0,1,0,60,2,1,4,0,8,4,0,0,368 -"6247",0,1,1,42,2,1,4,1,8,4,0,0,368 -"6248",0,1,1,45,1,1,4,0,8,4,0,0,368 -"6249",0,1,0,44,1,1,4,1,10,4,0,0,368 -"6250",0,1,1,61,5,1,4,0,9,4,0,0,368 -"6251",0,1,0,47,2,1,4,0,9,4,0,0,368 -"6252",1,1,0,38,2,1,4,0,4,4,0,0,368 -"6253",0,0,0,51,2,1,4,0,9,4,0,0,368 -"6254",1,1,1,34,1,1,4,1,3,4,1,0,368 -"6255",0,1,0,53,1,1,4,1,9,4,1,0,368 -"6256",0,0,0,45,5,1,2,0,7,7,0,0,369 -"6257",0,1,0,33,2,1,2,1,6,7,0,0,369 -"6258",0,1,0,30,3,1,2,0,3,7,0,0,369 -"6259",0,1,1,49,2,1,2,1,6,7,0,0,369 -"6260",0,1,0,44,1,1,2,0,5,7,0,0,369 -"6261",1,1,1,43,2,1,2,0,10,7,0,0,369 -"6262",0,1,0,43,2,1,2,0,11,7,1,0,369 -"6263",0,1,0,42,3,1,2,1,4,7,0,0,369 -"6264",0,1,0,46,1,1,2,1,6,7,1,0,369 -"6265",0,1,0,32,2,1,2,1,6,7,0,0,369 -"6266",0,1,0,43,2,1,2,0,3,7,0,0,369 -"6267",0,1,1,38,2,1,2,1,4,7,0,0,369 -"6268",1,1,1,42,2,1,2,1,4,7,1,0,369 -"6269",0,0,0,35,2,1,2,0,7,7,0,0,369 -"6270",0,0,0,58,1,1,5,0,9,2,0,0,370 -"6271",0,1,1,47,1,1,5,1,11,2,1,0,370 -"6272",0,1,0,57,2,1,5,0,4,2,0,0,370 -"6273",0,1,0,32,1,1,5,0,10,2,1,0,370 -"6274",0,1,1,53,1,1,5,0,3,2,0,0,370 -"6275",0,0,0,62,2,1,5,0,6,2,0,0,370 -"6276",0,1,1,46,2,1,5,1,10,2,0,0,370 -"6277",0,0,0,60,1,1,5,0,8,2,0,0,370 -"6278",1,0,1,35,3,1,5,0,9,2,0,0,370 -"6279",0,1,0,72,2,1,5,0,10,2,0,0,370 -"6280",0,0,1,40,1,1,5,1,10,2,0,0,370 -"6281",1,1,0,56,2,1,5,0,10,2,0,0,370 -"6282",0,1,0,57,1,1,5,0,10,2,1,0,370 -"6283",0,1,0,51,2,1,5,1,11,2,0,0,370 -"6284",0,0,1,53,2,1,5,0,12,2,1,0,370 -"6285",0,1,0,58,2,1,5,1,11,2,0,0,370 -"6286",0,1,1,72,2,1,5,0,12,2,1,0,370 -"6287",0,1,1,74,3,1,4,1,12,4,1,0,371 -"6288",0,1,0,48,1,1,4,0,11,4,1,0,371 -"6289",0,0,0,49,2,1,4,0,2,4,0,0,371 -"6290",0,0,1,54,2,1,4,0,10,4,0,0,371 -"6291",0,1,1,47,4,1,4,0,9,4,0,0,371 -"6292",0,1,0,66,3,1,4,0,11,4,1,0,371 -"6293",1,1,1,59,1,1,4,1,11,4,1,0,371 -"6294",0,1,1,45,1,1,4,1,9,4,0,0,371 -"6295",0,1,0,54,5,1,4,1,9,4,0,0,371 -"6296",0,1,0,43,2,1,4,0,10,4,1,0,371 -"6297",0,1,0,62,3,1,4,1,13,4,0,0,371 -"6298",1,1,0,40,1,1,4,1,11,4,1,0,371 -"6299",0,0,1,65,3,1,4,0,11,4,1,0,371 -"6300",0,1,1,44,1,1,4,1,12,4,1,0,371 -"6301",0,1,1,60,2,1,4,1,11,4,1,0,371 -"6302",0,1,1,48,2,1,4,1,9,4,0,0,371 -"6303",0,1,1,61,5,1,4,1,8,4,1,0,371 -"6304",0,1,1,46,3,1,4,1,10,4,1,0,371 -"6305",0,0,1,30,4,1,4,0,12,4,1,0,371 -"6306",1,1,1,56,3,1,3,0,5,4,1,0,372 -"6307",0,1,1,53,4,1,3,0,10,4,0,0,372 -"6308",0,1,1,56,5,1,3,0,8,4,0,0,372 -"6309",0,1,0,57,2,1,3,1,11,4,0,0,372 -"6310",0,1,1,46,2,1,3,1,11,4,0,0,372 -"6311",0,1,1,41,2,1,3,1,8,4,1,0,372 -"6312",0,1,1,51,3,1,3,1,8,4,1,0,372 -"6313",0,1,1,68,3,1,3,0,8,4,1,0,372 -"6314",0,0,1,60,1,1,3,0,8,4,1,0,372 -"6315",0,1,0,69,3,1,3,0,11,4,1,0,372 -"6316",1,0,1,41,3,1,3,0,8,4,1,0,372 -"6317",0,1,1,47,5,1,3,1,10,4,1,0,372 -"6318",0,1,1,56,3,1,3,1,8,4,0,0,372 -"6319",0,1,1,71,1,1,3,0,11,4,1,0,372 -"6320",0,1,1,61,2,1,3,0,11,4,1,0,372 -"6321",0,1,1,69,1,1,3,1,9,4,1,0,372 -"6322",0,1,1,47,3,1,3,1,11,4,0,0,372 -"6323",1,1,1,31,3,1,3,1,4,4,0,0,372 -"6324",0,1,0,50,1,1,3,1,11,5,0,0,373 -"6325",1,0,1,45,5,1,3,0,2,5,0,0,373 -"6326",0,1,1,52,2,1,3,1,10,5,1,0,373 -"6327",0,1,0,56,1,1,3,1,10,5,1,0,373 -"6328",0,1,0,44,5,1,3,0,8,5,0,0,373 -"6329",1,0,1,37,4,1,3,1,10,5,0,0,373 -"6330",0,1,0,53,2,1,3,1,7,5,0,0,373 -"6331",0,1,1,57,1,1,3,0,9,5,0,0,373 -"6332",0,1,1,41,4,1,3,1,6,5,0,0,373 -"6333",0,1,1,62,2,1,3,0,10,5,1,0,373 -"6334",0,1,0,53,2,1,3,0,8,5,0,0,373 -"6335",1,1,0,35,5,1,3,1,12,5,1,0,373 -"6336",0,1,0,52,1,1,3,0,9,5,0,0,373 -"6337",1,1,0,41,5,1,3,0,9,5,0,0,373 -"6338",0,0,0,44,4,1,3,0,7,5,0,0,373 -"6339",0,1,0,37,1,1,3,0,9,5,0,0,373 -"6340",0,0,0,44,5,1,3,1,8,5,0,0,373 -"6341",0,1,0,51,1,1,3,1,3,5,0,0,373 -"6342",0,0,0,44,2,1,3,1,8,5,0,0,373 -"6343",0,1,1,45,1,1,3,1,5,5,0,0,373 -"6344",0,0,1,41,5,1,4,0,2,4,1,0,374 -"6345",1,1,0,48,2,1,4,0,2,4,0,0,374 -"6346",0,1,0,46,3,1,4,0,10,4,1,0,374 -"6347",0,1,1,47,2,1,4,1,11,4,1,0,374 -"6348",1,1,0,49,3,1,4,1,5,4,0,0,374 -"6349",0,1,1,50,2,1,4,0,10,4,0,0,374 -"6350",0,1,0,43,2,1,4,0,8,4,0,0,374 -"6351",0,1,1,53,4,1,4,1,11,4,0,0,374 -"6352",0,1,0,38,2,1,4,1,7,4,0,0,374 -"6353",0,1,1,50,3,1,4,1,12,4,1,0,374 -"6354",0,1,1,54,1,1,4,1,10,4,0,0,374 -"6355",0,1,1,56,2,1,4,1,2,4,0,0,374 -"6356",0,1,0,41,2,1,4,1,7,4,0,0,374 -"6357",0,1,0,56,3,1,4,1,8,4,0,0,374 -"6358",0,1,0,69,1,1,4,0,5,4,0,0,374 -"6359",0,1,0,51,3,1,4,1,10,4,1,0,374 -"6360",0,1,0,42,3,1,4,0,9,4,0,0,374 -"6361",0,1,1,47,1,1,4,1,7,4,0,0,374 -"6362",0,0,1,43,5,1,4,1,9,4,0,0,374 -"6363",0,1,0,49,3,1,4,1,10,4,0,0,374 -"6364",0,1,1,52,3,1,4,1,6,4,0,0,374 -"6365",1,1,1,38,3,1,4,0,9,4,0,0,374 -"6366",0,1,0,60,1,1,5,0,8,1,0,1,375 -"6367",0,1,1,51,2,1,5,1,12,1,1,1,375 -"6368",0,1,1,54,2,1,5,1,12,1,1,1,375 -"6369",0,1,1,60,2,1,5,0,9,1,1,1,375 -"6370",0,1,0,59,2,1,5,0,11,1,1,1,375 -"6371",0,1,0,56,3,1,5,1,12,1,1,1,375 -"6372",0,1,1,53,1,1,5,0,12,1,0,1,375 -"6373",0,1,0,50,2,1,5,0,8,1,0,1,375 -"6374",0,0,1,58,3,1,5,0,10,1,1,1,375 -"6375",0,1,1,54,1,1,5,1,11,1,1,1,375 -"6376",0,1,1,52,2,1,5,1,12,1,1,1,375 -"6377",1,0,0,62,2,1,5,0,8,1,1,1,375 -"6378",0,1,1,55,1,1,5,0,8,1,1,1,375 -"6379",0,1,0,63,1,1,5,1,10,1,1,1,375 -"6380",0,1,0,55,3,1,5,0,12,1,1,1,375 -"6381",0,1,0,62,1,1,5,0,11,1,1,1,375 -"6382",0,1,1,49,2,1,5,0,10,1,0,1,375 -"6383",0,1,1,57,2,1,5,0,12,1,0,1,375 -"6384",0,1,0,53,2,1,5,0,16,1,1,1,375 -"6385",0,1,0,64,1,1,5,1,10,1,0,1,375 -"6386",0,1,0,57,1,1,5,0,8,1,1,1,375 -"6387",0,1,0,69,2,1,5,0,13,1,1,1,375 -"6388",0,1,0,48,2,1,5,1,12,1,1,1,375 -"6389",0,1,0,55,2,1,5,1,12,1,1,1,375 -"6390",0,1,0,47,2,1,5,0,11,1,1,1,375 -"6391",0,1,1,64,2,1,4,1,12,4,1,0,376 -"6392",0,1,0,58,1,1,4,0,11,4,1,0,376 -"6393",0,1,0,61,4,1,4,0,9,4,0,0,376 -"6394",0,1,1,51,3,1,4,1,10,4,1,0,376 -"6395",0,1,0,52,2,1,4,0,4,4,1,0,376 -"6396",0,1,1,54,2,1,4,1,11,4,0,0,376 -"6397",0,1,0,64,1,1,4,1,9,4,0,0,376 -"6398",0,0,1,55,1,1,4,0,11,4,0,0,376 -"6399",0,0,1,61,1,1,4,0,9,4,1,0,376 -"6400",1,1,0,72,1,1,4,0,12,4,1,0,376 -"6401",0,1,1,55,1,1,4,0,12,4,1,0,376 -"6402",0,1,0,49,1,1,3,0,10,4,0,0,377 -"6403",0,1,0,59,2,1,3,0,12,4,1,0,377 -"6404",1,1,0,60,1,1,3,1,9,4,1,0,377 -"6405",0,1,1,41,2,1,3,1,10,4,1,0,377 -"6406",0,1,0,50,2,1,3,0,9,4,0,0,377 -"6407",0,1,0,44,2,1,3,0,10,4,0,0,377 -"6408",0,1,0,45,1,1,3,0,10,4,1,0,377 -"6409",0,0,0,49,2,1,3,1,10,4,0,0,377 -"6410",0,1,0,42,2,1,3,1,12,4,1,0,377 -"6411",0,1,0,53,2,1,3,1,9,4,0,0,377 -"6412",1,1,1,48,2,1,3,0,9,4,0,0,377 -"6413",0,1,0,59,2,1,3,1,11,4,0,0,377 -"6414",0,1,0,42,2,1,3,0,9,4,1,0,377 -"6415",1,1,1,48,2,1,3,0,10,4,1,0,377 -"6416",0,1,1,64,3,1,5,0,10,1,1,0,378 -"6417",0,1,0,60,1,1,5,0,12,1,1,0,378 -"6418",0,1,0,71,2,1,5,0,12,1,1,0,378 -"6419",0,1,1,58,2,1,5,1,10,1,1,0,378 -"6420",0,1,0,62,3,1,5,1,8,1,1,0,378 -"6421",0,1,1,75,2,1,5,0,15,1,1,0,378 -"6422",0,1,0,61,2,1,5,1,10,1,1,0,378 -"6423",0,1,0,74,1,1,5,0,9,1,1,0,378 -"6424",0,1,0,56,2,1,5,1,12,1,1,0,378 -"6425",0,1,1,46,2,1,5,0,12,1,1,0,378 -"6426",0,1,1,60,1,1,5,1,12,1,1,0,378 -"6427",0,0,1,67,5,1,5,0,13,1,1,0,378 -"6428",0,0,0,54,2,1,5,0,12,1,1,0,378 -"6429",0,1,0,75,3,1,5,0,12,1,1,0,378 -"6430",0,1,0,55,2,1,5,1,11,1,1,0,378 -"6431",0,1,0,51,1,1,5,0,10,5,0,0,379 -"6432",0,1,0,41,2,1,5,0,8,5,0,0,379 -"6433",0,1,1,53,2,1,5,1,7,5,1,0,379 -"6434",0,1,1,48,5,1,5,1,11,5,1,0,379 -"6435",0,1,0,39,1,1,5,0,3,5,0,0,379 -"6436",1,1,0,41,2,1,5,0,5,5,0,0,379 -"6437",0,1,0,47,1,1,5,1,11,5,1,0,379 -"6438",0,1,1,37,2,1,5,0,10,5,0,0,379 -"6439",0,1,0,53,3,1,5,1,10,5,1,0,379 -"6440",1,0,0,50,1,1,5,0,4,5,0,0,379 -"6441",0,1,1,53,1,1,5,1,13,5,1,0,379 -"6442",0,1,1,53,2,1,5,0,10,5,0,0,379 -"6443",0,1,0,33,1,1,5,1,7,5,0,0,379 -"6444",0,1,0,53,1,1,5,0,6,5,0,0,379 -"6445",0,1,1,54,5,1,5,1,3,5,0,0,379 -"6446",0,1,0,46,2,1,5,1,10,5,0,0,379 -"6447",0,1,0,66,2,1,5,0,10,5,0,0,379 -"6448",0,1,0,50,1,1,5,1,9,5,1,0,380 -"6449",0,1,1,37,2,1,5,1,10,5,1,0,380 -"6450",0,1,0,64,1,1,5,1,13,5,1,0,380 -"6451",1,1,0,45,3,1,5,0,7,5,0,0,380 -"6452",0,1,0,42,1,1,5,1,3,5,1,0,380 -"6453",0,1,0,29,2,1,5,1,7,5,0,0,380 -"6454",0,1,0,63,1,1,5,0,1,5,1,0,380 -"6455",0,1,0,60,2,1,5,0,8,5,0,0,380 -"6456",1,1,0,48,3,1,5,0,11,5,0,0,380 -"6457",0,1,0,74,2,1,5,0,8,5,0,0,380 -"6458",0,1,0,47,1,1,5,0,10,5,1,0,380 -"6459",0,1,0,44,3,1,5,0,3,5,0,0,380 -"6460",0,0,1,46,5,1,5,1,13,5,1,0,380 -"6461",0,1,0,48,3,1,5,0,5,5,1,0,380 -"6462",0,0,0,39,3,1,5,0,3,5,0,0,380 -"6463",0,1,0,43,5,1,5,1,4,5,0,0,380 -"6464",1,1,0,57,2,0,3,1,10,1,1,0,381 -"6465",0,1,0,38,1,0,3,0,12,1,1,0,381 -"6466",1,0,0,47,5,0,3,1,10,1,1,0,381 -"6467",0,1,1,59,2,0,3,0,12,1,1,0,381 -"6468",0,1,0,53,3,0,3,1,9,1,1,0,381 -"6469",0,1,0,52,3,0,3,0,8,1,1,0,381 -"6470",0,1,0,46,1,1,5,0,10,1,0,0,382 -"6471",0,1,1,61,2,1,5,1,10,1,1,0,382 -"6472",0,1,0,70,2,1,5,0,11,1,1,0,382 -"6473",0,1,0,54,2,1,5,1,12,1,1,0,382 -"6474",1,1,1,61,5,1,5,1,13,1,1,0,382 -"6475",0,1,0,64,3,1,5,0,11,1,1,0,382 -"6476",0,1,0,72,1,1,5,0,12,1,1,0,382 -"6477",0,1,1,58,2,1,5,1,12,1,1,0,382 -"6478",0,1,0,68,2,1,5,0,13,1,1,0,382 -"6479",0,1,0,73,1,1,5,0,13,1,1,0,382 -"6480",0,1,0,51,2,1,5,0,13,1,1,0,382 -"6481",0,0,0,61,3,1,5,1,9,1,0,0,382 -"6482",0,1,0,58,1,1,5,0,12,1,1,0,382 -"6483",0,1,0,66,1,1,5,0,12,1,1,0,382 -"6484",0,1,0,61,2,1,5,0,8,1,1,0,382 -"6485",0,1,0,60,1,1,5,1,13,1,1,0,382 -"6486",0,1,0,72,1,1,5,0,13,1,1,0,382 -"6487",0,1,0,50,2,1,5,1,9,1,1,0,382 -"6488",0,1,0,69,3,1,5,0,12,1,1,0,382 -"6489",1,0,0,30,1,1,4,0,11,6,1,0,383 -"6490",0,1,1,43,2,1,4,0,9,6,0,0,383 -"6491",0,1,0,53,2,1,4,0,7,6,0,0,383 -"6492",0,1,0,53,1,1,4,1,7,6,0,0,383 -"6493",1,1,0,36,2,1,4,1,2,6,0,0,383 -"6494",0,1,0,55,1,1,4,0,8,6,0,0,383 -"6495",0,0,1,42,1,1,4,1,10,6,0,0,383 -"6496",1,1,1,36,5,1,4,1,8,6,0,0,383 -"6497",0,1,0,50,2,1,4,1,8,6,0,0,383 -"6498",0,1,1,45,2,1,4,1,9,6,0,0,383 -"6499",1,0,0,44,3,1,4,0,8,6,0,0,383 -"6500",0,1,0,46,2,1,4,0,9,6,0,0,383 -"6501",0,1,0,43,1,1,4,1,6,6,1,0,383 -"6502",0,0,1,48,2,1,4,0,9,3,1,0,384 -"6503",0,1,1,45,2,1,4,1,6,3,0,0,384 -"6504",0,1,0,61,2,1,4,0,5,3,0,0,384 -"6505",0,0,1,62,3,1,4,0,10,3,0,0,384 -"6506",0,1,0,48,2,1,4,1,1,3,0,0,384 -"6507",0,1,0,42,2,1,4,1,7,3,0,0,384 -"6508",0,1,0,65,2,1,4,1,12,3,1,0,384 -"6509",0,1,0,66,4,1,4,1,10,3,0,0,384 -"6510",0,1,1,47,1,1,4,1,13,3,1,0,384 -"6511",0,1,0,61,2,1,4,1,10,3,0,0,384 -"6512",0,1,1,47,3,1,4,1,11,3,1,0,384 -"6513",0,1,0,75,3,1,4,0,9,3,1,0,384 -"6514",0,1,1,46,3,1,4,1,8,3,0,0,384 -"6515",0,1,1,47,2,1,4,0,9,3,0,0,384 -"6516",0,1,1,41,3,1,5,0,9,1,0,0,385 -"6517",0,1,1,62,3,1,5,0,12,1,1,0,385 -"6518",0,1,0,42,5,1,5,1,11,1,1,0,385 -"6519",0,1,0,59,2,1,5,0,10,1,0,0,385 -"6520",0,0,0,58,2,1,5,0,12,1,1,0,385 -"6521",0,1,1,50,2,1,5,1,12,1,1,0,385 -"6522",0,1,0,61,2,1,5,0,1,1,0,0,385 -"6523",0,1,0,62,1,1,5,0,11,1,1,0,385 -"6524",0,1,1,69,2,1,5,0,9,1,1,0,385 -"6525",0,1,0,57,2,1,5,1,8,1,0,0,385 -"6526",0,1,1,61,3,1,5,1,12,1,1,0,385 -"6527",0,1,1,58,1,1,5,0,11,1,1,0,385 -"6528",1,1,0,69,3,1,5,0,12,1,1,0,385 -"6529",0,1,0,65,1,1,5,1,12,1,1,0,385 -"6530",0,1,0,60,3,1,5,0,11,1,1,0,385 -"6531",0,1,1,64,2,1,4,1,10,1,1,1,386 -"6532",0,1,1,69,3,1,4,0,13,1,1,1,386 -"6533",0,1,0,63,2,1,4,1,9,1,0,1,386 -"6534",0,1,0,72,1,1,4,0,11,1,1,1,386 -"6535",0,1,1,67,2,1,4,1,13,1,1,1,386 -"6536",0,1,1,64,1,1,4,1,9,1,0,1,386 -"6537",0,1,0,48,2,1,4,1,12,1,1,1,386 -"6538",0,1,1,68,2,1,4,1,12,1,1,1,386 -"6539",0,1,1,54,3,1,4,1,11,1,0,1,386 -"6540",0,1,0,52,2,1,4,1,10,1,0,1,386 -"6541",0,1,0,63,2,1,4,1,11,1,1,1,386 -"6542",0,1,0,57,2,1,4,1,9,1,1,1,386 -"6543",0,0,1,54,2,1,4,0,10,1,1,1,386 -"6544",0,1,0,59,2,1,4,0,10,1,0,1,386 -"6545",0,0,0,55,2,1,4,1,10,1,1,1,386 -"6546",0,0,1,59,3,1,4,0,11,1,0,1,386 -"6547",0,1,0,64,1,1,4,0,9,1,1,1,386 -"6548",0,1,0,49,2,1,4,1,7,7,0,0,387 -"6549",0,1,0,50,2,1,4,1,5,7,0,0,387 -"6550",0,1,0,40,3,1,4,0,9,7,0,0,387 -"6551",1,0,0,33,3,1,4,0,6,7,1,0,387 -"6552",0,1,0,57,5,1,4,1,10,7,1,0,387 -"6553",0,1,0,63,2,1,4,1,9,7,1,0,387 -"6554",0,1,0,50,2,1,4,1,8,7,1,0,387 -"6555",0,1,0,56,3,1,4,1,10,7,0,0,387 -"6556",0,1,0,59,1,1,4,1,5,7,0,0,387 -"6557",0,1,0,51,3,1,4,1,9,7,1,0,387 -"6558",0,1,0,55,3,1,4,0,5,7,0,0,387 -"6559",0,1,0,48,3,1,4,1,9,7,0,0,387 -"6560",0,1,0,59,2,1,4,1,11,7,1,0,387 -"6561",0,1,0,53,3,1,4,1,11,7,0,0,387 -"6562",0,1,0,56,3,1,4,0,6,7,0,0,387 -"6563",0,1,0,50,2,1,4,1,11,7,0,0,387 -"6564",0,1,1,59,2,1,4,1,11,7,1,0,387 -"6565",0,1,0,40,3,1,4,1,7,7,0,0,387 -"6566",0,1,0,43,4,1,4,0,7,7,0,0,387 -"6567",0,1,1,38,2,1,4,1,8,7,0,0,387 -"6568",0,1,0,55,2,1,4,1,8,7,1,0,387 -"6569",0,1,0,30,1,1,4,1,6,7,0,0,387 -"6570",0,1,1,48,2,1,4,1,6,7,0,0,387 -"6571",0,1,1,55,2,1,4,1,6,7,0,0,387 -"6572",0,1,0,46,2,1,3,1,7,7,0,0,388 -"6573",0,1,0,27,3,1,3,1,6,7,0,0,388 -"6574",1,1,0,43,1,1,3,0,6,7,0,0,388 -"6575",0,1,0,54,1,1,3,0,11,7,0,0,388 -"6576",0,1,1,40,4,1,3,1,5,7,0,0,388 -"6577",0,1,0,43,3,1,3,0,7,7,0,0,388 -"6578",1,1,0,33,3,1,3,1,6,7,1,0,388 -"6579",0,1,0,49,3,1,3,1,5,7,0,0,388 -"6580",0,1,1,51,3,1,3,0,9,7,0,0,388 -"6581",0,1,1,34,3,1,3,0,4,7,1,0,388 -"6582",1,1,1,41,2,1,3,1,3,7,0,0,388 -"6583",0,1,1,43,2,1,3,0,7,7,0,0,388 -"6584",1,0,1,56,5,1,4,0,10,4,0,0,389 -"6585",0,1,1,45,2,1,4,0,11,4,1,0,389 -"6586",0,1,0,66,4,1,4,0,5,4,0,0,389 -"6587",0,1,0,70,1,1,4,1,6,4,1,0,389 -"6588",1,0,0,37,4,1,4,0,6,4,0,0,389 -"6589",0,1,1,48,2,1,4,0,9,4,0,0,389 -"6590",0,1,0,61,3,1,4,1,12,4,1,0,389 -"6591",1,1,0,51,2,1,4,0,5,4,1,0,389 -"6592",1,0,0,27,2,1,4,0,13,4,0,0,389 -"6593",0,1,0,68,1,1,4,1,10,4,1,0,389 -"6594",0,0,0,70,2,1,4,0,8,4,1,0,389 -"6595",0,1,0,57,2,1,4,1,10,4,0,0,389 -"6596",0,1,0,60,2,1,4,0,9,4,0,0,389 -"6597",0,1,1,55,2,1,4,0,9,4,0,0,389 -"6598",0,1,1,67,1,1,4,1,11,4,1,0,389 -"6599",1,0,0,58,3,1,4,0,5,4,1,0,389 -"6600",1,1,1,40,4,1,4,0,7,4,0,0,389 -"6601",0,1,0,44,1,1,4,1,10,4,0,0,389 -"6602",0,1,1,36,1,1,4,1,10,4,1,0,389 -"6603",0,1,0,71,1,1,4,0,9,4,1,0,389 -"6604",0,0,0,47,3,1,4,0,11,4,1,0,389 -"6605",0,1,1,71,2,1,4,1,10,4,1,0,389 -"6606",0,1,0,47,5,1,4,1,8,6,0,0,390 -"6607",1,0,0,77,1,1,4,0,12,6,1,0,390 -"6608",1,1,0,54,3,1,4,1,8,6,1,0,390 -"6609",0,1,0,55,4,1,4,0,8,6,0,0,390 -"6610",0,1,0,47,2,1,4,1,10,6,0,0,390 -"6611",0,1,1,59,2,1,4,1,9,6,0,0,390 -"6612",0,1,0,57,4,1,4,1,12,6,1,0,390 -"6613",0,1,0,66,2,1,4,1,8,6,1,0,390 -"6614",0,1,1,51,5,1,4,1,8,6,1,0,390 -"6615",0,1,0,59,1,1,4,0,8,6,1,0,390 -"6616",0,1,0,47,5,1,4,0,6,6,0,0,390 -"6617",1,1,0,63,2,1,4,0,10,6,1,0,390 -"6618",0,1,0,52,2,1,4,0,11,6,1,0,390 -"6619",1,1,0,53,2,1,4,0,9,6,1,0,390 -"6620",0,1,0,54,2,1,4,0,6,6,0,0,390 -"6621",0,1,0,46,1,1,4,1,4,6,0,0,390 -"6622",0,1,0,62,2,1,4,1,9,6,1,0,390 -"6623",1,1,1,41,2,1,4,0,5,6,1,0,390 -"6624",0,1,0,51,5,1,4,0,7,6,0,0,390 -"6625",0,1,0,64,1,1,5,0,12,4,1,0,391 -"6626",0,1,0,36,1,1,5,1,10,4,0,0,391 -"6627",0,1,0,52,2,1,5,1,4,4,0,0,391 -"6628",0,1,0,55,2,1,5,0,9,4,0,0,391 -"6629",0,1,0,62,2,1,5,0,10,4,0,0,391 -"6630",0,1,0,58,1,1,5,0,10,4,1,0,391 -"6631",0,1,0,64,3,1,5,0,12,4,1,0,391 -"6632",1,1,1,55,2,1,5,0,9,4,0,0,391 -"6633",0,1,0,51,2,1,5,0,10,4,0,0,391 -"6634",0,1,0,56,3,1,5,1,12,4,0,0,391 -"6635",1,1,1,41,3,1,5,0,10,4,0,0,391 -"6636",0,1,0,36,2,1,5,1,8,4,0,0,391 -"6637",0,1,0,50,2,1,5,0,10,4,0,0,391 -"6638",0,1,1,52,1,1,5,1,7,4,1,0,391 -"6639",0,1,0,60,1,1,5,1,3,4,0,0,391 -"6640",0,1,1,52,1,1,5,1,10,4,0,0,391 -"6641",0,1,0,42,2,1,3,0,2,6,0,0,392 -"6642",0,1,0,45,3,1,3,0,8,6,0,0,392 -"6643",0,1,0,47,3,1,3,0,6,6,0,0,392 -"6644",0,1,0,46,2,1,3,0,10,6,0,0,392 -"6645",0,1,0,42,1,1,3,1,9,6,0,0,392 -"6646",0,1,1,47,2,1,3,1,12,6,1,0,392 -"6647",1,0,1,32,5,1,3,0,11,6,1,0,392 -"6648",1,1,0,38,3,1,3,0,2,6,0,0,392 -"6649",0,1,1,62,1,1,3,1,5,6,0,0,392 -"6650",0,1,0,44,1,1,3,1,10,6,0,0,392 -"6651",0,0,0,47,1,1,3,1,9,6,0,0,392 -"6652",0,1,0,48,3,1,3,1,3,6,0,0,392 -"6653",0,1,1,46,2,1,3,0,8,6,0,0,392 -"6654",0,1,0,32,2,1,3,1,7,6,0,0,392 -"6655",0,1,0,54,2,1,3,0,10,6,1,0,392 -"6656",0,1,0,52,4,1,3,0,9,6,0,0,392 -"6657",0,1,0,48,2,1,3,1,8,6,0,0,392 -"6658",0,1,0,59,2,1,4,0,12,1,1,0,393 -"6659",0,1,0,68,3,1,4,0,13,1,1,0,393 -"6660",0,1,0,62,3,1,4,1,12,1,1,0,393 -"6661",0,1,1,58,2,1,4,1,8,1,0,0,393 -"6662",1,1,0,61,3,1,4,0,8,1,1,0,393 -"6663",0,0,0,57,2,1,4,0,13,1,0,0,393 -"6664",0,1,0,59,1,1,4,0,12,1,1,0,393 -"6665",0,1,1,53,2,1,4,1,11,1,1,0,393 -"6666",0,1,1,63,1,1,4,0,12,1,0,0,393 -"6667",0,1,0,78,1,1,4,0,13,1,1,0,393 -"6668",0,1,0,57,4,1,4,0,10,1,1,0,393 -"6669",0,1,0,62,1,1,4,1,11,1,1,0,393 -"6670",0,1,1,42,1,1,4,0,12,1,1,0,393 -"6671",0,0,0,59,2,1,4,0,11,1,1,0,393 -"6672",0,1,1,63,1,1,4,1,10,1,1,0,393 -"6673",0,1,0,64,2,1,4,0,13,1,1,0,393 -"6674",0,1,1,56,2,1,5,0,8,1,0,0,394 -"6675",0,0,0,42,2,1,5,0,9,1,0,0,394 -"6676",0,1,1,47,2,1,5,0,8,1,0,0,394 -"6677",0,1,0,41,2,1,5,1,9,1,0,0,394 -"6678",0,1,0,35,3,1,5,1,11,1,0,0,394 -"6679",0,1,0,49,3,1,5,0,10,1,0,0,394 -"6680",0,1,0,41,1,1,5,0,9,1,1,0,394 -"6681",0,1,1,52,2,1,3,1,13,1,1,0,395 -"6682",0,1,0,60,3,1,3,1,10,1,1,0,395 -"6683",1,1,0,57,1,1,3,0,13,1,1,0,395 -"6684",0,0,0,62,3,1,3,0,10,1,0,0,395 -"6685",0,1,0,53,2,1,3,0,6,1,0,0,395 -"6686",0,1,0,53,1,1,3,0,12,1,0,0,395 -"6687",0,1,0,37,1,1,3,1,10,1,0,0,395 -"6688",0,1,0,57,5,1,3,1,12,1,1,0,395 -"6689",0,1,0,46,2,1,3,0,11,1,1,0,395 -"6690",0,1,0,60,2,1,3,1,12,1,0,0,395 -"6691",0,1,0,52,2,1,3,0,13,1,1,0,395 -"6692",1,1,1,49,3,1,3,1,12,1,1,0,395 -"6693",0,1,0,58,4,1,3,0,10,1,1,0,395 -"6694",0,1,0,58,3,1,3,0,8,1,0,0,395 -"6695",0,1,0,54,4,1,3,1,12,1,1,0,395 -"6696",0,1,0,57,2,1,3,1,10,1,1,0,395 -"6697",0,1,0,48,2,1,3,1,8,1,0,0,395 -"6698",0,1,0,59,3,1,3,1,7,1,0,0,395 -"6699",0,1,1,34,3,1,3,0,8,6,1,0,396 -"6700",0,1,0,54,1,1,3,0,8,6,0,0,396 -"6701",0,1,0,51,3,1,3,0,9,6,0,0,396 -"6702",1,0,0,50,5,1,3,1,9,6,1,0,396 -"6703",0,1,0,46,1,1,3,1,10,6,0,0,396 -"6704",0,1,0,68,1,1,3,0,11,6,1,0,396 -"6705",1,1,0,29,1,1,3,0,7,6,0,0,396 -"6706",0,1,1,37,2,1,3,1,10,6,0,0,396 -"6707",0,1,0,47,2,1,3,0,4,6,0,0,396 -"6708",1,0,0,41,5,1,3,1,8,6,0,0,396 -"6709",0,1,1,47,2,1,3,1,7,6,0,0,396 -"6710",1,1,0,46,2,1,3,0,9,6,1,0,396 -"6711",0,1,0,48,1,1,3,1,9,6,0,0,396 -"6712",0,1,0,46,5,1,3,1,7,6,0,0,396 -"6713",0,1,0,51,2,1,3,0,5,6,0,0,396 -"6714",0,0,1,48,3,1,3,0,4,6,0,0,396 -"6715",0,1,0,51,3,1,4,1,11,2,0,0,397 -"6716",0,1,1,51,2,1,4,0,5,2,0,0,397 -"6717",0,0,1,53,1,1,4,1,11,2,0,0,397 -"6718",0,1,0,23,2,1,4,0,5,2,1,0,397 -"6719",0,0,1,49,5,1,4,0,2,2,0,0,397 -"6720",0,1,1,53,3,1,4,1,10,2,0,0,397 -"6721",0,1,1,53,2,1,4,1,9,2,1,0,397 -"6722",0,1,0,55,2,1,4,0,7,2,0,0,397 -"6723",0,1,1,59,2,1,4,1,8,2,0,0,397 -"6724",0,1,0,60,3,1,4,0,11,2,1,0,397 -"6725",0,1,0,55,1,1,4,1,9,2,0,0,397 -"6726",0,1,0,49,2,1,4,0,11,2,0,0,397 -"6727",0,1,1,51,2,1,4,1,10,2,0,0,397 -"6728",0,1,0,47,2,1,4,1,8,2,0,0,397 -"6729",0,1,0,68,1,1,4,0,9,2,1,0,397 -"6730",0,1,1,52,2,1,4,1,9,2,0,0,397 -"6731",1,1,1,55,1,1,4,1,9,2,1,0,397 -"6732",0,1,0,49,1,1,4,1,10,2,0,0,397 -"6733",1,0,1,50,3,1,4,1,10,2,0,0,397 -"6734",0,1,0,52,1,1,4,1,9,2,0,0,397 -"6735",1,1,1,46,3,1,4,0,8,2,0,0,397 -"6736",0,1,0,50,3,1,4,1,8,5,1,0,398 -"6737",0,1,0,60,1,1,4,0,9,5,1,0,398 -"6738",0,1,0,53,3,1,4,1,9,5,0,0,398 -"6739",0,1,0,48,3,1,4,1,8,5,0,0,398 -"6740",0,1,0,53,2,1,4,1,8,5,0,0,398 -"6741",0,0,1,56,3,1,4,0,9,5,1,0,398 -"6742",0,1,0,37,2,1,4,1,10,5,1,0,398 -"6743",0,1,1,66,3,1,4,0,11,5,1,0,398 -"6744",0,1,0,49,2,1,4,0,9,5,0,0,398 -"6745",0,1,0,58,3,1,4,0,6,5,0,0,398 -"6746",0,1,0,56,2,1,4,1,4,5,0,0,398 -"6747",0,0,0,31,2,1,4,1,6,5,0,0,398 -"6748",0,1,0,37,2,0,4,1,10,1,1,1,399 -"6749",0,1,0,59,2,0,4,0,8,1,0,1,399 -"6750",1,0,1,56,2,0,4,0,10,1,0,1,399 -"6751",1,1,0,43,5,0,4,0,9,1,0,1,399 -"6752",1,0,0,38,3,0,4,0,4,1,0,1,399 -"6753",0,1,0,46,2,0,4,0,12,1,0,1,399 -"6754",1,0,1,36,2,0,4,0,10,1,0,1,399 -"6755",0,1,0,40,2,0,4,0,12,1,0,1,399 -"6756",0,1,0,48,1,0,4,0,6,1,0,1,399 -"6757",0,1,0,51,5,0,4,0,11,1,0,1,399 -"6758",0,1,1,50,2,0,4,0,5,1,0,1,399 -"6759",0,1,0,52,3,0,4,0,5,1,0,1,399 -"6760",0,1,0,53,3,0,4,1,9,1,0,1,399 -"6761",0,1,1,30,3,0,4,0,8,1,0,1,399 -"6762",1,1,0,49,2,0,4,0,3,1,0,1,399 -"6763",0,1,0,53,1,0,4,0,11,1,0,1,399 -"6764",0,1,0,36,1,0,4,0,8,1,1,1,399 -"6765",0,1,0,38,2,0,4,1,10,1,0,1,399 -"6766",0,1,1,55,2,0,4,0,10,1,1,1,399 -"6767",0,1,1,49,3,0,4,0,10,1,0,1,399 -"6768",1,1,1,33,2,0,4,0,6,1,0,1,399 -"6769",0,0,0,55,5,0,4,0,9,1,1,1,399 -"6770",0,1,1,46,3,0,4,0,10,1,0,1,399 -"6771",0,1,0,45,2,1,3,1,10,2,0,0,400 -"6772",0,1,0,75,2,1,3,0,10,2,1,0,400 -"6773",0,1,1,52,3,1,3,1,12,2,0,0,400 -"6774",0,1,1,45,3,1,3,1,8,2,0,0,400 -"6775",0,0,1,43,3,1,3,1,3,2,0,0,400 -"6776",0,1,0,58,1,1,3,1,10,2,1,0,400 -"6777",0,1,0,30,1,1,3,0,9,2,1,0,400 -"6778",0,1,1,61,1,1,3,1,11,2,1,0,400 -"6779",1,1,1,49,1,1,3,0,9,2,0,0,400 -"6780",0,1,0,42,2,1,3,1,5,2,0,0,400 -"6781",1,1,1,61,1,1,3,0,9,2,0,0,400 -"6782",0,1,0,36,1,1,3,1,4,2,0,0,400 -"6783",0,1,1,61,3,1,3,0,11,2,0,0,400 -"6784",0,1,1,36,3,1,3,1,8,2,0,0,400 -"6785",0,1,1,50,3,1,5,1,10,3,1,0,401 -"6786",0,0,0,53,3,1,5,1,10,3,0,0,401 -"6787",0,1,0,63,1,1,5,1,11,3,0,0,401 -"6788",0,1,1,56,1,1,5,1,12,3,0,0,401 -"6789",0,1,1,55,3,1,5,1,6,3,0,0,401 -"6790",0,1,0,59,3,1,5,1,12,3,1,0,401 -"6791",0,1,1,59,2,1,5,0,11,3,0,0,401 -"6792",0,1,0,58,2,1,5,0,9,3,0,0,401 -"6793",0,1,1,53,3,1,5,0,10,3,0,0,401 -"6794",0,1,1,58,1,1,5,0,11,3,0,0,401 -"6795",0,1,0,57,1,1,5,0,10,3,0,0,401 -"6796",1,1,0,45,5,1,5,1,7,3,0,0,401 -"6797",0,1,1,48,1,1,5,1,10,3,0,0,401 -"6798",0,1,1,67,2,1,5,1,12,3,1,0,401 -"6799",0,1,1,62,1,1,4,1,12,3,1,0,402 -"6800",1,1,0,58,5,1,4,0,12,3,1,0,402 -"6801",0,1,1,52,2,1,4,1,13,3,1,0,402 -"6802",1,0,0,45,1,1,4,1,11,3,1,0,402 -"6803",0,1,0,49,1,1,4,1,11,3,1,0,402 -"6804",0,1,0,57,2,1,4,0,13,3,1,0,402 -"6805",0,1,0,57,2,1,4,1,12,3,1,0,402 -"6806",0,0,0,35,3,1,5,1,8,6,0,0,403 -"6807",0,1,0,38,2,1,5,0,9,6,0,0,403 -"6808",0,0,0,43,5,1,5,1,10,6,0,0,403 -"6809",0,1,1,53,4,1,5,1,9,6,0,0,403 -"6810",0,1,1,46,3,1,5,0,10,6,0,0,403 -"6811",0,1,0,51,3,1,5,1,13,6,0,0,403 -"6812",0,0,0,49,3,1,5,0,7,6,0,0,403 -"6813",0,1,0,51,3,1,5,0,8,6,0,0,403 -"6814",0,1,0,63,3,1,5,1,11,6,0,0,403 -"6815",0,1,0,58,2,1,5,0,10,6,0,0,403 -"6816",0,1,0,44,2,1,5,1,10,6,0,0,403 -"6817",0,1,1,48,2,1,5,1,9,6,0,0,403 -"6818",1,1,1,33,4,1,5,0,8,6,0,0,403 -"6819",0,1,1,56,3,1,5,0,10,6,0,0,403 -"6820",1,1,0,55,2,1,5,0,8,6,1,0,403 -"6821",0,1,0,57,1,1,4,0,12,1,1,1,404 -"6822",0,1,0,59,2,1,4,1,11,1,1,1,404 -"6823",0,1,1,68,2,1,4,1,12,1,1,1,404 -"6824",0,0,1,63,3,1,4,1,15,1,1,1,404 -"6825",0,1,1,57,2,1,4,1,13,1,1,1,404 -"6826",0,1,1,52,2,1,4,0,11,1,1,1,404 -"6827",0,1,1,48,5,1,4,1,13,1,1,1,404 -"6828",0,1,0,59,2,1,4,1,10,1,1,1,404 -"6829",0,1,0,46,2,1,4,0,10,1,1,1,404 -"6830",0,1,1,60,3,1,4,0,11,1,1,1,404 -"6831",0,1,0,52,2,1,4,0,13,1,1,1,404 -"6832",0,1,0,66,2,1,4,0,13,1,1,1,404 -"6833",0,1,0,61,2,1,4,0,12,1,1,1,404 -"6834",0,1,0,60,2,1,4,1,12,1,1,1,404 -"6835",0,1,1,71,3,1,4,1,9,1,0,1,404 -"6836",0,1,1,65,2,1,4,0,11,1,1,1,404 -"6837",0,1,0,69,3,0,4,0,13,1,1,1,405 -"6838",0,1,0,68,1,0,4,0,12,1,1,1,405 -"6839",0,1,0,56,3,0,4,0,7,1,1,1,405 -"6840",0,1,0,65,2,0,4,0,11,1,0,1,405 -"6841",0,1,0,62,1,0,4,0,12,1,1,1,405 -"6842",0,1,0,53,1,0,4,0,12,1,1,1,405 -"6843",0,1,0,63,2,0,4,0,13,1,1,1,405 -"6844",0,1,0,51,1,0,4,0,9,1,0,1,405 -"6845",1,1,1,65,1,0,4,0,13,1,1,1,405 -"6846",0,0,0,58,3,0,4,0,12,1,1,1,405 -"6847",0,1,0,56,1,0,4,0,10,1,1,1,405 -"6848",0,1,1,47,1,0,4,0,9,1,1,1,405 -"6849",1,1,0,49,2,0,4,0,12,1,1,1,405 -"6850",0,1,0,68,3,0,4,1,11,1,1,1,405 -"6851",0,1,0,64,1,0,4,0,11,1,1,1,405 -"6852",0,1,1,58,1,0,4,0,8,1,1,1,405 -"6853",0,1,1,66,1,0,4,0,11,1,1,1,405 -"6854",0,0,0,61,1,0,4,0,12,1,1,1,405 -"6855",0,1,0,66,1,0,4,0,12,1,1,1,405 -"6856",0,1,0,57,1,0,4,0,12,1,1,1,405 -"6857",0,1,0,40,1,0,4,0,10,1,0,1,405 -"6858",0,1,0,56,1,0,4,0,12,1,1,1,405 -"6859",0,1,0,60,2,0,4,0,11,1,1,1,405 -"6860",0,1,0,49,1,0,4,0,10,1,1,1,405 -"6861",0,1,0,58,1,0,4,0,12,1,1,1,405 -"6862",0,1,0,63,1,0,4,0,12,1,1,1,405 -"6863",1,0,0,69,1,1,4,0,9,6,1,0,406 -"6864",0,0,1,45,2,1,4,1,9,6,0,0,406 -"6865",0,1,0,39,1,1,4,1,9,6,0,0,406 -"6866",0,1,0,41,2,1,4,1,8,6,0,0,406 -"6867",0,1,0,44,1,1,4,1,9,6,0,0,406 -"6868",0,1,0,24,2,1,4,1,4,6,0,0,406 -"6869",0,1,1,50,2,1,4,1,9,6,1,0,406 -"6870",0,1,0,53,3,1,4,1,8,6,0,0,406 -"6871",0,1,0,48,5,1,4,1,9,6,0,0,406 -"6872",0,1,0,58,1,1,4,0,12,1,1,1,407 -"6873",1,1,0,45,2,1,4,0,12,1,0,1,407 -"6874",0,1,0,58,2,1,4,1,12,1,0,1,407 -"6875",0,1,0,61,3,1,4,0,7,1,0,1,407 -"6876",0,1,1,52,2,1,4,1,5,1,0,1,407 -"6877",0,1,0,52,2,1,4,0,9,1,0,1,407 -"6878",0,1,0,67,1,1,4,0,11,1,1,1,407 -"6879",0,1,1,58,1,1,4,1,10,1,0,1,407 -"6880",0,1,0,41,2,1,4,1,12,1,1,1,407 -"6881",0,1,1,60,2,1,4,1,11,1,1,1,407 -"6882",0,1,0,65,2,1,4,0,11,1,0,1,407 -"6883",0,1,1,66,2,1,4,1,12,1,1,1,407 -"6884",1,1,0,61,1,1,4,0,9,1,1,1,407 -"6885",0,1,0,65,2,1,4,1,12,1,1,1,407 -"6886",0,1,0,28,1,1,3,0,9,2,0,0,408 -"6887",0,1,0,52,2,1,3,0,9,2,1,0,408 -"6888",0,1,0,53,1,1,3,1,8,2,0,0,408 -"6889",0,1,1,42,2,1,3,1,11,2,1,0,408 -"6890",0,1,1,66,2,1,3,0,12,2,1,0,408 -"6891",0,1,1,62,2,1,3,0,13,2,1,0,408 -"6892",0,1,0,55,1,1,3,1,9,2,0,0,408 -"6893",0,1,0,67,2,1,3,0,13,2,1,0,408 -"6894",0,1,1,62,5,1,3,0,10,2,0,0,408 -"6895",1,1,0,53,2,1,3,1,10,2,0,0,408 -"6896",0,1,1,61,1,1,3,1,10,2,1,0,408 -"6897",0,0,0,36,1,1,3,0,13,2,1,0,408 -"6898",0,1,1,57,1,1,3,1,10,2,0,0,408 -"6899",0,1,1,47,1,1,3,1,12,2,1,0,408 -"6900",0,1,1,53,2,1,3,1,11,2,1,0,408 -"6901",0,1,0,57,2,1,4,0,9,5,0,0,409 -"6902",0,1,0,55,2,1,4,0,9,5,0,0,409 -"6903",1,1,0,56,1,1,4,0,9,5,0,0,409 -"6904",0,1,1,52,5,1,4,1,9,5,0,0,409 -"6905",1,1,1,61,2,1,4,0,8,5,0,0,409 -"6906",0,1,0,53,3,1,4,0,11,5,1,0,409 -"6907",0,0,0,42,2,1,4,0,10,5,1,0,409 -"6908",1,1,1,64,3,1,4,0,9,5,1,0,409 -"6909",1,1,1,58,2,1,4,1,9,5,1,0,409 -"6910",0,1,0,59,2,1,4,1,9,5,1,0,409 -"6911",0,1,0,41,2,1,4,1,9,5,0,0,409 -"6912",0,1,1,40,1,1,4,1,9,5,0,0,409 -"6913",0,1,1,48,1,1,4,1,12,5,1,0,409 -"6914",0,1,0,44,3,1,4,1,10,5,0,0,409 -"6915",0,1,0,34,1,1,4,1,10,5,1,0,409 -"6916",1,1,0,37,5,1,4,0,11,5,1,0,409 -"6917",0,1,0,45,4,1,4,0,6,5,0,0,409 -"6918",0,1,0,60,2,1,4,0,10,5,1,0,409 -"6919",0,1,0,48,5,1,4,1,5,5,1,0,409 -"6920",0,1,0,55,4,1,4,0,11,5,1,0,409 -"6921",1,1,0,38,1,1,4,0,3,6,0,0,410 -"6922",1,1,0,48,2,1,4,0,7,6,0,0,410 -"6923",0,1,0,43,2,1,4,1,5,6,1,0,410 -"6924",0,1,0,44,3,1,4,0,9,6,0,0,410 -"6925",0,0,0,46,1,1,4,1,10,6,0,0,410 -"6926",0,1,0,52,2,1,4,1,11,6,0,0,410 -"6927",1,1,1,31,2,1,4,1,6,5,0,0,411 -"6928",0,1,1,59,2,1,4,0,11,5,1,0,411 -"6929",0,1,1,55,2,1,4,0,9,5,0,0,411 -"6930",0,1,0,35,2,1,4,1,7,5,0,0,411 -"6931",0,1,0,36,1,1,4,0,8,5,0,0,411 -"6932",0,1,0,46,2,1,4,0,11,5,0,0,411 -"6933",0,1,1,47,1,1,4,1,4,5,0,0,411 -"6934",0,1,0,47,3,1,4,0,11,5,0,0,411 -"6935",0,0,0,46,2,1,4,1,7,5,0,0,411 -"6936",0,1,0,66,1,1,4,0,10,5,0,0,411 -"6937",1,1,0,42,3,1,4,0,9,5,0,0,411 -"6938",0,1,1,44,3,1,4,1,5,5,0,0,411 -"6939",0,1,0,54,1,1,4,0,9,5,0,0,411 -"6940",0,0,1,39,1,1,4,0,6,5,0,0,411 -"6941",0,1,0,46,1,1,4,0,10,5,0,0,411 -"6942",0,1,0,42,1,1,4,1,9,5,0,0,411 -"6943",0,1,1,65,1,1,4,1,9,5,0,0,411 -"6944",0,1,1,53,3,1,4,0,11,4,0,0,412 -"6945",0,1,1,55,1,1,4,1,12,4,1,0,412 -"6946",1,1,1,24,2,1,4,0,6,4,0,0,412 -"6947",0,1,1,48,2,1,4,0,11,4,0,0,412 -"6948",0,1,0,58,2,1,4,1,8,4,0,0,412 -"6949",0,1,0,60,2,1,4,1,9,4,0,0,412 -"6950",0,1,0,48,1,1,4,0,9,4,0,0,412 -"6951",0,1,1,44,3,1,4,1,10,4,0,0,412 -"6952",1,1,1,47,2,1,4,0,11,1,1,0,413 -"6953",0,1,1,44,2,1,4,1,10,1,0,0,413 -"6954",0,0,0,47,2,1,4,0,11,1,0,0,413 -"6955",1,1,1,63,3,1,4,0,11,1,0,0,413 -"6956",0,1,0,67,2,1,4,0,9,1,1,0,413 -"6957",0,1,0,57,2,1,4,1,10,1,0,0,413 -"6958",0,1,0,44,1,1,4,1,6,1,0,0,413 -"6959",0,1,0,71,1,1,4,0,12,1,1,0,413 -"6960",0,1,1,54,1,1,4,0,10,1,1,0,413 -"6961",0,1,0,46,2,1,4,1,10,1,1,0,413 -"6962",0,1,1,57,2,1,3,1,13,5,1,0,414 -"6963",1,1,0,55,4,1,3,1,6,5,1,0,414 -"6964",0,1,0,47,2,1,3,0,8,5,0,0,414 -"6965",0,1,0,38,1,1,3,1,10,5,0,0,414 -"6966",0,1,0,54,2,1,3,0,10,5,0,0,414 -"6967",0,1,0,37,3,1,3,0,7,5,0,0,414 -"6968",0,1,1,43,3,1,3,0,9,5,1,0,414 -"6969",0,1,0,53,2,1,3,1,9,5,1,0,414 -"6970",0,1,0,49,2,1,3,1,8,5,1,0,414 -"6971",1,1,1,37,3,1,3,0,6,5,0,0,414 -"6972",0,1,0,52,1,1,3,1,10,5,1,0,414 -"6973",0,1,0,42,1,1,3,1,6,5,0,0,414 -"6974",0,1,0,35,1,1,3,0,7,5,0,0,414 -"6975",0,1,1,59,1,1,3,1,10,5,1,0,414 -"6976",0,1,1,61,2,1,3,0,7,5,0,0,414 -"6977",0,1,0,51,5,1,3,1,6,5,0,0,414 -"6978",0,1,0,48,1,1,3,0,8,5,0,0,414 -"6979",0,1,0,49,1,1,3,1,11,5,1,0,414 -"6980",0,1,0,54,4,1,4,1,13,1,1,1,415 -"6981",0,1,0,60,2,1,4,0,11,1,1,1,415 -"6982",0,1,1,57,1,1,4,1,13,1,1,1,415 -"6983",1,1,1,56,1,1,4,0,13,1,1,1,415 -"6984",0,1,0,59,1,1,4,0,12,1,1,1,415 -"6985",0,1,0,63,2,1,4,1,10,1,1,1,415 -"6986",0,1,0,61,2,1,4,1,11,1,0,1,415 -"6987",0,1,0,44,2,1,4,0,13,1,1,1,415 -"6988",0,1,1,64,2,1,4,0,13,1,1,1,415 -"6989",0,1,0,55,1,1,4,0,9,1,0,1,415 -"6990",0,1,1,43,2,1,4,0,10,1,0,1,415 -"6991",0,0,0,54,3,1,4,0,12,1,1,1,415 -"6992",0,1,0,57,1,1,4,1,10,1,0,1,415 -"6993",0,1,0,72,2,1,4,0,11,1,1,1,415 -"6994",0,1,0,56,1,1,4,0,12,1,1,1,415 -"6995",0,1,0,63,2,1,4,1,13,1,1,1,415 -"6996",0,1,0,62,2,1,4,1,12,1,1,1,415 -"6997",0,1,0,46,3,1,5,1,10,1,1,0,416 -"6998",0,0,0,57,1,1,5,0,9,1,0,0,416 -"6999",0,1,0,56,1,1,5,0,10,1,1,0,416 -"7000",0,1,0,66,1,1,5,1,10,1,1,0,416 -"7001",0,1,0,61,2,1,5,1,10,1,1,0,416 -"7002",0,1,1,61,2,1,5,0,11,1,1,0,416 -"7003",0,1,1,54,1,1,5,1,10,1,1,0,416 -"7004",0,1,1,53,2,1,5,1,10,1,0,0,416 -"7005",0,1,0,63,1,1,5,1,7,1,1,0,416 -"7006",0,1,1,62,2,1,5,1,10,1,0,0,416 -"7007",0,1,0,51,1,1,5,0,12,1,1,0,416 -"7008",1,1,0,53,1,1,5,0,10,1,1,0,416 -"7009",0,1,0,50,2,1,5,1,5,1,1,0,416 -"7010",1,1,0,55,2,1,5,0,8,1,0,0,416 -"7011",0,1,0,49,1,1,5,1,12,1,1,0,416 -"7012",1,1,0,56,3,1,5,0,9,2,0,0,417 -"7013",0,1,0,54,2,1,5,0,9,2,0,0,417 -"7014",0,1,0,60,2,1,5,0,10,2,0,0,417 -"7015",0,1,0,57,1,1,5,1,10,2,1,0,417 -"7016",0,1,0,50,2,1,5,0,10,2,0,0,417 -"7017",0,0,1,61,1,1,5,1,9,2,0,0,417 -"7018",0,1,0,54,2,1,5,0,12,2,0,0,417 -"7019",0,1,1,42,3,1,5,1,11,2,0,0,417 -"7020",0,0,0,58,2,1,5,1,11,2,0,0,417 -"7021",0,1,1,69,2,1,5,0,9,2,1,0,417 -"7022",1,1,1,36,2,1,5,0,9,2,0,0,417 -"7023",0,1,1,56,4,1,5,0,10,2,0,0,417 -"7024",0,1,0,50,1,1,5,0,7,2,0,0,417 -"7025",0,1,0,57,2,1,5,1,8,2,0,0,417 -"7026",0,1,1,58,3,1,5,1,12,2,1,0,417 -"7027",0,1,1,64,1,1,4,1,9,1,1,0,418 -"7028",0,1,0,69,2,1,4,1,10,1,1,0,418 -"7029",0,1,0,41,1,1,4,1,12,1,1,0,418 -"7030",0,1,1,51,1,1,4,0,10,1,1,0,418 -"7031",0,1,1,55,3,1,4,0,12,1,1,0,418 -"7032",0,1,1,61,2,1,4,1,10,1,1,0,418 -"7033",0,0,1,56,3,1,4,1,10,1,1,0,418 -"7034",0,1,0,69,1,1,4,1,12,1,1,0,418 -"7035",0,1,1,49,1,1,4,0,12,1,0,0,418 -"7036",0,1,0,46,3,1,4,1,12,1,0,0,418 -"7037",0,1,0,64,1,1,4,0,10,1,0,0,418 -"7038",0,0,0,67,2,1,4,1,9,1,0,0,419 -"7039",0,1,1,54,2,1,4,1,9,1,0,0,419 -"7040",0,0,0,50,2,1,4,0,12,1,1,0,419 -"7041",0,1,1,65,1,1,4,1,9,1,0,0,419 -"7042",0,1,0,47,1,1,4,0,10,1,1,0,419 -"7043",0,1,0,57,2,1,4,1,9,1,1,0,419 -"7044",0,1,1,61,2,1,4,1,10,1,1,0,419 -"7045",1,1,1,59,1,1,4,0,10,1,0,0,419 -"7046",0,1,1,46,2,1,4,1,6,1,0,0,419 -"7047",0,1,0,40,3,1,4,1,12,1,1,0,419 -"7048",0,1,0,46,1,1,4,1,10,1,0,0,419 -"7049",0,1,0,62,2,1,4,0,10,1,0,0,419 -"7050",0,1,1,60,3,1,4,0,10,1,0,0,419 -"7051",0,0,0,66,2,1,4,0,10,1,1,0,419 -"7052",0,1,0,41,2,1,4,1,10,1,0,0,419 -"7053",0,1,0,53,2,1,4,0,8,1,0,0,419 -"7054",1,0,1,48,2,1,4,1,8,1,0,0,419 -"7055",0,1,1,52,1,1,4,1,10,1,0,0,419 -"7056",0,1,0,56,1,1,4,0,10,1,1,0,419 -"7057",0,1,1,51,1,1,4,1,5,1,1,0,419 -"7058",0,1,1,51,3,1,4,0,9,1,0,0,419 -"7059",0,1,1,59,1,1,4,0,10,1,0,0,419 -"7060",1,1,0,56,2,1,4,0,9,1,0,0,419 -"7061",0,1,1,64,3,1,4,0,10,2,1,0,420 -"7062",0,1,0,65,1,1,4,1,10,2,0,0,420 -"7063",0,1,0,75,2,1,4,0,12,2,1,0,420 -"7064",0,1,1,57,4,1,4,1,10,2,1,0,420 -"7065",0,1,1,48,2,1,4,0,12,2,0,0,420 -"7066",0,1,1,52,2,1,4,1,11,2,1,0,420 -"7067",0,1,1,51,1,1,4,0,12,2,0,0,420 -"7068",0,1,1,72,2,1,4,0,9,2,1,0,420 -"7069",0,1,1,46,2,1,4,0,8,2,0,0,420 -"7070",0,1,0,62,2,1,4,0,11,2,1,0,420 -"7071",0,1,1,56,5,1,4,1,10,2,1,0,420 -"7072",0,1,0,63,2,1,4,0,10,2,0,0,420 -"7073",0,1,0,59,1,1,4,1,13,2,0,0,420 -"7074",0,1,1,64,1,1,4,1,8,2,1,0,420 -"7075",0,1,1,55,1,1,4,1,12,2,1,0,420 -"7076",0,1,0,78,1,0,4,0,13,1,1,1,421 -"7077",0,1,0,68,2,0,4,0,9,1,1,1,421 -"7078",0,1,0,70,1,0,4,0,10,1,1,1,421 -"7079",0,1,0,51,1,0,4,0,13,1,1,1,421 -"7080",0,1,1,65,1,0,4,0,11,1,1,1,421 -"7081",0,1,0,57,4,0,4,0,11,1,0,1,421 -"7082",0,1,0,55,2,0,4,0,13,1,0,1,421 -"7083",0,1,1,50,2,0,4,0,13,1,1,1,421 -"7084",0,1,0,59,2,0,4,0,10,1,1,1,421 -"7085",0,1,0,59,1,0,4,0,11,1,1,1,421 -"7086",1,0,0,63,2,0,4,0,11,1,1,1,421 -"7087",0,1,1,59,2,0,4,0,13,1,1,1,421 -"7088",0,1,0,46,2,1,3,0,13,1,1,0,422 -"7089",0,0,0,74,2,1,3,0,10,1,1,0,422 -"7090",0,1,1,64,3,1,3,0,10,1,1,0,422 -"7091",0,1,1,51,2,1,3,1,12,1,1,0,422 -"7092",0,1,1,64,1,1,3,0,10,1,1,0,422 -"7093",0,0,1,78,4,1,3,0,11,1,1,0,422 -"7094",0,1,0,62,1,1,3,1,12,1,1,0,422 -"7095",0,1,0,46,2,1,3,1,5,1,1,0,422 -"7096",0,1,1,62,2,1,3,1,10,1,0,0,422 -"7097",0,1,0,65,2,1,3,1,12,1,1,0,422 -"7098",1,0,0,54,1,1,3,1,10,1,0,0,422 -"7099",0,0,0,60,1,1,3,0,14,1,0,0,422 -"7100",0,1,0,64,1,1,3,1,10,1,1,0,422 -"7101",0,1,0,52,1,1,3,1,9,1,0,0,422 -"7102",0,1,1,65,3,1,3,0,10,1,1,0,422 -"7103",0,1,1,58,2,1,3,0,11,1,1,0,422 -"7104",0,1,0,43,1,1,3,1,11,1,0,0,422 -"7105",0,0,0,52,2,1,3,1,9,1,1,0,422 -"7106",0,1,1,39,4,1,4,1,12,7,1,0,423 -"7107",1,1,0,35,4,1,4,1,5,7,1,0,423 -"7108",0,1,1,38,5,1,4,1,8,7,0,0,423 -"7109",0,1,0,43,2,1,4,1,4,7,0,0,423 -"7110",0,1,1,31,3,1,4,0,11,7,0,0,423 -"7111",0,1,0,55,3,1,4,0,8,7,0,0,423 -"7112",0,1,0,40,3,1,4,0,8,7,0,0,423 -"7113",0,1,0,44,2,1,4,0,8,7,0,0,423 -"7114",0,1,0,33,2,1,4,1,9,7,1,0,423 -"7115",0,1,1,32,3,1,4,0,13,7,0,0,423 -"7116",0,1,0,33,4,1,4,1,9,7,0,0,423 -"7117",0,1,0,51,1,1,4,1,3,7,0,0,423 -"7118",0,1,0,37,3,1,4,1,5,7,0,0,423 -"7119",0,1,1,49,3,1,4,1,6,7,0,0,423 -"7120",0,1,0,62,2,1,4,1,7,7,0,0,423 -"7121",0,1,1,60,2,1,2,1,10,3,1,0,424 -"7122",0,1,1,59,5,1,2,1,10,3,0,0,424 -"7123",0,1,1,70,1,1,2,0,8,3,0,0,424 -"7124",1,0,0,53,1,1,2,0,10,3,0,0,424 -"7125",0,1,1,29,3,1,2,1,12,3,1,0,424 -"7126",0,1,0,69,2,1,2,0,9,3,0,0,424 -"7127",0,1,1,57,3,1,2,0,10,3,0,0,424 -"7128",0,1,0,60,1,1,2,0,10,3,1,0,424 -"7129",0,1,1,51,3,1,2,0,7,3,0,0,424 -"7130",0,1,1,67,1,1,2,1,8,3,0,0,424 -"7131",0,1,0,61,3,1,2,1,8,3,0,0,424 -"7132",0,1,0,64,1,1,2,0,8,3,0,0,424 -"7133",0,1,0,58,5,1,2,1,12,3,1,0,424 -"7134",0,1,0,47,4,1,2,0,11,3,0,0,424 -"7135",0,1,1,46,1,1,2,1,10,3,1,0,424 -"7136",1,1,0,53,3,1,2,0,11,3,1,0,424 -"7137",0,1,0,59,1,1,2,1,8,3,0,0,424 -"7138",0,1,0,52,1,1,2,1,9,3,0,0,424 -"7139",0,1,0,33,3,1,2,1,6,3,0,0,424 -"7140",0,1,0,39,5,1,2,0,6,3,0,0,424 -"7141",1,0,0,38,5,1,2,0,9,3,1,0,424 -"7142",0,1,0,43,5,1,3,1,7,6,0,0,425 -"7143",0,1,0,44,2,1,3,1,8,6,0,0,425 -"7144",0,1,0,56,2,1,3,0,5,6,1,0,425 -"7145",0,1,0,25,2,1,3,1,7,6,1,0,425 -"7146",0,1,0,55,3,1,3,1,6,6,0,0,425 -"7147",0,1,0,53,2,1,3,1,8,6,0,0,425 -"7148",1,1,0,39,5,1,3,1,9,6,1,0,425 -"7149",0,1,1,34,2,1,3,0,4,6,0,0,425 -"7150",0,0,0,59,5,1,3,0,11,6,1,0,425 -"7151",0,1,0,64,1,1,3,0,8,6,1,0,425 -"7152",0,1,0,55,2,1,3,0,6,6,0,0,425 -"7153",0,1,0,66,1,1,3,1,9,6,1,0,425 -"7154",0,1,1,43,1,1,3,0,11,6,0,0,425 -"7155",0,1,0,64,1,1,3,1,7,6,0,0,425 -"7156",0,1,0,32,1,1,3,1,6,6,0,0,425 -"7157",1,1,0,39,2,1,3,0,5,6,0,0,425 -"7158",0,0,0,49,2,1,3,1,10,6,0,0,425 -"7159",0,1,0,43,3,1,3,0,9,6,0,0,425 -"7160",0,1,1,55,1,1,3,1,9,6,0,0,425 -"7161",0,1,0,57,4,1,3,1,6,6,0,0,425 -"7162",0,1,0,39,2,1,3,0,9,6,1,0,425 -"7163",0,1,0,56,1,1,3,1,8,6,0,0,425 -"7164",0,1,1,59,2,1,4,1,5,5,0,0,426 -"7165",0,1,1,46,1,1,4,1,7,5,0,0,426 -"7166",0,1,1,51,2,1,4,0,10,5,0,0,426 -"7167",0,1,1,57,2,1,4,1,9,5,1,0,426 -"7168",0,1,0,59,3,1,4,1,9,5,0,0,426 -"7169",0,1,0,62,3,1,4,0,8,5,0,0,426 -"7170",1,1,0,63,2,1,4,0,8,5,1,0,426 -"7171",0,1,1,48,4,1,4,0,9,5,0,0,426 -"7172",0,1,1,51,2,1,4,1,8,5,0,0,426 -"7173",1,1,0,49,3,1,4,0,8,5,0,0,426 -"7174",1,1,1,46,5,1,4,0,6,5,0,0,426 -"7175",0,1,0,49,2,1,4,0,7,5,0,0,426 -"7176",0,0,0,45,4,1,4,0,8,5,0,0,426 -"7177",1,1,1,44,3,1,4,0,11,5,0,0,426 -"7178",0,1,1,35,2,1,4,1,6,5,1,0,426 -"7179",0,0,0,31,1,1,4,0,10,5,0,0,426 -"7180",1,1,0,46,2,1,3,1,9,5,0,0,427 -"7181",0,1,1,35,2,1,3,0,6,5,0,0,427 -"7182",0,1,0,31,3,1,3,0,9,5,1,0,427 -"7183",0,1,0,50,2,1,3,1,8,5,1,0,427 -"7184",0,1,0,30,2,1,3,1,9,5,0,0,427 -"7185",0,1,0,45,2,1,3,1,8,5,0,0,427 -"7186",0,1,1,36,2,1,3,1,6,5,0,0,427 -"7187",0,0,0,42,1,1,3,1,11,5,1,0,427 -"7188",0,1,0,53,3,1,3,1,8,5,0,0,427 -"7189",0,1,0,59,2,1,3,1,9,5,1,0,427 -"7190",0,1,0,53,3,1,3,0,9,5,0,0,427 -"7191",0,1,0,43,3,1,3,0,10,5,0,0,427 -"7192",0,1,0,46,2,1,3,1,2,5,0,0,427 -"7193",0,1,0,54,2,1,3,0,8,5,0,0,427 -"7194",0,1,0,55,1,1,3,1,6,5,1,0,427 -"7195",0,1,0,48,3,1,3,0,10,5,1,0,427 -"7196",0,1,0,41,1,1,3,1,8,5,1,0,427 -"7197",0,1,0,48,5,1,3,0,9,5,0,0,427 -"7198",0,1,1,40,3,1,3,1,6,5,0,0,427 -"7199",1,1,0,33,3,1,3,0,8,5,1,0,427 -"7200",1,1,1,49,2,1,3,0,6,5,0,0,427 -"7201",0,1,0,55,2,1,4,1,11,1,1,0,428 -"7202",0,1,0,44,4,1,4,0,11,1,1,0,428 -"7203",0,1,1,40,3,1,4,1,11,1,1,0,428 -"7204",0,1,0,60,2,1,4,1,12,1,1,0,428 -"7205",0,1,0,50,3,1,4,1,9,1,1,0,428 -"7206",0,1,1,45,3,1,4,1,13,1,1,0,428 -"7207",0,1,0,39,2,1,4,1,10,1,0,0,428 -"7208",0,0,0,49,5,1,4,1,12,1,1,0,428 -"7209",0,1,1,54,2,1,4,0,13,1,1,0,428 -"7210",0,1,0,64,2,1,4,1,10,1,1,0,428 -"7211",0,1,0,42,3,1,4,1,8,1,1,0,428 -"7212",0,1,1,69,1,1,4,0,10,1,1,0,428 -"7213",0,1,0,56,2,1,4,0,6,1,0,0,428 -"7214",0,1,0,53,1,1,4,1,13,1,1,0,428 -"7215",0,1,0,64,2,1,4,1,10,1,0,0,428 -"7216",0,1,0,47,2,1,4,0,12,1,1,0,428 -"7217",0,1,0,53,2,1,4,1,10,1,0,0,428 -"7218",0,1,1,49,3,1,4,1,12,1,1,0,428 -"7219",1,1,0,40,5,1,4,1,3,3,0,0,429 -"7220",1,0,1,45,3,1,4,0,13,3,1,0,429 -"7221",0,1,0,49,2,1,4,1,7,3,1,0,429 -"7222",0,1,1,24,3,1,4,1,8,3,0,0,429 -"7223",0,1,1,46,1,1,4,0,9,3,1,0,429 -"7224",0,1,1,48,2,1,4,0,9,3,0,0,429 -"7225",0,1,0,69,2,1,4,0,9,3,0,0,429 -"7226",0,1,1,38,2,1,4,0,9,3,1,0,429 -"7227",0,1,0,38,2,1,4,0,9,3,0,0,429 -"7228",0,1,0,47,2,1,4,0,10,3,0,0,429 -"7229",1,0,0,37,3,1,4,0,8,3,0,0,429 -"7230",0,1,0,52,2,1,4,0,8,3,0,0,429 -"7231",0,0,0,43,1,1,4,0,11,3,0,0,429 -"7232",0,1,0,44,3,1,4,1,7,3,0,0,429 -"7233",0,1,1,47,1,1,4,1,9,3,1,0,429 -"7234",0,1,0,43,3,1,4,0,5,3,0,0,429 -"7235",1,1,0,46,3,1,4,1,12,3,0,0,429 -"7236",0,1,0,26,2,1,4,1,5,3,0,0,429 -"7237",0,1,1,62,3,1,3,1,11,4,0,0,430 -"7238",0,1,1,58,2,1,3,0,7,4,1,0,430 -"7239",0,0,0,55,2,1,3,0,9,4,0,0,430 -"7240",0,0,0,57,3,1,3,0,9,4,1,0,430 -"7241",0,1,1,55,3,1,3,1,10,4,0,0,430 -"7242",0,1,1,53,2,1,3,1,12,4,0,0,430 -"7243",0,1,0,60,1,1,3,0,7,4,0,0,430 -"7244",0,1,0,39,3,1,3,1,9,4,0,0,430 -"7245",0,1,1,53,1,1,3,0,6,4,0,0,430 -"7246",0,1,1,56,2,1,3,1,10,4,1,0,430 -"7247",0,0,1,43,3,1,3,1,10,4,1,0,430 -"7248",0,1,1,48,2,1,3,1,11,4,0,0,430 -"7249",0,1,1,41,2,1,3,1,9,4,1,0,430 -"7250",0,1,1,53,1,1,3,0,7,4,1,0,430 -"7251",0,1,0,62,2,1,3,0,8,4,0,0,430 -"7252",0,1,1,55,3,1,3,1,4,4,0,0,430 -"7253",0,1,0,45,4,1,3,1,9,4,0,0,430 -"7254",1,1,1,57,2,1,3,0,6,4,0,0,430 -"7255",0,1,0,52,2,1,3,1,10,4,0,0,430 -"7256",1,0,0,48,1,1,3,0,8,4,0,0,430 -"7257",0,1,0,49,2,1,3,1,9,4,0,0,430 -"7258",0,1,0,47,1,1,3,0,10,4,1,0,430 -"7259",0,1,0,50,1,1,4,0,10,1,0,0,431 -"7260",1,0,1,60,5,1,4,0,12,1,1,0,431 -"7261",0,0,1,48,2,1,4,0,9,1,0,0,431 -"7262",0,1,1,53,3,1,4,1,7,1,1,0,431 -"7263",0,1,0,38,2,1,4,0,5,1,0,0,431 -"7264",0,1,1,62,2,1,4,0,12,1,1,0,431 -"7265",0,1,0,45,3,1,4,1,8,1,1,0,431 -"7266",1,0,1,33,2,1,4,1,10,1,0,0,431 -"7267",0,1,1,47,2,1,4,0,12,1,0,0,431 -"7268",1,1,0,62,1,1,4,0,9,1,0,0,431 -"7269",0,1,1,60,2,1,4,0,11,1,1,0,431 -"7270",0,1,0,58,1,1,4,1,10,1,0,0,431 -"7271",0,1,0,59,1,1,4,0,11,1,1,0,431 -"7272",0,1,0,42,1,1,4,1,9,1,0,0,431 -"7273",0,1,0,50,2,1,4,1,10,1,1,0,431 -"7274",0,1,0,50,3,1,4,1,13,1,1,0,431 -"7275",0,1,0,56,2,1,4,0,7,5,0,0,432 -"7276",1,1,0,40,2,1,4,0,5,5,0,0,432 -"7277",0,1,0,43,2,1,4,1,6,5,0,0,432 -"7278",0,1,0,52,1,1,4,1,8,5,0,0,432 -"7279",0,1,1,53,2,1,4,1,3,5,0,0,432 -"7280",0,1,0,49,1,1,4,0,9,5,0,0,432 -"7281",0,1,0,45,4,1,4,1,4,5,0,0,432 -"7282",0,1,1,43,1,1,4,0,9,5,0,0,432 -"7283",0,1,0,37,1,1,4,1,10,5,1,0,432 -"7284",0,1,0,49,1,1,4,0,9,5,0,0,432 -"7285",0,1,1,59,1,1,4,1,9,5,1,0,432 -"7286",0,1,1,46,2,1,4,1,9,5,0,0,432 -"7287",1,1,1,51,2,1,4,0,5,5,0,0,432 -"7288",0,1,0,50,1,1,4,1,6,5,0,0,432 -"7289",0,1,0,48,2,1,4,0,10,5,0,0,432 -"7290",0,0,1,39,1,1,4,0,10,5,0,0,432 -"7291",0,1,1,60,1,1,4,1,10,3,0,0,433 -"7292",0,1,1,57,2,1,4,1,10,3,1,0,433 -"7293",0,1,1,41,3,1,4,0,12,3,1,0,433 -"7294",1,1,0,37,3,1,4,0,8,3,0,0,433 -"7295",0,1,1,73,2,1,4,0,9,3,1,0,433 -"7296",0,1,0,66,2,1,4,1,12,3,1,0,433 -"7297",0,1,1,58,2,1,4,0,11,3,0,0,433 -"7298",0,1,1,50,1,1,4,1,5,3,0,0,433 -"7299",0,1,1,65,1,1,4,1,9,3,1,0,433 -"7300",1,0,0,41,5,1,4,0,12,3,0,0,433 -"7301",0,1,1,60,4,1,4,0,9,3,0,0,433 -"7302",0,1,0,70,3,1,4,1,12,3,1,0,433 -"7303",0,1,0,42,1,1,4,1,12,3,0,0,433 -"7304",0,1,0,57,2,1,4,1,11,3,1,0,433 -"7305",0,1,1,55,1,1,4,0,12,3,0,0,433 -"7306",1,0,1,41,5,1,4,0,11,3,0,0,433 -"7307",0,1,0,45,2,1,4,0,11,3,1,0,433 -"7308",1,1,1,36,2,1,4,0,11,3,0,0,433 -"7309",0,1,0,41,1,1,4,0,11,3,0,0,433 -"7310",0,1,1,57,1,1,4,1,12,3,1,0,433 -"7311",0,1,1,34,2,1,4,1,10,3,0,0,433 -"7312",0,1,1,55,2,1,4,1,12,3,0,0,433 -"7313",0,1,1,46,3,1,5,1,12,2,1,0,434 -"7314",0,1,0,24,3,1,5,0,12,2,1,0,434 -"7315",1,0,0,48,2,1,5,0,11,2,1,0,434 -"7316",1,1,1,78,2,1,5,0,8,2,1,0,434 -"7317",0,1,1,48,2,1,5,1,13,2,1,0,434 -"7318",1,1,1,62,5,1,5,0,7,2,1,0,434 -"7319",0,1,0,41,3,1,5,1,12,2,0,0,434 -"7320",0,1,0,48,4,1,5,0,13,2,1,0,434 -"7321",0,1,0,46,2,1,5,1,7,2,1,0,434 -"7322",0,1,1,57,2,1,5,0,12,2,0,0,434 -"7323",0,0,0,50,1,1,5,1,10,2,0,0,434 -"7324",0,1,0,59,5,1,5,1,10,2,0,0,434 -"7325",0,1,0,59,1,1,4,0,10,3,0,1,435 -"7326",0,1,0,72,2,1,4,0,12,3,1,1,435 -"7327",0,1,0,58,1,1,4,0,10,3,0,1,435 -"7328",0,1,0,58,1,1,4,0,10,3,0,1,435 -"7329",0,1,0,65,1,1,4,0,12,3,1,1,435 -"7330",0,1,0,51,3,1,4,1,13,3,1,1,435 -"7331",0,1,0,47,3,1,4,1,9,3,0,1,435 -"7332",0,1,1,61,4,1,4,0,8,3,0,1,435 -"7333",0,1,1,57,1,1,4,0,12,3,1,1,435 -"7334",0,1,1,52,3,1,4,1,11,3,1,1,435 -"7335",0,1,0,53,1,1,4,0,12,3,1,1,435 -"7336",0,1,1,56,3,1,4,1,9,3,0,1,435 -"7337",0,1,1,46,2,1,4,1,8,3,1,1,435 -"7338",0,1,0,51,2,1,4,0,12,3,1,1,435 -"7339",0,1,0,46,1,1,4,0,8,3,1,1,435 -"7340",0,1,0,41,2,1,3,1,10,7,0,0,436 -"7341",0,1,0,42,2,1,3,1,8,7,0,0,436 -"7342",0,1,1,37,1,1,3,0,2,7,0,0,436 -"7343",1,1,0,39,2,1,3,1,4,7,0,0,436 -"7344",0,1,0,34,5,1,3,1,5,7,0,0,436 -"7345",1,1,1,34,2,1,3,1,4,7,0,0,436 -"7346",1,1,0,31,3,1,3,0,8,7,0,0,436 -"7347",0,1,0,43,1,1,3,0,6,7,0,0,436 -"7348",0,1,0,36,3,1,3,1,5,7,0,0,436 -"7349",1,1,0,43,2,1,3,0,1,7,1,0,436 -"7350",0,1,0,45,3,1,3,1,8,7,0,0,436 -"7351",0,1,1,32,4,1,3,1,5,7,0,0,436 -"7352",1,1,0,39,3,1,3,0,7,7,0,0,436 -"7353",0,1,0,37,2,1,3,1,3,7,0,0,437 -"7354",0,1,0,45,3,1,3,0,6,7,0,0,437 -"7355",0,1,1,41,1,1,3,0,10,7,1,0,437 -"7356",0,1,1,44,3,1,3,1,9,7,0,0,437 -"7357",0,1,0,49,3,1,3,0,9,7,0,0,437 -"7358",0,0,0,35,2,1,3,0,6,7,0,0,437 -"7359",0,1,0,39,1,1,3,1,8,7,1,0,437 -"7360",0,0,0,40,1,1,3,1,9,7,0,0,437 -"7361",0,1,1,44,1,1,3,1,6,7,0,0,437 -"7362",0,1,0,34,5,1,3,1,6,7,0,0,437 -"7363",1,1,0,43,5,1,3,1,3,7,0,0,437 -"7364",0,1,0,43,3,1,3,1,10,7,1,0,437 -"7365",0,1,0,39,1,1,3,0,7,7,1,0,437 -"7366",0,1,0,43,5,1,3,1,7,7,1,0,437 -"7367",0,0,0,42,2,1,3,0,12,7,1,0,437 -"7368",0,1,0,42,3,1,3,1,5,7,0,0,437 -"7369",0,1,0,40,2,1,3,1,6,7,0,0,437 -"7370",0,1,0,65,1,1,2,1,10,5,0,0,438 -"7371",1,1,1,44,2,1,2,0,10,5,0,0,438 -"7372",0,0,0,40,1,1,2,1,5,5,0,0,438 -"7373",0,1,1,55,2,1,2,1,8,5,0,0,438 -"7374",0,1,1,47,1,1,2,0,10,5,0,0,438 -"7375",1,0,1,37,5,1,2,0,9,5,0,0,438 -"7376",0,1,0,52,3,1,2,0,6,5,0,0,438 -"7377",0,1,1,59,1,1,2,1,12,5,1,0,438 -"7378",0,1,0,49,3,1,2,1,8,5,0,0,438 -"7379",0,1,0,31,1,1,2,1,5,5,0,0,438 -"7380",0,1,0,45,3,1,2,1,10,5,1,0,438 -"7381",0,1,1,55,1,1,2,1,9,5,0,0,438 -"7382",1,1,0,47,5,1,2,0,7,5,0,0,438 -"7383",0,0,1,47,5,1,2,0,10,5,1,0,438 -"7384",0,1,0,53,2,1,2,1,9,5,0,0,438 -"7385",0,1,1,34,3,1,2,0,7,5,0,0,438 -"7386",0,0,0,52,3,1,5,0,9,1,1,0,439 -"7387",0,1,0,61,2,1,5,1,10,1,1,0,439 -"7388",0,1,0,49,3,1,5,1,5,1,0,0,439 -"7389",0,1,0,59,1,1,5,0,12,1,1,0,439 -"7390",0,1,0,66,2,1,5,1,12,1,1,0,439 -"7391",0,1,1,54,2,1,5,0,12,1,1,0,439 -"7392",0,1,1,65,2,1,5,1,11,1,1,0,439 -"7393",0,1,0,64,3,1,5,0,11,1,1,0,439 -"7394",0,1,0,51,4,1,5,0,10,1,1,0,439 -"7395",0,1,0,52,2,1,5,1,10,1,1,0,439 -"7396",0,1,0,62,1,1,5,0,11,1,1,0,439 -"7397",0,1,0,62,2,1,5,0,11,1,1,0,439 -"7398",0,1,0,50,1,1,5,1,8,1,1,0,439 -"7399",0,1,0,59,1,1,5,1,12,1,0,0,439 -"7400",1,0,1,49,3,1,5,1,10,1,0,0,439 -"7401",0,1,0,54,1,1,5,1,11,1,1,0,439 -"7402",0,1,0,49,2,1,5,1,11,1,0,0,439 -"7403",0,1,0,45,2,1,4,1,6,5,0,0,440 -"7404",1,1,1,66,1,1,4,0,9,5,1,0,440 -"7405",0,0,0,49,5,1,4,0,2,5,0,0,440 -"7406",0,1,0,48,2,1,4,1,6,5,0,0,440 -"7407",0,1,0,48,2,1,4,1,9,5,1,0,440 -"7408",0,1,1,47,2,1,4,1,7,5,0,0,440 -"7409",0,1,0,61,1,1,4,0,8,5,0,0,440 -"7410",0,1,0,54,2,1,4,1,7,5,0,0,440 -"7411",0,0,0,68,4,1,4,0,10,5,1,0,440 -"7412",0,1,0,32,2,1,4,0,11,5,0,0,440 -"7413",0,1,0,57,2,1,4,0,13,5,1,0,440 -"7414",0,1,1,50,1,1,5,0,10,1,0,1,441 -"7415",0,1,0,70,1,1,5,0,11,1,1,1,441 -"7416",0,1,0,45,1,1,5,0,9,1,1,1,441 -"7417",0,1,1,41,3,1,5,1,11,1,0,1,441 -"7418",0,1,0,62,1,1,5,0,10,1,0,1,441 -"7419",0,1,0,63,1,1,5,1,9,1,0,1,441 -"7420",0,1,1,70,1,1,5,0,9,1,1,1,441 -"7421",0,1,1,52,1,1,5,1,9,1,0,1,441 -"7422",0,1,1,55,1,1,5,0,11,1,0,1,441 -"7423",0,1,0,57,3,1,5,1,11,1,0,1,441 -"7424",0,1,0,58,1,1,5,0,9,1,0,1,441 -"7425",0,1,1,52,1,1,5,1,10,1,0,1,441 -"7426",0,1,1,60,1,1,5,1,9,1,1,1,441 -"7427",0,1,1,53,2,1,5,1,9,1,1,1,441 -"7428",0,1,0,49,1,1,5,1,6,1,1,1,441 -"7429",0,1,0,57,1,1,5,1,13,1,1,1,441 -"7430",0,1,0,55,1,1,5,0,10,1,0,1,441 -"7431",0,1,1,42,1,1,5,1,10,1,0,1,441 -"7432",0,0,0,42,2,1,5,0,9,1,1,1,441 -"7433",0,1,0,47,2,1,5,1,6,1,0,1,441 -"7434",0,1,1,48,1,1,5,1,9,1,0,1,441 -"7435",0,1,0,48,1,1,5,1,9,1,0,1,441 -"7436",0,0,1,49,2,1,5,0,10,1,1,1,441 -"7437",1,0,0,42,2,1,5,0,7,1,0,1,441 -"7438",0,1,0,54,1,1,4,0,12,7,1,0,442 -"7439",0,0,0,52,3,1,4,0,8,7,0,0,442 -"7440",0,1,1,47,3,1,4,1,10,7,1,0,442 -"7441",0,1,0,48,1,1,4,1,9,7,0,0,442 -"7442",0,1,1,58,2,1,4,0,2,7,0,0,442 -"7443",0,1,0,31,1,1,4,1,13,7,0,0,442 -"7444",1,1,1,46,2,1,4,0,9,7,0,0,442 -"7445",0,1,0,52,2,1,4,1,6,7,0,0,442 -"7446",0,1,0,51,3,1,4,1,10,7,0,0,442 -"7447",0,1,0,62,1,1,4,1,9,7,0,0,442 -"7448",1,0,1,25,3,1,4,0,11,7,0,0,442 -"7449",0,1,1,39,2,1,4,1,11,7,1,0,442 -"7450",0,1,0,50,2,1,4,0,10,7,1,0,442 -"7451",1,0,0,43,5,1,4,1,9,7,0,0,442 -"7452",1,1,0,36,2,1,4,1,4,7,0,0,442 -"7453",0,1,0,46,2,1,5,0,12,1,1,0,443 -"7454",0,1,0,61,1,1,5,1,9,1,1,0,443 -"7455",0,1,0,39,1,1,5,0,12,1,1,0,443 -"7456",1,1,1,60,1,1,5,0,8,1,1,0,443 -"7457",0,1,0,62,1,1,5,1,9,1,1,0,443 -"7458",0,0,1,47,1,1,5,0,11,1,1,0,443 -"7459",0,1,0,68,3,1,5,0,11,1,1,0,443 -"7460",0,1,0,60,1,1,5,1,9,1,1,0,443 -"7461",0,1,0,61,2,1,5,1,13,1,1,0,443 -"7462",0,0,0,51,2,1,5,0,12,1,1,0,443 -"7463",1,1,1,46,3,1,5,0,8,1,0,0,443 -"7464",0,1,0,68,5,1,5,1,10,1,1,0,443 -"7465",0,1,0,43,3,1,5,1,8,1,0,0,443 -"7466",0,1,1,64,2,1,5,1,12,1,1,0,443 -"7467",0,1,0,64,2,1,5,1,12,1,1,0,443 -"7468",1,1,0,54,5,1,5,0,12,1,1,0,443 -"7469",0,1,0,48,1,1,5,0,11,1,1,0,443 -"7470",0,1,0,64,2,1,5,0,10,1,1,0,443 -"7471",0,1,0,68,2,1,5,0,10,1,1,0,443 -"7472",0,1,1,49,2,1,5,0,10,1,1,0,443 -"7473",0,1,1,72,2,1,5,0,12,1,1,0,443 -"7474",0,1,1,45,5,1,5,1,4,1,0,0,443 -"7475",0,1,1,43,2,1,5,0,9,1,1,0,443 -"7476",0,1,1,52,3,1,5,1,12,1,1,0,443 -"7477",0,1,0,67,2,1,5,1,11,1,1,0,443 -"7478",0,1,1,64,2,1,5,0,8,1,1,0,443 -"7479",0,1,0,48,2,1,5,1,12,1,1,0,443 -"7480",0,0,0,58,2,1,5,1,12,1,1,0,443 -"7481",0,1,0,51,3,1,3,0,8,3,0,0,444 -"7482",0,1,1,47,3,1,3,1,10,3,1,0,444 -"7483",0,1,1,51,2,1,3,0,11,3,0,0,444 -"7484",0,0,1,41,2,1,3,1,3,3,0,0,444 -"7485",0,1,0,34,3,1,3,1,7,3,0,0,444 -"7486",0,0,1,60,2,1,3,1,10,3,0,0,444 -"7487",0,1,1,46,4,1,3,1,6,3,0,0,444 -"7488",0,1,1,44,2,1,3,1,8,3,0,0,444 -"7489",1,1,1,48,2,1,3,1,12,3,0,0,444 -"7490",0,1,0,53,2,1,3,0,7,3,0,0,444 -"7491",0,1,1,46,2,1,3,1,10,3,0,0,444 -"7492",0,1,1,65,2,1,3,0,9,3,0,0,444 -"7493",0,1,1,41,2,1,3,1,10,3,0,0,444 -"7494",1,0,1,41,2,1,3,0,7,3,0,0,444 -"7495",0,1,0,47,2,1,3,1,9,3,0,0,444 -"7496",0,1,0,50,3,1,4,0,10,5,1,0,445 -"7497",0,1,0,60,3,1,4,1,10,5,1,0,445 -"7498",0,1,0,65,3,1,4,1,11,5,0,0,445 -"7499",0,1,0,57,3,1,4,1,7,5,0,0,445 -"7500",0,1,0,61,3,1,4,1,9,5,0,0,445 -"7501",1,1,1,62,1,1,4,0,8,5,0,0,445 -"7502",0,1,1,53,5,1,4,0,8,5,0,0,445 -"7503",0,1,0,61,1,1,4,0,5,5,1,0,445 -"7504",0,1,0,56,5,1,4,0,2,5,1,0,445 -"7505",0,1,0,49,1,1,4,0,5,5,0,0,445 -"7506",0,1,0,66,1,1,4,0,9,5,0,0,445 -"7507",0,1,1,48,4,1,4,0,8,5,0,0,445 -"7508",0,1,0,45,5,1,4,1,9,5,0,0,445 -"7509",0,1,0,59,2,1,4,0,8,5,0,0,445 -"7510",0,1,0,52,3,1,4,1,8,5,0,0,445 -"7511",0,1,0,52,5,1,4,1,9,5,1,0,445 -"7512",1,1,0,52,5,1,4,0,5,5,0,0,445 -"7513",0,1,0,50,1,1,4,1,12,5,1,0,445 -"7514",0,1,0,52,4,1,4,0,7,5,0,0,445 -"7515",0,1,1,52,2,1,3,1,5,4,0,0,446 -"7516",0,1,1,45,2,1,3,1,11,4,1,0,446 -"7517",0,1,1,48,4,1,3,0,10,4,0,0,446 -"7518",0,1,0,30,1,1,3,1,8,4,0,0,446 -"7519",0,1,1,62,1,1,3,0,8,4,0,0,446 -"7520",0,1,0,56,5,1,3,0,11,4,1,0,446 -"7521",1,1,0,54,5,1,3,1,8,4,0,0,446 -"7522",0,1,1,55,2,1,3,0,9,4,1,0,446 -"7523",0,0,1,60,4,1,3,1,10,4,0,0,446 -"7524",0,1,0,60,3,1,3,1,7,4,0,0,446 -"7525",0,1,0,62,5,1,3,0,10,4,1,0,446 -"7526",0,1,1,63,3,1,3,1,10,4,0,0,446 -"7527",0,0,1,45,3,1,3,1,10,4,0,0,446 -"7528",0,1,0,60,2,1,3,1,7,4,0,0,446 -"7529",0,1,0,54,3,1,3,1,13,4,1,0,446 -"7530",0,1,1,51,1,1,3,0,9,4,0,0,446 -"7531",0,1,1,51,1,1,3,0,3,4,0,0,446 -"7532",0,1,0,58,2,1,3,1,11,4,0,0,446 -"7533",0,1,0,55,3,1,3,0,13,4,1,0,446 -"7534",0,0,1,54,2,1,3,0,11,2,1,0,447 -"7535",0,1,1,46,2,1,3,1,4,2,0,0,447 -"7536",0,1,0,53,1,1,3,1,8,2,0,0,447 -"7537",0,1,1,53,2,1,3,0,9,2,0,0,447 -"7538",0,1,0,68,1,1,3,0,11,2,1,0,447 -"7539",0,1,0,49,1,1,3,0,10,2,1,0,447 -"7540",0,1,1,46,3,1,3,0,11,2,0,0,447 -"7541",0,1,1,30,2,1,3,1,9,2,1,0,447 -"7542",0,1,0,50,2,1,3,1,10,2,0,0,447 -"7543",0,1,0,48,1,1,3,1,8,2,0,0,447 -"7544",0,0,1,58,1,1,3,0,9,2,0,0,447 -"7545",0,1,0,58,2,1,3,1,10,2,0,0,447 -"7546",0,1,1,58,1,1,3,0,7,2,0,0,447 -"7547",0,1,1,59,2,1,3,0,10,2,1,0,447 -"7548",0,1,0,60,2,1,3,1,13,2,0,0,447 -"7549",0,1,1,48,2,1,3,1,5,2,0,0,447 -"7550",0,1,1,44,1,1,3,1,10,2,0,0,447 -"7551",0,1,0,43,1,1,3,1,6,2,0,0,447 -"7552",0,1,1,54,2,1,3,0,6,2,0,0,447 -"7553",0,1,0,50,2,1,3,1,9,2,0,0,447 -"7554",0,1,0,54,2,1,5,1,10,1,1,0,448 -"7555",0,1,1,59,1,1,5,0,8,1,1,0,448 -"7556",0,1,0,61,1,1,5,1,8,1,0,0,448 -"7557",0,1,1,61,1,1,5,1,12,1,1,0,448 -"7558",0,1,0,70,1,1,5,0,12,1,1,0,448 -"7559",0,1,1,45,3,1,5,1,9,1,1,0,448 -"7560",0,1,1,39,2,1,5,0,11,1,0,0,448 -"7561",0,1,1,57,1,1,5,1,12,1,1,0,448 -"7562",1,1,0,54,3,1,5,0,12,1,1,0,448 -"7563",1,1,0,64,1,1,5,0,9,1,0,0,448 -"7564",0,1,0,52,3,1,5,1,11,1,1,0,448 -"7565",0,1,1,61,2,1,5,0,10,1,0,0,448 -"7566",0,1,1,64,2,1,5,1,11,1,1,0,448 -"7567",0,0,1,61,1,1,5,1,10,1,1,0,448 -"7568",0,1,1,56,2,1,5,0,9,1,0,0,448 -"7569",0,0,1,52,2,1,5,1,9,1,0,0,448 -"7570",0,1,0,52,1,1,5,1,11,1,0,0,448 -"7571",0,1,1,63,2,1,5,1,10,1,0,0,448 -"7572",0,1,1,61,5,1,5,0,12,1,1,0,448 -"7573",0,1,0,52,1,1,5,1,10,1,1,0,448 -"7574",0,1,1,47,2,1,5,1,12,1,1,0,448 -"7575",0,1,1,69,1,1,5,0,11,1,1,0,448 -"7576",0,1,1,57,1,1,5,0,10,1,0,0,448 -"7577",1,1,1,44,3,1,5,1,10,1,1,0,448 -"7578",1,0,1,51,2,1,5,1,11,1,0,0,448 -"7579",1,1,1,56,4,1,5,0,12,1,0,0,448 -"7580",0,1,0,61,2,1,5,0,11,1,0,0,448 -"7581",1,0,0,40,2,1,5,0,9,1,0,0,448 -"7582",1,0,0,59,5,1,5,1,9,1,1,0,448 -"7583",1,0,1,58,3,1,5,0,10,1,0,0,448 -"7584",0,1,0,38,3,1,5,1,8,1,0,0,449 -"7585",0,1,1,52,3,1,5,1,7,1,1,0,449 -"7586",0,1,0,53,1,1,5,0,8,1,0,0,449 -"7587",0,0,0,50,3,1,5,1,7,1,0,0,449 -"7588",0,1,0,63,2,1,5,1,10,1,0,0,449 -"7589",0,1,1,56,2,1,5,1,10,1,0,0,449 -"7590",0,1,0,54,4,1,5,1,12,1,1,0,449 -"7591",0,1,0,57,4,1,5,1,8,1,1,0,449 -"7592",0,1,0,64,1,1,5,0,12,1,1,0,449 -"7593",0,1,1,50,1,1,5,1,11,1,1,0,449 -"7594",0,1,0,42,2,1,5,0,13,1,1,0,449 -"7595",0,1,0,60,2,1,5,1,8,1,0,0,449 -"7596",0,1,0,70,1,1,5,0,10,1,1,0,449 -"7597",0,1,1,60,2,1,5,0,11,1,0,0,449 -"7598",0,0,0,46,2,1,5,0,8,1,1,0,449 -"7599",0,1,0,62,2,1,5,1,11,1,1,0,449 -"7600",0,1,0,56,1,1,5,1,9,1,0,0,449 -"7601",0,1,0,63,4,1,5,1,12,1,1,0,449 -"7602",0,1,0,62,2,1,5,1,13,1,1,0,449 -"7603",0,1,0,49,2,1,5,1,10,1,1,0,449 -"7604",0,1,0,50,2,1,5,0,10,1,0,0,449 -"7605",0,1,1,42,1,1,5,1,9,1,0,0,449 -"7606",0,1,0,64,2,1,5,0,12,1,1,0,449 -"7607",0,1,1,45,1,1,5,1,9,1,0,0,449 -"7608",1,0,0,33,2,1,5,1,9,1,0,0,449 -"7609",0,1,1,56,2,1,5,0,5,1,0,0,449 -"7610",0,0,1,57,2,1,5,1,9,1,0,0,449 -"7611",0,1,0,58,1,1,5,0,11,1,0,0,449 -"7612",0,1,0,58,2,1,2,1,8,1,0,0,450 -"7613",0,1,0,42,4,1,2,1,9,1,1,0,450 -"7614",0,0,0,42,1,1,2,0,9,1,0,0,450 -"7615",0,1,0,41,3,1,2,0,5,1,0,0,450 -"7616",0,1,1,78,2,1,2,1,13,1,1,0,450 -"7617",0,1,1,45,2,1,2,1,10,1,1,0,450 -"7618",0,0,0,60,3,1,2,1,11,1,0,0,450 -"7619",0,1,0,55,4,1,2,1,8,1,1,0,450 -"7620",0,1,0,70,1,1,2,0,10,1,1,0,450 -"7621",0,1,0,53,3,1,2,1,10,1,1,0,450 -"7622",0,1,1,43,2,1,2,1,11,1,1,0,450 -"7623",0,1,0,60,4,1,2,1,11,1,1,0,450 -"7624",0,1,0,52,2,1,2,0,8,1,0,0,450 -"7625",0,1,0,71,2,1,2,1,13,1,1,0,450 -"7626",0,1,0,66,1,1,2,0,11,1,1,0,450 -"7627",0,1,0,69,1,1,2,0,11,1,1,0,450 -"7628",0,1,1,67,2,1,2,0,12,1,1,0,450 -"7629",0,1,0,45,2,1,2,0,10,1,1,0,450 -"7630",0,1,1,59,2,1,4,1,9,2,1,1,451 -"7631",0,1,1,34,1,1,4,1,10,2,1,1,451 -"7632",0,1,1,57,1,1,4,1,11,2,0,1,451 -"7633",0,1,0,62,2,1,4,0,12,2,1,1,451 -"7634",0,1,1,44,1,1,4,1,8,2,1,1,451 -"7635",0,1,0,60,3,1,4,1,12,2,0,1,451 -"7636",0,1,0,58,2,1,4,1,10,2,1,1,451 -"7637",0,1,0,44,3,1,4,0,9,2,0,1,451 -"7638",0,1,1,41,2,1,4,0,11,2,1,1,451 -"7639",0,0,0,58,1,1,4,0,12,2,1,1,451 -"7640",1,1,0,38,3,1,4,0,8,2,0,1,451 -"7641",0,1,1,57,3,1,4,1,10,2,1,1,451 -"7642",0,1,0,62,1,1,4,1,10,2,0,1,451 -"7643",0,0,1,56,3,1,4,0,12,2,1,1,451 -"7644",0,1,0,44,1,1,4,1,10,2,0,1,451 -"7645",0,1,0,60,2,1,4,1,9,2,1,1,451 -"7646",0,1,1,49,1,1,4,1,9,2,0,1,451 -"7647",0,1,1,45,1,1,4,1,6,2,0,1,451 -"7648",1,1,0,28,3,1,4,0,9,2,1,1,451 -"7649",0,1,1,46,2,1,4,1,9,2,0,1,451 -"7650",0,1,1,55,3,1,4,0,11,2,1,1,451 -"7651",0,1,1,54,2,1,4,1,10,2,0,1,451 -"7652",0,1,1,61,2,1,4,0,10,2,1,1,451 -"7653",0,1,0,68,1,1,4,1,10,2,1,1,451 -"7654",0,0,1,31,2,1,4,0,12,2,1,1,451 -"7655",1,1,0,49,4,1,4,1,8,4,0,0,452 -"7656",0,1,0,57,1,1,4,1,10,4,1,0,452 -"7657",0,0,0,38,1,1,4,0,10,4,0,0,452 -"7658",0,1,0,55,2,1,4,1,5,4,0,0,452 -"7659",0,1,0,52,2,1,4,0,10,4,0,0,452 -"7660",0,1,1,56,1,1,4,0,10,4,1,0,452 -"7661",0,1,0,60,1,1,4,0,11,4,1,0,452 -"7662",0,1,0,62,1,1,4,0,11,4,0,0,452 -"7663",0,1,0,50,3,1,4,1,11,4,0,0,452 -"7664",1,0,0,48,3,1,4,0,10,4,0,0,452 -"7665",0,1,0,55,3,1,4,1,10,4,1,0,452 -"7666",0,1,1,45,1,1,4,0,8,4,0,0,452 -"7667",0,1,1,48,3,1,4,1,11,4,0,0,452 -"7668",0,1,0,51,2,1,4,1,8,4,0,0,452 -"7669",0,1,0,61,2,1,4,1,10,4,1,0,452 -"7670",1,1,1,52,1,1,4,1,11,4,0,0,452 -"7671",0,1,0,63,2,1,4,1,9,4,1,0,452 -"7672",0,1,0,28,2,1,4,1,10,4,0,0,452 -"7673",0,1,0,36,1,1,4,1,8,4,0,0,452 -"7674",1,1,1,51,2,1,3,0,3,2,0,0,453 -"7675",0,1,0,59,2,1,3,1,12,2,1,0,453 -"7676",0,1,1,70,2,1,3,1,9,2,0,0,453 -"7677",0,1,1,55,1,1,3,0,12,2,1,0,453 -"7678",0,1,1,68,2,1,3,0,8,2,0,0,453 -"7679",0,1,0,41,2,1,3,1,10,2,1,0,453 -"7680",0,1,0,69,1,1,3,1,11,2,0,0,453 -"7681",0,1,1,54,3,1,3,1,7,2,0,0,453 -"7682",0,1,0,45,2,1,3,1,8,2,0,0,453 -"7683",0,0,0,51,3,1,3,1,5,5,0,0,454 -"7684",0,1,1,57,2,1,3,1,9,5,0,0,454 -"7685",0,1,1,52,3,1,3,0,8,5,0,0,454 -"7686",0,0,0,55,3,1,3,0,10,5,1,0,454 -"7687",0,0,1,51,1,1,3,1,3,5,0,0,454 -"7688",0,1,1,51,2,1,3,0,5,5,0,0,454 -"7689",0,1,0,63,2,1,3,0,9,5,1,0,454 -"7690",0,1,0,46,2,1,3,0,7,5,0,0,454 -"7691",0,0,0,51,2,1,3,0,8,5,0,0,454 -"7692",0,1,1,62,3,1,4,0,12,2,1,0,455 -"7693",0,1,1,58,3,1,4,0,12,2,1,0,455 -"7694",0,1,0,72,2,1,4,0,10,2,1,0,455 -"7695",0,1,0,49,2,1,4,1,12,2,1,0,455 -"7696",0,1,0,60,2,1,4,1,8,2,0,0,455 -"7697",1,1,1,33,3,1,4,1,10,2,1,0,455 -"7698",0,1,0,47,1,1,4,1,8,2,0,0,455 -"7699",0,1,0,51,3,1,4,1,10,2,0,0,455 -"7700",0,0,0,52,3,1,4,0,6,2,1,0,455 -"7701",0,1,1,61,3,1,4,1,12,2,1,0,455 -"7702",0,1,1,40,1,1,4,0,6,2,0,0,455 -"7703",0,1,0,45,3,1,4,1,8,2,0,0,455 -"7704",0,1,1,65,3,1,4,0,10,2,0,0,455 -"7705",0,1,0,70,2,1,4,1,12,2,1,0,455 -"7706",1,0,0,57,1,1,4,0,11,2,1,0,455 -"7707",1,1,1,64,2,1,4,0,8,2,1,0,455 -"7708",0,1,1,60,2,1,3,0,11,1,0,1,456 -"7709",0,1,0,54,1,1,3,0,8,1,0,1,456 -"7710",0,1,1,48,2,1,3,1,5,1,1,1,456 -"7711",0,1,0,51,2,1,3,1,10,1,0,1,456 -"7712",0,1,0,52,2,1,3,1,10,1,0,1,456 -"7713",0,1,1,52,1,1,3,0,11,1,1,1,456 -"7714",0,1,1,57,1,1,3,0,11,1,0,1,456 -"7715",0,1,0,47,2,1,3,1,9,1,0,1,456 -"7716",0,1,1,56,2,1,3,0,10,1,0,1,456 -"7717",1,0,1,49,2,1,3,0,11,1,0,1,456 -"7718",0,1,0,40,2,1,3,0,10,1,0,1,456 -"7719",0,1,1,42,1,1,3,1,9,1,1,1,456 -"7720",0,1,0,49,3,1,3,0,9,1,0,1,456 -"7721",0,1,1,50,2,1,3,1,8,1,0,1,456 -"7722",0,1,1,54,3,1,3,1,11,1,1,1,456 -"7723",0,1,0,48,1,1,3,1,13,1,0,1,456 -"7724",0,1,0,55,2,1,3,0,10,1,0,1,456 -"7725",0,0,0,48,5,1,3,1,10,1,0,1,456 -"7726",1,1,0,54,3,1,3,0,11,1,1,1,456 -"7727",0,1,1,63,5,1,3,0,11,1,1,1,456 -"7728",0,1,1,62,2,1,5,0,11,3,1,0,457 -"7729",0,1,0,50,1,1,5,1,10,3,0,0,457 -"7730",0,1,1,37,1,1,5,0,9,3,0,0,457 -"7731",0,1,1,48,1,1,5,1,10,3,0,0,457 -"7732",0,1,1,37,3,1,5,1,8,3,0,0,457 -"7733",0,1,1,53,1,1,5,1,7,3,0,0,457 -"7734",0,1,0,52,2,1,5,1,10,3,0,0,457 -"7735",0,0,1,47,3,1,5,0,8,3,0,0,457 -"7736",0,1,1,52,1,1,5,1,11,3,0,0,457 -"7737",0,1,0,56,2,1,5,0,11,3,0,0,457 -"7738",0,1,0,61,3,1,5,1,12,3,1,0,457 -"7739",0,1,0,60,1,1,5,0,12,3,1,0,457 -"7740",1,1,1,51,5,1,5,0,9,3,0,0,457 -"7741",0,0,0,35,1,1,5,1,12,3,1,0,457 -"7742",0,0,1,64,2,1,5,0,9,3,1,0,457 -"7743",0,1,0,64,3,1,5,1,10,3,1,0,457 -"7744",0,1,1,47,3,1,5,1,9,3,1,0,457 -"7745",1,1,1,57,3,1,5,0,10,3,0,0,457 -"7746",1,0,0,46,3,1,5,0,11,3,0,0,457 -"7747",1,1,1,52,1,1,5,0,10,3,0,0,457 -"7748",0,1,0,55,1,1,5,0,12,3,1,0,457 -"7749",0,1,1,41,2,1,5,0,9,3,0,0,457 -"7750",0,1,1,61,3,1,5,1,13,6,1,1,458 -"7751",1,1,0,42,3,1,5,0,10,6,0,1,458 -"7752",0,1,0,47,2,1,5,1,11,6,0,1,458 -"7753",0,0,1,40,3,1,5,1,12,6,0,1,458 -"7754",0,1,0,58,2,1,5,0,8,6,1,1,458 -"7755",0,1,0,60,1,1,5,1,11,6,1,1,458 -"7756",0,1,0,58,3,1,5,1,12,6,1,1,458 -"7757",0,1,0,51,2,1,5,1,12,6,1,1,458 -"7758",0,1,1,54,4,1,5,1,10,6,0,1,458 -"7759",0,1,1,61,1,1,5,0,9,6,0,1,458 -"7760",0,0,0,58,1,1,5,1,11,6,1,1,458 -"7761",0,1,1,62,1,1,5,0,12,6,1,1,458 -"7762",0,1,1,52,3,1,5,1,11,6,0,1,458 -"7763",0,1,0,64,1,1,5,0,13,6,1,1,458 -"7764",1,1,0,51,3,1,5,0,10,6,1,1,458 -"7765",1,0,0,43,3,1,5,0,11,6,0,1,458 -"7766",0,1,1,60,3,1,5,1,9,6,1,1,458 -"7767",0,1,0,59,3,1,5,0,10,2,0,0,459 -"7768",0,1,0,50,1,1,5,0,9,2,0,0,459 -"7769",0,1,0,45,2,1,5,1,10,2,0,0,459 -"7770",1,1,0,57,3,1,5,0,10,2,0,0,459 -"7771",0,1,0,39,1,1,5,0,10,2,1,0,459 -"7772",0,1,0,54,2,1,5,0,9,2,0,0,459 -"7773",0,1,0,56,2,1,5,1,12,2,1,0,459 -"7774",0,1,0,46,2,1,5,1,12,2,1,0,459 -"7775",0,1,1,57,1,1,5,0,9,2,0,0,459 -"7776",0,1,0,56,3,1,5,1,9,2,1,0,459 -"7777",0,1,0,50,1,1,5,0,8,2,0,0,459 -"7778",0,1,1,40,2,1,5,1,10,2,0,0,459 -"7779",0,1,1,38,2,1,5,1,7,2,1,0,459 -"7780",1,1,1,63,5,1,5,0,6,2,0,0,459 -"7781",0,1,0,56,1,1,5,1,11,2,0,0,459 -"7782",0,0,0,47,5,1,5,0,7,2,0,0,459 -"7783",0,1,1,46,2,1,5,0,10,2,1,0,459 -"7784",0,1,1,58,2,1,5,1,14,2,1,0,459 -"7785",0,1,0,52,1,1,5,1,11,2,0,0,459 -"7786",0,1,1,72,2,1,5,0,10,2,1,0,459 -"7787",1,1,1,49,3,1,5,0,7,2,0,0,459 -"7788",0,1,0,55,3,1,4,0,11,3,1,1,460 -"7789",0,1,0,53,3,1,4,0,8,3,1,1,460 -"7790",0,1,0,58,2,1,4,0,8,3,0,1,460 -"7791",0,1,0,59,1,1,4,1,10,3,1,1,460 -"7792",0,1,0,58,5,1,4,1,13,3,1,1,460 -"7793",0,1,1,58,4,1,4,1,12,3,1,1,460 -"7794",1,0,1,61,3,1,4,0,9,3,1,1,460 -"7795",0,1,1,54,1,1,4,1,11,3,1,1,460 -"7796",0,1,1,59,2,1,4,1,10,3,1,1,460 -"7797",0,1,0,40,2,1,4,1,10,3,0,1,460 -"7798",1,0,1,65,5,1,4,0,13,3,1,1,460 -"7799",0,1,0,61,5,1,4,1,11,3,1,1,460 -"7800",0,1,0,47,3,1,4,1,9,3,0,1,460 -"7801",0,1,0,55,4,1,4,0,8,3,0,1,460 -"7802",0,1,1,56,3,1,4,0,10,3,1,1,460 -"7803",0,1,1,59,3,1,4,1,10,3,0,1,460 -"7804",0,1,1,56,3,1,4,0,12,3,1,1,460 -"7805",1,1,0,50,1,1,4,1,11,3,1,1,460 -"7806",0,1,0,42,3,1,4,1,11,2,0,0,461 -"7807",0,1,0,65,3,1,4,1,10,2,0,0,461 -"7808",1,0,0,47,5,1,4,0,9,2,1,0,461 -"7809",0,1,1,60,2,1,4,0,10,2,0,0,461 -"7810",0,1,1,49,1,1,4,0,12,2,1,0,461 -"7811",1,1,0,53,1,1,4,1,9,2,0,0,461 -"7812",0,1,0,64,2,1,4,0,12,2,1,0,461 -"7813",1,0,1,31,2,1,4,0,8,2,1,0,461 -"7814",0,1,1,61,3,1,4,0,9,2,0,0,461 -"7815",1,0,0,37,2,1,4,0,4,2,0,0,461 -"7816",1,1,1,43,2,1,4,0,2,2,0,0,461 -"7817",0,1,0,62,2,1,4,0,11,2,1,0,461 -"7818",0,1,0,53,1,1,4,1,9,2,0,0,461 -"7819",0,1,1,49,2,1,4,1,10,2,0,0,461 -"7820",0,1,0,45,1,1,4,0,10,2,0,0,461 -"7821",0,1,1,50,2,1,4,0,12,2,1,0,461 -"7822",0,1,0,60,2,1,4,1,12,2,1,0,461 -"7823",0,1,0,61,2,1,4,1,8,2,0,0,461 -"7824",1,0,0,32,3,1,4,1,7,2,0,0,461 -"7825",0,1,0,56,1,1,4,0,6,2,0,0,461 -"7826",0,0,0,48,2,1,4,1,9,2,0,0,461 -"7827",0,1,0,50,1,1,4,0,9,2,1,0,461 -"7828",0,0,0,38,2,1,4,0,12,2,1,0,461 -"7829",0,1,0,51,1,1,4,1,5,2,0,0,461 -"7830",1,1,0,52,2,1,4,1,9,2,0,0,461 -"7831",0,1,1,45,1,1,4,1,9,2,0,0,461 -"7832",0,1,0,55,1,1,4,1,10,2,1,0,461 -"7833",0,1,1,53,1,1,4,1,10,2,1,0,461 -"7834",0,1,1,52,1,1,4,1,8,2,0,0,461 -"7835",0,1,0,58,2,1,4,0,8,2,0,0,461 -"7836",1,0,1,40,1,1,4,1,9,2,0,0,461 -"7837",0,1,1,57,2,1,4,1,6,2,0,0,461 -"7838",0,1,1,46,2,1,2,1,8,7,0,0,462 -"7839",0,1,0,48,2,1,2,1,2,7,0,0,462 -"7840",0,1,0,37,2,1,2,1,10,7,0,0,462 -"7841",0,1,1,41,2,1,2,1,5,7,1,0,462 -"7842",0,1,1,31,2,1,2,1,12,7,1,0,462 -"7843",1,0,1,34,5,1,2,0,4,7,0,0,462 -"7844",1,1,0,44,2,1,2,1,8,7,0,0,462 -"7845",1,1,1,47,1,1,2,0,2,7,1,0,462 -"7846",1,0,0,45,5,1,2,0,3,7,0,0,462 -"7847",0,1,0,39,3,1,2,0,9,7,0,0,462 -"7848",0,0,0,46,2,1,3,1,10,1,0,0,463 -"7849",0,1,1,52,1,1,3,1,10,1,0,0,463 -"7850",0,1,1,41,1,1,3,1,11,1,1,0,463 -"7851",0,1,0,48,1,1,3,1,11,1,1,0,463 -"7852",0,1,0,57,1,1,3,0,10,1,1,0,463 -"7853",0,1,0,43,2,1,3,0,10,1,0,0,463 -"7854",1,1,1,55,3,1,3,0,10,1,0,0,463 -"7855",0,1,0,58,3,1,3,1,10,1,1,0,463 -"7856",0,1,0,61,2,1,3,1,11,1,1,0,463 -"7857",0,1,0,48,2,1,3,0,11,1,0,0,463 -"7858",0,1,1,57,2,1,3,0,10,1,0,0,463 -"7859",0,0,0,67,2,1,3,0,12,1,1,0,463 -"7860",0,1,0,51,5,1,3,0,7,1,0,0,464 -"7861",0,1,0,59,1,1,3,1,11,1,1,0,464 -"7862",0,1,1,56,1,1,3,0,8,1,0,0,464 -"7863",0,0,0,49,2,1,3,1,7,1,0,0,464 -"7864",0,1,0,53,4,1,3,1,16,1,0,0,464 -"7865",0,1,0,46,3,1,3,1,8,1,0,0,464 -"7866",0,1,1,62,2,1,3,0,10,1,0,0,464 -"7867",0,1,0,67,3,1,3,0,10,1,0,0,464 -"7868",0,1,0,58,1,1,3,1,12,1,1,0,464 -"7869",0,1,1,60,1,1,3,0,11,1,0,0,464 -"7870",1,1,1,55,4,1,3,0,10,1,0,0,464 -"7871",0,1,0,62,2,1,3,1,9,1,0,0,464 -"7872",0,1,1,68,2,1,3,0,10,1,0,0,464 -"7873",0,1,0,50,3,1,3,1,9,1,1,0,464 -"7874",0,1,1,48,2,1,3,1,9,1,1,0,464 -"7875",0,1,1,51,2,1,3,0,10,1,0,0,464 -"7876",0,1,1,56,1,1,3,0,9,1,0,0,464 -"7877",0,1,1,62,2,1,3,0,9,1,0,0,464 -"7878",0,1,0,49,1,1,3,1,10,1,0,0,464 -"7879",1,0,1,45,3,1,3,0,12,1,0,0,464 -"7880",0,0,1,48,5,1,3,1,12,1,1,0,464 -"7881",0,1,1,45,3,1,3,1,7,1,0,0,464 -"7882",0,1,0,57,2,1,3,0,11,1,1,0,464 -"7883",0,0,0,45,4,1,3,1,11,1,1,0,464 -"7884",1,1,1,62,2,1,3,0,9,1,0,0,464 -"7885",0,1,0,55,2,1,5,1,10,3,1,0,465 -"7886",0,1,1,57,2,1,5,1,5,3,1,0,465 -"7887",0,1,1,53,1,1,5,1,10,3,0,0,465 -"7888",0,1,0,47,1,1,5,0,10,3,0,0,465 -"7889",1,1,1,61,1,1,5,1,10,3,1,0,465 -"7890",0,1,1,56,4,1,5,1,9,3,1,0,465 -"7891",1,0,0,59,3,1,5,0,10,3,0,0,465 -"7892",1,1,1,31,3,1,5,1,9,3,0,0,465 -"7893",1,0,1,52,2,1,5,1,7,3,0,0,465 -"7894",0,1,1,58,1,1,5,1,8,3,0,0,465 -"7895",0,0,1,42,1,1,5,1,10,3,0,0,465 -"7896",0,1,0,53,2,1,4,1,11,5,0,0,466 -"7897",0,1,0,46,3,1,4,1,7,5,0,0,466 -"7898",0,1,0,55,1,1,4,1,8,5,0,0,466 -"7899",0,1,1,39,2,1,4,0,8,5,0,0,466 -"7900",0,1,0,49,1,1,4,1,6,5,0,0,466 -"7901",0,1,0,25,1,1,4,0,10,5,0,0,466 -"7902",0,1,1,53,1,1,4,1,8,5,0,0,466 -"7903",0,1,0,44,4,1,4,1,9,5,1,0,466 -"7904",0,1,0,45,1,1,4,0,11,5,1,0,466 -"7905",0,1,1,49,1,1,4,0,3,5,0,0,466 -"7906",0,1,0,52,2,1,4,1,8,5,0,0,466 -"7907",0,1,0,80,3,1,5,0,10,6,1,0,467 -"7908",0,1,0,66,2,1,5,1,11,6,1,0,467 -"7909",0,1,0,33,5,1,5,1,7,6,0,0,467 -"7910",0,1,1,60,1,1,5,0,12,6,0,0,467 -"7911",0,1,1,42,4,1,4,1,9,1,0,0,468 -"7912",0,1,0,62,3,1,4,0,9,1,1,0,468 -"7913",0,1,0,54,2,1,4,1,12,1,1,0,468 -"7914",0,1,1,40,2,1,4,1,10,1,0,0,468 -"7915",1,1,0,45,5,1,4,0,8,1,0,0,468 -"7916",0,1,0,58,2,1,4,1,10,1,0,0,468 -"7917",0,0,1,64,3,1,4,1,10,1,0,0,468 -"7918",0,1,0,49,1,1,4,0,10,1,1,0,468 -"7919",0,1,1,55,3,1,4,0,10,1,1,0,468 -"7920",1,1,0,48,3,1,4,1,11,1,0,0,468 -"7921",0,1,0,56,2,1,4,1,11,1,0,0,468 -"7922",0,1,1,56,2,1,4,1,12,1,0,0,468 -"7923",0,1,1,58,1,1,4,1,9,1,1,0,468 -"7924",0,1,0,59,2,1,4,0,12,1,0,0,468 -"7925",0,1,1,56,1,1,4,1,11,1,0,0,468 -"7926",0,1,0,43,2,1,4,1,8,1,0,0,468 -"7927",0,1,0,58,2,1,4,1,7,1,0,0,469 -"7928",0,1,1,55,1,1,4,1,9,1,1,0,469 -"7929",0,1,0,54,1,1,4,0,9,1,1,0,469 -"7930",0,1,0,66,3,1,4,0,11,1,1,0,469 -"7931",0,1,0,37,1,1,4,0,12,1,0,0,469 -"7932",1,1,1,42,1,1,4,0,6,1,0,0,469 -"7933",0,1,1,62,2,1,4,1,9,1,1,0,469 -"7934",0,1,1,68,1,1,4,0,10,1,0,0,469 -"7935",0,1,0,47,3,1,4,0,9,1,0,0,469 -"7936",0,1,1,50,2,1,4,1,10,1,0,0,469 -"7937",0,1,0,63,1,1,4,0,9,1,1,0,469 -"7938",0,1,0,54,3,1,4,1,9,1,0,0,469 -"7939",0,1,1,49,1,1,4,0,10,1,0,0,469 -"7940",0,1,0,42,1,1,4,1,12,1,1,0,469 -"7941",0,1,0,47,2,1,4,1,11,1,0,0,469 -"7942",0,1,1,45,2,1,4,0,13,1,0,0,469 -"7943",1,0,1,60,2,1,4,0,11,1,0,0,469 -"7944",0,1,0,44,1,1,4,1,11,1,1,0,469 -"7945",0,1,0,46,1,1,4,0,9,1,1,0,469 -"7946",0,1,0,53,1,1,4,1,9,1,0,0,469 -"7947",0,0,0,61,2,1,4,1,11,1,0,0,469 -"7948",0,1,1,62,5,1,4,1,13,1,1,0,469 -"7949",0,1,1,51,2,1,4,0,12,1,1,0,469 -"7950",0,1,0,48,3,1,4,0,8,1,0,0,469 -"7951",0,1,0,57,2,1,4,1,10,1,0,0,469 -"7952",0,1,1,58,2,1,4,0,10,1,0,0,469 -"7953",0,1,0,65,2,1,4,0,8,5,0,0,470 -"7954",0,1,1,46,1,1,4,0,5,5,0,0,470 -"7955",0,1,1,53,1,1,4,1,10,5,1,0,470 -"7956",0,1,1,62,1,1,4,1,9,5,1,0,470 -"7957",0,1,1,53,1,1,4,1,8,5,0,0,470 -"7958",1,1,0,45,3,1,4,1,7,5,0,0,470 -"7959",0,1,1,49,1,1,4,1,9,5,0,0,470 -"7960",0,1,1,59,3,1,4,0,10,5,1,0,470 -"7961",0,1,0,50,2,1,4,0,11,5,0,0,470 -"7962",0,0,1,54,5,1,4,1,11,5,0,0,470 -"7963",1,1,0,47,2,1,4,0,10,5,0,0,470 -"7964",0,1,1,66,2,1,4,1,9,1,1,1,471 -"7965",0,1,0,71,1,1,4,0,12,1,1,1,471 -"7966",0,1,0,60,2,1,4,0,11,1,1,1,471 -"7967",0,0,1,50,1,1,4,0,10,1,0,1,471 -"7968",0,1,1,45,2,1,4,0,12,1,1,1,471 -"7969",0,1,0,56,3,1,4,0,12,1,1,1,471 -"7970",0,1,0,57,1,1,4,1,9,1,0,1,471 -"7971",0,1,0,57,1,1,4,1,11,1,1,1,471 -"7972",0,0,1,53,2,1,4,0,10,1,0,1,471 -"7973",0,1,1,56,1,1,4,1,11,1,0,1,471 -"7974",0,1,0,57,1,1,4,1,11,1,0,1,471 -"7975",0,1,0,44,4,1,4,1,12,1,1,1,471 -"7976",0,1,0,54,1,1,4,1,10,1,1,1,471 -"7977",0,1,0,35,2,1,4,1,10,1,1,1,471 -"7978",1,0,1,50,2,1,4,0,9,1,0,1,471 -"7979",0,1,1,55,2,1,4,1,11,1,1,1,471 -"7980",0,1,0,59,3,1,5,1,8,2,0,0,472 -"7981",0,0,0,50,3,1,5,1,12,2,1,0,472 -"7982",0,1,0,48,1,1,5,0,12,2,1,0,472 -"7983",0,1,0,63,2,1,5,1,12,2,0,0,472 -"7984",0,1,0,54,1,1,5,0,11,2,0,0,472 -"7985",1,1,0,55,2,1,5,0,7,2,0,0,472 -"7986",0,1,0,44,2,1,5,1,9,2,0,0,472 -"7987",0,1,1,46,3,1,5,1,7,2,0,0,472 -"7988",0,1,1,48,2,1,5,0,9,2,0,0,472 -"7989",0,1,0,58,1,1,5,1,12,2,1,0,472 -"7990",0,1,0,50,1,1,5,1,10,2,1,0,472 -"7991",0,0,1,54,2,1,5,0,8,2,0,0,472 -"7992",0,1,1,45,3,1,5,1,9,2,0,0,472 -"7993",1,1,0,48,1,1,5,0,10,2,0,0,472 -"7994",0,1,0,33,2,1,5,1,5,2,0,0,472 -"7995",0,1,0,55,4,1,5,1,11,2,0,0,472 -"7996",0,0,0,53,2,1,5,0,10,2,1,0,472 -"7997",0,1,1,44,2,1,5,1,10,2,1,0,472 -"7998",0,1,1,53,3,1,5,0,8,2,0,0,472 -"7999",0,1,0,42,1,1,2,0,8,5,0,0,473 -"8000",0,1,0,54,3,1,2,0,8,5,0,0,473 -"8001",0,1,0,30,2,1,2,1,5,5,0,0,473 -"8002",1,0,1,41,3,1,2,0,8,5,0,0,473 -"8003",0,1,0,37,2,1,2,1,9,5,0,0,473 -"8004",0,1,0,45,2,1,2,0,9,5,1,0,473 -"8005",0,1,0,32,2,1,2,0,10,5,0,0,473 -"8006",0,1,0,32,3,1,2,0,6,5,0,0,473 -"8007",0,1,0,46,2,1,2,0,7,5,0,0,473 -"8008",1,1,0,48,1,1,2,0,8,5,0,0,473 -"8009",0,1,0,32,2,1,2,0,5,5,0,0,473 -"8010",1,1,1,41,4,1,2,1,8,5,0,0,473 -"8011",0,1,0,35,2,1,2,0,6,5,0,0,473 -"8012",0,1,0,39,1,1,2,0,10,5,0,0,473 -"8013",0,1,0,48,1,1,2,0,8,5,0,0,473 -"8014",0,1,0,38,3,1,2,0,8,5,0,0,473 -"8015",1,1,1,45,2,1,2,1,7,5,0,0,473 -"8016",0,1,0,49,2,1,2,0,5,5,1,0,473 -"8017",1,1,0,33,2,1,2,0,8,5,1,0,473 -"8018",0,1,0,38,2,1,2,0,6,5,0,0,473 -"8019",0,1,0,40,2,1,2,1,9,5,0,0,473 -"8020",1,1,0,52,2,1,2,0,10,5,0,0,473 -"8021",0,1,0,57,2,1,2,1,7,5,0,0,473 -"8022",0,1,1,58,1,1,2,0,12,5,0,0,473 -"8023",0,1,1,27,2,1,2,1,5,5,0,0,473 -"8024",1,1,0,34,5,1,2,0,2,5,0,0,473 -"8025",0,1,0,36,1,1,2,0,8,5,0,0,473 -"8026",0,1,0,39,2,1,2,0,7,5,1,0,473 -"8027",0,1,0,51,2,1,2,0,6,5,0,0,473 -"8028",0,1,0,63,3,1,2,1,10,5,1,0,473 -"8029",0,1,0,40,1,1,3,0,9,5,0,0,474 -"8030",0,1,0,47,1,1,3,0,7,5,0,0,474 -"8031",0,1,1,41,1,1,3,1,4,5,0,0,474 -"8032",1,1,0,58,3,1,3,0,7,5,0,0,474 -"8033",0,1,0,56,3,1,3,1,9,5,0,0,474 -"8034",0,1,0,60,2,1,3,0,8,5,0,0,474 -"8035",0,0,0,51,3,1,3,0,12,5,0,0,474 -"8036",0,1,0,52,2,1,3,1,4,5,0,0,474 -"8037",0,1,0,35,2,1,3,1,8,5,0,0,474 -"8038",0,1,0,52,4,1,3,1,3,5,0,0,474 -"8039",1,1,1,40,3,1,3,0,10,5,0,0,474 -"8040",0,1,0,47,3,1,3,1,8,5,0,0,474 -"8041",0,1,1,49,1,0,5,0,13,1,1,1,475 -"8042",0,1,0,56,1,0,5,0,12,1,0,1,475 -"8043",0,1,1,62,3,0,5,0,12,1,1,1,475 -"8044",0,1,0,59,1,0,5,0,11,1,1,1,475 -"8045",0,0,0,53,2,0,5,0,10,1,1,1,475 -"8046",0,1,1,57,1,0,5,0,10,1,1,1,475 -"8047",0,1,0,57,1,0,5,1,13,1,1,1,475 -"8048",0,1,1,63,1,0,5,0,12,1,1,1,475 -"8049",0,1,0,55,1,0,5,0,13,1,1,1,475 -"8050",0,1,1,55,1,0,5,0,12,1,1,1,475 -"8051",0,1,0,75,1,0,5,0,11,1,1,1,475 -"8052",0,1,0,66,5,0,5,0,12,1,1,1,475 -"8053",0,1,1,44,1,0,5,0,9,1,1,1,475 -"8054",0,1,1,69,2,0,5,0,9,1,1,1,475 -"8055",0,1,0,59,2,0,5,0,11,1,1,1,475 -"8056",0,1,1,52,3,0,5,0,12,1,1,1,475 -"8057",1,0,0,60,1,0,5,0,8,1,0,1,475 -"8058",0,0,1,57,1,0,5,0,12,1,1,1,475 -"8059",0,1,1,61,1,0,5,0,10,1,0,1,475 -"8060",0,1,1,51,2,0,5,0,12,1,0,1,475 -"8061",0,1,1,59,1,0,5,0,12,1,1,1,475 -"8062",0,1,0,52,1,0,5,0,13,1,1,1,475 -"8063",0,1,1,48,1,1,4,0,10,2,0,0,476 -"8064",0,1,0,52,1,1,4,0,10,2,0,0,476 -"8065",0,1,1,58,2,1,4,1,7,2,0,0,476 -"8066",0,1,0,69,1,1,4,0,11,2,1,0,476 -"8067",0,1,0,69,2,1,4,1,12,2,1,0,476 -"8068",0,1,0,43,5,1,4,1,10,2,0,0,476 -"8069",0,0,1,55,1,1,4,0,11,2,0,0,476 -"8070",0,0,0,60,1,1,4,1,9,2,1,0,476 -"8071",0,0,1,45,2,1,4,1,8,2,0,0,476 -"8072",0,1,1,56,1,1,4,0,11,2,1,0,476 -"8073",0,1,1,44,5,1,4,0,12,2,1,0,476 -"8074",0,1,1,50,1,1,4,0,10,2,1,0,476 -"8075",0,1,1,72,2,1,4,0,13,2,0,0,476 -"8076",0,1,0,51,2,1,4,1,9,2,0,0,476 -"8077",0,1,0,53,2,1,4,0,10,2,0,0,476 -"8078",0,1,1,49,2,1,4,1,11,2,1,0,476 -"8079",1,1,1,53,2,1,4,0,11,2,1,0,476 -"8080",0,1,0,49,1,1,4,1,11,2,1,0,476 -"8081",0,1,1,52,2,1,4,0,10,2,1,0,476 -"8082",0,1,0,35,2,1,4,1,7,7,0,0,477 -"8083",0,1,0,36,2,1,4,1,7,7,0,0,477 -"8084",0,1,0,46,4,1,4,1,8,7,0,0,477 -"8085",0,1,0,38,5,1,4,0,8,7,0,0,477 -"8086",0,1,0,41,2,1,4,1,5,7,0,0,477 -"8087",0,1,0,52,3,1,4,0,5,7,0,0,477 -"8088",0,1,0,46,2,1,4,1,9,7,0,0,477 -"8089",1,1,0,52,4,1,4,0,5,7,0,0,477 -"8090",0,1,0,25,1,1,4,0,6,7,0,0,477 -"8091",0,0,0,45,2,1,4,1,8,7,0,0,477 -"8092",0,1,0,40,4,1,4,0,6,7,0,0,477 -"8093",0,1,1,35,2,1,4,1,7,7,0,0,477 -"8094",0,1,0,48,2,1,4,1,8,7,0,0,477 -"8095",0,1,1,28,3,1,4,1,5,7,0,0,477 -"8096",0,1,0,49,2,1,4,0,6,7,1,0,477 -"8097",0,1,0,31,1,1,4,1,2,7,0,0,477 -"8098",0,1,1,29,3,1,4,1,9,7,0,0,477 -"8099",0,1,0,35,5,1,4,1,8,7,1,0,477 -"8100",0,1,0,56,2,1,4,1,7,7,0,0,477 -"8101",0,1,1,42,5,1,4,1,11,5,0,0,478 -"8102",0,1,1,36,2,1,4,1,8,5,0,0,478 -"8103",0,1,0,68,3,1,4,0,9,5,1,0,478 -"8104",1,1,0,44,1,1,4,0,10,5,1,0,478 -"8105",0,1,0,60,5,1,4,1,6,5,0,0,478 -"8106",0,1,1,50,2,1,4,0,8,5,0,0,478 -"8107",0,1,0,67,4,1,4,0,6,5,0,0,478 -"8108",0,1,0,46,5,1,4,1,6,5,1,0,478 -"8109",0,1,1,56,4,1,4,0,6,5,0,0,478 -"8110",0,0,1,49,1,1,4,0,4,5,0,0,478 -"8111",0,1,0,38,3,1,4,0,11,5,0,0,478 -"8112",1,0,1,54,3,1,4,0,5,5,0,0,478 -"8113",0,1,0,64,3,1,4,0,3,5,0,0,478 -"8114",0,1,0,46,2,1,4,0,7,5,0,0,478 -"8115",0,1,0,49,2,1,4,0,5,5,0,0,478 -"8116",0,0,1,36,1,1,4,0,11,5,0,0,478 -"8117",1,1,0,53,3,1,4,0,5,5,0,0,478 -"8118",1,0,1,51,3,1,4,0,6,5,0,0,478 -"8119",0,1,0,43,5,1,4,0,8,3,0,0,479 -"8120",0,1,0,46,1,1,4,1,10,3,0,0,479 -"8121",0,1,0,52,3,1,4,1,10,3,0,0,479 -"8122",0,1,0,50,3,1,4,1,10,3,0,0,479 -"8123",0,1,0,54,1,1,4,0,8,3,0,0,479 -"8124",0,1,0,53,2,1,4,1,9,3,0,0,479 -"8125",0,1,0,70,1,1,4,1,9,3,1,0,479 -"8126",0,1,0,51,2,1,4,1,10,3,1,0,479 -"8127",0,1,1,38,3,1,4,1,8,3,0,0,479 -"8128",0,1,0,58,1,1,4,0,7,3,0,0,479 -"8129",0,1,1,56,1,1,4,0,12,3,1,0,479 -"8130",0,1,1,43,1,1,4,0,13,3,1,0,479 -"8131",0,1,0,54,1,1,4,1,10,3,0,0,479 -"8132",0,1,1,42,1,1,4,0,11,3,0,0,479 -"8133",0,1,1,62,2,1,4,1,11,3,1,0,479 -"8134",0,1,1,55,1,1,4,0,9,3,0,0,479 -"8135",1,1,0,54,3,1,4,0,8,3,1,0,479 -"8136",0,1,0,37,1,1,4,1,3,3,0,0,479 -"8137",0,1,0,48,1,1,4,0,10,3,0,0,479 -"8138",1,1,1,43,2,1,4,1,9,3,0,0,479 -"8139",0,1,1,51,4,1,4,1,5,3,0,0,479 -"8140",0,0,1,46,4,1,4,1,7,3,0,0,479 -"8141",0,1,0,44,1,1,4,1,10,3,0,0,479 -"8142",0,1,0,63,1,1,3,0,9,2,1,0,480 -"8143",0,1,1,51,1,1,3,1,10,2,0,0,480 -"8144",0,1,0,62,2,1,3,0,10,2,0,0,480 -"8145",0,0,1,50,2,1,3,1,10,2,1,0,480 -"8146",0,1,1,44,2,1,3,1,11,2,0,0,480 -"8147",0,1,1,60,3,1,3,1,8,2,0,0,480 -"8148",1,0,1,39,3,1,3,1,12,2,0,0,480 -"8149",0,1,1,48,2,1,3,0,10,2,0,0,480 -"8150",0,1,1,54,1,1,3,0,11,2,0,0,480 -"8151",0,1,0,61,2,1,3,1,12,2,1,0,480 -"8152",0,0,0,45,4,1,3,1,10,2,0,0,480 -"8153",0,1,0,53,1,1,3,1,7,2,1,0,480 -"8154",1,0,1,46,5,1,3,0,9,2,0,0,480 -"8155",0,0,0,55,3,1,3,0,10,2,0,0,480 -"8156",0,1,0,58,2,1,3,1,7,2,0,0,480 -"8157",1,1,1,40,2,1,3,0,10,2,0,0,480 -"8158",0,0,0,48,3,1,3,1,8,2,0,0,480 -"8159",0,1,0,46,2,1,3,0,12,2,0,0,480 -"8160",0,0,0,54,5,1,3,1,5,2,0,0,480 -"8161",1,1,1,59,3,1,3,0,10,2,0,0,480 -"8162",0,1,1,61,2,1,3,0,9,2,0,0,480 -"8163",0,1,0,55,3,1,4,1,11,3,1,0,481 -"8164",0,1,0,61,3,1,4,0,12,3,1,0,481 -"8165",0,0,1,62,5,1,4,0,10,3,1,0,481 -"8166",0,1,1,68,2,1,4,1,7,3,1,0,481 -"8167",0,1,1,63,1,1,4,1,5,3,0,0,481 -"8168",0,1,0,80,3,1,4,1,8,3,1,0,481 -"8169",0,1,0,54,5,1,4,1,6,3,0,0,481 -"8170",0,1,0,62,1,1,4,1,12,3,1,0,481 -"8171",0,1,1,51,5,1,4,0,3,3,0,0,481 -"8172",0,0,0,62,3,1,4,0,9,3,1,0,481 -"8173",0,1,0,62,1,1,4,1,8,5,1,0,482 -"8174",0,1,1,54,2,1,4,1,9,5,1,0,482 -"8175",0,1,0,57,1,1,4,1,9,5,1,0,482 -"8176",0,1,0,45,2,1,4,0,7,5,0,0,482 -"8177",0,1,0,49,3,1,4,1,9,5,0,0,482 -"8178",0,1,0,45,2,1,4,1,9,5,0,0,482 -"8179",1,1,1,59,3,1,4,1,8,5,0,0,482 -"8180",0,1,1,60,1,1,4,1,9,5,1,0,482 -"8181",0,1,1,66,1,1,4,1,9,5,1,0,482 -"8182",1,1,1,53,2,1,4,0,4,5,0,0,482 -"8183",1,1,1,49,2,1,4,0,9,5,0,0,482 -"8184",0,1,1,64,1,1,4,1,9,5,1,0,482 -"8185",0,1,1,60,1,1,4,0,11,5,1,0,482 -"8186",0,1,1,48,1,1,4,1,11,5,0,0,482 -"8187",0,1,0,47,1,1,4,0,5,5,0,0,482 -"8188",0,1,0,53,1,1,4,1,10,5,1,0,482 -"8189",1,1,1,48,2,1,4,0,5,5,0,0,482 -"8190",0,1,1,38,1,1,4,1,9,5,0,0,482 -"8191",0,1,0,59,1,1,4,1,9,5,0,0,482 -"8192",0,1,1,59,1,1,4,1,10,5,0,0,482 -"8193",0,0,0,46,2,1,4,0,10,5,1,0,482 -"8194",0,1,1,44,2,1,5,1,9,4,0,0,483 -"8195",0,1,0,58,3,1,5,0,9,4,0,0,483 -"8196",0,1,1,40,4,1,5,1,8,4,0,0,483 -"8197",0,1,0,53,5,1,5,0,7,4,0,0,483 -"8198",0,1,1,59,1,1,5,0,9,4,1,0,483 -"8199",0,1,0,48,3,1,5,1,12,4,0,0,483 -"8200",0,1,1,59,3,1,5,1,10,4,0,0,483 -"8201",0,1,0,51,4,1,5,0,11,4,0,0,483 -"8202",0,1,0,62,1,1,5,0,6,4,0,0,483 -"8203",0,1,0,53,2,1,5,0,5,4,1,0,483 -"8204",0,1,0,49,2,1,5,1,8,4,1,0,483 -"8205",0,1,0,57,1,1,5,1,11,4,1,0,483 -"8206",0,1,0,46,2,1,5,0,7,4,0,0,483 -"8207",0,1,1,65,3,1,5,1,7,4,0,0,483 -"8208",0,1,1,53,2,1,5,1,8,4,0,0,483 -"8209",0,1,0,45,2,1,5,1,11,4,1,0,483 -"8210",0,1,1,62,2,1,5,0,10,4,1,0,483 -"8211",0,1,0,46,3,1,5,1,13,4,0,0,483 -"8212",1,1,1,49,2,1,5,1,10,4,0,0,483 -"8213",0,1,1,41,5,1,5,1,3,4,0,0,483 -"8214",0,1,0,49,2,1,5,1,12,4,0,0,483 -"8215",0,1,1,57,1,1,4,1,9,2,1,0,484 -"8216",0,0,0,48,2,1,4,1,9,2,0,0,484 -"8217",0,1,1,57,3,1,4,1,10,2,1,0,484 -"8218",0,1,0,49,2,1,4,0,11,2,1,0,484 -"8219",0,1,1,50,2,1,4,1,8,2,1,0,484 -"8220",0,1,0,59,1,1,4,1,9,2,0,0,484 -"8221",0,1,0,48,4,1,4,1,8,2,0,0,484 -"8222",0,1,1,43,2,1,4,1,11,2,0,0,484 -"8223",0,1,0,34,2,1,4,1,8,2,0,0,484 -"8224",0,1,0,53,1,1,4,1,10,2,1,0,484 -"8225",0,1,0,54,1,1,4,1,12,2,1,0,484 -"8226",0,1,0,64,1,1,4,0,9,2,0,0,484 -"8227",0,1,0,65,1,1,4,0,8,2,1,0,484 -"8228",0,0,1,61,3,1,4,1,11,2,0,0,484 -"8229",0,1,0,60,2,1,4,0,9,2,0,0,484 -"8230",0,0,0,62,3,1,4,0,9,2,0,0,484 -"8231",0,1,1,48,3,1,4,1,5,4,1,0,485 -"8232",0,1,1,40,2,1,4,1,6,4,0,0,485 -"8233",0,1,0,46,2,1,4,1,10,4,0,0,485 -"8234",0,0,0,50,3,1,4,0,8,4,0,0,485 -"8235",0,1,0,44,2,1,4,0,10,4,0,0,485 -"8236",0,1,0,56,2,1,4,0,10,4,0,0,485 -"8237",0,1,0,45,1,1,4,0,7,4,0,0,485 -"8238",0,1,1,49,2,1,4,1,10,4,0,0,485 -"8239",0,0,0,52,2,1,4,0,12,4,0,0,485 -"8240",0,1,0,57,3,1,4,1,5,4,0,0,485 -"8241",0,1,0,29,1,1,4,1,2,4,1,0,485 -"8242",0,1,0,49,1,1,4,1,9,4,0,0,485 -"8243",1,0,1,45,3,1,4,0,6,4,1,0,485 -"8244",0,1,0,35,2,1,4,0,2,4,0,0,485 -"8245",0,1,1,41,2,1,4,0,10,4,0,0,485 -"8246",1,1,0,50,2,1,4,1,8,4,0,0,485 -"8247",0,1,0,64,2,1,4,1,12,4,1,0,485 -"8248",0,1,1,46,3,1,4,1,5,4,0,0,485 -"8249",0,1,0,54,3,1,4,1,7,4,1,0,485 -"8250",0,1,0,39,2,1,4,0,9,4,0,0,485 -"8251",0,1,1,42,1,1,4,0,9,4,1,0,485 -"8252",1,1,1,39,3,1,4,0,9,4,0,0,485 -"8253",0,1,0,50,2,1,5,0,10,1,0,1,486 -"8254",0,1,0,63,3,1,5,1,11,1,0,1,486 -"8255",1,1,0,52,5,1,5,0,9,1,1,1,486 -"8256",0,1,0,48,2,1,5,0,10,1,1,1,486 -"8257",0,1,1,70,1,1,5,0,13,1,1,1,486 -"8258",0,1,0,49,3,1,5,0,10,1,1,1,486 -"8259",0,1,0,44,3,1,5,0,10,1,1,1,486 -"8260",0,1,0,59,2,1,5,1,6,1,0,1,486 -"8261",0,1,0,60,3,1,5,1,9,1,0,1,486 -"8262",0,1,0,48,2,1,5,1,11,1,0,1,486 -"8263",0,1,1,56,1,1,5,1,9,1,0,1,486 -"8264",0,1,0,43,3,1,5,1,10,1,1,1,486 -"8265",0,1,1,73,2,1,5,0,12,1,1,1,486 -"8266",0,1,0,54,3,1,5,0,13,1,1,1,486 -"8267",0,1,0,46,3,1,5,1,10,1,1,1,486 -"8268",1,1,0,66,2,1,3,0,9,1,0,0,487 -"8269",0,1,1,72,1,1,3,0,10,1,0,0,487 -"8270",0,1,0,55,2,1,3,0,9,1,0,0,487 -"8271",1,1,0,71,2,1,3,0,11,1,1,0,487 -"8272",0,1,0,69,3,1,3,0,10,1,1,0,487 -"8273",0,1,0,59,2,1,3,0,12,1,0,0,487 -"8274",0,1,0,36,5,1,3,0,11,7,0,0,488 -"8275",0,1,0,51,2,1,3,0,10,7,1,0,488 -"8276",0,1,0,46,3,1,3,0,10,7,0,0,488 -"8277",0,1,0,53,5,1,3,1,6,7,0,0,488 -"8278",0,1,0,47,4,1,3,0,8,7,0,0,488 -"8279",0,1,0,56,5,1,3,1,11,7,1,0,488 -"8280",0,1,0,42,3,1,3,1,7,7,0,0,488 -"8281",1,1,1,41,2,1,3,0,2,7,0,0,488 -"8282",0,1,1,39,4,1,3,1,9,7,0,0,488 -"8283",0,1,0,39,3,1,3,1,7,7,0,0,488 -"8284",0,1,0,44,5,1,3,0,10,7,0,0,488 -"8285",0,1,1,43,1,1,3,0,7,7,0,0,488 -"8286",1,1,0,52,1,1,4,0,9,5,0,0,489 -"8287",0,1,1,39,2,1,4,1,9,5,0,0,489 -"8288",0,1,1,48,3,1,4,1,10,5,0,0,489 -"8289",1,1,0,51,2,1,4,0,9,5,0,0,489 -"8290",0,1,1,60,1,1,4,0,6,5,0,0,489 -"8291",1,1,1,42,1,1,4,0,5,5,0,0,489 -"8292",1,0,1,41,5,1,4,1,2,5,0,0,489 -"8293",0,1,0,46,2,1,4,0,9,5,1,0,489 -"8294",0,1,0,38,3,1,4,1,10,5,0,0,489 -"8295",0,1,0,45,2,1,4,1,7,5,0,0,489 -"8296",0,1,1,60,2,1,4,0,9,5,0,0,489 -"8297",0,1,0,46,1,1,4,1,3,5,0,0,489 -"8298",0,0,1,40,5,1,4,1,7,5,0,0,489 -"8299",0,1,0,40,1,1,4,0,9,5,0,0,489 -"8300",0,1,0,44,1,1,4,1,8,5,0,0,489 -"8301",0,1,0,43,2,1,4,0,10,5,0,0,489 -"8302",1,0,0,50,2,1,4,0,7,5,0,0,489 -"8303",0,1,0,48,3,1,4,1,6,5,1,0,489 -"8304",0,1,0,59,2,1,4,1,9,5,0,0,489 -"8305",1,1,1,40,1,1,4,0,6,5,0,0,489 -"8306",0,1,1,49,1,1,4,0,10,5,0,0,489 -"8307",0,1,1,62,1,1,4,1,9,5,0,0,489 -"8308",0,1,0,61,2,0,3,0,13,1,0,0,490 -"8309",1,1,1,60,1,0,3,0,12,1,1,0,490 -"8310",0,0,1,48,1,0,3,0,7,1,0,0,490 -"8311",0,1,0,49,1,0,3,0,12,1,1,0,490 -"8312",0,1,0,49,1,0,3,1,12,1,1,0,490 -"8313",1,1,0,49,1,0,3,0,4,1,0,0,490 -"8314",0,1,0,46,2,0,3,0,11,1,0,0,490 -"8315",0,1,0,51,1,0,3,0,10,1,0,0,490 -"8316",0,0,0,58,1,0,3,0,13,1,1,0,490 -"8317",1,1,1,54,1,0,3,0,11,1,1,0,490 -"8318",1,1,0,69,2,0,3,0,9,1,0,0,490 -"8319",0,1,1,53,2,1,4,0,8,6,1,1,491 -"8320",0,1,0,54,1,1,4,0,8,6,0,1,491 -"8321",0,1,0,41,2,1,4,0,10,6,0,1,491 -"8322",0,1,0,47,5,1,4,0,10,6,0,1,491 -"8323",0,1,0,43,1,1,4,1,8,6,0,1,491 -"8324",0,1,0,46,3,1,4,1,8,6,1,1,491 -"8325",0,1,0,55,2,1,4,1,7,6,0,1,491 -"8326",0,1,0,44,3,1,4,0,7,6,0,1,491 -"8327",0,1,0,55,2,1,4,1,5,6,0,1,491 -"8328",0,1,1,41,2,1,4,0,6,6,0,1,491 -"8329",0,1,1,48,1,1,4,0,7,6,0,1,491 -"8330",0,1,0,53,1,1,4,1,5,6,0,1,491 -"8331",0,1,0,44,1,1,4,0,11,6,0,1,491 -"8332",1,1,0,41,2,1,4,1,4,6,0,1,491 -"8333",0,1,1,42,1,1,4,0,2,6,0,1,491 -"8334",1,0,1,47,3,1,5,0,9,3,0,0,492 -"8335",0,1,0,60,1,1,5,0,12,3,0,0,492 -"8336",0,1,0,57,2,1,5,0,10,3,0,0,492 -"8337",0,1,0,42,2,1,5,0,12,3,1,0,492 -"8338",0,1,0,48,2,1,5,1,11,3,0,0,492 -"8339",0,1,1,51,5,1,5,1,10,3,0,0,492 -"8340",0,1,0,55,1,1,5,1,12,3,1,0,492 -"8341",0,1,1,51,1,1,5,1,9,3,0,0,492 -"8342",0,1,1,60,2,1,5,1,10,3,0,0,492 -"8343",0,1,1,56,5,1,5,1,10,3,1,0,492 -"8344",0,1,1,61,1,1,5,1,9,3,0,0,492 -"8345",0,1,0,61,2,1,5,0,8,3,0,0,492 -"8346",1,1,1,30,3,1,5,0,10,3,0,0,492 -"8347",1,0,1,31,3,1,5,0,2,3,0,0,492 -"8348",0,0,0,53,1,1,5,0,9,3,0,0,492 -"8349",0,1,0,42,1,1,5,1,9,3,0,0,492 -"8350",0,1,1,61,2,1,5,1,9,3,0,0,492 -"8351",0,1,0,40,1,1,5,1,9,3,0,0,492 -"8352",0,0,1,47,4,1,5,0,8,3,1,0,492 -"8353",0,1,1,50,2,1,5,1,11,3,1,0,492 -"8354",0,1,1,46,3,1,3,1,9,4,1,0,493 -"8355",0,1,1,58,4,1,3,1,9,4,0,0,493 -"8356",1,0,1,53,2,1,3,0,7,4,0,0,493 -"8357",0,1,1,53,2,1,3,1,8,4,0,0,493 -"8358",0,1,1,42,2,1,3,0,7,4,0,0,493 -"8359",0,0,1,38,2,1,3,0,9,4,0,0,493 -"8360",0,1,0,65,1,1,3,1,9,4,1,0,493 -"8361",0,1,1,53,2,1,3,1,9,4,0,0,493 -"8362",0,1,1,47,3,1,3,0,9,4,0,0,493 -"8363",0,1,1,50,3,1,3,1,8,4,0,0,493 -"8364",1,1,1,46,3,1,3,0,6,4,0,0,493 -"8365",1,1,1,61,1,1,3,0,8,4,0,0,493 -"8366",0,1,0,42,3,1,3,1,4,4,0,0,493 -"8367",0,1,0,55,1,1,3,1,8,4,0,0,493 -"8368",0,1,1,54,1,1,3,1,9,4,0,0,493 -"8369",0,0,1,53,5,1,3,0,9,4,0,0,493 -"8370",0,1,1,45,2,1,3,1,11,4,0,0,493 -"8371",0,1,1,60,2,1,3,1,8,4,0,0,493 -"8372",0,0,0,60,3,1,3,0,9,4,1,0,493 -"8373",0,1,1,37,2,1,3,0,7,4,0,0,493 -"8374",0,1,1,38,1,1,3,1,9,4,0,0,493 -"8375",0,1,0,51,2,1,3,1,10,4,0,0,493 -"8376",0,1,1,58,1,1,3,1,9,4,1,0,493 -"8377",1,1,1,42,2,1,3,1,8,4,0,0,493 -"8378",0,1,1,49,2,1,3,0,8,4,1,0,493 -"8379",0,1,1,48,1,1,3,1,9,4,0,0,493 -"8380",1,1,1,46,2,1,3,0,10,4,0,0,493 -"8381",0,1,1,39,4,1,4,1,8,6,0,0,494 -"8382",1,1,0,44,1,1,4,1,8,6,0,0,494 -"8383",1,1,0,44,1,1,4,1,6,6,0,0,494 -"8384",0,1,0,60,2,1,4,1,9,6,0,0,494 -"8385",0,0,0,51,2,1,4,1,8,6,0,0,494 -"8386",0,1,0,39,2,1,4,0,3,6,0,0,494 -"8387",0,1,0,40,3,1,4,0,9,6,1,0,494 -"8388",0,1,0,32,2,1,4,0,5,6,0,0,494 -"8389",0,1,0,25,3,1,4,0,5,6,0,0,494 -"8390",0,1,0,47,3,1,4,0,6,6,0,0,494 -"8391",0,1,0,56,1,1,4,0,6,6,0,0,494 -"8392",0,1,0,54,3,1,4,0,9,6,0,0,494 -"8393",0,1,0,34,3,1,4,0,7,6,0,0,494 -"8394",0,1,0,49,1,1,4,0,8,6,0,0,494 -"8395",0,1,0,46,1,1,4,1,7,6,0,0,494 -"8396",1,1,1,59,3,1,4,0,11,1,0,1,495 -"8397",1,1,0,53,1,1,4,0,12,1,0,1,495 -"8398",0,1,0,46,1,1,4,1,11,1,1,1,495 -"8399",0,1,1,56,1,1,4,0,12,1,1,1,495 -"8400",0,1,0,47,5,1,4,1,10,1,1,1,495 -"8401",0,1,0,73,1,1,4,0,12,1,1,1,495 -"8402",0,0,0,38,1,1,4,1,11,1,0,1,495 -"8403",0,1,0,46,2,1,4,1,11,1,1,1,495 -"8404",0,1,0,46,2,1,4,0,11,1,1,1,495 -"8405",1,1,0,61,3,1,4,0,13,1,1,1,495 -"8406",0,1,1,57,5,1,4,0,8,1,0,1,495 -"8407",1,1,0,68,2,1,4,0,12,1,1,1,495 -"8408",1,0,0,53,3,1,4,0,12,1,0,1,495 -"8409",0,1,0,39,2,1,4,1,13,1,1,1,495 -"8410",0,0,0,47,1,1,4,0,11,1,1,1,495 -"8411",0,0,1,67,2,1,4,1,10,1,1,1,495 -"8412",0,1,0,76,5,1,4,0,9,1,1,1,495 -"8413",0,1,1,52,2,1,4,0,10,1,0,1,495 -"8414",0,1,0,65,2,1,4,1,11,1,1,1,495 -"8415",0,1,0,41,4,1,4,0,9,1,1,1,495 -"8416",0,0,0,61,2,1,4,0,13,1,1,1,495 -"8417",0,1,0,56,2,1,4,0,10,3,1,0,496 -"8418",1,1,0,54,3,1,4,0,10,3,0,0,496 -"8419",1,1,0,52,1,1,4,1,7,3,1,0,496 -"8420",0,1,1,51,1,1,4,0,8,3,1,0,496 -"8421",0,1,1,56,2,1,4,1,11,3,0,0,496 -"8422",0,1,0,51,2,1,4,1,12,3,0,0,496 -"8423",0,0,1,53,3,1,4,1,7,3,0,0,496 -"8424",0,1,1,52,2,1,4,1,8,3,0,0,496 -"8425",0,0,1,59,2,1,4,0,10,3,1,0,496 -"8426",0,1,1,61,4,1,5,0,10,2,1,0,497 -"8427",0,1,0,63,5,1,5,1,10,2,1,0,497 -"8428",0,1,1,69,3,1,5,0,9,2,1,0,497 -"8429",1,1,0,58,5,1,5,0,9,2,0,0,497 -"8430",0,1,0,57,5,1,5,1,12,2,1,0,497 -"8431",0,1,1,60,2,1,5,1,10,2,0,0,497 -"8432",0,1,1,63,2,1,5,1,12,2,0,0,497 -"8433",0,0,1,54,2,1,5,0,10,2,1,0,497 -"8434",0,1,0,69,1,1,5,1,10,2,1,0,497 -"8435",0,1,0,69,1,1,5,1,7,2,0,0,497 -"8436",0,1,0,49,1,1,5,1,11,2,1,0,497 -"8437",0,1,0,65,2,1,5,1,10,2,1,0,497 -"8438",0,1,1,59,2,1,5,1,9,2,1,0,497 -"8439",1,1,1,69,3,1,5,0,9,2,1,0,497 -"8440",0,1,1,61,1,1,5,0,12,2,1,0,497 -"8441",0,1,1,59,1,1,5,1,9,2,1,0,497 -"8442",0,1,0,63,2,1,5,1,9,2,1,0,497 -"8443",0,1,1,57,2,1,5,0,12,2,1,0,497 -"8444",0,1,1,65,3,1,5,0,11,2,1,0,497 -"8445",0,1,0,58,1,1,5,1,5,2,1,0,497 -"8446",0,1,0,60,2,1,3,0,10,2,0,0,498 -"8447",0,1,0,66,2,1,3,0,10,2,0,0,498 -"8448",0,1,0,42,2,1,3,1,10,2,1,0,498 -"8449",0,1,0,56,1,1,3,0,12,2,0,0,498 -"8450",0,1,0,57,3,1,3,1,10,2,0,0,498 -"8451",1,1,1,47,3,1,3,1,6,2,0,0,498 -"8452",0,1,0,51,1,1,3,1,9,2,0,0,498 -"8453",0,1,1,46,2,1,3,1,10,2,1,0,498 -"8454",0,1,0,59,2,1,3,1,12,2,0,0,498 -"8455",0,1,0,66,5,1,3,1,8,2,0,0,498 -"8456",1,0,1,25,4,1,3,0,6,2,0,0,498 -"8457",0,1,1,52,3,1,3,0,3,2,0,0,498 -"8458",0,1,0,34,2,1,3,1,8,2,0,0,498 -"8459",0,0,0,50,1,1,3,0,10,2,1,0,498 -"8460",1,1,0,57,3,1,3,0,11,2,0,0,498 -"8461",0,1,0,47,1,1,3,1,9,2,0,0,498 -"8462",0,1,0,55,2,1,3,1,10,2,0,0,498 -"8463",0,1,0,59,1,1,3,1,6,2,0,0,498 -"8464",0,1,0,55,1,1,3,0,10,2,0,0,498 -"8465",0,1,0,65,1,1,3,0,9,2,0,0,498 -"8466",0,1,0,38,3,1,3,1,10,2,0,0,498 -"8467",0,1,1,47,2,1,3,1,9,2,0,0,498 -"8468",0,0,1,61,5,1,3,1,8,2,1,0,498 -"8469",1,1,1,43,1,1,3,1,9,3,0,0,499 -"8470",0,1,1,56,2,1,3,0,8,3,0,0,499 -"8471",0,1,1,49,5,1,3,0,9,3,0,0,499 -"8472",0,1,0,42,2,1,3,1,11,3,0,0,499 -"8473",0,1,0,58,1,1,3,0,9,3,0,0,499 -"8474",0,1,1,45,3,1,3,1,9,3,0,0,499 -"8475",0,1,1,59,2,1,3,0,5,3,0,0,499 -"8476",0,1,0,50,2,1,3,1,11,3,0,0,499 -"8477",1,1,1,49,2,1,3,0,9,3,0,0,499 -"8478",0,1,1,63,2,1,3,1,9,3,1,0,499 -"8479",0,1,0,58,1,1,3,0,9,3,0,0,499 -"8480",0,1,1,57,2,1,3,1,10,3,1,0,499 -"8481",0,1,0,44,2,1,3,1,3,3,0,0,499 -"8482",1,1,0,54,1,1,3,0,9,2,0,0,500 -"8483",0,1,0,47,2,1,3,1,7,2,0,0,500 -"8484",0,1,1,64,2,1,3,1,11,2,0,0,500 -"8485",0,1,1,62,1,1,3,1,12,2,1,0,500 -"8486",1,1,1,43,5,1,3,0,6,2,0,0,500 -"8487",0,1,0,42,2,1,3,1,11,2,1,0,500 -"8488",0,1,0,51,1,1,3,0,7,2,0,0,500 -"8489",1,1,0,50,3,1,3,0,8,2,0,0,500 -"8490",0,1,1,62,1,1,3,0,12,2,1,0,500 -"8491",0,1,1,53,5,1,3,0,10,2,0,0,500 -"8492",1,0,1,45,3,1,3,1,4,2,0,0,500 -"8493",0,1,0,49,3,1,3,0,11,2,0,0,500 -"8494",0,1,0,64,1,1,3,1,8,2,1,0,500 -"8495",0,1,0,61,2,1,3,0,7,2,1,0,500 -"8496",0,1,0,57,2,1,3,0,10,2,0,0,500 -"8497",0,1,1,41,2,1,3,1,4,2,0,0,500 -"8498",1,0,0,41,5,1,3,0,12,2,1,0,500 -"8499",0,1,1,59,1,1,3,0,10,2,0,0,500 -"8500",1,1,0,32,3,1,3,0,10,2,0,0,500 -"8501",0,1,1,59,5,1,3,0,10,2,0,0,500 -"8502",0,1,0,48,2,1,5,0,7,4,0,0,501 -"8503",0,1,0,49,1,1,5,0,10,4,0,0,501 -"8504",0,1,0,51,2,1,5,0,11,4,0,0,501 -"8505",0,1,0,58,2,1,5,1,9,4,0,0,501 -"8506",0,0,0,61,1,1,5,0,8,4,1,0,501 -"8507",0,1,0,49,3,1,5,1,8,4,0,0,501 -"8508",0,0,0,40,2,1,5,0,10,4,1,0,501 -"8509",0,1,0,46,2,1,5,1,8,4,1,0,501 -"8510",0,1,1,57,1,1,5,1,10,4,1,0,501 -"8511",0,1,1,54,2,1,5,1,10,4,0,0,501 -"8512",0,1,0,42,1,1,5,1,8,4,1,0,501 -"8513",0,1,1,71,2,1,5,1,11,4,0,0,501 -"8514",0,1,1,56,3,1,5,0,6,4,0,0,501 -"8515",0,1,1,49,3,1,5,1,8,4,0,0,501 -"8516",1,0,0,60,3,1,5,1,7,4,0,0,501 -"8517",0,1,0,59,1,1,5,0,11,4,1,0,501 -"8518",0,1,0,54,2,1,5,0,8,4,0,0,501 -"8519",0,0,1,63,2,1,5,0,10,4,1,0,501 -"8520",0,1,1,50,1,1,5,0,8,4,0,0,501 -"8521",0,1,1,42,1,1,5,1,3,4,0,0,501 -"8522",1,1,0,46,2,1,5,1,4,4,0,0,501 -"8523",0,1,0,55,1,1,5,0,8,4,0,0,501 -"8524",0,1,0,45,1,1,5,1,4,4,0,0,501 -"8525",0,1,1,45,2,1,5,0,7,4,1,0,501 -"8526",0,1,0,65,2,1,4,1,11,1,1,0,502 -"8527",0,1,0,51,1,1,4,0,7,1,0,0,502 -"8528",0,1,1,44,2,1,4,1,10,1,0,0,502 -"8529",0,1,0,61,2,1,4,0,8,1,0,0,502 -"8530",0,1,0,71,2,1,4,1,9,1,0,0,502 -"8531",0,1,1,61,1,1,4,0,11,1,1,0,502 -"8532",0,0,1,60,1,1,4,0,10,1,0,0,502 -"8533",0,1,0,65,1,1,4,0,10,1,0,0,502 -"8534",0,1,0,72,2,1,4,1,9,1,1,0,502 -"8535",1,0,0,56,1,1,4,0,11,1,0,0,502 -"8536",0,1,0,47,3,1,4,1,8,1,0,0,502 -"8537",0,1,1,46,3,1,4,0,4,1,0,0,502 -"8538",0,1,0,55,2,1,4,1,10,1,1,0,502 -"8539",0,1,0,59,1,1,4,1,7,1,1,0,502 -"8540",0,1,0,61,3,1,4,1,12,2,1,0,503 -"8541",0,1,1,66,3,1,4,0,10,2,1,0,503 -"8542",0,1,0,68,2,1,4,1,11,2,1,0,503 -"8543",0,1,0,62,2,1,4,1,11,2,1,0,503 -"8544",0,1,1,46,1,1,4,1,12,2,0,0,503 -"8545",0,1,1,64,1,1,4,1,10,2,1,0,503 -"8546",0,1,0,66,1,1,4,1,10,2,1,0,503 -"8547",0,1,1,63,2,1,4,1,11,2,1,0,503 -"8548",0,1,0,44,1,1,4,1,11,2,1,0,503 -"8549",0,1,1,48,2,1,4,1,8,2,0,0,503 -"8550",1,1,0,43,2,1,4,1,6,5,1,0,504 -"8551",0,1,0,41,2,1,4,1,10,5,0,0,504 -"8552",0,1,0,56,2,1,4,1,9,5,1,0,504 -"8553",0,1,0,58,3,1,4,0,10,5,0,0,504 -"8554",1,1,1,63,5,1,4,0,7,5,0,0,504 -"8555",0,1,0,58,2,1,4,1,10,5,0,0,504 -"8556",0,1,1,29,1,1,4,1,10,5,1,0,504 -"8557",0,1,0,63,1,1,4,0,10,5,1,0,504 -"8558",0,1,1,41,3,1,4,0,7,5,0,0,504 -"8559",0,1,1,50,2,1,4,1,11,5,1,0,504 -"8560",0,1,1,61,2,1,4,0,10,5,0,0,504 -"8561",0,1,0,56,3,1,4,1,12,5,1,0,504 -"8562",1,1,0,43,2,1,4,0,6,5,0,0,504 -"8563",1,0,1,44,5,1,4,0,6,5,0,0,504 -"8564",0,1,0,43,3,1,4,1,9,5,0,0,504 -"8565",0,1,1,63,2,1,4,1,9,5,0,0,504 -"8566",0,1,1,45,5,1,4,0,10,5,1,0,504 -"8567",1,1,0,56,2,1,4,0,4,5,1,0,504 -"8568",1,1,1,62,3,1,4,0,10,3,0,0,505 -"8569",0,1,1,49,1,1,4,1,10,3,0,0,505 -"8570",0,1,1,44,3,1,4,1,10,3,0,0,505 -"8571",0,1,1,49,2,1,4,0,10,3,0,0,505 -"8572",1,1,1,51,2,1,4,0,11,3,1,0,505 -"8573",1,1,1,39,5,1,4,1,8,3,0,0,505 -"8574",0,1,1,49,2,1,4,0,10,3,0,0,505 -"8575",0,1,0,58,5,1,4,0,10,3,0,0,505 -"8576",0,1,1,31,1,1,4,1,9,3,0,0,505 -"8577",0,1,1,52,1,1,4,1,9,3,1,0,505 -"8578",0,1,0,34,1,1,4,0,7,3,0,0,505 -"8579",0,0,0,40,4,1,4,1,10,3,0,0,505 -"8580",0,1,0,52,2,1,4,1,9,3,0,0,505 -"8581",0,1,0,59,2,1,4,0,12,3,0,0,505 -"8582",0,1,1,41,3,1,4,1,10,3,0,0,505 -"8583",0,1,1,50,4,1,4,1,10,3,1,0,505 -"8584",0,1,1,52,3,1,4,0,9,3,1,0,505 -"8585",0,1,0,39,3,1,4,1,9,3,0,0,505 -"8586",1,1,0,52,2,1,4,0,6,3,0,0,505 -"8587",0,1,1,62,2,1,4,1,10,3,1,0,505 -"8588",0,1,1,47,2,1,4,1,10,3,1,0,505 -"8589",0,1,1,75,2,1,4,0,11,3,1,0,505 -"8590",0,1,1,60,2,1,4,0,8,3,0,0,505 -"8591",0,1,1,53,1,1,4,1,12,3,0,0,505 -"8592",1,0,0,46,3,1,4,0,9,3,0,0,505 -"8593",0,1,0,63,2,1,4,0,11,3,1,0,505 -"8594",0,1,0,57,1,1,3,1,3,4,0,0,506 -"8595",0,1,0,44,1,1,3,1,11,4,0,0,506 -"8596",1,1,0,35,5,1,3,0,8,4,0,0,506 -"8597",0,1,0,64,1,1,3,0,10,4,1,0,506 -"8598",0,1,0,41,1,1,3,1,11,4,0,0,506 -"8599",0,1,0,54,2,1,3,1,7,4,1,0,506 -"8600",0,1,0,36,3,1,3,1,8,4,0,0,506 -"8601",0,1,1,53,1,1,3,0,12,4,0,0,506 -"8602",0,1,1,66,2,1,3,1,8,4,0,0,506 -"8603",0,1,0,74,1,1,3,0,10,4,1,0,506 -"8604",0,0,1,39,4,1,3,1,9,4,1,0,506 -"8605",0,0,0,42,2,1,3,1,9,4,0,0,506 -"8606",1,0,1,35,5,1,3,0,9,4,0,0,506 -"8607",0,1,1,68,2,1,3,1,10,4,0,0,506 -"8608",0,1,1,33,1,1,3,1,10,4,0,0,506 -"8609",0,1,0,57,1,1,3,0,9,4,0,0,506 -"8610",0,1,0,48,2,1,3,1,8,4,0,0,506 -"8611",0,1,0,60,1,1,4,0,10,1,1,0,507 -"8612",0,1,1,53,2,1,4,0,9,1,1,0,507 -"8613",0,1,0,54,3,1,4,1,12,1,1,0,507 -"8614",0,0,0,49,2,1,4,0,9,1,0,0,507 -"8615",0,0,1,47,2,1,4,1,11,1,0,0,507 -"8616",0,1,0,59,2,1,4,0,9,1,1,0,507 -"8617",0,0,0,44,1,1,4,1,10,1,1,0,507 -"8618",0,0,0,45,5,1,4,1,8,1,1,0,507 -"8619",0,1,1,56,1,1,4,1,8,1,1,0,507 -"8620",0,1,0,60,2,1,4,1,12,1,0,0,507 -"8621",0,1,0,47,1,1,4,0,8,1,1,0,507 -"8622",0,1,1,61,2,1,4,0,10,1,1,0,507 -"8623",0,1,0,50,1,1,4,1,10,1,0,0,507 -"8624",0,0,0,54,1,1,4,0,9,1,1,0,507 -"8625",0,1,0,60,3,1,4,1,13,1,1,0,507 -"8626",0,1,0,49,2,1,4,1,4,1,0,0,507 -"8627",1,0,0,49,3,1,4,1,11,1,1,0,507 -"8628",0,1,0,62,4,1,4,1,10,1,1,0,507 -"8629",0,1,0,49,2,1,4,1,8,1,0,0,507 -"8630",1,0,1,44,5,1,4,0,12,1,1,0,507 -"8631",0,1,1,52,2,1,4,1,10,1,1,0,507 -"8632",0,1,0,61,3,1,4,0,14,1,1,0,507 -"8633",0,1,1,54,2,1,3,0,9,3,0,0,508 -"8634",0,1,1,62,2,1,3,1,11,3,0,0,508 -"8635",0,1,1,55,1,1,3,1,10,3,0,0,508 -"8636",0,1,1,41,2,1,3,1,10,3,0,0,508 -"8637",0,1,0,60,2,1,3,0,11,3,0,0,508 -"8638",0,1,1,41,2,1,3,0,2,3,0,0,508 -"8639",0,1,0,63,2,1,3,0,10,3,1,0,508 -"8640",0,1,0,51,2,1,3,0,8,3,0,0,508 -"8641",0,0,1,50,4,1,3,0,8,3,1,0,508 -"8642",0,1,0,59,2,1,3,1,12,3,1,0,508 -"8643",0,0,0,51,3,1,3,1,8,3,1,0,508 -"8644",0,1,1,58,1,1,3,0,9,3,0,0,508 -"8645",0,1,0,63,2,1,3,0,10,3,0,0,508 -"8646",0,1,1,47,3,1,3,1,10,3,0,0,508 -"8647",0,1,0,53,4,1,3,0,11,3,1,0,508 -"8648",0,1,0,61,4,1,3,1,11,3,1,0,508 -"8649",0,1,1,55,1,1,3,0,10,3,0,0,508 -"8650",0,1,1,60,1,1,3,0,9,3,0,0,508 -"8651",0,1,1,53,5,1,3,0,12,3,1,0,508 -"8652",0,0,1,72,3,1,3,0,10,3,0,0,508 -"8653",0,1,1,51,2,1,3,1,12,3,0,0,508 -"8654",0,1,0,59,1,1,3,0,7,3,0,0,508 -"8655",0,1,1,52,1,1,3,0,11,3,0,0,508 -"8656",0,1,1,48,5,1,3,1,8,3,0,0,508 -"8657",0,1,0,65,2,1,3,1,10,3,0,0,508 -"8658",0,1,1,61,3,1,3,1,10,3,0,0,508 -"8659",0,0,0,51,2,1,3,0,10,3,1,0,508 -"8660",1,1,1,59,4,1,4,0,11,1,0,0,509 -"8661",0,1,0,54,2,1,4,0,9,1,1,0,509 -"8662",0,1,1,54,2,1,4,1,10,1,1,0,509 -"8663",1,0,1,56,3,1,4,0,13,1,0,0,509 -"8664",1,1,1,54,2,1,4,0,11,1,0,0,509 -"8665",0,1,1,50,2,1,4,0,10,1,0,0,509 -"8666",1,0,0,41,2,1,4,0,10,1,0,0,509 -"8667",0,1,1,62,3,1,4,0,11,1,0,0,509 -"8668",1,1,0,50,3,1,4,0,9,1,0,0,509 -"8669",1,1,0,52,1,1,4,0,11,1,0,0,509 -"8670",0,1,0,66,3,1,4,0,10,1,0,0,509 -"8671",0,1,0,49,3,1,4,1,12,1,1,0,509 -"8672",0,1,0,47,2,1,4,1,12,1,1,0,509 -"8673",0,1,0,55,3,1,4,1,7,1,0,0,509 -"8674",0,1,0,49,1,1,4,0,9,1,0,0,509 -"8675",0,1,1,44,1,1,3,1,10,4,0,0,510 -"8676",0,1,0,58,2,1,3,1,6,4,0,0,510 -"8677",0,0,1,62,2,1,3,0,9,4,0,0,510 -"8678",0,1,0,42,2,1,3,1,9,4,0,0,510 -"8679",0,1,1,60,3,1,3,1,10,4,1,0,510 -"8680",0,1,1,46,1,1,3,0,12,4,0,0,510 -"8681",0,0,1,63,2,1,3,0,7,4,0,0,510 -"8682",0,1,0,60,2,1,3,1,12,4,1,0,510 -"8683",0,1,0,59,1,1,3,0,9,4,0,0,510 -"8684",0,0,0,61,2,1,3,1,8,4,1,0,510 -"8685",0,1,1,58,2,1,3,0,10,4,1,0,510 -"8686",1,1,0,33,1,1,3,0,11,4,0,0,510 -"8687",0,0,1,47,3,1,3,0,10,4,1,0,510 -"8688",0,1,1,52,1,1,3,1,5,4,0,0,510 -"8689",0,1,1,37,1,1,3,0,8,4,0,0,510 -"8690",0,1,1,42,2,0,3,1,10,5,1,0,511 -"8691",0,1,0,67,1,0,3,1,10,5,1,0,511 -"8692",0,1,0,60,1,0,3,1,12,5,0,0,511 -"8693",0,1,0,35,2,0,3,0,8,5,1,0,511 -"8694",0,1,0,54,1,0,3,1,7,5,0,0,511 -"8695",0,1,0,51,1,1,4,1,9,5,0,0,512 -"8696",0,1,0,54,1,1,4,0,10,5,0,0,512 -"8697",0,0,0,40,2,1,4,0,9,5,0,0,512 -"8698",0,1,0,38,1,1,4,1,8,5,0,0,512 -"8699",0,1,0,53,2,1,4,1,8,5,0,0,512 -"8700",0,1,0,49,2,1,4,1,10,5,0,0,512 -"8701",0,1,1,63,2,1,4,1,10,5,1,0,512 -"8702",0,1,0,49,2,1,4,1,9,5,0,0,512 -"8703",1,0,0,54,2,1,4,0,9,5,0,0,512 -"8704",0,1,0,55,2,1,4,1,10,5,0,0,512 -"8705",0,1,0,54,1,1,4,1,10,5,1,0,512 -"8706",0,1,1,67,2,1,4,0,10,5,0,0,512 -"8707",0,1,1,39,1,1,4,1,8,5,0,0,512 -"8708",0,1,0,47,4,1,4,1,10,5,0,0,512 -"8709",0,1,1,53,1,1,4,1,9,5,0,0,512 -"8710",0,0,1,46,4,1,4,1,11,5,0,0,512 -"8711",1,1,1,67,1,1,4,0,7,5,0,0,512 -"8712",0,0,1,58,4,1,4,0,7,5,0,0,512 -"8713",1,0,1,63,2,1,4,0,10,5,0,0,512 -"8714",0,1,0,56,2,1,4,1,11,5,1,0,512 -"8715",0,0,1,54,3,1,4,0,6,5,0,0,512 -"8716",0,1,1,47,1,1,4,0,8,5,0,0,512 -"8717",0,1,0,47,1,1,3,0,9,3,0,0,513 -"8718",0,1,0,56,1,1,3,1,10,3,0,0,513 -"8719",0,1,0,49,2,1,3,1,8,3,1,0,513 -"8720",0,1,1,42,1,1,3,0,8,3,0,0,513 -"8721",0,1,1,55,4,1,3,1,10,3,0,0,513 -"8722",0,0,0,55,3,1,3,1,12,3,0,0,513 -"8723",1,1,1,60,4,1,3,0,7,3,0,0,513 -"8724",0,0,0,56,3,1,3,1,10,3,0,0,513 -"8725",0,1,0,48,3,1,3,1,12,3,1,0,513 -"8726",0,1,0,60,1,1,3,1,7,3,0,0,513 -"8727",0,1,0,62,3,1,3,0,8,3,1,0,513 -"8728",0,1,1,51,1,1,3,1,11,3,1,0,513 -"8729",0,0,0,60,2,1,3,0,10,3,0,0,513 -"8730",1,1,0,45,2,1,3,0,10,3,0,0,513 -"8731",1,1,0,50,2,1,3,0,6,3,0,0,513 -"8732",0,1,1,53,1,1,3,1,9,3,0,0,513 -"8733",0,1,1,48,4,1,3,1,9,3,0,0,513 -"8734",0,1,0,34,2,1,3,0,8,3,0,0,513 -"8735",1,1,1,37,3,1,3,0,8,3,0,0,513 -"8736",0,1,0,58,2,1,3,0,10,3,0,0,513 -"8737",0,1,1,61,1,1,3,0,9,3,1,0,513 -"8738",0,1,1,55,2,1,3,0,11,3,1,0,513 -"8739",0,1,0,44,1,1,3,0,7,3,0,0,513 -"8740",1,1,0,45,3,1,3,0,6,3,0,0,513 -"8741",0,1,1,58,2,1,5,0,10,1,0,0,514 -"8742",0,1,0,53,2,1,5,0,13,1,1,0,514 -"8743",0,1,1,57,1,1,5,1,12,1,1,0,514 -"8744",0,1,0,61,5,1,5,1,12,1,1,0,514 -"8745",0,1,0,57,2,1,5,0,12,1,0,0,514 -"8746",0,1,0,55,3,1,5,0,12,1,1,0,514 -"8747",0,1,1,62,2,1,5,0,10,1,1,0,514 -"8748",0,1,0,67,3,1,5,1,12,1,1,0,514 -"8749",0,1,0,59,1,1,5,0,13,1,1,0,514 -"8750",0,1,1,49,2,1,5,0,10,1,1,0,514 -"8751",0,1,0,61,2,1,4,0,12,1,0,1,515 -"8752",0,1,1,57,1,1,4,1,8,1,0,1,515 -"8753",0,1,1,65,2,1,4,0,8,1,1,1,515 -"8754",0,1,0,47,1,1,4,1,13,1,1,1,515 -"8755",0,1,1,48,2,1,4,1,6,1,1,1,515 -"8756",0,1,1,50,1,1,4,1,5,1,0,1,515 -"8757",0,0,1,45,3,1,4,1,5,1,1,1,515 -"8758",0,1,1,62,1,1,4,1,11,1,0,1,515 -"8759",0,1,1,77,1,1,4,0,13,1,1,1,515 -"8760",0,1,1,50,2,1,4,0,9,1,0,1,515 -"8761",0,1,0,66,1,1,4,1,9,1,0,1,515 -"8762",0,1,0,44,2,1,4,1,11,1,1,1,515 -"8763",1,1,0,58,1,1,4,0,6,1,1,1,515 -"8764",0,1,1,61,1,1,4,1,12,1,1,1,515 -"8765",0,1,1,50,2,1,4,0,9,1,0,1,515 -"8766",0,1,1,46,1,1,4,0,11,1,0,1,515 -"8767",0,0,1,61,2,1,4,0,10,1,1,1,515 -"8768",0,1,0,57,1,1,4,1,11,1,1,1,515 -"8769",0,1,1,45,2,1,4,1,8,1,0,1,515 -"8770",0,1,0,66,3,1,4,0,7,1,1,1,515 -"8771",0,1,1,66,1,1,4,1,11,1,0,1,515 -"8772",0,1,1,54,2,1,4,1,9,1,1,1,515 -"8773",0,1,1,54,2,1,4,0,11,1,0,1,515 -"8774",0,1,1,58,1,1,4,1,10,1,1,1,515 -"8775",0,1,1,59,2,1,4,1,9,7,1,0,516 -"8776",0,1,0,31,1,1,4,1,9,7,1,0,516 -"8777",0,1,0,49,2,1,4,1,9,7,0,0,516 -"8778",0,1,1,38,1,1,4,1,9,7,0,0,516 -"8779",0,1,0,51,2,1,4,1,9,7,0,0,516 -"8780",0,1,0,44,2,1,4,1,5,7,1,0,516 -"8781",0,1,0,60,2,1,4,0,12,7,1,0,516 -"8782",0,1,0,60,3,1,4,0,13,7,1,0,516 -"8783",0,1,0,41,3,1,4,1,6,7,0,0,516 -"8784",0,1,0,46,2,1,4,0,8,7,0,0,516 -"8785",0,1,0,40,1,1,4,0,6,7,0,0,516 -"8786",0,1,1,47,3,1,4,1,9,7,0,0,516 -"8787",1,1,1,50,4,1,4,0,7,7,0,0,516 -"8788",0,1,1,45,2,1,4,1,8,7,0,0,516 -"8789",0,0,0,32,4,1,4,1,8,7,1,0,516 -"8790",0,1,0,44,3,1,4,0,2,7,0,0,516 -"8791",0,1,0,63,2,1,4,1,8,7,0,0,516 -"8792",0,1,0,58,2,1,4,1,9,3,0,0,517 -"8793",0,1,0,49,1,1,4,1,9,3,0,0,517 -"8794",0,1,1,50,2,1,4,0,8,3,0,0,517 -"8795",0,1,0,56,1,1,4,1,9,3,1,0,517 -"8796",0,1,0,62,1,1,4,1,10,3,1,0,517 -"8797",1,1,0,53,3,1,4,0,12,3,0,0,517 -"8798",0,1,1,59,2,1,4,0,10,3,0,0,517 -"8799",0,1,1,56,2,1,4,0,10,3,1,0,517 -"8800",1,0,1,39,4,1,4,0,10,3,1,0,517 -"8801",0,1,1,58,2,1,4,1,11,3,0,0,517 -"8802",0,1,0,50,2,1,4,0,10,3,0,0,517 -"8803",1,0,0,43,5,1,4,1,8,3,0,0,517 -"8804",0,1,0,63,3,1,4,0,10,3,1,0,517 -"8805",1,0,0,48,3,1,4,0,10,3,0,0,517 -"8806",0,1,0,38,2,1,4,0,8,3,0,0,517 -"8807",0,1,1,50,1,1,4,1,9,3,1,0,517 -"8808",0,1,1,58,2,1,4,0,9,3,0,0,517 -"8809",0,1,1,58,1,1,4,0,9,3,0,0,517 -"8810",0,0,0,41,3,1,4,0,10,3,1,0,517 -"8811",0,1,1,60,2,1,4,0,8,3,0,0,517 -"8812",0,1,1,54,1,1,4,0,9,3,0,0,517 -"8813",0,1,0,63,2,1,4,1,11,3,0,0,517 -"8814",0,1,0,58,1,1,4,1,10,3,1,0,517 -"8815",0,0,0,42,2,1,4,0,11,3,1,0,517 -"8816",0,1,0,64,2,1,4,1,11,3,1,0,517 -"8817",0,1,0,43,2,1,4,1,5,3,0,0,517 -"8818",1,1,0,45,2,1,4,1,4,3,0,0,518 -"8819",1,1,0,54,3,1,4,1,7,3,0,0,518 -"8820",0,1,1,51,2,1,4,1,9,3,0,0,518 -"8821",0,1,0,49,1,1,4,0,10,3,0,0,518 -"8822",0,1,0,58,3,1,4,1,9,3,0,0,518 -"8823",0,1,1,51,2,1,4,1,7,3,0,0,518 -"8824",0,1,1,63,3,1,4,1,11,3,0,0,518 -"8825",0,1,0,44,2,1,4,1,9,3,1,0,518 -"8826",0,1,0,57,2,1,4,1,8,3,0,0,518 -"8827",0,1,1,51,1,1,4,1,12,3,1,0,518 -"8828",0,1,1,51,1,1,4,0,8,3,0,0,518 -"8829",0,1,0,57,2,1,4,1,13,3,0,0,518 -"8830",0,1,0,58,2,1,4,0,13,3,1,0,518 -"8831",0,1,1,51,2,1,4,1,9,3,0,0,518 -"8832",1,0,1,63,1,1,4,0,12,3,1,0,518 -"8833",0,0,0,51,1,1,4,0,12,3,1,0,518 -"8834",0,1,1,36,1,1,4,1,9,3,0,0,518 -"8835",1,1,1,46,2,1,4,0,7,3,0,0,518 -"8836",0,1,0,58,3,1,4,0,10,5,1,0,519 -"8837",0,1,0,58,2,1,4,0,10,5,1,0,519 -"8838",0,1,0,52,2,1,4,0,8,5,1,0,519 -"8839",0,1,0,54,4,1,4,1,9,5,0,0,519 -"8840",0,1,1,69,2,1,4,1,10,5,1,0,519 -"8841",0,1,0,49,5,1,4,1,10,5,0,0,519 -"8842",1,1,1,52,3,1,4,1,7,5,0,0,519 -"8843",0,1,1,61,2,1,4,1,10,5,0,0,519 -"8844",0,1,0,43,3,1,4,1,8,5,1,0,519 -"8845",0,1,0,43,2,1,4,1,6,5,0,0,519 -"8846",0,1,0,51,2,1,4,0,10,5,0,0,519 -"8847",1,1,1,61,4,1,4,0,12,5,0,0,519 -"8848",0,1,0,50,3,1,4,1,8,5,0,0,519 -"8849",1,0,1,35,3,1,5,0,11,2,1,0,520 -"8850",0,1,0,64,3,1,5,1,10,2,0,0,520 -"8851",0,1,1,52,1,1,5,1,12,2,1,0,520 -"8852",0,1,0,54,2,1,5,1,10,2,1,0,520 -"8853",0,0,1,29,1,1,5,1,6,2,0,0,520 -"8854",0,1,0,41,3,1,5,1,6,2,0,0,520 -"8855",0,1,0,60,3,1,5,0,8,2,0,0,520 -"8856",0,1,0,43,5,1,5,0,11,2,1,0,520 -"8857",0,1,0,54,2,1,5,1,10,2,0,0,520 -"8858",0,0,0,47,3,1,5,1,12,2,0,0,520 -"8859",0,1,0,57,2,1,5,0,11,2,1,0,520 -"8860",0,1,0,46,1,1,5,0,9,2,0,0,520 -"8861",0,1,0,62,1,1,5,0,9,2,0,0,520 -"8862",0,1,1,64,2,1,5,0,10,2,1,0,520 -"8863",1,1,0,51,3,1,5,1,8,2,0,0,520 -"8864",1,1,0,34,3,1,5,0,10,2,0,0,520 -"8865",0,1,0,63,2,1,5,0,11,2,1,0,520 -"8866",0,0,1,60,2,1,5,0,11,2,1,0,520 -"8867",0,0,0,54,2,1,4,0,7,1,1,0,521 -"8868",0,1,0,67,1,1,4,0,5,1,0,0,521 -"8869",0,1,0,58,3,1,4,1,11,1,0,0,521 -"8870",0,1,1,70,1,1,4,0,10,1,1,0,521 -"8871",0,1,0,49,1,1,4,1,9,1,0,0,521 -"8872",0,1,0,64,3,1,4,0,11,1,0,0,521 -"8873",0,1,1,54,3,1,4,1,9,1,1,0,521 -"8874",0,1,0,64,2,1,4,1,13,1,1,0,521 -"8875",0,1,0,47,2,1,4,1,11,1,1,0,521 -"8876",0,1,0,43,1,1,4,1,6,1,1,0,521 -"8877",0,1,0,54,2,1,4,1,8,1,0,0,521 -"8878",0,1,0,46,3,1,4,1,11,1,0,0,521 -"8879",0,1,0,46,3,1,4,0,10,1,0,0,521 -"8880",0,0,0,62,3,1,4,0,6,1,0,0,521 -"8881",0,1,0,37,3,1,4,1,8,5,0,0,522 -"8882",0,1,1,55,2,1,4,0,9,5,0,0,522 -"8883",0,1,0,48,2,1,4,0,9,5,0,0,522 -"8884",0,1,0,34,2,1,4,1,5,5,0,0,522 -"8885",0,1,0,57,3,1,4,0,7,5,0,0,522 -"8886",0,1,0,37,2,1,4,1,7,5,0,0,522 -"8887",0,1,0,41,2,1,4,1,8,5,0,0,522 -"8888",1,0,0,37,3,1,4,1,8,5,0,0,522 -"8889",0,1,0,51,2,1,4,1,8,5,0,0,522 -"8890",0,1,1,47,3,1,4,1,9,5,0,0,522 -"8891",0,1,1,46,3,1,4,1,7,5,0,0,522 -"8892",0,1,1,53,4,1,4,0,12,5,1,0,522 -"8893",0,0,1,26,2,1,4,0,10,5,0,0,522 -"8894",0,1,0,44,2,1,4,0,10,5,0,0,522 -"8895",0,1,0,32,3,1,4,1,9,5,0,0,522 -"8896",0,1,0,53,5,1,4,1,11,5,0,0,522 -"8897",0,1,0,47,2,1,4,1,9,5,0,0,522 -"8898",1,0,1,55,3,1,4,0,10,5,0,0,522 -"8899",1,0,1,34,2,1,4,1,6,4,1,0,523 -"8900",0,1,0,42,2,1,4,1,9,4,1,0,523 -"8901",0,1,0,51,1,1,4,1,10,4,1,0,523 -"8902",0,1,1,42,3,1,4,0,7,4,0,0,523 -"8903",0,1,1,57,5,1,4,0,10,4,0,0,523 -"8904",0,1,0,54,2,1,4,0,11,4,1,0,523 -"8905",0,1,0,57,2,1,4,1,8,4,1,0,523 -"8906",0,1,0,43,3,1,4,0,5,4,0,0,523 -"8907",0,1,0,55,1,1,4,1,9,4,1,0,523 -"8908",0,1,1,55,1,1,4,1,14,4,1,0,523 -"8909",0,0,1,60,2,1,4,1,10,4,1,0,523 -"8910",0,1,1,50,2,1,5,1,9,5,0,0,524 -"8911",0,1,0,49,1,1,5,1,9,5,0,0,524 -"8912",0,1,0,53,3,1,5,0,9,5,0,0,524 -"8913",1,1,1,44,5,1,5,0,6,5,0,0,524 -"8914",0,1,0,58,1,1,5,1,11,5,0,0,524 -"8915",0,1,0,76,1,1,5,0,10,5,0,0,524 -"8916",0,1,0,51,2,1,5,1,10,5,0,0,524 -"8917",0,1,0,54,2,1,5,1,10,5,0,0,524 -"8918",0,1,1,44,2,1,5,1,10,5,1,0,524 -"8919",1,1,0,47,3,1,5,0,10,5,0,0,524 -"8920",0,1,1,50,1,1,5,0,9,5,0,0,524 -"8921",0,1,0,48,2,1,5,1,10,5,0,0,524 -"8922",0,1,1,62,1,1,5,0,3,5,0,0,524 -"8923",0,1,0,54,1,1,5,0,9,5,0,0,524 -"8924",0,0,0,42,2,1,5,1,12,5,0,0,524 -"8925",0,1,1,45,5,1,5,0,8,5,0,0,524 -"8926",0,1,0,46,3,1,5,1,9,5,0,0,524 -"8927",0,1,1,53,2,1,5,1,7,5,1,0,524 -"8928",0,1,1,60,2,1,5,1,10,5,1,0,524 -"8929",0,1,0,41,2,1,3,1,10,6,1,0,525 -"8930",0,1,0,38,2,1,3,0,10,6,1,0,525 -"8931",0,1,0,33,3,1,3,0,4,6,0,0,525 -"8932",0,1,1,49,2,1,3,1,8,6,1,0,525 -"8933",0,1,0,38,2,1,3,1,8,6,0,0,525 -"8934",1,1,0,44,2,1,3,0,4,6,1,0,525 -"8935",1,1,1,61,3,1,3,0,8,6,1,0,525 -"8936",0,1,0,64,3,1,3,0,13,6,0,0,525 -"8937",0,1,0,48,2,1,3,1,12,6,1,0,525 -"8938",0,1,0,58,2,1,3,0,9,1,0,0,526 -"8939",0,1,0,50,4,1,3,1,9,1,0,0,526 -"8940",0,1,0,73,1,1,3,0,9,1,1,0,526 -"8941",0,1,0,55,2,1,3,0,14,1,1,0,526 -"8942",1,1,1,61,3,1,3,1,12,1,1,0,526 -"8943",0,1,0,72,2,1,3,0,10,1,1,0,526 -"8944",0,1,1,50,2,1,3,1,11,1,0,0,526 -"8945",0,1,0,63,2,1,3,1,10,1,1,0,526 -"8946",0,1,1,62,2,1,3,0,9,1,0,0,526 -"8947",0,1,0,50,2,1,3,1,11,1,0,0,526 -"8948",0,1,1,56,2,1,3,1,9,1,1,0,526 -"8949",0,1,0,51,1,1,3,0,8,1,0,0,526 -"8950",0,1,1,37,3,1,3,1,9,1,0,0,526 -"8951",0,1,0,65,2,1,3,1,8,1,1,0,526 -"8952",0,1,0,54,1,1,3,1,3,1,0,0,526 -"8953",0,1,1,49,2,1,3,0,10,1,0,0,526 -"8954",0,1,0,61,2,1,3,1,12,1,1,0,526 -"8955",0,1,1,56,2,1,3,1,12,1,0,0,526 -"8956",0,1,0,53,1,1,3,0,9,1,1,0,526 -"8957",0,1,0,48,1,1,3,1,9,1,1,0,526 -"8958",0,1,0,69,1,1,3,1,10,1,1,0,526 -"8959",0,1,1,40,1,1,5,0,8,1,0,0,527 -"8960",0,1,0,37,2,1,5,0,9,1,1,0,527 -"8961",1,1,0,35,3,1,3,0,10,2,1,0,528 -"8962",0,1,0,42,2,1,3,1,11,2,0,0,528 -"8963",0,1,0,46,2,1,3,0,4,2,0,0,528 -"8964",0,1,0,55,2,1,3,1,10,2,0,0,528 -"8965",0,1,0,59,3,1,3,1,10,2,1,0,528 -"8966",0,1,0,52,1,1,3,0,8,2,0,0,528 -"8967",1,1,0,41,2,1,3,1,7,2,1,0,528 -"8968",1,0,0,30,2,1,3,1,5,2,0,0,528 -"8969",1,1,1,42,2,1,3,1,6,2,1,0,528 -"8970",0,0,0,49,3,1,3,0,9,2,0,0,528 -"8971",0,1,0,51,4,1,3,1,10,2,0,0,528 -"8972",0,1,0,46,4,1,3,1,9,2,1,0,528 -"8973",0,1,0,46,3,1,3,1,10,2,0,0,528 -"8974",0,1,0,46,4,1,3,0,3,2,0,0,528 -"8975",1,1,0,45,2,1,3,0,9,2,0,0,528 -"8976",0,1,0,39,2,1,3,1,6,2,0,0,528 -"8977",0,1,0,48,2,1,3,1,9,2,0,0,528 -"8978",1,1,0,44,3,1,3,1,8,2,0,0,528 -"8979",0,0,1,48,4,1,3,0,10,7,0,0,529 -"8980",0,1,0,35,5,1,3,0,5,7,1,0,529 -"8981",0,1,1,56,2,1,3,0,5,7,1,0,529 -"8982",0,1,0,44,2,1,3,1,8,7,0,0,529 -"8983",0,1,0,41,2,1,3,1,9,7,1,0,529 -"8984",0,1,0,36,5,1,3,0,3,7,0,0,529 -"8985",0,1,0,42,5,1,3,0,8,7,0,0,529 -"8986",0,1,1,54,4,1,3,0,10,7,0,0,529 -"8987",0,1,0,40,3,1,3,0,10,7,1,0,529 -"8988",0,1,0,52,5,1,3,1,12,7,1,0,529 -"8989",1,1,0,47,2,1,3,0,10,7,0,0,529 -"8990",1,0,0,39,5,1,3,1,7,7,1,0,529 -"8991",1,0,0,40,1,1,3,1,9,7,0,0,529 -"8992",0,0,0,40,5,1,3,0,5,7,0,0,529 -"8993",0,1,0,50,5,1,3,1,7,7,1,0,529 -"8994",1,1,0,40,5,1,3,0,9,7,0,0,529 -"8995",0,1,1,47,3,1,3,1,10,7,0,0,529 -"8996",0,1,1,47,3,1,3,1,6,7,0,0,529 -"8997",0,1,0,48,2,1,3,1,2,7,0,0,529 -"8998",0,1,1,43,3,1,3,1,11,7,0,0,529 -"8999",1,1,0,38,3,1,3,0,10,7,0,0,529 -"9000",0,1,1,42,3,1,3,0,10,4,1,0,530 -"9001",0,1,1,53,1,1,3,0,9,4,0,0,530 -"9002",0,0,0,42,1,1,3,0,10,4,0,0,530 -"9003",0,1,0,67,3,1,3,1,10,4,1,0,530 -"9004",0,1,1,51,1,1,3,0,10,4,0,0,530 -"9005",0,1,1,46,2,1,3,1,9,4,0,0,530 -"9006",0,1,0,51,2,1,3,1,7,4,0,0,530 -"9007",0,0,0,34,1,1,3,1,9,4,0,0,530 -"9008",0,1,1,47,2,1,3,0,9,4,0,0,530 -"9009",0,0,0,40,3,1,3,1,9,4,0,0,530 -"9010",0,1,1,65,4,1,3,0,9,4,0,0,530 -"9011",0,1,0,45,2,1,3,0,11,4,1,0,530 -"9012",0,1,1,50,2,1,3,1,12,4,1,0,530 -"9013",1,1,1,38,2,1,3,0,10,4,1,0,530 -"9014",0,1,0,37,1,1,3,1,11,4,0,0,530 -"9015",0,0,1,46,3,1,3,0,8,4,1,0,530 -"9016",0,0,0,44,5,1,3,1,11,4,0,0,530 -"9017",1,0,0,37,3,1,3,1,8,4,0,0,530 -"9018",0,1,1,41,2,1,3,1,10,4,1,0,530 -"9019",1,1,0,44,1,1,3,0,9,4,0,0,530 -"9020",0,0,1,47,3,1,5,0,11,1,1,1,531 -"9021",0,1,0,64,1,1,5,1,9,1,0,1,531 -"9022",0,1,1,52,2,1,5,0,10,1,1,1,531 -"9023",0,1,0,50,2,1,5,1,8,1,1,1,531 -"9024",0,1,1,38,2,1,5,0,12,1,1,1,531 -"9025",0,1,1,49,2,1,5,1,12,1,1,1,531 -"9026",0,1,0,40,1,1,5,1,11,1,0,1,531 -"9027",0,1,0,53,2,1,5,1,12,1,1,1,531 -"9028",0,1,0,45,5,1,5,0,11,1,1,1,531 -"9029",0,1,0,51,2,1,5,1,11,1,1,1,531 -"9030",1,1,0,58,2,1,5,1,10,1,1,1,531 -"9031",0,0,0,55,2,1,5,0,12,1,1,1,531 -"9032",0,1,0,45,2,1,5,1,10,1,0,1,531 -"9033",0,1,0,50,2,1,5,1,14,1,0,1,531 -"9034",0,1,1,61,2,1,5,1,12,1,1,1,531 -"9035",0,1,0,47,2,1,5,1,11,1,0,1,531 -"9036",0,1,0,41,2,1,4,1,8,6,1,0,532 -"9037",0,1,1,38,2,1,4,0,9,6,1,0,532 -"9038",0,0,1,48,1,1,4,0,6,6,0,0,532 -"9039",0,1,0,54,1,1,4,1,7,6,0,0,532 -"9040",0,1,0,39,1,1,4,0,10,6,0,0,532 -"9041",0,1,0,49,2,1,4,1,9,6,1,0,532 -"9042",0,1,0,46,1,1,4,1,6,6,0,0,532 -"9043",0,1,0,41,2,1,4,0,6,6,0,0,532 -"9044",0,1,0,42,3,1,4,1,5,6,0,0,532 -"9045",0,1,0,45,3,1,4,1,7,5,0,0,533 -"9046",0,1,0,56,1,1,4,0,9,5,1,0,533 -"9047",0,0,0,63,5,1,4,0,5,5,1,0,533 -"9048",1,1,0,47,3,1,4,0,9,5,0,0,533 -"9049",0,1,1,50,3,1,4,0,8,5,0,0,533 -"9050",0,1,0,46,3,1,4,1,6,5,0,0,533 -"9051",0,1,0,35,3,1,4,0,2,5,0,0,533 -"9052",0,1,0,43,4,1,4,0,9,5,0,0,533 -"9053",0,1,0,43,3,1,4,1,10,5,1,0,533 -"9054",0,1,0,50,1,1,4,1,11,5,1,0,533 -"9055",0,1,0,54,1,1,4,1,9,5,1,0,533 -"9056",0,1,1,42,2,1,4,0,12,5,0,0,533 -"9057",0,1,0,49,3,1,4,1,10,5,0,0,533 -"9058",1,1,0,51,5,1,4,0,8,5,0,0,533 -"9059",1,1,0,45,3,1,4,1,8,5,0,0,533 -"9060",1,1,1,45,4,1,4,0,7,5,0,0,533 -"9061",0,1,0,51,2,1,4,0,11,5,0,0,533 -"9062",0,1,0,39,3,1,4,0,9,5,0,0,533 -"9063",0,0,0,33,4,1,4,0,9,5,0,0,533 -"9064",0,1,0,47,3,1,4,1,10,5,1,0,533 -"9065",0,1,0,41,2,1,4,1,10,5,0,0,533 -"9066",0,1,0,55,3,1,4,0,9,5,0,0,533 -"9067",0,1,1,45,1,1,4,1,11,5,0,0,533 -"9068",0,1,0,41,3,1,4,0,8,2,0,0,534 -"9069",0,1,0,41,3,1,4,0,6,2,0,0,534 -"9070",0,1,1,53,1,1,4,0,9,2,0,0,534 -"9071",0,1,1,52,4,1,4,1,12,2,1,0,534 -"9072",0,1,0,52,1,1,4,0,10,2,0,0,534 -"9073",1,0,0,57,2,1,4,0,11,2,1,0,534 -"9074",0,1,1,61,1,1,4,1,10,2,0,0,534 -"9075",0,1,0,62,1,1,4,0,11,2,1,0,534 -"9076",0,1,0,42,3,1,4,1,1,2,0,0,534 -"9077",0,1,1,80,3,1,4,1,12,2,0,0,534 -"9078",0,1,1,55,2,1,4,1,9,2,1,0,534 -"9079",1,1,0,35,2,1,4,1,7,2,0,0,534 -"9080",0,1,1,41,2,1,2,1,8,6,0,0,535 -"9081",1,1,0,51,3,1,2,0,8,6,0,0,535 -"9082",0,1,0,61,1,1,2,0,11,6,1,0,535 -"9083",0,1,0,28,1,1,2,1,9,6,0,0,535 -"9084",0,1,0,64,1,1,2,0,10,6,1,0,535 -"9085",0,1,0,56,2,1,2,1,8,6,0,0,535 -"9086",0,1,0,51,1,1,2,0,9,6,0,0,535 -"9087",0,1,0,59,2,1,2,0,9,6,1,0,535 -"9088",0,1,0,73,1,1,2,1,9,6,0,0,535 -"9089",0,1,0,57,1,1,2,1,4,6,0,0,535 -"9090",0,1,0,55,2,1,2,1,5,6,0,0,535 -"9091",0,1,0,69,2,1,2,0,9,6,1,0,535 -"9092",0,1,0,65,5,1,2,0,5,6,0,0,535 -"9093",0,1,1,51,3,1,2,0,8,6,1,0,535 -"9094",0,1,0,70,1,1,2,1,10,6,1,0,535 -"9095",0,1,0,68,2,1,2,0,9,6,0,0,535 -"9096",0,1,0,54,2,1,2,1,7,6,0,0,535 -"9097",0,0,0,46,5,1,2,1,9,6,0,0,535 -"9098",0,1,0,66,1,1,2,1,12,6,1,0,535 -"9099",1,0,0,46,5,1,2,0,8,6,0,0,535 -"9100",0,1,0,69,3,1,2,1,10,6,1,0,535 -"9101",0,1,0,56,2,1,2,1,8,6,0,0,535 -"9102",0,1,0,48,2,1,2,1,4,6,0,0,535 -"9103",0,1,0,64,2,1,2,0,11,6,0,0,535 -"9104",0,1,0,54,1,1,2,1,8,6,1,0,535 -"9105",0,1,0,48,3,1,2,0,8,6,0,0,535 -"9106",1,1,0,27,5,1,2,0,1,6,0,0,535 -"9107",0,1,0,52,3,1,2,0,10,6,0,0,535 -"9108",0,1,0,58,4,1,2,1,6,6,0,0,535 -"9109",0,1,0,51,2,1,4,1,8,3,0,0,536 -"9110",0,1,0,56,2,1,4,0,9,3,0,0,536 -"9111",0,1,1,53,1,1,4,0,12,3,1,0,536 -"9112",0,1,0,43,1,1,4,0,9,3,0,0,536 -"9113",0,1,1,47,4,1,4,1,8,3,0,0,536 -"9114",0,1,0,56,3,1,4,1,13,3,1,0,536 -"9115",0,1,1,51,3,1,4,0,10,3,0,0,536 -"9116",0,1,0,45,3,1,4,1,10,3,1,0,536 -"9117",0,1,0,50,2,1,4,1,12,3,1,0,536 -"9118",0,1,1,62,2,1,4,1,8,3,0,0,536 -"9119",0,1,1,46,1,1,4,0,7,3,0,0,536 -"9120",0,1,0,47,3,1,4,1,4,3,0,0,536 -"9121",0,1,0,48,2,1,4,1,10,3,0,0,536 -"9122",0,1,1,46,1,1,4,1,7,3,0,0,536 -"9123",0,1,0,33,3,1,4,0,7,4,0,0,537 -"9124",0,1,0,53,1,1,4,1,10,4,1,0,537 -"9125",0,0,0,64,1,1,4,1,12,4,1,0,537 -"9126",1,1,0,44,3,1,4,0,7,4,0,0,537 -"9127",0,1,1,48,3,1,4,0,9,4,1,0,537 -"9128",0,1,0,52,3,1,4,1,9,4,0,0,537 -"9129",0,1,0,40,2,1,4,1,9,4,0,0,537 -"9130",1,1,0,39,3,1,4,0,10,4,1,0,537 -"9131",0,1,0,41,1,1,4,1,9,4,1,0,537 -"9132",0,1,0,55,2,1,4,0,10,4,1,0,537 -"9133",0,1,0,48,1,1,4,1,10,4,0,0,537 -"9134",0,1,1,45,5,1,4,1,9,4,0,0,537 -"9135",0,1,1,30,2,1,4,0,9,4,0,0,537 -"9136",0,1,0,45,2,1,4,0,9,4,0,0,537 -"9137",0,1,1,51,3,1,4,0,9,4,0,0,537 -"9138",0,1,0,57,2,1,4,0,9,4,0,0,537 -"9139",0,1,0,55,1,1,4,0,5,4,1,0,537 -"9140",0,1,0,46,4,1,4,1,7,4,0,0,537 -"9141",0,1,0,53,1,1,4,1,11,4,1,0,537 -"9142",0,1,0,38,2,1,4,1,7,4,0,0,537 -"9143",0,0,0,53,1,1,4,0,12,4,1,0,537 -"9144",0,1,0,53,1,1,4,1,7,4,0,0,537 -"9145",0,1,1,58,2,1,4,0,9,3,1,0,538 -"9146",0,1,0,41,2,1,4,1,7,3,0,0,538 -"9147",1,1,1,40,5,1,4,1,3,3,0,0,538 -"9148",0,0,0,58,3,1,4,0,9,3,1,0,538 -"9149",0,1,0,49,1,1,4,0,6,3,0,0,538 -"9150",0,1,0,50,2,1,4,0,11,3,0,0,538 -"9151",0,1,0,47,3,1,4,0,10,3,0,0,538 -"9152",0,1,0,49,1,1,4,1,10,3,0,0,538 -"9153",0,1,1,57,2,1,4,1,10,3,1,0,538 -"9154",1,1,1,51,3,1,4,0,10,3,0,0,538 -"9155",0,1,0,59,3,1,4,0,8,3,0,0,538 -"9156",0,1,0,46,1,1,4,1,10,3,0,0,538 -"9157",0,1,0,68,2,1,4,0,10,3,0,0,538 -"9158",0,1,1,57,2,1,4,0,12,3,0,0,538 -"9159",0,1,1,55,1,1,4,0,11,3,0,0,538 -"9160",0,1,0,47,5,1,4,1,10,3,1,0,538 -"9161",0,1,1,48,1,1,4,1,9,3,0,0,538 -"9162",1,0,0,49,3,1,4,0,7,3,0,0,538 -"9163",0,1,0,40,3,1,4,0,11,3,1,0,538 -"9164",0,1,0,65,1,1,4,0,8,3,1,0,538 -"9165",0,1,0,58,1,1,4,1,12,3,1,0,538 -"9166",0,1,1,48,3,1,4,0,12,3,0,0,538 -"9167",1,1,0,52,2,1,4,0,9,3,0,0,538 -"9168",1,1,0,40,1,1,4,1,10,3,0,0,538 -"9169",0,1,0,54,2,1,4,0,6,3,0,0,538 -"9170",0,1,0,63,1,1,4,1,5,3,0,0,538 -"9171",0,1,0,56,1,0,4,1,13,1,1,1,539 -"9172",0,1,0,57,1,0,4,1,11,1,1,1,539 -"9173",0,0,0,48,2,0,4,1,5,1,0,1,539 -"9174",0,1,1,63,1,0,4,1,10,1,0,1,539 -"9175",0,1,1,55,2,0,4,1,12,1,1,1,539 -"9176",0,1,0,44,2,0,4,1,7,1,1,1,539 -"9177",0,1,0,57,3,0,4,1,11,1,1,1,539 -"9178",0,1,1,62,1,0,4,1,12,1,1,1,539 -"9179",0,1,0,57,2,0,4,1,9,1,0,1,539 -"9180",0,1,0,55,2,0,4,1,12,1,1,1,539 -"9181",0,1,0,46,1,0,4,1,9,1,1,1,539 -"9182",0,1,1,64,1,0,4,1,12,1,0,1,539 -"9183",0,1,1,52,1,0,4,1,11,1,0,1,539 -"9184",0,1,0,58,1,0,4,1,13,1,1,1,539 -"9185",0,1,1,61,1,0,4,1,12,1,0,1,539 -"9186",0,1,0,64,1,0,4,1,11,1,0,1,539 -"9187",0,0,0,46,3,0,4,1,7,1,0,1,539 -"9188",0,1,0,59,1,0,4,1,8,1,1,1,539 -"9189",0,1,1,44,2,1,5,1,8,1,0,0,540 -"9190",0,1,1,58,3,1,5,0,11,1,1,0,540 -"9191",0,1,1,65,2,1,5,0,10,1,1,0,540 -"9192",0,1,1,51,2,1,5,1,10,1,0,0,540 -"9193",0,1,1,49,1,1,5,1,13,1,1,0,540 -"9194",0,1,1,58,2,1,5,1,8,1,0,0,540 -"9195",0,1,0,60,2,1,5,1,14,1,1,0,540 -"9196",0,1,1,56,1,1,3,0,11,3,1,0,541 -"9197",1,1,1,38,2,1,3,0,9,3,0,0,541 -"9198",1,1,0,38,1,1,3,0,10,3,0,0,541 -"9199",0,1,0,48,1,1,3,1,9,3,0,0,541 -"9200",0,0,1,59,3,1,3,0,8,3,0,0,541 -"9201",1,1,1,52,2,1,3,0,8,3,0,0,541 -"9202",0,1,1,45,1,1,3,1,9,3,0,0,541 -"9203",0,1,0,43,3,1,3,1,7,3,0,0,541 -"9204",0,1,1,58,2,1,3,1,9,3,0,0,541 -"9205",0,1,0,46,2,1,3,1,4,3,0,0,541 -"9206",0,1,0,48,2,1,3,1,9,3,0,0,541 -"9207",0,1,0,52,1,1,3,0,8,3,0,0,541 -"9208",0,1,1,49,1,1,3,0,8,3,0,0,541 -"9209",0,1,0,52,1,1,3,0,11,3,0,0,541 -"9210",0,1,0,40,5,0,4,1,7,1,1,1,542 -"9211",0,1,1,55,2,0,4,1,12,1,0,1,542 -"9212",0,1,0,54,2,0,4,1,4,1,1,1,542 -"9213",0,1,1,54,1,0,4,1,12,1,0,1,542 -"9214",0,1,1,57,2,0,4,1,9,1,1,1,542 -"9215",0,1,0,61,1,0,4,1,10,1,1,1,542 -"9216",0,1,0,59,2,0,4,1,9,1,0,1,542 -"9217",0,0,1,50,2,0,4,0,11,1,0,1,542 -"9218",0,1,0,55,1,0,4,1,12,1,1,1,542 -"9219",0,1,0,56,3,0,4,1,10,1,0,1,542 -"9220",0,1,0,50,1,0,4,1,11,1,1,1,542 -"9221",0,1,1,53,2,0,4,1,5,1,0,1,542 -"9222",0,1,1,47,2,0,4,1,9,1,0,1,542 -"9223",0,1,0,56,1,0,4,1,12,1,1,1,542 -"9224",0,1,0,45,2,0,4,1,12,1,1,1,542 -"9225",0,1,0,66,2,0,4,1,8,1,0,1,542 -"9226",0,1,0,55,2,0,4,1,12,1,0,1,542 -"9227",0,1,0,53,2,0,4,1,13,1,1,1,542 -"9228",1,1,0,39,1,0,4,1,12,1,0,1,542 -"9229",0,1,0,48,1,0,4,1,13,1,1,1,542 -"9230",0,1,1,54,2,0,4,1,12,1,1,1,542 -"9231",0,1,0,55,2,0,4,1,11,1,1,1,542 -"9232",0,1,0,63,2,0,4,1,6,1,1,1,542 -"9233",0,1,0,33,5,1,3,0,7,6,0,0,543 -"9234",0,1,1,35,2,1,3,0,5,6,0,0,543 -"9235",0,1,0,49,3,1,3,1,3,6,0,0,543 -"9236",0,1,0,51,5,1,3,1,9,6,0,0,543 -"9237",0,1,0,50,1,1,3,1,9,6,0,0,543 -"9238",0,1,0,43,1,1,3,1,6,6,1,0,543 -"9239",0,1,1,54,2,1,3,0,7,6,0,0,543 -"9240",1,1,0,35,5,1,3,1,8,6,0,0,543 -"9241",1,0,0,42,5,1,3,0,2,6,0,0,543 -"9242",0,1,1,45,3,1,3,0,9,6,0,0,543 -"9243",0,1,1,39,1,1,3,1,9,6,1,0,543 -"9244",1,1,0,37,4,1,3,0,8,6,0,0,543 -"9245",0,1,1,41,1,1,3,0,9,6,0,0,543 -"9246",0,1,0,65,1,1,3,0,8,6,1,0,543 -"9247",0,1,0,55,5,1,3,1,1,6,0,0,543 -"9248",0,1,0,68,1,1,3,1,13,6,1,0,543 -"9249",0,1,0,35,3,1,3,1,7,6,0,0,543 -"9250",0,1,1,51,5,1,3,1,6,6,0,0,543 -"9251",0,1,0,54,2,1,5,0,6,6,0,0,544 -"9252",0,1,0,53,1,1,5,1,6,6,0,0,544 -"9253",0,1,0,57,4,1,5,0,5,6,0,0,544 -"9254",0,1,0,42,2,1,5,0,6,6,1,0,544 -"9255",0,1,0,52,1,1,5,1,8,6,1,0,544 -"9256",1,1,1,48,5,1,5,1,9,6,0,0,544 -"9257",0,1,0,50,3,1,5,0,12,6,1,0,544 -"9258",0,1,0,32,3,1,5,1,9,6,0,0,544 -"9259",0,1,1,44,2,1,5,1,5,6,0,0,544 -"9260",0,1,1,45,5,1,5,0,10,6,0,0,544 -"9261",0,1,0,45,2,1,5,0,1,6,0,0,544 -"9262",0,1,1,62,2,1,4,0,12,1,1,0,545 -"9263",1,0,0,43,4,1,4,1,6,1,0,0,545 -"9264",0,1,1,40,3,1,4,1,10,1,0,0,545 -"9265",1,1,1,39,3,1,4,0,11,1,0,0,545 -"9266",0,1,0,45,1,1,4,0,11,1,1,0,545 -"9267",0,1,1,62,1,1,4,0,12,1,1,0,545 -"9268",0,1,0,69,1,1,4,1,13,1,1,0,545 -"9269",0,1,0,41,1,1,4,1,11,1,0,0,545 -"9270",0,1,1,54,1,1,4,1,10,1,0,0,545 -"9271",0,1,0,51,2,1,4,0,9,1,1,0,545 -"9272",0,1,0,66,1,1,4,1,12,1,0,0,545 -"9273",0,1,1,56,1,1,4,1,9,1,0,0,545 -"9274",0,1,1,54,1,1,4,1,10,1,1,0,545 -"9275",0,1,1,32,1,1,4,1,9,1,0,0,545 -"9276",0,1,0,44,1,1,4,1,11,1,0,0,546 -"9277",0,1,1,50,3,1,4,1,8,1,1,0,546 -"9278",0,1,1,49,5,1,4,0,10,1,1,0,546 -"9279",0,1,1,64,1,1,4,1,4,1,0,0,546 -"9280",0,1,1,56,1,1,4,1,9,1,1,0,546 -"9281",0,1,1,46,2,1,4,1,9,1,0,0,546 -"9282",0,1,0,72,1,1,4,1,15,1,1,0,546 -"9283",0,1,1,55,1,1,4,1,6,1,0,0,546 -"9284",0,1,1,35,2,1,4,0,6,1,0,0,546 -"9285",0,1,1,60,2,1,4,0,12,1,1,0,546 -"9286",0,1,0,62,2,1,4,1,7,3,0,0,547 -"9287",0,1,0,65,1,1,4,0,8,3,1,0,547 -"9288",0,1,1,37,1,1,4,1,10,3,0,0,547 -"9289",1,1,1,51,2,1,4,0,7,3,0,0,547 -"9290",0,0,0,52,5,1,4,0,6,3,0,0,547 -"9291",0,1,1,61,1,1,4,0,11,3,1,0,547 -"9292",0,1,0,40,3,1,4,1,10,3,0,0,547 -"9293",0,1,0,49,1,1,4,0,7,3,0,0,547 -"9294",0,0,0,53,3,1,4,0,12,3,1,0,547 -"9295",0,1,0,56,3,1,4,1,9,3,0,0,547 -"9296",1,0,1,48,2,1,4,1,5,3,0,0,547 -"9297",0,1,0,27,1,1,4,1,10,3,0,0,547 -"9298",0,1,0,49,3,1,4,0,9,3,0,0,547 -"9299",0,1,0,51,1,1,4,0,11,3,0,0,547 -"9300",0,1,1,54,2,1,4,0,10,3,1,0,547 -"9301",1,1,1,44,1,1,4,0,10,3,0,0,547 -"9302",0,1,0,62,1,1,4,0,9,3,1,0,547 -"9303",0,1,1,24,2,1,4,1,6,3,0,0,547 -"9304",0,1,1,41,3,1,4,0,9,3,0,0,547 -"9305",0,0,0,57,3,1,4,1,9,3,0,0,547 -"9306",0,1,0,64,1,1,4,0,8,3,0,0,547 -"9307",1,0,1,26,2,1,4,0,7,3,0,0,547 -"9308",0,0,1,28,1,1,4,0,5,3,0,0,547 -"9309",0,0,1,43,5,1,4,0,8,3,0,0,547 -"9310",0,1,0,48,2,1,4,1,5,4,0,0,548 -"9311",1,0,1,49,2,1,4,1,7,4,0,0,548 -"9312",0,1,0,48,2,1,4,0,5,4,1,0,548 -"9313",1,1,0,46,1,1,4,0,9,4,0,0,548 -"9314",0,1,0,62,3,1,4,1,7,4,0,0,548 -"9315",0,1,0,47,3,1,4,1,7,4,0,0,548 -"9316",1,1,0,49,4,1,4,0,7,4,1,0,548 -"9317",0,1,1,59,3,1,4,1,8,4,1,0,548 -"9318",0,1,0,53,5,1,4,0,7,4,0,0,548 -"9319",0,1,1,38,2,1,4,1,12,4,0,0,548 -"9320",0,0,1,50,2,1,4,0,9,4,0,0,548 -"9321",0,1,1,58,1,1,4,1,7,4,0,0,548 -"9322",0,1,0,55,2,1,4,1,13,4,1,0,548 -"9323",0,1,0,53,3,1,4,0,11,4,0,0,548 -"9324",0,1,0,44,2,1,4,1,5,4,1,0,548 -"9325",0,1,0,35,1,1,4,1,11,4,0,0,548 -"9326",1,1,1,74,2,1,5,0,12,1,1,1,549 -"9327",0,1,1,52,1,1,5,0,9,1,0,1,549 -"9328",0,1,1,48,2,1,5,1,4,1,1,1,549 -"9329",0,1,0,57,2,1,5,0,10,1,0,1,549 -"9330",0,1,0,65,2,1,5,1,10,1,1,1,549 -"9331",0,1,1,57,2,1,5,1,10,1,0,1,549 -"9332",0,1,1,60,2,1,5,1,8,1,0,1,549 -"9333",0,1,0,70,5,1,5,0,6,1,1,1,549 -"9334",0,1,0,54,2,1,5,0,9,1,0,1,549 -"9335",0,0,1,56,1,1,5,0,10,1,1,1,549 -"9336",0,1,1,59,2,1,5,0,9,1,0,1,549 -"9337",0,1,0,50,1,1,5,0,10,1,1,1,549 -"9338",0,1,1,65,1,1,5,1,11,1,1,1,549 -"9339",0,1,0,53,2,1,5,1,11,1,0,1,549 -"9340",0,1,0,62,3,1,5,0,13,1,1,1,549 -"9341",0,1,1,57,3,1,5,1,9,1,1,1,549 -"9342",0,0,0,59,2,1,5,0,7,1,0,1,549 -"9343",0,1,0,63,1,1,5,0,12,1,1,1,549 -"9344",0,1,1,40,1,1,4,1,9,5,1,0,550 -"9345",0,1,1,34,1,1,4,1,10,5,0,0,550 -"9346",0,1,1,31,1,1,4,1,9,5,0,0,550 -"9347",0,1,0,42,3,1,4,1,5,5,0,0,550 -"9348",0,1,0,44,1,1,4,0,9,5,0,0,550 -"9349",1,1,1,37,5,1,4,0,11,5,0,0,550 -"9350",0,1,0,50,3,1,4,0,8,5,0,0,550 -"9351",0,1,1,50,3,1,4,1,7,5,0,0,550 -"9352",0,1,0,53,2,1,4,1,9,5,1,0,550 -"9353",0,1,1,35,1,1,4,1,7,5,0,0,550 -"9354",0,1,0,43,5,1,4,0,11,5,1,0,550 -"9355",0,1,0,49,2,1,4,1,10,5,0,0,550 -"9356",0,1,0,42,3,1,4,1,8,5,0,0,550 -"9357",0,1,0,56,5,1,4,1,10,5,0,0,550 -"9358",0,1,1,29,2,1,4,0,7,5,1,0,550 -"9359",0,1,1,54,1,1,4,0,12,1,1,0,551 -"9360",0,1,1,48,3,1,4,1,10,1,0,0,551 -"9361",0,1,0,60,1,1,4,0,10,1,0,0,551 -"9362",0,1,1,57,2,1,4,1,9,1,0,0,551 -"9363",0,1,0,53,1,1,4,1,9,1,0,0,551 -"9364",0,1,0,56,2,1,4,1,8,1,0,0,551 -"9365",0,1,0,39,2,1,4,1,10,1,0,0,551 -"9366",0,1,1,43,2,1,4,1,9,1,0,0,551 -"9367",0,0,1,56,3,1,4,0,12,1,1,0,551 -"9368",0,1,0,61,2,1,4,1,8,1,0,0,551 -"9369",0,1,0,53,2,1,4,0,12,1,0,0,551 -"9370",1,1,1,34,1,1,4,0,8,1,0,0,551 -"9371",0,1,0,51,2,1,4,1,12,1,1,0,552 -"9372",0,1,0,69,2,1,4,1,12,1,0,0,552 -"9373",0,1,0,57,1,1,4,1,11,1,1,0,552 -"9374",0,1,0,58,1,1,4,0,12,1,1,0,552 -"9375",0,0,0,49,2,1,4,1,6,1,1,0,552 -"9376",0,1,1,42,2,1,4,1,11,1,1,0,552 -"9377",0,1,0,57,1,1,4,1,11,1,0,0,552 -"9378",0,1,0,66,2,1,4,1,12,1,1,0,552 -"9379",0,1,0,64,1,1,4,0,13,1,1,0,552 -"9380",0,1,1,56,2,1,4,0,12,1,0,0,552 -"9381",0,1,1,39,2,1,4,1,11,1,0,0,552 -"9382",0,1,0,59,2,1,4,1,11,1,1,0,552 -"9383",0,1,0,65,2,1,4,1,13,1,0,0,552 -"9384",0,1,0,58,1,1,4,0,12,1,1,0,552 -"9385",0,1,1,52,2,1,4,1,12,1,1,0,552 -"9386",0,0,0,51,3,1,4,0,8,1,1,0,552 -"9387",0,1,0,56,2,1,4,1,12,1,1,0,552 -"9388",1,1,1,54,2,1,4,1,10,1,1,0,552 -"9389",0,1,1,59,2,1,4,0,13,1,1,0,552 -"9390",0,1,1,39,2,1,4,1,10,1,1,0,552 -"9391",0,1,1,50,2,1,4,1,10,1,1,0,552 -"9392",1,1,0,60,2,1,4,0,12,1,1,0,552 -"9393",0,1,0,52,2,1,4,1,10,1,1,0,553 -"9394",0,1,0,50,3,1,4,1,2,1,0,0,553 -"9395",0,1,1,44,2,1,4,0,11,1,1,0,553 -"9396",0,1,0,58,3,1,4,0,7,1,0,0,553 -"9397",0,1,0,50,2,1,4,1,11,1,1,0,553 -"9398",0,1,0,64,1,1,4,1,10,1,0,0,553 -"9399",0,1,1,58,1,1,4,1,12,1,1,0,553 -"9400",0,1,0,55,1,1,4,1,9,1,0,0,553 -"9401",0,1,0,63,3,1,4,1,10,1,0,0,553 -"9402",0,1,1,61,2,1,4,1,9,1,1,0,553 -"9403",0,1,0,60,1,1,4,0,12,1,1,0,553 -"9404",0,1,1,61,2,1,4,1,9,1,1,0,553 -"9405",0,1,0,58,3,1,4,0,9,1,1,0,553 -"9406",0,0,1,59,2,1,5,1,11,2,1,0,554 -"9407",0,1,1,62,4,1,5,0,12,2,1,0,554 -"9408",0,1,0,45,1,1,5,0,10,2,0,0,554 -"9409",0,1,0,54,3,1,5,1,12,2,1,0,554 -"9410",1,1,1,39,3,1,5,1,8,2,0,0,554 -"9411",0,1,0,63,2,1,5,1,12,2,1,0,554 -"9412",0,1,0,47,2,1,5,1,10,2,0,0,554 -"9413",0,1,1,47,3,1,5,0,10,2,1,0,554 -"9414",0,1,0,57,1,1,5,1,8,2,0,0,554 -"9415",0,1,1,45,1,1,5,0,8,2,1,0,554 -"9416",0,1,0,54,3,1,5,1,10,2,0,0,554 -"9417",0,1,0,60,3,1,5,0,12,2,0,0,554 -"9418",0,1,1,44,3,1,5,0,9,2,0,0,554 -"9419",1,1,0,41,2,1,5,1,4,2,0,0,554 -"9420",0,1,1,41,2,1,5,1,3,1,0,1,555 -"9421",1,1,0,37,3,1,5,1,1,1,0,1,555 -"9422",0,1,0,52,1,1,5,1,9,1,1,1,555 -"9423",0,1,0,41,3,1,5,1,11,1,1,1,555 -"9424",0,1,0,47,3,1,5,1,10,1,0,1,555 -"9425",0,1,0,60,1,1,5,0,5,1,0,1,555 -"9426",1,1,0,32,1,1,5,1,7,1,0,1,555 -"9427",0,1,0,49,5,1,5,0,8,1,0,1,555 -"9428",0,1,1,62,5,1,5,1,10,1,1,1,555 -"9429",1,1,1,52,5,1,5,0,11,1,0,1,555 -"9430",0,1,0,35,2,1,5,0,9,1,1,1,555 -"9431",0,1,1,50,1,1,5,1,11,1,0,1,555 -"9432",0,1,1,39,1,1,5,1,3,1,0,1,555 -"9433",0,1,0,40,2,1,5,1,11,1,1,1,555 -"9434",0,1,1,48,1,1,5,0,10,3,1,0,556 -"9435",0,1,0,62,2,1,5,0,9,3,0,0,556 -"9436",0,1,0,49,2,1,5,1,8,3,1,0,556 -"9437",0,1,0,50,1,1,5,1,8,3,1,0,556 -"9438",0,1,0,61,2,1,5,1,13,3,1,0,556 -"9439",0,1,0,57,1,1,5,0,10,3,1,0,556 -"9440",0,1,0,55,2,1,5,0,11,3,1,0,556 -"9441",0,1,0,56,1,1,5,0,11,3,1,0,556 -"9442",0,1,0,57,2,1,5,0,7,3,1,0,556 -"9443",0,1,0,51,2,1,5,1,9,3,1,0,556 -"9444",0,1,0,64,2,1,5,1,11,3,1,0,556 -"9445",0,1,0,65,2,1,5,1,5,3,1,0,556 -"9446",0,1,0,53,2,1,5,1,7,3,0,0,556 -"9447",0,1,0,67,1,1,5,0,12,3,1,0,556 -"9448",0,1,0,59,2,1,5,1,10,3,1,0,556 -"9449",0,0,0,63,1,1,5,1,12,3,1,0,556 -"9450",0,1,0,55,1,1,5,1,9,3,1,0,556 -"9451",0,1,0,54,3,1,5,1,10,3,0,0,556 -"9452",0,0,0,56,3,1,5,1,12,3,0,0,556 -"9453",0,1,0,48,3,1,5,1,13,3,0,0,556 -"9454",0,1,1,53,2,1,5,0,9,3,0,0,556 -"9455",0,1,0,58,1,1,5,0,12,3,1,0,556 -"9456",0,1,0,48,5,1,5,1,10,3,1,0,556 -"9457",0,1,0,50,1,1,5,1,10,3,1,0,556 -"9458",0,1,1,55,1,1,5,1,11,3,1,0,556 -"9459",0,1,0,64,2,1,5,0,13,3,1,0,556 -"9460",0,1,1,61,2,1,5,0,10,3,1,0,556 -"9461",0,1,0,53,2,1,5,0,9,3,1,0,556 -"9462",0,1,1,48,1,1,4,1,6,3,0,0,557 -"9463",0,0,0,63,1,1,4,0,11,3,0,0,557 -"9464",0,1,0,42,1,1,4,1,6,3,0,0,557 -"9465",0,1,0,41,3,1,4,1,8,3,0,0,557 -"9466",0,1,1,64,3,1,4,0,12,3,1,0,557 -"9467",0,1,0,53,1,1,4,1,12,3,1,0,557 -"9468",0,1,1,53,1,1,4,1,8,3,0,0,557 -"9469",0,1,1,34,3,1,4,1,6,3,0,0,557 -"9470",0,1,0,41,2,1,4,0,8,3,0,0,557 -"9471",0,1,0,48,2,1,4,1,11,3,0,0,557 -"9472",1,1,0,55,5,1,4,0,11,3,0,0,557 -"9473",0,1,0,69,1,1,4,1,10,3,1,0,557 -"9474",0,1,0,41,1,1,4,0,8,3,1,0,557 -"9475",0,1,0,43,3,1,4,0,9,3,0,0,557 -"9476",0,1,0,55,1,1,4,1,10,3,1,0,557 -"9477",1,0,1,50,5,1,4,0,11,3,1,0,557 -"9478",0,1,1,64,1,1,4,1,11,3,0,0,557 -"9479",0,1,0,64,1,1,4,1,11,3,0,0,557 -"9480",0,1,1,44,2,1,4,1,4,3,0,0,557 -"9481",0,1,0,52,2,1,4,0,10,3,0,0,557 -"9482",1,1,1,58,1,1,4,0,10,1,0,0,558 -"9483",0,1,1,40,3,1,4,1,6,1,0,0,558 -"9484",0,1,1,66,3,1,4,0,8,1,1,0,558 -"9485",0,1,0,40,2,1,4,1,12,1,1,0,558 -"9486",0,1,1,52,1,1,4,1,11,1,1,0,558 -"9487",0,1,1,52,3,1,4,0,12,1,1,0,558 -"9488",0,1,0,57,1,1,4,0,13,1,1,0,558 -"9489",0,1,0,55,5,1,4,1,10,1,1,0,558 -"9490",0,0,1,57,1,1,4,0,11,1,1,0,558 -"9491",0,1,1,60,2,1,4,0,11,1,1,0,558 -"9492",0,1,0,60,5,1,4,1,9,1,1,0,558 -"9493",0,1,0,34,1,1,4,0,13,1,1,0,558 -"9494",0,1,0,61,2,1,4,0,10,1,1,0,558 -"9495",0,1,0,61,4,1,4,0,14,1,1,0,558 -"9496",0,1,1,51,1,1,4,1,10,1,0,0,558 -"9497",0,1,1,57,2,1,4,1,11,1,1,0,558 -"9498",0,1,0,49,2,1,4,1,14,1,1,0,558 -"9499",0,1,0,42,2,1,4,0,13,1,1,0,558 -"9500",0,0,0,46,2,1,4,0,11,1,1,0,558 -"9501",0,1,0,61,3,1,4,1,9,1,0,0,558 -"9502",0,1,0,46,3,1,4,1,11,1,1,0,558 -"9503",0,1,0,60,3,1,4,0,8,1,1,0,558 -"9504",0,1,0,56,3,1,4,1,12,1,0,0,558 -"9505",0,1,1,46,3,1,4,0,9,1,1,0,558 -"9506",0,1,0,65,2,1,4,0,10,1,1,0,558 -"9507",0,1,0,58,4,1,4,0,12,1,1,0,558 -"9508",0,1,1,66,1,1,4,0,12,1,1,0,558 -"9509",0,1,0,46,2,1,3,0,5,7,0,0,559 -"9510",1,1,0,37,4,1,3,0,8,7,1,0,559 -"9511",0,1,0,49,3,1,3,1,8,7,1,0,559 -"9512",0,1,0,36,2,1,3,0,5,7,0,0,559 -"9513",0,1,0,36,2,1,3,1,10,7,0,0,559 -"9514",0,1,0,35,1,1,3,1,9,7,0,0,559 -"9515",0,1,1,40,3,1,3,1,9,7,0,0,559 -"9516",0,1,0,47,2,1,3,1,7,7,1,0,559 -"9517",0,1,1,37,1,1,3,1,5,7,0,0,559 -"9518",0,1,1,34,2,1,3,1,4,7,0,0,559 -"9519",0,1,1,50,3,1,3,0,9,7,0,0,559 -"9520",0,1,0,31,5,1,3,1,11,7,1,0,559 -"9521",0,0,0,43,4,1,3,1,8,3,0,0,560 -"9522",0,1,0,56,2,1,3,1,10,3,1,0,560 -"9523",0,1,0,49,2,1,3,1,8,3,0,0,560 -"9524",0,0,0,41,3,1,3,0,9,3,0,0,560 -"9525",1,1,0,47,1,1,3,0,9,3,0,0,560 -"9526",0,1,1,55,1,1,3,1,5,3,0,0,560 -"9527",1,1,1,50,2,1,3,0,7,3,0,0,560 -"9528",0,1,1,48,2,1,3,1,10,3,0,0,560 -"9529",0,0,1,45,1,1,3,0,9,3,1,0,560 -"9530",1,1,1,32,1,1,3,1,11,3,1,0,560 -"9531",0,1,1,62,1,1,3,1,10,3,1,0,560 -"9532",0,1,0,32,3,1,3,1,6,3,0,0,560 -"9533",0,1,1,38,2,1,3,1,7,3,0,0,560 -"9534",0,1,1,51,2,1,3,0,9,3,1,0,560 -"9535",0,1,1,47,2,1,4,0,10,6,1,0,561 -"9536",0,1,1,55,2,1,4,0,6,6,0,0,561 -"9537",0,1,0,49,2,1,4,0,8,6,0,0,561 -"9538",0,1,1,42,2,1,4,1,4,6,0,0,561 -"9539",0,1,1,47,3,1,4,0,11,6,0,0,561 -"9540",1,1,0,54,2,1,4,0,2,6,0,0,561 -"9541",0,1,0,50,2,1,4,1,4,6,0,0,561 -"9542",0,1,1,60,3,1,4,0,5,6,0,0,561 -"9543",0,1,1,54,2,1,4,0,6,6,0,0,561 -"9544",0,1,1,53,5,1,4,0,8,6,0,0,561 -"9545",0,1,0,38,1,1,4,1,9,6,0,0,561 -"9546",0,1,0,45,3,1,4,1,9,6,0,0,561 -"9547",0,0,1,40,4,1,4,0,5,6,0,0,561 -"9548",0,1,0,45,3,1,4,0,7,6,1,0,561 -"9549",1,1,0,35,3,1,4,0,10,5,1,0,562 -"9550",0,1,0,44,2,1,4,1,6,5,1,0,562 -"9551",1,1,0,43,3,1,4,0,8,5,0,0,562 -"9552",1,1,1,54,5,1,4,0,9,5,1,0,562 -"9553",0,1,0,56,2,1,4,0,9,5,0,0,562 -"9554",0,1,0,55,2,1,4,0,10,5,0,0,562 -"9555",0,1,0,57,2,1,4,0,7,5,1,0,562 -"9556",0,1,0,64,1,1,4,0,8,5,0,0,562 -"9557",0,1,0,41,5,1,4,1,9,5,0,0,562 -"9558",0,1,1,29,2,1,4,0,8,5,1,0,562 -"9559",0,1,0,40,2,1,4,0,11,5,0,0,562 -"9560",0,1,0,59,3,1,4,1,9,5,1,0,562 -"9561",0,1,1,32,2,1,4,1,7,5,0,0,562 -"9562",0,0,0,57,5,1,4,0,8,5,0,0,562 -"9563",0,1,0,63,2,1,4,1,9,5,0,0,562 -"9564",0,1,0,41,2,1,4,0,7,5,0,0,562 -"9565",0,1,0,49,3,1,4,0,10,5,1,0,562 -"9566",0,1,1,49,1,1,4,1,10,5,1,0,562 -"9567",0,1,0,48,2,1,5,1,12,4,1,0,563 -"9568",0,1,0,43,3,1,5,1,10,4,0,0,563 -"9569",0,1,0,65,2,1,5,1,13,4,1,0,563 -"9570",1,1,0,48,2,1,5,1,2,4,0,0,563 -"9571",0,1,1,54,1,1,5,1,7,4,1,0,563 -"9572",0,1,1,44,2,1,5,0,10,4,1,0,563 -"9573",0,1,0,62,3,1,5,0,11,4,1,0,563 -"9574",0,1,0,37,3,1,5,1,9,4,1,0,563 -"9575",0,1,0,56,1,1,5,1,10,4,1,0,563 -"9576",0,1,0,63,1,1,5,0,10,4,1,0,563 -"9577",0,0,0,44,2,1,5,1,5,4,0,0,563 -"9578",0,1,1,70,3,1,5,1,8,4,1,0,563 -"9579",1,1,0,51,3,1,5,0,9,4,0,0,563 -"9580",0,1,1,60,3,1,5,0,12,4,0,0,563 -"9581",0,1,1,63,3,1,5,1,9,4,1,0,563 -"9582",0,1,1,54,2,1,5,1,7,4,0,0,563 -"9583",0,1,0,60,1,1,5,0,10,4,1,0,563 -"9584",0,1,1,46,5,1,3,0,10,5,1,0,564 -"9585",0,0,1,48,5,1,3,0,9,5,0,0,564 -"9586",0,1,1,49,1,1,3,0,9,5,0,0,564 -"9587",0,1,1,44,3,1,3,1,8,5,1,0,564 -"9588",0,1,0,40,3,1,3,1,6,5,0,0,564 -"9589",1,1,1,53,3,1,3,0,9,5,0,0,564 -"9590",0,0,1,42,3,1,3,0,9,5,1,0,564 -"9591",0,1,0,33,2,1,3,1,11,5,1,0,564 -"9592",0,1,0,39,3,1,3,1,7,5,0,0,564 -"9593",0,1,1,59,2,1,3,0,9,5,0,0,564 -"9594",0,1,1,37,2,1,3,1,7,5,0,0,564 -"9595",0,0,0,43,3,1,3,0,11,5,0,0,564 -"9596",1,1,0,43,3,1,3,1,2,5,0,0,564 -"9597",0,1,0,43,2,1,3,0,2,5,1,0,564 -"9598",0,1,1,46,3,1,3,0,9,5,0,0,564 -"9599",1,1,0,40,3,1,3,1,9,5,0,0,564 -"9600",0,1,0,38,3,1,3,0,13,5,1,0,564 -"9601",0,1,0,41,2,1,3,1,6,5,0,0,564 -"9602",0,0,1,54,3,1,3,0,9,5,0,0,564 -"9603",0,1,1,52,2,1,3,1,8,5,0,0,564 -"9604",0,1,1,45,3,1,3,1,10,5,1,0,564 -"9605",0,1,0,39,5,1,3,1,8,5,0,0,564 -"9606",0,1,0,74,3,1,5,0,12,2,1,0,565 -"9607",0,1,0,67,1,1,5,1,8,2,1,0,565 -"9608",0,1,1,49,4,1,5,0,9,2,0,0,565 -"9609",0,1,1,54,5,1,5,1,8,2,0,0,565 -"9610",0,1,0,49,3,1,5,1,8,2,1,0,565 -"9611",1,1,0,53,4,1,5,1,12,2,1,0,565 -"9612",0,1,1,53,1,1,5,1,11,2,1,0,565 -"9613",0,1,0,54,1,1,5,0,10,2,1,0,565 -"9614",1,1,0,52,2,1,5,1,13,2,1,0,565 -"9615",0,1,0,43,1,1,5,1,11,2,0,0,565 -"9616",0,1,0,62,5,1,5,1,10,2,0,0,565 -"9617",0,1,1,46,4,1,5,1,7,2,0,0,565 -"9618",0,1,1,58,2,1,5,0,11,2,1,0,565 -"9619",0,1,1,50,3,1,5,1,12,2,1,0,565 -"9620",0,1,0,65,2,1,5,1,12,2,1,0,565 -"9621",0,1,1,49,1,1,5,1,10,2,1,0,565 -"9622",0,1,0,55,1,1,5,1,11,2,1,0,565 -"9623",0,0,1,60,3,1,5,0,8,2,0,0,565 -"9624",0,1,0,59,2,1,5,0,9,2,1,0,565 -"9625",0,1,1,80,3,1,5,0,12,2,1,0,565 -"9626",0,1,0,62,1,1,5,1,8,2,1,0,565 -"9627",0,1,1,54,1,1,5,1,12,2,1,0,565 -"9628",0,1,1,52,3,1,5,0,10,2,1,0,565 -"9629",0,1,0,62,2,1,5,1,11,2,0,0,565 -"9630",0,1,0,58,1,1,5,0,9,2,1,0,565 -"9631",0,1,0,87,2,1,5,0,12,2,1,0,565 -"9632",0,1,0,56,2,1,3,1,8,3,0,0,566 -"9633",0,1,0,47,3,1,3,1,8,3,0,0,566 -"9634",0,1,0,56,1,1,3,0,3,3,0,0,566 -"9635",0,1,0,56,3,1,3,1,8,3,0,0,566 -"9636",0,0,0,37,1,1,3,1,5,3,0,0,566 -"9637",0,1,1,46,3,1,3,1,13,3,0,0,566 -"9638",0,1,0,55,3,1,3,0,10,3,0,0,566 -"9639",0,0,0,48,5,1,3,0,6,3,0,0,566 -"9640",0,1,0,58,3,1,3,1,12,3,1,0,566 -"9641",0,0,0,45,2,1,3,0,10,3,1,0,566 -"9642",1,1,1,63,2,1,3,0,12,3,0,0,566 -"9643",0,1,0,50,2,1,3,0,11,3,0,0,566 -"9644",0,0,0,53,3,1,3,0,11,3,1,0,566 -"9645",0,0,0,50,2,1,3,0,11,3,0,0,566 -"9646",0,1,0,52,2,1,3,0,5,3,0,0,566 -"9647",0,1,0,49,3,1,3,1,7,3,1,0,566 -"9648",0,1,0,59,2,1,3,1,8,3,0,0,566 -"9649",0,1,0,46,2,1,4,1,12,1,1,0,567 -"9650",0,1,0,47,2,1,4,0,10,1,1,0,567 -"9651",0,1,0,56,4,1,4,0,13,1,1,0,567 -"9652",0,1,1,43,2,1,4,1,10,1,0,0,567 -"9653",0,0,0,49,2,1,4,1,11,1,0,0,567 -"9654",0,1,1,51,3,1,4,1,12,1,1,0,567 -"9655",0,1,0,67,3,1,4,0,10,1,1,0,567 -"9656",1,1,1,65,1,1,4,0,11,1,1,0,567 -"9657",0,0,1,53,1,1,4,0,11,1,0,0,567 -"9658",0,1,0,57,4,1,4,1,12,1,1,0,567 -"9659",0,1,0,67,2,1,4,0,11,1,1,0,567 -"9660",0,1,1,53,3,1,4,1,9,1,0,0,567 -"9661",0,1,0,68,2,1,4,1,12,1,1,0,568 -"9662",1,1,0,58,2,1,4,0,12,1,0,0,568 -"9663",0,1,0,56,2,1,4,0,12,1,1,0,568 -"9664",0,1,1,64,1,1,4,1,9,1,1,0,568 -"9665",0,1,0,76,2,1,4,1,12,1,1,0,568 -"9666",0,1,1,35,5,1,4,1,7,1,0,0,568 -"9667",0,1,0,58,2,1,4,1,12,1,0,0,568 -"9668",0,0,0,53,4,1,4,1,4,1,1,0,568 -"9669",0,1,0,50,1,1,4,0,11,1,1,0,568 -"9670",0,1,1,66,2,1,4,0,11,1,1,0,568 -"9671",0,1,0,58,2,1,4,0,6,1,1,0,568 -"9672",0,0,0,34,3,1,4,0,12,1,0,0,568 -"9673",0,1,0,54,2,1,4,1,12,1,1,0,568 -"9674",0,1,0,65,2,1,4,1,13,1,1,0,568 -"9675",0,1,0,50,5,1,4,1,8,1,1,0,568 -"9676",0,1,0,70,3,1,4,1,12,1,1,0,568 -"9677",0,0,1,53,1,1,4,1,11,1,1,0,568 -"9678",0,1,0,68,1,1,4,0,11,1,1,0,568 -"9679",1,1,1,62,1,1,4,0,11,1,1,0,568 diff --git a/tests/testthat/data_files/MEDIATION/vv2015.csv b/tests/testthat/data_files/MEDIATION/vv2015.csv deleted file mode 100644 index 4b26bf5c..00000000 --- a/tests/testthat/data_files/MEDIATION/vv2015.csv +++ /dev/null @@ -1,101 +0,0 @@ -"","id","x","m","y","cens","c","event" -"1",1,0,1,0.00965706987302309,0,0.552937817980352,1 -"2",2,0,1,0.303604781023313,0,-0.738597947207898,1 -"3",3,0,1,0.519546807482132,0,1.17886484862715,1 -"4",4,0,0,0.186009526370779,1,2.89746570014621,0 -"5",5,0,0,0.127083564776595,0,-1.2719254860193,1 -"6",6,0,0,0.121811929519267,0,1.98046413873461,1 -"7",7,1,0,0.63070536693152,0,-0.398825616292447,1 -"8",8,0,0,0.136069656419554,0,2.82487242294358,1 -"9",9,0,0,0.392960646795121,0,2.38129872992883,1 -"10",10,0,1,0.0445727464761349,0,0.161148124965648,1 -"11",11,1,1,3.15839125129124,0,0.738004225485969,1 -"12",12,1,0,0.185215571907629,0,0.931155971982977,1 -"13",13,0,0,0.101924804002112,0,0.621116443469894,1 -"14",14,0,1,0.31769782827442,0,3.58195892772433,1 -"15",15,1,1,0.178259327069065,0,1.12983413734559,1 -"16",16,1,0,0.0266100889013673,0,0.286975019783646,1 -"17",17,0,0,0.596089851111174,1,1.6379942429195,0 -"18",18,0,1,0.0117016015717971,0,1.20169159161592,1 -"19",19,0,1,0.406884439684816,1,0.930083051759797,0 -"20",20,1,0,0.550613096933024,1,0.907510124597255,0 -"21",21,0,1,0.13027117584144,0,1.44890327311138,1 -"22",22,1,0,0.0180667105782799,0,-0.0643556706873669,1 -"23",23,0,0,0.378997675756629,0,-0.162419322142226,1 -"24",24,1,0,0.0688909097682381,0,2.64852174670445,1 -"25",25,0,0,0.366287641761105,0,-1.06209601933992,1 -"26",26,0,1,0.143158833001073,0,1.01274972096497,1 -"27",27,1,0,0.632801850657509,0,-0.0875283493104273,1 -"28",28,1,1,0.242765809500884,0,1.27053949320434,1 -"29",29,0,1,0.277936142290263,0,2.00845187327273,1 -"30",30,0,1,0.91430743475134,0,-1.07440475425644,1 -"31",31,0,1,0.131739875674805,0,1.89682227178561,1 -"32",32,1,1,0.391236971419354,0,0.950004233123955,1 -"33",33,0,0,0.392525973533911,0,-0.345349310443372,1 -"34",34,1,1,0.13986688810187,0,-0.931211534349739,1 -"35",35,1,1,0.269835570952765,0,1.70958158347709,1 -"36",36,1,1,0.597750641223273,0,0.842094968083688,1 -"37",37,0,1,0.0174198541976244,0,1.21636787270849,1 -"38",38,1,1,0.62599615743495,0,1.81736207577525,1 -"39",39,1,0,0.606365683516267,0,2.72717575450325,1 -"40",40,0,1,0.362517508491388,0,0.896229707536725,1 -"41",41,0,1,0.530340359532288,0,0.442877709175701,1 -"42",42,1,1,0.621910692035042,0,2.42830142987646,1 -"43",43,1,0,0.332388578156043,0,0.107042597899859,1 -"44",44,1,1,0.266345166419398,0,-0.157571240072672,1 -"45",45,1,1,0.190076483148,0,0.469703545070943,1 -"46",46,0,1,0.976178890104338,0,3.44568275766683,1 -"47",47,1,0,0.993645636103782,0,0.167504202002588,1 -"48",48,1,0,1.60794295590224,0,1.4135198488299,1 -"49",49,0,0,0.26400298739336,0,-0.178683140724628,1 -"50",50,0,1,0.308814378530144,0,-0.174034758469224,1 -"51",51,0,0,0.0284566376868205,0,0.667076649025486,1 -"52",52,0,1,0.0822902216703356,0,2.3631137069225,1 -"53",53,0,1,0.439670579064068,0,0.530852660423631,1 -"54",54,0,1,0.212035984865681,1,1.84287563213658,0 -"55",55,0,0,0.170897749975465,0,-0.457993722542087,1 -"56",56,0,0,0.358185559576768,0,0.59969407995108,1 -"57",57,0,1,0.541315188697789,0,0.223582714663682,1 -"58",58,0,0,0.496617039748228,0,0.63070348869899,1 -"59",59,0,0,0.385876217512499,0,2.24010145861679,1 -"60",60,0,0,0.199602349299273,0,0.892566191660019,1 -"61",61,0,0,0.0706139240067105,0,1.1725935062242,1 -"62",62,1,1,0.504773614225437,0,1.25460126824862,1 -"63",63,1,0,0.504241572625227,0,0.385466171005577,1 -"64",64,1,0,1.4803507304327,0,-0.429215096001019,1 -"65",65,0,1,0.700013891793787,1,0.669024565383959,0 -"66",66,0,1,0.421562669069256,1,1.12838606337613,0 -"67",67,0,1,0.45252124899877,0,2.0181199924631,1 -"68",68,0,0,0.0675858905154695,0,0.744426308436246,1 -"69",69,0,1,0.203956990739586,0,0.697458989307305,1 -"70",70,1,0,0.172715423146754,0,2.61519068259227,1 -"71",71,0,1,0.18546722727601,0,0.226286645452745,1 -"72",72,0,0,0.94632174650548,0,1.42400240156265,1 -"73",73,0,0,0.00589149133153849,0,0.416053018670643,1 -"74",74,1,1,0.188975021879973,0,1.41503567889914,1 -"75",75,1,0,0.254702776980636,0,-0.545261656623988,1 -"76",76,1,1,0.120274085191832,1,0.481250495251941,0 -"77",77,1,1,0.330143040643716,0,0.720208445647311,1 -"78",78,1,1,1.03672930406955,0,2.00745738207582,1 -"79",79,1,1,1.23121319757092,0,0.530430046384967,1 -"80",80,0,0,0.46467393818603,0,1.29789703837739,1 -"81",81,0,0,0.174053572521107,0,0.582205566927371,1 -"82",82,0,0,0.115535552976377,0,0.149619223708796,1 -"83",83,1,1,0.312277172974777,0,1.68904619437242,1 -"84",84,1,1,0.116766997779037,1,0.539803805238037,0 -"85",85,0,0,0.0437346619158061,0,2.34818437754491,1 -"86",86,0,0,0.199214244330654,0,1.44307138426351,1 -"87",87,1,1,0.298668674895748,0,0.849073811639227,1 -"88",88,0,0,0.193116065114737,1,1.45554885681481,0 -"89",89,0,1,0.122864071657185,0,0.959845318701299,1 -"90",90,1,0,0.057773261492226,0,1.45612104354645,1 -"91",91,1,1,0.077861730527864,0,0.591574970512231,1 -"92",92,0,0,1.88051183635771,0,-1.13649385561006,1 -"93",93,0,1,0.123486551813759,0,1.15682191638659,1 -"94",94,0,1,0.0140334741778839,0,1.66004890117331,1 -"95",95,1,0,0.196484949468569,0,0.0181655869264227,1 -"96",96,0,0,0.0784322764201712,0,-0.113643704203382,1 -"97",97,0,0,0.18937219299252,0,0.562652323270551,1 -"98",98,0,0,0.394467844082065,0,0.483888753326585,1 -"99",99,0,0,0.204102288476239,0,1.41899599057103,1 -"100",100,1,1,0.688631122931838,1,1.1341554367156,0 diff --git a/tests/testthat/data_files/dataBootstrapUnitTests.R b/tests/testthat/data_files/dataBootstrapUnitTests.R deleted file mode 100644 index 4c51af16..00000000 --- a/tests/testthat/data_files/dataBootstrapUnitTests.R +++ /dev/null @@ -1,117 +0,0 @@ -library(remotes) -install.packages("MolgenisArmadillo", repos = "https://registry.molgenis.org/repository/R") -library(MolgenisArmadillo) -library(DSI) - -# init_studies_dataset -CNSIM1 <- load("data_files/CNSIM/CNSIM1.rda") -CNSIM2 <- load("data_files/CNSIM/CNSIM2.rda") -CNSIM3 <- load("data_files/CNSIM/CNSIM3.rda") - -DASIM1 <- load("data_files/DASIM/DASIM1.rda") -DASIM2 <- load("data_files/DASIM/DASIM2.rda") -DASIM3 <- load("data_files/DASIM/DASIM3.rda") - -EXPAND_WITH_MISSING1 <- load("data_files/SURVIVAL/EXPAND_MISSING/expand_missing_study1.rda") -EXPAND_WITH_MISSING2 <- load("data_files/SURVIVAL/EXPAND_MISSING/expand_missing_study2.rda") -EXPAND_WITH_MISSING3 <- load("data_files/SURVIVAL/EXPAND_MISSING/expand_missing_study3.rda") - -CLUSTER_INT1 <- load("data_files/CLUSTER/CLUSTER_INT1.rda") -CLUSTER_INT2 <- load("data_files/CLUSTER/CLUSTER_INT2.rda") -CLUSTER_INT3 <- load("data_files/CLUSTER/CLUSTER_INT3.rda") - -CLUSTER_SLO1 <- load("data_files/CLUSTER/CLUSTER_SLO1.rda") -CLUSTER_SLO2 <- load("data_files/CLUSTER/CLUSTER_SLO2.rda") -CLUSTER_SLO3 <- load("data_files/CLUSTER/CLUSTER_SLO3.rda") - -# init_discordant_datasets -DISCORDANT_STUDY1 <- load("data_files/DISCORDANT/discordant_study1.rda") -DISCORDANT_STUDY2 <- load("data_files/DISCORDANT/discordant_study2.rda") -DISCORDANT_STUDY3 <- load("data_files/DISCORDANT/discordant_study3.rda") - -# init_testing_datasets -DATASET1 <- load("data_files/TESTING/DATASET1.rda") -DATASET2 <- load("data_files/TESTING/DATASET2.rda") -DATASET3 <- load("data_files/TESTING/DATASET3.rda") - -FACTOR_LEVELS_DATASET1 <- load("data_files/FACTOR_LEVELS/FACTOR_LEVELS_DATASET1.rda") -FACTOR_LEVELS_DATASET2 <- load("data_files/FACTOR_LEVELS/FACTOR_LEVELS_DATASET2.rda") -FACTOR_LEVELS_DATASET3 <- load("data_files/FACTOR_LEVELS/FACTOR_LEVELS_DATASET3.rda") - - -storage_url <- "http://localhost:9000" -# access_key and secret_key can be found in the minio configuration in the docker-compose.yml -MolgenisArmadillo::armadillo.set_credentials(server = storage_url, access_key = "molgenis", secret_key = "molgenis") -MolgenisArmadillo::armadillo.create_project("testdata") - - -# init_studies_datasets -MolgenisArmadillo::armadillo.upload_table("testdata", "cnsim", CNSIM1) -MolgenisArmadillo::armadillo.upload_table("testdata", "cnsim", CNSIM2) -MolgenisArmadillo::armadillo.upload_table("testdata", "cnsim", CNSIM3) - -MolgenisArmadillo::armadillo.upload_table("testdata", "dasim", DASIM1) -MolgenisArmadillo::armadillo.upload_table("testdata", "dasim", DASIM2) -MolgenisArmadillo::armadillo.upload_table("testdata", "dasim", DASIM3) - -MolgenisArmadillo::armadillo.upload_table("testdata", "survival", EXPAND_WITH_MISSING1) -MolgenisArmadillo::armadillo.upload_table("testdata", "survival", EXPAND_WITH_MISSING2) -MolgenisArmadillo::armadillo.upload_table("testdata", "survival", EXPAND_WITH_MISSING3) - -MolgenisArmadillo::armadillo.upload_table("testdata", "cluster", CLUSTER_INT1) -MolgenisArmadillo::armadillo.upload_table("testdata", "cluster", CLUSTER_INT2) -MolgenisArmadillo::armadillo.upload_table("testdata", "cluster", CLUSTER_INT3) - -MolgenisArmadillo::armadillo.upload_table("testdata", "cluster", CLUSTER_SLO1) -MolgenisArmadillo::armadillo.upload_table("testdata", "cluster", CLUSTER_SLO2) -MolgenisArmadillo::armadillo.upload_table("testdata", "cluster", CLUSTER_SLO3) - - -# init_discordant_datasets -MolgenisArmadillo::armadillo.upload_table("testdata", "discordant", DISCORDANT_STUDY1) -MolgenisArmadillo::armadillo.upload_table("testdata", "discordant", DISCORDANT_STUDY2) -MolgenisArmadillo::armadillo.upload_table("testdata", "discordant", DISCORDANT_STUDY3) - - -# remove first column -DATASET1 <- DATASET1[,-1] -DATASET2 <- DATASET2[,-1] -DATASET3 <- DATASET3[,-1] - -# init_testing_datasets -MolgenisArmadillo::armadillo.upload_table("testdata", "testing", DATASET1) -MolgenisArmadillo::armadillo.upload_table("testdata", "testing", DATASET2) -MolgenisArmadillo::armadillo.upload_table("testdata", "testing", DATASET3) - -MolgenisArmadillo::armadillo.upload_table("testdata", "factor_levels", FACTOR_LEVELS_DATASET1) -MolgenisArmadillo::armadillo.upload_table("testdata", "factor_levels", FACTOR_LEVELS_DATASET2) -MolgenisArmadillo::armadillo.upload_table("testdata", "factor_levels", FACTOR_LEVELS_DATASET3) - -class(CNSIM1$PM_BMI_CATEGORICAL) -levels(CNSIM1$PM_BMI_CATEGORICAL) - -devtools::test() -devtools::test(filter = "datachk", invert = TRUE) -devtools::test(filter = "dataFrameSort") - - # build the login dataframe -builder <- DSI::newDSLoginBuilder() -builder$append(server = "armadillo", - url = armadillo_url, - user = "admin", - password = "admin", - table = "testdata/testing/DISCORDANT_STUDY1", - driver = "ArmadilloDriver") - -# create loginframe -logindata <- builder$build() -logindata - -datashield.logout(conns) - -conns <- datashield.login(logins = logindata, assign = TRUE) -ds.ls() -dsGetInfo(conns$armadillo) -ds.colnames("D") -datashield.errors() -dsGetInfo(conns$armadillo) diff --git a/tests/testthat/data_files/molgenis_armadillo-upload_testing_datasets.R b/tests/testthat/data_files/molgenis_armadillo-upload_testing_datasets.R deleted file mode 100644 index 9e129971..00000000 --- a/tests/testthat/data_files/molgenis_armadillo-upload_testing_datasets.R +++ /dev/null @@ -1,72 +0,0 @@ -# -# Molgenis' Armadillo - Upload Testing Datasets -# - -library(MolgenisArmadillo) - -upload_testing_dataset_table <- function(project_name, folder_name, table_name, dataset_file_name) { - dataset_name <- load(file = dataset_file_name) - dataset <- eval(as.symbol(dataset_name)) - MolgenisArmadillo::armadillo.upload_table(project_name, folder_name, dataset, table_name) - gc(verbose = FALSE) -} - -# MolgenisArmadillo::armadillo.set_credentials(server = 'http://127.0.0.1:9000', access_key = "molgenis", secret_key = "molgenis") -MolgenisArmadillo::armadillo.login_basic(armadillo = 'http://127.0.0.1:8080', username = "admin", password = "admin") - -if (! 'datashield' %in% MolgenisArmadillo::armadillo.list_projects()) - MolgenisArmadillo::armadillo.create_project('datashield') - -upload_testing_dataset_table('datashield', 'anthro', 'anthro1', 'ANTHRO/anthro1.rda') -upload_testing_dataset_table('datashield', 'anthro', 'anthro2', 'ANTHRO/anthro2.rda') -upload_testing_dataset_table('datashield', 'anthro', 'anthro3', 'ANTHRO/anthro3.rda') - -upload_testing_dataset_table('datashield', 'cluster', 'CLUSTER_INT1', 'CLUSTER/CLUSTER_INT1.rda') -upload_testing_dataset_table('datashield', 'cluster', 'CLUSTER_INT2', 'CLUSTER/CLUSTER_INT2.rda') -upload_testing_dataset_table('datashield', 'cluster', 'CLUSTER_INT3', 'CLUSTER/CLUSTER_INT3.rda') - -upload_testing_dataset_table('datashield', 'cluster', 'CLUSTER_SLO1', 'CLUSTER/CLUSTER_SLO1.rda') -upload_testing_dataset_table('datashield', 'cluster', 'CLUSTER_SLO2', 'CLUSTER/CLUSTER_SLO2.rda') -upload_testing_dataset_table('datashield', 'cluster', 'CLUSTER_SLO3', 'CLUSTER/CLUSTER_SLO3.rda') - -upload_testing_dataset_table('datashield', 'cnsim', 'CNSIM1', 'CNSIM/CNSIM1.rda') -upload_testing_dataset_table('datashield', 'cnsim', 'CNSIM2', 'CNSIM/CNSIM2.rda') -upload_testing_dataset_table('datashield', 'cnsim', 'CNSIM3', 'CNSIM/CNSIM3.rda') - -upload_testing_dataset_table('datashield', 'dasim', 'DASIM1', 'DASIM/DASIM3.rda') -upload_testing_dataset_table('datashield', 'dasim', 'DASIM2', 'DASIM/DASIM1.rda') -upload_testing_dataset_table('datashield', 'dasim', 'DASIM3', 'DASIM/DASIM2.rda') - -upload_testing_dataset_table('datashield', 'discordant', 'DISCORDANT_STUDY1', 'DISCORDANT/DISCORDANT_STUDY1.rda') -upload_testing_dataset_table('datashield', 'discordant', 'DISCORDANT_STUDY2', 'DISCORDANT/DISCORDANT_STUDY2.rda') -upload_testing_dataset_table('datashield', 'discordant', 'DISCORDANT_STUDY3', 'DISCORDANT/DISCORDANT_STUDY3.rda') - -upload_testing_dataset_table('datashield', 'factor_levels', 'FACTOR_LEVELS1', 'FACTOR_LEVELS/FACTOR_LEVELS1.rda') -upload_testing_dataset_table('datashield', 'factor_levels', 'FACTOR_LEVELS2', 'FACTOR_LEVELS/FACTOR_LEVELS2.rda') -upload_testing_dataset_table('datashield', 'factor_levels', 'FACTOR_LEVELS3', 'FACTOR_LEVELS/FACTOR_LEVELS3.rda') - -upload_testing_dataset_table('datashield', 'gamlss', 'gamlss1', 'GAMLSS/gamlss1.rda') -upload_testing_dataset_table('datashield', 'gamlss', 'gamlss2', 'GAMLSS/gamlss2.rda') -upload_testing_dataset_table('datashield', 'gamlss', 'gamlss3', 'GAMLSS/gamlss3.rda') - -upload_testing_dataset_table('datashield', 'survival', 'COLLAPSE_WITH_MISSING1', 'SURVIVAL/COLLAPSE_MISSING/COLLAPSE_WITH_MISSING1.rda') -upload_testing_dataset_table('datashield', 'survival', 'COLLAPSE_WITH_MISSING2', 'SURVIVAL/COLLAPSE_MISSING/COLLAPSE_WITH_MISSING2.rda') -upload_testing_dataset_table('datashield', 'survival', 'COLLAPSE_WITH_MISSING3', 'SURVIVAL/COLLAPSE_MISSING/COLLAPSE_WITH_MISSING3.rda') - -upload_testing_dataset_table('datashield', 'survival', 'COLLAPSE_NO_MISSING1', 'SURVIVAL/COLLAPSE_NO_MISSING/COLLAPSE_NO_MISSING1.rda') -upload_testing_dataset_table('datashield', 'survival', 'COLLAPSE_NO_MISSING2', 'SURVIVAL/COLLAPSE_NO_MISSING/COLLAPSE_NO_MISSING2.rda') -upload_testing_dataset_table('datashield', 'survival', 'COLLAPSE_NO_MISSING3', 'SURVIVAL/COLLAPSE_NO_MISSING/COLLAPSE_NO_MISSING3.rda') - -upload_testing_dataset_table('datashield', 'survival', 'EXPAND_WITH_MISSING1', 'SURVIVAL/EXPAND_MISSING/EXPAND_WITH_MISSING1.rda') -upload_testing_dataset_table('datashield', 'survival', 'EXPAND_WITH_MISSING2', 'SURVIVAL/EXPAND_MISSING/EXPAND_WITH_MISSING2.rda') -upload_testing_dataset_table('datashield', 'survival', 'EXPAND_WITH_MISSING3', 'SURVIVAL/EXPAND_MISSING/EXPAND_WITH_MISSING3.rda') - -upload_testing_dataset_table('datashield', 'survival', 'EXPAND_NO_MISSING1', 'SURVIVAL/EXPAND_NO_MISSING/EXPAND_NO_MISSING1.rda') -upload_testing_dataset_table('datashield', 'survival', 'EXPAND_NO_MISSING2', 'SURVIVAL/EXPAND_NO_MISSING/EXPAND_NO_MISSING2.rda') -upload_testing_dataset_table('datashield', 'survival', 'EXPAND_NO_MISSING3', 'SURVIVAL/EXPAND_NO_MISSING/EXPAND_NO_MISSING3.rda') - -upload_testing_dataset_table('datashield', 'testing', 'DATASET1', 'TESTING/DATASET1.rda') -upload_testing_dataset_table('datashield', 'testing', 'DATASET2', 'TESTING/DATASET2.rda') -upload_testing_dataset_table('datashield', 'testing', 'DATASET3', 'TESTING/DATASET3.rda') - -print(MolgenisArmadillo::armadillo.list_tables('datashield')) diff --git a/tests/testthat/data_files/obiba_opal-upload_testing_datasets.R b/tests/testthat/data_files/obiba_opal-upload_testing_datasets.R deleted file mode 100644 index ae79d2e6..00000000 --- a/tests/testthat/data_files/obiba_opal-upload_testing_datasets.R +++ /dev/null @@ -1,75 +0,0 @@ -# -# Obiba's Opal - Upload Testing Datasets -# - -library(DSOpal) -library(opalr) -library(tibble) - -upload_testing_dataset_table <- function(opal, project_name, table_name, local_file_path) { - if (! opal.project_exists(opal, project_name)) - opal.project_create(opal, project_name, database = "mongodb") - - dataset_name <- load(file = local_file_path) - dataset <- eval(as.symbol(dataset_name)) - data <- as_tibble(dataset, rownames = '_row_id_') - - opal.table_save(opal, data, project_name, table_name, id.name = "_row_id_", force = TRUE) -} - -# opal <- opal.login('administrator','datashield_test&', url='https://192.168.56.100:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)) -opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)) - -upload_testing_dataset_table(opal, 'ANTHRO', 'anthro1', 'ANTHRO/anthro1.rda') -upload_testing_dataset_table(opal, 'ANTHRO', 'anthro2', 'ANTHRO/anthro2.rda') -upload_testing_dataset_table(opal, 'ANTHRO', 'anthro3', 'ANTHRO/anthro3.rda') - -upload_testing_dataset_table(opal, 'CLUSTER', 'CLUSTER_INT1', 'CLUSTER/CLUSTER_INT1.rda') -upload_testing_dataset_table(opal, 'CLUSTER', 'CLUSTER_INT2', 'CLUSTER/CLUSTER_INT2.rda') -upload_testing_dataset_table(opal, 'CLUSTER', 'CLUSTER_INT3', 'CLUSTER/CLUSTER_INT3.rda') - -upload_testing_dataset_table(opal, 'CLUSTER', 'CLUSTER_SLO1', 'CLUSTER/CLUSTER_SLO1.rda') -upload_testing_dataset_table(opal, 'CLUSTER', 'CLUSTER_SLO2', 'CLUSTER/CLUSTER_SLO2.rda') -upload_testing_dataset_table(opal, 'CLUSTER', 'CLUSTER_SLO3', 'CLUSTER/CLUSTER_SLO3.rda') - -upload_testing_dataset_table(opal, 'CNSIM', 'CNSIM1', 'CNSIM/CNSIM1.rda') -upload_testing_dataset_table(opal, 'CNSIM', 'CNSIM2', 'CNSIM/CNSIM2.rda') -upload_testing_dataset_table(opal, 'CNSIM', 'CNSIM3', 'CNSIM/CNSIM3.rda') - -upload_testing_dataset_table(opal, 'DASIM', 'DASIM1', 'DASIM/DASIM1.rda') -upload_testing_dataset_table(opal, 'DASIM', 'DASIM2', 'DASIM/DASIM2.rda') -upload_testing_dataset_table(opal, 'DASIM', 'DASIM3', 'DASIM/DASIM3.rda') - -upload_testing_dataset_table(opal, 'DISCORDANT', 'DISCORDANT_STUDY1', 'DISCORDANT/DISCORDANT_STUDY1.rda') -upload_testing_dataset_table(opal, 'DISCORDANT', 'DISCORDANT_STUDY2', 'DISCORDANT/DISCORDANT_STUDY2.rda') -upload_testing_dataset_table(opal, 'DISCORDANT', 'DISCORDANT_STUDY3', 'DISCORDANT/DISCORDANT_STUDY3.rda') - -upload_testing_dataset_table(opal, 'FACTOR_LEVELS', 'FACTOR_LEVELS1', 'FACTOR_LEVELS/FACTOR_LEVELS1.rda') -upload_testing_dataset_table(opal, 'FACTOR_LEVELS', 'FACTOR_LEVELS2', 'FACTOR_LEVELS/FACTOR_LEVELS2.rda') -upload_testing_dataset_table(opal, 'FACTOR_LEVELS', 'FACTOR_LEVELS3', 'FACTOR_LEVELS/FACTOR_LEVELS3.rda') - -upload_testing_dataset_table(opal, 'GAMLSS', 'gamlss1', 'GAMLSS/gamlss1.rda') -upload_testing_dataset_table(opal, 'GAMLSS', 'gamlss2', 'GAMLSS/gamlss2.rda') -upload_testing_dataset_table(opal, 'GAMLSS', 'gamlss3', 'GAMLSS/gamlss3.rda') - -upload_testing_dataset_table(opal, 'SURVIVAL', 'COLLAPSE_WITH_MISSING1', 'SURVIVAL/COLLAPSE_MISSING/COLLAPSE_WITH_MISSING1.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'COLLAPSE_WITH_MISSING2', 'SURVIVAL/COLLAPSE_MISSING/COLLAPSE_WITH_MISSING2.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'COLLAPSE_WITH_MISSING3', 'SURVIVAL/COLLAPSE_MISSING/COLLAPSE_WITH_MISSING3.rda') - -upload_testing_dataset_table(opal, 'SURVIVAL', 'COLLAPSE_NO_MISSING1', 'SURVIVAL/COLLAPSE_NO_MISSING/COLLAPSE_NO_MISSING1.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'COLLAPSE_NO_MISSING2', 'SURVIVAL/COLLAPSE_NO_MISSING/COLLAPSE_NO_MISSING2.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'COLLAPSE_NO_MISSING3', 'SURVIVAL/COLLAPSE_NO_MISSING/COLLAPSE_NO_MISSING3.rda') - -upload_testing_dataset_table(opal, 'SURVIVAL', 'EXPAND_WITH_MISSING1', 'SURVIVAL/EXPAND_MISSING/EXPAND_WITH_MISSING1.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'EXPAND_WITH_MISSING2', 'SURVIVAL/EXPAND_MISSING/EXPAND_WITH_MISSING2.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'EXPAND_WITH_MISSING3', 'SURVIVAL/EXPAND_MISSING/EXPAND_WITH_MISSING3.rda') - -upload_testing_dataset_table(opal, 'SURVIVAL', 'EXPAND_NO_MISSING1', 'SURVIVAL/EXPAND_NO_MISSING/EXPAND_NO_MISSING1.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'EXPAND_NO_MISSING2', 'SURVIVAL/EXPAND_NO_MISSING/EXPAND_NO_MISSING2.rda') -upload_testing_dataset_table(opal, 'SURVIVAL', 'EXPAND_NO_MISSING3', 'SURVIVAL/EXPAND_NO_MISSING/EXPAND_NO_MISSING3.rda') - -upload_testing_dataset_table(opal, 'TESTING', 'DATASET1', 'TESTING/DATASET1.rda') -upload_testing_dataset_table(opal, 'TESTING', 'DATASET2', 'TESTING/DATASET2.rda') -upload_testing_dataset_table(opal, 'TESTING', 'DATASET3', 'TESTING/DATASET3.rda') - -opal.logout(opal) diff --git a/tests/testthat/definition_tests/def-ds.dataFrameSort.R b/tests/testthat/definition_tests/def-ds.dataFrameSort.R index 52edf057..02d65512 100644 --- a/tests/testthat/definition_tests/def-ds.dataFrameSort.R +++ b/tests/testthat/definition_tests/def-ds.dataFrameSort.R @@ -140,46 +140,6 @@ for ( i in 1:length(server.data)){ expect_equal(server.data[[i]][,key.name], sort.local[[i]][,key.name], - ds.test_env$low_tolerance) + ds.test_env$tolerance) } } - -.closure.test<-function(initial.df.name,key.name,sort.descending,sort.method,df.created,local.df.list) -{ - for(i in 1:length(local.df.list)) - { - # Initial set (local set) - local.vec<-local.df.list[[i]][,key.name] - initial.set<-unique(local.vec) - # Sort server dfs - sort.key.name<-paste(initial.df.name,key.name,sep="$") - ds.dataFrameSort(df.name = initial.df.name, - sort.key.name = sort.key.name, - sort.descending = sort.descending, - sort.method = sort.method, - newobj =df.created, - datasources = ds.test_env$connection) - - server.data<-dsDangerClient::ds.DANGERdfEXTRACT(df.created, - datasources = ds.test_env$connections) - server.data<-server.data$study.specific.df - - # Final set (server set) - server.vec<-server.data[[i]][,key.name] - final.set<-unique(server.vec) - - # Test - closure.vector <- final.set %in% initial.set - closure.vector.unique.value <- unique(closure.vector) - - expect_equal(length(closure.vector.unique.value), - 1, - ds.test_env$tolerance) - - expect_equal(closure.vector.unique.value, - TRUE, - ds.test_env$tolerance) - } -} - - diff --git a/tests/testthat/definition_tests/def-ds.dataFrameSubset.R b/tests/testthat/definition_tests/def-ds.dataFrameSubset.R index 9c5ffb11..a5773f25 100644 --- a/tests/testthat/definition_tests/def-ds.dataFrameSubset.R +++ b/tests/testthat/definition_tests/def-ds.dataFrameSubset.R @@ -163,7 +163,7 @@ subset.by.rows<-function(initial.df.name,V1.name,V2.name,boole,keep.NAs,df.creat } dist.local <- .calc.distribution.locally(local.rbind.df[,V1.name]) dist.server <- .calc.distribution.server(subset.var) - expect_equal(dist.local,dist.server, tolerance = ds.test_env$low_tolerance) + expect_equal(dist.local,dist.server, tolerance = ds.test_env$tolerance) } @@ -266,68 +266,5 @@ subset.by.cols<-function(initial.df.name,V1.name,keep.cols,keep.NAs,df.created,l # } } - -.closure.test<-function(initial.df.name,V1.name,V2.name,boole,keep.NAs,df.created,local.df.list) -{ - for(i in 1:length(local.df.list)) - { - # Initial set (local set) - ## Variable 1 - local.vec.var1<-local.df.list[[i]][,V1.name] - initial.set.var1<-unique(local.vec.var1) - - ## Variable 2 - local.vec.var2<-local.df.list[[i]][,V2.name] - initial.set.var2<-unique(local.vec.var2) - - # Subset server dfs - var1<-paste(initial.df.name,V1.name,sep="$") - var2<-paste(initial.df.name,V2.name,sep="$") - ds.dataFrameSubset(df.name = initial.df.name, - V1.name = var1, - V2.name = var2, - Boolean.operator = boole, - keep.NAs = keep.NAs, - newobj = df.created, - datasources = ds.test_env$connections) - server.data<-dsDangerClient::ds.DANGERdfEXTRACT(df.created, - datasources = ds.test_env$connections) - server.data<-server.data$study.specific.df - - # Final set (server set) - ## Variable 1 - server.vec.var1<-server.data[[i]][,V1.name] - final.set.var1<-unique(server.vec.var1) - ## Variable 2 - server.vec.var2<-server.data[[i]][,V2.name] - final.set.var2<-unique(server.vec.var2) - - - # Test - ## Variable 1 - closure.vector.var1 <- final.set.var1 %in% initial.set.var1 - closure.vector.unique.value.var1 <- unique(closure.vector.var1) - - expect_equal(length(closure.vector.unique.value.var1), - 1, - ds.test_env$tolerance) - - expect_equal(closure.vector.unique.value.var1, - TRUE, - ds.test_env$tolerance) - ## Variable 2 - closure.vector.var2 <- final.set.var2 %in% initial.set.var2 - closure.vector.unique.value.var2 <- unique(closure.vector.var2) - - expect_equal(length(closure.vector.unique.value.var2), - 1, - ds.test_env$tolerance) - - expect_equal(closure.vector.unique.value.var2, - TRUE, - ds.test_env$tolerance) - } -} - # Clear the Datashield R sessions and logout datashield.logout(ds.test_env$connections) diff --git a/tests/testthat/definition_tests/def-ds.mean.R b/tests/testthat/definition_tests/def-ds.mean.R index 9cec838a..1e1873f2 100644 --- a/tests/testthat/definition_tests/def-ds.mean.R +++ b/tests/testthat/definition_tests/def-ds.mean.R @@ -16,16 +16,16 @@ source("definition_tests/def-assign-stats.R") mean.local.3 <- mean(some.values.3) mean.server <- ds.mean(x=variable.name,type='split', check=TRUE,save.mean.Nvalid=FALSE) - expect_equal(mean.server[[1]][1], mean.local.1, tolerance = ds.test_env$low_tolerance) - expect_equal(mean.server[[1]][2], mean.local.2, tolerance = ds.test_env$low_tolerance) - expect_equal(mean.server[[1]][3], mean.local.3, tolerance = ds.test_env$low_tolerance) + expect_equal(mean.server[[1]][1], mean.local.1, tolerance = ds.test_env$tolerance) + expect_equal(mean.server[[1]][2], mean.local.2, tolerance = ds.test_env$tolerance) + expect_equal(mean.server[[1]][3], mean.local.3, tolerance = ds.test_env$tolerance) } .test.residual.combined <- function(variable.name, some.values) { mean.server <- ds.mean(variable.name,type='combine', check=TRUE,save.mean.Nvalid=FALSE) residue <- sum(some.values - mean.server[[1]][1]) - expect_equal(residue, 0, tolerance = ds.test_env$very_low_tolerance) + expect_equal(residue, 0, tolerance = ds.test_env$tolerance) } @@ -36,9 +36,9 @@ source("definition_tests/def-assign-stats.R") residue.2 <- sum(some.values.2 - mean.server[[1]][2]) residue.3 <- sum(some.values.3 - mean.server[[1]][3]) - expect_equal(residue.1, 0, tolerance = ds.test_env$very_low_tolerance) - expect_equal(residue.2, 0, tolerance = ds.test_env$very_low_tolerance) - expect_equal(residue.3, 0, tolerance = ds.test_env$very_low_tolerance) + expect_equal(residue.1, 0, tolerance = ds.test_env$tolerance) + expect_equal(residue.2, 0, tolerance = ds.test_env$tolerance) + expect_equal(residue.3, 0, tolerance = ds.test_env$tolerance) } .test.mean.large <- function(variable.name, some.values) diff --git a/tests/testthat/definition_tests/def-ds.skewness.R b/tests/testthat/definition_tests/def-ds.skewness.R index 44365821..bffa9f8f 100644 --- a/tests/testthat/definition_tests/def-ds.skewness.R +++ b/tests/testthat/definition_tests/def-ds.skewness.R @@ -23,9 +23,9 @@ skewness.server.2 <- round(as.numeric(skewness.server[[1]][2]), digits = 8) skewness.server.3 <- round(as.numeric(skewness.server[[1]][3]), digits = 8) - expect_equal(skewness.server.1, skewness.local.1, tolerance = ds.test_env$low_tolerance) - expect_equal(skewness.server.2, skewness.local.2, tolerance = ds.test_env$low_tolerance) - expect_equal(skewness.server.3, skewness.local.3, tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.server.1, skewness.local.1, tolerance = ds.test_env$tolerance) + expect_equal(skewness.server.2, skewness.local.2, tolerance = ds.test_env$tolerance) + expect_equal(skewness.server.3, skewness.local.3, tolerance = ds.test_env$tolerance) } .test.skewness.mean.median.mode<-function(variable.name,method) diff --git a/tests/testthat/definition_tests/def-ds.var.R b/tests/testthat/definition_tests/def-ds.var.R index a8a16994..87fc3587 100644 --- a/tests/testthat/definition_tests/def-ds.var.R +++ b/tests/testthat/definition_tests/def-ds.var.R @@ -16,9 +16,9 @@ source("definition_tests/def-assign-stats.R") var.servers <- ds.var(x=variable.name,type='split', check=TRUE) - expect_equal(var.servers[[1]][1], var.local.1, tolerance = ds.test_env$low_tolerance) - expect_equal(var.servers[[1]][2], var.local.2, tolerance = ds.test_env$low_tolerance) - expect_equal(var.servers[[1]][3], var.local.3, tolerance = ds.test_env$low_tolerance) + expect_equal(var.servers[[1]][1], var.local.1, tolerance = ds.test_env$tolerance) + expect_equal(var.servers[[1]][2], var.local.2, tolerance = ds.test_env$tolerance) + expect_equal(var.servers[[1]][3], var.local.3, tolerance = ds.test_env$tolerance) } .test.variance.positive.combine <- function(variable.name) @@ -55,9 +55,9 @@ source("definition_tests/def-assign-stats.R") std.servers[2] <- sqrt(var.servers[[1]][2]) std.servers[3] <- sqrt(var.servers[[1]][3]) - expect_equal(std.servers[1],std.local.1, tolerance = ds.test_env$low_tolerance) - expect_equal(std.servers[2],std.local.2, tolerance = ds.test_env$low_tolerance) - expect_equal(std.servers[3],std.local.3, tolerance = ds.test_env$low_tolerance) + expect_equal(std.servers[1],std.local.1, tolerance = ds.test_env$tolerance) + expect_equal(std.servers[2],std.local.2, tolerance = ds.test_env$tolerance) + expect_equal(std.servers[3],std.local.3, tolerance = ds.test_env$tolerance) } .test.variance.large <- function(variable.name, some.values) diff --git a/tests/testthat/dstest_functions/ds_expect_variables.R b/tests/testthat/dstest_functions/ds_expect_variables.R index 15c3eafe..0f4e4bca 100644 --- a/tests/testthat/dstest_functions/ds_expect_variables.R +++ b/tests/testthat/dstest_functions/ds_expect_variables.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/perf_files/armadillo_azure-pipeline.csv b/tests/testthat/perf_files/armadillo_azure-pipeline.csv deleted file mode 100644 index 5fd247c9..00000000 --- a/tests/testthat/perf_files/armadillo_azure-pipeline.csv +++ /dev/null @@ -1,14 +0,0 @@ -"refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.1050","0.5","2" -"ds.abs::perf::0","3.896","0.5","2" -"ds.asInteger::perf:0","3.550","0.5","2" -"ds.asList::perf:0","8.040","0.5","2" -"ds.asNumeric::perf:0","3.577","0.5","2" -"ds.assign::perf::0","6.739","0.5","2" -"ds.class::perf::combine:0","8.171","0.5","2" -"ds.colnames::perf:0","6.292","0.5","2" -"ds.exists::perf::combine:0","16.33","0.5","2" -"ds.length::perf::combine:0","16.08","0.5","2" -"ds.mean::perf::combine:0","16.08","0.5","2" -"ds.mean::perf::split:0","15.83","0.5","2" -"void::perf::void::0","36510.0","0.5","2" diff --git a/tests/testthat/perf_files/armadillo_hp-laptop_quay.csv b/tests/testthat/perf_files/armadillo_hp-laptop_quay.csv deleted file mode 100644 index 417e89f4..00000000 --- a/tests/testthat/perf_files/armadillo_hp-laptop_quay.csv +++ /dev/null @@ -1,14 +0,0 @@ -"refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.0728825086646545","0.5","2" -"ds.abs::perf::0","1.82780826738886","0.5","2" -"ds.asInteger::perf:0","1.82494215205532","0.5","2" -"ds.asList::perf:0","4.63744814345485","0.5","2" -"ds.asNumeric::perf:0","2.17634899364127","0.5","2" -"ds.assign::perf::0","4.03888444894903","0.5","2" -"ds.class::perf::combine:0","4.99978056980171","0.5","2" -"ds.colnames::perf:0","3.24967546869707","0.5","2" -"ds.exists::perf::combine:0","9.59415959170337","0.5","2" -"ds.length::perf::combine:0","9.9987761882776","0.5","2" -"ds.mean::perf::combine:0","8.62936433290321","0.5","2" -"ds.mean::perf::split:0","8.55029467108351","0.5","2" -"void::perf::void::0","21874.0401780822","0.5","2" diff --git a/tests/testthat/perf_files/default_perf_profile.csv b/tests/testthat/perf_files/default_perf_profile.csv deleted file mode 100644 index 5fd247c9..00000000 --- a/tests/testthat/perf_files/default_perf_profile.csv +++ /dev/null @@ -1,14 +0,0 @@ -"refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.1050","0.5","2" -"ds.abs::perf::0","3.896","0.5","2" -"ds.asInteger::perf:0","3.550","0.5","2" -"ds.asList::perf:0","8.040","0.5","2" -"ds.asNumeric::perf:0","3.577","0.5","2" -"ds.assign::perf::0","6.739","0.5","2" -"ds.class::perf::combine:0","8.171","0.5","2" -"ds.colnames::perf:0","6.292","0.5","2" -"ds.exists::perf::combine:0","16.33","0.5","2" -"ds.length::perf::combine:0","16.08","0.5","2" -"ds.mean::perf::combine:0","16.08","0.5","2" -"ds.mean::perf::split:0","15.83","0.5","2" -"void::perf::void::0","36510.0","0.5","2" diff --git a/tests/testthat/perf_files/opal_azure-pipeline.csv b/tests/testthat/perf_files/opal_azure-pipeline.csv deleted file mode 100644 index 9d5c755f..00000000 --- a/tests/testthat/perf_files/opal_azure-pipeline.csv +++ /dev/null @@ -1,14 +0,0 @@ -"refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.229","0.5","2" -"ds.abs::perf::0","1.796","0.5","2" -"ds.asInteger::perf:0","1.538","0.5","2" -"ds.asList::perf:0","3.061","0.5","2" -"ds.asNumeric::perf:0","1.548","0.5","2" -"ds.assign::perf::0","3.556","0.5","2" -"ds.class::perf::combine:0","3.149","0.5","2" -"ds.colnames::perf:0","2.584","0.5","2" -"ds.exists::perf::combine:0","7.138","0.5","2" -"ds.length::perf::combine:0","6.385","0.5","2" -"ds.mean::perf::combine:0","5.982","0.5","2" -"ds.mean::perf::split:0","6.923","0.5","2" -"void::perf::void::0","41810.0","0.5","2" diff --git a/tests/testthat/perf_files/opal_hp-laptop_quay.csv b/tests/testthat/perf_files/opal_hp-laptop_quay.csv deleted file mode 100644 index da068a01..00000000 --- a/tests/testthat/perf_files/opal_hp-laptop_quay.csv +++ /dev/null @@ -1,14 +0,0 @@ -"refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.145258829974366","0.5","2" -"ds.abs::perf::0","0.685354162883962","0.5","2" -"ds.asInteger::perf:0","0.757343916339244","0.5","2" -"ds.asList::perf:0","1.39411478465579","0.5","2" -"ds.asNumeric::perf:0","0.695929483688074","0.5","2" -"ds.assign::perf::0","1.98579096107968","0.5","2" -"ds.class::perf::combine:0","1.83959664387857","0.5","2" -"ds.colnames::perf:0","1.38390626627527","0.5","2" -"ds.exists::perf::combine:0","4.37111331491725","0.5","2" -"ds.length::perf::combine:0","2.99769707214692","0.5","2" -"ds.mean::perf::combine:0","3.14458208946095","0.5","2" -"ds.mean::perf::split:0","4.258064355457","0.5","2" -"void::perf::void::0","20588.7831697084","0.5","2" diff --git a/tests/testthat/perf_tests/perf_rate.R b/tests/testthat/perf_tests/perf_rate.R deleted file mode 100644 index 1884cda8..00000000 --- a/tests/testthat/perf_tests/perf_rate.R +++ /dev/null @@ -1,50 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -.perf.reference.filename <- 'perf_files/default_perf_profile.csv' - -.perf.reference <- NULL - -.load.pref <- function() { - .perf.reference <<- read.csv(.perf.reference.filename, header = TRUE, sep = ",") -} - -perf.reference.save <- function(perf.ref.name, rate, tolerance.lower, tolerance.upper) { - if (is.null(.perf.reference)) - load.pref() - - .perf.reference[nrow(.perf.reference)+1,] <- c(perf.ref.name, rate, tolerance.lower, tolerance.upper) - - write.csv(.perf.reference, .perf.reference.filename, row.names = FALSE) - - .perf.reference <<- .perf.reference -} - -perf.reference.rate <- function(perf.ref.name) { - if (is.null(.perf.reference)) - .load.pref() - - return(as.numeric(.perf.reference[which(.perf.reference$refer_name == perf.ref.name),]$rate)) -} - -perf.reference.tolerance.lower <- function(perf.ref.name) { - if (is.null(.perf.reference)) - .load.pref() - - return(as.numeric(.perf.reference[which(.perf.reference$refer_name == perf.ref.name),]$lower_tolerance)) -} - -perf.reference.tolerance.upper <- function(perf.ref.name) { - if (is.null(.perf.reference)) - .load.pref() - - return(as.numeric(.perf.reference[which(.perf.reference$refer_name == perf.ref.name),]$upper_tolerance)) -} - diff --git a/tests/testthat/setup.R b/tests/testthat/setup.R index 4c55c6e7..4f1d6ce9 100644 --- a/tests/testthat/setup.R +++ b/tests/testthat/setup.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -14,23 +13,17 @@ context("setup - start") -# Convert 'warnings' to 'errors' -# options(warn = 2) - library(lme4) library(e1071) library(DescTools) library(DSOpal) -library(DSMolgenisArmadillo) library(DSLite) source("dstest_functions/ds_expect_variables.R") -source("perf_tests/perf_rate.R") source("connection_to_datasets/login_details.R") source("connection_to_datasets/init_testing_datasets.R") source("connection_to_datasets/init_studies_datasets.R") source("connection_to_datasets/init_discordant_datasets.R") -source("connection_to_datasets/init_mediation_datasets.R") context("setup - done") diff --git a/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-both.rds b/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-both.rds index ba0028ed..38ec116d 100644 Binary files a/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-both.rds and b/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-both.rds differ diff --git a/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-combine.rds b/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-combine.rds index 5d1e7b55..c92c37ce 100644 Binary files a/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-combine.rds and b/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-combine.rds differ diff --git a/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-split.rds b/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-split.rds index 52bdfdc3..ea466708 100644 Binary files a/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-split.rds and b/tests/testthat/smk_expt-results/ds.mean-LAB_TRIG-split.rds differ diff --git a/tests/testthat/smk_expt-results/ds.ranksSecure-cont.rds b/tests/testthat/smk_expt-results/ds.ranksSecure-cont.rds deleted file mode 100644 index fe6633ef..00000000 Binary files a/tests/testthat/smk_expt-results/ds.ranksSecure-cont.rds and /dev/null differ diff --git a/tests/testthat/smk_expt-results/ds.ranksSecure-cont_nas.rds b/tests/testthat/smk_expt-results/ds.ranksSecure-cont_nas.rds deleted file mode 100644 index fe6633ef..00000000 Binary files a/tests/testthat/smk_expt-results/ds.ranksSecure-cont_nas.rds and /dev/null differ diff --git a/tests/testthat/smk_expt-results/ds.ranksSecure-cont_nas_neg.rds b/tests/testthat/smk_expt-results/ds.ranksSecure-cont_nas_neg.rds deleted file mode 100644 index 4a22af0a..00000000 Binary files a/tests/testthat/smk_expt-results/ds.ranksSecure-cont_nas_neg.rds and /dev/null differ diff --git a/tests/testthat/smk_expt-results/ds.ranksSecure-cont_neg.rds b/tests/testthat/smk_expt-results/ds.ranksSecure-cont_neg.rds deleted file mode 100644 index 4a22af0a..00000000 Binary files a/tests/testthat/smk_expt-results/ds.ranksSecure-cont_neg.rds and /dev/null differ diff --git a/tests/testthat/teardown.R b/tests/testthat/teardown.R index 710dac81..59033c47 100644 --- a/tests/testthat/teardown.R +++ b/tests/testthat/teardown.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-_-vm-test.R b/tests/testthat/test-_-vm-test.R index 952425f5..23f56a95 100644 --- a/tests/testthat/test-_-vm-test.R +++ b/tests/testthat/test-_-vm-test.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -25,8 +25,8 @@ context("vm-test::_::tests::vm") test_that("The virtual machine is loaded. ", { - response <- httr::HEAD(url=ds.test_env$ping_address, config=ds.test_env$ping_config) - expect_true(http_status(response)$reason %in% c("OK", "Unauthorized")) + response <- httr::HEAD(url=ds.test_env$ping_address, config=config(timeout=5)) + expect_equal(http_status(response)$reason, "OK") }) # diff --git a/tests/testthat/test-arg-ds.Boole.R b/tests/testthat/test-arg-ds.Boole.R index fdfc4502..85a8aa68 100644 --- a/tests/testthat/test-arg-ds.Boole.R +++ b/tests/testthat/test-arg-ds.Boole.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asCharacter.R b/tests/testthat/test-arg-ds.asCharacter.R index a007ec6a..eeb469d5 100644 --- a/tests/testthat/test-arg-ds.asCharacter.R +++ b/tests/testthat/test-arg-ds.asCharacter.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asDataMatrix.R b/tests/testthat/test-arg-ds.asDataMatrix.R index e84e2281..ddccde8d 100644 --- a/tests/testthat/test-arg-ds.asDataMatrix.R +++ b/tests/testthat/test-arg-ds.asDataMatrix.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asFactor.R b/tests/testthat/test-arg-ds.asFactor.R index bfc4662d..f59ce0ae 100644 --- a/tests/testthat/test-arg-ds.asFactor.R +++ b/tests/testthat/test-arg-ds.asFactor.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asInteger.R b/tests/testthat/test-arg-ds.asInteger.R index a6a1196e..6f7c6852 100644 --- a/tests/testthat/test-arg-ds.asInteger.R +++ b/tests/testthat/test-arg-ds.asInteger.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asList.R b/tests/testthat/test-arg-ds.asList.R index c498d36c..5ad05d82 100644 --- a/tests/testthat/test-arg-ds.asList.R +++ b/tests/testthat/test-arg-ds.asList.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asLogical.R b/tests/testthat/test-arg-ds.asLogical.R index 64912059..bd2e8cdf 100644 --- a/tests/testthat/test-arg-ds.asLogical.R +++ b/tests/testthat/test-arg-ds.asLogical.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asMatrix.R b/tests/testthat/test-arg-ds.asMatrix.R index 5c7c8ebd..0109bfcd 100644 --- a/tests/testthat/test-arg-ds.asMatrix.R +++ b/tests/testthat/test-arg-ds.asMatrix.R @@ -1,4 +1,4 @@ -#Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +#Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.asNumeric.R b/tests/testthat/test-arg-ds.asNumeric.R index b821c842..c489f4fe 100644 --- a/tests/testthat/test-arg-ds.asNumeric.R +++ b/tests/testthat/test-arg-ds.asNumeric.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.assign.R b/tests/testthat/test-arg-ds.assign.R index 9c1cdac0..c639705a 100644 --- a/tests/testthat/test-arg-ds.assign.R +++ b/tests/testthat/test-arg-ds.assign.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.auc.R b/tests/testthat/test-arg-ds.auc.R deleted file mode 100644 index 7c42585f..00000000 --- a/tests/testthat/test-arg-ds.auc.R +++ /dev/null @@ -1,35 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.auc::arg::setup") - -# -# Tests -# - -context("ds.auc::arg::test errors") - -test_that("ds.auc errors for null pred or y", { - - expect_error(ds.auc(pred=NULL, y='y'), "Please provide the name of the vector with predicted values", fixed=TRUE) - expect_error(ds.auc(pred='pred', y=NULL), "Please provide the name of the outcome variable", fixed=TRUE) - -}) - -# -# Done -# - -context("ds.auc::arg::shutdown") -context("ds.auc::arg::done") diff --git a/tests/testthat/test-arg-ds.c.R b/tests/testthat/test-arg-ds.c.R index 3371d591..b150f2f5 100644 --- a/tests/testthat/test-arg-ds.c.R +++ b/tests/testthat/test-arg-ds.c.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.cbind.R b/tests/testthat/test-arg-ds.cbind.R index d600ac83..9cee6173 100644 --- a/tests/testthat/test-arg-ds.cbind.R +++ b/tests/testthat/test-arg-ds.cbind.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.changeRefGroup.R b/tests/testthat/test-arg-ds.changeRefGroup.R index 1baffe40..e4320b9a 100644 --- a/tests/testthat/test-arg-ds.changeRefGroup.R +++ b/tests/testthat/test-arg-ds.changeRefGroup.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.class.R b/tests/testthat/test-arg-ds.class.R index c7240c7b..e9b482db 100644 --- a/tests/testthat/test-arg-ds.class.R +++ b/tests/testthat/test-arg-ds.class.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.colnames.R b/tests/testthat/test-arg-ds.colnames.R index bbbaa5e9..494303ca 100644 --- a/tests/testthat/test-arg-ds.colnames.R +++ b/tests/testthat/test-arg-ds.colnames.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.completeCases.R b/tests/testthat/test-arg-ds.completeCases.R index a1385638..d19ddc32 100644 --- a/tests/testthat/test-arg-ds.completeCases.R +++ b/tests/testthat/test-arg-ds.completeCases.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.cor.R b/tests/testthat/test-arg-ds.cor.R index 9f728e1a..ef9992f4 100644 --- a/tests/testthat/test-arg-ds.cor.R +++ b/tests/testthat/test-arg-ds.cor.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.corTest.R b/tests/testthat/test-arg-ds.corTest.R index ac80a40c..8a7aa74c 100644 --- a/tests/testthat/test-arg-ds.corTest.R +++ b/tests/testthat/test-arg-ds.corTest.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.cov.R b/tests/testthat/test-arg-ds.cov.R index 0958c65a..c6c72f17 100644 --- a/tests/testthat/test-arg-ds.cov.R +++ b/tests/testthat/test-arg-ds.cov.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.dataFrame.R b/tests/testthat/test-arg-ds.dataFrame.R index 9d76b7be..4127e1ea 100644 --- a/tests/testthat/test-arg-ds.dataFrame.R +++ b/tests/testthat/test-arg-ds.dataFrame.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -22,7 +22,7 @@ context("ds.dataFrame::arg::test errors") test_that("dataframe_erros", { expect_error(ds.dataFrame(), "Please provide the name of the list that holds the input vectors!", fixed=TRUE) - ds.asList(x='D$LAB_TSC', newobj="as_list") + ds.asList(x='D$A', newobj="as_list") expect_error(ds.dataFrame("as_list", DataSHIELD.checks=TRUE), "Only objects of type 'data.frame', 'matrix', 'numeric', 'integer', 'character', 'factor' and 'logical' are allowed.", fixed=TRUE) }) diff --git a/tests/testthat/test-arg-ds.dataFrameFill.R b/tests/testthat/test-arg-ds.dataFrameFill.R index 0e71d2e5..6c961682 100644 --- a/tests/testthat/test-arg-ds.dataFrameFill.R +++ b/tests/testthat/test-arg-ds.dataFrameFill.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -21,7 +21,7 @@ connect.studies.dataset.cnsim(list("LAB_TSC")) context("ds.dataFrameFill::arg::test errors") test_that("dataFrameFill_erros", { expect_error(ds.dataFrameFill(), "Please provide the name of the data.frame to be filled as a character string: eg 'xxx'", fixed=TRUE) - expect_error(ds.dataFrameFill("NonDF"), "The input object NonDF is not defined in sim1, sim2, sim3!", fixed=TRUE) + expect_error(ds.dataFrameFill("NonDF"), "The input object(s) NonDF is(are) not defined on one or more of the studies!", fixed=TRUE) expect_error(ds.dataFrameFill("D$LAB_TSC"), "The input vector must be of type 'data.frame' or a 'matrix'!", fixed=TRUE) }) diff --git a/tests/testthat/test-arg-ds.dataFrameSort.R b/tests/testthat/test-arg-ds.dataFrameSort.R index 65a1c2cf..cfdc5585 100644 --- a/tests/testthat/test-arg-ds.dataFrameSort.R +++ b/tests/testthat/test-arg-ds.dataFrameSort.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -25,9 +25,9 @@ test_that("dataFrameSort_noargs", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* Error in strsplit\\(df.name, split = \"\"\\) : non-character argument*") - expect_match(res.errors$sim2, "* Error in strsplit\\(df.name, split = \"\"\\) : non-character argument*") - expect_match(res.errors$sim3, "* Error in strsplit\\(df.name, split = \"\"\\) : non-character argument*") + expect_equal(res.errors$sim1, "Command 'dataFrameSortDS(NULL, NULL, FALSE, \"default\")' failed on 'sim1': Error while evaluating 'is.null(base::assign('dataframesort.newobj', value={dsBase::dataFrameSortDS(NULL, NULL, FALSE, \"default\")}))' -> Error in strsplit(df.name, split = \"\") : non-character argument\n", fixed=TRUE) + expect_equal(res.errors$sim2, "Command 'dataFrameSortDS(NULL, NULL, FALSE, \"default\")' failed on 'sim2': Error while evaluating 'is.null(base::assign('dataframesort.newobj', value={dsBase::dataFrameSortDS(NULL, NULL, FALSE, \"default\")}))' -> Error in strsplit(df.name, split = \"\") : non-character argument\n", fixed=TRUE) + expect_equal(res.errors$sim3, "Command 'dataFrameSortDS(NULL, NULL, FALSE, \"default\")' failed on 'sim3': Error while evaluating 'is.null(base::assign('dataframesort.newobj', value={dsBase::dataFrameSortDS(NULL, NULL, FALSE, \"default\")}))' -> Error in strsplit(df.name, split = \"\") : non-character argument\n", fixed=TRUE) }) context("ds.dataFrameSort::arg::sorted dataframe, of factors") @@ -40,9 +40,9 @@ test_that("dataFrameSort_factors", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* Error : specified sort.key variable is of type 'factor'*") - expect_match(res.errors$sim2, "* Error : specified sort.key variable is of type 'factor'*") - expect_match(res.errors$sim3, "* Error : specified sort.key variable is of type 'factor'*") + expect_equal(res.errors$sim1, "Command 'dataFrameSortDS(\"unsorted_df\", \"D$GENDER\", FALSE, \"default\")' failed on 'sim1': Error while evaluating 'is.null(base::assign('sorted_df', value={dsBase::dataFrameSortDS(\"unsorted_df\", \"D$GENDER\", FALSE, \"default\")}))' -> Error : specified sort.key variable is of type 'factor'\n", fixed=TRUE) + expect_equal(res.errors$sim2, "Command 'dataFrameSortDS(\"unsorted_df\", \"D$GENDER\", FALSE, \"default\")' failed on 'sim2': Error while evaluating 'is.null(base::assign('sorted_df', value={dsBase::dataFrameSortDS(\"unsorted_df\", \"D$GENDER\", FALSE, \"default\")}))' -> Error : specified sort.key variable is of type 'factor'\n", fixed=TRUE) + expect_equal(res.errors$sim3, "Command 'dataFrameSortDS(\"unsorted_df\", \"D$GENDER\", FALSE, \"default\")' failed on 'sim3': Error while evaluating 'is.null(base::assign('sorted_df', value={dsBase::dataFrameSortDS(\"unsorted_df\", \"D$GENDER\", FALSE, \"default\")}))' -> Error : specified sort.key variable is of type 'factor'\n", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.dataFrameSubset.R b/tests/testthat/test-arg-ds.dataFrameSubset.R index 4bd414e6..f30f6d0d 100644 --- a/tests/testthat/test-arg-ds.dataFrameSubset.R +++ b/tests/testthat/test-arg-ds.dataFrameSubset.R @@ -1,6 +1,5 @@ - #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -52,9 +51,9 @@ test_that("dataFrameSubset_erros", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* object 'M' not found*") - expect_match(res.errors$sim2, "* object 'M' not found*") - expect_match(res.errors$sim3, "* object 'M' not found*") + expect_equal(res.errors$sim1, "Command 'dataFrameSubsetDS1(\"M\", \"A\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim1': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"M\", \"A\", \"B\", 0, NULL, NULL, FALSE)' -> Error in data.frame(M) : object 'M' not found\n", fixed = TRUE) + expect_equal(res.errors$sim2, "Command 'dataFrameSubsetDS1(\"M\", \"A\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim2': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"M\", \"A\", \"B\", 0, NULL, NULL, FALSE)' -> Error in data.frame(M) : object 'M' not found\n", fixed = TRUE) + expect_equal(res.errors$sim3, "Command 'dataFrameSubsetDS1(\"M\", \"A\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim3': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"M\", \"A\", \"B\", 0, NULL, NULL, FALSE)' -> Error in data.frame(M) : object 'M' not found\n", fixed = TRUE) }) context("ds.dataFrameSubset::arg::missing 'V1' value server-side") @@ -64,9 +63,9 @@ test_that("dataFrameSubset_erros", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* Error in eval\\(parse\\(text = V1.name\\), envir = parent.frame\\(\\)\\) : \\n object 'A' not found*") - expect_match(res.errors$sim2, "* Error in eval\\(parse\\(text = V1.name\\), envir = parent.frame\\(\\)\\) : \\n object 'A' not found*") - expect_match(res.errors$sim3, "* Error in eval\\(parse\\(text = V1.name\\), envir = parent.frame\\(\\)\\) : \\n object 'A' not found*") + expect_equal(res.errors$sim1, "Command 'dataFrameSubsetDS1(\"D\", \"A\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim1': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"A\", \"B\", 0, NULL, NULL, FALSE)' -> Error in eval(parse(text = V1.name)) : object 'A' not found\n", fixed = TRUE) + expect_equal(res.errors$sim2, "Command 'dataFrameSubsetDS1(\"D\", \"A\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim2': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"A\", \"B\", 0, NULL, NULL, FALSE)' -> Error in eval(parse(text = V1.name)) : object 'A' not found\n", fixed = TRUE) + expect_equal(res.errors$sim3, "Command 'dataFrameSubsetDS1(\"D\", \"A\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim3': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"A\", \"B\", 0, NULL, NULL, FALSE)' -> Error in eval(parse(text = V1.name)) : object 'A' not found\n", fixed = TRUE) }) context("ds.dataFrameSubset::arg::missing 'V2' value server-side") @@ -76,9 +75,9 @@ test_that("dataFrameSubset_erros", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* Error in eval\\(parse\\(text = V2.name\\), envir = parent.frame\\(\\)\\) : \\n object 'B' not found*") - expect_match(res.errors$sim2, "* Error in eval\\(parse\\(text = V2.name\\), envir = parent.frame\\(\\)\\) : \\n object 'B' not found*") - expect_match(res.errors$sim3, "* Error in eval\\(parse\\(text = V2.name\\), envir = parent.frame\\(\\)\\) : \\n object 'B' not found*") + expect_equal(res.errors$sim1, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim1': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"B\", 0, NULL, NULL, FALSE)' -> Error in eval(parse(text = V2.name)) : object 'B' not found\n", fixed = TRUE) + expect_equal(res.errors$sim2, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim2': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"B\", 0, NULL, NULL, FALSE)' -> Error in eval(parse(text = V2.name)) : object 'B' not found\n", fixed = TRUE) + expect_equal(res.errors$sim3, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"B\", 0, NULL, NULL, FALSE)' failed on 'sim3': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"B\", 0, NULL, NULL, FALSE)' -> Error in eval(parse(text = V2.name)) : object 'B' not found\n", fixed = TRUE) }) context("ds.dataFrameSubset::arg::invalid 'Boolean.operator' value server-side") @@ -88,9 +87,9 @@ test_that("dataFrameSubset_erros", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* Error : FAILED: Boolean.operator must be: '==', '!=', '<', '<=', '>' or '>='*") - expect_match(res.errors$sim2, "* Error : FAILED: Boolean.operator must be: '==', '!=', '<', '<=', '>' or '>='*") - expect_match(res.errors$sim3, "* Error : FAILED: Boolean.operator must be: '==', '!=', '<', '<=', '>' or '>='*") + expect_equal(res.errors$sim1, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_TSC\", 0, NULL, NULL, \n FALSE)' failed on 'sim1': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_TSC\", 0, NULL, NULL, FALSE)' -> Error : FAILED: Boolean.operator must be: '==', '!=', '<', '<=', '>' or '>='\n", fixed = TRUE) + expect_equal(res.errors$sim2, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_TSC\", 0, NULL, NULL, \n FALSE)' failed on 'sim2': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_TSC\", 0, NULL, NULL, FALSE)' -> Error : FAILED: Boolean.operator must be: '==', '!=', '<', '<=', '>' or '>='\n", fixed = TRUE) + expect_equal(res.errors$sim3, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_TSC\", 0, NULL, NULL, \n FALSE)' failed on 'sim3': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_TSC\", 0, NULL, NULL, FALSE)' -> Error : FAILED: Boolean.operator must be: '==', '!=', '<', '<=', '>' or '>='\n", fixed = TRUE) }) # diff --git a/tests/testthat/test-arg-ds.dim.R b/tests/testthat/test-arg-ds.dim.R index 8ee68198..b7d466d0 100644 --- a/tests/testthat/test-arg-ds.dim.R +++ b/tests/testthat/test-arg-ds.dim.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.exists.R b/tests/testthat/test-arg-ds.exists.R index 7e920395..41641938 100644 --- a/tests/testthat/test-arg-ds.exists.R +++ b/tests/testthat/test-arg-ds.exists.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.exp.R b/tests/testthat/test-arg-ds.exp.R index d3a6d1ef..8cac0a2a 100644 --- a/tests/testthat/test-arg-ds.exp.R +++ b/tests/testthat/test-arg-ds.exp.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.foobar.R b/tests/testthat/test-arg-ds.foobar.R index 05cbde70..e282b2a6 100644 --- a/tests/testthat/test-arg-ds.foobar.R +++ b/tests/testthat/test-arg-ds.foobar.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -27,14 +27,7 @@ test_that("setup", { context("ds.foobar::arg::aggregate") 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) - } 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) - } else { - fail(message = "Unknown driver type", info = ds.test_env$driver) - } + 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) errs <- datashield.errors() expect_length(errs, 0) @@ -43,7 +36,7 @@ test_that("NULL connections", { context("ds.foobar::arg::aggregate") test_that("NULL expr", { calltext <- call("fooBarDS") - expect_error(expect_warning(datashield.aggregate(conns=ds.test_env$connections, expr=NULL), "'x' is NULL so the result will be NULL", fixed = TRUE), "replacement has length zero", fixed = TRUE) + expect_error(datashield.aggregate(conns=ds.test_env$connections, expr=NULL), "replacement has length zero", fixed=TRUE) errs <- datashield.errors() expect_length(errs, 0) @@ -55,27 +48,19 @@ test_that("non existent aggregate foobarDS", { expect_error(datashield.aggregate(conns=ds.test_env$connections, expr=calltext)) errs <- datashield.errors() - expect_length(errs, 3) expect_length(errs$sim1, 1) - expect_true(errs$sim1 %in% c("Command 'fooBarDS()' failed on 'sim1': No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", "[Client error: (400) Bad Request] No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", "Bad request: No such DataSHIELD 'AGGREGATE' method with name: fooBarDS")) + expect_equal(errs$sim1, "Command 'fooBarDS()' failed on 'sim1': No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", fixed=TRUE) expect_length(errs$sim2, 1) - expect_true(errs$sim2 %in% c("Command 'fooBarDS()' failed on 'sim2': No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", "[Client error: (400) Bad Request] No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", "Bad request: No such DataSHIELD 'AGGREGATE' method with name: fooBarDS")) + expect_equal(errs$sim2, "Command 'fooBarDS()' failed on 'sim2': No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", fixed=TRUE) expect_length(errs$sim3, 1) - expect_true(errs$sim3 %in% c("Command 'fooBarDS()' failed on 'sim3': No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", "[Client error: (400) Bad Request] No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", "Bad request: No such DataSHIELD 'AGGREGATE' method with name: fooBarDS")) + expect_equal(errs$sim3, "Command 'fooBarDS()' failed on 'sim3': No such DataSHIELD 'AGGREGATE' method with name: fooBarDS", fixed=TRUE) }) context("ds.foobar::arg::assign") 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) - } 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) - } else { - fail(message = "Unknown driver type", info = ds.test_env$driver) - } + 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) errs <- datashield.errors() expect_length(errs, 0) @@ -106,11 +91,11 @@ test_that("non existent assign foobarDS", { errs <- datashield.errors() expect_length(errs, 3) expect_length(errs$sim1, 1) - expect_true(errs$sim1 %in% c("Command 'fooBarDS()' failed on 'sim1': No such DataSHIELD 'ASSIGN' method with name: fooBarDS", "[Client error: (400) Bad Request] No such DataSHIELD 'ASSIGN' method with name: fooBarDS", "Bad request: No such DataSHIELD 'ASSIGN' method with name: fooBarDS")) + expect_equal(errs$sim1, "Command 'fooBarDS()' failed on 'sim1': No such DataSHIELD 'ASSIGN' method with name: fooBarDS", fixed=TRUE) expect_length(errs$sim2, 1) - expect_true(errs$sim2 %in% c("Command 'fooBarDS()' failed on 'sim2': No such DataSHIELD 'ASSIGN' method with name: fooBarDS", "[Client error: (400) Bad Request] No such DataSHIELD 'ASSIGN' method with name: fooBarDS", "Bad request: No such DataSHIELD 'ASSIGN' method with name: fooBarDS")) + expect_equal(errs$sim2, "Command 'fooBarDS()' failed on 'sim2': No such DataSHIELD 'ASSIGN' method with name: fooBarDS", fixed=TRUE) expect_length(errs$sim3, 1) - expect_true(errs$sim3 %in% c("Command 'fooBarDS()' failed on 'sim3': No such DataSHIELD 'ASSIGN' method with name: fooBarDS", "[Client error: (400) Bad Request] No such DataSHIELD 'ASSIGN' method with name: fooBarDS", "Bad request: No such DataSHIELD 'ASSIGN' method with name: fooBarDS")) + expect_equal(errs$sim3, "Command 'fooBarDS()' failed on 'sim3': No such DataSHIELD 'ASSIGN' method with name: fooBarDS", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.gamlss.R b/tests/testthat/test-arg-ds.gamlss.R deleted file mode 100644 index 7a4ec473..00000000 --- a/tests/testthat/test-arg-ds.gamlss.R +++ /dev/null @@ -1,32 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -connect.studies.dataset.gamlss(list("e3_bw", "e3_gac_None")) - -# -# Tests -# - -context("ds.gamlss::arg::test errors") -test_that("gamlss_errors", { - expect_error(ds.gamlss(), " Please provide a valid formula!", fixed=TRUE) - expect_error(ds.gamlss(formula="e3_bw ~ e3_gac_None", method="RG"), "Argument 'method' must be either 'RS', 'CG' or 'mixed'", fixed=TRUE) - expect_error(ds.gamlss(formula="e3_bw ~ e3_gac_None", method="RS", centiles=TRUE), "Provide the name of the explanatory variable in 'xvar' argument", fixed=TRUE) -}) - -# -# Done -# - -disconnect.studies.dataset.gamlss() diff --git a/tests/testthat/test-arg-ds.glm.R b/tests/testthat/test-arg-ds.glm.R index 0724e206..ce61b168 100644 --- a/tests/testthat/test-arg-ds.glm.R +++ b/tests/testthat/test-arg-ds.glm.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.glmPredict.R b/tests/testthat/test-arg-ds.glmPredict.R index 579fa5b5..05d5c2c9 100644 --- a/tests/testthat/test-arg-ds.glmPredict.R +++ b/tests/testthat/test-arg-ds.glmPredict.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -20,9 +20,17 @@ connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG", "DIS_AMI", "DIS_DIAB", context("ds.glmPredict::arg::test _glmname_ arg is correct object") test_that("glmPredict_errors", { - expect_error(ds.glmPredict(), " is not set, please specify it as a character string containing the name of a valid glm class object on the serverside", fixed=TRUE) + res<-ds.glmPredict() + expect_equal(res, " is not set, please specify it as a character string containing the name of a valid glm class object on the serverside", fixed=TRUE) - expect_error(ds.glmPredict("ABC"), "The input object ABC is not defined in sim1, sim2, sim3!", fixed=TRUE) + #expect_error(ds.glmPredict(), " Please provide a valid 'family' argument!", fixed=TRUE) + #res<-ds.glmPredict(ABC) + #expect_equal(res, "object 'ABC' not found", fixed=TRUE) + expect_error(ds.glmPredict("ABC"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) + # TODO: "some DataSHIELD errors" is unhelpful and needs improvement + expect_equal(class(datashield.errors()),"list") + expect_length(datashield.errors(),3) + expect_true(all(c("sim1","sim2","sim3") %in% names(datashield.errors()))) }) context("ds.glmPredict::arg::setting up glm obj for further testing") @@ -39,7 +47,7 @@ test_that("glmPredict_errors", { context("ds.glmPredict::arg::test _newdataname_ arg is correct object") test_that("glmPredict_errors", { - expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = "help"),"There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) + expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = "help"),"There are some DataSHIELD errors, list them with datashield.errors()") # TODO: "some DataSHIELD errors" is unhelpful and needs improvement expect_equal(class(datashield.errors()),"list") expect_length(datashield.errors(),3) @@ -48,32 +56,50 @@ test_that("glmPredict_errors", { context("ds.glmPredict::arg::test _output.type_ arg is correct object") test_that("glmPredict_errors", { - expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = NULL), "missing value where TRUE/FALSE needed", fixed=TRUE) - expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = 'blah'), " is not correctly set, please specify it as one of three character strings: 'link', 'response', or 'terms'", fixed=TRUE) + expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = NULL), "missing value where TRUE/FALSE needed") + # TODO: "true/false" is wrong message to get here, error message needs to be fixed + res<-ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = 'blah') + expect_equal(res," is not correctly set, please specify it as one of three character strings: 'link', 'response', or 'terms'") + }) context("ds.glmPredict::arg::test _se.fit_ arg is correct object") test_that("glmPredict_errors", { - expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = "1"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) + expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = "1"), "There are some DataSHIELD errors, list them with datashield.errors()") expect_equal(class(datashield.errors()),"list") expect_length(datashield.errors(),3) expect_true(all(c("sim1","sim2","sim3") %in% names(datashield.errors()))) }) -#context("ds.glmPredict::arg::test _dispersion_ arg is correct object") -#test_that("glmPredict_errors", { -# res <- ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = FALSE, dispersion = "thereisnothingontheservercalledthis") -#}) +context("ds.glmPredict::arg::test _dispersion_ arg is correct object") +test_that("glmPredict_errors", { + # res<-ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = FALSE, dispersion = "thereisnothingontheservercalledthis") + # TODO: why is dispersion passing nonsensical values without questioning it? needs error message +}) context("ds.glmPredict::arg::test _terms_ arg is correct object") test_that("glmPredict_errors", { - expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "terms", se.fit = FALSE, dispersion = NULL, terms="thereisnothingontheservercalledthis2"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) + expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "terms", se.fit = FALSE, dispersion = NULL, terms="thereisnothingontheservercalledthis2"), "There are some DataSHIELD errors, list them with datashield.errors()") + + # TODO: "some DataSHIELD errors" is unhelpful and needs improvement + expect_equal(class(datashield.errors()),"list") + expect_length(datashield.errors(),3) + expect_true(all(c("sim1","sim2","sim3") %in% names(datashield.errors()))) }) context("ds.glmPredict::arg::test _na.action_ arg is correct object") test_that("glmPredict_errors", { - expect_error(ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = FALSE, dispersion = NULL, terms=NULL, na.action= "na.other"), " is not correctly set, please specify it as one of four character strings: 'na.fail', 'na.omit', 'na.exclude' or 'na.pass'", fixed = TRUE) + res<-ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = FALSE, dispersion = NULL, terms=NULL, na.action= "na.other") + expect_equal(res, " is not correctly set, please specify it as one of four character strings: 'na.fail', 'na.omit', 'na.exclude' or 'na.pass'") +}) + + +context("ds.glmPredict::arg::test _newobj_ arg is correct object") +test_that("glmPredict_errors", { + # TODO: come up with a way to create an invalid object to then test newobj argument + # res<-ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = FALSE, dispersion = NULL, terms=NULL, na.action= "na.other") + # print(res) }) @@ -82,3 +108,17 @@ test_that("glmPredict_errors", { # disconnect.studies.dataset.cnsim() + + +#res.errors<-datashield.errors() + +#expect_length(res.errors, 3) +#expect_equal(res.errors[[1]], "Command 'glmSLMADS1(D$LAB_TSC ~ D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' failed on 'sim1': Error while evaluating 'dsBase::glmSLMADS1(D$LAB_TSC~D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' -> Error in model.frame.default(formula = formula2use, data = dataTable, : \n invalid type (NULL) for variable 'D$LAB_TRIG'\n", fixed=TRUE) +#expect_equal(res.errors[[2]], "Command 'glmSLMADS1(D$LAB_TSC ~ D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' failed on 'sim2': Error while evaluating 'dsBase::glmSLMADS1(D$LAB_TSC~D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' -> Error in model.frame.default(formula = formula2use, data = dataTable, : \n invalid type (NULL) for variable 'D$LAB_TRIG'\n", fixed=TRUE) +#expect_equal(res.errors[[3]], "Command 'glmSLMADS1(D$LAB_TSC ~ D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' failed on 'sim3': Error while evaluating 'dsBase::glmSLMADS1(D$LAB_TSC~D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' -> Error in model.frame.default(formula = formula2use, data = dataTable, : \n invalid type (NULL) for variable 'D$LAB_TRIG'\n", fixed=TRUE) +#expect_length(glm.obj$validity.check, 1) +#expect_equal(glm.obj$validity.check, " appears valid in all sources") + +#res <- ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = FALSE, na.action = "na.pass") +#res <- ds.glmPredict("gaussian.glmslma.obj") +#print(res) diff --git a/tests/testthat/test-arg-ds.glmSLMA.R b/tests/testthat/test-arg-ds.glmSLMA.R index ce4dbe73..9dc5af0c 100644 --- a/tests/testthat/test-arg-ds.glmSLMA.R +++ b/tests/testthat/test-arg-ds.glmSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -24,11 +24,11 @@ test_that("glmSLMA_errors", { expect_error(ds.glmSLMA('D$LAB_TSC~D$LAB_TRIG', family="gaussian", newobj="gaussian.glmslma.obj"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) res.errors<-datashield.errors() - expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* Error in model\\.frame\\.default\\(formula = formula2use, data = dataTable, : \n invalid type \\(NULL\\) for variable 'D\\$LAB_TRIG'") - expect_match(res.errors$sim2, "* Error in model\\.frame\\.default\\(formula = formula2use, data = dataTable, : \n invalid type \\(NULL\\) for variable 'D\\$LAB_TRIG'") - expect_match(res.errors$sim3, "* Error in model\\.frame\\.default\\(formula = formula2use, data = dataTable, : \n invalid type \\(NULL\\) for variable 'D\\$LAB_TRIG'") + expect_equal(res.errors[[1]], "Command 'glmSLMADS1(D$LAB_TSC ~ D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' failed on 'sim1': Error while evaluating 'dsBase::glmSLMADS1(D$LAB_TSC~D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' -> Error in model.frame.default(formula = formula2use, data = dataTable, : \n invalid type (NULL) for variable 'D$LAB_TRIG'\n", fixed=TRUE) + expect_equal(res.errors[[2]], "Command 'glmSLMADS1(D$LAB_TSC ~ D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' failed on 'sim2': Error while evaluating 'dsBase::glmSLMADS1(D$LAB_TSC~D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' -> Error in model.frame.default(formula = formula2use, data = dataTable, : \n invalid type (NULL) for variable 'D$LAB_TRIG'\n", fixed=TRUE) + expect_equal(res.errors[[3]], "Command 'glmSLMADS1(D$LAB_TSC ~ D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' failed on 'sim3': Error while evaluating 'dsBase::glmSLMADS1(D$LAB_TSC~D$LAB_TRIG, \"gaussian\", NULL, NULL, NULL)' -> Error in model.frame.default(formula = formula2use, data = dataTable, : \n invalid type (NULL) for variable 'D$LAB_TRIG'\n", fixed=TRUE) + }) # diff --git a/tests/testthat/test-arg-ds.glmerSLMA.R b/tests/testthat/test-arg-ds.glmerSLMA.R index 84662f7f..1dc9b2f2 100644 --- a/tests/testthat/test-arg-ds.glmerSLMA.R +++ b/tests/testthat/test-arg-ds.glmerSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -27,10 +27,16 @@ test_that("setup", { context("ds.glmerSLMA::arg::testing") test_that("simple glmerSLMA tesing (mis)use of arguments", { expect_error(ds.glmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', dataName = 'D'), " Please provide a valid 'family' argument!", fixed=TRUE) + expect_error(ds.glmerSLMA(formula = 'incid_rate ~ trtGrp + Male', dataName = 'D', family = 'poisson'), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) + + errs <- datashield.errors() + expect_length(errs, 3) + expect_length(errs$sim1, 0) + expect_length(errs$sim2, 0) + expect_length(errs$sim3, 0) expect_error(ds.glmerSLMA(formula = 'diab_dis ~ trtGrp + Male + (1|idDoctor)', family='poisson', dataName = 'D'), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) - errs <- datashield.errors() expect_length(errs, 3) expect_length(errs$sim1, 0) expect_length(errs$sim2, 0) diff --git a/tests/testthat/test-arg-ds.isNA.R b/tests/testthat/test-arg-ds.isNA.R index 27c9bffc..c9ea5692 100644 --- a/tests/testthat/test-arg-ds.isNA.R +++ b/tests/testthat/test-arg-ds.isNA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -18,7 +18,7 @@ connect.studies.dataset.cnsim(list("LAB_HDL")) # Tests # -context("ds.isNA::arg::errors") +context("ds.isNA::smk::errors") test_that("isNA errors", { expect_error(ds.isNA(), "Please provide the name of the input vector!", fixed=TRUE) }) diff --git a/tests/testthat/test-arg-ds.isValid.R b/tests/testthat/test-arg-ds.isValid.R index 65d843cc..3d0fa715 100644 --- a/tests/testthat/test-arg-ds.isValid.R +++ b/tests/testthat/test-arg-ds.isValid.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -18,10 +18,10 @@ connect.studies.dataset.cnsim(list("LAB_HDL")) # Tests # -context("ds.isValid::arg::errors") +context("ds.isValid::smk::errors") test_that("isValid errors", { expect_error(ds.isValid(), "Please provide the name of the input vector!", fixed=TRUE) - expect_error(ds.isValid("D$NOT_THERE"), "The input object D$NOT_THERE is not defined in sim1, sim2, sim3!", fixed=TRUE) + expect_error(ds.isValid("D$NOT_THERE"), "The input object must be a character, factor, integer, logical or numeric vector or a dataframe or a matrix", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.kurtosis.R b/tests/testthat/test-arg-ds.kurtosis.R index db80a078..fa3272f4 100644 --- a/tests/testthat/test-arg-ds.kurtosis.R +++ b/tests/testthat/test-arg-ds.kurtosis.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.length.R b/tests/testthat/test-arg-ds.length.R index 87d5f3b3..33f6a59e 100644 --- a/tests/testthat/test-arg-ds.length.R +++ b/tests/testthat/test-arg-ds.length.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -22,9 +22,9 @@ context("ds.length::arg::test errors") test_that("length_erros", { ds.asMatrix(x='D$LAB_TSC', newobj="not_a_numeric") - expect_error(ds.length(), "Please provide the name of the input object!", fixed=TRUE) + expect_error(ds.length(), "Please provide the name of the input vector!", fixed=TRUE) expect_error(ds.length(x='D$LAB_TSC', type='datashield'), 'Function argument "type" has to be either "both", "combine" or "split"', fixed=TRUE) - expect_error(ds.length(check=TRUE), "Please provide the name of the input object!", fixed=TRUE) + expect_error(ds.length(check=TRUE), "Please provide the name of the input vector!", fixed=TRUE) expect_error(ds.length(x='D$LAB_TSC', type='datashield', check=TRUE), 'Function argument "type" has to be either "both", "combine" or "split"', fixed=TRUE) expect_error(ds.length(x='not_a_numeric', checks=TRUE), "The input object must be a character, factor, integer, logical or numeric vector or a list.", fixed=TRUE) }) diff --git a/tests/testthat/test-arg-ds.levels.R b/tests/testthat/test-arg-ds.levels.R index 6f94c4ec..58cddcbd 100644 --- a/tests/testthat/test-arg-ds.levels.R +++ b/tests/testthat/test-arg-ds.levels.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -21,7 +21,7 @@ connect.studies.dataset.cnsim(list("LAB_TSC")) context("ds.levels::arg") test_that("simple levels", { expect_error(ds.levels(), "Please provide the name of the input vector!", fixed=TRUE) - expect_error(ds.levels("LAB_TSC"), "The input object LAB_TSC is not defined in sim1, sim2, sim3!", fixed=TRUE) + expect_error(ds.levels("LAB_TSC"), "The input object(s) LAB_TSC is(are) not defined on one or more of the studies!", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.lexis.R b/tests/testthat/test-arg-ds.lexis.R index 681598e0..c6f9a6cf 100644 --- a/tests/testthat/test-arg-ds.lexis.R +++ b/tests/testthat/test-arg-ds.lexis.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -24,19 +23,6 @@ test_that("lexis_erros", { expect_error(ds.lexis(), "Please provide the name of the column that holds the subject IDs!", fixed=TRUE) }) -context("ds.lexis::arg::test intervalWidth") -test_that("simple lexis", { - expect_error(ds.lexis(data='D', intervalWidth = NA, idCol = 'D$id', entryCol = 'D$starttime', exitCol = 'D$endtime', statusCol = 'D$cens', variables = c('D$age.60'), expandDF = 'EM.new'), "Please provide a (non-zero) single numeric value or vector to identify the survival time intervals", fixed = TRUE) - expect_error(ds.lexis(data='D', intervalWidth = NULL, idCol = 'D$id', entryCol = 'D$starttime', exitCol = 'D$endtime', statusCol = 'D$cens', variables = c('D$age.60'), expandDF = 'EM.new'), "Please provide a (non-zero) single numeric value or vector to identify the survival time intervals", fixed = TRUE) - expect_error(ds.lexis(data='D', intervalWidth = 0.0, idCol = 'D$id', entryCol = 'D$starttime', exitCol = 'D$endtime', statusCol = 'D$cens', variables = c('D$age.60'), expandDF = 'EM.new'), "Please provide a (non-zero) single numeric value or vector to identify the survival time intervals", fixed = TRUE) - expect_error(ds.lexis(data='D', intervalWidth = c(1.0, NA, 2.5), idCol = 'D$id', entryCol = 'D$starttime', exitCol = 'D$endtime', statusCol = 'D$cens', variables = c('D$age.60'), expandDF = 'EM.new'), "Please provide a (non-zero) single numeric value or vector to identify the survival time intervals", fixed = TRUE) - expect_error(ds.lexis(data='D', intervalWidth = c(1.0, NULL.0, 2.5), idCol = 'D$id', entryCol = 'D$starttime', exitCol = 'D$endtime', statusCol = 'D$cens', variables = c('D$age.60'), expandDF = 'EM.new'), "object 'NULL.0' not found", fixed = TRUE) - expect_error(ds.lexis(data='D', intervalWidth = c(1.0, 0.0, 2.5), idCol = 'D$id', entryCol = 'D$starttime', exitCol = 'D$endtime', statusCol = 'D$cens', variables = c('D$age.60'), expandDF = 'EM.new'), "Please provide a (non-zero) single numeric value or vector to identify the survival time intervals", fixed = TRUE) - -# res <- ds.lexis(data='D', intervalWidth = c(1.0, 1.5, 2.5), idCol = 'D$id', entryCol = 'D$starttime', exitCol = 'D$endtime', statusCol = 'D$cens', variables = c('D$age.60'), expandDF = 'EM.new') - -}) - # # Done # diff --git a/tests/testthat/test-arg-ds.list.R b/tests/testthat/test-arg-ds.list.R index ffbcb749..5dfc495b 100644 --- a/tests/testthat/test-arg-ds.list.R +++ b/tests/testthat/test-arg-ds.list.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.lmerSLMA.R b/tests/testthat/test-arg-ds.lmerSLMA.R index 8f5f7877..7d944dd0 100644 --- a/tests/testthat/test-arg-ds.lmerSLMA.R +++ b/tests/testthat/test-arg-ds.lmerSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -26,8 +26,13 @@ test_that("setup", { context("ds.lmerSLMA::arg") test_that("simple lmerSLMA tesing (mis)use of arguments", { - res <- ds.lmerSLMA(formula = 'incid_rate ~ trtGrp + Male', dataName = 'D') - expect_equal(res$study1$errorMessage, "No random effects terms specified in formula", fixed=TRUE) + expect_error(ds.lmerSLMA(formula = 'incid_rate ~ trtGrp + Male', dataName = 'D'), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) + + errs <- datashield.errors() + expect_length(errs, 3) + expect_length(errs$sim1, 0) + expect_length(errs$sim2, 0) + expect_length(errs$sim3, 0) expect_error(ds.lmerSLMA(formula = 'diab_dis ~ trtGrp + Male + (1|idDoctor)', dataName = 'D'), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) @@ -39,9 +44,13 @@ test_that("simple lmerSLMA tesing (mis)use of arguments", { res <- ds.lmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', dataName = 'D', control_type = 'xtol_rel') expect_equal(res$errorMessage, "ERROR: if control_type is non-null, you must specify a valid control_value eg control_value<-1.0e-7", fixed=TRUE) - res <- ds.lmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', dataName = 'D', control_type = 'xtol_rel',control_value = 'nothing') - expect_equal(res$study1$errorMessage, "REAL() can only be applied to a 'numeric', not a 'logical'", fixed=TRUE) + expect_error(ds.lmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', dataName = 'D', control_type = 'xtol_rel',control_value = 'nothing'), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) + errs <- datashield.errors() + expect_length(errs, 3) + expect_length(errs$sim1, 0) + expect_length(errs$sim2, 0) + expect_length(errs$sim3, 0) expect_error(ds.lmerSLMA(), " Please provide a valid regression formula!", fixed=TRUE) }) @@ -53,7 +62,7 @@ test_that("simple lmerSLMA tesing (mis)use of arguments", { context("ds.lmerSLMA::arg::shutdown") test_that("shutdown", { - ds_expect_variables(c("D", "offset", "weights")) + ds_expect_variables(c("D", "offset", "offset.to.use", "weights", "weights.to.use")) }) disconnect.studies.dataset.cluster.int() diff --git a/tests/testthat/test-arg-ds.log.R b/tests/testthat/test-arg-ds.log.R index d2510c08..8259b253 100644 --- a/tests/testthat/test-arg-ds.log.R +++ b/tests/testthat/test-arg-ds.log.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.look.R b/tests/testthat/test-arg-ds.look.R index f1d7e695..fd87cba8 100644 --- a/tests/testthat/test-arg-ds.look.R +++ b/tests/testthat/test-arg-ds.look.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -20,7 +20,7 @@ connect.studies.dataset.cnsim(list("LAB_TSC")) context("ds.look::arg::test errors") test_that("look_erros", { - expect_error(expect_warning(ds.look(checks=TRUE), "'ds.look' is deprecated.", fixed = TRUE), " missing, please give an expression/function in inverted commas\n", fixed=TRUE) + expect_error(ds.look(checks=TRUE), " missing, please give an expression/function in inverted commas\n", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.ls.R b/tests/testthat/test-arg-ds.ls.R index 9509a527..084380b1 100644 --- a/tests/testthat/test-arg-ds.ls.R +++ b/tests/testthat/test-arg-ds.ls.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.make.R b/tests/testthat/test-arg-ds.make.R index d4a4a6e0..84a87524 100644 --- a/tests/testthat/test-arg-ds.make.R +++ b/tests/testthat/test-arg-ds.make.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrix.R b/tests/testthat/test-arg-ds.matrix.R index 2201a4f4..c59719d9 100644 --- a/tests/testthat/test-arg-ds.matrix.R +++ b/tests/testthat/test-arg-ds.matrix.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrixDet.R b/tests/testthat/test-arg-ds.matrixDet.R index 37d633fa..db6103de 100644 --- a/tests/testthat/test-arg-ds.matrixDet.R +++ b/tests/testthat/test-arg-ds.matrixDet.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrixDet.report.R b/tests/testthat/test-arg-ds.matrixDet.report.R index 6bb0bc6c..26da64dd 100644 --- a/tests/testthat/test-arg-ds.matrixDet.report.R +++ b/tests/testthat/test-arg-ds.matrixDet.report.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrixDiag.R b/tests/testthat/test-arg-ds.matrixDiag.R index e022d23c..d8cc7c38 100644 --- a/tests/testthat/test-arg-ds.matrixDiag.R +++ b/tests/testthat/test-arg-ds.matrixDiag.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrixDimnames.R b/tests/testthat/test-arg-ds.matrixDimnames.R index 02a1f33b..cd8c97be 100644 --- a/tests/testthat/test-arg-ds.matrixDimnames.R +++ b/tests/testthat/test-arg-ds.matrixDimnames.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrixInvert.R b/tests/testthat/test-arg-ds.matrixInvert.R index 3718d6d0..3fb1d992 100644 --- a/tests/testthat/test-arg-ds.matrixInvert.R +++ b/tests/testthat/test-arg-ds.matrixInvert.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrixMult.R b/tests/testthat/test-arg-ds.matrixMult.R index 1ab87349..7f87f51b 100644 --- a/tests/testthat/test-arg-ds.matrixMult.R +++ b/tests/testthat/test-arg-ds.matrixMult.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.matrixTranspose.R b/tests/testthat/test-arg-ds.matrixTranspose.R index ff94f60f..5be1c912 100644 --- a/tests/testthat/test-arg-ds.matrixTranspose.R +++ b/tests/testthat/test-arg-ds.matrixTranspose.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.mean.R b/tests/testthat/test-arg-ds.mean.R index b28fdcbd..53694eee 100644 --- a/tests/testthat/test-arg-ds.mean.R +++ b/tests/testthat/test-arg-ds.mean.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -22,7 +22,7 @@ context("ds.mean::arg::test errors") test_that("mean_erros", { ds.asCharacter(x='D$LAB_TSC', newobj="not_a_numeric") - expect_error(ds.mean(), "Please provide the name of the input object!", fixed=TRUE) + expect_error(ds.mean(), "Please provide the name of the input vector!", fixed=TRUE) expect_error(ds.mean(x='D$LAB_TSC', type='datashield'), 'Function argument "type" has to be either "both", "combine" or "split"', fixed=TRUE) expect_error(ds.mean(x='not_a_numeric', checks=TRUE), "The input object must be an integer or a numeric vector.", fixed=TRUE) }) diff --git a/tests/testthat/test-arg-ds.meanByClass.R b/tests/testthat/test-arg-ds.meanByClass.R index b829e05b..78553689 100644 --- a/tests/testthat/test-arg-ds.meanByClass.R +++ b/tests/testthat/test-arg-ds.meanByClass.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -19,16 +19,15 @@ connect.studies.dataset.cnsim(list("LAB_TSC","LAB_HDL","GENDER","DIS_DIAB","PM_B # context("ds.meanByClass::arg::test errors") +ds.asCharacter(x='D$GENDER', newobj="not_a_numeric") +ds.asCharacter(x='D$GENDER', newobj="not_a_factor") +ds.assign("D$GENDER", "sex") +ds.assign("D$LAB_HDL", "ldl") test_that("meanByClass_erros", { - ds.asCharacter(x='D$GENDER', newobj="not_a_numeric") - ds.asCharacter(x='D$GENDER', newobj="not_a_factor") - ds.assign("D$GENDER", "sex") - ds.assign("D$LAB_HDL", "ldl") - - expect_error(expect_warning(ds.meanByClass(), "'ds.meanByClass' is deprecated.", fixed = TRUE), "Please provide the name data frame or matrix or a formula of the form 'A~B' where A is a continuous vector and B a factor vector!", fixed=TRUE) - expect_error(expect_warning(ds.meanByClass(x='not_a_numeric~sex'), "'ds.meanByClass' is deprecated.", fixed = TRUE), "The first element in the formula must be of type numeric or integer!", fixed=TRUE) - expect_error(expect_warning(ds.meanByClass(x='ldl~not_a_factor'), "'ds.meanByClass' is deprecated.", fixed = TRUE), "The second element in the formula must be of type factor!", fixed=TRUE) - expect_error(expect_warning(ds.meanByClass(x='ldl~sex~not_a_factor'), "'ds.meanByClass' is deprecated.", fixed = TRUE), "x must be the name of a data frame or a matrix or a formula of the form 'A~B' where A is a continuous vector and B a factor vector!", fixed=TRUE) + expect_error(ds.meanByClass(), "Please provide the name data frame or matrix or a formula of the form 'A~B' where A is a continuous vector and B a factor vector!", fixed=TRUE) + expect_error(ds.meanByClass(x='not_a_numeric~sex'), "The first element in the formula must be of type numeric or integer!", fixed=TRUE) + expect_error(ds.meanByClass(x='ldl~not_a_factor'), "The second element in the formula must be of type factor!", fixed=TRUE) + expect_error(ds.meanByClass(x='ldl~sex~not_a_factor'), "x must be the name of a data frame or a matrix or a formula of the form 'A~B' where A is a continuous vector and B a factor vector!", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.meanSdGp.R b/tests/testthat/test-arg-ds.meanSdGp.R index bacc7241..60e75418 100644 --- a/tests/testthat/test-arg-ds.meanSdGp.R +++ b/tests/testthat/test-arg-ds.meanSdGp.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.merge.R b/tests/testthat/test-arg-ds.merge.R index 5f6ccf38..b37f44b5 100644 --- a/tests/testthat/test-arg-ds.merge.R +++ b/tests/testthat/test-arg-ds.merge.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -22,9 +22,9 @@ context("ds.merge::arg::test errors") test_that("merge_erros", { expect_error(ds.merge(), "Please provide the name (eg 'name1') of first dataframe to be merged (called x) ", fixed=TRUE) expect_error(ds.merge(x.name="A"), "Please provide the name (eg 'name2') of second dataframe to be merged (called y) ", fixed=TRUE) - expect_error(ds.merge(x.name="D$LAB_TSC", y.name="B"), "The input object B is not defined in sim1, sim2, sim3!", fixed=TRUE) - expect_error(ds.merge(x.name="D$LAB_TSC", y.name="D$LAB_TSC", by.x.names="C"), "Please provide the names of columns in y dataframe on which to merge (eg c('id', 'time'))", fixed=TRUE) - expect_error(ds.merge(x.name="D$LAB_TSC", y.name="D$LAB_TSC", by.x.names="D$LAB_TSC", by.y.names="D", suffixes=NULL), "Please provide the suffixes to append to disambiguate duplicate column names (default = c('.x','.y'))", fixed=TRUE) + expect_error(ds.merge(x.name="A", y.name="B"), "Please provide the names of columns in x dataframe on which to merge (eg c('id', 'time'))", fixed=TRUE) + expect_error(ds.merge(x.name="A", y.name="B", by.x.names="C"), "Please provide the names of columns in y dataframe on which to merge (eg c('id', 'time'))", fixed=TRUE) + expect_error(ds.merge(x.name="A", y.name="B", by.x.names="C", by.y.names="D", suffixes=NULL), "Please provide the suffixes to append to disambiguate duplicate column names (default = c('.x','.y/))", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.message.R b/tests/testthat/test-arg-ds.message.R index 960e9811..3d0cdff9 100644 --- a/tests/testthat/test-arg-ds.message.R +++ b/tests/testthat/test-arg-ds.message.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -20,7 +20,7 @@ connect.studies.dataset.cnsim(list("LAB_TSC")) context("ds.message::arg") test_that("request message for NULL", { - expect_error(expect_warning(ds.message(NULL), "'ds.message' is deprecated.", fixed = TRUE), "Please provide the name of the studyside list object that holds the message\n in character format ie: 'object.name' in inverted commas", fixed=TRUE) + expect_error(ds.message(NULL), "Please provide the name of the studyside list object that holds the message\n in character format ie: 'object.name' in inverted commas", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.metadata.R b/tests/testthat/test-arg-ds.metadata.R deleted file mode 100644 index 6c05ee0a..00000000 --- a/tests/testthat/test-arg-ds.metadata.R +++ /dev/null @@ -1,52 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.metadata::arg::setup") - -connect.studies.dataset.cnsim(list('LAB_TSC', 'LAB_TRIG', 'LAB_HDL', 'LAB_GLUC_ADJUSTED', 'PM_BMI_CONTINUOUS', 'DIS_CVA', 'MEDI_LPD', 'DIS_DIAB', 'DIS_AMI', 'GENDER', 'PM_BMI_CATEGORICAL')) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.metadata::arg") -test_that("missing variable", { - expect_error(ds.metadata(x='E'), "The input object E is not defined in sim1, sim2, sim3!", fixed = TRUE) -}) - -# test_that("missing column", { -# expect_error(ds.metadata(x='E$E'), "The input object E$E is not defined in sim1, sim2, sim3!", fixed = TRUE) -# }) - -test_that("missing column", { - expect_error(ds.metadata(x='D$E'), "The input object D$E is not defined in sim1, sim2, sim3!", fixed = TRUE) -}) - -# -# Tear down -# - -context("ds.metadata::arg::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.metadata::arg::done") diff --git a/tests/testthat/test-arg-ds.mice.R b/tests/testthat/test-arg-ds.mice.R deleted file mode 100644 index 4c2c21d3..00000000 --- a/tests/testthat/test-arg-ds.mice.R +++ /dev/null @@ -1,30 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -connect.studies.dataset.cnsim(list("LAB_TSC")) - -# -# Tests -# - -context("ds.mice::arg::test errors") -test_that("mice_errors", { - expect_error(ds.mice(), "Please provide the name of the dataframe or matrix that contains the incomplete data!", fixed=TRUE) -}) - -# -# Done -# - -disconnect.studies.dataset.cnsim() diff --git a/tests/testthat/test-arg-ds.names.R b/tests/testthat/test-arg-ds.names.R index 1c7fb10a..b39d6223 100644 --- a/tests/testthat/test-arg-ds.names.R +++ b/tests/testthat/test-arg-ds.names.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -31,9 +31,9 @@ test_that("simple ds.names errors", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$sim1, "* Error : The input object is not of class numeric") - expect_match(res.errors$sim2, "* Error : The input object is not of class numeric") - expect_match(res.errors$sim3, "* Error : The input object is not of class numeric") + expect_equal(res.errors$sim1, "Command 'namesDS(\"D$LAB_TSC\")' failed on 'sim1': Error while evaluating 'dsBase::namesDS(\"D$LAB_TSC\")' -> Error : The input object is not of class numeric\n", fixed=TRUE) + expect_equal(res.errors$sim2, "Command 'namesDS(\"D$LAB_TSC\")' failed on 'sim2': Error while evaluating 'dsBase::namesDS(\"D$LAB_TSC\")' -> Error : The input object is not of class numeric\n", fixed=TRUE) + expect_equal(res.errors$sim3, "Command 'namesDS(\"D$LAB_TSC\")' failed on 'sim3': Error while evaluating 'dsBase::namesDS(\"D$LAB_TSC\")' -> Error : The input object is not of class numeric\n", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.ns.R b/tests/testthat/test-arg-ds.ns.R deleted file mode 100644 index b63c944a..00000000 --- a/tests/testthat/test-arg-ds.ns.R +++ /dev/null @@ -1,45 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.ns::arg::setup") - -connect.studies.dataset.cnsim(list("PM_BMI_CONTINUOUS")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.ns::arg::test errors") -test_that("ns_errors", { - expect_error(ds.ns(), "argument \"x\" is missing, with no default", fixed=TRUE) - expect_error(ds.qlspline(x=NULL), "Please provide the name of the input variable x!", fixed=TRUE) -}) - -# -# Done -# - -context("ds.ns::arg::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.ns::arg::done") diff --git a/tests/testthat/test-arg-ds.numNA.R b/tests/testthat/test-arg-ds.numNA.R index 62d1af6d..16373686 100644 --- a/tests/testthat/test-arg-ds.numNA.R +++ b/tests/testthat/test-arg-ds.numNA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.qlspline.R b/tests/testthat/test-arg-ds.qlspline.R deleted file mode 100644 index 697b2898..00000000 --- a/tests/testthat/test-arg-ds.qlspline.R +++ /dev/null @@ -1,47 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.qlspline::arg::setup") - -connect.studies.dataset.cnsim(list("PM_BMI_CONTINUOUS")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.qlspline::arg::test errors") -test_that("qlspline_errors", { - expect_error(ds.qlspline(), "argument \"x\" is missing, with no default", fixed=TRUE) - expect_error(ds.qlspline(x=NULL), "Please provide the name of the input variable x!", fixed=TRUE) - expect_error(ds.qlspline(x='D$PM_BMI_CONTINUOUS'), "argument \"q\" is missing, with no default", fixed=TRUE) - expect_error(ds.qlspline(x='D$PM_BMI_CONTINUOUS', q=NULL), "Argument 'q' is missing, with no default!", fixed=TRUE) -}) - -# -# Done -# - -context("ds.qlspline::arg::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.qlspline::arg::done") diff --git a/tests/testthat/test-arg-ds.quantileMean.R b/tests/testthat/test-arg-ds.quantileMean.R index 2f94db2c..f47b8ea1 100644 --- a/tests/testthat/test-arg-ds.quantileMean.R +++ b/tests/testthat/test-arg-ds.quantileMean.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.rBinom.R b/tests/testthat/test-arg-ds.rBinom.R index e031196a..0f2d5823 100644 --- a/tests/testthat/test-arg-ds.rBinom.R +++ b/tests/testthat/test-arg-ds.rBinom.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.rNorm.R b/tests/testthat/test-arg-ds.rNorm.R index 0f3cb82c..ad5f6a08 100644 --- a/tests/testthat/test-arg-ds.rNorm.R +++ b/tests/testthat/test-arg-ds.rNorm.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.rPois.R b/tests/testthat/test-arg-ds.rPois.R index 047064f9..9c3b6849 100644 --- a/tests/testthat/test-arg-ds.rPois.R +++ b/tests/testthat/test-arg-ds.rPois.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.rUnif.R b/tests/testthat/test-arg-ds.rUnif.R index bfe839e6..f98bec3b 100644 --- a/tests/testthat/test-arg-ds.rUnif.R +++ b/tests/testthat/test-arg-ds.rUnif.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.ranksSecure.R b/tests/testthat/test-arg-ds.ranksSecure.R deleted file mode 100644 index 18778cca..00000000 --- a/tests/testthat/test-arg-ds.ranksSecure.R +++ /dev/null @@ -1,101 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.ranksSecure::arg::setup") - -connect.all.datasets() - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.ranksSecure::arg::missing variable") -test_that("missing variable", { - expect_error(ds.ranksSecure("LAB_MISSING"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res.errors <- DSI::datashield.errors() - - expect_length(res.errors, 3) - expect_match(res.errors$study1, "* object 'LAB_MISSING' not found") - expect_match(res.errors$study2, "* object 'LAB_MISSING' not found") - expect_match(res.errors$study3, "* object 'LAB_MISSING' not found") -}) - -context("ds.ranksSecure::arg::NULL variable") -test_that("NULL variable", { - DSI::datashield.assign.expr(conns = ds.test_env$connections, symbol = "LAB_NULL", expr = "NULL") - - res.class <- ds.class("LAB_NULL") - - expect_length(res.class, 3) - expect_equal(res.class$study1, "NULL") - expect_equal(res.class$study2, "NULL") - expect_equal(res.class$study3, "NULL") - - expect_error(expect_warning(ds.ranksSecure("LAB_NULL"), "no non-missing arguments to max; returning -Inf", fixed = TRUE), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res.errors <- DSI::datashield.errors() - - expect_length(res.errors, 3) - expect_match(res.errors$study1, "* Error in stats::complete.cases\\(input.var\\) : \n no input has determined the number of cases") - expect_match(res.errors$study2, "* Error in stats::complete.cases\\(input.var\\) : \n no input has determined the number of cases") - expect_match(res.errors$study3, "* Error in stats::complete.cases\\(input.var\\) : \n no input has determined the number of cases") -}) - -context("ds.ranksSecure::arg::'text' variable") -test_that("'text' variable", { - expect_error(ds.ranksSecure("D$CHARACTER"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res.errors <- DSI::datashield.errors() - - expect_length(res.errors, 3) - expect_match(res.errors$study1, "* Error in \\(1 - h\\) \\* qs\\[i\\] : non-numeric argument to binary operator") - expect_match(res.errors$study2, "* Error in \\(1 - h\\) \\* qs\\[i\\] : non-numeric argument to binary operator") - expect_match(res.errors$study3, "* Error in \\(1 - h\\) \\* qs\\[i\\] : non-numeric argument to binary operator") -}) - -context("ds.ranksSecure::arg::'logical' variable") -test_that("'logical' variable", { - expect_error(ds.ranksSecure("D$LOGICAL"), "FAILED: one of the extreme quantile estimates is NA probably because of a cluster of values at one end of the range of possible values. Try setting a narrower range of quantile values via the argument", fixed = TRUE) -}) - -context("ds.ranksSecure::arg::'integer factor' variable") -test_that("'integer factor' variable", { - expect_error(expect_warning(ds.ranksSecure("D$INTEGER_FACTOR"), "no non-missing arguments to max; returning -Inf", fixed = TRUE), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res.errors <- DSI::datashield.errors() - - expect_length(res.errors, 3) - expect_match(res.errors$study1, "* Error in stats::complete.cases\\(input.var\\) : \n no input has determined the number of cases") - expect_match(res.errors$study2, "* Error in stats::complete.cases\\(input.var\\) : \n no input has determined the number of cases") - expect_match(res.errors$study3, "* Error in stats::complete.cases\\(input.var\\) : \n no input has determined the number of cases") -}) - -# -# Done -# - -context("ds.ranksSecure::arg::shutdown") - -test_that("setup", { - ds_expect_variables(c("D", "LAB_NULL", "input.mean.sd.df", "min.max.df", "summary.ranks.df", "testvar.ranks")) -}) - -disconnect.all.datasets() - -context("ds.ranksSecure::arg::done") diff --git a/tests/testthat/test-arg-ds.rbind.R b/tests/testthat/test-arg-ds.rbind.R index e25b36a1..607a290e 100644 --- a/tests/testthat/test-arg-ds.rbind.R +++ b/tests/testthat/test-arg-ds.rbind.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.reShape.R b/tests/testthat/test-arg-ds.reShape.R index f38f9ab7..20f58657 100644 --- a/tests/testthat/test-arg-ds.reShape.R +++ b/tests/testthat/test-arg-ds.reShape.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.recodeLevels.R b/tests/testthat/test-arg-ds.recodeLevels.R index 597b6e9c..1ae8ff19 100644 --- a/tests/testthat/test-arg-ds.recodeLevels.R +++ b/tests/testthat/test-arg-ds.recodeLevels.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -20,10 +20,10 @@ connect.studies.dataset.cnsim(list("PM_BMI_CATEGORICAL", "LAB_TSC")) context("ds.recodeLevels::arg::test errors") test_that("recodeLevels_erros", { - expect_error(expect_warning(ds.recodeLevels(), "'ds.recodeLevels' is deprecated.", fixed = TRUE), " End of process!", fixed=TRUE) - expect_error(expect_warning(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL'), "'ds.recodeLevels' is deprecated.", fixed = TRUE), " End of process!", fixed=TRUE) - expect_error(expect_warning(ds.recodeLevels(x='D$LAB_TSC', newCategories=c('normal', 'overweight')), "'ds.recodeLevels' is deprecated.", fixed = TRUE), "The input vector must be a factor!", fixed=TRUE) - expect_error(expect_warning(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=c('normal', 'overweight')), "'ds.recodeLevels' is deprecated.", fixed = TRUE), "The number of levels you specified is smaller than the levels of the input vector!", fixed=TRUE) + expect_error(ds.recodeLevels(), " End of process!", fixed=TRUE) + expect_error(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL'), " End of process!", fixed=TRUE) + expect_error(ds.recodeLevels(x='D$LAB_TSC', newCategories=c('normal', 'overweight')), "The input vector must be a factor!", fixed=TRUE) + expect_error(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=c('normal', 'overweight')), "The number of levels you specified is smaller than the levels of the input vector!", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.recodeValues.R b/tests/testthat/test-arg-ds.recodeValues.R index a5b747dc..8fa6371f 100644 --- a/tests/testthat/test-arg-ds.recodeValues.R +++ b/tests/testthat/test-arg-ds.recodeValues.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.rep.R b/tests/testthat/test-arg-ds.rep.R index 0ac3a0df..0d452a94 100644 --- a/tests/testthat/test-arg-ds.rep.R +++ b/tests/testthat/test-arg-ds.rep.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.replaceNA.R b/tests/testthat/test-arg-ds.replaceNA.R index b768a93f..a564ae59 100644 --- a/tests/testthat/test-arg-ds.replaceNA.R +++ b/tests/testthat/test-arg-ds.replaceNA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.rm.R b/tests/testthat/test-arg-ds.rm.R index ee4f5e3f..644a87e9 100644 --- a/tests/testthat/test-arg-ds.rm.R +++ b/tests/testthat/test-arg-ds.rm.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.rowColCalc.R b/tests/testthat/test-arg-ds.rowColCalc.R index 9fc14230..795c2456 100644 --- a/tests/testthat/test-arg-ds.rowColCalc.R +++ b/tests/testthat/test-arg-ds.rowColCalc.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.sample.R b/tests/testthat/test-arg-ds.sample.R index 0d14e79f..8acccf82 100644 --- a/tests/testthat/test-arg-ds.sample.R +++ b/tests/testthat/test-arg-ds.sample.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.seq.R b/tests/testthat/test-arg-ds.seq.R index 7ba77b7b..1a408b11 100644 --- a/tests/testthat/test-arg-ds.seq.R +++ b/tests/testthat/test-arg-ds.seq.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.setSeed.R b/tests/testthat/test-arg-ds.setSeed.R index 44127581..da2b6bac 100644 --- a/tests/testthat/test-arg-ds.setSeed.R +++ b/tests/testthat/test-arg-ds.setSeed.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.skewness.R b/tests/testthat/test-arg-ds.skewness.R index cc1751a6..484fc511 100644 --- a/tests/testthat/test-arg-ds.skewness.R +++ b/tests/testthat/test-arg-ds.skewness.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.subset.R b/tests/testthat/test-arg-ds.subset.R index a314d490..9a39e927 100644 --- a/tests/testthat/test-arg-ds.subset.R +++ b/tests/testthat/test-arg-ds.subset.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -20,7 +20,7 @@ connect.studies.dataset.cnsim(list("DIS_DIAB","PM_BMI_CONTINUOUS","LAB_HDL", "GE context("ds.subset::arg::test errors") test_that("subset_erros", { - expect_error(expect_warning(ds.subset(), "'ds.subset' is deprecated.", fixed = TRUE), "Please provide the name of the object to subset from!", fixed=TRUE) + expect_error(ds.subset(), "Please provide the name of the object to subset from!", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.subsetByClass.R b/tests/testthat/test-arg-ds.subsetByClass.R index 5aca7abf..522c6aeb 100644 --- a/tests/testthat/test-arg-ds.subsetByClass.R +++ b/tests/testthat/test-arg-ds.subsetByClass.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -20,8 +20,8 @@ connect.studies.dataset.cnsim(list("LAB_TSC")) context("ds.subsetByClass::arg::test errors") test_that("subsetByClass_erros", { - expect_error(expect_warning(ds.subsetByClass(), "'ds.subsetByClass' is deprecated.", fixed = TRUE), "Please provide the name of the input data frame or factor!", fixed=TRUE) - expect_error(expect_warning(ds.subsetByClass(x='D$LAB_TSC'), "'ds.subsetByClass' is deprecated.", fixed = TRUE), "The object to subset from must be a 'data.frame' or a 'factor'.", fixed=TRUE) + expect_error(ds.subsetByClass(), "Please provide the name of the input data frame or factor!", fixed=TRUE) + expect_error(ds.subsetByClass(x='D$LAB_TSC'), "The object to subset from must be a 'data.frame' or a 'factor'.", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.summary.R b/tests/testthat/test-arg-ds.summary.R index 5a2aa982..a8c0efd6 100644 --- a/tests/testthat/test-arg-ds.summary.R +++ b/tests/testthat/test-arg-ds.summary.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.table.R b/tests/testthat/test-arg-ds.table.R index b18ff949..819a49e9 100644 --- a/tests/testthat/test-arg-ds.table.R +++ b/tests/testthat/test-arg-ds.table.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -27,7 +27,7 @@ test_that("table rvar has value", { context("ds.table::arg::test rvar is not a variable") test_that("table rvar is not a variable", { - expect_error(ds.table(rvar="D$NOT_VARIABLE"), "The input object D$NOT_VARIABLE is not defined in sim1, sim2, sim3!", fixed = TRUE) + expect_error(ds.table(rvar="D$NOT_VARIABLE"), "Unable to obtain factors for rvar: 'D$NOT_VARIABLE'", fixed = TRUE) res.errors <- DSI::datashield.errors() @@ -43,7 +43,7 @@ test_that("table cvar has value", { context("ds.table::arg::test cvar is not a variable") test_that("table cvar is not a variable", { - expect_error(ds.table(rvar="D$DIS_CVA", cvar="D$NOT_VARIABLE"), "The input object D$NOT_VARIABLE is not defined in sim1, sim2, sim3!", fixed = TRUE) + expect_error(ds.table(rvar="D$DIS_CVA", cvar="D$NOT_VARIABLE"), "Unable to obtain factors for cvar: 'D$NOT_VARIABLE'", fixed = TRUE) res.errors <- DSI::datashield.errors() @@ -59,7 +59,7 @@ test_that("table stvar has value", { context("ds.table::arg::test stvar is not a variable") test_that("table stvar is not a variable", { - expect_error(ds.table(rvar="D$DIS_CVA", cvar="D$DIS_AMI", stvar="D$NOT_VARIABLE"), "The input object D$NOT_VARIABLE is not defined in sim1, sim2, sim3!", fixed = TRUE) + expect_error(ds.table(rvar="D$DIS_CVA", cvar="D$DIS_AMI", stvar="D$NOT_VARIABLE"), "Unable to obtain factors for stvar: 'D$NOT_VARIABLE'", fixed = TRUE) res.errors <- DSI::datashield.errors() @@ -68,12 +68,16 @@ test_that("table stvar is not a variable", { context("ds.table::arg::test stvar has CORRECT value") test_that("table useNA has value", { - expect_error(ds.table(rvar="D$LAB_TSC", cvar=NULL, stvar=NULL, useNA = c("BEN")), "useNA must be either 'no' or 'always'.", fixed = TRUE) + res <- ds.table(rvar="D$LAB_TSC", cvar=NULL, stvar=NULL, useNA = c("BEN")) + + expect_equal(res, "Error: useNA must take one of the three values: 'no', 'ifany', or 'always'. Default is 'ifany'", fixed=TRUE) }) context("ds.table::arg::test force.nfilter has value") test_that("table force.nfilter has value", { - expect_error(ds.table(rvar="D$LAB_TSC", cvar=NULL, stvar=NULL, useNA = c("ifany"), force.nfilter =30), "useNA must be either 'no' or 'always'.", fixed = TRUE) + res <- ds.table(rvar="D$LAB_TSC", cvar=NULL, stvar=NULL, useNA = c("ifany"), force.nfilter =30) + + expect_equal(res, "Error: if force.nfilter is not null, it must have a value which is a character string specifying an integer for the forced value of the nfilter", fixed=TRUE) }) diff --git a/tests/testthat/test-arg-ds.table1D.R b/tests/testthat/test-arg-ds.table1D.R index b0bf5e6d..e172083f 100644 --- a/tests/testthat/test-arg-ds.table1D.R +++ b/tests/testthat/test-arg-ds.table1D.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -20,8 +20,8 @@ connect.studies.dataset.cnsim(list("DIS_CVA","GENDER")) context("ds.table1D::arg::test errors") test_that("table1D_erros", { - expect_error(expect_warning(ds.table1D(), "'ds.table1D' is deprecated.", fixed = TRUE), "Please provide the name of the input vector!", fixed=TRUE) - expect_error(expect_warning(ds.table1D(x='D$GENDER', type="datashield"), "'ds.table1D' is deprecated.", fixed = TRUE), "Function argument 'type' has to be either 'combine' or 'split'", fixed=TRUE) + expect_error(ds.table1D(), "Please provide the name of the input vector!", fixed=TRUE) + expect_error(ds.table1D(x='D$GENDER', type="datashield"), "Function argument 'type' has to be either 'combine' or 'split'", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.table2D.R b/tests/testthat/test-arg-ds.table2D.R index 35fa39db..92388392 100644 --- a/tests/testthat/test-arg-ds.table2D.R +++ b/tests/testthat/test-arg-ds.table2D.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -20,7 +20,7 @@ connect.studies.dataset.cnsim(list("LAB_TSC")) context("ds.table2D::arg::test errors") test_that("table2D_erros", { - expect_error(expect_warning(ds.table2D(), "'ds.table2D' is deprecated.", fixed = TRUE), "Please provide the name of the x vector!", fixed=TRUE) + expect_error(ds.table2D(), "Please provide the name of the x vector!", fixed=TRUE) }) # diff --git a/tests/testthat/test-arg-ds.tapply.R b/tests/testthat/test-arg-ds.tapply.R index 243de56e..b07838d0 100644 --- a/tests/testthat/test-arg-ds.tapply.R +++ b/tests/testthat/test-arg-ds.tapply.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.tapply.assign.R b/tests/testthat/test-arg-ds.tapply.assign.R index 787628d1..32837d3e 100644 --- a/tests/testthat/test-arg-ds.tapply.assign.R +++ b/tests/testthat/test-arg-ds.tapply.assign.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.testObjExists.R b/tests/testthat/test-arg-ds.testObjExists.R index c2f65781..78103236 100644 --- a/tests/testthat/test-arg-ds.testObjExists.R +++ b/tests/testthat/test-arg-ds.testObjExists.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.unList.R b/tests/testthat/test-arg-ds.unList.R index bddb5e06..5a176327 100644 --- a/tests/testthat/test-arg-ds.unList.R +++ b/tests/testthat/test-arg-ds.unList.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-arg-ds.unique.R b/tests/testthat/test-arg-ds.unique.R deleted file mode 100644 index bd619015..00000000 --- a/tests/testthat/test-arg-ds.unique.R +++ /dev/null @@ -1,35 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -connect.studies.dataset.cnsim(list("LAB_TSC")) - -# -# Tests -# - -context("ds.unique::arg::no arguments") -test_that("simple ds.unique no arguments", { - expect_error(ds.unique(), "x.name=NULL. Please provide the names of the objects to de-duplicated!", fixed = TRUE) -}) - -context("ds.unique::arg::NULL arguments") -test_that("simple ds.unique NULL arguments", { - expect_error(ds.unique(NULL), "x.name=NULL. Please provide the names of the objects to de-duplicated!", fixed = TRUE) -}) - -# -# Done -# - -disconnect.studies.dataset.cnsim() diff --git a/tests/testthat/test-arg-ds.var.R b/tests/testthat/test-arg-ds.var.R index 71c2d89e..26a97346 100644 --- a/tests/testthat/test-arg-ds.var.R +++ b/tests/testthat/test-arg-ds.var.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -22,7 +22,7 @@ context("ds.var::arg::test errors") test_that("var_erros", { ds.asCharacter(x='D$LAB_TSC', newobj="not_a_numeric") - expect_error(ds.var(), "Please provide the name of the input object!", fixed=TRUE) + expect_error(ds.var(), "Please provide the name of the input vector!", fixed=TRUE) expect_error(ds.var(x="not_a_numeric", checks=TRUE), "The input object must be an integer or a numeric vector.", fixed=TRUE) }) diff --git a/tests/testthat/test-arg-ds.vectorCalc.R b/tests/testthat/test-arg-ds.vectorCalc.R index 7a572365..0159911e 100644 --- a/tests/testthat/test-arg-ds.vectorCalc.R +++ b/tests/testthat/test-arg-ds.vectorCalc.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -21,7 +21,7 @@ connect.studies.dataset.survival(list("survtime")) context("ds.vectorCalc::arg::test errors") test_that("ds.vectorCalc erros", { - expect_error(expect_warning(ds.vectorCalc(), "'ds.vectorCalc' is deprecated.\nUse 'ds.make' instead.", fixed = TRUE), "x=NULL. Please provide the names of the objects to combine!", fixed=TRUE) + expect_error(ds.vectorCalc(), "x=NULL. Please provide the names of the objects to combine!", fixed=TRUE) }) # diff --git a/tests/testthat/test-datachk-ANTHRO.R b/tests/testthat/test-datachk-ANTHRO.R index 2789755f..c8d71bae 100644 --- a/tests/testthat/test-datachk-ANTHRO.R +++ b/tests/testthat/test-datachk-ANTHRO.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,12 +28,12 @@ context("ANTHRO::datachk") test_that("Check ANTHRO dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$study1), 1) - expect_true("data.frame" %in% res.class$study3) - expect_gte(length(res.class$study2), 1) - expect_true("data.frame" %in% res.class$study2) - expect_gte(length(res.class$study3), 1) - expect_true("data.frame" %in% res.class$study3) + expect_length(res.class$study1, 1) + expect_equal(res.class$study1, "data.frame") + expect_length(res.class$study2, 1) + expect_equal(res.class$study2, "data.frame") + expect_length(res.class$study3, 1) + expect_equal(res.class$study3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) diff --git a/tests/testthat/test-datachk-CLUSTER_INT.R b/tests/testthat/test-datachk-CLUSTER_INT.R index 8fc7deff..90e132f3 100644 --- a/tests/testthat/test-datachk-CLUSTER_INT.R +++ b/tests/testthat/test-datachk-CLUSTER_INT.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -14,7 +14,7 @@ context("CLUSTER_INT::datachk::setup") -connect.studies.dataset.cluster.int(list("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "diabetes", "incid_rate", "private")) +connect.studies.dataset.cluster.int(list("idPatient", "idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "diabetes", "incid_rate", "private")) test_that("setup", { ds_expect_variables(c("D")) @@ -28,12 +28,12 @@ context("CLUSTER_INT::datachk") test_that("Check CLUSTER INT dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$cluster.int1), 1) - expect_true("data.frame" %in% res.class$cluster.int1) - expect_gte(length(res.class$cluster.int2), 1) - expect_true("data.frame" %in% res.class$cluster.int2) - expect_gte(length(res.class$cluster.int3), 1) - expect_true("data.frame" %in% res.class$cluster.int3) + expect_length(res.class$cluster.int1, 1) + expect_equal(res.class$cluster.int1, "data.frame") + expect_length(res.class$cluster.int2, 1) + expect_equal(res.class$cluster.int2, "data.frame") + expect_length(res.class$cluster.int3, 1) + expect_equal(res.class$cluster.int3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) @@ -48,11 +48,11 @@ test_that("Check CLUSTER INT dataset", { res.colnames <- ds.colnames(x='D') expect_length(res.colnames, 3) expect_length(res.colnames$cluster.int1, 13) - expect_true(all(res.colnames$cluster.int1 %in% c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "diabetes", "incid_rate", "private"))) + expect_equal(res.colnames$cluster.int1, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) expect_length(res.colnames$cluster.int2, 13) - expect_true(all(res.colnames$cluster.int2 %in% c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "diabetes", "incid_rate", "private"))) + expect_equal(res.colnames$cluster.int2, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) expect_length(res.colnames$cluster.int3, 13) - expect_true(all(res.colnames$cluster.int3 %in% c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "diabetes", "incid_rate", "private"))) + expect_equal(res.colnames$cluster.int3, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) res.class.idsurgery <- ds.class(x='D$idSurgery') expect_length(res.class.idsurgery, 3) @@ -114,25 +114,25 @@ test_that("Check CLUSTER INT dataset", { expect_length(res.length.intsurgery$`total length of D$intSurgery in all studies combined`, 1) expect_equal(res.length.intsurgery$`total length of D$intSurgery in all studies combined`, 3141) - res.class.nDoctors <- ds.class(x='D$nDoctors') - expect_length(res.class.nDoctors, 3) - expect_length(res.class.nDoctors$cluster.int1, 1) - expect_equal(res.class.nDoctors$cluster.int1, "integer") - expect_length(res.class.nDoctors$cluster.int2, 1) - expect_equal(res.class.nDoctors$cluster.int2, "integer") - expect_length(res.class.nDoctors$cluster.int3, 1) - expect_equal(res.class.nDoctors$cluster.int3, "integer") - - res.length.nDoctors <- ds.length(x='D$nDoctors') - expect_length(res.length.nDoctors, 4) - expect_length(res.length.nDoctors$`length of D$nDoctors in cluster.int1`, 1) - expect_equal(res.length.nDoctors$`length of D$nDoctors in cluster.int1`, 1056) - expect_length(res.length.nDoctors$`length of D$nDoctors in cluster.int2`, 1) - expect_equal(res.length.nDoctors$`length of D$nDoctors in cluster.int2`, 991) - expect_length(res.length.nDoctors$`length of D$nDoctors in cluster.int3`, 1) - expect_equal(res.length.nDoctors$`length of D$nDoctors in cluster.int3`, 1094) - expect_length(res.length.nDoctors$`total length of D$nDoctors in all studies combined`, 1) - expect_equal(res.length.nDoctors$`total length of D$nDoctors in all studies combined`, 3141) + res.class.ndoctor <- ds.class(x='D$nDoctor') + expect_length(res.class.ndoctor, 3) + expect_length(res.class.ndoctor$cluster.int1, 1) + expect_equal(res.class.ndoctor$cluster.int1, "integer") + expect_length(res.class.ndoctor$cluster.int2, 1) + expect_equal(res.class.ndoctor$cluster.int2, "integer") + expect_length(res.class.ndoctor$cluster.int3, 1) + expect_equal(res.class.ndoctor$cluster.int3, "integer") + + res.length.ndoctor <- ds.length(x='D$nDoctor') + expect_length(res.length.ndoctor, 4) + expect_length(res.length.ndoctor$`length of D$nDoctor in cluster.int1`, 1) + expect_equal(res.length.ndoctor$`length of D$nDoctor in cluster.int1`, 1056) + expect_length(res.length.ndoctor$`length of D$nDoctor in cluster.int2`, 1) + expect_equal(res.length.ndoctor$`length of D$nDoctor in cluster.int2`, 991) + expect_length(res.length.ndoctor$`length of D$nDoctor in cluster.int3`, 1) + expect_equal(res.length.ndoctor$`length of D$nDoctor in cluster.int3`, 1094) + expect_length(res.length.ndoctor$`total length of D$nDoctor in all studies combined`, 1) + expect_equal(res.length.ndoctor$`total length of D$nDoctor in all studies combined`, 3141) res.class.iddoctor <- ds.class(x='D$idDoctor') expect_length(res.class.iddoctor, 3) diff --git a/tests/testthat/test-datachk-CLUSTER_SLO.R b/tests/testthat/test-datachk-CLUSTER_SLO.R index 3c61c9cb..1ccf3669 100644 --- a/tests/testthat/test-datachk-CLUSTER_SLO.R +++ b/tests/testthat/test-datachk-CLUSTER_SLO.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -14,7 +14,7 @@ context("CLUSTER_SLO::datachk::setup") -connect.studies.dataset.cluster.slo(list("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "sloDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) +connect.studies.dataset.cluster.slo(list("idPatient", "idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "diabetes", "incid_rate", "private")) test_that("setup", { ds_expect_variables(c("D")) @@ -28,31 +28,31 @@ context("CLUSTER_SLO::datachk") test_that("Check CLUSTER SLO dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$cluster.slo1), 1) - expect_true("data.frame" %in% res.class$cluster.slo1) - expect_gte(length(res.class$cluster.slo2), 1) - expect_true("data.frame" %in% res.class$cluster.slo2) - expect_gte(length(res.class$cluster.slo3), 1) - expect_true("data.frame" %in% res.class$cluster.slo3) + expect_length(res.class$cluster.slo1, 1) + expect_equal(res.class$cluster.slo1, "data.frame") + expect_length(res.class$cluster.slo2, 1) + expect_equal(res.class$cluster.slo2, "data.frame") + expect_length(res.class$cluster.slo3, 1) + expect_equal(res.class$cluster.slo3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) expect_length(res.length$`length of D in cluster.slo1`, 1) - expect_equal(res.length$`length of D in cluster.slo1`, 14) + expect_equal(res.length$`length of D in cluster.slo1`, 13) expect_length(res.length$`length of D in cluster.slo2`, 1) - expect_equal(res.length$`length of D in cluster.slo2`, 14) + expect_equal(res.length$`length of D in cluster.slo2`, 13) expect_length(res.length$`length of D in cluster.slo3`, 1) - expect_equal(res.length$`length of D in cluster.slo3`, 14) - expect_equal(res.length$`total length of D in all studies combined`, 42) + expect_equal(res.length$`length of D in cluster.slo3`, 13) + expect_equal(res.length$`total length of D in all studies combined`, 39) res.colnames <- ds.colnames(x='D') expect_length(res.colnames, 3) - expect_length(res.colnames$cluster.slo1, 14) - expect_equal(res.colnames$cluster.slo1, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "sloDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) - expect_length(res.colnames$cluster.slo2, 14) - expect_equal(res.colnames$cluster.slo2, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "sloDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) - expect_length(res.colnames$cluster.slo3, 14) - expect_equal(res.colnames$cluster.slo3, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "sloDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) + expect_length(res.colnames$cluster.slo1, 13) + expect_equal(res.colnames$cluster.slo1, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) + expect_length(res.colnames$cluster.slo2, 13) + expect_equal(res.colnames$cluster.slo2, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) + expect_length(res.colnames$cluster.slo3, 13) + expect_equal(res.colnames$cluster.slo3, c("idSurgery", "trtGrp", "intSurgery", "nDoctors", "idDoctor", "intDoctor", "nPatients", "Male", "age", "BMI", "private", "diabetes", "incid_rate")) res.class.idsurgery <- ds.class(x='D$idSurgery') expect_length(res.class.idsurgery, 3) @@ -114,25 +114,25 @@ test_that("Check CLUSTER SLO dataset", { expect_length(res.length.intsurgery$`total length of D$intSurgery in all studies combined`, 1) expect_equal(res.length.intsurgery$`total length of D$intSurgery in all studies combined`, 17037) - res.class.ndoctors <- ds.class(x='D$nDoctors') - expect_length(res.class.ndoctors, 3) - expect_length(res.class.ndoctors$cluster.slo1, 1) - expect_equal(res.class.ndoctors$cluster.slo1, "integer") - expect_length(res.class.ndoctors$cluster.slo2, 1) - expect_equal(res.class.ndoctors$cluster.slo2, "integer") - expect_length(res.class.ndoctors$cluster.slo3, 1) - expect_equal(res.class.ndoctors$cluster.slo3, "integer") - - res.length.ndoctors <- ds.length(x='D$nDoctors') - expect_length(res.length.ndoctors, 4) - expect_length(res.length.ndoctors$`length of D$nDoctors in cluster.slo1`, 1) - expect_equal(res.length.ndoctors$`length of D$nDoctors in cluster.slo1`, 5637) - expect_length(res.length.ndoctors$`length of D$nDoctors in cluster.slo2`, 1) - expect_equal(res.length.ndoctors$`length of D$nDoctors in cluster.slo2`, 5563) - expect_length(res.length.ndoctors$`length of D$nDoctors in cluster.slo3`, 1) - expect_equal(res.length.ndoctors$`length of D$nDoctors in cluster.slo3`, 5837) - expect_length(res.length.ndoctors$`total length of D$nDoctors in all studies combined`, 1) - expect_equal(res.length.ndoctors$`total length of D$nDoctors in all studies combined`, 17037) + res.class.ndoctor <- ds.class(x='D$nDoctor') + expect_length(res.class.ndoctor, 3) + expect_length(res.class.ndoctor$cluster.slo1, 1) + expect_equal(res.class.ndoctor$cluster.slo1, "integer") + expect_length(res.class.ndoctor$cluster.slo2, 1) + expect_equal(res.class.ndoctor$cluster.slo2, "integer") + expect_length(res.class.ndoctor$cluster.slo3, 1) + expect_equal(res.class.ndoctor$cluster.slo3, "integer") + + res.length.ndoctor <- ds.length(x='D$nDoctor') + expect_length(res.length.ndoctor, 4) + expect_length(res.length.ndoctor$`length of D$nDoctor in cluster.slo1`, 1) + expect_equal(res.length.ndoctor$`length of D$nDoctor in cluster.slo1`, 5637) + expect_length(res.length.ndoctor$`length of D$nDoctor in cluster.slo2`, 1) + expect_equal(res.length.ndoctor$`length of D$nDoctor in cluster.slo2`, 5563) + expect_length(res.length.ndoctor$`length of D$nDoctor in cluster.slo3`, 1) + expect_equal(res.length.ndoctor$`length of D$nDoctor in cluster.slo3`, 5837) + expect_length(res.length.ndoctor$`total length of D$nDoctor in all studies combined`, 1) + expect_equal(res.length.ndoctor$`total length of D$nDoctor in all studies combined`, 17037) res.class.iddoctor <- ds.class(x='D$idDoctor') expect_length(res.class.iddoctor, 3) diff --git a/tests/testthat/test-datachk-CNSIM.R b/tests/testthat/test-datachk-CNSIM.R index 7296f51b..c43c0170 100644 --- a/tests/testthat/test-datachk-CNSIM.R +++ b/tests/testthat/test-datachk-CNSIM.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,12 +28,12 @@ context("CNSIM::datachk") test_that("Check CNSIM dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$sim1), 1) - expect_true("data.frame" %in% res.class$sim1) - expect_gte(length(res.class$sim2), 1) - expect_true("data.frame" %in% res.class$sim2) - expect_gte(length(res.class$sim3), 1) - expect_true("data.frame" %in% res.class$sim3) + expect_length(res.class$sim1, 1) + expect_equal(res.class$sim1, "data.frame") + expect_length(res.class$sim2, 1) + expect_equal(res.class$sim2, "data.frame") + expect_length(res.class$sim3, 1) + expect_equal(res.class$sim3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) @@ -74,15 +74,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.lab_tsc$`total length of D$LAB_TSC in all studies combined`, 1) expect_equal(res.length.lab_tsc$`total length of D$LAB_TSC in all studies combined`, 9379) - res.numna.lab_tsc <- ds.numNA(x='D$LAB_TSC') - expect_length(res.numna.lab_tsc, 3) - expect_length(res.numna.lab_tsc$sim1, 1) - expect_equal(res.numna.lab_tsc$sim1, 356) - expect_length(res.numna.lab_tsc$sim2, 1) - expect_equal(res.numna.lab_tsc$sim2, 549) - expect_length(res.numna.lab_tsc$sim3, 1) - expect_equal(res.numna.lab_tsc$sim3, 649) - res.class.lab_trig <- ds.class(x='D$LAB_TRIG') expect_length(res.class.lab_trig, 3) expect_length(res.class.lab_trig$sim1, 1) @@ -103,15 +94,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.lab_trig$`total length of D$LAB_TRIG in all studies combined`, 1) expect_equal(res.length.lab_trig$`total length of D$LAB_TRIG in all studies combined`, 9379) - res.numna.lab_trig <- ds.numNA(x='D$LAB_TRIG') - expect_length(res.numna.lab_trig, 3) - expect_length(res.numna.lab_trig$sim1, 1) - expect_equal(res.numna.lab_trig$sim1, 362) - expect_length(res.numna.lab_trig$sim2, 1) - expect_equal(res.numna.lab_trig$sim2, 562) - expect_length(res.numna.lab_trig$sim3, 1) - expect_equal(res.numna.lab_trig$sim3, 655) - res.class.lab_hdl <- ds.class(x='D$LAB_HDL') expect_length(res.class.lab_hdl, 3) expect_length(res.class.lab_hdl$sim1, 1) @@ -132,15 +114,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.lab_hdl$`total length of D$LAB_HDL in all studies combined`, 1) expect_equal(res.length.lab_hdl$`total length of D$LAB_HDL in all studies combined`, 9379) - res.numna.lab_hdl <- ds.numNA(x='D$LAB_HDL') - expect_length(res.numna.lab_hdl, 3) - expect_length(res.numna.lab_hdl$sim1, 1) - expect_equal(res.numna.lab_hdl$sim1, 360) - expect_length(res.numna.lab_hdl$sim2, 1) - expect_equal(res.numna.lab_hdl$sim2, 555) - expect_length(res.numna.lab_hdl$sim3, 1) - expect_equal(res.numna.lab_hdl$sim3, 655) - res.class.lab_gluc_adjusted <- ds.class(x='D$LAB_GLUC_ADJUSTED') expect_length(res.class.lab_gluc_adjusted, 3) expect_length(res.class.lab_gluc_adjusted$sim1, 1) @@ -161,15 +134,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.lab_gluc_adjusted$`total length of D$LAB_GLUC_ADJUSTED in all studies combined`, 1) expect_equal(res.length.lab_gluc_adjusted$`total length of D$LAB_GLUC_ADJUSTED in all studies combined`, 9379) - res.numna.lab_gluc_adjusted <- ds.numNA(x='D$LAB_GLUC_ADJUSTED') - expect_length(res.numna.lab_gluc_adjusted, 3) - expect_length(res.numna.lab_gluc_adjusted$sim1, 1) - expect_equal(res.numna.lab_gluc_adjusted$sim1, 341) - expect_length(res.numna.lab_gluc_adjusted$sim2, 1) - expect_equal(res.numna.lab_gluc_adjusted$sim2, 505) - expect_length(res.numna.lab_gluc_adjusted$sim3, 1) - expect_equal(res.numna.lab_gluc_adjusted$sim3, 609) - res.class.pm_bmi_continuous <- ds.class(x='D$PM_BMI_CONTINUOUS') expect_length(res.class.pm_bmi_continuous, 3) expect_length(res.class.pm_bmi_continuous$sim1, 1) @@ -190,15 +154,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.pm_bmi_continuous$`total length of D$PM_BMI_CONTINUOUS in all studies combined`, 1) expect_equal(res.length.pm_bmi_continuous$`total length of D$PM_BMI_CONTINUOUS in all studies combined`, 9379) - res.numna.pm_bmi_continuous <- ds.numNA(x='D$PM_BMI_CONTINUOUS') - expect_length(res.numna.pm_bmi_continuous, 3) - expect_length(res.numna.pm_bmi_continuous$sim1, 1) - expect_equal(res.numna.pm_bmi_continuous$sim1, 97) - expect_length(res.numna.pm_bmi_continuous$sim2, 1) - expect_equal(res.numna.pm_bmi_continuous$sim2, 150) - expect_length(res.numna.pm_bmi_continuous$sim3, 1) - expect_equal(res.numna.pm_bmi_continuous$sim3, 205) - res.class.dis_cva <- ds.class(x='D$DIS_CVA') expect_length(res.class.dis_cva, 3) expect_length(res.class.dis_cva$sim1, 1) @@ -219,15 +174,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.dis_cva$`total length of D$DIS_CVA in all studies combined`, 1) expect_equal(res.length.dis_cva$`total length of D$DIS_CVA in all studies combined`, 9379) - res.numna.dis_cva <- ds.numNA(x='D$DIS_CVA') - expect_length(res.numna.dis_cva, 3) - expect_length(res.numna.dis_cva$sim1, 1) - expect_equal(res.numna.dis_cva$sim1, 0) - expect_length(res.numna.dis_cva$sim2, 1) - expect_equal(res.numna.dis_cva$sim2, 0) - expect_length(res.numna.dis_cva$sim3, 1) - expect_equal(res.numna.dis_cva$sim3, 0) - res.class.medi_lpd <- ds.class(x='D$MEDI_LPD') expect_length(res.class.medi_lpd, 3) expect_length(res.class.medi_lpd$sim1, 1) @@ -248,15 +194,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.medi_lpd$`total length of D$MEDI_LPD in all studies combined`, 1) expect_equal(res.length.medi_lpd$`total length of D$MEDI_LPD in all studies combined`, 9379) - res.numna.medi_lpd <- ds.numNA(x='D$MEDI_LPD') - expect_length(res.numna.medi_lpd, 3) - expect_length(res.numna.medi_lpd$sim1, 1) - expect_equal(res.numna.medi_lpd$sim1, 0) - expect_length(res.numna.medi_lpd$sim2, 1) - expect_equal(res.numna.medi_lpd$sim2, 0) - expect_length(res.numna.medi_lpd$sim3, 1) - expect_equal(res.numna.medi_lpd$sim3, 0) - res.class.dis_diab <- ds.class(x='D$DIS_DIAB') expect_length(res.class.dis_diab, 3) expect_length(res.class.dis_diab$sim1, 1) @@ -277,15 +214,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.dis_diab$`total length of D$DIS_DIAB in all studies combined`, 1) expect_equal(res.length.dis_diab$`total length of D$DIS_DIAB in all studies combined`, 9379) - res.numna.dis_diab <- ds.numNA(x='D$DIS_DIAB') - expect_length(res.numna.dis_diab, 3) - expect_length(res.numna.dis_diab$sim1, 1) - expect_equal(res.numna.dis_diab$sim1, 0) - expect_length(res.numna.dis_diab$sim2, 1) - expect_equal(res.numna.dis_diab$sim2, 0) - expect_length(res.numna.dis_diab$sim3, 1) - expect_equal(res.numna.dis_diab$sim3, 0) - res.class.dis_ami <- ds.class(x='D$DIS_AMI') expect_length(res.class.dis_ami, 3) expect_length(res.class.dis_ami$sim1, 1) @@ -306,15 +234,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.dis_ami$`total length of D$DIS_AMI in all studies combined`, 1) expect_equal(res.length.dis_ami$`total length of D$DIS_AMI in all studies combined`, 9379) - res.numna.dis_ami <- ds.numNA(x='D$DIS_AMI') - expect_length(res.numna.dis_ami, 3) - expect_length(res.numna.dis_ami$sim1, 1) - expect_equal(res.numna.dis_ami$sim1, 0) - expect_length(res.numna.dis_ami$sim2, 1) - expect_equal(res.numna.dis_ami$sim2, 0) - expect_length(res.numna.dis_ami$sim3, 1) - expect_equal(res.numna.dis_ami$sim3, 0) - res.class.gender <- ds.class(x='D$GENDER') expect_length(res.class.gender, 3) expect_length(res.class.gender$sim1, 1) @@ -335,15 +254,6 @@ test_that("Check CNSIM dataset", { expect_length(res.length.gender$`total length of D$GENDER in all studies combined`, 1) expect_equal(res.length.gender$`total length of D$GENDER in all studies combined`, 9379) - res.numna.gender <- ds.numNA(x='D$GENDER') - expect_length(res.numna.gender, 3) - expect_length(res.numna.gender$sim1, 1) - expect_equal(res.numna.gender$sim1, 0) - expect_length(res.numna.gender$sim2, 1) - expect_equal(res.numna.gender$sim2, 0) - expect_length(res.numna.gender$sim3, 1) - expect_equal(res.numna.gender$sim3, 0) - res.class.pm_bmi_categorical <- ds.class(x='D$PM_BMI_CATEGORICAL') expect_length(res.class.pm_bmi_categorical, 3) expect_length(res.class.pm_bmi_categorical$sim1, 1) @@ -363,15 +273,6 @@ test_that("Check CNSIM dataset", { expect_equal(res.length.pm_bmi_categorical$`length of D$PM_BMI_CATEGORICAL in sim3`, 4128) expect_length(res.length.pm_bmi_categorical$`total length of D$PM_BMI_CATEGORICAL in all studies combined`, 1) expect_equal(res.length.pm_bmi_categorical$`total length of D$PM_BMI_CATEGORICAL in all studies combined`, 9379) - - res.numna.pm_bmi_categorical <- ds.numNA(x='D$PM_BMI_CATEGORICAL') - expect_length(res.numna.pm_bmi_categorical, 3) - expect_length(res.numna.pm_bmi_categorical$sim1, 1) - expect_equal(res.numna.pm_bmi_categorical$sim1, 97) - expect_length(res.numna.pm_bmi_categorical$sim2, 1) - expect_equal(res.numna.pm_bmi_categorical$sim2, 150) - expect_length(res.numna.pm_bmi_categorical$sim3, 1) - expect_equal(res.numna.pm_bmi_categorical$sim3, 205) }) # diff --git a/tests/testthat/test-datachk-DISCORDANT.R b/tests/testthat/test-datachk-DISCORDANT.R index bb6c06a2..b2a03ac6 100644 --- a/tests/testthat/test-datachk-DISCORDANT.R +++ b/tests/testthat/test-datachk-DISCORDANT.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,13 +28,12 @@ context("DISCORDANT::datachk") test_that("Check DISCORDANT dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - - expect_gte(length(res.class$discordant1), 1) - expect_true("data.frame" %in% res.class$discordant1) - expect_gte(length(res.class$discordant2), 1) - expect_true("data.frame" %in% res.class$discordant2) - expect_gte(length(res.class$discordant3), 1) - expect_true("data.frame" %in% res.class$discordant3) + expect_length(res.class$discordant1, 1) + expect_equal(res.class$discordant1, "data.frame") + expect_length(res.class$discordant2, 1) + expect_equal(res.class$discordant2, "data.frame") + expect_length(res.class$discordant3, 1) + expect_equal(res.class$discordant3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) @@ -55,15 +54,14 @@ test_that("Check DISCORDANT dataset", { expect_length(res.colnames$discordant3, 2) expect_equal(res.colnames$discordant3, c('B', 'C')) - res.class.a.1 <- ds.class(x='D$A', datasources=ds.test_env$connections[1]) - expect_length(res.class.a.1, 1) - expect_length(res.class.a.1$discordant1, 1) - expect_equal(res.class.a.1$discordant1, "integer") - res.class.a.2 <- ds.class(x='D$A', datasources=ds.test_env$connections[2]) - expect_length(res.class.a.2, 1) - expect_length(res.class.a.2$discordant2, 1) - expect_equal(res.class.a.2$discordant2, "integer") - expect_error(res.class.a.3 <- ds.class(x='D$A', datasources=ds.test_env$connections[3]), "The input object D$A is not defined in discordant3!", fixed=TRUE) + res.class.a <- ds.class(x='D$A') + expect_length(res.class.a, 3) + expect_length(res.class.a$discordant1, 1) + expect_equal(res.class.a$discordant1, "integer") + expect_length(res.class.a$discordant2, 1) + expect_equal(res.class.a$discordant2, "integer") + expect_length(res.class.a$discordant3, 1) + expect_equal(res.class.a$discordant3, "NULL") res.length.a <- ds.length(x='D$A') expect_length(res.length.a, 4) @@ -76,15 +74,14 @@ test_that("Check DISCORDANT dataset", { expect_length(res.length.a$`total length of D$A in all studies combined`, 1) expect_equal(res.length.a$`total length of D$A in all studies combined`, 24) - res.class.b.1 <- ds.class(x='D$B', datasources=ds.test_env$connections[1]) - expect_length(res.class.b.1, 1) - expect_length(res.class.b.1$discordant1, 1) - expect_equal(res.class.b.1$discordant1, "integer") - expect_error(res.class.b.3 <- ds.class(x='D$B', datasources=ds.test_env$connections[2]), "The input object D$B is not defined in discordant2!", fixed=TRUE) - res.class.b.3 <- ds.class(x='D$B', datasources=ds.test_env$connections[3]) - expect_length(res.class.b.3, 1) - expect_length(res.class.b.3$discordant3, 1) - expect_equal(res.class.b.3$discordant3, "integer") + res.class.b <- ds.class(x='D$B') + expect_length(res.class.b, 3) + expect_length(res.class.b$discordant1, 1) + expect_equal(res.class.b$discordant1, "integer") + expect_length(res.class.b$discordant2, 1) + expect_equal(res.class.b$discordant2, "NULL") + expect_length(res.class.b$discordant3, 1) + expect_equal(res.class.b$discordant3, "integer") res.length.b <- ds.length(x='D$B') expect_length(res.length.b, 4) @@ -97,15 +94,14 @@ test_that("Check DISCORDANT dataset", { expect_length(res.length.b$`total length of D$B in all studies combined`, 1) expect_equal(res.length.b$`total length of D$B in all studies combined`, 24) - expect_error(res.class.c.1 <- ds.class(x='D$C', datasources=ds.test_env$connections[1]), "The input object D$C is not defined in discordant1!", fixed=TRUE) - res.class.c.2 <- ds.class(x='D$C', datasources=ds.test_env$connections[2]) - expect_length(res.class.c.2, 1) - expect_length(res.class.c.2$discordant2, 1) - expect_equal(res.class.c.2$discordant2, "integer") - res.class.c.3 <- ds.class(x='D$C', datasources=ds.test_env$connections[3]) - expect_length(res.class.c.3, 1) - expect_length(res.class.c.3$discordant3, 1) - expect_equal(res.class.c.3$discordant3, "integer") + res.class.c <- ds.class(x='D$C') + expect_length(res.class.c, 3) + expect_length(res.class.c$discordant1, 1) + expect_equal(res.class.c$discordant1, "NULL") + expect_length(res.class.c$discordant2, 1) + expect_equal(res.class.c$discordant2, "integer") + expect_length(res.class.c$discordant3, 1) + expect_equal(res.class.c$discordant3, "integer") res.length.c <- ds.length(x='D$C') expect_length(res.length.c, 4) diff --git a/tests/testthat/test-datachk-DNSIM.R b/tests/testthat/test-datachk-DNSIM.R index 73421dba..d9240fb7 100644 --- a/tests/testthat/test-datachk-DNSIM.R +++ b/tests/testthat/test-datachk-DNSIM.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,12 +28,12 @@ context("DASIM::datachk") test_that("Check DASIM dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$sim1), 1) - expect_true("data.frame" %in% res.class$sim1) - expect_gte(length(res.class$sim2), 1) - expect_true("data.frame" %in% res.class$sim2) - expect_gte(length(res.class$sim3), 1) - expect_true("data.frame" %in% res.class$sim3) + expect_length(res.class$sim1, 1) + expect_equal(res.class$sim1, "data.frame") + expect_length(res.class$sim2, 1) + expect_equal(res.class$sim2, "data.frame") + expect_length(res.class$sim3, 1) + expect_equal(res.class$sim3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) diff --git a/tests/testthat/test-datachk-FACTOR_LEVELS.R b/tests/testthat/test-datachk-FACTOR_LEVELS.R index d1db51fe..e359a93e 100644 --- a/tests/testthat/test-datachk-FACTOR_LEVELS.R +++ b/tests/testthat/test-datachk-FACTOR_LEVELS.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,12 +28,12 @@ context("FACTOR_LEVELS::datachk") test_that("Check FACTOR_LEVELS dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$GROUP1), 1) - expect_true("data.frame" %in% res.class$GROUP1) - expect_gte(length(res.class$GROUP2), 1) - expect_true("data.frame" %in% res.class$GROUP2) - expect_gte(length(res.class$GROUP3), 1) - expect_true("data.frame" %in% res.class$GROUP3) + expect_length(res.class$GROUP1, 1) + expect_equal(res.class$GROUP1, "data.frame") + expect_length(res.class$GROUP2, 1) + expect_equal(res.class$GROUP2, "data.frame") + expect_length(res.class$GROUP3, 1) + expect_equal(res.class$GROUP3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) diff --git a/tests/testthat/test-datachk-SURVIVAL_EXPAND_WITH_MISSING.R b/tests/testthat/test-datachk-SURVIVAL_EXPAND_WITH_MISSING.R index bc8c12bc..5c221c4c 100644 --- a/tests/testthat/test-datachk-SURVIVAL_EXPAND_WITH_MISSING.R +++ b/tests/testthat/test-datachk-SURVIVAL_EXPAND_WITH_MISSING.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,12 +28,12 @@ context("SURVIVAL_EXPAND_WITH_MISSING::datachk") test_that("Check SURVIVAL_EXPAND_WITH_MISSING dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$survival1), 1) - expect_true("data.frame" %in% res.class$survival1) - expect_gte(length(res.class$survival2), 1) - expect_true("data.frame" %in% res.class$survival2) - expect_gte(length(res.class$survival3), 1) - expect_true("data.frame" %in% res.class$survival3) + expect_length(res.class$survival1, 1) + expect_equal(res.class$survival1, "data.frame") + expect_length(res.class$survival2, 1) + expect_equal(res.class$survival2, "data.frame") + expect_length(res.class$survival3, 1) + expect_equal(res.class$survival3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) diff --git a/tests/testthat/test-datachk-TESTING.R b/tests/testthat/test-datachk-TESTING.R index 5cc2332d..095a9e9d 100644 --- a/tests/testthat/test-datachk-TESTING.R +++ b/tests/testthat/test-datachk-TESTING.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,12 +28,12 @@ context("TESTING::datachk") test_that("Check TESTING dataset", { res.class <- ds.class(x='D') expect_length(res.class, 3) - expect_gte(length(res.class$study1), 1) - expect_true("data.frame" %in% res.class$study1) - expect_gte(length(res.class$study2), 1) - expect_true("data.frame" %in% res.class$study2) - expect_gte(length(res.class$study3), 1) - expect_true("data.frame" %in% res.class$study3) + expect_length(res.class$study1, 1) + expect_equal(res.class$study1, "data.frame") + expect_length(res.class$study2, 1) + expect_equal(res.class$study2, "data.frame") + expect_length(res.class$study3, 1) + expect_equal(res.class$study3, "data.frame") res.length <- ds.length(x='D') expect_length(res.length, 4) diff --git a/tests/testthat/test-disc-ds.cor.R b/tests/testthat/test-disc-ds.cor.R index eb61ada6..ee720576 100644 --- a/tests/testthat/test-disc-ds.cor.R +++ b/tests/testthat/test-disc-ds.cor.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -53,7 +53,7 @@ test_that("simple disc test, type='split'", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 1) - expect_match(res.errors$sim2, "* Error : ERROR: The ratio of the number of variables over the number of individual-level\\n records exceeds the allowed threshold, there is a possible risk of disclosure") + expect_equal(res.errors$sim2, "Command 'corDS(\"D3\", NULL)' failed on 'sim2': Error while evaluating 'dsBase::corDS(\"D3\", NULL)' -> Error : ERROR: The ratio of the number of variables over the number of individual-level\n records exceeds the allowed threshold, there is a possible risk of disclosure\n", fixed = TRUE) }) test_that("simple disc test, naAction='pairwise.complete', type='split'", { @@ -78,7 +78,7 @@ test_that("simple disc test, type='combine'", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 1) - expect_match(res.errors$sim2, "* Error : ERROR: The ratio of the number of variables over the number of individual-level\\n records exceeds the allowed threshold, there is a possible risk of disclosure") + expect_equal(res.errors$sim2, "Command 'corDS(\"D3\", NULL)' failed on 'sim2': Error while evaluating 'dsBase::corDS(\"D3\", NULL)' -> Error : ERROR: The ratio of the number of variables over the number of individual-level\n records exceeds the allowed threshold, there is a possible risk of disclosure\n", fixed = TRUE) # expect_length(res, 5) # expect_length(res$`Error message`, 3) diff --git a/tests/testthat/test-disc-ds.cov.R b/tests/testthat/test-disc-ds.cov.R index 751d54bf..74ad600f 100644 --- a/tests/testthat/test-disc-ds.cov.R +++ b/tests/testthat/test-disc-ds.cov.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-disc-ds.levels.R b/tests/testthat/test-disc-ds.levels.R index 6f00f119..1cbb165e 100644 --- a/tests/testthat/test-disc-ds.levels.R +++ b/tests/testthat/test-disc-ds.levels.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-disc-ds.mean.R b/tests/testthat/test-disc-ds.mean.R index f1b690c9..e8bc9505 100644 --- a/tests/testthat/test-disc-ds.mean.R +++ b/tests/testthat/test-disc-ds.mean.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-disc-ds.meanByClass.R b/tests/testthat/test-disc-ds.meanByClass.R index 2b6147f8..9c6cec49 100644 --- a/tests/testthat/test-disc-ds.meanByClass.R +++ b/tests/testthat/test-disc-ds.meanByClass.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-disc-ds.sample.R b/tests/testthat/test-disc-ds.sample.R index 08cc01c7..ac579741 100644 --- a/tests/testthat/test-disc-ds.sample.R +++ b/tests/testthat/test-disc-ds.sample.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -26,38 +26,38 @@ test_that("cov_erros", { res1.errors <- DSI::datashield.errors() expect_length(res1.errors, 3) - expect_match(res1.errors$sim1, "* Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten") - expect_match(res1.errors$sim2, "* Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten") - expect_match(res1.errors$sim3, "* Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten") + expect_equal(res1.errors$sim1, "Command 'sampleDS(x.transmit = \"This_line_is_very_very_very_very_very_very_long\", \n size.transmit = 1234, replace.transmit = FALSE, prob.transmit = NULL)' failed on 'sim1': Error while evaluating 'is.null(base::assign('obj1', value={dsBase::sampleDS(x.transmit = \"This_line_is_very_very_very_very_very_very_long\", size.transmit = 1234, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten\n", fixed = TRUE) + expect_equal(res1.errors$sim2, "Command 'sampleDS(x.transmit = \"This_line_is_very_very_very_very_very_very_long\", \n size.transmit = 1234, replace.transmit = FALSE, prob.transmit = NULL)' failed on 'sim2': Error while evaluating 'is.null(base::assign('obj1', value={dsBase::sampleDS(x.transmit = \"This_line_is_very_very_very_very_very_very_long\", size.transmit = 1234, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten\n", fixed = TRUE) + expect_equal(res1.errors$sim3, "Command 'sampleDS(x.transmit = \"This_line_is_very_very_very_very_very_very_long\", \n size.transmit = 1234, replace.transmit = FALSE, prob.transmit = NULL)' failed on 'sim3': Error while evaluating 'is.null(base::assign('obj1', value={dsBase::sampleDS(x.transmit = \"This_line_is_very_very_very_very_very_very_long\", size.transmit = 1234, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten\n", fixed = TRUE) expect_error(ds.sample(x="D", size=1234, prob="This_line_is_very_very_very_very_very_very_long", newobj="obj2"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) res2.errors <- DSI::datashield.errors() expect_length(res2.errors, 3) - expect_match(res2.errors$sim1, "* Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten") - expect_match(res2.errors$sim2, "* Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten") - expect_match(res2.errors$sim3, "* Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten") + expect_equal(res2.errors$sim1, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 1234, replace.transmit = FALSE, \n prob.transmit = \"This_line_is_very_very_very_very_very_very_long\")' failed on 'sim1': Error while evaluating 'is.null(base::assign('obj2', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 1234, replace.transmit = FALSE, prob.transmit = \"This_line_is_very_very_very_very_very_very_long\")}))' -> Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten\n", fixed = TRUE) + expect_equal(res2.errors$sim2, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 1234, replace.transmit = FALSE, \n prob.transmit = \"This_line_is_very_very_very_very_very_very_long\")' failed on 'sim2': Error while evaluating 'is.null(base::assign('obj2', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 1234, replace.transmit = FALSE, prob.transmit = \"This_line_is_very_very_very_very_very_very_long\")}))' -> Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten\n", fixed = TRUE) + expect_equal(res2.errors$sim3, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 1234, replace.transmit = FALSE, \n prob.transmit = \"This_line_is_very_very_very_very_very_very_long\")' failed on 'sim3': Error while evaluating 'is.null(base::assign('obj2', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 1234, replace.transmit = FALSE, prob.transmit = \"This_line_is_very_very_very_very_very_very_long\")}))' -> Error : FAILED: the character string denoting the argument is too long and may be disclosive - please shorten\n", fixed = TRUE) expect_error(ds.sample(x="D", size=2, newobj="obj3"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) res3.errors <- DSI::datashield.errors() expect_length(res3.errors, 3) - expect_match(res3.errors$sim1, "* Error : FAILED: disclosure risk, as the length of the subset to be created is less than nfilter.subset") - expect_match(res3.errors$sim2, "* Error : FAILED: disclosure risk, as the length of the subset to be created is less than nfilter.subset") - expect_match(res3.errors$sim3, "* Error : FAILED: disclosure risk, as the length of the subset to be created is less than nfilter.subset") + expect_equal(res3.errors$sim1, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 2, replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'sim1': Error while evaluating 'is.null(base::assign('obj3', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 2, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: disclosure risk, as the length of the subset to be created is less than nfilter.subset\n", fixed = TRUE) + expect_equal(res3.errors$sim2, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 2, replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'sim2': Error while evaluating 'is.null(base::assign('obj3', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 2, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: disclosure risk, as the length of the subset to be created is less than nfilter.subset\n", fixed = TRUE) + expect_equal(res3.errors$sim3, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 2, replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'sim3': Error while evaluating 'is.null(base::assign('obj3', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 2, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: disclosure risk, as the length of the subset to be created is less than nfilter.subset\n", fixed = TRUE) expect_error(ds.sample(x="D", size=2162, newobj="obj4"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) res4.errors <- DSI::datashield.errors() expect_length(res4.errors, 1) - expect_match(res4.errors$sim1, "* Error : FAILED: disclosure risk using differencing: original object length minus subset length less than nfilter.subset") + expect_equal(res4.errors$sim1, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 2162, replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'sim1': Error while evaluating 'is.null(base::assign('obj4', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 2162, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: disclosure risk using differencing: original object length minus subset length less than nfilter.subset\n", fixed = TRUE) expect_error(ds.sample(x="D", size=3086, newobj="obj5"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) res5.errors <- DSI::datashield.errors() expect_length(res5.errors, 2) - expect_match(res5.errors$sim1, "* Error : FAILED: if sampling without replacement size must be less than or equal to length\\(x\\)") - expect_match(res5.errors$sim2, "* Error : FAILED: disclosure risk using differencing: original object length minus subset length less than nfilter.subset") + expect_equal(res5.errors$sim1, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 3086, replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'sim1': Error while evaluating 'is.null(base::assign('obj5', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 3086, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: if sampling without replacement size must be less than or equal to length(x)\n", fixed = TRUE) + expect_equal(res5.errors$sim2, "Command 'sampleDS(x.transmit = \"D\", size.transmit = 3086, replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'sim2': Error while evaluating 'is.null(base::assign('obj5', value={dsBase::sampleDS(x.transmit = \"D\", size.transmit = 3086, replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: disclosure risk using differencing: original object length minus subset length less than nfilter.subset\n", fixed = TRUE) }) # diff --git a/tests/testthat/test-disc-ds.table.R b/tests/testthat/test-disc-ds.table.R index f8211694..bbeba0a4 100644 --- a/tests/testthat/test-disc-ds.table.R +++ b/tests/testthat/test-disc-ds.table.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -62,9 +62,9 @@ test_that("table rvar is big numeric", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$study1, "* Error : FAILED: this variable has too many levels and may be disclosive. It exceeds the max number of levels allowed by nfilter.levels.max: that is 40. In this study this variable has 71 factor levels") - expect_match(res.errors$study2, "* Error : FAILED: this variable has too many levels and may be disclosive. It exceeds the max number of levels allowed by nfilter.levels.max: that is 40. In this study this variable has 71 factor levels") - expect_match(res.errors$study3, "* Error : FAILED: this variable has too many levels and may be disclosive. It exceeds the max number of levels allowed by nfilter.levels.max: that is 40. In this study this variable has 71 factor levels") + expect_equal(res.errors$study1, "Command 'asFactorDS1(\"D$NUMERIC\")' failed on 'study1': Error while evaluating 'dsBase::asFactorDS1(\"D$NUMERIC\")' -> Error : FAILED: this variable has too many levels and may be disclosive. The ds.asFactor function allows no more than 23.43 levels in this particular study. This variable has 71\n", fixed = TRUE) + expect_equal(res.errors$study2, "Command 'asFactorDS1(\"D$NUMERIC\")' failed on 'study2': Error while evaluating 'dsBase::asFactorDS1(\"D$NUMERIC\")' -> Error : FAILED: this variable has too many levels and may be disclosive. The ds.asFactor function allows no more than 23.43 levels in this particular study. This variable has 71\n", fixed = TRUE) + expect_equal(res.errors$study3, "Command 'asFactorDS1(\"D$NUMERIC\")' failed on 'study3': Error while evaluating 'dsBase::asFactorDS1(\"D$NUMERIC\")' -> Error : FAILED: this variable has too many levels and may be disclosive. The ds.asFactor function allows no more than 23.43 levels in this particular study. This variable has 71\n", fixed = TRUE) }) # diff --git a/tests/testthat/test-disc-ds.var.R b/tests/testthat/test-disc-ds.var.R index 08a445b9..96ab25fa 100644 --- a/tests/testthat/test-disc-ds.var.R +++ b/tests/testthat/test-disc-ds.var.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-discctrl-ds.Boole.R b/tests/testthat/test-discctrl-ds.Boole.R deleted file mode 100644 index 80a5dc3d..00000000 --- a/tests/testthat/test-discctrl-ds.Boole.R +++ /dev/null @@ -1,54 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.Boole::discctrl::setup") - -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.Boole::discctrl") -test_that("simple rep", { - expect_error(ds.Boole("D$LAB_TSC", "D$LAB_TRIG", "=="), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'BooleDS(\"D$LAB_TSC\", \"D$LAB_TRIG\", 1, \"NA\", TRUE)' failed on 'sim1': Error while evaluating 'is.null(base::assign('boole.newobj', value={dsBase::BooleDS(\"D$LAB_TSC\", \"D$LAB_TRIG\", 1, \"NA\", TRUE)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'BooleDS(\"D$LAB_TSC\", \"D$LAB_TRIG\", 1, \"NA\", TRUE)' failed on 'sim2': Error while evaluating 'is.null(base::assign('boole.newobj', value={dsBase::BooleDS(\"D$LAB_TSC\", \"D$LAB_TRIG\", 1, \"NA\", TRUE)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'BooleDS(\"D$LAB_TSC\", \"D$LAB_TRIG\", 1, \"NA\", TRUE)' failed on 'sim3': Error while evaluating 'is.null(base::assign('boole.newobj', value={dsBase::BooleDS(\"D$LAB_TSC\", \"D$LAB_TRIG\", 1, \"NA\", TRUE)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.Boole::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.Boole::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.c.R b/tests/testthat/test-discctrl-ds.c.R deleted file mode 100644 index da4a0caa..00000000 --- a/tests/testthat/test-discctrl-ds.c.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.c::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.c::discctrl") -test_that("simple c", { - expect_error(ds.c("D$GENDER"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'cDS(list(D$GENDER))' failed on 'sim1': Error while evaluating 'is.null(base::assign('c.newobj', value={dsBase::cDS(base::list(D$GENDER))}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'cDS(list(D$GENDER))' failed on 'sim2': Error while evaluating 'is.null(base::assign('c.newobj', value={dsBase::cDS(base::list(D$GENDER))}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'cDS(list(D$GENDER))' failed on 'sim3': Error while evaluating 'is.null(base::assign('c.newobj', value={dsBase::cDS(base::list(D$GENDER))}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.c::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.c::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.cbind.R b/tests/testthat/test-discctrl-ds.cbind.R deleted file mode 100644 index a829185e..00000000 --- a/tests/testthat/test-discctrl-ds.cbind.R +++ /dev/null @@ -1,49 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.cbind::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.cbind::discctrl") -test_that("simple c", { - expect_error(ds.cbind(x="D", DataSHIELD.checks=TRUE, datasources = ds.test_env$connections[1]), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'cbindDS(\"D\", \"GENDER,PM_BMI_CATEGORICAL\")' failed on 'sim1': Error while evaluating 'is.null(base::assign('cbind.newobj', value={dsBase::cbindDS(\"D\", \"GENDER,PM_BMI_CATEGORICAL\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.cbind::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.cbind::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.dataFrame.R b/tests/testthat/test-discctrl-ds.dataFrame.R deleted file mode 100644 index fe153c0e..00000000 --- a/tests/testthat/test-discctrl-ds.dataFrame.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.dataFrame::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.dataFrame::discctrl") -test_that("simple c", { - ds.assign('D$LAB_TSC', 'LAB_TSC') - ds.assign('D$LAB_HDL', 'LAB_HDL') - vectors <- c('LAB_TSC', 'LAB_HDL') - - expect_error(ds.dataFrame(x = vectors), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'dataFrameDS(\"LAB_TSC,LAB_HDL\", NULL, FALSE, TRUE, \"LAB_TSC,LAB_HDL\", \n TRUE, FALSE)' failed on 'sim1': Error while evaluating 'is.null(base::assign('dataframe.newobj', value={dsBase::dataFrameDS(\"LAB_TSC,LAB_HDL\", NULL, FALSE, TRUE, \"LAB_TSC,LAB_HDL\", TRUE, FALSE)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.dataFrame::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "LAB_TSC", "LAB_HDL")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.dataFrame::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.dataFrameSort.R b/tests/testthat/test-discctrl-ds.dataFrameSort.R deleted file mode 100644 index 027c5d8e..00000000 --- a/tests/testthat/test-discctrl-ds.dataFrameSort.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.dataFrameSort::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.dataFrameSort::discctrl") -test_that("simple c", { - expect_error(ds.dataFrameSort(df.name="D", sort.key.name="PM_BMI_CATEGORICAL", newobj="sorted_df"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'dataFrameSortDS(\"D\", \"PM_BMI_CATEGORICAL\", FALSE, \"default\")' failed on 'sim1': Error while evaluating 'is.null(base::assign('sorted_df', value={dsBase::dataFrameSortDS(\"D\", \"PM_BMI_CATEGORICAL\", FALSE, \"default\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'dataFrameSortDS(\"D\", \"PM_BMI_CATEGORICAL\", FALSE, \"default\")' failed on 'sim2': Error while evaluating 'is.null(base::assign('sorted_df', value={dsBase::dataFrameSortDS(\"D\", \"PM_BMI_CATEGORICAL\", FALSE, \"default\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'dataFrameSortDS(\"D\", \"PM_BMI_CATEGORICAL\", FALSE, \"default\")' failed on 'sim3': Error while evaluating 'is.null(base::assign('sorted_df', value={dsBase::dataFrameSortDS(\"D\", \"PM_BMI_CATEGORICAL\", FALSE, \"default\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.dataFrameSort::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.dataFrameSort::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.dataFrameSubset.R b/tests/testthat/test-discctrl-ds.dataFrameSubset.R deleted file mode 100644 index c43d0c80..00000000 --- a/tests/testthat/test-discctrl-ds.dataFrameSubset.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.dataFrameSubset::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.dataFrameSubset::discctrl") -test_that("simple c", { - expect_error(ds.dataFrameSubset(df.name="D", V1.name="D$LAB_TSC", V2.name="D$LAB_HDL", Boolean.operator="!=", newobj="subset_df"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_HDL\", 2, NULL, NULL, \n FALSE)' failed on 'sim1': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_HDL\", 2, NULL, NULL, FALSE)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_HDL\", 2, NULL, NULL, \n FALSE)' failed on 'sim2': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_HDL\", 2, NULL, NULL, FALSE)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_HDL\", 2, NULL, NULL, \n FALSE)' failed on 'sim3': Error while evaluating 'dsBase::dataFrameSubsetDS1(\"D\", \"D$LAB_TSC\", \"D$LAB_HDL\", 2, NULL, NULL, FALSE)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.dataFrameSubset::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.dataFrameSubset::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.dmtC2S.R b/tests/testthat/test-discctrl-ds.dmtC2S.R deleted file mode 100644 index fb2099a7..00000000 --- a/tests/testthat/test-discctrl-ds.dmtC2S.R +++ /dev/null @@ -1,57 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.dmtC2S::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.dmtC2S::discctrl") -test_that("simple dmtC2S", { - a <- data.frame(c(1, 2)) - b <- data.frame(c(2, 3)) - cdf <- data.frame(a, b) - - expect_error(ds.dmtC2S(dfdata = cdf), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'dmtC2SDS(\"1,2,2,3\", \"DF\", \"clientside.dmt\", \"2\", \"2\", \"c.1..2.,c.2..3.\", \n \"numeric,numeric\", FALSE)' failed on 'sim1': Error while evaluating 'is.null(base::assign('dmt.copied.C2S', value={dsBase::dmtC2SDS(\"1,2,2,3\", \"DF\", \"clientside.dmt\", \"2\", \"2\", \"c.1..2.,c.2..3.\", \"numeric,numeric\", FALSE)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'dmtC2SDS(\"1,2,2,3\", \"DF\", \"clientside.dmt\", \"2\", \"2\", \"c.1..2.,c.2..3.\", \n \"numeric,numeric\", FALSE)' failed on 'sim2': Error while evaluating 'is.null(base::assign('dmt.copied.C2S', value={dsBase::dmtC2SDS(\"1,2,2,3\", \"DF\", \"clientside.dmt\", \"2\", \"2\", \"c.1..2.,c.2..3.\", \"numeric,numeric\", FALSE)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'dmtC2SDS(\"1,2,2,3\", \"DF\", \"clientside.dmt\", \"2\", \"2\", \"c.1..2.,c.2..3.\", \n \"numeric,numeric\", FALSE)' failed on 'sim3': Error while evaluating 'is.null(base::assign('dmt.copied.C2S', value={dsBase::dmtC2SDS(\"1,2,2,3\", \"DF\", \"clientside.dmt\", \"2\", \"2\", \"c.1..2.,c.2..3.\", \"numeric,numeric\", FALSE)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.dmtC2S::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.dmtC2S::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.levels.R b/tests/testthat/test-discctrl-ds.levels.R deleted file mode 100644 index 05325f54..00000000 --- a/tests/testthat/test-discctrl-ds.levels.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.levels::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.levels::discctrl") -test_that("simple levels", { - expect_error(ds.levels("D$GENDER"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'levelsDS(D$GENDER)' failed on 'sim1': Error while evaluating 'dsBase::levelsDS(D$GENDER)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'levelsDS(D$GENDER)' failed on 'sim2': Error while evaluating 'dsBase::levelsDS(D$GENDER)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'levelsDS(D$GENDER)' failed on 'sim3': Error while evaluating 'dsBase::levelsDS(D$GENDER)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.levels::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.levels::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.ns.R b/tests/testthat/test-discctrl-ds.ns.R deleted file mode 100644 index c7c4a43d..00000000 --- a/tests/testthat/test-discctrl-ds.ns.R +++ /dev/null @@ -1,54 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.ns::discctrl::setup") - -connect.studies.dataset.cnsim(list("LAB_TRIG", "PM_BMI_CONTINUOUS")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.ns::discctrl") -test_that("ns", { - expect_error(ds.ns(x="D$PM_BMI_CONTINUOUS", knots=c(8,9,10,12,25,35), newobj="nsDS", datasources=ds.test_env$connections), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'nsDS(\"D$PM_BMI_CONTINUOUS\", NULL, c(8, 9, 10, 12, 25, 35), FALSE, \n NULL)' failed on 'sim1': Error while evaluating 'is.null(base::assign('nsDS', value={dsBase::nsDS(\"D$PM_BMI_CONTINUOUS\", NULL, dsBase::vectorDS(8, 9, 10, 12, 25, 35), FALSE, NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'nsDS(\"D$PM_BMI_CONTINUOUS\", NULL, c(8, 9, 10, 12, 25, 35), FALSE, \n NULL)' failed on 'sim2': Error while evaluating 'is.null(base::assign('nsDS', value={dsBase::nsDS(\"D$PM_BMI_CONTINUOUS\", NULL, dsBase::vectorDS(8, 9, 10, 12, 25, 35), FALSE, NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'nsDS(\"D$PM_BMI_CONTINUOUS\", NULL, c(8, 9, 10, 12, 25, 35), FALSE, \n NULL)' failed on 'sim3': Error while evaluating 'is.null(base::assign('nsDS', value={dsBase::nsDS(\"D$PM_BMI_CONTINUOUS\", NULL, dsBase::vectorDS(8, 9, 10, 12, 25, 35), FALSE, NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.ns::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.ns::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.rBinom.R b/tests/testthat/test-discctrl-ds.rBinom.R deleted file mode 100644 index 19e2318a..00000000 --- a/tests/testthat/test-discctrl-ds.rBinom.R +++ /dev/null @@ -1,50 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.rBinom::discctrl::setup") - -connect.studies.dataset.cnsim(list("LAB_TSC")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.rBinom::discctrl") -test_that("simple c", { - expect_error(ds.rBinom(samp.size = 50, size = 50, prob = 0.25, newobj = "binom_dist", seed.as.integer = 27), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'setSeedDS(27)' failed on 'sim1': Error while evaluating 'dsBase::setSeedDS(27)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.rBinom::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.rBinom::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.rNorm.R b/tests/testthat/test-discctrl-ds.rNorm.R deleted file mode 100644 index 997e3fad..00000000 --- a/tests/testthat/test-discctrl-ds.rNorm.R +++ /dev/null @@ -1,50 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.rNorm::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.rNorm::discctrl") -test_that("simple c", { - expect_error(ds.rNorm(samp.size = 50, mean = 10, sd = 5, newobj = "norm_dist", seed.as.integer = 27), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'setSeedDS(27)' failed on 'sim1': Error while evaluating 'dsBase::setSeedDS(27)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.rNorm::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.rNorm::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.rPois.R b/tests/testthat/test-discctrl-ds.rPois.R deleted file mode 100644 index 58b0667a..00000000 --- a/tests/testthat/test-discctrl-ds.rPois.R +++ /dev/null @@ -1,50 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.rPois::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.rPois::discctrl") -test_that("simple c", { - expect_error(ds.rPois(samp.size = 50, lambda = 1, newobj = "pois_dist", seed.as.integer = 27), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'setSeedDS(27)' failed on 'sim1': Error while evaluating 'dsBase::setSeedDS(27)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.rPois::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.rPois::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.rUnif.R b/tests/testthat/test-discctrl-ds.rUnif.R deleted file mode 100644 index f2fd5e47..00000000 --- a/tests/testthat/test-discctrl-ds.rUnif.R +++ /dev/null @@ -1,50 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.rUnif::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.rUnif::discctrl") -test_that("simple c", { - expect_error(ds.rUnif(samp.size = 50, min = 0, max = 1, newobj = "unif_dist", seed.as.integer = 27), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'setSeedDS(27)' failed on 'sim1': Error while evaluating 'dsBase::setSeedDS(27)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.rUnif::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.rUnif::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.rbind.R b/tests/testthat/test-discctrl-ds.rbind.R deleted file mode 100644 index 28d3c030..00000000 --- a/tests/testthat/test-discctrl-ds.rbind.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.rbind::discctrl::setup") - -connect.studies.dataset.survival(list("survtime", "time.id", "female", "age.60")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.rbind::discctrl") -test_that("simple c", { - expect_error(ds.rbind(c("D$survtime", "D$time.id", "D$female", "D$age.60"), newobj="rbind_newobj"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$survival1, 1) - expect_equal(res_errors$survival1, "Command 'rbindDS(\"D$survtime,D$time.id,D$female,D$age.60\", \"D$survtime,D$time.id,D$female,D$age.60\")' failed on 'survival1': Error while evaluating 'is.null(base::assign('rbind_newobj', value={dsBase::rbindDS(\"D$survtime,D$time.id,D$female,D$age.60\", \"D$survtime,D$time.id,D$female,D$age.60\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival2, 1) - expect_equal(res_errors$survival2, "Command 'rbindDS(\"D$survtime,D$time.id,D$female,D$age.60\", \"D$survtime,D$time.id,D$female,D$age.60\")' failed on 'survival2': Error while evaluating 'is.null(base::assign('rbind_newobj', value={dsBase::rbindDS(\"D$survtime,D$time.id,D$female,D$age.60\", \"D$survtime,D$time.id,D$female,D$age.60\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival3, 1) - expect_equal(res_errors$survival3, "Command 'rbindDS(\"D$survtime,D$time.id,D$female,D$age.60\", \"D$survtime,D$time.id,D$female,D$age.60\")' failed on 'survival3': Error while evaluating 'is.null(base::assign('rbind_newobj', value={dsBase::rbindDS(\"D$survtime,D$time.id,D$female,D$age.60\", \"D$survtime,D$time.id,D$female,D$age.60\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.rbind::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.survival() - -context("ds.rbind::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.reShape.R b/tests/testthat/test-discctrl-ds.reShape.R deleted file mode 100644 index 65f68eb6..00000000 --- a/tests/testthat/test-discctrl-ds.reShape.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.reShape::discctrl::setup") - -connect.studies.dataset.survival(list("id", "study.id", "time.id", "cens", "age.60", "female")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.reShape::discctrl") -test_that("simple reShape", { - expect_error(ds.reShape(data.name="D", v.names="age.60", timevar.name="time.id", idvar.name="id", direction="wide", newobj="reshape1_obj"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$survival1, 1) - expect_equal(res_errors$survival1, "Command 'reShapeDS(\"D\", NULL, \"age.60\", \"time.id\", \"id\", NULL, \"wide\", \n \".\")' failed on 'survival1': Error while evaluating 'is.null(base::assign('reshape1_obj', value={dsBase::reShapeDS(\"D\", NULL, \"age.60\", \"time.id\", \"id\", NULL, \"wide\", \".\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival2, 1) - expect_equal(res_errors$survival2, "Command 'reShapeDS(\"D\", NULL, \"age.60\", \"time.id\", \"id\", NULL, \"wide\", \n \".\")' failed on 'survival2': Error while evaluating 'is.null(base::assign('reshape1_obj', value={dsBase::reShapeDS(\"D\", NULL, \"age.60\", \"time.id\", \"id\", NULL, \"wide\", \".\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival3, 1) - expect_equal(res_errors$survival3, "Command 'reShapeDS(\"D\", NULL, \"age.60\", \"time.id\", \"id\", NULL, \"wide\", \n \".\")' failed on 'survival3': Error while evaluating 'is.null(base::assign('reshape1_obj', value={dsBase::reShapeDS(\"D\", NULL, \"age.60\", \"time.id\", \"id\", NULL, \"wide\", \".\")}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.reShape::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.survival() - -context("ds.reShape::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.recodeLevels.R b/tests/testthat/test-discctrl-ds.recodeLevels.R deleted file mode 100644 index 9f4ab0ca..00000000 --- a/tests/testthat/test-discctrl-ds.recodeLevels.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.recodeLevels::discctrl::setup") - -connect.studies.dataset.cnsim(list("PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.recodeLevels::discctrl") -test_that("simple recodeLevels", { - expect_error(expect_warning(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=c('normal', 'overweight', 'obesity'), newobj='bmi_new'), "", fixed = TRUE), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'levelsDS(D$PM_BMI_CATEGORICAL)' failed on 'sim1': Error while evaluating 'dsBase::levelsDS(D$PM_BMI_CATEGORICAL)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'levelsDS(D$PM_BMI_CATEGORICAL)' failed on 'sim2': Error while evaluating 'dsBase::levelsDS(D$PM_BMI_CATEGORICAL)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'levelsDS(D$PM_BMI_CATEGORICAL)' failed on 'sim3': Error while evaluating 'dsBase::levelsDS(D$PM_BMI_CATEGORICAL)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.recodeLevels::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.recodeLevels::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.recodeValues.R b/tests/testthat/test-discctrl-ds.recodeValues.R deleted file mode 100644 index 71580510..00000000 --- a/tests/testthat/test-discctrl-ds.recodeValues.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.rep::discctrl::setup") - -connect.studies.dataset.survival(list("survtime", "time.id", "female", "age.60")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.rep::discctrl") -test_that("simple recodeValues", { - expect_error(ds.recodeValues("D$survtime", values2replace.vector=c(0,1), new.values.vector=c(-10,10), newobj="recodevalues_newobj"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$survival1, 1) - expect_equal(res_errors$survival1, "Command 'recodeValuesDS(\"D$survtime\", \"0,1\", \"-10,10\", NULL)' failed on 'survival1': Error while evaluating 'is.null(base::assign('recodevalues_newobj', value={dsBase::recodeValuesDS(\"D$survtime\", \"0,1\", \"-10,10\", NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival2, 1) - expect_equal(res_errors$survival2, "Command 'recodeValuesDS(\"D$survtime\", \"0,1\", \"-10,10\", NULL)' failed on 'survival2': Error while evaluating 'is.null(base::assign('recodevalues_newobj', value={dsBase::recodeValuesDS(\"D$survtime\", \"0,1\", \"-10,10\", NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival3, 1) - expect_equal(res_errors$survival3, "Command 'recodeValuesDS(\"D$survtime\", \"0,1\", \"-10,10\", NULL)' failed on 'survival3': Error while evaluating 'is.null(base::assign('recodevalues_newobj', value={dsBase::recodeValuesDS(\"D$survtime\", \"0,1\", \"-10,10\", NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.rep::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.survival() - -context("ds.rep::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.rep.R b/tests/testthat/test-discctrl-ds.rep.R deleted file mode 100644 index feeb56c9..00000000 --- a/tests/testthat/test-discctrl-ds.rep.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.rep::discctrl::setup") - -connect.studies.dataset.survival(list("survtime", "time.id", "female", "age.60")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.rep::discctrl") -test_that("simple rep", { - expect_error(ds.rep("D$survtime"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$survival1, 1) - expect_equal(res_errors$survival1, "Command 'repDS(x1.transmit = \"D$survtime\", times.transmit = \"NA\", length.out.transmit = \"NA\", \n each.transmit = \"1\", x1.includes.characters = FALSE, source.x1 = \"clientside\", \n source.times = NULL, source.length.out = NULL, source.each = NULL)' failed on 'survival1': Error while evaluating 'is.null(base::assign('seq.vect', value={dsBase::repDS(x1.transmit = \"D$survtime\", times.transmit = \"NA\", length.out.transmit = \"NA\", each.transmit = \"1\", x1.includes.characters = FALSE, source.x1 = \"clientside\", source.times = NULL, source.length.out = NULL, source.each = NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival2, 1) - expect_equal(res_errors$survival2, "Command 'repDS(x1.transmit = \"D$survtime\", times.transmit = \"NA\", length.out.transmit = \"NA\", \n each.transmit = \"1\", x1.includes.characters = FALSE, source.x1 = \"clientside\", \n source.times = NULL, source.length.out = NULL, source.each = NULL)' failed on 'survival2': Error while evaluating 'is.null(base::assign('seq.vect', value={dsBase::repDS(x1.transmit = \"D$survtime\", times.transmit = \"NA\", length.out.transmit = \"NA\", each.transmit = \"1\", x1.includes.characters = FALSE, source.x1 = \"clientside\", source.times = NULL, source.length.out = NULL, source.each = NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival3, 1) - expect_equal(res_errors$survival3, "Command 'repDS(x1.transmit = \"D$survtime\", times.transmit = \"NA\", length.out.transmit = \"NA\", \n each.transmit = \"1\", x1.includes.characters = FALSE, source.x1 = \"clientside\", \n source.times = NULL, source.length.out = NULL, source.each = NULL)' failed on 'survival3': Error while evaluating 'is.null(base::assign('seq.vect', value={dsBase::repDS(x1.transmit = \"D$survtime\", times.transmit = \"NA\", length.out.transmit = \"NA\", each.transmit = \"1\", x1.includes.characters = FALSE, source.x1 = \"clientside\", source.times = NULL, source.length.out = NULL, source.each = NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.rep::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.survival() - -context("ds.rep::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.sample.R b/tests/testthat/test-discctrl-ds.sample.R deleted file mode 100644 index 0991669f..00000000 --- a/tests/testthat/test-discctrl-ds.sample.R +++ /dev/null @@ -1,50 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.sample::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.sample::discctrl") -test_that("simple c", { - expect_error(ds.sample(x="D", size=20, seed.as.integer=27), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'setSeedDS(27)' failed on 'sim1': Error while evaluating 'dsBase::setSeedDS(27)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.sample::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.sample::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.seq.R b/tests/testthat/test-discctrl-ds.seq.R deleted file mode 100644 index 5045b06a..00000000 --- a/tests/testthat/test-discctrl-ds.seq.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.seq::discctrl::setup") - -connect.studies.dataset.survival(list("survtime", "time.id", "female", "age.60")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.seq::discctrl") -test_that("simple rep", { - expect_error(ds.seq(FROM.value.char="1", BY.value.char="1", LENGTH.OUT.value.char="10", ALONG.WITH.name=NULL, newobj="obj1"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$survival1, 1) - expect_equal(res_errors$survival1, "Command 'seqDS(\"1\", NULL, \"1\", \"10\", NULL)' failed on 'survival1': Error while evaluating 'is.null(base::assign('obj1', value={dsBase::seqDS(\"1\", NULL, \"1\", \"10\", NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival2, 1) - expect_equal(res_errors$survival2, "Command 'seqDS(\"1\", NULL, \"1\", \"10\", NULL)' failed on 'survival2': Error while evaluating 'is.null(base::assign('obj1', value={dsBase::seqDS(\"1\", NULL, \"1\", \"10\", NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$survival3, 1) - expect_equal(res_errors$survival3, "Command 'seqDS(\"1\", NULL, \"1\", \"10\", NULL)' failed on 'survival3': Error while evaluating 'is.null(base::assign('obj1', value={dsBase::seqDS(\"1\", NULL, \"1\", \"10\", NULL)}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.seq::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.survival() - -context("ds.seq::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.setSeed.R b/tests/testthat/test-discctrl-ds.setSeed.R deleted file mode 100644 index 351859c2..00000000 --- a/tests/testthat/test-discctrl-ds.setSeed.R +++ /dev/null @@ -1,54 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.setSeed::discctrl::setup") - -connect.studies.dataset.cnsim(list("GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.setSeed::discctrl") -test_that("simple c", { - expect_error(ds.setSeed(4321), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'setSeedDS(4321)' failed on 'sim1': Error while evaluating 'dsBase::setSeedDS(4321)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'setSeedDS(4321)' failed on 'sim2': Error while evaluating 'dsBase::setSeedDS(4321)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'setSeedDS(4321)' failed on 'sim3': Error while evaluating 'dsBase::setSeedDS(4321)' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.setSeed::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.setSeed::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.subset.R b/tests/testthat/test-discctrl-ds.subset.R deleted file mode 100644 index 6b99c7c8..00000000 --- a/tests/testthat/test-discctrl-ds.subset.R +++ /dev/null @@ -1,50 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.subset::discctrl::setup") - -connect.studies.dataset.cnsim(list("DIS_DIAB","PM_BMI_CONTINUOUS","LAB_HDL", "GENDER")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.subset::discctrl") -test_that("simple subset", { - expect_error(expect_warning(ds.subset(datasources=ds.test_env$connections, subset='subD', x='D', rows=c(1:50), cols=c(1,2)), "", fixed = TRUE), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 1) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'subsetDS(\"D\", FALSE, 1:50, c(1, 2))' failed on 'sim1': Error while evaluating 'is.null(base::assign('subD', value={dsBase::subsetDS(\"D\", FALSE, 1:50, dsBase::vectorDS(1, 2))}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.subset::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.subset::discctrl::done") diff --git a/tests/testthat/test-discctrl-ds.subsetByClass.R b/tests/testthat/test-discctrl-ds.subsetByClass.R deleted file mode 100644 index 414efb4d..00000000 --- a/tests/testthat/test-discctrl-ds.subsetByClass.R +++ /dev/null @@ -1,53 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.subsetByClass::discctrl::setup") - -connect.studies.dataset.cnsim(list("LAB_TSC", "GENDER")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# -context("ds.subsetByClass::discctrl") -test_that("simple subsetByClass", { - expect_error(expect_warning(ds.subsetByClass(x='D', subsets='subclasses1'), "", fixed = TRUE), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) - - res_errors <- DSI::datashield.errors() - - expect_length(res_errors, 3) - expect_length(res_errors$sim1, 1) - expect_equal(res_errors$sim1, "Command 'subsetByClassDS('D')' failed on 'sim1': Error while evaluating 'is.null(base::assign('subclasses1', value={dsBase::subsetByClassDS('D')}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim2, 1) - expect_equal(res_errors$sim2, "Command 'subsetByClassDS('D')' failed on 'sim2': Error while evaluating 'is.null(base::assign('subclasses1', value={dsBase::subsetByClassDS('D')}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) - expect_length(res_errors$sim3, 1) - expect_equal(res_errors$sim3, "Command 'subsetByClassDS('D')' failed on 'sim3': Error while evaluating 'is.null(base::assign('subclasses1', value={dsBase::subsetByClassDS('D')}))' -> Error in checkPermissivePrivacyControlLevel() : \n BLOCKED: The server is running in 'non-permissive' mode which has caused this method to be blocked\n", fixed = TRUE) -}) - -# -# Done -# - -context("ds.subsetByClass::discctrl::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.subsetByClass::discctrl::done") diff --git a/tests/testthat/test-expt-ds.glmerSLMA.R b/tests/testthat/test-expt-ds.glmerSLMA.R index 0ce25e86..28d814ff 100644 --- a/tests/testthat/test-expt-ds.glmerSLMA.R +++ b/tests/testthat/test-expt-ds.glmerSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -68,7 +68,7 @@ test_that("linear mixed model with 2 levels of hierarchy", # print(SLMA.pooled.ests.matrix) # print(res.server$SLMA.pooled.ests.matrix) - expect_equal(SLMA.pooled.ests.matrix, res.server$SLMA.pooled.ests.matrix, tolerance = 1.0e-5, check.attributes = FALSE) + expect_equal(SLMA.pooled.ests.matrix, res.server$SLMA.pooled.ests.matrix, tolerance = ds.test_env$tolerance, check.attributes = FALSE) } ) diff --git a/tests/testthat/test-expt-ds.lmerSLMA.R b/tests/testthat/test-expt-ds.lmerSLMA.R index 271381c6..a596e434 100644 --- a/tests/testthat/test-expt-ds.lmerSLMA.R +++ b/tests/testthat/test-expt-ds.lmerSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-expt-ds.mean.R b/tests/testthat/test-expt-ds.mean.R index 8c6d6b44..a891f3d3 100644 --- a/tests/testthat/test-expt-ds.mean.R +++ b/tests/testthat/test-expt-ds.mean.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-expt-ds.skewness.R b/tests/testthat/test-expt-ds.skewness.R index d43bdce8..c343c32c 100644 --- a/tests/testthat/test-expt-ds.skewness.R +++ b/tests/testthat/test-expt-ds.skewness.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-expt_bug-ds.dataFrameSort.R b/tests/testthat/test-expt_bug-ds.dataFrameSort.R index 7f4f065a..bc30e9ad 100644 --- a/tests/testthat/test-expt_bug-ds.dataFrameSort.R +++ b/tests/testthat/test-expt_bug-ds.dataFrameSort.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-expt_bug-ds.table.R b/tests/testthat/test-expt_bug-ds.table.R index 23844fdf..d6cf0a3c 100644 --- a/tests/testthat/test-expt_bug-ds.table.R +++ b/tests/testthat/test-expt_bug-ds.table.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-expt_dgr-ds.dataFrameSort.R b/tests/testthat/test-expt_dgr-ds.dataFrameSort.R index 251170e7..110f6b88 100644 --- a/tests/testthat/test-expt_dgr-ds.dataFrameSort.R +++ b/tests/testthat/test-expt_dgr-ds.dataFrameSort.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -203,7 +203,7 @@ test_that('dataset 1', .test.data.frame.sorting("D","NEGATIVE_INTEGER",TRUE,"numeric","server.data",all.local.values) .test.data.frame.sorting("D","NUMERIC",TRUE,"numeric","server.data",all.local.values) .test.data.frame.sorting("D","POSITIVE_NUMERIC",TRUE,"numeric","server.data",all.local.values) - #.test.data.frame.sorting("D","NEGATIVE_NUMERIC",TRUE,"numeric","server.data",all.local.values) + .test.data.frame.sorting("D","NEGATIVE_NUMERIC",TRUE,"numeric","server.data",all.local.values) .test.data.frame.sorting("D","IDENTIFIER",TRUE,"numeric","server.data",all.local.values) .test.data.frame.sorting("D","CATEGORY",TRUE,"numeric","server.data",all.local.values) .test.data.frame.sorting("D","NUMERIC_ONE_CHANGE",TRUE,"numeric","server.data",all.local.values) diff --git a/tests/testthat/test-expt_dgr-ds.dataFrameSubset.R b/tests/testthat/test-expt_dgr-ds.dataFrameSubset.R index 222d41bd..050603ab 100644 --- a/tests/testthat/test-expt_dgr-ds.dataFrameSubset.R +++ b/tests/testthat/test-expt_dgr-ds.dataFrameSubset.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-math_bug-ds.rUnif.R b/tests/testthat/test-math_bug-ds.rUnif.R index 123314a9..7b73b844 100644 --- a/tests/testthat/test-math_bug-ds.rUnif.R +++ b/tests/testthat/test-math_bug-ds.rUnif.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-math_bug-ds.table.R b/tests/testthat/test-math_bug-ds.table.R index 4f221c64..ee989369 100644 --- a/tests/testthat/test-math_bug-ds.table.R +++ b/tests/testthat/test-math_bug-ds.table.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-math_dgr-ds.dataFrameSort.R b/tests/testthat/test-math_dgr-ds.dataFrameSort.R deleted file mode 100644 index e7d68279..00000000 --- a/tests/testthat/test-math_dgr-ds.dataFrameSort.R +++ /dev/null @@ -1,66 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context('ds.dataFrameSort::expt_dgr::setup') - -source('connection_to_datasets/init_testing_datasets.R') -source('definition_tests/def-ds.dataFrameSort.R') - -# -# Tests -# - -context("ds.dataFrameSort::math_dgr::closure::multiple") -test_that('server set %in% local set', - { - connect.all.datasets() - local.df.list<-list(ds.test_env$local.values.1,ds.test_env$local.values.2,ds.test_env$local.values.3) - -# .closure.test("D","LOGICAL",FALSE,"numeric","server.data",local.df.list) -# .closure.test("D","LOGICAL",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","NUMERIC",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","INTEGER",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","POSITIVE_NUMERIC",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","POSITIVE_INTEGER",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","CATEGORY",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","NEGATIVE_NUMERIC",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","CHARACTER",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","NEGATIVE_INTEGER",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","IDENTIFIER",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","NUMERIC_ONE_CHANGE",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","INTEGER_ONE_CHANGE",TRUE,"numeric","server.data",local.df.list) - - }) - -context("ds.dataFrameSort::math_dgr::closure::simple") -test_that('server set %in% local set', - { - connect.dataset.1() - local.df.list<-list(ds.test_env$local.values.1) - -# .closure.test("D","LOGICAL",FALSE,"numeric","server.data",local.df.list) -# .closure.test("D","LOGICAL",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","NUMERIC",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","INTEGER",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","POSITIVE_NUMERIC",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","POSITIVE_INTEGER",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","CATEGORY",TRUE,"alphabetic","server.data",local.df.list) -# .closure.test("D","NEGATIVE_NUMERIC",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","CHARACTER",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","NEGATIVE_INTEGER",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","IDENTIFIER",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","NUMERIC_ONE_CHANGE",TRUE,"numeric","server.data",local.df.list) -# .closure.test("D","INTEGER_ONE_CHANGE",TRUE,"numeric","server.data",local.df.list) - - }) diff --git a/tests/testthat/test-math_dgr-ds.dataFrameSubset.R b/tests/testthat/test-math_dgr-ds.dataFrameSubset.R deleted file mode 100644 index 39ac712b..00000000 --- a/tests/testthat/test-math_dgr-ds.dataFrameSubset.R +++ /dev/null @@ -1,52 +0,0 @@ -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context('ds.dataFrameSubset::expt_dgr::setup') - -source('connection_to_datasets/init_testing_datasets.R') -source('definition_tests/def-ds.dataFrameSubset.R') - -# -# Tests -# - -context("ds.dataFrameSubset::math_dgr::closure::multiple") -test_that('server set %in% local set', - { - connect.all.datasets() - local.df.list<-list(ds.test_env$local.values.1[,-1],ds.test_env$local.values.2[,-1],ds.test_env$local.values.3[,-1]) - -# .closure.test("D","INTEGER","NUMERIC",">",TRUE,"subset.server",local.df.list) -# .closure.test("D","INTEGER","NUMERIC",">",FALSE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","POSITIVE_NUMERIC",">=",TRUE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","POSITIVE_NUMERIC",">=",FALSE,"subset.server",local.df.list) -# .closure.test("D","NEGATIVE_INTEGER","NEGATIVE_NUMERIC","<=",TRUE,"subset.server",local.df.list) -# .closure.test("D","NEGATIVE_INTEGER","NEGATIVE_NUMERIC","<=",FALSE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","NON_NEGATIVE_INTEGER","<=",TRUE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","NON_NEGATIVE_INTEGER","<=",FALSE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_NUMERIC","NON_NEGATIVE_NUMERIC","<=",TRUE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_NUMERIC","NON_NEGATIVE_NUMERIC","<=",FALSE,"subset.server",local.df.list) - }) - -context("ds.dataFrameSubset::math_dgr::closure::simple") -test_that('server set %in% local set', - { - connect.dataset.2() - local.df.list<-list(ds.test_env$local.values.2[,-1]) - -# .closure.test("D","INTEGER","NUMERIC",">",TRUE,"subset.server",local.df.list) -# .closure.test("D","INTEGER","NUMERIC",">",FALSE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","POSITIVE_NUMERIC",">=",TRUE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","POSITIVE_NUMERIC",">=",FALSE,"subset.server",local.df.list) -# .closure.test("D","NEGATIVE_INTEGER","NEGATIVE_NUMERIC","<=",TRUE,"subset.server",local.df.list) -# .closure.test("D","NEGATIVE_INTEGER","NEGATIVE_NUMERIC","<=",FALSE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","NON_NEGATIVE_INTEGER","<=",TRUE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_INTEGER","NON_NEGATIVE_INTEGER","<=",FALSE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_NUMERIC","NON_NEGATIVE_NUMERIC","<=",TRUE,"subset.server",local.df.list) -# .closure.test("D","POSITIVE_NUMERIC","NON_NEGATIVE_NUMERIC","<=",FALSE,"subset.server",local.df.list) - }) diff --git a/tests/testthat/test-perf-conndisconn.R b/tests/testthat/test-perf-conndisconn.R deleted file mode 100644 index 5e0fbf11..00000000 --- a/tests/testthat/test-perf-conndisconn.R +++ /dev/null @@ -1,61 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("conndisconn::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) -disconnect.studies.dataset.cnsim() - -# -# Tests -# - -context("conndisconn::perf::simple0") -test_that("simple connect - disconnect performance", { - .durationSec <- 120 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - disconnect.studies.dataset.cnsim() - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("conndisconn::perf::simple0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("conndisconn::perf::simple0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("conndisconn::perf::simple0", .current.rate, 0.5, 2.0) - } else { - print(paste("conndisconn::perf::simple0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("conndisconn::perf::simple0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("conndisconn::perf::simple0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("conndisconn::perf::simple0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("conndisconn::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("conndisconn::perf::done") diff --git a/tests/testthat/test-perf-ds.abs.R b/tests/testthat/test-perf-ds.abs.R deleted file mode 100644 index e62eef6c..00000000 --- a/tests/testthat/test-perf-ds.abs.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.abs::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.abs::perf:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.abs("D$LAB_TSC", newobj = "abs.newobj") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.abs::perf::0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.abs::perf::0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.abs::perf::0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.abs::perf::0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.abs::perf::0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.abs::perf::0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.abs::perf::0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.abs::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.abs::perf::done") diff --git a/tests/testthat/test-perf-ds.asInteger.R b/tests/testthat/test-perf-ds.asInteger.R deleted file mode 100644 index 948d5dc3..00000000 --- a/tests/testthat/test-perf-ds.asInteger.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.asInteger::perf::setup") -connect.studies.dataset.cnsim(list("GENDER")) - -# -# Tests -# - -context("ds.asInteger::perf:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.asInteger("D$GENDER", newobj = "asInteger.newobj") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.asInteger::perf:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.asInteger::perf:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.asInteger::perf:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.asInteger::perf:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.asInteger::perf:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.asInteger::perf:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.asInteger::perf:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.asInteger::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.asInteger::perf::done") diff --git a/tests/testthat/test-perf-ds.asList.R b/tests/testthat/test-perf-ds.asList.R deleted file mode 100644 index bca5198a..00000000 --- a/tests/testthat/test-perf-ds.asList.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.asList::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.asList::perf:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.asList("D$LAB_TSC", newobj = "asList.newobj") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.asList::perf:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.asList::perf:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.asList::perf:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.asList::perf:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.asList::perf:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.asList::perf:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.asList::perf:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.asList::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.asList::perf::done") diff --git a/tests/testthat/test-perf-ds.asNumeric.R b/tests/testthat/test-perf-ds.asNumeric.R deleted file mode 100644 index c3526a8d..00000000 --- a/tests/testthat/test-perf-ds.asNumeric.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.asNumeric::perf::setup") -connect.studies.dataset.cnsim(list("GENDER")) - -# -# Tests -# - -context("ds.asNumeric::perf:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.asNumeric("D$GENDER", newobj = "asNumeric.newobj") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.asNumeric::perf:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.asNumeric::perf:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.asNumeric::perf:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.asNumeric::perf:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.asNumeric::perf:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.asNumeric::perf:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.asNumeric::perf:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.asNumeric::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.asNumeric::perf::done") diff --git a/tests/testthat/test-perf-ds.assign.R b/tests/testthat/test-perf-ds.assign.R deleted file mode 100644 index 5f67fb60..00000000 --- a/tests/testthat/test-perf-ds.assign.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.assign::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.assign::perf::0") -test_that("performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.assign("D$LAB_TSC", newobj = "assign.newobj") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.assign::perf::0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.assign::perf::0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.assign::perf::0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.assign::perf::0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.assign::perf::0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.assign::perf::0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.assign::perf::0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.assign::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.assign::perf::done") diff --git a/tests/testthat/test-perf-ds.class.R b/tests/testthat/test-perf-ds.class.R deleted file mode 100644 index bffbde64..00000000 --- a/tests/testthat/test-perf-ds.class.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.class::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.class::perf::combine:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.class("D$LAB_TSC") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.class::perf::combine:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.class::perf::combine:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.class::perf::combine:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.class::perf::combine:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.class::perf::combine:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.class::perf::combine:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.class::perf::combine:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.class::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.class::perf::done") diff --git a/tests/testthat/test-perf-ds.colnames.R b/tests/testthat/test-perf-ds.colnames.R deleted file mode 100644 index c3bbbdff..00000000 --- a/tests/testthat/test-perf-ds.colnames.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.colnames::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.colnames::perf:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.colnames("D") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.colnames::perf:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.colnames::perf:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.colnames::perf:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.colnames::perf:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.colnames::perf:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.colnames::perf:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.colnames::perf:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.colnames::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.colnames::perf::done") diff --git a/tests/testthat/test-perf-ds.exists.R b/tests/testthat/test-perf-ds.exists.R deleted file mode 100644 index 6d9cf49f..00000000 --- a/tests/testthat/test-perf-ds.exists.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.exists::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.exists::perf::combine:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.exists("D$LAB_TSC") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.exists::perf::combine:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.exists::perf::combine:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.exists::perf::combine:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.exists::perf::combine:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.exists::perf::combine:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.exists::perf::combine:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.exists::perf::combine:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.exists::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.exists::perf::done") diff --git a/tests/testthat/test-perf-ds.length.R b/tests/testthat/test-perf-ds.length.R deleted file mode 100644 index 194d7675..00000000 --- a/tests/testthat/test-perf-ds.length.R +++ /dev/null @@ -1,59 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.length::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.length::perf::combine:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.length("D$LAB_TSC") - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.length::perf::combine:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.length::perf::combine:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.length::perf::combine:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.length::perf::combine:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.length::perf::combine:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.length::perf::combine:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.length::perf::combine:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.length::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.length::perf::done") diff --git a/tests/testthat/test-perf-ds.mean.R b/tests/testthat/test-perf-ds.mean.R deleted file mode 100644 index 61ae232f..00000000 --- a/tests/testthat/test-perf-ds.mean.R +++ /dev/null @@ -1,90 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.mean::perf::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG")) - -# -# Tests -# - -context("ds.mean::perf::combine:0") -test_that("combine - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.mean("D$LAB_TSC", type='combine') - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.mean::perf::combine:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.mean::perf::combine:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.mean::perf::combine:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.mean::perf::combine:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.mean::perf::combine:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.mean::perf::combine:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.mean::perf::combine:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -context("ds.mean::perf::split:0") -test_that("split - performance", { - .durationSec <- 30 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - ds.mean("D$LAB_TSC", type='split') - - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("ds.mean::perf::split:0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("ds.mean::perf::split:0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("ds.mean::perf::split:0", .current.rate, 0.5, 2.0) - } else { - print(paste("ds.mean::perf::split:0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("ds.mean::perf::split:0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("ds.mean::perf::split:0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("ds.mean::perf::split:0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("ds.mean::perf::shutdown") -disconnect.studies.dataset.cnsim() -context("ds.mean::perf::done") diff --git a/tests/testthat/test-perf-void.R b/tests/testthat/test-perf-void.R deleted file mode 100644 index d8ebd661..00000000 --- a/tests/testthat/test-perf-void.R +++ /dev/null @@ -1,56 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2024 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("void::perf::void::setup") - -# -# Tests -# - -context("void::perf::void::0") -test_that("simple void performance", { - .durationSec <- 60 # seconds - .count <- 0 - .start.time <- Sys.time() - .current.time <- .start.time - - while (difftime(.current.time, .start.time, units = "secs")[[1]] < .durationSec) { - .count <- .count + 1 - .current.time <- Sys.time() - } - - .current.rate <- .count / (difftime(.current.time, .start.time, units = "secs")[[1]]) - .reference.rate <- perf.reference.rate("void::perf::void::0") - if (any(length(.reference.rate) == 0) || any(is.null(.reference.rate))) { - print(paste("void::perf::void::0 ", .current.rate, 0.5, 2.0)) - perf.reference.save("void::perf::void::0", .current.rate, 0.5, 2.0) - } else { - print(paste("void::perf::void::0 ", format(.current.rate, digits = 8), ", ", format(100.0 * .current.rate / .reference.rate, digits = 4), "%", sep = '')) - } - - .reference.rate <- perf.reference.rate("void::perf::void::0") - .reference.tolerance.lower <- perf.reference.tolerance.lower("void::perf::void::0") - .reference.tolerance.upper <- perf.reference.tolerance.upper("void::perf::void::0") - - expect_gt(.current.rate, .reference.rate * .reference.tolerance.lower, label = "Observed rate", expected.label = "lower threshold on rate") - expect_lt(.current.rate, .reference.rate * .reference.tolerance.upper, label = "Observed rate", expected.label = "upper threshold on rate") -}) - -# -# Done -# - -context("void::perf::void::shutdown") - -context("void::perf::void::done") diff --git a/tests/testthat/test-smk-checkClass-discordant.R b/tests/testthat/test-smk-checkClass-discordant.R index 8a28914e..e0e6bc88 100644 --- a/tests/testthat/test-smk-checkClass-discordant.R +++ b/tests/testthat/test-smk-checkClass-discordant.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-checkClass.R b/tests/testthat/test-smk-checkClass.R index 412c7189..3546b232 100644 --- a/tests/testthat/test-smk-checkClass.R +++ b/tests/testthat/test-smk-checkClass.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.Boole.R b/tests/testthat/test-smk-ds.Boole.R index dec2392a..c8850e91 100644 --- a/tests/testthat/test-smk-ds.Boole.R +++ b/tests/testthat/test-smk-ds.Boole.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -24,149 +24,13 @@ test_that("setup", { # Tests # -context("ds.Boole::smk::variable") -test_that("simple boole, variable", { +context("ds.Boole::smk") +test_that("simple boole", { res <- ds.Boole("D$LAB_TSC", "D$LAB_TRIG", "==") expect_length(res, 2) expect_equal(res$is.object.created, "A data object has been created in all specified data sources") expect_equal(res$validity.check, " appears valid in all sources") - - res.boole <- ds.summary("boole.newobj") - - expect_length(res.boole, 3) - - expect_equal(res.boole$sim1$class, "numeric") - expect_equal(res.boole$sim1$length, 2163) - expect_length(res.boole$sim1$`quantiles & mean`, 8) - expect_equal(res.boole$sim1$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[8]], 0.0) - - expect_equal(res.boole$sim2$class, "numeric") - expect_equal(res.boole$sim2$length, 3088) - expect_length(res.boole$sim2$`quantiles & mean`, 8) - expect_equal(res.boole$sim2$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[8]], 0.0) - - expect_equal(res.boole$sim3$class, "numeric") - expect_equal(res.boole$sim3$length, 4128) - expect_length(res.boole$sim3$`quantiles & mean`, 8) - expect_equal(res.boole$sim3$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[8]], 0.0) -}) - -context("ds.Boole::smk::small neg constant V2") -test_that("simple boole, small neg constant V2", { - res <- ds.Boole("D$LAB_TRIG", "-1", "<", numeric.output = TRUE, newobj = "boole01.obj") - - expect_length(res, 2) - expect_equal(res$is.object.created, "A data object has been created in all specified data sources") - expect_equal(res$validity.check, " appears valid in all sources") - - res.boole <- ds.summary("boole01.obj") - - expect_length(res.boole, 3) - expect_equal(res.boole$sim1$class, "numeric") - expect_equal(res.boole$sim1$length, 2163) - expect_length(res.boole$sim1$`quantiles & mean`, 8) - expect_equal(res.boole$sim1$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[8]], 0.02220988) - - expect_equal(res.boole$sim2$class, "numeric") - expect_equal(res.boole$sim2$length, 3088) - expect_length(res.boole$sim2$`quantiles & mean`, 8) - expect_equal(res.boole$sim2$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[8]], 0.02454473) - - expect_equal(res.boole$sim3$class, "numeric") - expect_equal(res.boole$sim3$length, 4128) - expect_length(res.boole$sim3$`quantiles & mean`, 8) - expect_equal(res.boole$sim3$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[8]], 0.023322781) -}) - -context("ds.Boole::smk::big neg constant V2") -test_that("simple boole, big neg constant V2", { - res <- ds.Boole("D$LAB_TRIG", "-10", "<", numeric.output = TRUE, newobj = "boole02.obj") - - expect_length(res, 2) - expect_equal(res$is.object.created, "A data object has been created in all specified data sources") - expect_equal(res$validity.check, " appears valid in all sources") - - res.boole <- ds.summary("boole02.obj") - - expect_length(res.boole, 3) - expect_equal(res.boole$sim1$class, "numeric") - expect_equal(res.boole$sim1$length, 2163) - expect_length(res.boole$sim1$`quantiles & mean`, 8) - expect_equal(res.boole$sim1$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim1$`quantiles & mean`[[8]], 0.0) - - expect_equal(res.boole$sim2$class, "numeric") - expect_equal(res.boole$sim2$length, 3088) - expect_length(res.boole$sim2$`quantiles & mean`, 8) - expect_equal(res.boole$sim2$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim2$`quantiles & mean`[[8]], 0.0) - - expect_equal(res.boole$sim3$class, "numeric") - expect_equal(res.boole$sim3$length, 4128) - expect_length(res.boole$sim3$`quantiles & mean`, 8) - expect_equal(res.boole$sim3$`quantiles & mean`[[1]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[2]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[3]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[4]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[5]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[6]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[7]], 0.0) - expect_equal(res.boole$sim3$`quantiles & mean`[[8]], 0.0) }) # @@ -176,7 +40,7 @@ test_that("simple boole, big neg constant V2", { context("ds.Boole::smk::shutdown") test_that("shutdown", { - ds_expect_variables(c("D", "boole.newobj", "boole01.obj", "boole02.obj")) + ds_expect_variables(c("D", "boole.newobj")) }) disconnect.studies.dataset.cnsim() diff --git a/tests/testthat/test-smk-ds.abs.R b/tests/testthat/test-smk-ds.abs.R index 123a014f..ec9801eb 100644 --- a/tests/testthat/test-smk-ds.abs.R +++ b/tests/testthat/test-smk-ds.abs.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.asCharacter.R b/tests/testthat/test-smk-ds.asCharacter.R index 5eca8aeb..e327c827 100644 --- a/tests/testthat/test-smk-ds.asCharacter.R +++ b/tests/testthat/test-smk-ds.asCharacter.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.asDataMatrix.R b/tests/testthat/test-smk-ds.asDataMatrix.R index 35a8cfc9..3bdbd5fa 100644 --- a/tests/testthat/test-smk-ds.asDataMatrix.R +++ b/tests/testthat/test-smk-ds.asDataMatrix.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.asFactor.R b/tests/testthat/test-smk-ds.asFactor.R index b7b8f259..4b334cfd 100644 --- a/tests/testthat/test-smk-ds.asFactor.R +++ b/tests/testthat/test-smk-ds.asFactor.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -31,7 +31,7 @@ test_that("with no force.factor.levels", { ds.asFactor("TID", "TID.f1") res1 <- ds.class("TID.f1") - res2 <- expect_warning(ds.table1D("TID.f1"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) + res2 <- ds.table1D("TID.f1") expect_equal("factor", res1$`survival1`) expect_equal("factor", res1$`survival2`) @@ -43,7 +43,7 @@ test_that("with forced.factor.levels of 1:6", { ds.asFactor("TID", "TID.f2", forced.factor.levels=1:6) res1 <- ds.class("TID.f2") - res2 <- expect_warning(ds.table1D("TID.f2"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) + res2 <- ds.table1D("TID.f2") expect_equal("factor", res1$`survival1`) expect_equal("factor", res1$`survival2`) @@ -55,7 +55,7 @@ test_that("with force.factor.levels of 0:10", { ds.asFactor("TID", "TID.f3", forced.factor.levels=0:10) res1 <- ds.class("TID.f3") - res2 <- expect_warning(ds.table1D("TID.f3"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) + res2 <- ds.table1D("TID.f3") expect_equal("factor", res1$`survival1`) expect_equal("factor", res1$`survival2`) @@ -67,7 +67,7 @@ test_that("with force.factor.levels of 2:3", { ds.asFactor("TID", "TID.f4", forced.factor.levels=2:3) res1 <- ds.class("TID.f4") - res2 <- expect_warning(ds.table1D("TID.f4"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) + res2 <- ds.table1D("TID.f4") expect_equal("factor", res1$`survival1`) expect_equal("factor", res1$`survival2`) @@ -79,7 +79,7 @@ test_that("with force.factor.levels of c(1,2,3,4,'a','h',5)", { ds.asFactor("TID", "TID.f5", forced.factor.levels=c(1,2,3,4,'a','h',5)) res1 <- ds.class("TID.f5") - res2 <- expect_warning(ds.table1D("TID.f5"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) + res2 <- ds.table1D("TID.f5") expect_equal("factor", res1$`survival1`) expect_equal("factor", res1$`survival2`) diff --git a/tests/testthat/test-smk-ds.asFactorSimple.R b/tests/testthat/test-smk-ds.asFactorSimple.R deleted file mode 100644 index 27623597..00000000 --- a/tests/testthat/test-smk-ds.asFactorSimple.R +++ /dev/null @@ -1,54 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.asFactorSimple::smk::setup") - -connect.studies.dataset.survival(list("survtime", "time.id", "female", "age.60")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -ds.asNumeric("D$time.id","TID") - -context("ds.asFactorSimple::smk::force.factor.levels") -test_that("with no force.factor.levels", { - ds.asFactorSimple("TID", "TID.f1") - - res1 <- ds.class("TID.f1") - res2 <- expect_warning(ds.table1D("TID.f1"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) - - expect_equal("factor", res1$`survival1`) - expect_equal("factor", res1$`survival2`) - expect_equal("factor", res1$`survival3`) - expect_equal("All tables are valid!", res2$validity) -}) - -# -# Done -# - -context("ds.asFactorSimple::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "TID", "TID.f1")) -}) - -disconnect.studies.dataset.survival() - -context("ds.asFactorSimple::smk::done") diff --git a/tests/testthat/test-smk-ds.asInteger.R b/tests/testthat/test-smk-ds.asInteger.R index 60b2e1a0..402d8bcc 100644 --- a/tests/testthat/test-smk-ds.asInteger.R +++ b/tests/testthat/test-smk-ds.asInteger.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.asList.R b/tests/testthat/test-smk-ds.asList.R index 24ed6878..fe8dad96 100644 --- a/tests/testthat/test-smk-ds.asList.R +++ b/tests/testthat/test-smk-ds.asList.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.asLogical.R b/tests/testthat/test-smk-ds.asLogical.R index 62c7a9ea..d311326e 100644 --- a/tests/testthat/test-smk-ds.asLogical.R +++ b/tests/testthat/test-smk-ds.asLogical.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.asMatrix.R b/tests/testthat/test-smk-ds.asMatrix.R index 3abbb3d8..f4df7c98 100644 --- a/tests/testthat/test-smk-ds.asMatrix.R +++ b/tests/testthat/test-smk-ds.asMatrix.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.asNumeric.R b/tests/testthat/test-smk-ds.asNumeric.R index 4b7de4ed..74aee47a 100644 --- a/tests/testthat/test-smk-ds.asNumeric.R +++ b/tests/testthat/test-smk-ds.asNumeric.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.assign.R b/tests/testthat/test-smk-ds.assign.R index ad632bd9..ce083e98 100644 --- a/tests/testthat/test-smk-ds.assign.R +++ b/tests/testthat/test-smk-ds.assign.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.c.R b/tests/testthat/test-smk-ds.c.R index 054c4e01..1a0d7881 100644 --- a/tests/testthat/test-smk-ds.c.R +++ b/tests/testthat/test-smk-ds.c.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.cbind.R b/tests/testthat/test-smk-ds.cbind.R index 3468860b..5bf7f15a 100644 --- a/tests/testthat/test-smk-ds.cbind.R +++ b/tests/testthat/test-smk-ds.cbind.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.changeRefGroup.R b/tests/testthat/test-smk-ds.changeRefGroup.R index 72aad192..0dbe207f 100644 --- a/tests/testthat/test-smk-ds.changeRefGroup.R +++ b/tests/testthat/test-smk-ds.changeRefGroup.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -27,7 +27,7 @@ test_that("setup", { context("ds.changeRefGroup::smk") test_that("simple changeRefGroup", { newNames <- c('normal', 'overweight', 'obesity') - expect_warning(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=newNames, newobj='bmi_new'), "'ds.recodeLevels' is deprecated.\nUse 'ds.recodeValues' instead.", fixed = TRUE) + ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=newNames, newobj='bmi_new') res <- ds.changeRefGroup(x='bmi_new', ref='obesity', newobj='bmi_ob') diff --git a/tests/testthat/test-smk-ds.class.R b/tests/testthat/test-smk-ds.class.R index 50981eae..30bb9f32 100644 --- a/tests/testthat/test-smk-ds.class.R +++ b/tests/testthat/test-smk-ds.class.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.colnames.R b/tests/testthat/test-smk-ds.colnames.R index 7207adc3..3277ca0d 100644 --- a/tests/testthat/test-smk-ds.colnames.R +++ b/tests/testthat/test-smk-ds.colnames.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.completeCases-vectors.R b/tests/testthat/test-smk-ds.completeCases-vectors.R index 8810876e..61523eb5 100644 --- a/tests/testthat/test-smk-ds.completeCases-vectors.R +++ b/tests/testthat/test-smk-ds.completeCases-vectors.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.completeCases.R b/tests/testthat/test-smk-ds.completeCases.R index ae55a301..18bdd2f9 100644 --- a/tests/testthat/test-smk-ds.completeCases.R +++ b/tests/testthat/test-smk-ds.completeCases.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.cor.R b/tests/testthat/test-smk-ds.cor.R index b48c89e4..b9dc18d4 100644 --- a/tests/testthat/test-smk-ds.cor.R +++ b/tests/testthat/test-smk-ds.cor.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.corTest.R b/tests/testthat/test-smk-ds.corTest.R index 68d3d200..30468700 100644 --- a/tests/testthat/test-smk-ds.corTest.R +++ b/tests/testthat/test-smk-ds.corTest.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -24,100 +24,39 @@ test_that("setup", { # Tests # -context("ds.corTest::smk::pearson") +context("ds.corTest::smk") test_that("simple test", { - res <- ds.corTest(x="D$survtime", y="D$time.id", method="pearson", conf.level=0.95) + res <- ds.corTest(x="D$survtime", y="D$time.id") expect_length(res, 3) - expect_equal(class(res$survival1), "list") - expect_length(res$survival1, 2) - expect_equal(class(res$survival1$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival1$`Number of pairwise complete cases`, 2038) - expect_equal(res$survival1$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival1$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival1$`Correlation test`[[7]], "Pearson's product-moment correlation") - expect_equal(res$survival1$`Correlation test`[[8]], "x.var and y.var") - expect_equal(class(res$survival2), "list") - expect_length(res$survival2, 2) - expect_equal(class(res$survival2$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival2$`Number of pairwise complete cases`, 1637) - expect_equal(res$survival2$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival2$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival2$`Correlation test`[[7]], "Pearson's product-moment correlation") - expect_equal(res$survival2$`Correlation test`[[8]], "x.var and y.var") - expect_equal(class(res$survival3), "list") - expect_length(res$survival3, 2) - expect_equal(class(res$survival3$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival3$`Number of pairwise complete cases`, 2662) - expect_equal(res$survival3$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival3$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival3$`Correlation test`[[7]], "Pearson's product-moment correlation") - expect_equal(res$survival3$`Correlation test`[[8]], "x.var and y.var") -}) - -context("ds.corTest::smk::kendall") - -test_that("simple test", { - res <- ds.corTest(x="D$survtime", y="D$time.id", method="kendall", conf.level=0.95) - - expect_length(res, 3) - expect_equal(class(res$survival1), "list") - expect_length(res$survival1, 2) - expect_equal(class(res$survival1$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival1$`Number of pairwise complete cases`, 2038) - expect_equal(res$survival1$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival1$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival1$`Correlation test`[[7]], "Kendall's rank correlation tau") - expect_equal(res$survival1$`Correlation test`[[8]], "x.var and y.var") - expect_equal(class(res$survival2), "list") - expect_length(res$survival2, 2) - expect_equal(class(res$survival2$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival2$`Number of pairwise complete cases`, 1637) - expect_equal(res$survival2$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival2$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival2$`Correlation test`[[7]], "Kendall's rank correlation tau") - expect_equal(res$survival2$`Correlation test`[[8]], "x.var and y.var") - expect_equal(class(res$survival3), "list") - expect_length(res$survival3, 2) - expect_equal(class(res$survival3$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival3$`Number of pairwise complete cases`, 2662) - expect_equal(res$survival3$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival3$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival3$`Correlation test`[[7]], "Kendall's rank correlation tau") - expect_equal(res$survival3$`Correlation test`[[8]], "x.var and y.var") -}) - -context("ds.corTest::smk::spearman") - -test_that("simple test", { - res <- ds.corTest(x="D$survtime", y="D$time.id", method="spearman", conf.level=0.95) - - expect_length(res, 3) - expect_equal(class(res$survival1), "list") - expect_length(res$survival1, 2) - expect_equal(class(res$survival1$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival1$`Number of pairwise complete cases`, 2038) - expect_equal(res$survival1$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival1$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival1$`Correlation test`[[7]], "Spearman's rank correlation rho") - expect_equal(res$survival1$`Correlation test`[[8]], "x.var and y.var") - expect_equal(class(res$survival2), "list") - expect_length(res$survival2, 2) - expect_equal(class(res$survival2$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival2$`Number of pairwise complete cases`, 1637) - expect_equal(res$survival2$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival2$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival2$`Correlation test`[[7]], "Spearman's rank correlation rho") - expect_equal(res$survival2$`Correlation test`[[8]], "x.var and y.var") - expect_equal(class(res$survival3), "list") - expect_length(res$survival3, 2) - expect_equal(class(res$survival3$`Number of pairwise complete cases`), "integer") - expect_equal(res$survival3$`Number of pairwise complete cases`, 2662) - expect_equal(res$survival3$`Correlation test`[[3]], 0.00216, tolerance=1e6) - expect_equal(res$survival3$`Correlation test`[[6]], "two.sided") - expect_equal(res$survival3$`Correlation test`[[7]], "Spearman's rank correlation rho") - expect_equal(res$survival3$`Correlation test`[[8]], "x.var and y.var") + expect_equal(class(res$survival1), "htest") + expect_length(res$survival1, 9) + expect_equal(res$survival1[[3]], 0.00216, tolerance=1e6) + expect_equal(res$survival1[[6]], "two.sided") + expect_equal(res$survival1[[7]], "Pearson's product-moment correlation") + expect_equal(res$survival1[[8]], "x.var and y.var") + expect_length(res$survival1[[9]], 2) + expect_equal(res$survival1[[9]][1], 0.0215, tolerance=1e6) + expect_equal(res$survival1[[9]][2], 0.0972, tolerance=1e6) + expect_equal(class(res$survival2), "htest") + expect_length(res$survival2, 9) + expect_equal(res$survival2[[3]], 0.00216, tolerance=1e6) + expect_equal(res$survival2[[6]], "two.sided") + expect_equal(res$survival2[[7]], "Pearson's product-moment correlation") + expect_equal(res$survival2[[8]], "x.var and y.var") + expect_length(res$survival3[[9]], 2) + expect_equal(res$survival3[[9]][1], 0.0215, tolerance=1e6) + expect_equal(res$survival3[[9]][2], 0.0972, tolerance=1e6) + expect_equal(class(res$survival3), "htest") + expect_length(res$survival3, 9) + expect_equal(res$survival3[[3]], 0.00216, tolerance=1e6) + expect_equal(res$survival3[[6]], "two.sided") + expect_equal(res$survival3[[7]], "Pearson's product-moment correlation") + expect_equal(res$survival3[[8]], "x.var and y.var") + expect_length(res$survival3[[9]], 2) + expect_equal(res$survival3[[9]][1], 0.0215, tolerance=1e6) + expect_equal(res$survival3[[9]][2], 0.0972, tolerance=1e6) }) # diff --git a/tests/testthat/test-smk-ds.cov.R b/tests/testthat/test-smk-ds.cov.R index 216640b1..16829f0a 100644 --- a/tests/testthat/test-smk-ds.cov.R +++ b/tests/testthat/test-smk-ds.cov.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.dataFrame.R b/tests/testthat/test-smk-ds.dataFrame.R index 76da6d0a..bed0885a 100644 --- a/tests/testthat/test-smk-ds.dataFrame.R +++ b/tests/testthat/test-smk-ds.dataFrame.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.dataFrameFill-donothing.R b/tests/testthat/test-smk-ds.dataFrameFill-donothing.R index ee4a90ee..2a63efca 100644 --- a/tests/testthat/test-smk-ds.dataFrameFill-donothing.R +++ b/tests/testthat/test-smk-ds.dataFrameFill-donothing.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -13,7 +12,7 @@ # Set up # -context("ds.dataFrameFill::smk::donothing setup") +context("ds.dataFrameFill::smk::setup") connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG", "LAB_HDL")) @@ -50,7 +49,7 @@ test_that("dataFrameFill_donothing", { # Done # -context("ds.dataFrameFill::smk::donothing shutdown") +context("ds.dataFrameFill::smk::shutdown") test_that("shutdown", { ds_expect_variables(c("D")) @@ -58,4 +57,4 @@ test_that("shutdown", { disconnect.studies.dataset.cnsim() -context("ds.dataFrameFill::smk::donothing done") +context("ds.dataFrameFill::smk::done") diff --git a/tests/testthat/test-smk-ds.dataFrameFill-factor.R b/tests/testthat/test-smk-ds.dataFrameFill-factor.R deleted file mode 100644 index 08a23e6a..00000000 --- a/tests/testthat/test-smk-ds.dataFrameFill-factor.R +++ /dev/null @@ -1,185 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.dataFrameFill::smk::factor setup") - -connect.studies.dataset.cnsim(list('LAB_TSC', 'DIS_CVA', 'LAB_HDL', 'DIS_DIAB')) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.dataFrameFill::smk::factor setup dataframes") -test_that("setup", { - ds_expect_variables(c("D")) - - vectors1 <- c('D$LAB_TSC', 'D$DIS_CVA', 'D$LAB_HDL') - ds.dataFrame(x=vectors1, newobj = "DD", datasources=ds.test_env$connections[1]) - - vectors2 <- c('D$LAB_TSC', 'D$DIS_CVA', 'D$DIS_DIAB') - ds.dataFrame(x=vectors2, newobj = "DD", datasources=ds.test_env$connections[2]) - - vectors3 <- c('D$LAB_TSC', 'D$LAB_HDL', 'D$DIS_DIAB') - ds.dataFrame(x=vectors3, newobj = "DD", datasources=ds.test_env$connections[3]) - - colnamesDD <- ds.colnames('DD') - - expect_length(colnamesDD, 3) - expect_length(colnamesDD$sim1, 3) - expect_equal(colnamesDD$sim1[1], "LAB_TSC") - expect_equal(colnamesDD$sim1[2], "DIS_CVA") - expect_equal(colnamesDD$sim1[3], "LAB_HDL") - expect_length(colnamesDD$sim2, 3) - expect_equal(colnamesDD$sim2[1], "LAB_TSC") - expect_equal(colnamesDD$sim2[2], "DIS_CVA") - expect_equal(colnamesDD$sim2[3], "DIS_DIAB") - expect_length(colnamesDD$sim3, 3) - expect_equal(colnamesDD$sim3[1], "LAB_TSC") - expect_equal(colnamesDD$sim3[2], "LAB_HDL") - expect_equal(colnamesDD$sim3[3], "DIS_DIAB") - - classesDD <- ds.class('DD') - - expect_length(classesDD, 3) - expect_length(classesDD$sim1, 1) - expect_equal(classesDD$sim1, "data.frame") - expect_length(classesDD$sim2, 1) - expect_equal(classesDD$sim2, "data.frame") - expect_length(classesDD$sim3, 1) - expect_equal(classesDD$sim3, "data.frame") -}) - - -context("ds.dataFrameFill::smk::factor extend unfilled dataframes") -test_that("dataFrameFill_exists", { - res <- ds.dataFrameFill(df.name="DD", newobj="filled_df") - - expect_length(res, 2) - expect_equal(res$is.object.created, "A data object has been created in all specified data sources") - expect_equal(res$validity.check, " appears valid in all sources") - - colnamesFilled <- ds.colnames('filled_df') - - expect_length(colnamesFilled, 3) - expect_length(colnamesFilled$sim1, 4) - expect_equal(colnamesFilled$sim1[1], "LAB_TSC") - expect_equal(colnamesFilled$sim1[2], "DIS_CVA") - expect_equal(colnamesFilled$sim1[3], "LAB_HDL") - expect_equal(colnamesFilled$sim1[4], "DIS_DIAB") - expect_length(colnamesFilled$sim2, 4) - expect_equal(colnamesFilled$sim2[1], "LAB_TSC") - expect_equal(colnamesFilled$sim2[2], "DIS_CVA") - expect_equal(colnamesFilled$sim2[3], "DIS_DIAB") - expect_equal(colnamesFilled$sim2[4], "LAB_HDL") - expect_length(colnamesFilled$sim3, 4) - expect_equal(colnamesFilled$sim3[1], "LAB_TSC") - expect_equal(colnamesFilled$sim3[2], "LAB_HDL") - expect_equal(colnamesFilled$sim3[3], "DIS_DIAB") - expect_equal(colnamesFilled$sim3[4], "DIS_CVA") - - classFilled <- ds.class('filled_df') - - expect_length(classFilled, 3) - expect_length(classFilled$sim1, 1) - expect_equal(classFilled$sim1, "data.frame") - expect_length(classFilled$sim2, 1) - expect_equal(classFilled$sim2, "data.frame") - expect_length(classFilled$sim3, 1) - expect_equal(classFilled$sim3, "data.frame") - - lab_tsc_classFilled <- ds.class('filled_df$LAB_TSC') - - expect_length(lab_tsc_classFilled, 3) - expect_length(lab_tsc_classFilled$sim1, 1) - expect_equal(lab_tsc_classFilled$sim1, "numeric") - expect_length(lab_tsc_classFilled$sim2, 1) - expect_equal(lab_tsc_classFilled$sim2, "numeric") - expect_length(lab_tsc_classFilled$sim3, 1) - expect_equal(lab_tsc_classFilled$sim3, "numeric") - - dis_cva_classFilled <- ds.class('filled_df$DIS_CVA') - - expect_length(dis_cva_classFilled, 3) - expect_length(dis_cva_classFilled$sim1, 1) - expect_equal(dis_cva_classFilled$sim1, "factor") - expect_length(dis_cva_classFilled$sim2, 1) - expect_equal(dis_cva_classFilled$sim2, "factor") - expect_length(dis_cva_classFilled$sim3, 1) - expect_equal(dis_cva_classFilled$sim3, "factor") - - dis_cva_levelsFilled <- ds.levels('filled_df$DIS_CVA') - - expect_length(dis_cva_levelsFilled, 3) - expect_length(dis_cva_levelsFilled$sim1, 2) - expect_length(dis_cva_levelsFilled$sim1$Levels, 2) - expect_true(all(dis_cva_levelsFilled$sim1$Levels %in% c("0", "1"))) - expect_length(dis_cva_levelsFilled$sim2, 2) - expect_length(dis_cva_levelsFilled$sim2$Levels, 2) - expect_true(all(dis_cva_levelsFilled$sim2$Levels %in% c("0", "1"))) - expect_length(dis_cva_levelsFilled$sim3, 2) - expect_length(dis_cva_levelsFilled$sim3$Levels, 2) - expect_true(all(dis_cva_levelsFilled$sim3$Levels %in% c("0", "1"))) - - lab_hdl_classFilled <- ds.class('filled_df$LAB_HDL') - - expect_length(lab_hdl_classFilled, 3) - expect_length(lab_hdl_classFilled$sim1, 1) - expect_equal(lab_hdl_classFilled$sim1, "numeric") - expect_length(lab_hdl_classFilled$sim2, 1) - expect_equal(lab_hdl_classFilled$sim2, "numeric") - expect_length(lab_hdl_classFilled$sim3, 1) - expect_equal(lab_hdl_classFilled$sim3, "numeric") - - dis_diab_classFilled <- ds.class('filled_df$DIS_DIAB') - - expect_length(dis_diab_classFilled, 3) - expect_length(dis_diab_classFilled$sim1, 1) - expect_equal(dis_diab_classFilled$sim1, "factor") - expect_length(dis_diab_classFilled$sim2, 1) - expect_equal(dis_diab_classFilled$sim2, "factor") - expect_length(dis_diab_classFilled$sim3, 1) - expect_equal(dis_diab_classFilled$sim3, "factor") - - dis_diab_levelsFilled <- ds.levels('filled_df$DIS_DIAB') - - expect_length(dis_diab_levelsFilled, 3) - expect_length(dis_diab_levelsFilled$sim1, 2) - expect_length(dis_diab_levelsFilled$sim1$Levels, 2) - expect_true(all(dis_diab_levelsFilled$sim1$Levels %in% c("0", "1"))) - expect_length(dis_diab_levelsFilled$sim2, 2) - expect_length(dis_diab_levelsFilled$sim2$Levels, 2) - expect_true(all(dis_diab_levelsFilled$sim2$Levels %in% c("0", "1"))) - expect_length(dis_diab_levelsFilled$sim3, 2) - expect_length(dis_diab_levelsFilled$sim3$Levels, 2) - expect_true(all(dis_diab_levelsFilled$sim3$Levels %in% c("0", "1"))) -}) - -# -# Done -# - -context("ds.dataFrameFill::smk::factor shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "DD", "filled_df")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.dataFrameFill::smk::factor done") diff --git a/tests/testthat/test-smk-ds.dataFrameFill.R b/tests/testthat/test-smk-ds.dataFrameFill.R index cd42e7c3..62336498 100644 --- a/tests/testthat/test-smk-ds.dataFrameFill.R +++ b/tests/testthat/test-smk-ds.dataFrameFill.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -61,46 +60,6 @@ test_that("dataFrameFill_exists", { expect_equal(colnamesFilled$discordant3[1], "B") expect_equal(colnamesFilled$discordant3[2], "C") expect_equal(colnamesFilled$discordant3[3], "A") - - classFilled <- ds.class('filled_df') - - expect_length(classFilled, 3) - expect_length(classFilled$discordant1, 1) - expect_equal(classFilled$discordant1, "data.frame") - expect_length(classFilled$discordant2, 1) - expect_equal(classFilled$discordant2, "data.frame") - expect_length(classFilled$discordant3, 1) - expect_equal(classFilled$discordant3, "data.frame") - - classFilled <- ds.class('filled_df$A') - - expect_length(classFilled, 3) - expect_length(classFilled$discordant1, 1) - expect_equal(classFilled$discordant1, "integer") - expect_length(classFilled$discordant2, 1) - expect_equal(classFilled$discordant2, "integer") - expect_length(classFilled$discordant3, 1) - expect_equal(classFilled$discordant3, "integer") - - classFilled <- ds.class('filled_df$B') - - expect_length(classFilled, 3) - expect_length(classFilled$discordant1, 1) - expect_equal(classFilled$discordant1, "integer") - expect_length(classFilled$discordant2, 1) - expect_equal(classFilled$discordant2, "integer") - expect_length(classFilled$discordant3, 1) - expect_equal(classFilled$discordant3, "integer") - - classFilled <- ds.class('filled_df$C') - - expect_length(classFilled, 3) - expect_length(classFilled$discordant1, 1) - expect_equal(classFilled$discordant1, "integer") - expect_length(classFilled$discordant2, 1) - expect_equal(classFilled$discordant2, "integer") - expect_length(classFilled$discordant3, 1) - expect_equal(classFilled$discordant3, "integer") }) # diff --git a/tests/testthat/test-smk-ds.dataFrameSort.R b/tests/testthat/test-smk-ds.dataFrameSort.R index ef93edbb..fa5050fa 100644 --- a/tests/testthat/test-smk-ds.dataFrameSort.R +++ b/tests/testthat/test-smk-ds.dataFrameSort.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.dataFrameSubset.R b/tests/testthat/test-smk-ds.dataFrameSubset.R index 5aa69124..01058c11 100644 --- a/tests/testthat/test-smk-ds.dataFrameSubset.R +++ b/tests/testthat/test-smk-ds.dataFrameSubset.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.dim.R b/tests/testthat/test-smk-ds.dim.R index c1d1d9b5..75f8a80e 100644 --- a/tests/testthat/test-smk-ds.dim.R +++ b/tests/testthat/test-smk-ds.dim.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.dmtC2S.R b/tests/testthat/test-smk-ds.dmtC2S.R deleted file mode 100644 index fb56fb43..00000000 --- a/tests/testthat/test-smk-ds.dmtC2S.R +++ /dev/null @@ -1,95 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.dmtC2S::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TSC")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.dmtC2S::smk::data.frame") -test_that("simple dmtC2S - data.frame", { - a <- data.frame(c(1, 2, 3, 4)) - b <- data.frame(c(2, 3, 4, 1)) - c <- data.frame(c(3, 4, 1, 2)) - cdf <- data.frame(a, b, c) - - res <- ds.dmtC2S(dfdata = cdf, newobj = "dataframe.newobj") - - expect_length(res, 0) - - res.class <- ds.class("dataframe.newobj") - - expect_length(res.class, 3) - expect_true(all(c("data.frame") %in% res.class$sim1)) - expect_true(all(c("data.frame") %in% res.class$sim2)) - expect_true(all(c("data.frame") %in% res.class$sim3)) -}) - -context("ds.dmtC2S::smk::matrix") -test_that("simple dmtC2S - matrix", { - a <- c(1, 2, 3, 4, 2, 3, 4, 1, 3) - cm <- matrix(a, nrow = 3, ncol = 3, byrow = TRUE) - - res <- ds.dmtC2S(dfdata = cm, newobj = "matrix.newobj") - - expect_length(res, 0) - - res.class <- ds.class("matrix.newobj") - - expect_length(res.class, 3) - expect_true(all(c("matrix", "array") %in% res.class$sim1)) - expect_true(all(c("matrix", "array") %in% res.class$sim2)) - expect_true(all(c("matrix", "array") %in% res.class$sim3)) -}) - -context("ds.dmtC2S::smk::tibble") -test_that("simple dmtC2S - tibble", { - a <- data.frame(c(1, 2, 3, 4)) - b <- data.frame(c(2, 3, 4, 1)) - c <- data.frame(c(3, 4, 1, 2)) - ct <- tibble::tibble(a, b, c) - - res <- ds.dmtC2S(dfdata = ct, newobj = "tibble.newobj") - - expect_length(res, 0) - - res.class <- ds.class("tibble.newobj") - - expect_length(res.class, 3) - expect_true(all(c("tbl_df", "tbl", "data.frame") %in% res.class$sim1)) - expect_true(all(c("tbl_df", "tbl", "data.frame") %in% res.class$sim2)) - expect_true(all(c("tbl_df", "tbl", "data.frame") %in% res.class$sim3)) -}) - -# -# Done -# - -context("ds.dmtC2S::smk::shutdown") - -test_that("setup", { - ds_expect_variables(c("D", "dataframe.newobj", "matrix.newobj", "tibble.newobj")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.dmtC2S::smk::done") diff --git a/tests/testthat/test-smk-ds.elspline.R b/tests/testthat/test-smk-ds.elspline.R deleted file mode 100644 index 72753d62..00000000 --- a/tests/testthat/test-smk-ds.elspline.R +++ /dev/null @@ -1,143 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.elspline::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TRIG", "PM_BMI_CONTINUOUS")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.elspline::smk::test1") -test_that("elspline", { - - ds.elspline(x="D$PM_BMI_CONTINUOUS", n=3, newobj="elsplineDS", datasources=ds.test_env$connections) - - res.class <- ds.class("elsplineDS", datasources=ds.test_env$connections) - - expect_length(res.class, 3) - expect_equal(res.class$sim1[1], "lspline") - expect_equal(res.class$sim1[2], "matrix") - expect_equal(res.class$sim2[1], "lspline") - expect_equal(res.class$sim2[2], "matrix") - expect_equal(res.class$sim3[1], "lspline") - expect_equal(res.class$sim3[2], "matrix") - - res.mod <- ds.glm(formula = "D$LAB_TRIG~elsplineDS", family='gaussian', datasources=ds.test_env$connections) - - expect_length(res.mod, 13) - expect_equal(res.mod$Nvalid, 7477) - expect_equal(res.mod$Nmissing, 1902) - expect_equal(res.mod$Ntotal, 9379) - expect_length(res.mod$disclosure.risk, 3) - expect_equal(res.mod$disclosure[1], 0) - expect_equal(res.mod$disclosure[3], 0) - expect_equal(res.mod$disclosure[2], 0) - expect_length(res.mod$errorMessage, 3) - expect_equal(res.mod$errorMessage[1], "No errors") - expect_equal(res.mod$errorMessage[2], "No errors") - expect_equal(res.mod$errorMessage[3], "No errors") - expect_equal(res.mod$nsubs, 7477) - expect_equal(res.mod$iter, 3) - expect_true("family" %in% class(res.mod$family)) - expect_equal(res.mod$formula, "D$LAB_TRIG ~ elsplineDS") - expect_true("matrix" %in% class(res.mod$coefficients)) - expect_true("array" %in% class(res.mod$coefficients)) - expect_equal(res.mod$coefficients['(Intercept)','Estimate'], -0.35935028, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS1','Estimate'], 0.09176889, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS2','Estimate'], 0.06794047, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS3','Estimate'], 0.21256245, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['(Intercept)','Std. Error'], 0.144607412, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS1','Std. Error'], 0.006245815, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS2','Std. Error'], 0.004274001, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS3','Std. Error'], 0.021359728, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$dev, 16981.52, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$df, 7473) - expect_equal(res.mod$output.information, "SEE TOP OF OUTPUT FOR INFORMATION ON MISSING DATA AND ERROR MESSAGES") - -}) - - -context("ds.elspline::smk::test2") -test_that("elspline", { - - ds.elspline(x="D$PM_BMI_CONTINUOUS", n=5, newobj="elsplineDS2", datasources=ds.test_env$connections) - - res.class <- ds.class("elsplineDS2", datasources=ds.test_env$connections) - - expect_length(res.class, 3) - expect_equal(res.class$sim1[1], "lspline") - expect_equal(res.class$sim1[2], "matrix") - expect_equal(res.class$sim2[1], "lspline") - expect_equal(res.class$sim2[2], "matrix") - expect_equal(res.class$sim3[1], "lspline") - expect_equal(res.class$sim3[2], "matrix") - - res.mod <- ds.glm(formula = "D$LAB_TRIG~elsplineDS2", family='gaussian', datasources=ds.test_env$connections) - - expect_length(res.mod, 13) - expect_equal(res.mod$Nvalid, 7477) - expect_equal(res.mod$Nmissing, 1902) - expect_equal(res.mod$Ntotal, 9379) - expect_length(res.mod$disclosure.risk, 3) - expect_equal(res.mod$disclosure[1], 0) - expect_equal(res.mod$disclosure[3], 0) - expect_equal(res.mod$disclosure[2], 0) - expect_length(res.mod$errorMessage, 3) - expect_equal(res.mod$errorMessage[1], "No errors") - expect_equal(res.mod$errorMessage[2], "No errors") - expect_equal(res.mod$errorMessage[3], "No errors") - expect_equal(res.mod$nsubs, 7477) - expect_equal(res.mod$iter, 3) - expect_true("family" %in% class(res.mod$family)) - expect_equal(res.mod$formula, "D$LAB_TRIG ~ elsplineDS2") - expect_true("matrix" %in% class(res.mod$coefficients)) - expect_true("array" %in% class(res.mod$coefficients)) - expect_equal(res.mod$coefficients['(Intercept)','Estimate'], -0.29808175, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS21','Estimate'], 0.08295113, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS22','Estimate'], 0.10199060, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS23','Estimate'], 0.05891621, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS24','Estimate'], 0.07761427, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS25','Estimate'], 0.65329224, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['(Intercept)','Std. Error'], 0.142080199, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS21','Std. Error'], 0.007062320, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS22','Std. Error'], 0.009361885, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS23','Std. Error'], 0.007798950, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS24','Std. Error'], 0.016254429, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['elsplineDS25','Std. Error'], 0.067541719, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$dev, 16876.12, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$df, 7471) - expect_equal(res.mod$output.information, "SEE TOP OF OUTPUT FOR INFORMATION ON MISSING DATA AND ERROR MESSAGES") - -}) - - -# -# Done -# - -context("ds.elspline::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "elsplineDS", "elsplineDS2", "LAB_TRIG")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.elspline::smk::done") diff --git a/tests/testthat/test-smk-ds.exists.R b/tests/testthat/test-smk-ds.exists.R index 4590bbe4..475a03f9 100644 --- a/tests/testthat/test-smk-ds.exists.R +++ b/tests/testthat/test-smk-ds.exists.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.exp.R b/tests/testthat/test-smk-ds.exp.R index af09ede6..73847cd5 100644 --- a/tests/testthat/test-smk-ds.exp.R +++ b/tests/testthat/test-smk-ds.exp.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.gamlss.R b/tests/testthat/test-smk-ds.gamlss.R deleted file mode 100644 index c9c084e4..00000000 --- a/tests/testthat/test-smk-ds.gamlss.R +++ /dev/null @@ -1,393 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.gamlss::smk::setup") - -connect.studies.dataset.gamlss(list("e3_bw", "e3_gac_None", "hs_zbmi_who", "hs_child_age_None", - "h_mbmi_None", "hs_correct_raven", "hs_wgtgain_None")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.gamlss::smk::mod1") -test_that("gamlss, birth weight", { - model_e3_bw.DS <- ds.gamlss(formula = 'e3_bw ~ e3_gac_None', - sigma.formula = 'e3_bw ~ e3_gac_None', - data = 'D', family = 'NO()', centiles = TRUE, - xvar = 'D$e3_gac_None', newobj = 'z_scores_e3_bw') - - expect_length(model_e3_bw.DS, 3) - expect_length(model_e3_bw.DS$study1, 2) - expect_length(model_e3_bw.DS$study2, 2) - expect_length(model_e3_bw.DS$study3, 2) - expect_equal(model_e3_bw.DS$study1$results$family, c("NO","Normal")) - expect_true("character" %in% class(model_e3_bw.DS$study1$results$family)) - expect_equal(model_e3_bw.DS$study1$results$parameters, c("mu","sigma")) - expect_true("character" %in% class(model_e3_bw.DS$study1$results$parameters)) - expect_true("call" %in% class(model_e3_bw.DS$study1$results$call)) - expect_equal(model_e3_bw.DS$study1$results$y, "The response variable is not disclosed!") - expect_true("character" %in% class(model_e3_bw.DS$study1$results$y)) - expect_true("list" %in% class(model_e3_bw.DS$study1$results$control)) - expect_equal(model_e3_bw.DS$study1$results$control$c.crit, 0.001) - expect_equal(model_e3_bw.DS$study1$results$control$n.cyc, 20) - expect_equal(model_e3_bw.DS$study1$results$control$mu.step, 1) - expect_equal(model_e3_bw.DS$study1$results$control$sigma.step, 1) - expect_equal(model_e3_bw.DS$study1$results$control$nu.step, 1) - expect_equal(model_e3_bw.DS$study1$results$control$tau.step, 1) - expect_equal(model_e3_bw.DS$study1$results$control$gd.tol, Inf) - expect_equal(model_e3_bw.DS$study1$results$control$iter, 0) - expect_equal(model_e3_bw.DS$study1$results$control$trace, TRUE) - expect_equal(model_e3_bw.DS$study1$results$control$autostep, TRUE) - expect_equal(model_e3_bw.DS$study1$results$control$save, TRUE) - expect_true("numeric" %in% class(model_e3_bw.DS$study1$results$weights)) - expect_equal(model_e3_bw.DS$study1$results$G.deviance, 9071.036, tolerance=1e-07) - expect_equal(model_e3_bw.DS$study1$results$N, 607) - expect_true("expression" %in% class(model_e3_bw.DS$study1$results$rqres)) - expect_equal(model_e3_bw.DS$study1$results$iter, 4) - expect_equal(model_e3_bw.DS$study1$results$type, "Continuous") - expect_true("character" %in% class(model_e3_bw.DS$study1$results$type)) - expect_true("call" %in% class(model_e3_bw.DS$study1$results$method)) - expect_equal(model_e3_bw.DS$study1$results$contrasts, NULL) - expect_true("NULL" %in% class(model_e3_bw.DS$study1$results$contrasts)) - expect_equal(model_e3_bw.DS$study1$results$converged, TRUE) - expect_true("logical" %in% class(model_e3_bw.DS$study1$results$converged)) - expect_equal(model_e3_bw.DS$study1$results$residuals, "The residuals of the model are not disclosed!") - expect_true("character" %in% class(model_e3_bw.DS$study1$results$residuals)) - expect_equal(model_e3_bw.DS$study1$results$noObs, 607) - expect_equal(model_e3_bw.DS$study1$results$mu.fv, "The fitted values of the mu model are not disclosed!") - expect_equal(model_e3_bw.DS$study1$results$mu.link, "identity") - expect_true("character" %in% class(model_e3_bw.DS$study1$results$mu.link)) - expect_true("terms" %in% class(model_e3_bw.DS$study1$results$mu.terms)) - expect_true("formula" %in% class(model_e3_bw.DS$study1$results$mu.terms)) - expect_equal(as.numeric(model_e3_bw.DS$study1$results$mu.coefficients["e3_gac_None"]), 178.6317, tolerance=1e-5) - expect_equal(as.numeric(model_e3_bw.DS$study1$results$mu.coefficients["(Intercept)"]), -3641.618, tolerance=1e-5) - expect_true("numeric" %in% class(model_e3_bw.DS$study1$results$mu.offset)) - expect_true("formula" %in% class(model_e3_bw.DS$study1$results$mu.formula)) - expect_true("list" %in% class(model_e3_bw.DS$study1$results$mu.xlevels)) - expect_equal(model_e3_bw.DS$study1$results$mu.df, 2) - expect_equal(model_e3_bw.DS$study1$results$mu.nl.df, 0) - expect_equal(model_e3_bw.DS$study1$results$mu.pen, 0) - expect_equal(model_e3_bw.DS$study1$results$P.deviance, 9071.036, tolerance=1e-5) - expect_equal(model_e3_bw.DS$study1$results$df.fit, 4) - expect_equal(model_e3_bw.DS$study1$results$pen, 0) - expect_equal(model_e3_bw.DS$study1$results$df.residual, 603) - expect_equal(model_e3_bw.DS$study1$results$aic, 9079.036, tolerance=1e-5) - expect_equal(model_e3_bw.DS$study1$results$sbc, 9096.671, tolerance=1e-5) - expect_true("matrix" %in% class(model_e3_bw.DS$study1$centiles)) - expect_true("array" %in% class(model_e3_bw.DS$study1$centiles)) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[1,'cent']), 0.4) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[2,'cent']), 2.0) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[3,'cent']), 10.0) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[4,'cent']), 25.0) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[5,'cent']), 50.0) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[6,'cent']), 75.0) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[7,'cent']), 90.0) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[8,'cent']), 98.0) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[9,'cent']), 99.6) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[1,'per']), 0.4942339, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[2,'per']), 2.1416804, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[3,'per']), 8.4019769, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[4,'per']), 24.3822076, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[5,'per']), 50.9060956, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[6,'per']), 75.4530478, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[7,'per']), 90.6095552, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[8,'per']), 97.3640857, tolerance=1e-7) - expect_equal(as.numeric(model_e3_bw.DS$study1$centiles[9,'per']), 99.3410214, tolerance=1e-7) -}) - -context("ds.gamlss::smk::mod2") -test_that("gamlss, Z BMI", { - model_zbmi_who.DS <- ds.gamlss(formula = 'hs_zbmi_who ~ hs_child_age_None+h_mbmi_None', - sigma.formula = 'hs_zbmi_who ~ hs_child_age_None', - data = 'D', family = 'NO()', centiles = TRUE, - xvar = 'D$hs_child_age_None', newobj = 'z_scores_hs_zbmi_who') - - expect_length(model_zbmi_who.DS, 3) - expect_length(model_zbmi_who.DS$study1, 2) - expect_length(model_zbmi_who.DS$study2, 2) - expect_length(model_zbmi_who.DS$study3, 2) - expect_equal(model_zbmi_who.DS$study1$results$family, c("NO","Normal")) - expect_true("character" %in% class(model_zbmi_who.DS$study1$results$family)) - expect_equal(model_zbmi_who.DS$study1$results$parameters, c("mu","sigma")) - expect_true("character" %in% class(model_zbmi_who.DS$study1$results$parameters)) - expect_true("call" %in% class(model_zbmi_who.DS$study1$results$call)) - expect_equal(model_zbmi_who.DS$study1$results$y, "The response variable is not disclosed!") - expect_true("character" %in% class(model_zbmi_who.DS$study1$results$y)) - expect_true("list" %in% class(model_zbmi_who.DS$study1$results$control)) - expect_equal(model_zbmi_who.DS$study1$results$control$c.crit, 0.001) - expect_equal(model_zbmi_who.DS$study1$results$control$n.cyc, 20) - expect_equal(model_zbmi_who.DS$study1$results$control$mu.step, 1) - expect_equal(model_zbmi_who.DS$study1$results$control$sigma.step, 1) - expect_equal(model_zbmi_who.DS$study1$results$control$nu.step, 1) - expect_equal(model_zbmi_who.DS$study1$results$control$tau.step, 1) - expect_equal(model_zbmi_who.DS$study1$results$control$gd.tol, Inf) - expect_equal(model_zbmi_who.DS$study1$results$control$iter, 0) - expect_equal(model_zbmi_who.DS$study1$results$control$trace, TRUE) - expect_equal(model_zbmi_who.DS$study1$results$control$autostep, TRUE) - expect_equal(model_zbmi_who.DS$study1$results$control$save, TRUE) - expect_true("numeric" %in% class(model_zbmi_who.DS$study1$results$weights)) - expect_equal(model_zbmi_who.DS$study1$results$G.deviance, 1979.397, tolerance=1e-05) - expect_equal(model_zbmi_who.DS$study1$results$N, 607) - expect_true("expression" %in% class(model_zbmi_who.DS$study1$results$rqres)) - expect_equal(model_zbmi_who.DS$study1$results$iter, 3) - expect_equal(model_zbmi_who.DS$study1$results$type, "Continuous") - expect_true("character" %in% class(model_zbmi_who.DS$study1$results$type)) - expect_true("call" %in% class(model_zbmi_who.DS$study1$results$method)) - expect_equal(model_zbmi_who.DS$study1$results$contrasts, NULL) - expect_true("NULL" %in% class(model_zbmi_who.DS$study1$results$contrasts)) - expect_equal(model_zbmi_who.DS$study1$results$converged, TRUE) - expect_true("logical" %in% class(model_zbmi_who.DS$study1$results$converged)) - expect_equal(model_zbmi_who.DS$study1$results$residuals, "The residuals of the model are not disclosed!") - expect_true("character" %in% class(model_zbmi_who.DS$study1$results$residuals)) - expect_equal(model_zbmi_who.DS$study1$results$noObs, 607) - expect_equal(model_zbmi_who.DS$study1$results$mu.fv, "The fitted values of the mu model are not disclosed!") - expect_equal(model_zbmi_who.DS$study1$results$mu.link, "identity") - expect_true("character" %in% class(model_zbmi_who.DS$study1$results$mu.link)) - expect_true("terms" %in% class(model_zbmi_who.DS$study1$results$mu.terms)) - expect_true("formula" %in% class(model_zbmi_who.DS$study1$results$mu.terms)) - expect_equal(as.numeric(model_zbmi_who.DS$study1$results$mu.coefficients["h_mbmi_None"]), 0.04635936, tolerance=1e-5) - expect_equal(as.numeric(model_zbmi_who.DS$study1$results$mu.coefficients["hs_child_age_None"]), -0.10898234, tolerance=1e-5) - expect_equal(as.numeric(model_zbmi_who.DS$study1$results$mu.coefficients["(Intercept)"]), -0.06404270, tolerance=1e-4) - expect_true("numeric" %in% class(model_zbmi_who.DS$study1$results$mu.offset)) - expect_true("formula" %in% class(model_zbmi_who.DS$study1$results$mu.formula)) - expect_true("list" %in% class(model_zbmi_who.DS$study1$results$mu.xlevels)) - expect_equal(model_zbmi_who.DS$study1$results$mu.df, 3) - expect_equal(model_zbmi_who.DS$study1$results$mu.nl.df, 0) - expect_equal(model_zbmi_who.DS$study1$results$mu.pen, 0) - expect_equal(model_zbmi_who.DS$study1$results$P.deviance, 1979.397, tolerance=1e-5) - expect_equal(model_zbmi_who.DS$study1$results$df.fit, 5) - expect_equal(model_zbmi_who.DS$study1$results$pen, 0) - expect_equal(model_zbmi_who.DS$study1$results$df.residual, 602) - expect_equal(model_zbmi_who.DS$study1$results$aic, 1989.397, tolerance=1e-5) - expect_equal(model_zbmi_who.DS$study1$results$sbc, 2011.439, tolerance=1e-5) - expect_true("matrix" %in% class(model_zbmi_who.DS$study1$centiles)) - expect_true("array" %in% class(model_zbmi_who.DS$study1$centiles)) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[1,'cent']), 0.4) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[2,'cent']), 2.0) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[3,'cent']), 10.0) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[4,'cent']), 25.0) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[5,'cent']), 50.0) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[6,'cent']), 75.0) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[7,'cent']), 90.0) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[8,'cent']), 98.0) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[9,'cent']), 99.6) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[1,'per']), 0.1647446, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[2,'per']), 0.9884679, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[3,'per']), 8.2372323, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[4,'per']), 24.5469522, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[5,'per']), 54.5304778, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[6,'per']), 78.7479407, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[7,'per']), 89.6210873, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[8,'per']), 96.0461285, tolerance=1e-7) - expect_equal(as.numeric(model_zbmi_who.DS$study1$centiles[9,'per']), 99.1762768, tolerance=1e-7) -}) - - -context("ds.gamlss::smk::mod3") -test_that("gamlss, RAVEN TEST", { - - ds.dataFrameSort(df.name = 'D', sort.key.name = 'D$hs_correct_raven', newobj = 'D2') - - model_correct_raven.DS <- ds.gamlss(formula = 'hs_correct_raven ~ cs(hs_child_age_None)', - sigma.formula = 'hs_correct_raven ~ (hs_child_age_None)', - nu.formula = 'hs_correct_raven ~ hs_child_age_None', - tau.formula = 'hs_correct_raven ~ hs_child_age_None', - data = 'D2', family = 'BCT()', centiles = TRUE, - xvar = 'D$hs_child_age_None', newobj = 'z_scores_hs_correct_raven') - - expect_length(model_correct_raven.DS, 3) - expect_length(model_correct_raven.DS$study1, 2) - expect_length(model_correct_raven.DS$study2, 2) - expect_length(model_correct_raven.DS$study3, 2) - expect_equal(model_correct_raven.DS$study1$results$family, c("BCT","Box-Cox t")) - expect_true("character" %in% class(model_correct_raven.DS$study1$results$family)) - expect_equal(model_correct_raven.DS$study1$results$parameters, c("mu","sigma","nu","tau")) - expect_true("character" %in% class(model_correct_raven.DS$study1$results$parameters)) - expect_true("call" %in% class(model_correct_raven.DS$study1$results$call)) - expect_equal(model_correct_raven.DS$study1$results$y, "The response variable is not disclosed!") - expect_true("character" %in% class(model_correct_raven.DS$study1$results$y)) - expect_true("list" %in% class(model_correct_raven.DS$study1$results$control)) - expect_equal(model_correct_raven.DS$study1$results$control$c.crit, 0.001) - expect_equal(model_correct_raven.DS$study1$results$control$n.cyc, 20) - expect_equal(model_correct_raven.DS$study1$results$control$mu.step, 1) - expect_equal(model_correct_raven.DS$study1$results$control$sigma.step, 1) - expect_equal(model_correct_raven.DS$study1$results$control$nu.step, 1) - expect_equal(model_correct_raven.DS$study1$results$control$tau.step, 1) - expect_equal(model_correct_raven.DS$study1$results$control$gd.tol, Inf) - expect_equal(model_correct_raven.DS$study1$results$control$iter, 0) - expect_equal(model_correct_raven.DS$study1$results$control$trace, TRUE) - expect_equal(model_correct_raven.DS$study1$results$control$autostep, TRUE) - expect_equal(model_correct_raven.DS$study1$results$control$save, TRUE) - expect_true("numeric" %in% class(model_correct_raven.DS$study1$results$weights)) - expect_equal(model_correct_raven.DS$study1$results$G.deviance, 3723.97, tolerance=1e-01) - expect_equal(model_correct_raven.DS$study1$results$N, 607) - expect_true("expression" %in% class(model_correct_raven.DS$study1$results$rqres)) - expect_equal(model_correct_raven.DS$study1$results$iter, 7) - expect_equal(model_correct_raven.DS$study1$results$type, "Continuous") - expect_true("character" %in% class(model_correct_raven.DS$study1$results$type)) - expect_true("call" %in% class(model_correct_raven.DS$study1$results$method)) - expect_equal(model_correct_raven.DS$study1$results$contrasts, NULL) - expect_true("NULL" %in% class(model_correct_raven.DS$study1$results$contrasts)) - expect_equal(model_correct_raven.DS$study1$results$converged, TRUE) - expect_true("logical" %in% class(model_correct_raven.DS$study1$results$converged)) - expect_equal(model_correct_raven.DS$study1$results$residuals, "The residuals of the model are not disclosed!") - expect_true("character" %in% class(model_correct_raven.DS$study1$results$residuals)) - expect_equal(model_correct_raven.DS$study1$results$noObs, 607) - expect_equal(model_correct_raven.DS$study1$results$mu.fv, "The fitted values of the mu model are not disclosed!") - expect_equal(model_correct_raven.DS$study1$results$mu.link, "identity") - expect_true("character" %in% class(model_correct_raven.DS$study1$results$mu.link)) - expect_true("terms" %in% class(model_correct_raven.DS$study1$results$mu.terms)) - expect_true("formula" %in% class(model_correct_raven.DS$study1$results$mu.terms)) - expect_equal(as.numeric(model_correct_raven.DS$study1$results$mu.coefficients["cs(hs_child_age_None)"]), 2.631276, tolerance=1e-1) - expect_equal(as.numeric(model_correct_raven.DS$study1$results$mu.coefficients["(Intercept)"]), 4.180341, tolerance=1e-1) - expect_true("numeric" %in% class(model_correct_raven.DS$study1$results$mu.offset)) - expect_true("formula" %in% class(model_correct_raven.DS$study1$results$mu.formula)) - expect_true("list" %in% class(model_correct_raven.DS$study1$results$mu.xlevels)) - expect_equal(model_correct_raven.DS$study1$results$mu.df, 5.000742, tolerance=1e-7) - expect_equal(model_correct_raven.DS$study1$results$mu.nl.df, 3.000742, tolerance=1e-6) - expect_equal(model_correct_raven.DS$study1$results$mu.pen, 0.8507004, tolerance=1e-2) - expect_equal(model_correct_raven.DS$study1$results$P.deviance, 3724.82, tolerance=1e-5) - expect_equal(model_correct_raven.DS$study1$results$df.fit, 11.00074, tolerance=1e-6) - expect_equal(model_correct_raven.DS$study1$results$pen, 0.8506994, tolerance=1e-2 -) - expect_equal(model_correct_raven.DS$study1$results$df.residual, 595.9993, tolerance=1e-7) - expect_equal(model_correct_raven.DS$study1$results$aic, 3745.971, tolerance=1e-5) - expect_equal(model_correct_raven.DS$study1$results$sbc, 3794.468, tolerance=1e-5) - expect_true("matrix" %in% class(model_correct_raven.DS$study1$centiles)) - expect_true("array" %in% class(model_correct_raven.DS$study1$centiles)) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[1,'cent']), 0.4) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[2,'cent']), 2.0) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[3,'cent']), 10.0) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[4,'cent']), 25.0) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[5,'cent']), 50.0) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[6,'cent']), 75.0) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[7,'cent']), 90.0) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[8,'cent']), 98.0) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[9,'cent']), 99.6) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[1,'per']), 0.000000, tolerance=1e-7) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[2,'per']), 1.153213, tolerance=1e-6) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[3,'per']), 13.014827, tolerance=1e-7) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[4,'per']), 26.359143, tolerance=1e-7) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[5,'per']), 47.775947, tolerance=1e-7) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[6,'per']), 74.135091, tolerance=1e-7) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[7,'per']), 90.115321, tolerance=1e-7) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[8,'per']), 98.352554, tolerance=1e-7) - expect_equal(as.numeric(model_correct_raven.DS$study1$centiles[9,'per']), 100.000000, tolerance=1e-7) -}) - -context("ds.gamlss::smk::mod4") -test_that("gamlss, WEIGHT GAIN", { - model_wgtgain.DS <- ds.gamlss(formula = 'hs_wgtgain_None ~ (e3_bw)', - sigma.formula = 'hs_wgtgain_None ~ (e3_bw)', - data = 'D', family = 'NO()', centiles = TRUE, - xvar = 'D$hs_wgtgain_None', newobj = 'z_scores_hs_wgtgain_None') - - expect_length(model_wgtgain.DS, 3) - expect_length(model_wgtgain.DS$study1, 2) - expect_length(model_wgtgain.DS$study2, 2) - expect_length(model_wgtgain.DS$study3, 2) - expect_equal(model_wgtgain.DS$study1$results$family, c("NO","Normal")) - expect_true("character" %in% class(model_wgtgain.DS$study1$results$family)) - expect_equal(model_wgtgain.DS$study1$results$parameters, c("mu","sigma")) - expect_true("character" %in% class(model_wgtgain.DS$study1$results$parameters)) - expect_true("call" %in% class(model_wgtgain.DS$study1$results$call)) - expect_equal(model_wgtgain.DS$study1$results$y, "The response variable is not disclosed!") - expect_true("character" %in% class(model_wgtgain.DS$study1$results$y)) - expect_true("list" %in% class(model_wgtgain.DS$study1$results$control)) - expect_equal(model_wgtgain.DS$study1$results$control$c.crit, 0.001) - expect_equal(model_wgtgain.DS$study1$results$control$n.cyc, 20) - expect_equal(model_wgtgain.DS$study1$results$control$mu.step, 1) - expect_equal(model_wgtgain.DS$study1$results$control$sigma.step, 1) - expect_equal(model_wgtgain.DS$study1$results$control$nu.step, 1) - expect_equal(model_wgtgain.DS$study1$results$control$tau.step, 1) - expect_equal(model_wgtgain.DS$study1$results$control$gd.tol, Inf) - expect_equal(model_wgtgain.DS$study1$results$control$iter, 0) - expect_equal(model_wgtgain.DS$study1$results$control$trace, TRUE) - expect_equal(model_wgtgain.DS$study1$results$control$autostep, TRUE) - expect_equal(model_wgtgain.DS$study1$results$control$save, TRUE) - expect_true("numeric" %in% class(model_wgtgain.DS$study1$results$weights)) - expect_equal(model_wgtgain.DS$study1$results$G.deviance, 3973.189, tolerance=1e-07) - expect_equal(model_wgtgain.DS$study1$results$N, 607) - expect_true("expression" %in% class(model_wgtgain.DS$study1$results$rqres)) - expect_equal(model_wgtgain.DS$study1$results$iter, 3) - expect_equal(model_wgtgain.DS$study1$results$type, "Continuous") - expect_true("character" %in% class(model_wgtgain.DS$study1$results$type)) - expect_true("call" %in% class(model_wgtgain.DS$study1$results$method)) - expect_equal(model_wgtgain.DS$study1$results$contrasts, NULL) - expect_true("NULL" %in% class(model_wgtgain.DS$study1$results$contrasts)) - expect_equal(model_wgtgain.DS$study1$results$converged, TRUE) - expect_true("logical" %in% class(model_wgtgain.DS$study1$results$converged)) - expect_equal(model_wgtgain.DS$study1$results$residuals, "The residuals of the model are not disclosed!") - expect_true("character" %in% class(model_wgtgain.DS$study1$results$residuals)) - expect_equal(model_wgtgain.DS$study1$results$noObs, 607) - expect_equal(model_wgtgain.DS$study1$results$mu.fv, "The fitted values of the mu model are not disclosed!") - expect_equal(model_wgtgain.DS$study1$results$mu.link, "identity") - expect_true("character" %in% class(model_wgtgain.DS$study1$results$mu.link)) - expect_true("terms" %in% class(model_wgtgain.DS$study1$results$mu.terms)) - expect_true("formula" %in% class(model_wgtgain.DS$study1$results$mu.terms)) - expect_equal(as.numeric(model_wgtgain.DS$study1$results$mu.coefficients["e3_bw"]), 0.002408255, tolerance=1e-5) - expect_equal(as.numeric(model_wgtgain.DS$study1$results$mu.coefficients["(Intercept)"]), 5.230886349, tolerance=1e-5) - expect_true("numeric" %in% class(model_wgtgain.DS$study1$results$mu.offset)) - expect_true("formula" %in% class(model_wgtgain.DS$study1$results$mu.formula)) - expect_true("list" %in% class(model_wgtgain.DS$study1$results$mu.xlevels)) - expect_equal(model_wgtgain.DS$study1$results$mu.df, 2) - expect_equal(model_wgtgain.DS$study1$results$mu.nl.df, 0) - expect_equal(model_wgtgain.DS$study1$results$mu.pen, 0) - expect_equal(model_wgtgain.DS$study1$results$P.deviance, 3973.189, tolerance=1e-5) - expect_equal(model_wgtgain.DS$study1$results$df.fit, 4) - expect_equal(model_wgtgain.DS$study1$results$pen, 0) - expect_equal(model_wgtgain.DS$study1$results$df.residual, 603) - expect_equal(model_wgtgain.DS$study1$results$aic, 3981.189, tolerance=1e-5) - expect_equal(model_wgtgain.DS$study1$results$sbc, 3998.823, tolerance=1e-5) - expect_true("matrix" %in% class(model_wgtgain.DS$study1$centiles)) - expect_true("array" %in% class(model_wgtgain.DS$study1$centiles)) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[1,'cent']), 0.4) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[2,'cent']), 2.0) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[3,'cent']), 10.0) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[4,'cent']), 25.0) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[5,'cent']), 50.0) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[6,'cent']), 75.0) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[7,'cent']), 90.0) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[8,'cent']), 98.0) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[9,'cent']), 99.6) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[1,'per']), 0.000000, tolerance=1e-7) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[2,'per']), 1.317957, tolerance=1e-6) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[3,'per']), 6.919275, tolerance=1e-7) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[4,'per']), 25.864909, tolerance=1e-7) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[5,'per']), 56.342669, tolerance=1e-7) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[6,'per']), 74.958814, tolerance=1e-7) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[7,'per']), 90.280066, tolerance=1e-7) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[8,'per']), 94.892916, tolerance=1e-7) - expect_equal(as.numeric(model_wgtgain.DS$study1$centiles[9,'per']), 98.682043, tolerance=1e-7) -}) - -# -# Done -# - -context("ds.gamlss::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "D2", "z_scores_e3_bw", "z_scores_hs_correct_raven", "z_scores_hs_wgtgain_None", - "z_scores_hs_zbmi_who")) -}) - -disconnect.studies.dataset.gamlss() - -context("ds.gamlss::smk::done") diff --git a/tests/testthat/test-smk-ds.getWGSR.R b/tests/testthat/test-smk-ds.getWGSR.R index b11e5999..72c5769f 100644 --- a/tests/testthat/test-smk-ds.getWGSR.R +++ b/tests/testthat/test-smk-ds.getWGSR.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.glm-binomial.R b/tests/testthat/test-smk-ds.glm-binomial.R index 133a93e1..489a0cad 100644 --- a/tests/testthat/test-smk-ds.glm-binomial.R +++ b/tests/testthat/test-smk-ds.glm-binomial.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.glm-gaussian.R b/tests/testthat/test-smk-ds.glm-gaussian.R index f482d54b..2da84109 100644 --- a/tests/testthat/test-smk-ds.glm-gaussian.R +++ b/tests/testthat/test-smk-ds.glm-gaussian.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.glm-poisson.R b/tests/testthat/test-smk-ds.glm-poisson.R index a8385bfb..771e1d9b 100644 --- a/tests/testthat/test-smk-ds.glm-poisson.R +++ b/tests/testthat/test-smk-ds.glm-poisson.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.glmPredict-binomial.R b/tests/testthat/test-smk-ds.glmPredict-binomial.R index 59ec5438..30515ea4 100644 --- a/tests/testthat/test-smk-ds.glmPredict-binomial.R +++ b/tests/testthat/test-smk-ds.glmPredict-binomial.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -48,17 +48,17 @@ test_that("simple glmPredict, binomial, without newobj, se.fit=FALSE",{ expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 0.01388118, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.1228967, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 0.01388118, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.1228967, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 0.004276445, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 0.005286237, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 0.007428756, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 0.011330492, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 0.016775371, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 0.024259416, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 0.029864696, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 0.004276445, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 0.005286237, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 0.007428756, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 0.011330492, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 0.016775371, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 0.024259416, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 0.029864696, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 10) @@ -70,17 +70,17 @@ test_that("simple glmPredict, binomial, without newobj, se.fit=FALSE",{ expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 0.01306413, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.1058779, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 0.01306413, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.1058779, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 0.004114235, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 0.005070055, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 0.007363168, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 0.010906288, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 0.015909292, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 0.022784761, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 0.027798164, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 0.004114235, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 0.005070055, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 0.007363168, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 0.010906288, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 0.015909292, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 0.022784761, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 0.027798164, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 10) @@ -92,17 +92,17 @@ test_that("simple glmPredict, binomial, without newobj, se.fit=FALSE",{ expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 0.01612439, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.08681195, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 0.01612439, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.08681195, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 0.007566798, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 0.008984660, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 0.011332598, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 0.014793185, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 0.019366204, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 0.024738972, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 0.029020811, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 0.007566798, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 0.008984660, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 0.011332598, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 0.014793185, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 0.019366204, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 0.024738972, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 0.029020811, tolerance = 1e-7) }) @@ -130,17 +130,17 @@ test_that("simple glmPredict, binomial, with newobj, se.fit=FALSE", { expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 0.01388118, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.1228967, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 0.01388118, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.1228967, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 0.004276445, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 0.005286237, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 0.007428756, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 0.011330492, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 0.016775371, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 0.024259416, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 0.029864696, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 0.004276445, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 0.005286237, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 0.007428756, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 0.011330492, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 0.016775371, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 0.024259416, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 0.029864696, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 10) @@ -152,17 +152,17 @@ test_that("simple glmPredict, binomial, with newobj, se.fit=FALSE", { expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 0.01306413, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.1058779, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 0.01306413, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.1058779, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 0.004114235, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 0.005070055, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 0.007363168, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 0.010906288, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 0.015909292, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 0.022784761, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 0.027798164, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 0.004114235, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 0.005070055, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 0.007363168, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 0.010906288, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 0.015909292, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 0.022784761, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 0.027798164, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 10) @@ -174,17 +174,17 @@ test_that("simple glmPredict, binomial, with newobj, se.fit=FALSE", { expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 0.01612439, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.08681195, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 0.01612439, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.08681195, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 0.007566798, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 0.008984660, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 0.011332598, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 0.014793185, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 0.019366204, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 0.024738972, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 0.029020811, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 0.007566798, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 0.008984660, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 0.011332598, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 0.014793185, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 0.019366204, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 0.024738972, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 0.029020811, tolerance = 1e-7) }) context("ds.glmPredict::smk::binomial::sefit_true") @@ -211,17 +211,17 @@ test_that("simple glmPredict, binomial, with newobj, se.fit=TRUE", { expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 0.01388118, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.01510361, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 0.01388118, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.01510361, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 0.004276445, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 0.005286237, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 0.007428756, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 0.011330492, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 0.016775371, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 0.024259416, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 0.029864696, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 0.004276445, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 0.005286237, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 0.007428756, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 0.011330492, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 0.016775371, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 0.024259416, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 0.029864696, tolerance = 1e-7) expect_equal(res$sim1$safe.list$se.fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$se.fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$se.fit.Nmiss, 0) @@ -229,14 +229,14 @@ test_that("simple glmPredict, binomial, with newobj, se.fit=TRUE", { expect_equal(res$sim1$safe.list$se.fit.sd, 0.00768495, tolerance = 1e-8) expect_length(res$sim1$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$se.fit.quantiles[[1]], 0.001747688, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[2]], 0.001918347, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[3]], 0.002191026, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[4]], 0.002585741, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[5]], 0.003353623, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[6]], 0.005213378, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[7]], 0.007129711, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[1]], 0.001747688, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[2]], 0.001918347, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[3]], 0.002191026, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[4]], 0.002585741, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[5]], 0.003353623, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[6]], 0.005213378, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[7]], 0.007129711, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 17) @@ -248,32 +248,32 @@ test_that("simple glmPredict, binomial, with newobj, se.fit=TRUE", { expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 0.01306413, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.01121012, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 0.01306413, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.01121012, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 0.004114235, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 0.005070055, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 0.007363168, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 0.010906288, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 0.015909292, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 0.022784761, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 0.027798164, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 0.004114235, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 0.005070055, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 0.007363168, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 0.010906288, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 0.015909292, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 0.022784761, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 0.027798164, tolerance = 1e-7) expect_equal(res$sim2$safe.list$se.fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$se.fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$se.fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$se.fit.mean, 0.002968172, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.sd, 0.005111322, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$se.fit.mean, 0.002968172, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.sd, 0.005111322, tolerance = 1e-7) expect_length(res$sim2$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$se.fit.quantiles[[1]], 0.001572552, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[2]], 0.001704822, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[3]], 0.001917358, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[4]], 0.002159206, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[5]], 0.002756816, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[6]], 0.004427053, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[7]], 0.006137771, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$residual.scale, 1, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[1]], 0.001572552, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[2]], 0.001704822, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[3]], 0.001917358, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[4]], 0.002159206, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[5]], 0.002756816, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[6]], 0.004427053, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[7]], 0.006137771, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$residual.scale, 1, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 17) @@ -285,32 +285,32 @@ test_that("simple glmPredict, binomial, with newobj, se.fit=TRUE", { expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 0.01612439, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.007536315, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 0.01612439, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.007536315, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 0.007566798, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 0.008984660, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 0.011332598, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 0.014793185, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 0.019366204, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 0.024738972, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 0.029020811, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 0.007566798, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 0.008984660, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 0.011332598, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 0.014793185, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 0.019366204, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 0.024738972, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 0.029020811, tolerance = 1e-7) expect_equal(res$sim3$safe.list$se.fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$se.fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$se.fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$se.fit.mean, 0.002848933, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.sd, 0.002740361, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$se.fit.mean, 0.002848933, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.sd, 0.002740361, tolerance = 1e-7) expect_length(res$sim3$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$se.fit.quantiles[[1]], 0.002102462, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[2]], 0.002106133, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[3]], 0.002132488, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[4]], 0.002197552, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[5]], 0.002626926, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[6]], 0.004153282, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[7]], 0.005834279, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$residual.scale, 1, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[1]], 0.002102462, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[2]], 0.002106133, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[3]], 0.002132488, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[4]], 0.002197552, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[5]], 0.002626926, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[6]], 0.004153282, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[7]], 0.005834279, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$residual.scale, 1, tolerance = 1e-7) }) diff --git a/tests/testthat/test-smk-ds.glmPredict-gaussian.R b/tests/testthat/test-smk-ds.glmPredict-gaussian.R index e810f118..a2fcfe6c 100644 --- a/tests/testthat/test-smk-ds.glmPredict-gaussian.R +++ b/tests/testthat/test-smk-ds.glmPredict-gaussian.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -47,17 +47,17 @@ test_that("simple glmPredict, gaussian, without newobj, se.fit=FALSE",{ expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.3719756, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.3719756, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.656127, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.703222, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778930, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.873137, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.961123, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044376, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.091611, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.656127, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.703222, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778930, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.873137, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.961123, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044376, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.091611, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 10) @@ -69,17 +69,17 @@ test_that("simple glmPredict, gaussian, without newobj, se.fit=FALSE",{ expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.3027628, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.3027628, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.692873, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725140, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782866, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843818, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902650, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.958954, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.990324, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.692873, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725140, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782866, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843818, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902650, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.958954, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.990324, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 10) @@ -91,17 +91,17 @@ test_that("simple glmPredict, gaussian, without newobj, se.fit=FALSE",{ expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.3546622, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.3546622, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.639923, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.692488, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763677, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.845627, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.928798, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.004785, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.054574, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.639923, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.692488, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763677, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.845627, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.928798, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.004785, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.054574, tolerance = 1e-7) }) context("ds.glmPredict::smk::gaussian::with_newobj") @@ -128,17 +128,17 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=FALSE", { expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.3719756, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.3719756, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.656127, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.703222, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778930, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.873137, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.961123, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044376, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.091611, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.656127, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.703222, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778930, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.873137, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.961123, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044376, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.091611, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 10) @@ -150,17 +150,17 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=FALSE", { expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.3027628, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.3027628, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.692873, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725140, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782866, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843818, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902650, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.958954, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.990324, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.692873, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725140, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782866, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843818, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902650, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.958954, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.990324, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 10) @@ -172,17 +172,17 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=FALSE", { expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.3546622, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.3546622, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.639923, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.692488, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763677, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.845627, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.928798, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.004785, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.054574, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.639923, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.692488, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763677, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.845627, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.928798, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.004785, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.054574, tolerance = 1e-7) }) context("ds.glmPredict::smk::gaussian::sefit_true") @@ -196,7 +196,7 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=TRUE", { res <- ds.glmPredict("gaussian.glmslma.obj", newdataname = NULL, output.type = "response", se.fit = TRUE, na.action = "na.pass", newobj="gaussian.glm.predict.sefit.obj") - expect_length(res, 3) + expect_length(res, 3) expect_equal(class(res), "list") expect_length(res$sim1, 1) @@ -209,17 +209,17 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=TRUE", { expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.1383659, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.1383659, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.656127, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.703222, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778930, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.873137, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.961123, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044376, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.091611, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.656127, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.703222, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778930, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.873137, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.961123, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044376, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.091611, tolerance = 1e-7) expect_equal(res$sim1$safe.list$se.fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$se.fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$se.fit.Nmiss, 0) @@ -227,14 +227,14 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=TRUE", { expect_equal(res$sim1$safe.list$se.fit.sd, 0.01127756, tolerance = 1e-8) expect_length(res$sim1$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$se.fit.quantiles[[1]], 0.02600046, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[2]], 0.02614820, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[3]], 0.02722465, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[4]], 0.03103519, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[5]], 0.03876266, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[6]], 0.04856302, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[7]], 0.05607628, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$residual.scale, 1.10068, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[1]], 0.02600046, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[2]], 0.02614820, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[3]], 0.02722465, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[4]], 0.03103519, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[5]], 0.03876266, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[6]], 0.04856302, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[7]], 0.05607628, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$residual.scale, 1.10068, tolerance = 1e-7) expect_length(res$sim2, 1) @@ -247,32 +247,32 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=TRUE", { expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.0916653, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.0916653, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.692873, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725140, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782866, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843818, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902650, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.958954, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.990324, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.692873, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725140, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782866, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843818, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902650, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.958954, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.990324, tolerance = 1e-7) expect_equal(res$sim2$safe.list$se.fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$se.fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$se.fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$se.fit.mean, 0.02855807, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.sd, 0.009079763, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$se.fit.mean, 0.02855807, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.sd, 0.009079763, tolerance = 1e-7) expect_length(res$sim2$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$se.fit.quantiles[[1]], 0.02121918, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[2]], 0.02131688, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[3]], 0.02207091, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[4]], 0.02530085, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[5]], 0.03215874, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[6]], 0.04034853, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[7]], 0.04605307, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$residual.scale, 1.06496, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[1]], 0.02121918, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[2]], 0.02131688, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[3]], 0.02207091, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[4]], 0.02530085, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[5]], 0.03215874, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[6]], 0.04034853, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[7]], 0.04605307, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$residual.scale, 1.06496, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 17) @@ -284,32 +284,32 @@ test_that("simple glmPredict, gaussian, with newobj, se.fit=TRUE", { expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.1257853, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.1257853, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.639923, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.692488, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763677, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.845627, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.928798, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.004785, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.054574, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.639923, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.692488, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763677, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.845627, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.928798, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.004785, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.054574, tolerance = 1e-7) expect_equal(res$sim3$safe.list$se.fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$se.fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$se.fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$se.fit.mean, 0.02423093, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.sd, 0.007641005, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$se.fit.mean, 0.02423093, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.sd, 0.007641005, tolerance = 1e-7) expect_length(res$sim3$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$se.fit.quantiles[[1]], 0.01801017, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[2]], 0.01813653, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[3]], 0.01882936, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[4]], 0.02149076, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[5]], 0.02687285, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[6]], 0.03463314, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[7]], 0.03887559, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$residual.scale, 1.0587356, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[1]], 0.01801017, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[2]], 0.01813653, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[3]], 0.01882936, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[4]], 0.02149076, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[5]], 0.02687285, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[6]], 0.03463314, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[7]], 0.03887559, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$residual.scale, 1.0587356, tolerance = 1e-7) }) # diff --git a/tests/testthat/test-smk-ds.glmPredict-poisson.R b/tests/testthat/test-smk-ds.glmPredict-poisson.R index 83a0af2b..93446f55 100644 --- a/tests/testthat/test-smk-ds.glmPredict-poisson.R +++ b/tests/testthat/test-smk-ds.glmPredict-poisson.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -48,17 +48,17 @@ test_that("simple glmPredict, poisson, without newobj, se.fit=FALSE", { expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.3720242, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.3720242, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.659318, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.704707, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778435, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.871512, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.959795, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044552, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.093175, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.659318, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.704707, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778435, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.871512, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.959795, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044552, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.093175, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 10) @@ -70,17 +70,17 @@ test_that("simple glmPredict, poisson, without newobj, se.fit=FALSE", { expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.3027769, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.3027769, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.694361, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725835, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782577, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843101, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902120, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.959162, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.991181, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.694361, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725835, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782577, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843101, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902120, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.959162, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.991181, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 10) @@ -92,17 +92,17 @@ test_that("simple glmPredict, poisson, without newobj, se.fit=FALSE", { expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.3546933, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.3546933, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.642464, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.693362, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763027, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.844277, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.927911, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.005366, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.056664, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.642464, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.693362, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763027, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.844277, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.927911, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.005366, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.056664, tolerance = 1e-7) }) context("ds.glmPredict::smk::poisson::with_newobj") @@ -129,17 +129,17 @@ test_that("simple glmPredict, poisson, with newobj, se.fit=FALSE", { expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.3720242, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.3720242, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.659318, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.704707, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778435, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.871512, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.959795, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044552, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.093175, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.659318, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.704707, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778435, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.871512, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.959795, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044552, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.093175, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 10) @@ -151,17 +151,17 @@ test_that("simple glmPredict, poisson, with newobj, se.fit=FALSE", { expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.3027769, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.3027769, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.694361, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725835, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782577, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843101, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902120, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.959162, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.991181, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.694361, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725835, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782577, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843101, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902120, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.959162, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.991181, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 10) @@ -173,17 +173,17 @@ test_that("simple glmPredict, poisson, with newobj, se.fit=FALSE", { expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.3546933, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.3546933, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.642464, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.693362, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763027, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.844277, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.927911, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.005366, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.056664, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.642464, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.693362, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763027, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.844277, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.927911, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.005366, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.056664, tolerance = 1e-7) }) context("ds.glmPredict::smk::poisson::sefit_true") @@ -210,32 +210,32 @@ test_that("simple glmPredict, poisson, with newobj, se.fit=TRUE", { expect_equal(res$sim1$safe.list$fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.sd, 0.138402, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.mean, 5.872024, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.sd, 0.138402, tolerance = 1e-7) expect_length(res$sim1$safe.list$fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.659318, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.704707, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778435, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.871512, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.959795, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044552, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.093175, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$fit.quantiles[[1]], 5.659318, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[2]], 5.704707, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[3]], 5.778435, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[4]], 5.871512, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[5]], 5.959795, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[6]], 6.044552, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$fit.quantiles[[7]], 6.093175, tolerance = 1e-7) expect_equal(res$sim1$safe.list$se.fit.Ntotal, 1801) expect_equal(res$sim1$safe.list$se.fit.Nvalid, 1801) expect_equal(res$sim1$safe.list$se.fit.Nmiss, 0) - expect_equal(res$sim1$safe.list$se.fit.mean, 0.07678458, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.sd, 0.02570748, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$se.fit.mean, 0.07678458, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.sd, 0.02570748, tolerance = 1e-7) expect_length(res$sim1$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim1$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim1$safe.list$se.fit.quantiles[[1]], 0.05723954, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[2]], 0.05756343, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[3]], 0.05993096, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[4]], 0.06818918, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[5]], 0.08504048, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[6]], 0.10601561, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$se.fit.quantiles[[7]], 0.12380425, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = ds.test_env$tolerance) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[1]], 0.05723954, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[2]], 0.05756343, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[3]], 0.05993096, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[4]], 0.06818918, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[5]], 0.08504048, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[6]], 0.10601561, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$se.fit.quantiles[[7]], 0.12380425, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = 1e-7) expect_length(res$sim2, 1) expect_length(res$sim2$safe.list, 17) @@ -247,32 +247,32 @@ test_that("simple glmPredict, poisson, with newobj, se.fit=TRUE", { expect_equal(res$sim2$safe.list$fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.sd, 0.09167387, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.mean, 5.843564, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.sd, 0.09167387, tolerance = 1e-7) expect_length(res$sim2$safe.list$fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.694361, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725835, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782577, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843101, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902120, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.959162, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.991181, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$fit.quantiles[[1]], 5.694361, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[2]], 5.725835, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[3]], 5.782577, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[4]], 5.843101, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[5]], 5.902120, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[6]], 5.959162, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$fit.quantiles[[7]], 5.991181, tolerance = 1e-7) expect_equal(res$sim2$safe.list$se.fit.Ntotal, 2526) expect_equal(res$sim2$safe.list$se.fit.Nvalid, 2526) expect_equal(res$sim2$safe.list$se.fit.Nmiss, 0) - expect_equal(res$sim2$safe.list$se.fit.mean, 0.0648018, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.sd, 0.0209345, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$se.fit.mean, 0.0648018, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.sd, 0.0209345, tolerance = 1e-7) expect_length(res$sim2$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim2$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim2$safe.list$se.fit.quantiles[[1]], 0.04816489, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[2]], 0.04838696, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[3]], 0.05008767, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[4]], 0.05740926, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[5]], 0.07294716, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[6]], 0.09144008, tolerance = ds.test_env$tolerance) - expect_equal(res$sim2$safe.list$se.fit.quantiles[[7]], 0.10463771, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = ds.test_env$tolerance) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[1]], 0.04816489, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[2]], 0.04838696, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[3]], 0.05008767, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[4]], 0.05740926, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[5]], 0.07294716, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[6]], 0.09144008, tolerance = 1e-7) + expect_equal(res$sim2$safe.list$se.fit.quantiles[[7]], 0.10463771, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = 1e-7) expect_length(res$sim3, 1) expect_length(res$sim3$safe.list, 17) @@ -284,32 +284,32 @@ test_that("simple glmPredict, poisson, with newobj, se.fit=TRUE", { expect_equal(res$sim3$safe.list$fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.sd, 0.1258073, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.mean, 5.846405, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.sd, 0.1258073, tolerance = 1e-7) expect_length(res$sim3$safe.list$fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.642464, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.693362, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763027, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.844277, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.927911, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.005366, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.056664, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$fit.quantiles[[1]], 5.642464, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[2]], 5.693362, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[3]], 5.763027, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[4]], 5.844277, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[5]], 5.927911, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[6]], 6.005366, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$fit.quantiles[[7]], 6.056664, tolerance = 1e-7) expect_equal(res$sim3$safe.list$se.fit.Ntotal, 3473) expect_equal(res$sim3$safe.list$se.fit.Nvalid, 3473) expect_equal(res$sim3$safe.list$se.fit.Nmiss, 0) - expect_equal(res$sim3$safe.list$se.fit.mean, 0.05532801, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.sd, 0.01769327, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$se.fit.mean, 0.05532801, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.sd, 0.01769327, tolerance = 1e-7) expect_length(res$sim3$safe.list$se.fit.quantiles, 7) expect_equal(class(res$sim3$safe.list$se.fit.quantiles), "numeric") - expect_equal(res$sim3$safe.list$se.fit.quantiles[[1]], 0.04113095, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[2]], 0.04141931, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[3]], 0.04299643, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[4]], 0.04912607, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[5]], 0.06099111, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[6]], 0.07939059, tolerance = ds.test_env$tolerance) - expect_equal(res$sim3$safe.list$se.fit.quantiles[[7]], 0.08947167, tolerance = ds.test_env$tolerance) - expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = ds.test_env$tolerance) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[1]], 0.04113095, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[2]], 0.04141931, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[3]], 0.04299643, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[4]], 0.04912607, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[5]], 0.06099111, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[6]], 0.07939059, tolerance = 1e-7) + expect_equal(res$sim3$safe.list$se.fit.quantiles[[7]], 0.08947167, tolerance = 1e-7) + expect_equal(res$sim1$safe.list$residual.scale, 1, tolerance = 1e-7) }) # diff --git a/tests/testthat/test-smk-ds.glmSLMA.R b/tests/testthat/test-smk-ds.glmSLMA.R index 37532ba4..563970cb 100644 --- a/tests/testthat/test-smk-ds.glmSLMA.R +++ b/tests/testthat/test-smk-ds.glmSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -14,7 +14,7 @@ context("ds.glmSLMA::smk::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG", "MEDI_LPD", "DIS_AMI", "DIS_DIAB", "GENDER")) +connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG", "DIS_AMI", "DIS_DIAB", "GENDER")) test_that("setup", { ds_expect_variables(c("D")) @@ -77,177 +77,64 @@ test_that("simple glmSLMA, gaussian", { expect_equal(glmSLMA.res$validity.check, " appears valid in all sources") }) -context("ds.glmSLMA::smk::gaussian-assigned") -test_that("simple glmSLMA, gaussian-assigned", { - glmSLMA.res <- ds.glmSLMA('D$LAB_TSC~D$LAB_TRIG', family="gaussian", newobj="glmSLMA_1.newobj") - - expect_length(glmSLMA.res, 9) - expect_equal(glmSLMA.res$num.valid.studies, 3) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$SLMA.pooled.ests.matrix)) - expect_length(glmSLMA.res$output.summary, 5) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.beta.matrix.for.SLMA)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.se.matrix.for.SLMA)) - expect_length(glmSLMA.res$output.summary$study1, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study1$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study1$coefficients)) - expect_equal(glmSLMA.res$output.summary$study1$rank, 2) - expect_equal(glmSLMA.res$output.summary$study1$aic, 5460.549, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$iter, 2) - expect_equal(glmSLMA.res$output.summary$study1$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study1$dispersion, 1.211496, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$Ntotal, 2163) - expect_equal(glmSLMA.res$output.summary$study1$Nvalid, 1801) - expect_equal(glmSLMA.res$output.summary$study1$Nmissing, 362) - expect_length(glmSLMA.res$output.summary$study2, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study2$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study2$coefficients)) - expect_equal(glmSLMA.res$output.summary$study2$rank, 2) - expect_equal(glmSLMA.res$output.summary$study2$aic, 7490.000, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$iter, 2) - expect_equal(glmSLMA.res$output.summary$study2$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study2$dispersion, 1.13414, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$Ntotal, 3088) - expect_equal(glmSLMA.res$output.summary$study2$Nvalid, 2526) - expect_equal(glmSLMA.res$output.summary$study2$Nmissing, 562) - expect_length(glmSLMA.res$output.summary$study3, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study3$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study3$coefficients)) - expect_equal(glmSLMA.res$output.summary$study3$rank, 2) - expect_equal(glmSLMA.res$output.summary$study3$aic, 10256.000, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$iter, 2) - expect_equal(glmSLMA.res$output.summary$study3$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study3$dispersion, 1.12, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$Ntotal, 4128) - expect_equal(glmSLMA.res$output.summary$study3$Nvalid, 3473) - expect_equal(glmSLMA.res$output.summary$study3$Nmissing, 655) - expect_length(glmSLMA.res$is.object.created, 1) - expect_equal(glmSLMA.res$is.object.created, "A data object has been created in all specified data sources") - expect_length(glmSLMA.res$validity.check, 1) - expect_equal(glmSLMA.res$validity.check, " appears valid in all sources") -}) - context("ds.glmSLMA::smk::binomial") test_that("simple glmSLMA, binomial", { - ds.asCharacter('D$MEDI_LPD', 'str.medi.lpd') - ds.asNumeric('str.medi.lpd', 'num.medi.lpd') + ds.asCharacter('D$DIS_AMI', 'str.dis.ami') + ds.asNumeric('str.dis.ami', 'num.dis.ami') ds.asCharacter('D$GENDER', 'str.gender') ds.asNumeric('str.gender', 'num.gender') ds.asCharacter('D$DIS_DIAB', 'str.dis.diab') ds.asNumeric('str.dis.diab', 'num.dis.diab') - glmSLMA.res <- ds.glmSLMA('num.medi.lpd~num.gender*num.dis.diab', family="binomial") - - expect_length(glmSLMA.res, 9) - expect_equal(glmSLMA.res$num.valid.studies, 3) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$SLMA.pooled.ests.matrix)) - expect_length(glmSLMA.res$output.summary, 5) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.beta.matrix.for.SLMA)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.se.matrix.for.SLMA)) - expect_length(glmSLMA.res$output.summary$study1, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study1$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study1$coefficients)) - expect_equal(glmSLMA.res$output.summary$study1$rank, 4) - expect_equal(glmSLMA.res$output.summary$study1$aic, 442.507, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$iter, 15) - expect_equal(glmSLMA.res$output.summary$study1$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study1$dispersion, 1.000, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$Ntotal, 2163) - expect_equal(glmSLMA.res$output.summary$study1$Nvalid, 2163) - expect_equal(glmSLMA.res$output.summary$study1$Nmissing, 0) - expect_length(glmSLMA.res$output.summary$study2, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study2$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study2$coefficients)) - expect_equal(glmSLMA.res$output.summary$study2$rank, 4) - expect_equal(glmSLMA.res$output.summary$study2$aic, 568, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$iter, 7) - expect_equal(glmSLMA.res$output.summary$study2$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study2$dispersion, 1.00, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$Ntotal, 3088) - expect_equal(glmSLMA.res$output.summary$study2$Nvalid, 3088) - expect_equal(glmSLMA.res$output.summary$study2$Nmissing, 0) - expect_length(glmSLMA.res$output.summary$study3, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study3$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study3$coefficients)) - expect_equal(glmSLMA.res$output.summary$study3$rank, 4) - expect_equal(glmSLMA.res$output.summary$study3$aic, 673, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$iter, 7) - expect_equal(glmSLMA.res$output.summary$study3$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study3$dispersion, 1.00, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$Ntotal, 4128) - expect_equal(glmSLMA.res$output.summary$study3$Nvalid, 4128) - expect_equal(glmSLMA.res$output.summary$study3$Nmissing, 0) - expect_length(glmSLMA.res$is.object.created, 1) - expect_equal(glmSLMA.res$is.object.created, "A data object has been created in all specified data sources") - expect_length(glmSLMA.res$validity.check, 1) - expect_equal(glmSLMA.res$validity.check, " appears valid in all sources") -}) - -context("ds.glmSLMA::smk::binomial-assigned") -test_that("simple glmSLMA, binomial-assigned", { - ds.asCharacter('D$MEDI_LPD', 'str.medi.lpd') - ds.asNumeric('str.medi.lpd', 'num.medi.lpd') - ds.asCharacter('D$GENDER', 'str.gender') - ds.asNumeric('str.gender', 'num.gender') - ds.asCharacter('D$DIS_DIAB', 'str.dis.diab') - ds.asNumeric('str.dis.diab', 'num.dis.diab') - - glmSLMA.res <- ds.glmSLMA('num.medi.lpd~num.gender*num.dis.diab', family="binomial", newobj="glmSLMA_2.newobj") - - expect_length(glmSLMA.res, 9) - expect_equal(glmSLMA.res$num.valid.studies, 3) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$SLMA.pooled.ests.matrix)) - expect_length(glmSLMA.res$output.summary, 5) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.beta.matrix.for.SLMA)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.se.matrix.for.SLMA)) - expect_length(glmSLMA.res$output.summary$study1, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study1$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study1$coefficients)) - expect_equal(glmSLMA.res$output.summary$study1$rank, 4) - expect_equal(glmSLMA.res$output.summary$study1$aic, 442.507, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$iter, 15) - expect_equal(glmSLMA.res$output.summary$study1$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study1$dispersion, 1.000, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$Ntotal, 2163) - expect_equal(glmSLMA.res$output.summary$study1$Nvalid, 2163) - expect_equal(glmSLMA.res$output.summary$study1$Nmissing, 0) - expect_length(glmSLMA.res$output.summary$study2, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study2$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study2$coefficients)) - expect_equal(glmSLMA.res$output.summary$study2$rank, 4) - expect_equal(glmSLMA.res$output.summary$study2$aic, 568, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$iter, 7) - expect_equal(glmSLMA.res$output.summary$study2$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study2$dispersion, 1.00, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$Ntotal, 3088) - expect_equal(glmSLMA.res$output.summary$study2$Nvalid, 3088) - expect_equal(glmSLMA.res$output.summary$study2$Nmissing, 0) - expect_length(glmSLMA.res$output.summary$study3, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study3$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study3$coefficients)) - expect_equal(glmSLMA.res$output.summary$study3$rank, 4) - expect_equal(glmSLMA.res$output.summary$study3$aic, 673, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$iter, 7) - expect_equal(glmSLMA.res$output.summary$study3$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study3$dispersion, 1.00, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$Ntotal, 4128) - expect_equal(glmSLMA.res$output.summary$study3$Nvalid, 4128) - expect_equal(glmSLMA.res$output.summary$study3$Nmissing, 0) - expect_length(glmSLMA.res$is.object.created, 1) - expect_equal(glmSLMA.res$is.object.created, "A data object has been created in all specified data sources") - expect_length(glmSLMA.res$validity.check, 1) - expect_equal(glmSLMA.res$validity.check, " appears valid in all sources") + expect_error(ds.glmSLMA('num.dis.ami~num.gender*num.dis.diab', family="binomial"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) + + res.errors <- DSI::datashield.errors() + + expect_length(res.errors, 3) + expect_equal(res.errors$sim1, "Command 'glmSLMADS1(num.dis.ami ~ num.gender * num.dis.diab, \"binomial\", \n NULL, NULL, NULL)' failed on 'sim1': Error while evaluating 'dsBase::glmSLMADS1(num.dis.ami~num.gender*num.dis.diab, \"binomial\", NULL, NULL, NULL)' -> Error : ERROR: y vector is binary with one category less than filter threshold for table cell size\n", fixed = TRUE) + expect_equal(res.errors$sim2, "Command 'glmSLMADS1(num.dis.ami ~ num.gender * num.dis.diab, \"binomial\", \n NULL, NULL, NULL)' failed on 'sim2': Error while evaluating 'dsBase::glmSLMADS1(num.dis.ami~num.gender*num.dis.diab, \"binomial\", NULL, NULL, NULL)' -> Error : ERROR: y vector is binary with one category less than filter threshold for table cell size\n", fixed = TRUE) + expect_equal(res.errors$sim3, "Command 'glmSLMADS1(num.dis.ami ~ num.gender * num.dis.diab, \"binomial\", \n NULL, NULL, NULL)' failed on 'sim3': Error while evaluating 'dsBase::glmSLMADS1(num.dis.ami~num.gender*num.dis.diab, \"binomial\", NULL, NULL, NULL)' -> Error : ERROR: y vector is binary with one category less than filter threshold for table cell size\n", fixed = TRUE) + +# expect_length(glmSLMA.res, 9) +# expect_length(glmSLMA.res[[1]], 1) +# expect_equal(glmSLMA.res[[1]][1], "EVERY STUDY HAS DATA THAT COULD BE POTENTIALLY DISCLOSIVE UNDER THE CURRENT MODEL:") +# expect_length(glmSLMA.res[[2]], 1) +# expect_equal(glmSLMA.res[[2]][1], "Any values of 1 in the following tables denote potential disclosure risks.") +# expect_length(glmSLMA.res[[3]], 1) +# expect_equal(glmSLMA.res[[3]][1], "Errors by study are as follows:") +# expect_true("matrix" %in% class(glmSLMA.res$y.vector.error)) +# expect_length(glmSLMA.res$y.vector.error["sim1", ], 1) +# expect_length(glmSLMA.res$y.vector.error["sim2", ], 1) +# expect_length(glmSLMA.res$y.vector.error["sim3", ], 1) +# expect_length(glmSLMA.res$y.vector.error[, 1], 3) +# expect_true("matrix" %in% class(glmSLMA.res$X.matrix.error)) +# expect_length(glmSLMA.res$X.matrix.error[1, ], 4) +# expect_length(glmSLMA.res$X.matrix.error[2, ], 4) +# expect_length(glmSLMA.res$X.matrix.error[3, ], 4) +# expect_length(glmSLMA.res$X.matrix.error[, 1], 3) +# expect_length(glmSLMA.res$X.matrix.error[, 2], 3) +# expect_length(glmSLMA.res$X.matrix.error[, 3], 3) +# expect_length(glmSLMA.res$X.matrix.error[, 4], 3) +# expect_true("matrix" %in% class(glmSLMA.res$weight.vector.error)) +# expect_length(glmSLMA.res$weight.vector.error["sim1", ], 1) +# expect_length(glmSLMA.res$weight.vector.error["sim2", ], 1) +# expect_length(glmSLMA.res$weight.vector.error["sim3", ], 1) +# expect_length(glmSLMA.res$weight.vector.error[, 1], 3) +# expect_true("matrix" %in% class(glmSLMA.res$offset.vector.error)) +# expect_length(glmSLMA.res$offset.vector.error["sim1", ], 1) +# expect_length(glmSLMA.res$offset.vector.error["sim2", ], 1) +# expect_length(glmSLMA.res$offset.vector.error["sim3", ], 1) +# expect_length(glmSLMA.res$offset.vector.error[, 1], 3) +# expect_true("matrix" %in% class(glmSLMA.res$glm.overparameterized)) +# expect_length(glmSLMA.res$glm.overparameterized["sim1", ], 1) +# expect_length(glmSLMA.res$glm.overparameterized["sim2", ], 1) +# expect_length(glmSLMA.res$glm.overparameterized["sim3", ], 1) +# expect_length(glmSLMA.res$glm.overparameterized[, 1], 3) +# expect_true("matrix" %in% class(glmSLMA.res$errorMessage)) +# expect_length(glmSLMA.res$errorMessage["sim1", ], 1) +# expect_length(glmSLMA.res$errorMessage["sim2", ], 1) +# expect_length(glmSLMA.res$errorMessage["sim3", ], 1) +# expect_length(glmSLMA.res$errorMessage[, 1], 3) }) context("ds.glmSLMA::smk::poisson") @@ -303,59 +190,6 @@ test_that("simple glmSLMA, poisson", { expect_equal(glmSLMA.res$validity.check, " appears valid in all sources") }) -context("ds.glmSLMA::smk::poisson-assigned") -test_that("simple glmSLMA, poisson-assigned", { - glmSLMA.res <- ds.glmSLMA('D$LAB_TSC~D$LAB_TRIG', family="poisson", newobj="glmSLMA_3.newobj") - - expect_length(glmSLMA.res, 9) - expect_equal(glmSLMA.res$num.valid.studies, 3) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.all)) - expect_true("matrix" %in% class(glmSLMA.res$betamatrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$sematrix.valid)) - expect_true("matrix" %in% class(glmSLMA.res$SLMA.pooled.ests.matrix)) - expect_length(glmSLMA.res$output.summary, 5) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.beta.matrix.for.SLMA)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$input.se.matrix.for.SLMA)) - expect_length(glmSLMA.res$output.summary$study1, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study1$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study1$coefficients)) - expect_equal(glmSLMA.res$output.summary$study1$rank, 2) - expect_equal(glmSLMA.res$output.summary$study1$aic, Inf, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$iter, 4) - expect_equal(glmSLMA.res$output.summary$study1$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study1$dispersion, 1.000, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study1$Ntotal, 2163) - expect_equal(glmSLMA.res$output.summary$study1$Nvalid, 1801) - expect_equal(glmSLMA.res$output.summary$study1$Nmissing, 362) - expect_length(glmSLMA.res$output.summary$study2, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study2$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study2$coefficients)) - expect_equal(glmSLMA.res$output.summary$study2$rank, 2) - expect_equal(glmSLMA.res$output.summary$study2$aic, Inf, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$iter, 4) - expect_equal(glmSLMA.res$output.summary$study2$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study2$dispersion, 1.00, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study2$Ntotal, 3088) - expect_equal(glmSLMA.res$output.summary$study2$Nvalid, 2526) - expect_equal(glmSLMA.res$output.summary$study2$Nmissing, 562) - expect_length(glmSLMA.res$output.summary$study3, 29) - expect_true("family" %in% class(glmSLMA.res$output.summary$study3$family)) - expect_true("matrix" %in% class(glmSLMA.res$output.summary$study3$coefficients)) - expect_equal(glmSLMA.res$output.summary$study3$rank, 2) - expect_equal(glmSLMA.res$output.summary$study3$aic, Inf, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$iter, 4) - expect_equal(glmSLMA.res$output.summary$study3$contrasts, NULL) - expect_equal(glmSLMA.res$output.summary$study3$dispersion, 1.00, tolerance = 0.001) - expect_equal(glmSLMA.res$output.summary$study3$Ntotal, 4128) - expect_equal(glmSLMA.res$output.summary$study3$Nvalid, 3473) - expect_equal(glmSLMA.res$output.summary$study3$Nmissing, 655) - expect_length(glmSLMA.res$is.object.created, 1) - expect_equal(glmSLMA.res$is.object.created, "A data object has been created in all specified data sources") - expect_length(glmSLMA.res$validity.check, 1) - expect_equal(glmSLMA.res$validity.check, " appears valid in all sources") -}) - # # Done # @@ -363,8 +197,7 @@ test_that("simple glmSLMA, poisson-assigned", { context("ds.glmSLMA::smk::shutdown") test_that("shutdown", { - ds_expect_variables(c("D", "new.glm.obj", "glmSLMA_1.newobj", "glmSLMA_2.newobj", "glmSLMA_3.newobj", "num.medi.lpd", "num.dis.diab", "num.gender", "str.medi.lpd", "str.dis.diab", "str.gender")) - + ds_expect_variables(c("D", "new.glm.obj", "num.dis.ami", "num.dis.diab", "num.gender", "str.dis.ami", "str.dis.diab", "str.gender")) }) disconnect.studies.dataset.cnsim() diff --git a/tests/testthat/test-smk-ds.glmSummary.R b/tests/testthat/test-smk-ds.glmSummary.R index 68efb105..4eb901d0 100644 --- a/tests/testthat/test-smk-ds.glmSummary.R +++ b/tests/testthat/test-smk-ds.glmSummary.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.glmerSLMA.R b/tests/testthat/test-smk-ds.glmerSLMA.R index 0d972006..543a3e0f 100644 --- a/tests/testthat/test-smk-ds.glmerSLMA.R +++ b/tests/testthat/test-smk-ds.glmerSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -29,8 +29,17 @@ test_that("simple glmerSLMA tesing (mis)use of arguments", { res = ds.glmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', family='poisson', dataName = "D", start_theta = c(1)) expect_length(res, 8) + expect_error(ds.glmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', family='poisson', dataName = "D", start_theta = c(1,1,1)), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) + + errs <- datashield.errors() + expect_length(errs, 3) + expect_length(errs$sim1, 0) + expect_length(errs$sim2, 0) + expect_length(errs$sim3, 0) + res = ds.glmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', family='poisson', dataName = "D", start_fixef = c(1,1,1), start_theta = c(1)) expect_length(res, 8) + }) test_that("test offsets and weights", { @@ -63,13 +72,6 @@ test_that("simple glmerSLMA", { expect_length(res, 8) }) - -test_that("simple glmerSLMA with assign=TRUE", { - res <- ds.glmerSLMA(formula = 'incid_rate ~ trtGrp + Male + (1|idDoctor)', family="poisson", assign=TRUE, newobj="glmerSLMA.assigned", dataName = "D") - - expect_length(res, 8) -}) - # # Shutdown phase 1 # @@ -78,7 +80,7 @@ context("ds.glmerSLMA::smk::shutdown - phase 1") test_that("setup", { #note the offset and weights objects below are artefacts - ds_expect_variables(c("D", "D2", "offset", "some.offsets", "some.weights", "weights", "glmerSLMA.assigned")) + ds_expect_variables(c("D", "D2", "offset", "some.offsets", "some.weights", "weights")) }) disconnect.studies.dataset.cluster.int() @@ -110,7 +112,7 @@ test_that("check slope formulae - 1", { expect_length(res$num.valid.studies, 1) expect_equal(class(res$num.valid.studies), "numeric") expect_length(res$betamatrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.all), 1) expect_true("matrix" %in% class(res$betamatrix.all)) @@ -122,7 +124,7 @@ test_that("check slope formulae - 1", { expect_true("array" %in% class(res$betamatrix.all)) } expect_length(res$sematrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.all), 1) expect_true("matrix" %in% class(res$sematrix.all)) @@ -134,7 +136,7 @@ test_that("check slope formulae - 1", { expect_true("array" %in% class(res$sematrix.all)) } expect_length(res$betamatrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.valid), 1) expect_true("matrix" %in% class(res$betamatrix.valid)) @@ -146,7 +148,7 @@ test_that("check slope formulae - 1", { expect_true("array" %in% class(res$betamatrix.valid)) } expect_length(res$sematrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.valid), 1) expect_true("matrix" %in% class(res$sematrix.valid)) @@ -158,7 +160,7 @@ test_that("check slope formulae - 1", { expect_true("array" %in% class(res$sematrix.valid)) } expect_length(res$SLMA.pooled.ests.matrix, 18) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$SLMA.pooled.ests.matrix), 1) expect_true("matrix" %in% class(res$SLMA.pooled.ests.matrix)) @@ -182,7 +184,7 @@ test_that("check slope formulae - 2", { expect_length(res$num.valid.studies, 1) expect_equal(class(res$num.valid.studies), "numeric") expect_length(res$betamatrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.all), 1) expect_true("matrix" %in% class(res$betamatrix.all)) @@ -194,7 +196,7 @@ test_that("check slope formulae - 2", { expect_true("array" %in% class(res$betamatrix.all)) } expect_length(res$sematrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.all), 1) expect_true("matrix" %in% class(res$sematrix.all)) @@ -206,7 +208,7 @@ test_that("check slope formulae - 2", { expect_true("array" %in% class(res$sematrix.all)) } expect_length(res$betamatrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.valid), 1) expect_true("matrix" %in% class(res$betamatrix.valid)) @@ -218,7 +220,7 @@ test_that("check slope formulae - 2", { expect_true("array" %in% class(res$betamatrix.valid)) } expect_length(res$sematrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.valid), 1) expect_true("matrix" %in% class(res$sematrix.valid)) @@ -230,7 +232,7 @@ test_that("check slope formulae - 2", { expect_true("array" %in% class(res$sematrix.valid)) } expect_length(res$SLMA.pooled.ests.matrix, 18) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$SLMA.pooled.ests.matrix), 1) expect_true("matrix" %in% class(res$SLMA.pooled.ests.matrix)) diff --git a/tests/testthat/test-smk-ds.hetcor.R b/tests/testthat/test-smk-ds.hetcor.R deleted file mode 100644 index 7d029fb3..00000000 --- a/tests/testthat/test-smk-ds.hetcor.R +++ /dev/null @@ -1,188 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.hetcor::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_TRIG", "LAB_HDL", "LAB_GLUC_ADJUSTED", "PM_BMI_CONTINUOUS", "DIS_CVA", "MEDI_LPD", "DIS_DIAB", "DIS_AMI", "GENDER", "PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.hetcor::smk::test1") -test_that("hetcor", { - ds.dataFrame(c("D$LAB_TSC", "D$LAB_TRIG", "D$LAB_HDL", "D$LAB_GLUC_ADJUSTED", "D$PM_BMI_CONTINUOUS", "D$DIS_CVA", "D$MEDI_LPD", "D$DIS_DIAB", "D$DIS_AMI", "D$GENDER", "D$PM_BMI_CATEGORICAL"), newobj="df") - - res <- ds.hetcor(data="df", ML=TRUE, std.err=TRUE, bins=4, pd=TRUE, use="complete.obs", datasources=ds.test_env$connections) - - expect_equal(class(res), "list") - expect_length(res, 3) - expect_equal(class(res$sim1), "hetcor") - expect_equal(class(res$sim2), "hetcor") - expect_equal(class(res$sim3), "hetcor") - - expect_true("matrix" %in% class(res$sim1$correlations)) - expect_true("array" %in% class(res$sim1$correlations)) - expect_true("matrix" %in% class(res$sim2$correlations)) - expect_true("array" %in% class(res$sim2$correlations)) - expect_true("matrix" %in% class(res$sim3$correlations)) - expect_true("array" %in% class(res$sim3$correlations)) - - expect_true("matrix" %in% class(res$sim1$type)) - expect_true("array" %in% class(res$sim1$type)) - expect_true("matrix" %in% class(res$sim2$type)) - expect_true("array" %in% class(res$sim2$type)) - expect_true("matrix" %in% class(res$sim3$type)) - expect_true("array" %in% class(res$sim3$type)) - - expect_equal(class(res$sim1$NA.method), "character") - expect_equal(class(res$sim2$NA.method), "character") - expect_equal(class(res$sim3$NA.method), "character") - - expect_equal(class(res$sim1$ML), "logical") - expect_equal(class(res$sim2$ML), "logical") - expect_equal(class(res$sim3$ML), "logical") - - expect_true("matrix" %in% class(res$sim1$std.errors)) - expect_true("array" %in% class(res$sim1$std.errors)) - expect_true("matrix" %in% class(res$sim2$std.errors)) - expect_true("array" %in% class(res$sim2$std.errors)) - expect_true("matrix" %in% class(res$sim3$std.errors)) - expect_true("array" %in% class(res$sim3$std.errors)) - - expect_equal(class(res$sim1$n), "integer") - expect_equal(class(res$sim2$n), "integer") - expect_equal(class(res$sim3$n), "integer") - - expect_true("matrix" %in% class(res$sim1$tests)) - expect_true("array" %in% class(res$sim1$tests)) - expect_true("matrix" %in% class(res$sim2$tests)) - expect_true("array" %in% class(res$sim2$tests)) - expect_true("matrix" %in% class(res$sim3$tests)) - expect_true("array" %in% class(res$sim3$tests)) - - expect_equal(dim(res$sim1$correlations)[1], 11) - expect_equal(dim(res$sim1$correlations)[2], 11) - expect_equal(dim(res$sim2$correlations)[1], 11) - expect_equal(dim(res$sim2$correlations)[2], 11) - expect_equal(dim(res$sim3$correlations)[1], 11) - expect_equal(dim(res$sim3$correlations)[2], 11) - - expect_equal(res$sim1$correlations[1,1], 1.000000000, tolerance=0.00001) - expect_equal(res$sim1$correlations[2,1], 0.087066121, tolerance=0.00001) - expect_equal(res$sim1$correlations[3,1], -0.176099780, tolerance=0.00001) - expect_equal(res$sim1$correlations[4,1], 0.050921402, tolerance=0.00001) - expect_equal(res$sim1$correlations[5,1], -0.013770365, tolerance=0.00001) - expect_true(is.na(res$sim1$correlations[6,1])) - expect_equal(res$sim1$correlations[7,1], 0.049067166, tolerance=0.00001) - expect_equal(res$sim1$correlations[8,1], 0.041398769, tolerance=0.00001) - expect_equal(res$sim1$correlations[9,1], 0.366396436, tolerance=0.00001) - expect_equal(res$sim1$correlations[10,1], -0.025944251, tolerance=0.00001) - expect_equal(res$sim1$correlations[11,1], -0.004743882, tolerance=0.00001) - - expect_equal(dim(res$sim1$type)[1], 11) - expect_equal(dim(res$sim1$type)[2], 11) - expect_equal(dim(res$sim2$type)[1], 11) - expect_equal(dim(res$sim2$type)[2], 11) - expect_equal(dim(res$sim3$type)[1], 11) - expect_equal(dim(res$sim3$type)[2], 11) - - expect_equal(res$sim1$type[1,1], "") - expect_equal(res$sim1$type[2,1], "Pearson") - expect_equal(res$sim1$type[3,1], "Pearson") - expect_equal(res$sim1$type[4,1], "Pearson") - expect_equal(res$sim1$type[5,1], "Pearson") - expect_equal(res$sim1$type[6,1], "Polyserial") - expect_equal(res$sim1$type[7,1], "Polyserial") - expect_equal(res$sim1$type[8,1], "Polyserial") - expect_equal(res$sim1$type[9,1], "Polyserial") - expect_equal(res$sim1$type[10,1], "Polyserial") - expect_equal(res$sim1$type[11,1], "Polyserial") - - expect_equal(res$sim1$type[1,6], "Polyserial") - expect_equal(res$sim1$type[2,6], "Polyserial") - expect_equal(res$sim1$type[3,6], "Polyserial") - expect_equal(res$sim1$type[4,6], "Polyserial") - expect_equal(res$sim1$type[5,6], "Polyserial") - expect_equal(res$sim1$type[6,6], "") - expect_equal(res$sim1$type[7,6], "Polychoric") - expect_equal(res$sim1$type[8,6], "Polychoric") - expect_equal(res$sim1$type[9,6], "Polychoric") - expect_equal(res$sim1$type[10,6], "Polychoric") - expect_equal(res$sim1$type[11,6], "Polychoric") - - expect_equal(res$sim1$NA.method, "complete.obs") - expect_equal(res$sim2$NA.method, "complete.obs") - expect_equal(res$sim3$NA.method, "complete.obs") - - expect_equal(res$sim1$ML, TRUE) - expect_equal(res$sim2$ML, TRUE) - expect_equal(res$sim3$ML, TRUE) - - expect_equal(dim(res$sim1$std.errors)[1], 11) - expect_equal(dim(res$sim1$std.errors)[2], 11) - expect_equal(dim(res$sim2$std.errors)[1], 11) - expect_equal(dim(res$sim2$std.errors)[2], 11) - expect_equal(dim(res$sim3$std.errors)[1], 11) - expect_equal(dim(res$sim3$std.errors)[2], 11) - - expect_equal(res$sim1$std.errors[1,1], 0.00000000, tolerance=0.00001) - expect_equal(res$sim1$std.errors[2,1], 0.02406969, tolerance=0.00001) - expect_equal(res$sim1$std.errors[3,1], 0.02350198, tolerance=0.00001) - expect_equal(res$sim1$std.errors[4,1], 0.02419053, tolerance=0.00001) - expect_equal(res$sim1$std.errors[5,1], 0.02424876, tolerance=0.00001) - expect_true(is.na(res$sim1$std.errors[6,1])) - expect_equal(res$sim1$std.errors[7,1], 0.07335154, tolerance=0.00001) - expect_equal(res$sim1$std.errors[8,1], 0.07970509, tolerance=0.00001) - expect_equal(res$sim1$std.errors[9,1], 0.19216465, tolerance=0.00001) - expect_equal(res$sim1$std.errors[10,1], 0.03037314, tolerance=0.00001) - expect_equal(res$sim1$std.errors[11,1], 0.02699771, tolerance=0.00001) - - expect_equal(dim(res$sim1$tests)[1], 11) - expect_equal(dim(res$sim1$tests)[2], 11) - expect_equal(dim(res$sim2$tests)[1], 11) - expect_equal(dim(res$sim2$tests)[2], 11) - expect_equal(dim(res$sim3$tests)[1], 11) - expect_equal(dim(res$sim3$tests)[2], 11) - - expect_equal(res$sim1$tests[1,1], 0.00000000, tolerance=0.00001) - expect_equal(res$sim1$tests[2,1], 0.76954489, tolerance=0.00001) - expect_equal(res$sim1$tests[3,1], 0.34894923, tolerance=0.00001) - expect_equal(res$sim1$tests[4,1], 0.03778798, tolerance=0.00001) - expect_equal(res$sim1$tests[5,1], 0.97371162, tolerance=0.00001) - expect_true(is.na(res$sim1$tests[6,1])) - expect_equal(res$sim1$tests[7,1], 0.88336350, tolerance=0.00001) - expect_equal(res$sim1$tests[8,1], 0.72244994, tolerance=0.00001) - expect_equal(res$sim1$tests[9,1], 0.85611378, tolerance=0.00001) - expect_equal(res$sim1$tests[10,1], 0.14265211, tolerance=0.00001) - expect_equal(res$sim1$tests[11,1], 0.95287762, tolerance=0.00001) -}) - -# -# Done -# - -context("ds.hetcor::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "df")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.hetcor::smk::done") diff --git a/tests/testthat/test-smk-ds.isNA.R b/tests/testthat/test-smk-ds.isNA.R index fb721374..58c2f96d 100644 --- a/tests/testthat/test-smk-ds.isNA.R +++ b/tests/testthat/test-smk-ds.isNA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.isValid.R b/tests/testthat/test-smk-ds.isValid.R index 302412ba..d0d16e70 100644 --- a/tests/testthat/test-smk-ds.isValid.R +++ b/tests/testthat/test-smk-ds.isValid.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.kurtosis.R b/tests/testthat/test-smk-ds.kurtosis.R index 76cedb04..d0280ee8 100644 --- a/tests/testthat/test-smk-ds.kurtosis.R +++ b/tests/testthat/test-smk-ds.kurtosis.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -35,9 +34,9 @@ test_that("simple kurtosis, method 1, split, on LAB_TSC", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.171744367103707"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.574419687874713"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.674414218958169"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.171744367103707") + expect_equal(kurtosis.res$Kurtosis[2], "0.574419687874713") + expect_equal(kurtosis.res$Kurtosis[3], "0.674414218958169") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1807") expect_equal(kurtosis.res$Nvalid[2], "2539") @@ -55,9 +54,9 @@ test_that("simple kurtosis, method 1, split, on LAB_TRIG", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("1.76749454806425"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("1.04629523942343"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("1.02128294035219"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "1.76749454806425") + expect_equal(kurtosis.res$Kurtosis[2], "1.04629523942343") + expect_equal(kurtosis.res$Kurtosis[3], "1.02128294035219") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1801") expect_equal(kurtosis.res$Nvalid[2], "2526") @@ -75,9 +74,9 @@ test_that("simple kurtosis, method 1, split, on LAB_HDL", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.290702025953629"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.494573359163136"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.549162800210091"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.290702025953629") + expect_equal(kurtosis.res$Kurtosis[2], "0.494573359163136") + expect_equal(kurtosis.res$Kurtosis[3], "0.549162800210091") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1803") expect_equal(kurtosis.res$Nvalid[2], "2533") @@ -95,9 +94,9 @@ test_that("simple kurtosis, method 1, split, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("4.32162963839166"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("4.38468288434594"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("3.72493030465797"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "4.32162963839166") + expect_equal(kurtosis.res$Kurtosis[2], "4.38468288434594") + expect_equal(kurtosis.res$Kurtosis[3], "3.72493030465797") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1822") expect_equal(kurtosis.res$Nvalid[2], "2583") @@ -115,9 +114,9 @@ test_that("simple kurtosis, method 1, split, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.671416534303503"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.251325359087079"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.187132199973004"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.671416534303503") + expect_equal(kurtosis.res$Kurtosis[2], "0.251325359087079") + expect_equal(kurtosis.res$Kurtosis[3], "0.187132199973004") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "2066") expect_equal(kurtosis.res$Nvalid[2], "2938") @@ -136,7 +135,7 @@ test_that("simple kurtosis, combine, on LAB_TSC", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.515598613390042"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.515598613390042") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7825") expect_length(kurtosis.res$ValidityMessage, 1) @@ -150,7 +149,7 @@ test_that("simple kurtosis, method 1, combine, on LAB_TRIG", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("1.21679529801477"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "1.21679529801477") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7800") expect_length(kurtosis.res$ValidityMessage, 1) @@ -164,7 +163,7 @@ test_that("simple kurtosis, method 1, combine, on LAB_HDL", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.472661436116919"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.472661436116919") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7809") expect_length(kurtosis.res$ValidityMessage, 1) @@ -178,7 +177,7 @@ test_that("simple kurtosis, method 1, combine, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("4.08935226175995"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "4.08935226175995") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7924") expect_length(kurtosis.res$ValidityMessage, 1) @@ -192,7 +191,7 @@ test_that("simple kurtosis, method 1, combine, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.335021586102938"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.335021586102938") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "8927") expect_length(kurtosis.res$ValidityMessage, 1) @@ -208,9 +207,9 @@ test_that("simple kurtosis, both, on LAB_TSC", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.171744367103707"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.574419687874713"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.674414218958169"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.171744367103707") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.574419687874713") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.674414218958169") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1807") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2539") @@ -221,7 +220,7 @@ test_that("simple kurtosis, both, on LAB_TSC", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.515598613390042"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.515598613390042") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7825") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -236,9 +235,9 @@ test_that("simple kurtosis, method 1, both, on LAB_TRIG", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("1.76749454806425"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("1.04629523942343"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("1.02128294035219"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "1.76749454806425") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "1.04629523942343") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "1.02128294035219") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1801") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2526") @@ -249,7 +248,7 @@ test_that("simple kurtosis, method 1, both, on LAB_TRIG", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("1.21679529801477"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "1.21679529801477") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7800") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -264,9 +263,9 @@ test_that("simple kurtosis, method 1, both, on LAB_HDL", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.290702025953629"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.494573359163136"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.549162800210091"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.290702025953629") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.494573359163136") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.549162800210091") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1803") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2533") @@ -277,7 +276,7 @@ test_that("simple kurtosis, method 1, both, on LAB_HDL", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.472661436116919"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.472661436116919") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7809") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -292,9 +291,9 @@ test_that("simple kurtosis, method 1, both, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("4.32162963839166"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("4.38468288434594"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("3.72493030465797"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "4.32162963839166") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "4.38468288434594") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "3.72493030465797") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1822") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2583") @@ -305,7 +304,7 @@ test_that("simple kurtosis, method 1, both, on LAB_GLUC_ADJUSTED", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("4.08935226175995"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "4.08935226175995") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7924") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -320,9 +319,9 @@ test_that("simple kurtosis, method 1, both, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.671416534303503"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.251325359087079"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.187132199973004"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.671416534303503") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.251325359087079") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.187132199973004") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "2066") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2938") @@ -333,7 +332,7 @@ test_that("simple kurtosis, method 1, both, on PM_BMI_CONTINUOUS", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.335021586102938"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.335021586102938") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "8927") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -350,9 +349,9 @@ test_that("simple kurtosis, method 2, split, on LAB_TSC", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.175548320198465"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.577919349817977"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.677111105785997"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.175548320198465") + expect_equal(kurtosis.res$Kurtosis[2], "0.577919349817977") + expect_equal(kurtosis.res$Kurtosis[3], "0.677111105785997") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1807") expect_equal(kurtosis.res$Nvalid[2], "2539") @@ -370,9 +369,9 @@ test_that("simple kurtosis, method 2, split, on LAB_TRIG", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("1.7757502518397"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("1.0507483099711"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("1.02448438876989"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "1.7757502518397") + expect_equal(kurtosis.res$Kurtosis[2], "1.0507483099711") + expect_equal(kurtosis.res$Kurtosis[3], "1.02448438876989") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1801") expect_equal(kurtosis.res$Nvalid[2], "2526") @@ -390,9 +389,9 @@ test_that("simple kurtosis, method 2, split, on LAB_HDL", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.294844984757316"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.497923487075878"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.551683842646188"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.294844984757316") + expect_equal(kurtosis.res$Kurtosis[2], "0.497923487075878") + expect_equal(kurtosis.res$Kurtosis[3], "0.551683842646188") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1803") expect_equal(kurtosis.res$Nvalid[2], "2533") @@ -410,9 +409,9 @@ test_that("simple kurtosis, method 2, split, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("4.33681301852393"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("4.39550878961539"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("3.73193529182726"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "4.33681301852393") + expect_equal(kurtosis.res$Kurtosis[2], "4.39550878961539") + expect_equal(kurtosis.res$Kurtosis[3], "3.73193529182726") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1822") expect_equal(kurtosis.res$Nvalid[2], "2583") @@ -430,9 +429,9 @@ test_that("simple kurtosis, method 2, split, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.675954084252309"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.253798588114679"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.188901928135923"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.675954084252309") + expect_equal(kurtosis.res$Kurtosis[2], "0.253798588114679") + expect_equal(kurtosis.res$Kurtosis[3], "0.188901928135923") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "2066") expect_equal(kurtosis.res$Nvalid[2], "2938") @@ -451,7 +450,7 @@ test_that("simple kurtosis, combine, on LAB_TSC", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.516695386307489"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.516695386307489") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7825") expect_length(kurtosis.res$ValidityMessage, 1) @@ -465,7 +464,7 @@ test_that("simple kurtosis, method 2, combine, on LAB_TRIG", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("1.21834528057683"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "1.21834528057683") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7800") expect_length(kurtosis.res$ValidityMessage, 1) @@ -479,7 +478,7 @@ test_that("simple kurtosis, method 2, combine, on LAB_HDL", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.473732952559591"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.473732952559591") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7809") expect_length(kurtosis.res$ValidityMessage, 1) @@ -493,7 +492,7 @@ test_that("simple kurtosis, method 2, combine, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("4.09269136885493"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "4.09269136885493") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7924") expect_length(kurtosis.res$ValidityMessage, 1) @@ -507,7 +506,7 @@ test_that("simple kurtosis, method 2, combine, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.335881726489728"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.335881726489728") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "8927") expect_length(kurtosis.res$ValidityMessage, 1) @@ -523,9 +522,9 @@ test_that("simple kurtosis, both, on LAB_TSC", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.175548320198465"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.577919349817977"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.677111105785997"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.175548320198465") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.577919349817977") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.677111105785997") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1807") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2539") @@ -536,7 +535,7 @@ test_that("simple kurtosis, both, on LAB_TSC", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.516695386307489"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.516695386307489") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7825") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -551,9 +550,9 @@ test_that("simple kurtosis, method 2, both, on LAB_TRIG", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("1.7757502518397"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("1.0507483099711"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("1.02448438876989"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "1.7757502518397") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "1.0507483099711") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "1.02448438876989") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1801") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2526") @@ -564,7 +563,7 @@ test_that("simple kurtosis, method 2, both, on LAB_TRIG", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("1.21834528057683"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "1.21834528057683") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7800") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -579,9 +578,9 @@ test_that("simple kurtosis, method 2, both, on LAB_HDL", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.294844984757316"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.497923487075878"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.551683842646188"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.294844984757316") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.497923487075878") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.551683842646188") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1803") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2533") @@ -592,7 +591,7 @@ test_that("simple kurtosis, method 2, both, on LAB_HDL", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.473732952559591"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.473732952559591") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7809") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -607,9 +606,9 @@ test_that("simple kurtosis, method 2, both, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("4.33681301852393"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("4.39550878961539"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("3.73193529182726"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "4.33681301852393") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "4.39550878961539") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "3.73193529182726") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1822") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2583") @@ -620,7 +619,7 @@ test_that("simple kurtosis, method 2, both, on LAB_GLUC_ADJUSTED", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("4.09269136885493"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "4.09269136885493") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7924") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -635,9 +634,9 @@ test_that("simple kurtosis, method 2, both, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.675954084252309"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.253798588114679"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.188901928135923"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.675954084252309") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.253798588114679") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.188901928135923") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "2066") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2938") @@ -648,7 +647,7 @@ test_that("simple kurtosis, method 2, both, on PM_BMI_CONTINUOUS", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.335881726489728"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.335881726489728") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "8927") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -665,9 +664,9 @@ test_that("simple kurtosis, method 3, split, on LAB_TSC", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.16823483003675"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.571604630147399"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.672302183238634"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.16823483003675") + expect_equal(kurtosis.res$Kurtosis[2], "0.571604630147399") + expect_equal(kurtosis.res$Kurtosis[3], "0.672302183238634") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1807") expect_equal(kurtosis.res$Nvalid[2], "2539") @@ -685,9 +684,9 @@ test_that("simple kurtosis, method 3, split, on LAB_TRIG", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("1.76220174297892"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("1.04309215604256"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("1.01896753349628"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "1.76220174297892") + expect_equal(kurtosis.res$Kurtosis[2], "1.04309215604256") + expect_equal(kurtosis.res$Kurtosis[3], "1.01896753349628") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1801") expect_equal(kurtosis.res$Nvalid[2], "2526") @@ -705,9 +704,9 @@ test_that("simple kurtosis, method 3, split, on LAB_HDL", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.287052786394011"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.491814667058934"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.54711923451172"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.287052786394011") + expect_equal(kurtosis.res$Kurtosis[2], "0.491814667058934") + expect_equal(kurtosis.res$Kurtosis[3], "0.54711923451172") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1803") expect_equal(kurtosis.res$Nvalid[2], "2533") @@ -725,9 +724,9 @@ test_that("simple kurtosis, method 3, split, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("4.31359492883116"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("4.37896607954034"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("3.72110877877708"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "4.31359492883116") + expect_equal(kurtosis.res$Kurtosis[2], "4.37896607954034") + expect_equal(kurtosis.res$Kurtosis[3], "3.72110877877708") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "1822") expect_equal(kurtosis.res$Nvalid[2], "2583") @@ -745,9 +744,9 @@ test_that("simple kurtosis, method 3, split, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.667863264214689"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[2]), as.double("0.249112444154344"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis[3]), as.double("0.185507562711274"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.667863264214689") + expect_equal(kurtosis.res$Kurtosis[2], "0.249112444154344") + expect_equal(kurtosis.res$Kurtosis[3], "0.185507562711274") expect_length(kurtosis.res$Nvalid, 3) expect_equal(kurtosis.res$Nvalid[1], "2066") expect_equal(kurtosis.res$Nvalid[2], "2938") @@ -766,7 +765,7 @@ test_that("simple kurtosis, combine, on LAB_TSC", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.514700115249594"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.514700115249594") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7825") expect_length(kurtosis.res$ValidityMessage, 1) @@ -780,7 +779,7 @@ test_that("simple kurtosis, method 3, combine, on LAB_TRIG", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("1.21571413776076"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "1.21571413776076") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7800") expect_length(kurtosis.res$ValidityMessage, 1) @@ -794,7 +793,7 @@ test_that("simple kurtosis, method 3, combine, on LAB_HDL", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.47177209328527"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.47177209328527") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7809") expect_length(kurtosis.res$ValidityMessage, 1) @@ -808,7 +807,7 @@ test_that("simple kurtosis, method 3, combine, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("4.0875630379014"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "4.0875630379014") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "7924") expect_length(kurtosis.res$ValidityMessage, 1) @@ -822,7 +821,7 @@ test_that("simple kurtosis, method 3, combine, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 3) expect_length(kurtosis.res$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Kurtosis[1]), as.double("0.334274451613855"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis[1], "0.334274451613855") expect_length(kurtosis.res$Nvalid, 1) expect_equal(kurtosis.res$Nvalid[1], "8927") expect_length(kurtosis.res$ValidityMessage, 1) @@ -838,9 +837,9 @@ test_that("simple kurtosis, both, on LAB_TSC", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.16823483003675"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.571604630147399"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.672302183238634"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.16823483003675") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.571604630147399") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.672302183238634") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1807") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2539") @@ -851,7 +850,7 @@ test_that("simple kurtosis, both, on LAB_TSC", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.514700115249594"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.514700115249594") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7825") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -866,9 +865,9 @@ test_that("simple kurtosis, method 3, both, on LAB_TRIG", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("1.76220174297892"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("1.04309215604256"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("1.01896753349628"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "1.76220174297892") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "1.04309215604256") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "1.01896753349628") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1801") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2526") @@ -879,7 +878,7 @@ test_that("simple kurtosis, method 3, both, on LAB_TRIG", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("1.21571413776076"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "1.21571413776076") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7800") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -894,9 +893,9 @@ test_that("simple kurtosis, method 3, both, on LAB_HDL", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.287052786394011"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.491814667058934"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.54711923451172"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.287052786394011") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.491814667058934") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.54711923451172") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1803") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2533") @@ -907,7 +906,7 @@ test_that("simple kurtosis, method 3, both, on LAB_HDL", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.47177209328527"), tolerance = ds.test_env$low_tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.47177209328527") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7809") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -922,9 +921,9 @@ test_that("simple kurtosis, method 3, both, on LAB_GLUC_ADJUSTED", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("4.31359492883116"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("4.37896607954034"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("3.72110877877708"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "4.31359492883116") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "4.37896607954034") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "3.72110877877708") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "1822") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2583") @@ -935,7 +934,7 @@ test_that("simple kurtosis, method 3, both, on LAB_GLUC_ADJUSTED", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("4.0875630379014"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "4.0875630379014") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "7924") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) @@ -950,9 +949,9 @@ test_that("simple kurtosis, method 3, both, on PM_BMI_CONTINUOUS", { expect_length(kurtosis.res, 2) expect_length(kurtosis.res$Kurtosis.by.Study, 3) expect_length(kurtosis.res$Kurtosis.by.Study$Kurtosis, 3) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[1]), as.double("0.667863264214689"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[2]), as.double("0.249112444154344"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(kurtosis.res$Kurtosis.by.Study$Kurtosis[3]), as.double("0.185507562711274"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[1], "0.667863264214689") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[2], "0.249112444154344") + expect_equal(kurtosis.res$Kurtosis.by.Study$Kurtosis[3], "0.185507562711274") expect_length(kurtosis.res$Kurtosis.by.Study$Nvalid, 3) expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[1], "2066") expect_equal(kurtosis.res$Kurtosis.by.Study$Nvalid[2], "2938") @@ -963,7 +962,7 @@ test_that("simple kurtosis, method 3, both, on PM_BMI_CONTINUOUS", { expect_equal(kurtosis.res$Kurtosis.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(kurtosis.res$Global.Kurtosis, 3) expect_length(kurtosis.res$Global.Kurtosis$Kurtosis, 1) - expect_equal(as.double(kurtosis.res$Global.Kurtosis$Kurtosis[1]), as.double("0.334274451613855"), tolerance = ds.test_env$tolerance) + expect_equal(kurtosis.res$Global.Kurtosis$Kurtosis[1], "0.334274451613855") expect_length(kurtosis.res$Global.Kurtosis$Nvalid, 1) expect_equal(kurtosis.res$Global.Kurtosis$Nvalid[1], "8927") expect_length(kurtosis.res$Global.Kurtosis$ValidityMessage, 1) diff --git a/tests/testthat/test-smk-ds.length.R b/tests/testthat/test-smk-ds.length.R index 58d85b33..1a5a4eb3 100644 --- a/tests/testthat/test-smk-ds.length.R +++ b/tests/testthat/test-smk-ds.length.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.levels.R b/tests/testthat/test-smk-ds.levels.R index cc262a1e..1ed3d89f 100644 --- a/tests/testthat/test-smk-ds.levels.R +++ b/tests/testthat/test-smk-ds.levels.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -26,37 +26,7 @@ test_that("setup", { context("ds.levels::smk") test_that("simple levels", { - ds.asFactor("D$GENDER", newobj.name = "gender") - - res <- ds.levels("gender") - - expect_length(res, 3) - expect_length(res$sim1, 2) - expect_length(res$sim1$ValidityMessage, 1) - expect_equal(res$sim1$ValidityMessage, "VALID ANALYSIS") - expect_length(res$sim1$Levels, 2) - expect_equal(res$sim1$Levels[1], "0") - expect_equal(res$sim1$Levels[2], "1") - expect_length(res$sim2, 2) - expect_length(res$sim2$ValidityMessage, 1) - expect_equal(res$sim2$ValidityMessage, "VALID ANALYSIS") - expect_length(res$sim2$Levels, 2) - expect_equal(res$sim2$Levels[1], "0") - expect_equal(res$sim2$Levels[2], "1") - expect_length(res$sim3, 2) - expect_length(res$sim3$ValidityMessage, 1) - expect_equal(res$sim3$ValidityMessage, "VALID ANALYSIS") - expect_length(res$sim3$Levels, 2) - expect_equal(res$sim3$Levels[1], "0") - expect_equal(res$sim3$Levels[2], "1") -}) - -context("ds.levels::smk") -test_that("simple levels", { - ds.asFactor("D$PM_BMI_CATEGORICAL", newobj.name = "pm_bmi_categorical") - - res <- ds.levels("pm_bmi_categorical") - + res <- ds.levels("D$PM_BMI_CATEGORICAL") expect_length(res, 3) expect_length(res$sim1, 2) expect_length(res$sim1$ValidityMessage, 1) @@ -88,7 +58,7 @@ test_that("simple levels", { context("ds.levels::smk::shutdown") test_that("shutdown", { - ds_expect_variables(c("D", "gender", "pm_bmi_categorical")) + ds_expect_variables(c("D")) }) disconnect.studies.dataset.cnsim() diff --git a/tests/testthat/test-smk-ds.lexis.R b/tests/testthat/test-smk-ds.lexis.R index 2ad3b717..ea2b9b2d 100644 --- a/tests/testthat/test-smk-ds.lexis.R +++ b/tests/testthat/test-smk-ds.lexis.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -43,7 +42,7 @@ test_that("simple lexis", { expect_true(res.exists$survival2) expect_true(res.exists$survival3) - res.message <- expect_warning(ds.message('messageobj'), "'ds.message' is deprecated.", fixed = TRUE) + res.message <- ds.message('messageobj') expect_length(res.message, 3) expect_equal(res.message$survival1, "ALL OK: there are no studysideMessage(s) on this datasource") diff --git a/tests/testthat/test-smk-ds.list.R b/tests/testthat/test-smk-ds.list.R index d369bedf..7368272f 100644 --- a/tests/testthat/test-smk-ds.list.R +++ b/tests/testthat/test-smk-ds.list.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.listClientsideFunctions.R b/tests/testthat/test-smk-ds.listClientsideFunctions.R index 31b053eb..42807f14 100644 --- a/tests/testthat/test-smk-ds.listClientsideFunctions.R +++ b/tests/testthat/test-smk-ds.listClientsideFunctions.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -28,11 +27,9 @@ test_that("setup", { context("ds.listClientsideFunctions::smk::check results") test_that("check results", { output <- list( - "ds.abs", "ds.asCharacter", "ds.asDataMatrix", "ds.asFactor", - "ds.asFactorSimple", "ds.asInteger", "ds.asList", "ds.asLogical", @@ -40,7 +37,6 @@ test_that("check results", { "ds.asNumeric", "ds.assign", "ds.Boole", - "ds.boxPlot", "ds.c", "ds.cbind", "ds.changeRefGroup", @@ -57,19 +53,14 @@ test_that("check results", { "ds.dataFrameSubset", "ds.densityGrid", "ds.dim", - "ds.dmtC2S", - "ds.elspline", "ds.exists", "ds.exp", - "ds.forestplot", - "ds.getWGSR", "ds.glm", "ds.glmerSLMA", "ds.glmPredict", "ds.glmSLMA", "ds.glmSummary", "ds.heatmapPlot", - "ds.hetcor", "ds.histogram", "ds.isNA", "ds.isValid", @@ -86,7 +77,6 @@ test_that("check results", { "ds.log", "ds.look", "ds.ls", - "ds.lspline", "ds.make", "ds.matrix", "ds.matrixDet", @@ -101,12 +91,9 @@ test_that("check results", { "ds.meanSdGp", "ds.merge", "ds.message", - "ds.metadata", "ds.names", "ds.numNA", - "ds.qlspline", "ds.quantileMean", - "ds.ranksSecure", "ds.rbind", "ds.rBinom", "ds.recodeLevels", @@ -123,9 +110,8 @@ test_that("check results", { "ds.scatterPlot", "ds.seq", "ds.setDefaultOpals", - "ds.setSeed", "ds.skewness", - "ds.sqrt", + "ds.setSeed", "ds.subset", "ds.subsetByClass", "ds.summary", @@ -135,7 +121,6 @@ test_that("check results", { "ds.tapply", "ds.tapply.assign", "ds.testObjExists", - "ds.unique", "ds.unList", "ds.var", "ds.vectorCalc" diff --git a/tests/testthat/test-smk-ds.listDisclosureSettings.R b/tests/testthat/test-smk-ds.listDisclosureSettings.R index e1b13695..556cafb4 100644 --- a/tests/testthat/test-smk-ds.listDisclosureSettings.R +++ b/tests/testthat/test-smk-ds.listDisclosureSettings.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -34,42 +34,36 @@ test_that("check results", { sim2.res <- res$ds.disclosure.settings$sim2 sim3.res <- res$ds.disclosure.settings$sim3 - expect_equal(length(sim1.res), 11) - expect_equal(sim1.res$datashield.privacyControlLevel, 'permissive') + expect_equal(length(sim1.res), 9) expect_equal(sim1.res$nfilter.tab, 3) expect_equal(sim1.res$nfilter.subset, 3) expect_equal(sim1.res$nfilter.glm, 0.33) expect_equal(sim1.res$nfilter.string, 80) expect_equal(sim1.res$nfilter.stringShort, 20) expect_equal(sim1.res$nfilter.kNN, 3) - expect_equal(sim1.res$nfilter.levels.density, 0.33) - expect_equal(sim1.res$nfilter.levels.max, 40) + expect_equal(sim1.res$nfilter.levels, 0.33) expect_equal(sim1.res$nfilter.noise, 0.25) expect_equal(sim1.res$nfilter.privacy.old, 5) - expect_equal(length(sim2.res), 11) - expect_equal(sim2.res$datashield.privacyControlLevel, 'permissive') + expect_equal(length(sim2.res), 9) expect_equal(sim2.res$nfilter.tab, 3) expect_equal(sim2.res$nfilter.subset, 3) expect_equal(sim2.res$nfilter.glm, 0.33) expect_equal(sim2.res$nfilter.string, 80) expect_equal(sim2.res$nfilter.stringShort, 20) expect_equal(sim2.res$nfilter.kNN, 3) - expect_equal(sim2.res$nfilter.levels.density, 0.33) - expect_equal(sim2.res$nfilter.levels.max, 40) + expect_equal(sim2.res$nfilter.levels, 0.33) expect_equal(sim2.res$nfilter.noise, 0.25) expect_equal(sim2.res$nfilter.privacy.old, 5) - expect_equal(length(sim3.res), 11) - expect_equal(sim3.res$datashield.privacyControlLevel, 'permissive') + expect_equal(length(sim3.res), 9) expect_equal(sim3.res$nfilter.tab, 3) expect_equal(sim3.res$nfilter.subset, 3) expect_equal(sim3.res$nfilter.glm, 0.33) expect_equal(sim3.res$nfilter.string, 80) expect_equal(sim3.res$nfilter.stringShort, 20) expect_equal(sim3.res$nfilter.kNN, 3) - expect_equal(sim3.res$nfilter.levels.density, 0.33) - expect_equal(sim3.res$nfilter.levels.max, 40) + expect_equal(sim3.res$nfilter.levels, 0.33) expect_equal(sim3.res$nfilter.noise, 0.25) expect_equal(sim3.res$nfilter.privacy.old, 5) }) diff --git a/tests/testthat/test-smk-ds.listServersideFunctions.R b/tests/testthat/test-smk-ds.listServersideFunctions.R index 4e098b12..2a99ece9 100644 --- a/tests/testthat/test-smk-ds.listServersideFunctions.R +++ b/tests/testthat/test-smk-ds.listServersideFunctions.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -22,33 +21,32 @@ connect.studies.dataset.cnsim(list("LAB_TSC", "LAB_HDL")) context("ds.listServersideFunctions::smk::check results") test_that("check results", { assign.functions <- factor(c( - "BooleDS", "abs", "absDS", "acos", "as.character", "as.null", "as.numeric", "asCharacterDS", "asDataMatrixDS", - "asFactorDS2", "asFactorSimpleDS", "asIntegerDS", "asListDS", "asLogicalDS", "asMatrixDS", - "asNumericDS", "asin", "atan", "attach", "blackBoxRanksDS", "blackBoxRanksDS", "boxPlotGG_data_TreatmentDS", "boxPlotGG_data_Treatment_numericDS", "cDS", + "BooleDS", "as.character", "as.null", "as.numeric", "asCharacterDS", "asDataMatrixDS", + "asFactorDS", "asFactorDS2", "asIntegerDS", "asListDS", "asLogicalDS", "asMatrixDS", + "asMatrixDS", "asNumericDS", "attach", "c", "cDS", "cbind", "cbindDS", "changeRefGroupDS", "completeCasesDS", "complete.cases", "dataFrameDS", "dataFrameFillDS", "dataFrameSortDS", - "dataFrameSubsetDS2", "dataFrameDS", "dmtC2SDS", "exp", "glmPredictDS.as", "glmSLMADS.assign", "glmSummaryDS.as", "glmerSLMADS.assign", - "lexisDS2", "lexisDS3", "list", "listDS", "log", "lsplineDS", + "dataFrameSubsetDS2", "dataFrameDS", "exp", "glmPredictDS.as", "glmSLMADS.assign", "glmSummaryDS.as", + "lexisDS2", "lexisDS3", "list", "listDS", "log", "matrixDS", "matrixDetDS2", "matrixDiagDS", "matrixDimnamesDS", "matrixInvertDS", - "matrixMultDS", "matrixTransposeDS", "mergeDS", "nsDS", "qlsplineDS", "rBinomDS", "rNormDS", "rPoisDS", - "rUnifDS", "ranksSecureDS2", "ranksSecureDS4", "ranksSecureDS5", "rbindDS", "reShapeDS", "recodeLevelsDS", "recodeValuesDS", "repDS", - "replaceNaDS", "rowColCalcDS", "seqDS", "sin", "subsetByClassDS", "subsetDS", "sum", "sampleDS", - "tableDS.assign", "tan", "tapplyDS.assign", "unlist", "unListDS", "vectorDS" + "matrixMultDS", "matrixTransposeDS", "mergeDS", "rBinomDS", "rNormDS", "rPoisDS", + "rUnifDS", "rbindDS", "reShapeDS", "recodeLevelsDS", "recodeValuesDS", "repDS", "rep", + "replaceNaDS", "rowColCalcDS", "seedDS", "seqDS", "subsetByClassDS", "subsetDS", "sum", "sampleDS", + "tableDS.assign", "tapplyDS.assign", "unlist", "unListDS" )) aggregate.functions <- factor(c( - "NROW", "asFactorDS1", "asListDS", "aucDS", + "NROW", "asFactorDS1", "asListDS", "checkNegValueDS", "classDS", "colnamesDS", "corDS", "corTestDS", "covDS", "dataFrameSubsetDS1", - "densityGridDS", "dimDS", "gamlssDS", + "densityGridDS", "dimDS", "exists", "glmDS1", "glmDS1", "glmDS2", "glmDS2", "glmerSLMADS2", "glmPredictDS.ag", "glmSLMADS1", "glmSLMADS2", "glmSummaryDS.ag", "heatmapPlotDS", "histogramDS1", "histogramDS2", "is.character", "is.factor", "is.list", "is.null", "is.numeric", "isNaDS", "isValidDS", "kurtosisDS1", "kurtosisDS2", "lengthDS", "levelsDS", "lexisDS1", "listDisclosureSettingsDS", "lmerSLMADS2", "lsDS", - "matrixDetDS1", "meanDS", "meanSdGpDS", "messageDS", "miceDS", + "matrixDetDS1", "meanDS", "meanSdGpDS", "messageDS", "namesDS", "numNaDS", "quantileMeanDS", "rangeDS", - "ranksSecureDS1", "ranksSecureDS3", "rmDS", "skewnessDS1", "skewnessDS2", "scatterPlotDS", - "scoreVectDS", "setSeedDS", "t.test", + "scoreVectDS", "setSeedDS", "t.test", "tTestFDS2", "table1DDS", "table2DDS", "tableDS", "tableDS2", "tapplyDS", "testObjExistsDS", "varDS" )) diff --git a/tests/testthat/test-smk-ds.lmerSLMA.R b/tests/testthat/test-smk-ds.lmerSLMA.R index c552a65f..8b149c1d 100644 --- a/tests/testthat/test-smk-ds.lmerSLMA.R +++ b/tests/testthat/test-smk-ds.lmerSLMA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -112,7 +112,7 @@ test_that("check slope formulae", { expect_length(res$num.valid.studies, 1) expect_equal(class(res$num.valid.studies), "numeric") expect_length(res$betamatrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.all), 1) expect_true("matrix" %in% class(res$betamatrix.all)) @@ -124,7 +124,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$betamatrix.all)) } expect_length(res$sematrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.all), 1) expect_true("matrix" %in% class(res$sematrix.all)) @@ -136,7 +136,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$sematrix.all)) } expect_length(res$betamatrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.valid), 1) expect_true("matrix" %in% class(res$betamatrix.valid)) @@ -148,7 +148,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$betamatrix.valid)) } expect_length(res$sematrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.valid), 1) expect_true("matrix" %in% class(res$sematrix.valid)) @@ -160,7 +160,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$sematrix.valid)) } expect_length(res$SLMA.pooled.ests.matrix, 18) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$SLMA.pooled.ests.matrix), 1) expect_true("matrix" %in% class(res$SLMA.pooled.ests.matrix)) @@ -184,7 +184,7 @@ test_that("check slope formulae", { expect_length(res$num.valid.studies, 1) expect_equal(class(res$num.valid.studies), "numeric") expect_length(res$betamatrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.all), 1) expect_true("matrix" %in% class(res$betamatrix.all)) @@ -196,7 +196,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$betamatrix.all)) } expect_length(res$sematrix.all, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.all), 1) expect_true("matrix" %in% class(res$sematrix.all)) @@ -208,7 +208,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$sematrix.all)) } expect_length(res$betamatrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$betamatrix.valid), 1) expect_true("matrix" %in% class(res$betamatrix.valid)) @@ -220,7 +220,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$betamatrix.valid)) } expect_length(res$sematrix.valid, 9) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$sematrix.valid), 1) expect_true("matrix" %in% class(res$sematrix.valid)) @@ -232,7 +232,7 @@ test_that("check slope formulae", { expect_true("array" %in% class(res$sematrix.valid)) } expect_length(res$SLMA.pooled.ests.matrix, 18) - if (base::getRversion() < '4.0.0') + if (base::getRversion() < 4.0) { expect_length(class(res$SLMA.pooled.ests.matrix), 1) expect_true("matrix" %in% class(res$SLMA.pooled.ests.matrix)) diff --git a/tests/testthat/test-smk-ds.log.R b/tests/testthat/test-smk-ds.log.R index cd18e6f1..aa8dabc5 100644 --- a/tests/testthat/test-smk-ds.log.R +++ b/tests/testthat/test-smk-ds.log.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.look.R b/tests/testthat/test-smk-ds.look.R index c8167430..76767d8c 100644 --- a/tests/testthat/test-smk-ds.look.R +++ b/tests/testthat/test-smk-ds.look.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.ls.R b/tests/testthat/test-smk-ds.ls.R index 1a9afe3d..cef7631e 100644 --- a/tests/testthat/test-smk-ds.ls.R +++ b/tests/testthat/test-smk-ds.ls.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.lspline.R b/tests/testthat/test-smk-ds.lspline.R deleted file mode 100644 index 9529babd..00000000 --- a/tests/testthat/test-smk-ds.lspline.R +++ /dev/null @@ -1,92 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.lspline::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TRIG", "PM_BMI_CONTINUOUS")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.lspline::smk::test1") -test_that("lspline", { - - ds.lspline(x="D$PM_BMI_CONTINUOUS", knots=c(15,25,35), newobj="lsplineDS", datasources=ds.test_env$connections) - - res.class <- ds.class("lsplineDS", datasources=ds.test_env$connections) - - expect_length(res.class, 3) - expect_equal(res.class$sim1[1], "lspline") - expect_equal(res.class$sim1[2], "matrix") - expect_equal(res.class$sim2[1], "lspline") - expect_equal(res.class$sim2[2], "matrix") - expect_equal(res.class$sim3[1], "lspline") - expect_equal(res.class$sim3[2], "matrix") - - res.mod <- ds.glm(formula = "D$LAB_TRIG~lsplineDS", family='gaussian', datasources=ds.test_env$connections) - - expect_length(res.mod, 13) - expect_equal(res.mod$Nvalid, 7477) - expect_equal(res.mod$Nmissing, 1902) - expect_equal(res.mod$Ntotal, 9379) - expect_length(res.mod$disclosure.risk, 3) - expect_equal(res.mod$disclosure[1], 0) - expect_equal(res.mod$disclosure[3], 0) - expect_equal(res.mod$disclosure[2], 0) - expect_length(res.mod$errorMessage, 3) - expect_equal(res.mod$errorMessage[1], "No errors") - expect_equal(res.mod$errorMessage[2], "No errors") - expect_equal(res.mod$errorMessage[3], "No errors") - expect_equal(res.mod$nsubs, 7477) - expect_equal(res.mod$iter, 3) - expect_true("family" %in% class(res.mod$family)) - expect_equal(res.mod$formula, "D$LAB_TRIG ~ lsplineDS") - expect_true("matrix" %in% class(res.mod$coefficients)) - expect_true("array" %in% class(res.mod$coefficients)) - expect_equal(res.mod$coefficients['(Intercept)','Estimate'], -5.46584429, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS1','Estimate'], 0.42499237, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS2','Estimate'], 0.10396672, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS3','Estimate'], 0.05051422, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS4','Estimate'], 0.24522708, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['(Intercept)','Std. Error'], 1.340072623, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS1','Std. Error'], 0.090653306, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS2','Std. Error'], 0.010498879, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS3','Std. Error'], 0.006418973, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['lsplineDS4','Std. Error'], 0.023139549, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$dev, 16909.8, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$df, 7472) - expect_equal(res.mod$output.information, "SEE TOP OF OUTPUT FOR INFORMATION ON MISSING DATA AND ERROR MESSAGES") - -}) - - - -# -# Done -# - -context("ds.lspline::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "LAB_TRIG", "lsplineDS")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.qlspline::smk::done") diff --git a/tests/testthat/test-smk-ds.make.R b/tests/testthat/test-smk-ds.make.R index 57565fbe..d104ea5e 100644 --- a/tests/testthat/test-smk-ds.make.R +++ b/tests/testthat/test-smk-ds.make.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -33,24 +33,6 @@ test_that("simple make", { expect_equal(res$validity.check, " appears valid in all sources") }) -context("ds.make::smk") -test_that("simple make", { - res <- ds.make("(D$LAB_TSC*10)", "maded.rand") - - expect_length(res, 2) - expect_equal(res$is.object.created, "A data object has been created in all specified data sources") - expect_equal(res$validity.check, " appears valid in all sources") -}) - -context("ds.make::smk") -test_that("simple make", { - res <- ds.make("(D$LAB_TSC)*10", "maded.rand") - - expect_length(res, 2) - expect_equal(res$is.object.created, "A data object has been created in all specified data sources") - expect_equal(res$validity.check, " appears valid in all sources") -}) - # # Done # diff --git a/tests/testthat/test-smk-ds.matrix.R b/tests/testthat/test-smk-ds.matrix.R index c9295bd9..fdf760a8 100644 --- a/tests/testthat/test-smk-ds.matrix.R +++ b/tests/testthat/test-smk-ds.matrix.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.matrixDet.R b/tests/testthat/test-smk-ds.matrixDet.R index 3cf8f8b5..6cc021a6 100644 --- a/tests/testthat/test-smk-ds.matrixDet.R +++ b/tests/testthat/test-smk-ds.matrixDet.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.matrixDet.report.R b/tests/testthat/test-smk-ds.matrixDet.report.R index 5854fbde..4e2c4130 100644 --- a/tests/testthat/test-smk-ds.matrixDet.report.R +++ b/tests/testthat/test-smk-ds.matrixDet.report.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.matrixDiag.R b/tests/testthat/test-smk-ds.matrixDiag.R index 14bc8bab..96e5dd5c 100644 --- a/tests/testthat/test-smk-ds.matrixDiag.R +++ b/tests/testthat/test-smk-ds.matrixDiag.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.matrixDimnames.R b/tests/testthat/test-smk-ds.matrixDimnames.R index f39a0479..55cac3f9 100644 --- a/tests/testthat/test-smk-ds.matrixDimnames.R +++ b/tests/testthat/test-smk-ds.matrixDimnames.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.matrixInvert.R b/tests/testthat/test-smk-ds.matrixInvert.R index b0ab7f41..554ae9d0 100644 --- a/tests/testthat/test-smk-ds.matrixInvert.R +++ b/tests/testthat/test-smk-ds.matrixInvert.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.matrixMult.R b/tests/testthat/test-smk-ds.matrixMult.R index 76ddb9af..5df32dd9 100644 --- a/tests/testthat/test-smk-ds.matrixMult.R +++ b/tests/testthat/test-smk-ds.matrixMult.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.matrixTranspose.R b/tests/testthat/test-smk-ds.matrixTranspose.R index 234fbb38..6a2280f5 100644 --- a/tests/testthat/test-smk-ds.matrixTranspose.R +++ b/tests/testthat/test-smk-ds.matrixTranspose.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.mean.R b/tests/testthat/test-smk-ds.mean.R index be89553c..d87074b9 100644 --- a/tests/testthat/test-smk-ds.mean.R +++ b/tests/testthat/test-smk-ds.mean.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.meanByClass.R b/tests/testthat/test-smk-ds.meanByClass.R index a9d1ef7c..053d7e9b 100644 --- a/tests/testthat/test-smk-ds.meanByClass.R +++ b/tests/testthat/test-smk-ds.meanByClass.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.meanSdGp.R b/tests/testthat/test-smk-ds.meanSdGp.R index 45da49e3..6f07d3d2 100644 --- a/tests/testthat/test-smk-ds.meanSdGp.R +++ b/tests/testthat/test-smk-ds.meanSdGp.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.merge.R b/tests/testthat/test-smk-ds.merge.R index 521483eb..92fc25f9 100644 --- a/tests/testthat/test-smk-ds.merge.R +++ b/tests/testthat/test-smk-ds.merge.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.message.R b/tests/testthat/test-smk-ds.message.R index ec967587..dc3c2510 100644 --- a/tests/testthat/test-smk-ds.message.R +++ b/tests/testthat/test-smk-ds.message.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.metadata.R b/tests/testthat/test-smk-ds.metadata.R deleted file mode 100644 index a3f5329a..00000000 --- a/tests/testthat/test-smk-ds.metadata.R +++ /dev/null @@ -1,124 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.metadata::smk::setup") - -connect.studies.dataset.cnsim(list('LAB_TSC', 'LAB_TRIG', 'LAB_HDL', 'LAB_GLUC_ADJUSTED', 'PM_BMI_CONTINUOUS', 'DIS_CVA', 'MEDI_LPD', 'DIS_DIAB', 'DIS_AMI', 'GENDER', 'PM_BMI_CATEGORICAL')) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.metadata::smk") -test_that("data.frame metadata", { - res <- ds.metadata(x='D') - - if (ds.test_env$driver == "ArmadilloDriver") { - expect_true(all(class(res) %in% c('list'))) - expect_length(res, 3) - expect_length(res$sim1, 2) - expect_true(all(class(res$sim1) %in% c('list'))) - expect_true(all(names(res$sim1) %in% c('names', 'spec', 'class'))) - expect_length(res$sim1$names, 11) - expect_length(res$sim1$class, 1) - expect_length(res$sim2, 2) - expect_true(all(class(res$sim2) %in% c('list'))) - expect_true(all(names(res$sim2) %in% c('names', 'spec', 'class'))) - expect_length(res$sim2$names, 11) - expect_length(res$sim2$class, 1) - expect_length(res$sim3, 2) - expect_true(all(class(res$sim3) %in% c('list'))) - expect_true(all(names(res$sim3) %in% c('names', 'spec', 'class'))) - expect_length(res$sim3$names, 11) - expect_length(res$sim3$class, 1) - } else if (ds.test_env$driver == "OpalDriver") { - expect_true(all(class(res) %in% c('list'))) - expect_length(res, 3) - expect_length(res$sim1, 2) - expect_true(all(class(res$sim1) %in% c('list'))) - expect_true(all(names(res$sim1) %in% c('names', 'spec', 'class'))) - expect_length(res$sim1$names, 11) - expect_length(res$sim1$class, 1) - expect_length(res$sim2, 2) - expect_true(all(class(res$sim2) %in% c('list'))) - expect_true(all(names(res$sim2) %in% c('names', 'spec', 'class'))) - expect_length(res$sim2$names, 11) - expect_length(res$sim2$class, 1) - expect_length(res$sim3, 2) - expect_true(all(class(res$sim3) %in% c('list'))) - expect_true(all(names(res$sim3) %in% c('names', 'spec', 'class'))) - expect_length(res$sim3$names, 11) - expect_length(res$sim3$class, 1) - } -}) - -test_that("column metadata", { - res <- ds.metadata(x='D$LAB_TSC') - - if (ds.test_env$driver == "ArmadilloDriver") { - expect_true(all(class(res) %in% c('list'))) - expect_length(res, 3) - expect_length(res$sim1, 7) - expect_length(res$sim2, 7) - expect_length(res$sim3, 7) - } else if (ds.test_env$driver == "OpalDriver") { - expect_length(res$sim1, 6) - expect_true(all(class(res$sim1) %in% c('list'))) - expect_true(all(names(res$sim1) %in% c('label', 'opal.value_type', 'opal.entity_type', 'opal.repeatable', 'opal.index', 'opal.nature'))) - expect_length(res$sim1$label, 1) - expect_length(res$sim1$opal.value_type, 1) - expect_length(res$sim1$opal.entity_type, 1) - expect_length(res$sim1$opal.repeatable, 1) - expect_length(res$sim1$opal.index, 1) - expect_length(res$sim1$opal.nature, 1) - expect_length(res$sim2, 6) - expect_true(all(class(res$sim2) %in% c('list'))) - expect_true(all(names(res$sim2) %in% c('label', 'opal.value_type', 'opal.entity_type', 'opal.repeatable', 'opal.index', 'opal.nature'))) - expect_length(res$sim2$label, 1) - expect_length(res$sim2$opal.value_type, 1) - expect_length(res$sim2$opal.entity_type, 1) - expect_length(res$sim2$opal.repeatable, 1) - expect_length(res$sim2$opal.index, 1) - expect_length(res$sim2$opal.nature, 1) - expect_length(res$sim3, 6) - expect_true(all(class(res$sim3) %in% c('list'))) - expect_true(all(names(res$sim3) %in% c('label', 'opal.value_type', 'opal.entity_type', 'opal.repeatable', 'opal.index', 'opal.nature'))) - expect_length(res$sim3$label, 1) - expect_length(res$sim3$opal.value_type, 1) - expect_length(res$sim3$opal.entity_type, 1) - expect_length(res$sim3$opal.repeatable, 1) - expect_length(res$sim3$opal.index, 1) - expect_length(res$sim3$opal.nature, 1) - } else { - fail(message = "Unknown driver type", info = ds.test_env$driver) - } -}) - -# -# Tear down -# - -context("ds.metadata::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.metadata::smk::done") diff --git a/tests/testthat/test-smk-ds.mice.R b/tests/testthat/test-smk-ds.mice.R deleted file mode 100644 index 802cf866..00000000 --- a/tests/testthat/test-smk-ds.mice.R +++ /dev/null @@ -1,138 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.mice::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TSC","LAB_TRIG","LAB_HDL","LAB_GLUC_ADJUSTED", - "PM_BMI_CONTINUOUS","DIS_CVA","MEDI_LPD","DIS_DIAB", - "DIS_AMI","GENDER","PM_BMI_CATEGORICAL")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.mice::smk::imp1") -test_that("mice, initial imputation", { - initialImp <- ds.mice(data="D", m=1, method=NULL, predictorMatrix=NULL, post=NULL, seed="NA", - newobj_df='impSet') - - expect_length(initialImp, 3) - expect_length(initialImp$sim1, 3) - expect_length(initialImp$sim2, 3) - expect_length(initialImp$sim3, 3) - expect_true("character" %in% class(initialImp$sim1$method)) - expect_equal(as.character(initialImp$sim1$method), c("pmm","pmm","pmm","pmm","pmm","","","","","","polyreg")) - expect_true("matrix" %in% class(initialImp$sim1$predictorMatrix)) - expect_true("array" %in% class(initialImp$sim1$predictorMatrix)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,1]), c(0,1,1,1,1,1,1,1,1,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,2]), c(1,0,1,1,1,1,1,1,1,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,3]), c(1,1,0,1,1,1,1,1,1,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,4]), c(1,1,1,0,1,1,1,1,1,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,5]), c(1,1,1,1,0,1,1,1,1,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,6]), c(0,0,0,0,0,0,0,0,0,0,0)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,7]), c(1,1,1,1,1,1,0,1,1,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,8]), c(1,1,1,1,1,1,1,0,1,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,9]), c(1,1,1,1,1,1,1,1,0,1,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,10]), c(1,1,1,1,1,1,1,1,1,0,1)) - expect_equal(as.numeric(initialImp$sim1$predictorMatrix[,11]), c(1,1,1,1,1,1,1,1,1,1,0)) - expect_true("character" %in% class(initialImp$sim1$post)) - expect_equal(as.character(initialImp$sim1$post), c("","","","","","","","","","","")) - - numNA_bmi <- ds.numNA('impSet.1$PM_BMI_CONTINUOUS') - expect_equal(numNA_bmi$sim1, 0) - expect_equal(numNA_bmi$sim2, 0) - expect_equal(numNA_bmi$sim3, 0) - -}) - -context("ds.mice::smk::imp2") -test_that("mice, second imputation", { - - initialImp <- ds.mice(data="D", m=1, method=NULL, predictorMatrix=NULL, post=NULL, seed="NA", - newobj_df='impSet') - - method <- initialImp$sim1$method - method["LAB_TRIG"] <- "norm" - predictorMatrix <- initialImp$sim1$predictorMatrix - predictorMatrix[,"LAB_GLUC_ADJUSTED"] <- 0 - post <- initialImp$sim1$post - post["PM_BMI_CONTINUOUS"] <- "imp[[j]][, i] <- squeeze(imp[[j]][, i], c(15,35))" - - newImp <- ds.mice(data='D', m=5, maxit=10, method=method, post=post, - predictorMatrix=predictorMatrix, seed=NA, - newobj_df='imp_new', newobj_mids='mids_new') - - expect_length(newImp, 3) - expect_length(newImp$sim1, 3) - expect_length(newImp$sim2, 3) - expect_length(newImp$sim3, 3) - expect_true("character" %in% class(newImp$sim1$method)) - expect_equal(as.character(newImp$sim1$method), c("pmm","norm","pmm","pmm","pmm","","","","","","polyreg")) - expect_true("matrix" %in% class(newImp$sim1$predictorMatrix)) - expect_true("array" %in% class(newImp$sim1$predictorMatrix)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,1]), c(0,1,1,1,1,1,1,1,1,1,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,2]), c(1,0,1,1,1,1,1,1,1,1,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,3]), c(1,1,0,1,1,1,1,1,1,1,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,4]), c(0,0,0,0,0,0,0,0,0,0,0)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,5]), c(1,1,1,1,0,1,1,1,1,1,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,6]), c(0,0,0,0,0,0,0,0,0,0,0)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,7]), c(1,1,1,1,1,1,0,1,1,1,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,8]), c(1,1,1,1,1,1,1,0,1,1,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,9]), c(1,1,1,1,1,1,1,1,0,1,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,10]), c(1,1,1,1,1,1,1,1,1,0,1)) - expect_equal(as.numeric(newImp$sim1$predictorMatrix[,11]), c(1,1,1,1,1,1,1,1,1,1,0)) - expect_true("character" %in% class(newImp$sim1$post)) - expect_equal(as.character(newImp$sim1$post), c("","","","","imp[[j]][,i]<-squeeze(imp[[j]][,i],c(15,35))","","","","","","")) - - numNA_bmi.1 <- ds.numNA('imp_new.1$PM_BMI_CONTINUOUS') - expect_equal(numNA_bmi.1$sim1, 0) - expect_equal(numNA_bmi.1$sim2, 0) - expect_equal(numNA_bmi.1$sim3, 0) - numNA_bmi.2 <- ds.numNA('imp_new.2$PM_BMI_CONTINUOUS') - expect_equal(numNA_bmi.2$sim1, 0) - expect_equal(numNA_bmi.2$sim2, 0) - expect_equal(numNA_bmi.2$sim3, 0) - numNA_bmi.3 <- ds.numNA('imp_new.3$PM_BMI_CONTINUOUS') - expect_equal(numNA_bmi.3$sim1, 0) - expect_equal(numNA_bmi.3$sim2, 0) - expect_equal(numNA_bmi.3$sim3, 0) - numNA_bmi.4 <- ds.numNA('imp_new.4$PM_BMI_CONTINUOUS') - expect_equal(numNA_bmi.4$sim1, 0) - expect_equal(numNA_bmi.4$sim2, 0) - expect_equal(numNA_bmi.4$sim3, 0) - numNA_bmi.5 <- ds.numNA('imp_new.5$PM_BMI_CONTINUOUS') - expect_equal(numNA_bmi.5$sim1, 0) - expect_equal(numNA_bmi.5$sim2, 0) - expect_equal(numNA_bmi.5$sim3, 0) - -}) - -# -# Done -# - -context("ds.mice::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "impSet.1", "imp_new.1","imp_new.2","imp_new.3","imp_new.4","imp_new.5", - "mids_new","mids_object")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.mice::smk::done") diff --git a/tests/testthat/test-smk-ds.names.R b/tests/testthat/test-smk-ds.names.R index 97f3fef9..9158693b 100644 --- a/tests/testthat/test-smk-ds.names.R +++ b/tests/testthat/test-smk-ds.names.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -14,7 +14,7 @@ context("ds.names::smk::setup") -connect.studies.dataset.cnsim(list("LAB_TSC", "DIS_DIAB", "PM_BMI_CONTINUOUS", "LAB_HDL", "GENDER")) +connect.studies.dataset.cnsim(list("DIS_DIAB","PM_BMI_CONTINUOUS","LAB_HDL", "GENDER")) test_that("setup", { ds_expect_variables(c("D")) diff --git a/tests/testthat/test-smk-ds.ns.R b/tests/testthat/test-smk-ds.ns.R deleted file mode 100644 index a1f66c79..00000000 --- a/tests/testthat/test-smk-ds.ns.R +++ /dev/null @@ -1,96 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.ns::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TRIG", "PM_BMI_CONTINUOUS")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.ns::smk::test1") -test_that("ns", { - - ds.ns(x="D$PM_BMI_CONTINUOUS", knots=c(15,25,35), newobj="nsDS", datasources=ds.test_env$connections) - - res.class <- ds.class("nsDS", datasources=ds.test_env$connections) - - expect_length(res.class, 3) - expect_equal(res.class$sim1[1], "ns") - expect_equal(res.class$sim1[2], "basis") - expect_equal(res.class$sim1[3], "matrix") - expect_equal(res.class$sim2[1], "ns") - expect_equal(res.class$sim2[2], "basis") - expect_equal(res.class$sim2[3], "matrix") - expect_equal(res.class$sim3[1], "ns") - expect_equal(res.class$sim3[2], "basis") - expect_equal(res.class$sim3[3], "matrix") - - - res.mod <- ds.glm(formula = "D$LAB_TRIG~nsDS", family='gaussian', datasources=ds.test_env$connections) - - expect_length(res.mod, 13) - expect_equal(res.mod$Nvalid, 7477) - expect_equal(res.mod$Nmissing, 1902) - expect_equal(res.mod$Ntotal, 9379) - expect_length(res.mod$disclosure.risk, 3) - expect_equal(res.mod$disclosure[1], 0) - expect_equal(res.mod$disclosure[3], 0) - expect_equal(res.mod$disclosure[2], 0) - expect_length(res.mod$errorMessage, 3) - expect_equal(res.mod$errorMessage[1], "No errors") - expect_equal(res.mod$errorMessage[2], "No errors") - expect_equal(res.mod$errorMessage[3], "No errors") - expect_equal(res.mod$nsubs, 7477) - expect_equal(res.mod$iter, 3) - expect_true("family" %in% class(res.mod$family)) - expect_equal(res.mod$formula, "D$LAB_TRIG ~ nsDS") - expect_true("matrix" %in% class(res.mod$coefficients)) - expect_true("array" %in% class(res.mod$coefficients)) - expect_equal(res.mod$coefficients['(Intercept)','Estimate'], -0.1844121, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS1','Estimate'], 2.4510178, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS2','Estimate'], 1.8749516, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS3','Estimate'], 5.9260697, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS4','Estimate'], 6.3067806, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['(Intercept)','Std. Error'], 0.4190860, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS1','Std. Error'], 0.3972526, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS2','Std. Error'], 0.3097700, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS3','Std. Error'], 0.8376620, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['nsDS4','Std. Error'], 0.4078086, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$dev, 16938.36, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$df, 7472) - expect_equal(res.mod$output.information, "SEE TOP OF OUTPUT FOR INFORMATION ON MISSING DATA AND ERROR MESSAGES") - -}) - - - -# -# Done -# - -context("ds.ns::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "LAB_TRIG", "nsDS")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.ns::smk::done") diff --git a/tests/testthat/test-smk-ds.numNA.R b/tests/testthat/test-smk-ds.numNA.R index ed332d7a..81df1efe 100644 --- a/tests/testthat/test-smk-ds.numNA.R +++ b/tests/testthat/test-smk-ds.numNA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.qlspline.R b/tests/testthat/test-smk-ds.qlspline.R deleted file mode 100644 index 2c55b0d5..00000000 --- a/tests/testthat/test-smk-ds.qlspline.R +++ /dev/null @@ -1,141 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.qlspline::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TRIG", "PM_BMI_CONTINUOUS")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.qlspline::smk::test1") -test_that("qlspline", { - - ds.qlspline(x="D$PM_BMI_CONTINUOUS", q=4, na.rm=TRUE, newobj="qlsplineDS", datasources=ds.test_env$connections) - - res.class <- ds.class("qlsplineDS", datasources=ds.test_env$connections) - - expect_length(res.class, 3) - expect_equal(res.class$sim1[1], "lspline") - expect_equal(res.class$sim1[2], "matrix") - expect_equal(res.class$sim2[1], "lspline") - expect_equal(res.class$sim2[2], "matrix") - expect_equal(res.class$sim3[1], "lspline") - expect_equal(res.class$sim3[2], "matrix") - - res.mod <- ds.glm(formula = "D$LAB_TRIG~qlsplineDS", family='gaussian', datasources=ds.test_env$connections) - - expect_length(res.mod, 13) - expect_equal(res.mod$Nvalid, 7477) - expect_equal(res.mod$Nmissing, 1902) - expect_equal(res.mod$Ntotal, 9379) - expect_length(res.mod$disclosure.risk, 3) - expect_equal(res.mod$disclosure[1], 0) - expect_equal(res.mod$disclosure[3], 0) - expect_equal(res.mod$disclosure[2], 0) - expect_length(res.mod$errorMessage, 3) - expect_equal(res.mod$errorMessage[1], "No errors") - expect_equal(res.mod$errorMessage[2], "No errors") - expect_equal(res.mod$errorMessage[3], "No errors") - expect_equal(res.mod$nsubs, 7477) - expect_equal(res.mod$iter, 3) - expect_true("family" %in% class(res.mod$family)) - expect_equal(res.mod$formula, "D$LAB_TRIG ~ qlsplineDS") - expect_true("matrix" %in% class(res.mod$coefficients)) - expect_true("array" %in% class(res.mod$coefficients)) - expect_equal(res.mod$coefficients['(Intercept)','Estimate'], -1.019282794, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS1','Estimate'], 0.120196255, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS2','Estimate'], 0.067803329, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS3','Estimate'], 0.006651009, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS4','Estimate'], 0.133116769, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['(Intercept)','Std. Error'], 0.27768921, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS1','Std. Error'], 0.01259812, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS2','Std. Error'], 0.02097099, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS3','Std. Error'], 0.02072403, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS4','Std. Error'], 0.01201930, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$dev, 17000.26, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$df, 7472) - expect_equal(res.mod$output.information, "SEE TOP OF OUTPUT FOR INFORMATION ON MISSING DATA AND ERROR MESSAGES") - -}) - - -context("ds.qlspline::smk::test2") -test_that("qlspline", { - - ds.qlspline(x="D$PM_BMI_CONTINUOUS", q=c(0.3,0.6), na.rm=TRUE, newobj="qlsplineDS2", datasources=ds.test_env$connections) - - res.class <- ds.class("qlsplineDS2", datasources=ds.test_env$connections) - - expect_length(res.class, 3) - expect_equal(res.class$sim1[1], "lspline") - expect_equal(res.class$sim1[2], "matrix") - expect_equal(res.class$sim2[1], "lspline") - expect_equal(res.class$sim2[2], "matrix") - expect_equal(res.class$sim3[1], "lspline") - expect_equal(res.class$sim3[2], "matrix") - - res.mod <- ds.glm(formula = "D$LAB_TRIG~qlsplineDS2", family='gaussian', datasources=ds.test_env$connections) - - expect_length(res.mod, 13) - expect_equal(res.mod$Nvalid, 7477) - expect_equal(res.mod$Nmissing, 1902) - expect_equal(res.mod$Ntotal, 9379) - expect_length(res.mod$disclosure.risk, 3) - expect_equal(res.mod$disclosure[1], 0) - expect_equal(res.mod$disclosure[3], 0) - expect_equal(res.mod$disclosure[2], 0) - expect_length(res.mod$errorMessage, 3) - expect_equal(res.mod$errorMessage[1], "No errors") - expect_equal(res.mod$errorMessage[2], "No errors") - expect_equal(res.mod$errorMessage[3], "No errors") - expect_equal(res.mod$nsubs, 7477) - expect_equal(res.mod$iter, 3) - expect_true("family" %in% class(res.mod$family)) - expect_equal(res.mod$formula, "D$LAB_TRIG ~ qlsplineDS2") - expect_true("matrix" %in% class(res.mod$coefficients)) - expect_true("array" %in% class(res.mod$coefficients)) - expect_equal(res.mod$coefficients['(Intercept)','Estimate'], -1.04058508, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS21','Estimate'], 0.12128692, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS22','Estimate'], 0.01708104, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS23','Estimate'], 0.10189071, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['(Intercept)','Std. Error'], 0.248311459, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS21','Std. Error'], 0.010959394, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS22','Std. Error'], 0.015233708, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$coefficients['qlsplineDS23','Std. Error'], 0.008551969, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$dev, 17031.72, tolerance = ds.test_env$tolerance) - expect_equal(res.mod$df, 7473) - expect_equal(res.mod$output.information, "SEE TOP OF OUTPUT FOR INFORMATION ON MISSING DATA AND ERROR MESSAGES") - -}) - - -# -# Done -# - -context("ds.qlspline::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "LAB_TRIG", "qlsplineDS", "qlsplineDS2")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.qlspline::smk::done") diff --git a/tests/testthat/test-smk-ds.quantileMean.R b/tests/testthat/test-smk-ds.quantileMean.R index 59c5479d..0c9e4ad3 100644 --- a/tests/testthat/test-smk-ds.quantileMean.R +++ b/tests/testthat/test-smk-ds.quantileMean.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -25,9 +25,9 @@ test_that("setup", { # context("ds.quantileMean::smk::standard") -test_that("quantileMean", { - res <- ds.quantileMean(x='D$LAB_HDL') +res <- ds.quantileMean(x='D$LAB_HDL') +test_that("quantileMean", { expect_length(res, 8) expect_equal(res[[1]], 0.8678198, tolerance = .000001) expect_equal(res[[2]], 1.0388227, tolerance = .000001) @@ -40,10 +40,9 @@ test_that("quantileMean", { }) context("ds.quantileMean::smk::split") +ds.assign("D$LAB_HDL", "hdl") +res <- ds.quantileMean(x='hdl', type='split') test_that("quantileMean_split", { - ds.assign("D$LAB_HDL", "hdl") - res <- ds.quantileMean(x='hdl', type='split') - expect_length(res, 3) expect_length(res$sim1, 8) expect_equal(res$sim1[[1]], 0.875240, tolerance = .000001) diff --git a/tests/testthat/test-smk-ds.rBinom.R b/tests/testthat/test-smk-ds.rBinom.R index 000f4183..280246f7 100644 --- a/tests/testthat/test-smk-ds.rBinom.R +++ b/tests/testthat/test-smk-ds.rBinom.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.rNorm.R b/tests/testthat/test-smk-ds.rNorm.R index 9996db9a..98a504e6 100644 --- a/tests/testthat/test-smk-ds.rNorm.R +++ b/tests/testthat/test-smk-ds.rNorm.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.rPois.R b/tests/testthat/test-smk-ds.rPois.R index 38ebe55c..d6e8880f 100644 --- a/tests/testthat/test-smk-ds.rPois.R +++ b/tests/testthat/test-smk-ds.rPois.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.rUnif.R b/tests/testthat/test-smk-ds.rUnif.R index 3682a0c3..bad1abf8 100644 --- a/tests/testthat/test-smk-ds.rUnif.R +++ b/tests/testthat/test-smk-ds.rUnif.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.ranksSecure.R b/tests/testthat/test-smk-ds.ranksSecure.R deleted file mode 100644 index 890ac263..00000000 --- a/tests/testthat/test-smk-ds.ranksSecure.R +++ /dev/null @@ -1,130 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.ranksSecure::smk::setup") - -connect.studies.dataset.cnsim(list("LAB_TRIG", "LAB_TSC")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.ranksSecure::smk::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_length(res, 2) - expect_length(class(res), 1) - expect_true(all(class(res) %in% c('data.frame'))) - expect_length(names(res), 2) - expect_true(all(names(res) %in% c('evaluation.quantiles', 'final.quantile.vector'))) - - expect_length(res$evaluation.quantiles, 15) - expect_length(class(res$evaluation.quantiles), 1) - expect_true(all(class(res$evaluation.quantiles) %in% c('numeric'))) - expect_length(res$final.quantile.vector, 15) - expect_length(class(res$final.quantile.vector), 1) - expect_true(all(class(res$final.quantile.vector) %in% c('numeric'))) -}) - -context("ds.ranksSecure::smk::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_length(res, 2) - expect_length(class(res), 1) - expect_true(all(class(res) %in% c('data.frame'))) - expect_length(names(res), 2) - expect_true(all(names(res) %in% c('evaluation.quantiles', 'final.quantile.vector'))) - - expect_length(res$evaluation.quantiles, 15) - expect_length(class(res$evaluation.quantiles), 1) - expect_true(all(class(res$evaluation.quantiles) %in% c('numeric'))) - expect_length(res$final.quantile.vector, 15) - expect_length(class(res$final.quantile.vector), 1) - expect_true(all(class(res$final.quantile.vector) %in% c('numeric'))) -}) - -context("ds.ranksSecure::smk::continous, with NAs, all positive") -test_that("continous, with NAs, all positive", { - res <- ds.ranksSecure("D$LAB_TSC") - - expect_length(res, 2) - expect_length(class(res), 1) - expect_true(all(class(res) %in% c('data.frame'))) - expect_length(names(res), 2) - expect_true(all(names(res) %in% c('evaluation.quantiles', 'final.quantile.vector'))) - - expect_length(res$evaluation.quantiles, 15) - expect_length(class(res$evaluation.quantiles), 1) - expect_true(all(class(res$evaluation.quantiles) %in% c('numeric'))) - expect_length(res$final.quantile.vector, 15) - expect_length(class(res$final.quantile.vector), 1) - expect_true(all(class(res$final.quantile.vector) %in% c('numeric'))) -}) - -context("ds.ranksSecure::smk::continous, with NAs, with negative") -test_that("continous, with NAs, with negative", { - res <- ds.ranksSecure("D$LAB_TRIG") - - expect_length(res, 2) - expect_length(class(res), 1) - expect_true(all(class(res) %in% c('data.frame'))) - expect_length(names(res), 2) - expect_true(all(names(res) %in% c('evaluation.quantiles', 'final.quantile.vector'))) - - expect_length(res$evaluation.quantiles, 15) - expect_length(class(res$evaluation.quantiles), 1) - expect_true(all(class(res$evaluation.quantiles) %in% c('numeric'))) - expect_length(res$final.quantile.vector, 15) - expect_length(class(res$final.quantile.vector), 1) - expect_true(all(class(res$final.quantile.vector) %in% c('numeric'))) -}) - - -# -# Done -# - -context("ds.ranksSecure::smk::shutdown") - -test_that("setup", { - ds_expect_variables(c("D", "CC_LAB_TSC", "CC_LAB_TRIG", "final.quantile.df", "summary.ranks.df", "testvar.ranks")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.ranksSecure::smk::done") diff --git a/tests/testthat/test-smk-ds.rbind.R b/tests/testthat/test-smk-ds.rbind.R index 20cc910c..a524d901 100644 --- a/tests/testthat/test-smk-ds.rbind.R +++ b/tests/testthat/test-smk-ds.rbind.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.reShape.R b/tests/testthat/test-smk-ds.reShape.R index 5b96a861..62014567 100644 --- a/tests/testthat/test-smk-ds.reShape.R +++ b/tests/testthat/test-smk-ds.reShape.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.recodeLevels.R b/tests/testthat/test-smk-ds.recodeLevels.R index cdc3d787..41312853 100644 --- a/tests/testthat/test-smk-ds.recodeLevels.R +++ b/tests/testthat/test-smk-ds.recodeLevels.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -26,7 +26,7 @@ test_that("setup", { context("ds.recodeLevels::smk") test_that("new levels", { - expect_warning(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=c('normal', 'overweight', 'obesity'), newobj='bmi_new'), "'ds.recodeLevels' is deprecated.\nUse 'ds.recodeValues' instead.", fixed = TRUE) + ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=c('normal', 'overweight', 'obesity'), newobj='bmi_new') levels <- ds.levels(x='bmi_new') expected <- c("normal", "overweight", "obesity") @@ -41,7 +41,7 @@ test_that("new levels", { context("ds.recodeLevels::smk::no connections or newobj") test_that("new levels auto", { - expect_warning(ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=c('normal', 'overweight', 'obesity')), "'ds.recodeLevels' is deprecated.\nUse 'ds.recodeValues' instead.", fixed = TRUE) + ds.recodeLevels(x='D$PM_BMI_CATEGORICAL', newCategories=c('normal', 'overweight', 'obesity')) levels <- ds.levels(x='PM_BMI_CATEGORICAL_new') expected <- c("normal", "overweight", "obesity") diff --git a/tests/testthat/test-smk-ds.recodeValues.R b/tests/testthat/test-smk-ds.recodeValues.R index 187ec63d..7e7e82de 100644 --- a/tests/testthat/test-smk-ds.recodeValues.R +++ b/tests/testthat/test-smk-ds.recodeValues.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.rep-complex.R b/tests/testthat/test-smk-ds.rep-complex.R index 1a42fdbc..a7296a0e 100644 --- a/tests/testthat/test-smk-ds.rep-complex.R +++ b/tests/testthat/test-smk-ds.rep-complex.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.rep.R b/tests/testthat/test-smk-ds.rep.R index c65cba69..a7b1daf6 100644 --- a/tests/testthat/test-smk-ds.rep.R +++ b/tests/testthat/test-smk-ds.rep.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.replaceNA.R b/tests/testthat/test-smk-ds.replaceNA.R index 9aad07fe..153f0d0e 100644 --- a/tests/testthat/test-smk-ds.replaceNA.R +++ b/tests/testthat/test-smk-ds.replaceNA.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.rm.R b/tests/testthat/test-smk-ds.rm.R index 75be387a..cccb0b12 100644 --- a/tests/testthat/test-smk-ds.rm.R +++ b/tests/testthat/test-smk-ds.rm.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.rowColCalc.R b/tests/testthat/test-smk-ds.rowColCalc.R index 002d763d..b254c589 100644 --- a/tests/testthat/test-smk-ds.rowColCalc.R +++ b/tests/testthat/test-smk-ds.rowColCalc.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.sample.R b/tests/testthat/test-smk-ds.sample.R index 8a251e3b..956eca1b 100644 --- a/tests/testthat/test-smk-ds.sample.R +++ b/tests/testthat/test-smk-ds.sample.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -44,22 +44,22 @@ test_that("simple test", { expect_length(res1_colnames, 3) expect_length(res1_colnames$survival1, 6) - expect_true(all(res1_colnames$survival1[1] %in% c("time.id", "survtime"))) - expect_true(all(res1_colnames$survival1[2] %in% c("time.id", "survtime"))) + expect_equal(res1_colnames$survival1[1], "time.id") + expect_equal(res1_colnames$survival1[2], "survtime") expect_equal(res1_colnames$survival1[3], "female") expect_equal(res1_colnames$survival1[4], "in.sample") expect_equal(res1_colnames$survival1[5], "ID.seq") expect_equal(res1_colnames$survival1[6], "sampling.order") expect_length(res1_colnames$survival2, 6) - expect_true(all(res1_colnames$survival3[1] %in% c("time.id", "survtime"))) - expect_true(all(res1_colnames$survival3[2] %in% c("time.id", "survtime"))) + expect_equal(res1_colnames$survival2[1], "time.id") + expect_equal(res1_colnames$survival2[2], "survtime") expect_equal(res1_colnames$survival2[3], "female") expect_equal(res1_colnames$survival2[4], "in.sample") expect_equal(res1_colnames$survival2[5], "ID.seq") expect_equal(res1_colnames$survival2[6], "sampling.order") expect_length(res1_colnames$survival3, 6) - expect_true(all(res1_colnames$survival3[1] %in% c("time.id", "survtime"))) - expect_true(all(res1_colnames$survival3[2] %in% c("time.id", "survtime"))) + expect_equal(res1_colnames$survival3[1], "time.id") + expect_equal(res1_colnames$survival3[2], "survtime") expect_equal(res1_colnames$survival3[3], "female") expect_equal(res1_colnames$survival3[4], "in.sample") expect_equal(res1_colnames$survival3[5], "ID.seq") @@ -122,9 +122,9 @@ test_that("simple test, error", { res.errors <- DSI::datashield.errors() expect_length(res.errors, 3) - expect_match(res.errors$survival1, "* Error : FAILED: if sampling without replacement size must be less than or equal to length\\(x\\)*") - expect_match(res.errors$survival2, "* Error : FAILED: if sampling without replacement size must be less than or equal to length\\(x\\)*") - expect_match(res.errors$survival3, "* Error : FAILED: if sampling without replacement size must be less than or equal to length\\(x\\)*") + expect_equal(res.errors$survival1, "Command 'sampleDS(x.transmit = \"D$survtime\", size.transmit = \"30\", replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'survival1': Error while evaluating 'is.null(base::assign('no.obj', value={dsBase::sampleDS(x.transmit = \"D$survtime\", size.transmit = \"30\", replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: if sampling without replacement size must be less than or equal to length(x)\n", fixed=TRUE) + expect_equal(res.errors$survival2, "Command 'sampleDS(x.transmit = \"D$survtime\", size.transmit = \"30\", replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'survival2': Error while evaluating 'is.null(base::assign('no.obj', value={dsBase::sampleDS(x.transmit = \"D$survtime\", size.transmit = \"30\", replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: if sampling without replacement size must be less than or equal to length(x)\n", fixed=TRUE) + expect_equal(res.errors$survival3, "Command 'sampleDS(x.transmit = \"D$survtime\", size.transmit = \"30\", replace.transmit = FALSE, \n prob.transmit = NULL)' failed on 'survival3': Error while evaluating 'is.null(base::assign('no.obj', value={dsBase::sampleDS(x.transmit = \"D$survtime\", size.transmit = \"30\", replace.transmit = FALSE, prob.transmit = NULL)}))' -> Error : FAILED: if sampling without replacement size must be less than or equal to length(x)\n", fixed=TRUE) }) # diff --git a/tests/testthat/test-smk-ds.seq.R b/tests/testthat/test-smk-ds.seq.R index f44c7e46..a199a453 100644 --- a/tests/testthat/test-smk-ds.seq.R +++ b/tests/testthat/test-smk-ds.seq.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.setSeed.R b/tests/testthat/test-smk-ds.setSeed.R index eadf7fe1..515a8bd8 100644 --- a/tests/testthat/test-smk-ds.setSeed.R +++ b/tests/testthat/test-smk-ds.setSeed.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.skewness.R b/tests/testthat/test-smk-ds.skewness.R index e607b9a9..818ff6ff 100644 --- a/tests/testthat/test-smk-ds.skewness.R +++ b/tests/testthat/test-smk-ds.skewness.R @@ -1,6 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -35,9 +34,9 @@ test_that("simple skewness, method 1, split, on LAB_TSC", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.188034458112999"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.145513907236103"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.352576848495665"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.188034458112999") + expect_equal(skewness.res$Skewness[2], "0.145513907236103") + expect_equal(skewness.res$Skewness[3], "0.352576848495665") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1807") expect_equal(skewness.res$Nvalid[2], "2539") @@ -55,9 +54,9 @@ test_that("simple skewness, method 1, split, on LAB_TRIG", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.32820558565826"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.220887697425414"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.105433229814455"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.32820558565826") + expect_equal(skewness.res$Skewness[2], "0.220887697425414") + expect_equal(skewness.res$Skewness[3], "0.105433229814455") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1801") expect_equal(skewness.res$Nvalid[2], "2526") @@ -75,9 +74,9 @@ test_that("simple skewness, method 1, split, on LAB_HDL", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("-0.257771315950979"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("-0.206165733408786"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("-0.322356008145192"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness[1], "-0.257771315950979") + expect_equal(skewness.res$Skewness[2], "-0.206165733408786") + expect_equal(skewness.res$Skewness[3], "-0.322356008145192") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1803") expect_equal(skewness.res$Nvalid[2], "2533") @@ -95,9 +94,9 @@ test_that("simple skewness, method 1, split, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("1.09805173411495"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("1.11035058496889"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.979387780725702"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "1.09805173411495") + expect_equal(skewness.res$Skewness[2], "1.11035058496889") + expect_equal(skewness.res$Skewness[3], "0.979387780725702") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1822") expect_equal(skewness.res$Nvalid[2], "2583") @@ -115,9 +114,9 @@ test_that("simple skewness, method 1, split, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.211695333017453"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.0914245797002757"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.031209342768676"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.211695333017453") + expect_equal(skewness.res$Skewness[2], "0.0914245797002757") + expect_equal(skewness.res$Skewness[3], "0.031209342768676") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "2066") expect_equal(skewness.res$Nvalid[2], "2938") @@ -136,7 +135,7 @@ test_that("simple skewness, combine, on LAB_TSC", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.246567206666354"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.246567206666354") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7825") expect_length(skewness.res$ValidityMessage, 1) @@ -150,7 +149,7 @@ test_that("simple skewness, method 1, combine, on LAB_TRIG", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.197724380225568"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.197724380225568") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7800") expect_length(skewness.res$ValidityMessage, 1) @@ -164,7 +163,7 @@ test_that("simple skewness, method 1, combine, on LAB_HDL", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("-0.269960357921624"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness[1], "-0.269960357921624") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7809") expect_length(skewness.res$ValidityMessage, 1) @@ -178,7 +177,7 @@ test_that("simple skewness, method 1, combine, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("1.05104981283397"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "1.05104981283397") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7924") expect_length(skewness.res$ValidityMessage, 1) @@ -192,7 +191,7 @@ test_that("simple skewness, method 1, combine, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.0960670927351586"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.0960670927351586") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "8927") expect_length(skewness.res$ValidityMessage, 1) @@ -208,9 +207,9 @@ test_that("simple skewness, both, on LAB_TSC", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.188034458112999"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.145513907236103"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.352576848495665"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.188034458112999") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.145513907236103") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.352576848495665") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1807") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2539") @@ -221,7 +220,7 @@ test_that("simple skewness, both, on LAB_TSC", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.246567206666354"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.246567206666354") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7825") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -236,9 +235,9 @@ test_that("simple skewness, method 1, both, on LAB_TRIG", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.32820558565826"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.220887697425414"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.105433229814455"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.32820558565826") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.220887697425414") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.105433229814455") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1801") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2526") @@ -249,7 +248,7 @@ test_that("simple skewness, method 1, both, on LAB_TRIG", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.197724380225568"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.197724380225568") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7800") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -264,9 +263,9 @@ test_that("simple skewness, method 1, both, on LAB_HDL", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("-0.257771315950979"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("-0.206165733408786"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("-0.322356008145192"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "-0.257771315950979") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "-0.206165733408786") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "-0.322356008145192") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1803") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2533") @@ -277,7 +276,7 @@ test_that("simple skewness, method 1, both, on LAB_HDL", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("-0.269960357921624"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "-0.269960357921624") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7809") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -292,9 +291,9 @@ test_that("simple skewness, method 1, both, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("1.09805173411495"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("1.11035058496889"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.979387780725702"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "1.09805173411495") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "1.11035058496889") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.979387780725702") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1822") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2583") @@ -305,7 +304,7 @@ test_that("simple skewness, method 1, both, on LAB_GLUC_ADJUSTED", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("1.05104981283397"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "1.05104981283397") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7924") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -320,9 +319,9 @@ test_that("simple skewness, method 1, both, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.211695333017453"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.0914245797002757"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.031209342768676"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.211695333017453") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.0914245797002757") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.031209342768676") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "2066") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2938") @@ -333,7 +332,7 @@ test_that("simple skewness, method 1, both, on PM_BMI_CONTINUOUS", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.0960670927351586"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.0960670927351586") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "8927") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -350,9 +349,9 @@ test_that("simple skewness, method 2, split, on LAB_TSC", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.188190712227239"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.145599939437722"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.352728948755338"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.188190712227239") + expect_equal(skewness.res$Skewness[2], "0.145599939437722") + expect_equal(skewness.res$Skewness[3], "0.352728948755338") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1807") expect_equal(skewness.res$Nvalid[2], "2539") @@ -370,9 +369,9 @@ test_that("simple skewness, method 2, split, on LAB_TRIG", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.328479229678695"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.221018965497232"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.10547879191455"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.328479229678695") + expect_equal(skewness.res$Skewness[2], "0.221018965497232") + expect_equal(skewness.res$Skewness[3], "0.10547879191455") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1801") expect_equal(skewness.res$Nvalid[2], "2526") @@ -390,9 +389,9 @@ test_that("simple skewness, method 2, split, on LAB_HDL", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("-0.257985996183054"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("-0.206287913742296"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("-0.322495311633619"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness[1], "-0.257985996183054") + expect_equal(skewness.res$Skewness[2], "-0.206287913742296") + expect_equal(skewness.res$Skewness[3], "-0.322495311633619") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1803") expect_equal(skewness.res$Nvalid[2], "2533") @@ -410,9 +409,9 @@ test_that("simple skewness, method 2, split, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("1.09895668040486"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("1.11099586669437"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.979805479581792"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "1.09895668040486") + expect_equal(skewness.res$Skewness[2], "1.11099586669437") + expect_equal(skewness.res$Skewness[3], "0.979805479581792") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1822") expect_equal(skewness.res$Nvalid[2], "2583") @@ -430,9 +429,9 @@ test_that("simple skewness, method 2, split, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.21184917516287"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.0914712871182399"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.0312212818198342"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.21184917516287") + expect_equal(skewness.res$Skewness[2], "0.0914712871182399") + expect_equal(skewness.res$Skewness[3], "0.0312212818198342") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "2066") expect_equal(skewness.res$Nvalid[2], "2938") @@ -451,7 +450,7 @@ test_that("simple skewness, combine, on LAB_TSC", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.246614483525739"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.246614483525739") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7825") expect_length(skewness.res$ValidityMessage, 1) @@ -465,7 +464,7 @@ test_that("simple skewness, method 2, combine, on LAB_TRIG", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.197762413490697"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.197762413490697") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7800") expect_length(skewness.res$ValidityMessage, 1) @@ -479,7 +478,7 @@ test_that("simple skewness, method 2, combine, on LAB_HDL", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("-0.270012226272502"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness[1], "-0.270012226272502") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7809") expect_length(skewness.res$ValidityMessage, 1) @@ -493,7 +492,7 @@ test_that("simple skewness, method 2, combine, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("1.05124882294985"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "1.05124882294985") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7924") expect_length(skewness.res$ValidityMessage, 1) @@ -507,7 +506,7 @@ test_that("simple skewness, method 2, combine, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.0960832383143017"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.0960832383143017") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "8927") expect_length(skewness.res$ValidityMessage, 1) @@ -523,9 +522,9 @@ test_that("simple skewness, both, on LAB_TSC", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.188190712227239"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.145599939437722"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.352728948755338"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.188190712227239") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.145599939437722") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.352728948755338") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1807") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2539") @@ -536,7 +535,7 @@ test_that("simple skewness, both, on LAB_TSC", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.246614483525739"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.246614483525739") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7825") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -551,9 +550,9 @@ test_that("simple skewness, method 2, both, on LAB_TRIG", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.328479229678695"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.221018965497232"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.10547879191455"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.328479229678695") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.221018965497232") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.10547879191455") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1801") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2526") @@ -564,7 +563,7 @@ test_that("simple skewness, method 2, both, on LAB_TRIG", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.197762413490697"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.197762413490697") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7800") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -579,9 +578,9 @@ test_that("simple skewness, method 2, both, on LAB_HDL", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("-0.257985996183054"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("-0.206287913742296"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("-0.322495311633619"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "-0.257985996183054") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "-0.206287913742296") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "-0.322495311633619") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1803") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2533") @@ -592,7 +591,7 @@ test_that("simple skewness, method 2, both, on LAB_HDL", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("-0.270012226272502"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "-0.270012226272502") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7809") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -607,9 +606,9 @@ test_that("simple skewness, method 2, both, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("1.09895668040486"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("1.11099586669437"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.979805479581792"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "1.09895668040486") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "1.11099586669437") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.979805479581792") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1822") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2583") @@ -620,7 +619,7 @@ test_that("simple skewness, method 2, both, on LAB_GLUC_ADJUSTED", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("1.05124882294985"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "1.05124882294985") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7924") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -635,9 +634,9 @@ test_that("simple skewness, method 2, both, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.21184917516287"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.0914712871182399"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.0312212818198342"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.21184917516287") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.0914712871182399") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.0312212818198342") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "2066") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2938") @@ -648,7 +647,7 @@ test_that("simple skewness, method 2, both, on PM_BMI_CONTINUOUS", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.0960832383143017"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.0960832383143017") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "8927") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -665,9 +664,9 @@ test_that("simple skewness, method 3, split, on LAB_TSC", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.187878391338523"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.145427948446175"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.352424842957634"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.187878391338523") + expect_equal(skewness.res$Skewness[2], "0.145427948446175") + expect_equal(skewness.res$Skewness[3], "0.352424842957634") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1807") expect_equal(skewness.res$Nvalid[2], "2539") @@ -685,9 +684,9 @@ test_that("simple skewness, method 3, split, on LAB_TRIG", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.327932270814304"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.220756541941702"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.105387696137537"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.327932270814304") + expect_equal(skewness.res$Skewness[2], "0.220756541941702") + expect_equal(skewness.res$Skewness[3], "0.105387696137537") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1801") expect_equal(skewness.res$Nvalid[2], "2526") @@ -705,9 +704,9 @@ test_that("simple skewness, method 3, split, on LAB_HDL", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("-0.257556893679228"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("-0.206043657579281"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("-0.322216791558985"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness[1], "-0.257556893679228") + expect_equal(skewness.res$Skewness[2], "-0.206043657579281") + expect_equal(skewness.res$Skewness[3], "-0.322216791558985") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1803") expect_equal(skewness.res$Nvalid[2], "2533") @@ -725,9 +724,9 @@ test_that("simple skewness, method 3, split, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("1.09714786387241"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("1.10970584448638"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.978970339038204"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "1.09714786387241") + expect_equal(skewness.res$Skewness[2], "1.10970584448638") + expect_equal(skewness.res$Skewness[3], "0.978970339038204") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "1822") expect_equal(skewness.res$Nvalid[2], "2583") @@ -745,9 +744,9 @@ test_that("simple skewness, method 3, split, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.211541652198686"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[2]), as.double("0.0913779067255815"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness[3]), as.double("0.031197410311189"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.211541652198686") + expect_equal(skewness.res$Skewness[2], "0.0913779067255815") + expect_equal(skewness.res$Skewness[3], "0.031197410311189") expect_length(skewness.res$Nvalid, 3) expect_equal(skewness.res$Nvalid[1], "2066") expect_equal(skewness.res$Nvalid[2], "2938") @@ -766,7 +765,7 @@ test_that("simple skewness, combine, on LAB_TSC", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.246519942897225"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.246519942897225") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7825") expect_length(skewness.res$ValidityMessage, 1) @@ -780,7 +779,7 @@ test_that("simple skewness, method 3, combine, on LAB_TRIG", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.197686357525035"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.197686357525035") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7800") expect_length(skewness.res$ValidityMessage, 1) @@ -794,7 +793,7 @@ test_that("simple skewness, method 3, combine, on LAB_HDL", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("-0.269908503961744"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness[1], "-0.269908503961744") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7809") expect_length(skewness.res$ValidityMessage, 1) @@ -808,7 +807,7 @@ test_that("simple skewness, method 3, combine, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("1.05085085713259"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "1.05085085713259") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "7924") expect_length(skewness.res$ValidityMessage, 1) @@ -822,7 +821,7 @@ test_that("simple skewness, method 3, combine, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 3) expect_length(skewness.res$Skewness, 1) - expect_equal(as.double(skewness.res$Skewness[1]), as.double("0.0960509510746345"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness[1], "0.0960509510746345") expect_length(skewness.res$Nvalid, 1) expect_equal(skewness.res$Nvalid[1], "8927") expect_length(skewness.res$ValidityMessage, 1) @@ -838,9 +837,9 @@ test_that("simple skewness, both, on LAB_TSC", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.187878391338523"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.145427948446175"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.352424842957634"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.187878391338523") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.145427948446175") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.352424842957634") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1807") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2539") @@ -851,7 +850,7 @@ test_that("simple skewness, both, on LAB_TSC", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.246519942897225"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.246519942897225") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7825") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -866,9 +865,9 @@ test_that("simple skewness, method 3, both, on LAB_TRIG", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.327932270814304"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.220756541941702"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.105387696137537"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.327932270814304") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.220756541941702") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.105387696137537") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1801") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2526") @@ -879,7 +878,7 @@ test_that("simple skewness, method 3, both, on LAB_TRIG", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.197686357525035"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.197686357525035") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7800") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -894,9 +893,9 @@ test_that("simple skewness, method 3, both, on LAB_HDL", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("-0.257556893679228"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("-0.206043657579281"), tolerance = ds.test_env$low_tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("-0.322216791558985"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "-0.257556893679228") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "-0.206043657579281") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "-0.322216791558985") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1803") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2533") @@ -907,7 +906,7 @@ test_that("simple skewness, method 3, both, on LAB_HDL", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("-0.269908503961744"), tolerance = ds.test_env$low_tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "-0.269908503961744") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7809") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -922,9 +921,9 @@ test_that("simple skewness, method 3, both, on LAB_GLUC_ADJUSTED", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("1.09714786387241"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("1.10970584448638"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.978970339038204"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "1.09714786387241") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "1.10970584448638") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.978970339038204") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "1822") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2583") @@ -935,7 +934,7 @@ test_that("simple skewness, method 3, both, on LAB_GLUC_ADJUSTED", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("1.05085085713259"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "1.05085085713259") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "7924") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) @@ -950,9 +949,9 @@ test_that("simple skewness, method 3, both, on PM_BMI_CONTINUOUS", { expect_length(skewness.res, 2) expect_length(skewness.res$Skewness.by.Study, 3) expect_length(skewness.res$Skewness.by.Study$Skewness, 3) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[1]), as.double("0.211541652198686"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[2]), as.double("0.0913779067255815"), tolerance = ds.test_env$tolerance) - expect_equal(as.double(skewness.res$Skewness.by.Study$Skewness[3]), as.double("0.031197410311189"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Skewness.by.Study$Skewness[1], "0.211541652198686") + expect_equal(skewness.res$Skewness.by.Study$Skewness[2], "0.0913779067255815") + expect_equal(skewness.res$Skewness.by.Study$Skewness[3], "0.031197410311189") expect_length(skewness.res$Skewness.by.Study$Nvalid, 3) expect_equal(skewness.res$Skewness.by.Study$Nvalid[1], "2066") expect_equal(skewness.res$Skewness.by.Study$Nvalid[2], "2938") @@ -963,7 +962,7 @@ test_that("simple skewness, method 3, both, on PM_BMI_CONTINUOUS", { expect_equal(skewness.res$Skewness.by.Study$ValidityMessage[3], "VALID ANALYSIS") expect_length(skewness.res$Global.Skewness, 3) expect_length(skewness.res$Global.Skewness$Skewness, 1) - expect_equal(as.double(skewness.res$Global.Skewness$Skewness[1]), as.double("0.0960509510746345"), tolerance = ds.test_env$tolerance) + expect_equal(skewness.res$Global.Skewness$Skewness[1], "0.0960509510746345") expect_length(skewness.res$Global.Skewness$Nvalid, 1) expect_equal(skewness.res$Global.Skewness$Nvalid[1], "8927") expect_length(skewness.res$Global.Skewness$ValidityMessage, 1) diff --git a/tests/testthat/test-smk-ds.sqrt.R b/tests/testthat/test-smk-ds.sqrt.R index 9c106c73..1c2a7e22 100644 --- a/tests/testthat/test-smk-ds.sqrt.R +++ b/tests/testthat/test-smk-ds.sqrt.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.subset.R b/tests/testthat/test-smk-ds.subset.R index cc19a71a..e8778e3d 100644 --- a/tests/testthat/test-smk-ds.subset.R +++ b/tests/testthat/test-smk-ds.subset.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.subsetByClass.R b/tests/testthat/test-smk-ds.subsetByClass.R index 95bf16eb..fd1a32db 100644 --- a/tests/testthat/test-smk-ds.subsetByClass.R +++ b/tests/testthat/test-smk-ds.subsetByClass.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.summary.R b/tests/testthat/test-smk-ds.summary.R index fd39b021..5672f9cd 100644 --- a/tests/testthat/test-smk-ds.summary.R +++ b/tests/testthat/test-smk-ds.summary.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -23,24 +23,6 @@ test_that("setup", { # # Tests # -context("ds.summary::smk::summary of a dataframe variable") -test_that("summary_dataframe_variable", { - res <- ds.summary(x='D') - - expect_length(res, 3) - expect_true(all(res$sim1$class %in% c("tbl_df", "tbl", "data.frame"))) - expect_true(all(res$sim2$class %in% c("tbl_df", "tbl", "data.frame"))) - expect_true(all(res$sim3$class %in% c("tbl_df", "tbl", "data.frame"))) - expect_equal(res$sim1$`number of rows`, 2163) - expect_equal(res$sim2$`number of rows`, 3088) - expect_equal(res$sim3$`number of rows`, 4128) - expect_equal(res$sim1$`number of columns`, 11) - expect_equal(res$sim2$`number of columns`, 11) - expect_equal(res$sim3$`number of columns`, 11) - expect_length(res$sim1$`variables held`, 11) - expect_length(res$sim2$`variables held`, 11) - expect_length(res$sim3$`variables held`, 11) -}) context("ds.summary::smk::summary of a numerical variable") test_that("summary_numerical_variable", { @@ -110,8 +92,7 @@ context("ds.summary::smk::summary of a data frame") test_that("summary_data_frame", { res <- ds.summary(x='D') - expect_gte(length(res$sim1$class), 1) - expect_true("data.frame" %in% res$sim1$class) + expect_equal(res$sim1$class, "data.frame") expect_equal(res$sim2$`number of rows`, 3088) expect_equal(res$sim2$`number of columns`, 11) expect_equal(res$sim3$`variables held`[[11]], "PM_BMI_CATEGORICAL") diff --git a/tests/testthat/test-smk-ds.table.R b/tests/testthat/test-smk-ds.table.R index bae8aae4..7b044b0e 100644 --- a/tests/testthat/test-smk-ds.table.R +++ b/tests/testthat/test-smk-ds.table.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -24,7 +24,7 @@ test_that("setup", { # context("ds.table::smk::dataframe setup") -test_that("simple dataframe input setup", { +test_that("simple table 2D", { ds.asFactor(input.var.name="D$FACTOR_CHARACTER", newobj.name="factorCharacter") ds.asFactor(input.var.name="D$FACTOR_INTEGER", newobj.name="factorInteger") ds.asFactor(input.var.name="D$CATEGORY", newobj.name="factorCategory") @@ -38,7 +38,7 @@ test_that("simple dataframe input setup", { expect_equal(subset.res$validity.check, " appears valid in all sources") }) -context("ds.table::smk::simple table 1D") +context("ds.table::smk") test_that("simple table 1D", { table1.res <- ds.table(rvar='tablesource_subset$factorCharacter') @@ -53,7 +53,7 @@ test_that("simple table 1D", { expect_equal(table1.res$validity.message, "Data in all studies were valid") }) -context("ds.table::smk::simple table 2D") +context("ds.table::smk") test_that("simple table 2D", { table1.res <- ds.table(rvar='tablesource_subset$factorInteger', cvar='tablesource_subset$factorCharacter') @@ -75,7 +75,7 @@ test_that("simple table 2D", { expect_equal(table1.res$validity.message, "Data in all studies were valid") }) -context("ds.table::smk::simple table 3D") +context("ds.table::smk") test_that("simple table 3D", { expect_error(ds.table(rvar='tablesource_subset$factorInteger', cvar='tablesource_subset$factorCharacter', stvar='tablesource_subset$factorCategory'), "There are some DataSHIELD errors, list them with datashield.errors()", fixed = TRUE) @@ -83,8 +83,8 @@ test_that("simple table 3D", { expect_length(res.errors, 2) - expect_match(res.errors$study1, "* Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3*") - expect_match(res.errors$study2, "* Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3*") + expect_equal(res.errors$study1, "Command 'tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", \n stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", \n cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", \n stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", \n exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' failed on 'study1': Error while evaluating 'dsBase::tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' -> Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3\n", fixed = TRUE) + expect_equal(res.errors$study2, "Command 'tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", \n stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", \n cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", \n stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", \n exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' failed on 'study2': Error while evaluating 'dsBase::tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' -> Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3\n", fixed = TRUE) }) test_that("simple table 1D, with assign", { @@ -133,8 +133,8 @@ test_that("simple table 3D, with assign", { expect_length(res.errors, 2) - expect_match(res.errors$study1, "* Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3*") - expect_match(res.errors$study2, "* Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3*") + expect_equal(res.errors$study1, "Command 'tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", \n stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", \n cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", \n stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", \n exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' failed on 'study1': Error while evaluating 'dsBase::tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' -> Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3\n", fixed = TRUE) + expect_equal(res.errors$study2, "Command 'tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", \n stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", \n cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", \n stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", \n exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' failed on 'study2': Error while evaluating 'dsBase::tableDS(rvar.transmit = \"tablesource_subset$factorInteger\", cvar.transmit = \"tablesource_subset$factorCharacter\", stvar.transmit = \"tablesource_subset$factorCategory\", rvar.all.unique.levels.transmit = \"0,1,2,3,4,5\", cvar.all.unique.levels.transmit = \"married,divorced,single,widowed,in_civil_relationship\", stvar.all.unique.levels.transmit = \"100,200,300,400,500,600\", exclude.transmit = NULL, useNA.transmit = \"ifany\", force.nfilter.transmit = NULL)' -> Error : Failed: at least one cell has a non-zero count less than nfilter.tab i.e. 3\n", fixed = TRUE) }) # diff --git a/tests/testthat/test-smk-ds.table1D.R b/tests/testthat/test-smk-ds.table1D.R index 013cdf32..243359bc 100644 --- a/tests/testthat/test-smk-ds.table1D.R +++ b/tests/testthat/test-smk-ds.table1D.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -25,18 +25,16 @@ test_that("setup", { # context("ds.table1D::smk::generate a one dimensional table, outputting combined contingency tables") +res <- ds.table1D(x='D$GENDER') test_that("GENDER_normal", { - res <- expect_warning(ds.table1D(x='D$GENDER'), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) - expect_equal(res$validity, "All tables are valid!") expect_equal(res$counts[2], 4611) expect_equal(res$counts[3], 9379) }) context("ds.table1D::smk::generate a one dimensional table, outputting combined contingency tables fail") +res <- ds.table1D(x='D$DIS_CVA') test_that("DIS_CVA_invalid", { - res <- expect_warning(ds.table1D(x='D$DIS_CVA'), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) - expect_length(res, 3) expect_equal(class(res), "list") expect_length(res$counts, 3) @@ -46,9 +44,8 @@ test_that("DIS_CVA_invalid", { }) context("ds.table1D::smk::generate a one dimensional table, outputting combined contingency tables fail split") +res <- ds.table1D(x='D$DIS_CVA', type="split") test_that("DIS_CVA_invalid_split", { - res <- expect_warning(ds.table1D(x='D$DIS_CVA', type="split"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) - expect_length(res, 3) expect_equal(class(res), "list") expect_length(res$counts, 3) @@ -58,9 +55,8 @@ test_that("DIS_CVA_invalid_split", { }) context("ds.table1D::smk::generate a one dimensional table, outputting study specific contingency tables") +res <- ds.table1D(x='D$GENDER', type="split") test_that("GENDER_split", { - res <- expect_warning(ds.table1D(x='D$GENDER', type="split"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) - expect_equal(res$validity, "All tables are valid!") expect_equal(res$counts$sim1[1], 1092) expect_equal(res$counts$sim2[2], 1503) @@ -68,9 +64,8 @@ test_that("GENDER_split", { }) context("ds.table1D::smk::generate a one dimensional table, outputting study specific contingency tables for study 1 and 2") +res <- ds.table1D(datasources=ds.test_env$connections[1:2], x='D$GENDER', type="split") test_that("GENDER_split_12", { - res <- expect_warning(ds.table1D(datasources=ds.test_env$connections[1:2], x='D$GENDER', type="split"), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) - expect_equal(res$validity, "All tables are valid!") expect_equal(res$counts$sim1[1], 1092) expect_equal(res$counts$sim2[2], 1503) @@ -78,9 +73,8 @@ test_that("GENDER_split_12", { }) context("ds.table1D::smk::generate a one dimensional table, outputting study specific and combined contingency tables") +res <- ds.table1D(datasources=ds.test_env$connections, x='D$GENDER') test_that("GENDER_normal_2", { - res <- expect_warning(ds.table1D(datasources=ds.test_env$connections, x='D$GENDER'), "'ds.table1D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) - expect_equal(res$validity, "All tables are valid!") expect_equal(res$counts[2], 4611) expect_equal(res$counts[3], 9379) diff --git a/tests/testthat/test-smk-ds.table2D.R b/tests/testthat/test-smk-ds.table2D.R index 09fc859c..d6b46dbe 100644 --- a/tests/testthat/test-smk-ds.table2D.R +++ b/tests/testthat/test-smk-ds.table2D.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. @@ -26,7 +26,7 @@ test_that("setup", { context("ds.table2D::smk") test_that("simple table2D", { - table2D.res <- expect_warning(ds.table2D(x='D$DIS_DIAB', y='D$GENDER'), "'ds.table2D' is deprecated.\nUse 'ds.table' instead.", fixed = TRUE) + table2D.res <- ds.table2D(x='D$DIS_DIAB', y='D$GENDER') expect_length(table2D.res, 9) expect_length(table2D.res$colPercent, 3) diff --git a/tests/testthat/test-smk-ds.tapply.R b/tests/testthat/test-smk-ds.tapply.R index b79876ff..872a687e 100644 --- a/tests/testthat/test-smk-ds.tapply.R +++ b/tests/testthat/test-smk-ds.tapply.R @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------- # Copyright (c) 2014 OBiBa, -# 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# 2019-2021 University of 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. @@ -118,14 +118,14 @@ test_that("simplest 'ds.tapply', fun=quantile", { expect_length(list, 3) expect_length(list$sim1, 2) - expect_length(list$sim1$GENDER.1, 15) - expect_length(list$sim1$GENDER.2, 15) + expect_length(list$sim1$`0`, 15) + expect_length(list$sim1$`1`, 15) expect_length(list$sim2, 2) - expect_length(list$sim2$GENDER.1, 15) - expect_length(list$sim2$GENDER.2, 15) + expect_length(list$sim2$`0`, 15) + expect_length(list$sim2$`1`, 15) expect_length(list$sim3, 2) - expect_length(list$sim3$GENDER.1, 15) - expect_length(list$sim3$GENDER.2, 15) + expect_length(list$sim3$`0`, 15) + expect_length(list$sim3$`1`, 15) }) # diff --git a/tests/testthat/test-smk-ds.tapply.assign.R b/tests/testthat/test-smk-ds.tapply.assign.R index ba13f39d..e03a5d41 100644 --- a/tests/testthat/test-smk-ds.tapply.assign.R +++ b/tests/testthat/test-smk-ds.tapply.assign.R @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------- # Copyright (c) 2014 OBiBa, -# 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# 2019-2021 University of 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. @@ -38,10 +38,10 @@ test_that("simplest 'ds.tapply.assign', fun=mean", { res.length <- ds.length("fun_mean.newobj") expect_length(res.length, 4) - expect_equal(res.length$`length of fun_mean.newobj in sim1`, 2) - expect_equal(res.length$`length of fun_mean.newobj in sim2`, 2) - expect_equal(res.length$`length of fun_mean.newobj in sim3`, 2) - expect_equal(res.length$`total length of fun_mean.newobj in all studies combined`, 6) + expect_equal(res.length$`length of fun_mean.newobj in sim1`, 1) + expect_equal(res.length$`length of fun_mean.newobj in sim2`, 1) + expect_equal(res.length$`length of fun_mean.newobj in sim3`, 1) + expect_equal(res.length$`total length of fun_mean.newobj in all studies combined`, 3) }) context("ds.tapply.assign::smk::fun=sd") @@ -54,10 +54,10 @@ test_that("simplest 'ds.tapply.assign', fun=sd", { res.length <- ds.length("fun_sd.newobj") expect_length(res.length, 4) - expect_equal(res.length$`length of fun_sd.newobj in sim1`, 2) - expect_equal(res.length$`length of fun_sd.newobj in sim2`, 2) - expect_equal(res.length$`length of fun_sd.newobj in sim3`, 2) - expect_equal(res.length$`total length of fun_sd.newobj in all studies combined`, 6) + expect_equal(res.length$`length of fun_sd.newobj in sim1`, 1) + expect_equal(res.length$`length of fun_sd.newobj in sim2`, 1) + expect_equal(res.length$`length of fun_sd.newobj in sim3`, 1) + expect_equal(res.length$`total length of fun_sd.newobj in all studies combined`, 3) }) context("ds.tapply.assign::smk::fun=sum") @@ -70,10 +70,10 @@ test_that("simplest 'ds.tapply.assign', fun=sum", { res.length <- ds.length("fun_sum.newobj") expect_length(res.length, 4) - expect_equal(res.length$`length of fun_sum.newobj in sim1`, 2) - expect_equal(res.length$`length of fun_sum.newobj in sim2`, 2) - expect_equal(res.length$`length of fun_sum.newobj in sim3`, 2) - expect_equal(res.length$`total length of fun_sum.newobj in all studies combined`, 6) + expect_equal(res.length$`length of fun_sum.newobj in sim1`, 1) + expect_equal(res.length$`length of fun_sum.newobj in sim2`, 1) + expect_equal(res.length$`length of fun_sum.newobj in sim3`, 1) + expect_equal(res.length$`total length of fun_sum.newobj in all studies combined`, 3) }) context("ds.tapply.assign::smk::fun=quantile") @@ -86,10 +86,10 @@ test_that("simplest 'ds.tapply.assign', fun=quantile", { res.length <- ds.length("fun_quantile.newobj") expect_length(res.length, 4) - expect_equal(res.length$`length of fun_quantile.newobj in sim1`, 2) - expect_equal(res.length$`length of fun_quantile.newobj in sim2`, 2) - expect_equal(res.length$`length of fun_quantile.newobj in sim3`, 2) - expect_equal(res.length$`total length of fun_quantile.newobj in all studies combined`, 6) + expect_equal(res.length$`length of fun_quantile.newobj in sim1`, 1) + expect_equal(res.length$`length of fun_quantile.newobj in sim2`, 1) + expect_equal(res.length$`length of fun_quantile.newobj in sim3`, 1) + expect_equal(res.length$`total length of fun_quantile.newobj in all studies combined`, 3) }) # diff --git a/tests/testthat/test-smk-ds.testObjExists-discordant.R b/tests/testthat/test-smk-ds.testObjExists-discordant.R index a7d89a3e..25efc32a 100644 --- a/tests/testthat/test-smk-ds.testObjExists-discordant.R +++ b/tests/testthat/test-smk-ds.testObjExists-discordant.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.testObjExists.R b/tests/testthat/test-smk-ds.testObjExists.R index 5b2b2c38..fad02b5d 100644 --- a/tests/testthat/test-smk-ds.testObjExists.R +++ b/tests/testthat/test-smk-ds.testObjExists.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.unList.R b/tests/testthat/test-smk-ds.unList.R index 98fbaa98..19143c94 100644 --- a/tests/testthat/test-smk-ds.unList.R +++ b/tests/testthat/test-smk-ds.unList.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.unique.R b/tests/testthat/test-smk-ds.unique.R deleted file mode 100644 index 9aca375c..00000000 --- a/tests/testthat/test-smk-ds.unique.R +++ /dev/null @@ -1,62 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.unique::smk::setup") - -connect.studies.dataset.cnsim(list("GENDER")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -context("ds.unique::smk::simple test") -test_that("simple test", { - original.newobj.length <- ds.length("D$GENDER") - - expect_length(original.newobj.length, 4) - expect_equal(original.newobj.length$`length of D$GENDER in sim1`, 2163) - expect_equal(original.newobj.length$`length of D$GENDER in sim2`, 3088) - expect_equal(original.newobj.length$`length of D$GENDER in sim3`, 4128) - expect_equal(original.newobj.length$`total length of D$GENDER in all studies combined`, 9379) - - res <- ds.unique("D$GENDER") - - expect_length(res, 0) - - unique.newobj.length <- ds.length("unique.newobj") - - expect_length(unique.newobj.length, 4) - expect_equal(unique.newobj.length$`length of unique.newobj in sim1`, 2) - expect_equal(unique.newobj.length$`length of unique.newobj in sim2`, 2) - expect_equal(unique.newobj.length$`length of unique.newobj in sim3`, 2) - expect_equal(unique.newobj.length$`total length of unique.newobj in all studies combined`, 6) -}) - -# -# Done -# - -context("ds.unique::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D", "unique.newobj")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.unique::smk::done") diff --git a/tests/testthat/test-smk-ds.var.R b/tests/testthat/test-smk-ds.var.R index bc2aceb6..12e3b180 100644 --- a/tests/testthat/test-smk-ds.var.R +++ b/tests/testthat/test-smk-ds.var.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk-ds.vectorCalc.R b/tests/testthat/test-smk-ds.vectorCalc.R index e318c747..ec427b0d 100644 --- a/tests/testthat/test-smk-ds.vectorCalc.R +++ b/tests/testthat/test-smk-ds.vectorCalc.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -27,7 +27,7 @@ test_that("setup", { context("ds.vectorCalc::smk") test_that("simple test", { vectors <- c('D$LAB_TSC', 'D$LAB_HDL') - res <- expect_warning(ds.vectorCalc(x=vectors, calc='+'), "'ds.vectorCalc' is deprecated.\nUse 'ds.make' instead.", fixed = TRUE) + res <- ds.vectorCalc(x=vectors, calc='+') expect_length(res, 0) diff --git a/tests/testthat/test-smk-isDefined.R b/tests/testthat/test-smk-isDefined.R deleted file mode 100644 index 5f37b0aa..00000000 --- a/tests/testthat/test-smk-isDefined.R +++ /dev/null @@ -1,274 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. -# Copyright (c) 2022 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("isDefined::smk::setup") - -connect.discordant.dataset.simple(list("A", "B", "C")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -# default - -context("isDefined::smk::default") -test_that("default test, dataframe D", { - res <- isDefined(ds.test_env$connections, "D") - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("default test, dataframe E", { - expect_error(isDefined(ds.test_env$connections, "E"), "The input object E is not defined in discordant1, discordant2, discordant3!", fixed=TRUE) -}) - -test_that("default test, dataframe column E$A", { -# expect_error(isDefined(ds.test_env$connections, "E$A"), "The input object E$A is not defined in discordant1, discordant2, discordant3!", fixed=TRUE) - expect_error(isDefined(ds.test_env$connections, "E$A"), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) - - err <- DSI::datashield.errors(); - - expect_length(class(err), 1) - expect_true(all("list" %in% class(err))) - expect_length(err, 3) - expect_match(err$discordant1, "* : object 'E' not found") - expect_match(err$discordant2, "* : object 'E' not found") - expect_match(err$discordant3, "* : object 'E' not found") -}) - -test_that("default test, dataframe column D$A", { - expect_error(isDefined(ds.test_env$connections, "D$A"), "The input object D$A is not defined in discordant3!", fixed=TRUE) -}) - -test_that("default test, dataframe column D$B", { - expect_error(isDefined(ds.test_env$connections, "D$B"), "The input object D$B is not defined in discordant2!", fixed=TRUE) -}) - -test_that("default test, dataframe column D$C", { - expect_error(isDefined(ds.test_env$connections, "D$C"), "The input object D$C is not defined in discordant1!", fixed=TRUE) -}) - -test_that("default test, dataframe column D$D", { - expect_error(isDefined(ds.test_env$connections, "D$D"), "The input object D$D is not defined in discordant1, discordant2, discordant3!", fixed=TRUE) -}) - -test_that("default test, dataframe columns D,D$B", { -# expect_error(isDefined(ds.test_env$connections, c("D","D$A")), "The input object D$A is not defined in discordant3!", fixed=TRUE) - res <- isDefined(ds.test_env$connections, c("D","D$A")) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("default test, dataframe columns D$A,D$B", { - expect_error(isDefined(ds.test_env$connections, c("D$A","D$B")), "The input object D$A is not defined in discordant3!", fixed=TRUE) -}) - -# error.message = FALSE - -context("isDefined::smk::error.message=FALSE") -test_that("error.message=FALSE test, dataframe D", { - res <- isDefined(ds.test_env$connections, "D", error.message = FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("error.message=FALSE test, dataframe E", { - res <- isDefined(ds.test_env$connections, "E", error.message = FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_false(res$discordant1) - expect_false(res$discordant2) - expect_false(res$discordant3) -}) - -test_that("error.message=FALSE test, dataframe column E$A", { -# expect_error(isDefined(ds.test_env$connections, "E$A", error.message = FALSE), "The input object E$A is not defined in discordant1, discordant2, discordant3!", fixed=TRUE) - expect_error(isDefined(ds.test_env$connections, "E$A", error.message = FALSE), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) - - err <- DSI::datashield.errors(); - - expect_length(class(err), 1) - expect_true(all("list" %in% class(err))) - expect_length(err, 3) - expect_match(err$discordant1, "* : object 'E' not found") - expect_match(err$discordant2, "* : object 'E' not found") - expect_match(err$discordant3, "* : object 'E' not found") -}) - -test_that("error.message=FALSE test, dataframe column D$A", { - res <- isDefined(ds.test_env$connections, "D$A", error.message = FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_false(res$discordant3) -}) - -test_that("error.message=FALSE test, dataframe column D$B", { - res <- isDefined(ds.test_env$connections, "D$B", error.message = FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_false(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("error.message=FALSE test, dataframe column D$C", { - res <- isDefined(ds.test_env$connections, "D$C", error.message = FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_false(res$discordant1) - expect_true(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("error.message=FALSE test, dataframe column D$D", { - res <- isDefined(ds.test_env$connections, "D$D", error.message = FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_false(res$discordant1) - expect_false(res$discordant2) - expect_false(res$discordant3) -}) - -test_that("error.message=FALSE test, dataframe columns D,D$B", { -# expect_error(isDefined(ds.test_env$connections, c("D","D$A")), "The input object D$A is not defined in discordant3!", fixed=TRUE) - res <- isDefined(ds.test_env$connections, c("D","D$A"), error.message=FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("error.message=FALSE test, dataframe columns D$A,D$B", { - res <- isDefined(ds.test_env$connections, c("D$A","D$B"), error.message=FALSE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_false(res$discordant3) -}) - -# error.message = TRUE - -context("isDefined::smk::error.message=TRUE") -test_that("error.message=TRUE test, dataframe D", { - res <- isDefined(ds.test_env$connections, "D", error.message = TRUE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("error.message=TRUE test, dataframe E", { - expect_error(isDefined(ds.test_env$connections, "E", error.message = TRUE), "The input object E is not defined in discordant1, discordant2, discordant3!", fixed=TRUE) -}) - -test_that("error.message=TRUE test, dataframe column E$A", { -# expect_error(isDefined(ds.test_env$connections, "E$A", error.message = TRUE), "The input object E$A is not defined in discordant1, discordant2, discordant3!", fixed=TRUE) - expect_error(isDefined(ds.test_env$connections, "E$A", error.message = TRUE), "There are some DataSHIELD errors, list them with datashield.errors()", fixed=TRUE) - - err <- DSI::datashield.errors(); - - expect_length(class(err), 1) - expect_true(all("list" %in% class(err))) - expect_length(err, 3) - expect_match(err$discordant1, "* : object 'E' not found") - expect_match(err$discordant2, "* : object 'E' not found") - expect_match(err$discordant3, "* : object 'E' not found") -}) - -test_that("error.message=TRUE test, dataframe column D$A", { - expect_error(isDefined(ds.test_env$connections, "D$A", error.message = TRUE), "The input object D$A is not defined in discordant3!", fixed=TRUE) -}) - -test_that("error.message=TRUE test, dataframe column D$B", { - expect_error(isDefined(ds.test_env$connections, "D$B", error.message = TRUE), "The input object D$B is not defined in discordant2!", fixed=TRUE) -}) - -test_that("error.message=TRUE test, dataframe column D$C", { - expect_error(isDefined(ds.test_env$connections, "D$C", error.message = TRUE), "The input object D$C is not defined in discordant1!", fixed=TRUE) -}) - -test_that("error.message=TRUE test, dataframe column D$D", { - expect_error(isDefined(ds.test_env$connections, "D$D", error.message = TRUE), "The input object D$D is not defined in discordant1, discordant2, discordant3!", fixed=TRUE) -}) - -test_that("error.message=TRUE test, dataframe columns D,D$B", { -# expect_error(isDefined(ds.test_env$connections, c("D","D$A")), "The input object D$A is not defined in discordant3!", fixed=TRUE) - res <- isDefined(ds.test_env$connections, c("D","D$A"), error.message=TRUE) - - expect_length(class(res), 1) - expect_true(all("list" %in% class(res))) - expect_length(res, 3) - expect_true(res$discordant1) - expect_true(res$discordant2) - expect_true(res$discordant3) -}) - -test_that("error.message=TRUE test, dataframe columns D$A,D$B", { - expect_error(isDefined(ds.test_env$connections, c("D$A","D$B"), error.message=TRUE), "The input object D$A is not defined in discordant3!", fixed=TRUE) -}) - -# -# Done -# - -context("isDefined::smk::shutdown") - -test_that("shutdown", { - ds_expect_variables(c("D")) -}) - -disconnect.discordant.dataset.simple() - -context("isDefined::smk::done") diff --git a/tests/testthat/test-smk_bug-ds.listOpals.R b/tests/testthat/test-smk_bug-ds.listOpals.R index d6b35ff6..001d0620 100644 --- a/tests/testthat/test-smk_bug-ds.listOpals.R +++ b/tests/testthat/test-smk_bug-ds.listOpals.R @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------- # Copyright (c) 2014 OBiBa, -# 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# 2018-2021 University of 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. diff --git a/tests/testthat/test-smk_dgr-ds.asCharacter.R b/tests/testthat/test-smk_dgr-ds.asCharacter.R index 7f9e7c45..73aaa813 100644 --- a/tests/testthat/test-smk_dgr-ds.asCharacter.R +++ b/tests/testthat/test-smk_dgr-ds.asCharacter.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk_dgr-ds.listClientsideFunctions.R b/tests/testthat/test-smk_dgr-ds.listClientsideFunctions.R index 52807e3b..e29781ca 100644 --- a/tests/testthat/test-smk_dgr-ds.listClientsideFunctions.R +++ b/tests/testthat/test-smk_dgr-ds.listClientsideFunctions.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk_dgr-ds.listServersideFunctions.R b/tests/testthat/test-smk_dgr-ds.listServersideFunctions.R index 27d2e297..4f01c0a4 100644 --- a/tests/testthat/test-smk_dgr-ds.listServersideFunctions.R +++ b/tests/testthat/test-smk_dgr-ds.listServersideFunctions.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2019-2021 University of 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. diff --git a/tests/testthat/test-smk_dgr-ds.recodeValues-factor.R b/tests/testthat/test-smk_dgr-ds.recodeValues-factor.R index 84027672..f3c2a860 100644 --- a/tests/testthat/test-smk_dgr-ds.recodeValues-factor.R +++ b/tests/testthat/test-smk_dgr-ds.recodeValues-factor.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk_dgr-ds.recodeValues-factor_missing.R b/tests/testthat/test-smk_dgr-ds.recodeValues-factor_missing.R index c6cc808b..96570ef1 100644 --- a/tests/testthat/test-smk_dgr-ds.recodeValues-factor_missing.R +++ b/tests/testthat/test-smk_dgr-ds.recodeValues-factor_missing.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk_dgr-ds.recodeValues.R b/tests/testthat/test-smk_dgr-ds.recodeValues.R index a7f79821..0ed63757 100644 --- a/tests/testthat/test-smk_dgr-ds.recodeValues.R +++ b/tests/testthat/test-smk_dgr-ds.recodeValues.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. diff --git a/tests/testthat/test-smk_expt-ds.mean.R b/tests/testthat/test-smk_expt-ds.mean.R index 3d1d22fa..2babc91f 100644 --- a/tests/testthat/test-smk_expt-ds.mean.R +++ b/tests/testthat/test-smk_expt-ds.mean.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2018-2022 University of Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2018-2021 University of 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. @@ -41,23 +41,23 @@ test_that("mean values [both]", { context("ds.mean::smk_expt::type=combine") test_that("mean values [combine]", { -# stat.mean <- ds.mean(x='D$LAB_TRIG',type='combine') + stat.mean <- ds.mean(x='D$LAB_TRIG',type='combine') -# expect_equal_to_reference(stat.mean, 'smk_expt-results/ds.mean-LAB_TRIG-combine.rds') + expect_equal_to_reference(stat.mean, 'smk_expt-results/ds.mean-LAB_TRIG-combine.rds') }) context("ds.mean::smk_expt::type=split") test_that("mean values [split]", { -# stat.mean <- ds.mean(x='D$LAB_TRIG', type='split') + stat.mean <- ds.mean(x='D$LAB_TRIG', type='split') -# expect_equal_to_reference(stat.mean, 'smk_expt-results/ds.mean-LAB_TRIG-split.rds') + expect_equal_to_reference(stat.mean, 'smk_expt-results/ds.mean-LAB_TRIG-split.rds') }) context("ds.mean::smk_expt::type=both") test_that("mean values [both]", { -# stat.mean <- ds.mean(x='D$LAB_TRIG', type='both') + stat.mean <- ds.mean(x='D$LAB_TRIG', type='both') -# expect_equal_to_reference(stat.mean, 'smk_expt-results/ds.mean-LAB_TRIG-both.rds') + expect_equal_to_reference(stat.mean, 'smk_expt-results/ds.mean-LAB_TRIG-both.rds') }) context("ds.mean::smk_expt::type=combine") diff --git a/tests/testthat/test-smk_expt-ds.ranksSecure.R b/tests/testthat/test-smk_expt-ds.ranksSecure.R deleted file mode 100644 index 0061df2c..00000000 --- a/tests/testthat/test-smk_expt-ds.ranksSecure.R +++ /dev/null @@ -1,85 +0,0 @@ -#------------------------------------------------------------------------------- -# Copyright (c) 2019-2022 University of 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -#------------------------------------------------------------------------------- - -# -# Set up -# - -context("ds.ranksSecure::smk_expt::setup") - -connect.studies.dataset.cnsim(list("LAB_TRIG", "LAB_TSC")) - -test_that("setup", { - ds_expect_variables(c("D")) -}) - -# -# Tests -# - -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') -}) - -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') -}) - -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') -}) - -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') -}) - -# -# Done -# - -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")) -}) - -disconnect.studies.dataset.cnsim() - -context("ds.ranksSecure::smk_expt::done")