From 4865d0a25265f03d26e284fa6cdcd6a070707ef3 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 13 Oct 2023 11:27:40 +0200 Subject: [PATCH 001/111] Rename Pedigree.R --- R/{pedigree.R => PedigreeR.R} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename R/{pedigree.R => PedigreeR.R} (100%) diff --git a/R/pedigree.R b/R/PedigreeR.R similarity index 100% rename from R/pedigree.R rename to R/PedigreeR.R From a636733a6fc52872461e1c54336074def1597406 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 13 Oct 2023 11:27:59 +0200 Subject: [PATCH 002/111] Rename Pedigree.R --- R/{PedigreeR.R => Pedigree.R} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename R/{PedigreeR.R => Pedigree.R} (100%) diff --git a/R/PedigreeR.R b/R/Pedigree.R similarity index 100% rename from R/PedigreeR.R rename to R/Pedigree.R From 35ee5d8a19fbf16ce9bbd4e9fb06ff32ab5c7c84 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 13 Oct 2023 12:23:50 +0200 Subject: [PATCH 003/111] ignore .lintr file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0935576d..13ac89e3 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ *.Rproj *.so *.Rprofile +*.lintr Pedixplorer.Rcheck \ No newline at end of file From 0bd987fb1b409a8c81ee9a025ca0d4e9b3e86bc4 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 13 Oct 2023 19:26:31 +0200 Subject: [PATCH 004/111] Update gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b14e2ab2..df3beaf3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,5 @@ *.so *.Rprofile *.lintr -devel/* +devel Pedixplorer.Rcheck \ No newline at end of file From 1aa7197074c0f2ff73e7a6f758ade534c3a512c4 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 13 Oct 2023 19:27:13 +0200 Subject: [PATCH 005/111] Add global getter and upgrade version number --- DESCRIPTION | 2 +- R/pedigreeClass.R | 80 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c6ce7d8e..12520819 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 0.99.1 +Version: 0.99.2 Date: 2023-09-19 Title: Pedigree Functions Authors@R: c( diff --git a/R/pedigreeClass.R b/R/pedigreeClass.R index d7a039d7..c14d8935 100644 --- a/R/pedigreeClass.R +++ b/R/pedigreeClass.R @@ -64,7 +64,7 @@ setValidity("Pedigree", is_valid) #' @rdname extract-methods #' @aliases ped,Pedigree-method #' @export -setGeneric("ped", function(object){ +setGeneric("ped", function(object) { standardGeneric("ped") }) @@ -76,11 +76,15 @@ setGeneric("ped<-", function(object, value) { standardGeneric("ped<-") }) -setMethod("ped<-", signature(object = "Pedigree", value = "ANY"), function(object, value) { - object@ped <- value - validObject(object) - object -}) +setMethod( + "ped<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + object@ped <- value + validObject(object) + object + } +) #' @description Pedigree rel accessors #' @param object A Pedigree object. @@ -88,7 +92,7 @@ setMethod("ped<-", signature(object = "Pedigree", value = "ANY"), function(objec #' @rdname extract-methods #' @aliases rel,Pedigree-method #' @export -setGeneric("rel", function(object){ +setGeneric("rel", function(object) { standardGeneric("rel") }) @@ -100,11 +104,15 @@ setGeneric("rel<-", function(object, value) { standardGeneric("rel<-") }) -setMethod("rel<-", signature(object = "Pedigree", value = "ANY"), function(object, value) { - object@rel <- value - validObject(object) - object -}) +setMethod( + "rel<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + object@rel <- value + validObject(object) + object + } +) #' @description Pedigree scales accessors #' @param object A Pedigree object. @@ -112,7 +120,7 @@ setMethod("rel<-", signature(object = "Pedigree", value = "ANY"), function(objec #' @rdname extract-methods #' @aliases scales,Pedigree-method #' @export -setGeneric("scales", function(object){ +setGeneric("scales", function(object) { standardGeneric("scales") }) @@ -124,11 +132,15 @@ setGeneric("scales<-", function(object, value) { standardGeneric("scales<-") }) -setMethod("scales<-", signature(object = "Pedigree", value = "ANY"), function(object, value) { - object@scales <- value - validObject(object) - object -}) +setMethod( + "scales<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + object@scales <- value + validObject(object) + object + } +) #' @description Pedigree hints accessors #' @param object A Pedigree object. @@ -136,7 +148,7 @@ setMethod("scales<-", signature(object = "Pedigree", value = "ANY"), function(ob #' @rdname extract-methods #' @aliases hints,Pedigree-method #' @export -setGeneric("hints", function(object){ +setGeneric("hints", function(object) { standardGeneric("hints") }) @@ -148,13 +160,31 @@ setGeneric("hints<-", function(object, value) { standardGeneric("hints<-") }) -setMethod("hints<-", signature(object = "Pedigree", value = "ANY"), function(object, value) { - object@hints <- value - validObject(object) - object -}) +setMethod( + "hints<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + object@hints <- value + validObject(object) + object + } +) +col_id <- function(ped, col = NULL) { + col_id <- c("id", "dadid", "momid", "sex") + if (is.null(col)) { + col <- col_id + } else if (!all(col %in% col_id)) { + stop( + "Col selected: ", + col[!col %in% col_id], + " is not an identity column" + ) + } + ped(ped)[col] +} + #### S4 methods #### #' @title Pedigree methods @@ -322,7 +352,7 @@ setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), if (is.character(i)) { i <- which(x$ped$id %in% i) } - ped_df <- x$ped[i,] + ped_df <- x$ped[i, ] allId <- unique(c(ped_df$id, ped_df$dadid, ped_df$momid)) rel_df <- x$rel[x$rel$id1 %in% allId & x$rel$id2 %in% allId, ] idx <- match(allId, ped_df$id, nomatch = 0) From 1f6c61ced8027b2810e761c22911b23ac085a861 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Wed, 18 Oct 2023 14:17:02 +0200 Subject: [PATCH 006/111] Correct typo alignment --- R/align.R | 2 +- R/alignped1.R | 4 +-- R/alignped2.R | 2 +- R/alignped3.R | 2 +- R/alignped4.R | 2 +- R/best_hint.R | 2 +- R/ped_to_plotdf.R | 2 +- R/pedigreeClass.R | 58 ++++++++++++++++++++++++++------- tests/testthat/test-align.R | 2 +- vignettes/alignment_details.Rmd | 4 +-- 10 files changed, 57 insertions(+), 23 deletions(-) diff --git a/R/align.R b/R/align.R index 6966b58f..6c35260e 100644 --- a/R/align.R +++ b/R/align.R @@ -47,7 +47,7 @@ ancestors <- function(idx, momx, dadx) { #' If multiple families are present in the Pedigree, this routine is called #' once for each family, and the results are combined in the list returned. #' For more information you can read the associated vignette:align -#' `vignette("alignement_details")`. +#' `vignette("alignment_details")`. #' #' @param ped A Pedigree object #' @param packed Should the Pedigree be compressed, i.e., allow diagonal diff --git a/R/alignped1.R b/R/alignped1.R index e9d6511c..7ad809a0 100644 --- a/R/alignped1.R +++ b/R/alignped1.R @@ -1,9 +1,9 @@ # Automatically generated from all.nw using noweb -#' First routine alignement +#' First routine alignment #' #' @description -#' First alignement routine which create the subtree founded on a single +#' First alignment routine which create the subtree founded on a single #' subject as though it were the only tree. #' #' @details diff --git a/R/alignped2.R b/R/alignped2.R index 5ae238db..accab593 100644 --- a/R/alignped2.R +++ b/R/alignped2.R @@ -1,6 +1,6 @@ # Automatically generated from all.nw using noweb -#' Second routine alignement +#' Second routine alignment #' #' @description #' Second of the four co-routines which takes a collection of siblings, diff --git a/R/alignped3.R b/R/alignped3.R index 153c38bb..3613f202 100644 --- a/R/alignped3.R +++ b/R/alignped3.R @@ -1,6 +1,6 @@ # Automatically generated from all.nw using noweb -#' Third routine alignement +#' Third routine alignment #' #' @description #' Third of the four co-routines to merges two pedigree trees which diff --git a/R/alignped4.R b/R/alignped4.R index 52e6098f..952fa407 100644 --- a/R/alignped4.R +++ b/R/alignped4.R @@ -2,7 +2,7 @@ #' @importFrom quadprog solve.QP NULL -#' Fourth and last routine alignement +#' Fourth and last routine alignment #' #' @description #' Last routines which attempts to line up children under parents and put diff --git a/R/best_hint.R b/R/best_hint.R index 31b1ff23..e03a85aa 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -1,4 +1,4 @@ -#' Best hint for alignement +#' Best hint for alignment #' #' @description #' When computer time is cheap, use this routine to get a 'best' Pedigree. diff --git a/R/ped_to_plotdf.R b/R/ped_to_plotdf.R index 0f7ebd58..2e4d6692 100644 --- a/R/ped_to_plotdf.R +++ b/R/ped_to_plotdf.R @@ -71,7 +71,7 @@ ped_to_plotdf <- function( legh <- params_plot$legh ## Get all boxes to plot - # idx is the index of the boxes in the alignement + # idx is the index of the boxes in the alignment idx <- which(plist$nid > 0) # index value in the ped of each box id <- plist$nid diff --git a/R/pedigreeClass.R b/R/pedigreeClass.R index c14d8935..a1272132 100644 --- a/R/pedigreeClass.R +++ b/R/pedigreeClass.R @@ -171,19 +171,53 @@ setMethod( ) -col_id <- function(ped, col = NULL) { - col_id <- c("id", "dadid", "momid", "sex") - if (is.null(col)) { - col <- col_id - } else if (!all(col %in% col_id)) { - stop( - "Col selected: ", - col[!col %in% col_id], - " is not an identity column" - ) +#' @description Pedigree hints accessors +#' @param object A Pedigree object. +#' @return The slot `hints` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases hints,Pedigree-method +#' @export +setGeneric("col_id", function(object, col) { + standardGeneric("col_id") +}) + +setMethod( + "col_id", + signature(object = "Pedigree", col = "ANY"), + function(object, col) { + col_id <- c("id", "dadid", "momid", "sex") + if (is.null(col)) { + col <- col_id + } else if (!all(col %in% col_id)) { + stop( + "Col selected: ", + col[!col %in% col_id], + " is not an identity column" + ) + } + ped(ped)[col] } - ped(ped)[col] -} +) + +setGeneric("col_id<-", function(object, value) { + standardGeneric("col_id<-") +}) + +setMethod( + "col_id<-", + signature(object = "Pedigree", col = "ANY", value = "ANY"), + function(object, value) { + if (! length(value) %in% c(1, length(object))) { + stop( + "The length of the new value should be:", + "1 or equal to the length of the pedigree" + ) + } + ped(ped)[col] <- value + validObject(object) + object + } +) #### S4 methods #### diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index b5e9a130..e95e9d87 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -30,7 +30,7 @@ test_that("test auto_hint works", { expect_snapshot(plist) }) -test_that("test alignement with inbreeding and relationship matrix", { +test_that("test alignment with inbreeding and relationship matrix", { data("sampleped") rel_df <- data.frame( id1 = c(112, 113, 133, 209), diff --git a/vignettes/alignment_details.Rmd b/vignettes/alignment_details.Rmd index c2dcc1ef..5e70918f 100644 --- a/vignettes/alignment_details.Rmd +++ b/vignettes/alignment_details.Rmd @@ -1,5 +1,5 @@ --- -title: Pedigree alignement details +title: Pedigree alignment details author: TM Therneau date: '`r format(Sys.time(),"%d %B, %Y")`' output: @@ -8,7 +8,7 @@ output: toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | - %\VignetteIndexEntry{Pedigree alignement details} + %\VignetteIndexEntry{Pedigree alignment details} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} --- From 7e3089be0597668d3feee4b3954caafcf96df601 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Wed, 18 Oct 2023 14:18:08 +0200 Subject: [PATCH 007/111] Add mention of kinship2 --- vignettes/pedigree.Rmd | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index e78af9bd..82c23508 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -24,8 +24,11 @@ Introduction This document is a tutorial for the `Pedixplorer` package, with examples of creating Pedigree objects and kinship matrices and other Pedigree utilities. -The `Pedixplorer` package contains the outines to handle family data with a -Pedigree object. +The `Pedixplorer` package is an updated version of the [`Kinship2`](https://github.com/mayoverse/kinship2) package, +featuring a change in maintainer and repository from CRAN to Bioconductor +for continued development and support. + +It contains the outines to handle family data with a Pedigree object. The initial purpose was to create correlation structures that describe family relationships such as kinship and identity-by-descent, which can be used to model family data in mixed effects models, such as in the coxme function. @@ -37,7 +40,7 @@ various criteria, and kinship for the X chromosome. Suplementary vignettes are available to explain: - The [Pedigree() constructor]("pedigree_constructor.html") used to create a Pedigree object `vignette("Pedigree() constructor", package = "Pedixplorer")` -- The [alignment algorithm]("alignement_details.html") used create the Pedigree structure `vignette("Pedigree alignement details", package = "Pedixplorer")` +- The [alignment algorithm]("alignment_details.html") used create the Pedigree structure `vignette("Pedigree alignment details", package = "Pedixplorer")` - The [kinship() algorithm]("kinship_details.html") `vignette("Pedigree kinship() details", package = "Pedixplorer")` - The [plotting algorithm]("pedigree_plot_details.html") used to plot the Pedigree `vignette("Pedigree plotting details", package = "Pedixplorer")` From 6a847c4f0f655bde35ac66e71a373381d930fd7f Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Wed, 18 Oct 2023 14:27:19 +0200 Subject: [PATCH 008/111] Correct {\em} bug --- vignettes/pedigree.Rmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 82c23508..03ed8987 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -111,7 +111,7 @@ print(ped) For more information on the *Pedigree()* function, see `help(Pedigree)`. -The {\em Pedigree} object can be subset to individual pedigrees +The Pedigree object can be subset to individual pedigrees by their family id. The Pedigree object has a print, summary and plot method, which we show below. The print method prints a short summary of the Pedigree. @@ -189,7 +189,8 @@ alleles with replacement from our own DNA has only $p=0.50$ probability of getting the same allele twice. ## Kinship for Pedigree object -We use {\em kinship} to calculate the kinship matrix for $ped2$. The + +We use `kinship()` to calculate the kinship matrix for $ped2$. The result is a special symmetrix matrix class from the [Matrix R package](https://CRAN.R-project.org/package=Matrix/), which is stored efficiently to avoid repeating elements. From 0f0359e9e4928dfa8f65472535131bb5ee911dbb Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Wed, 18 Oct 2023 14:30:01 +0200 Subject: [PATCH 009/111] Correct Data.Frame --- vignettes/pedigree.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 03ed8987..0f75528f 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -429,7 +429,7 @@ plot(ped1reord) Pedigree Utility Functions ================================= -## Pedigree as a Data.Frame +## Pedigree as a data.frame A main features of a Pedigree object are vectors with an element for each subject. It is sometimes useful to extract these vectors from From 93cf6290b5bc520d8e87c41c60e10ee70d667285 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 24 Oct 2023 17:06:06 +0200 Subject: [PATCH 010/111] New S4 structure --- .gitignore | 1 - .vscode/launch.json | 50 +++ DESCRIPTION | 12 +- NAMESPACE | 8 +- R/AllAccessors.R | 307 +++++++++++++++++++ R/AllClass.R | 230 ++++++++++++++ R/AllGeneric.R | 111 +++++++ R/AllValidity.R | 190 ++++++++++++ R/Pedigree.R | 59 ++-- R/align.R | 36 +-- R/auto_hint.R | 18 +- R/best_hint.R | 14 +- R/find_avail_affected.R | 8 +- R/find_avail_noninform.R | 2 +- R/find_unavailable.R | 24 +- R/generate_colors.R | 8 +- R/is_informative.R | 5 +- R/make_famid.R | 22 +- R/min_dist_inf.R | 16 +- R/norm_data.R | 36 +-- R/ped_to_legdf.R | 17 +- R/ped_to_plotdf.R | 19 +- R/shrink.R | 6 +- R/trim.R | 7 +- R/unrelated.R | 4 +- R/utils.R | 1 + data/sampleped.rda | Bin 550 -> 546 bytes devel/documentation/S4_class.md | 26 ++ devel/idea/debugging.R | 10 + devel/idea/pedigree2Class.R | 0 devel/old/pedigreeAccessors.R | 294 ++++++++++++++++++ {R => devel/old}/pedigreeClass.R | 189 +----------- R/validity.R => devel/old/pedigreeValidity.R | 22 +- inst/extdata/sampleped.tab | 2 +- man/Pedigree.Rd | 11 +- man/align.Rd | 2 +- man/alignped1.Rd | 4 +- man/alignped2.Rd | 2 +- man/alignped3.Rd | 2 +- man/alignped4.Rd | 2 +- man/as.data.frame-Pedigree-method.Rd | 18 -- man/as.list-Pedigree-method.Rd | 18 -- man/best_hint.Rd | 2 +- man/check_slot_fd.Rd | 2 +- man/check_values.Rd | 2 +- man/extract-methods.Rd | 114 +++++-- man/find_avail_affected.Rd | 2 +- man/find_avail_noninform.Rd | 2 +- man/find_unavailable.Rd | 2 +- man/generate_colors.Rd | 2 +- man/is_valid.Rd | 2 +- man/norm_rel.Rd | 4 +- man/paste0max.Rd | 2 +- man/shrink.Rd | 4 +- man/unrelated.Rd | 2 +- tests/testthat/test-align.R | 4 +- tests/testthat/test-class.R | 7 + tests/testthat/test-generate_scales.R | 13 +- tests/testthat/test-is_informative.R | 2 +- tests/testthat/test-make_famid.R | 8 +- tests/testthat/test-norm_data.R | 4 +- tests/testthat/test-ped_to_legdf.R | 6 +- tests/testthat/test-pedigreeClass.R | 14 +- tests/testthat/test-shrink.R | 8 +- tests/testthat/test-unavail.R | 6 +- tests/testthat/test-useful_inds.R | 4 +- vignettes/alignment_details.Rmd | 4 +- vignettes/pedigree.Rmd | 2 +- vignettes/pedigree_plot_details.Rmd | 2 +- 69 files changed, 1575 insertions(+), 464 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 R/AllAccessors.R create mode 100644 R/AllClass.R create mode 100644 R/AllGeneric.R create mode 100644 R/AllValidity.R create mode 100644 devel/documentation/S4_class.md create mode 100644 devel/idea/debugging.R create mode 100644 devel/idea/pedigree2Class.R create mode 100644 devel/old/pedigreeAccessors.R rename {R => devel/old}/pedigreeClass.R (69%) rename R/validity.R => devel/old/pedigreeValidity.R (91%) delete mode 100644 man/as.data.frame-Pedigree-method.Rd delete mode 100644 man/as.list-Pedigree-method.Rd create mode 100644 tests/testthat/test-class.R diff --git a/.gitignore b/.gitignore index df3beaf3..13ac89e3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,4 @@ *.so *.Rprofile *.lintr -devel Pedixplorer.Rcheck \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..1a638a48 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,50 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "R-Debugger", + "name": "Launch R-Workspace", + "request": "launch", + "debugMode": "workspace", + "workingDirectory": "${workspaceFolder}" + }, + { + "type": "R-Debugger", + "name": "Debug R-File", + "request": "launch", + "debugMode": "file", + "workingDirectory": "${workspaceFolder}", + "file": "${file}" + }, + { + "type": "R-Debugger", + "name": "Debug R-Function", + "request": "launch", + "debugMode": "function", + "workingDirectory": "${workspaceFolder}", + "file": "${file}", + "mainFunction": "main", + "allowGlobalDebugging": false + }, + { + "type": "R-Debugger", + "name": "Debug R-Package", + "request": "launch", + "debugMode": "workspace", + "workingDirectory": "${workspaceFolder}", + "includePackageScopes": true, + "loadPackages": [ + "." + ] + }, + { + "type": "R-Debugger", + "request": "attach", + "name": "Attach to R process", + "splitOverwrittenOutput": true + } + ] +} \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION index 12520819..79d6b8c6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -24,7 +24,8 @@ Imports: dplyr, tidyr, quadprog, - Matrix + Matrix, + testthat Description: Routines to handle family data with a Pedigree object. The initial purpose was to create correlation structures that describe family relationships such as kinship and identity-by-descent, which can be used to model family data @@ -38,10 +39,9 @@ RoxygenNote: 7.2.3 Roxygen: list(markdown = TRUE) VignetteBuilder: knitr Suggests: - testthat (>= 3.0.0), diffviewer, - vdiffr, - rmarkdown, + vdiffr, + rmarkdown, BiocStyle, knitr, withr @@ -57,7 +57,7 @@ Collate: 'alignped3.R' 'alignped2.R' 'alignped1.R' - 'validity.R' + 'pedigreeValidity.R' 'pedigreeClass.R' 'check_hints.R' 'kindepth.R' @@ -84,6 +84,7 @@ Collate: 'num_child.R' 'ped_to_legdf.R' 'ped_to_plotdf.R' + 'pedigreeAccessors.R' 'plot_fct.R' 'plot_fromdf.R' 'plot.R' @@ -91,3 +92,4 @@ Collate: 'trim.R' 'unrelated.R' 'useful_inds.R' +LazyData: true diff --git a/NAMESPACE b/NAMESPACE index 0e9efe7a..83cd7542 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,6 @@ # Generated by roxygen2: do not edit by hand +export() export(Pedigree) export(align) export(alignped1) @@ -9,9 +10,12 @@ export(alignped4) export(auto_hint) export(best_hint) export(bit_size) +export(border) export(check_hints) +export(deriv) export(descendants) export(family_check) +export(fill) export(find_avail_affected) export(find_avail_noninform) export(find_unavailable) @@ -26,10 +30,12 @@ export(is_informative) export(kindepth) export(kinship) export(make_famid) +export(meta) export(min_dist_inf) export(norm_ped) export(norm_rel) export(num_child) +export(order) export(ped) export(ped_to_legdf) export(ped_to_plotdf) @@ -39,6 +45,7 @@ export(rel_code_to_factor) export(scales) export(sex_to_factor) export(shrink) +export(spouse) export(trim) export(unrelated) export(useful_inds) @@ -46,7 +53,6 @@ export(vect_to_binary) exportClasses(Pedigree) exportMethods(Pedigree) exportMethods(as.data.frame) -exportMethods(as.list) exportMethods(family_check) exportMethods(fix_parents) exportMethods(generate_colors) diff --git a/R/AllAccessors.R b/R/AllAccessors.R new file mode 100644 index 00000000..86066f59 --- /dev/null +++ b/R/AllAccessors.R @@ -0,0 +1,307 @@ +#### S4 Accessors #### +#' @include Pedigree.R +#' @include AllClass.R + +#### S4 ped Accessors #### +#' @title Pedigree ped accessors +#' @param object A Pedigree object. +#' @param slot A slot in the Ped object of the Pedigree. +#' @return The slot `ped` present in the Pedigree object. +#' or one of its slot. +#' @rdname extract-methods +#' @aliases ped,Pedigree-method +#' @export +setGeneric("ped", function(object, slot) { + standardGeneric("ped") +}) + +setMethod( + "ped", + signature(object = "Pedigree", slot = "ANY"), + function(object, slot) { + slot(object@ped, slot) + } +) + +setMethod( + "ped", + signature(object = "Pedigree", slot = "missing"), + function(object) { + object@ped + } +) + +setGeneric("ped<-", function(object, slot, value) { + standardGeneric("ped<-") +}) + +setMethod( + "ped<-", + signature(object = "Pedigree", slot = "ANY", value = "ANY"), + function(object, slot, value) { + ped_slots <- c( + "id", "dadid", "momid", "sex", "family", + "steril", "status", "avail", "affected", + "kin", "useful", "num_child_total", + "num_child_direct", "num_child_indirect" + ) + if (! slot %in% ped_slots) { + stop("slot selected: ", slot, " is not a Ped slot") + } + if (length(value) != length(object)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) + } + slot(object@ped, slot) <- value + validObject(object) + object + } +) + +#### S4 metadata Accessors #### +#' @title Pedigree metadata accessors +#' @param object A Pedigree object. +#' @return The metadata present in the Pedigree object. +#' @rdname extract-methods +#' @aliases mcols,Pedigree-method +#' @export +setMethod( + "mcols", + signature(object = "Pedigree"), + function(object) { + mcols(object@ped) + } +) + +setMethod( + "mcols<-", + signature(object = "Pedigree", value = "ANY"), + function(object) { + mcols(object@ped) <- value + } +) + +#### S4 rel Accessors #### + +#' @description Pedigree rel accessors +#' @param object A Pedigree object. +#' @return The slot `rel` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases rel,Pedigree-method +#' @export +setGeneric("rel", function(object, slot) { + standardGeneric("rel") +}) + +setMethod( + "rel", + signature(object = "Pedigree", slot = "ANY"), + function(object, slot) { + slot(object@rel, slot) + } +) + +setMethod( + "rel", + signature(object = "Pedigree", slot = "missing"), + function(object, slot) { + object@rel + } +) + +setGeneric("rel<-", function(object, slot, value) { + standardGeneric("rel<-") +}) + +setMethod( + "rel<-", + signature(object = "Pedigree", slot = "ANY", value = "ANY"), + function(object, slot, value) { + rel_cols <- c("id1", "id2", "code", "family") + if (! slot %in% rel_cols) { + stop("slot selected: ", slot, " is not a relationship column") + } + if (length(value) != length(object)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) + } + slot(object@rel, slot) <- value + validObject(object) + object + } +) + +#### S4 scales Accessors #### +#' @description Pedigree scales accessors +#' @param object A Pedigree object. +#' @return The slot `scales` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases scales,Pedigree-method +#' @export +setGeneric("scales", function(object) { + standardGeneric("scales") +}) + +setMethod("scales", signature(object = "Pedigree"), function(object) { + object@scales +}) +#### S4 fill Accessors #### +#' @description Pedigree fill accessors +#' @param object A Pedigree object. +#' @return The slot `fill` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases fill,Pedigree-method +#' @export +setGeneric("fill", function(object, slot) { + standardGeneric("fill") +}) + +setMethod("fill", + signature(object = "Pedigree", slot = "ANY"), + function(object, slot) { + object@scales$fill[slot] + } +) + +setMethod("fill", + signature(object = "Pedigree", slot = "missing"), + function(object) { + object@scales$fill + } +) + +setGeneric("fill<-", function(object, slot, value) { + standardGeneric("fill<-") +}) + +setMethod( + "fill<-", + signature(object = "Pedigree", slot = "ANY", value = "ANY"), + function(object, slot, value) { + fill_cols <- c("column", "column_values") + if (! slot %in% fill_cols) { + stop("slot selected: ", slot, " is not a fill column") + } + object@scales$fill[slot] <- value + validObject(object) + object + } +) + +#### S4 border Accessors #### +#' @description Pedigree border accessors +#' @param object A Pedigree object. +#' @return The slot `border` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases border,Pedigree-method +#' @export +setGeneric("border", function(object, slot) { + standardGeneric("border") +}) + +setMethod("border", + signature(object = "Pedigree", slot = "ANY"), + function(object, slot) { + object@scales$border[slot] + } +) + +setGeneric("border<-", function(object, slot, value) { + standardGeneric("border<-") +}) + +setMethod( + "border<-", + signature(object = "Pedigree", slot = "ANY", value = "ANY"), + function(object, slot, value) { + fill_cols <- c("column", "column_values") + if (! slot %in% fill_cols) { + stop("slot selected: ", slot, " is not a border column") + } + object@scales$border[slot] <- value + validObject(object) + object + } +) + +#### S4 hints Accessors #### +#' @description Pedigree hints accessors +#' @param object A Pedigree object. +#' @return The slot `hints` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases hints,Pedigree-method +#' @export +setGeneric("hints", function(object) { + standardGeneric("hints") +}) + +setMethod("hints", signature(object = "Pedigree"), function(object) { + object@hints +}) +#### S4 order Accessors #### +#' @description Pedigree order accessors +#' @param object A Pedigree object. +#' @return The slot `order` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases order,Pedigree-method +#' @export +setGeneric("order", function(object) { + standardGeneric("order") +}) + +setMethod("order", signature(object = "Pedigree"), function(object) { + object@hints$order +}) + +setGeneric("order<-", function(object, value) { + standardGeneric("order<-") +}) + +setMethod( + "order<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + if (length(value) != length(object)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) + } + object@hints$order <- value + validObject(object) + object + } +) +#### S4 spouse Accessors #### +#' @description Pedigree spouse accessors +#' @param object A Pedigree object. +#' @return The slot `spouse` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases spouse,Pedigree-method +#' @export +setGeneric("spouse", function(object) { + standardGeneric("spouse") +}) + +setMethod("spouse", signature(object = "Pedigree"), function(object) { + object@hints$spouse +}) + +setGeneric("spouse<-", function(object, value) { + standardGeneric("spouse<-") +}) + +setMethod( + "spouse<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + # TODO: Check that the spouse matrix is valid + object@hints$spouse <- value + validObject(object) + object + } +) \ No newline at end of file diff --git a/R/AllClass.R b/R/AllClass.R new file mode 100644 index 00000000..6381d639 --- /dev/null +++ b/R/AllClass.R @@ -0,0 +1,230 @@ +#' S4 class to represent a hints object. +#' +#' A hints object is a list of two elements used +#' to order the individuals in the pedigree plot. +#' +#' @slot order A numeric vector with one element per subject in the +#' Pedigree. It determines the relative order of subjects within a sibship, as +#' well as the relative order of processing for the founder couples. (For this +#' latter, the female founders are ordered as though they were sisters). +#' @slot spouse A matrix with one row per hinted marriage, usually +#' only a few marriages in a Pedigree will need an added hint, for +#' instance reverse the plot order of a husband/wife pair. +#' Each row contains the index of the left spouse, the right hand spouse, +#' and the anchor (i.e : `1` = left, `2` = right, `0` = either). +#' +#' @return A Hints object. +#' @seealso [Pedigree()] +#' @docType class +#' @name Hints-class +#' @rdname Hints-class +#' @export +setClass("Hints", + representation( + order = "numeric", + spouse = "matrix" + ) +) + +setValidity("Hints", is_valid_hints) + +#' S4 class to represent the scales of a Pedigree. +#' +#' A scales object is a list of two data.frame used +#' to represent the affection and the availability status +#' of the individuals in the pedigree plot. +#' +#' @slot fill A data.frame with the informations for the affection status. +#' The columns needed are: 'column_values', 'column_mods', 'mods', 'labels', +#' 'affected', 'fill', 'density' and 'angle'. +#' @slot border A data.frame with the informations for the availability status. +#' The columns needed are: 'column', 'mods', 'labels' and 'border'. +#' @return A Hints object. +#' @seealso [Pedigree()] +#' @docType class +#' @name Hints-class +#' @rdname Hints-class +#' @export +setClass("Scales", + representation( + fill = "data.frame", + border = "data.frame" + ) +) + +setValidity("Scales", is_valid_scales) + +#' S4 class to represent the identity informations in a Pedigree. +#' +#' A Ped object is a list of identity informations +#' of the individuals in the pedigree. +#' It is used to create a Pedigree object. +#' The minimal needed informations are `id`, `dadid`, `momid` and `sex`. +#' If a `family` is provided, the individuals `id` will be aggregated +#' to the `family` character to ensure the uniqueness of the `id`. +#' The other slots are used to store recognized informations. +#' Additional columns can be added to the Ped object and will be +#' stored in the `meta` slot of the Ped object. +#' +#' @slot id A character vector with the id of the individuals. +#' @slot dadid A character vector with the id of the father of the individuals. +#' @slot momid A character vector with the id of the mother of the individuals. +#' @slot sex A factor vector for the sex of the individuals (i.e. `male`, +#' `female`, `unknown` or `terminated`). +#' @slot family A character vector with the family of the individuals. +#' @slot steril A numeric vector with the sterilisation status of the +#' individuals (i.e. `0` = not sterilised, `1` = sterilised, `NA` = unknown). +#' @slot status A numeric vector with the affection status of the +#' individuals (i.e. `0` = alive, `1` = dead, `NA` = unknown). +#' @slot avail A numeric vector with the availability status of the +#' individuals (i.e. `0` = not available, `1` = available, `NA` = unknown). +#' @slot affected A numeric vector with the affection status of the +#' individuals (i.e. `0` = not affected, `1` = affected, `NA` = unknown). +#' @slot useful A numeric vector with the usefulness status of the +#' individuals (i.e. `0` = not useful, `1` = useful). +#' @slot kin A numeric vector with minimal kinship value between the +#' individuals and the useful individuals. +#' @slot num_child_total A numeric vector with the total number of children +#' of the individuals. +#' @slot num_child_direct A numeric vector with the number of children +#' of the individuals. +#' @slot num_child_indirect A numeric vector with the number of children +#' of the individuals. +#' +#' @return A Ped object. +#' @seealso [Pedigree()] +#' @docType class +#' @name Ped-class +#' @rdname Ped-class +#' +#' @export +setClass("Ped", + contains = c("Vector"), + representation( + id = "character", + dadid = "character", + momid = "character", + sex = "factor", + family = "character", + steril = "numeric", + status = "numeric", + avail = "numeric", + affected = "numeric", + useful = "numeric", + kin = "numeric", + num_child_total = "numeric", + num_child_direct = "numeric", + num_child_indirect = "numeric" + ) +) + +setMethod("parallel_slot_names", "Ped", + function(x) { + c( + "id", "momid", "dadid", "sex", "family", + "steril", "status", "avail", "affected", + "kin", "useful", "num_child_total", + "num_child_direct", "num_child_indirect", + callNextMethod() + ) + } +) + +setValidity("Ped", is_valid_ped) + + +#' S4 class to represent the special relationships in a Pedigree. +#' +#' A Rel object is a list of special relationships +#' between individuals in the pedigree. +#' It is used to create a Pedigree object. +#' The minimal needed informations are `id1`, `id2` and `code`. +#' If a `family` is provided, the individuals `id` will be aggregated +#' to the `family` character to ensure the uniqueness of the `id`. +#' +#' @slot id1 A character vector with the id of the first individual. +#' @slot id2 A character vector with the id of the second individual. +#' @slot code A character vector with the code of the special relationship. +#' (i.e. `MZ twin`, `DZ twin`, `UZ twin` or `Spouse`). +#' @slot family A character vector with the family of the individuals. +#' +#' @return A Rel object. +#' @seealso [Pedigree()] +#' @docType class +#' @name Rel-class +#' @rdname Rel-class +#' @export +setClass("Rel", + contains = c("Vector"), + representation( + id1 = "character", + id2 = "character", + code = "character", + family = "character" + ) +) + +setValidity("Rel", is_valid_rel) + +setMethod("parallel_slot_names", "Rel", + function(x) { + c( + "id1", "id2", "code", "family", + callNextMethod() + ) + } +) + +#' S4 class to represent a pedigree. +#' +#' A pedigree is a ensemble of individuals linked to each other into +#' a family tree. +#' +#' They are created from a data.frame containing the individuals informations +#' and a relation ship data.frame for the special links between individuals. +#' A list of scales can be provided to create a legend. +#' To create a Pedigree object, use the function +#' [Pedigree()]. +#' +#' @slot ped A data.frame with the individuals informations. The minimum +#' columns required are 'id', 'dadid', 'momid' and 'sex'. Other columns can be +#' added to the data.frame and will be recognised by the functions. Some +#' errors can be detected by the validity function and some of them can be +#' corrected and others will be added to a dedicated column. +#' @slot rel A data.frame for the special relationship between +#' individuals. +#' The minimum columns required are 'id1', 'id2' and 'code'. +#' @slot scales A data.frame to use for the affection status. +#' This data.frame is generated by the function +#' [generate_aff_inds()] followed by +#' [generate_colors()]. +#' @slot hints List of two elements. +#' - **order** is a numeric vector with one element per subject in the +#' Pedigree. It determines the relative order of subjects within a sibship, as +#' well as the relative order of processing for the founder couples. (For this +#' latter, the female founders are ordered as though they were sisters). +#' - **spouse** is a matrix with one row per hinted marriage, usually +#' only a few marriages in a Pedigree will need an added hint, for +#' instance reverse the plot order of a husband/wife pair. +#' Each row contains the index of the left spouse, the right hand spouse, +#' and the anchor (i.e : `1` = left, `2` = right, `0` = either). +#' +#' @return A Pedigree object. +#' @seealso [Pedigree()] +#' @docType class +#' @name Pedigree-class +#' @rdname Pedigree-class +#' @include pedigreeValidity.R +#' @include Pedigree.R +#' @export +setClass("Pedigree", + contains = c("RectangularData"), + representation( + ped = "Ped", # identity data + rel = "Rel", # special relationships + scales = "Scales", # scales for the plot + hints = "Hints" # hints for the plot + ) +) + +setValidity("Pedigree", is_valid_pedigree) \ No newline at end of file diff --git a/R/AllGeneric.R b/R/AllGeneric.R new file mode 100644 index 00000000..1ba936c8 --- /dev/null +++ b/R/AllGeneric.R @@ -0,0 +1,111 @@ +#' Compute the length of a Pedigree object +#' @param x A Pedigree object. +#' @return The number of individuals in the Pedigree object. +#' @docType methods +#' @aliases length,Pedigree-method +#' @export +setMethod("length", c(x = "Pedigree"), + function(x) { + length(ped(x)) + } +) + +#' Convert a Pedigree object to a data.frame +#' @param x A Pedigree object. +#' @return A data.frame with the individuals informations. +#' @docType methods +#' @aliases as.data.frame,Pedigree-method +#' @rdname extract-methods +#' @export +setAs("ped", "data.frame", function(object) { + data.frame(as.list(object)) +}) + +#' @title Pedigree methods +#' @description Pedigree show method +#' @param object A Pedigree object. +#' @return A character vector with the informations about the object. +#' @rdname extract-methods +#' @aliases show,Pedigree-method +setMethod("show", signature(object = "Pedigree"), function(object) { + nb_fam <- length(levels(as.factor(object@ped$family))) + cat("Pedigree object with", nrow(object@ped), "individuals and", + nrow(object@rel), "special relationships across", nb_fam, "families", + fill = TRUE) +}) + +#' @description Pedigree summary method. +#' @param object A Pedigree object. +#' @return A character vector with the summary of the object. +#' @rdname extract-methods +#' @aliases summary,Pedigree-method +setMethod("summary", signature(object = "Pedigree"), function(object) { + cat("Pedigree object with", nrow(object@ped), "individuals", fill = TRUE) + print(summary(object@ped, maxsum = 5)) + cat("and", nrow(object@rel), "special relationships.", fill = TRUE) + print(summary(object@rel)) + cat("The filling scales columns are:", + levels(as.factor(object@scales$fill$column_values)), fill = TRUE + ) + cat("The border scale column are:", + levels(as.factor(object@scales$border$column)), fill = TRUE + ) +}) + +#### Subscripting #### +#' @description Subset the hints list based on the index given +#' @param hints A list of hints +#' @param index A vector of index +#' @return A list of hints subsetted +#' @rdname extract-methods +#' @aliases sub_sel_hints,Pedigree-method +#' @keywords internal +sub_sel_hints <- function(hints, index) { + if (!is.null(hints$order)) { + temp <- list(order = hints$order[index]) + } else { + temp <- list(order = NULL) + } + + if (!is.null(hints$spouse)) { + indx1 <- match(hints$spouse[, 1], index, nomatch = 0) + indx2 <- match(hints$spouse[, 2], index, nomatch = 0) + keep <- (indx1 > 0 & indx2 > 0) # keep only if both id's are kept + if (any(keep)) { + temp$spouse <- cbind(indx1[keep], indx2[keep], + hints$spouse[keep, 3] + ) + } + } else { + temp$spouse <- NULL + } + temp +} + +#' @description Extract parts of a Pedigree object +#' @param x A Pedigree object. +#' @param i A vector of individuals id or a vector of index. +#' @param j A vector of columns names. +#' @param drop A logical value indicating if the dimensions should be dropped. +#' @return A Pedigree object subsetted. +#' @rdname extract-methods +setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), + function(x, i, j, drop = TRUE) { + if (is.factor(i)) { + i <- as.character(i) + } + if (is.character(i)) { + i <- which(x$ped$id %in% i) + } + ped_df <- x$ped[i, ] + allId <- unique(c(ped_df$id, ped_df$dadid, ped_df$momid)) + rel_df <- x$rel[x$rel$id1 %in% allId & x$rel$id2 %in% allId, ] + idx <- match(allId, ped_df$id, nomatch = 0) + sub_hints <- sub_sel_hints(hints(x), idx) + new_ped <- Pedigree(ped_df, rel_df, x$scales, + hints = sub_hints, cols_ren_ped = NULL, normalize = FALSE + ) + validObject(new_ped) + new_ped + } +) \ No newline at end of file diff --git a/R/AllValidity.R b/R/AllValidity.R new file mode 100644 index 00000000..45bcc603 --- /dev/null +++ b/R/AllValidity.R @@ -0,0 +1,190 @@ +is_valid_hints <- function(object) { + errors <- c() + + #### Check that the slots have the right columns #### + errors <- c(errors, check_slot_fd(object, "order", "numeric")) + errors <- c(errors, check_slot_fd(object, "spouse", "matrix")) + + #### Check that the hints spouse matrix is valid #### + if (dim(object@spouse) != 3) { + errors <- c(errors, "The spouse matrix must have 3 columns.") + } + if (any(is.numeric(object@spouse[, 1:3]))) { + errors <- c( + errors, "The spouse matrix must contains only numeric values." + ) + } + + return(errors) +} + +is_valid_scales <- function(object) { + errors <- c() + + fill_cols <- c( + "order", "column_values", "column_mods", "mods", + "labels", "affected", "fill", "density", "angle" + ) + border_cols <- c("column", "mods", "labels", "border") + errors <- c(errors, check_slot_fd(object, "scales", c("fill", "border"))) + errors <- c(errors, check_slot_fd(object@scales, "fill", fill_cols)) + errors <- c(errors, check_slot_fd(object@scales, "border", border_cols)) + + if (length(errors) == 0) { + TRUE + } else { + errors + } + + return(errors) +} + + +is_valid_ped <- function(object) { + missid <- NA + errors <- c() + + #### Check that the ped columns have the right values #### + # Check for ped@id uniqueness + if (any(duplicated(object@id))) { + errors <- c(errors, "Id in ped slot must be unique") + } + + # Control values for ped + errors <- c(errors, check_values(object@id, missid, present = FALSE)) + errors <- c(errors, check_values( + object@dadid, c(object@id, missid) + )) + errors <- c(errors, check_values( + object@momid, c(object@id, missid) + )) + sex_code <- c("male", "female", "unknown", "terminated") + errors <- c(errors, check_values(object@sex, sex_code)) + errors <- c(errors, check_values(object@steril, c(0, 1, NA))) + errors <- c(errors, check_values(object@status, c(0, 1, NA))) + errors <- c(errors, check_values(object@avail, c(0, 1, NA))) + errors <- c(errors, check_values(object@affected, c(0, 1, NA))) + + # Control sex for parents + id <- object@id + momid <- object@momid + dadid <- object@dadid + sex <- object@sex + is_dad <- id %in% dadid + is_mom <- id %in% momid + if (any(sex[is_dad] != "male")) { + errors <- c(errors, "Some dad are not male") + } + if (any(sex[is_mom] != "female")) { + errors <- c(errors, "Some mom are not female") + } + if (any( + (dadid %in% missid & (! momid %in% missid)) | + ((! dadid %in% missid) & momid %in% missid) + )) { + errors <- c(errors, "Individuals should have both parents or none") + } + + if (length(errors) == 0) { + TRUE + } else { + errors + } + + return(errors) +} + +is_valid_rel <- function(object) { + errors <- c() + + rel_cols <- c("id1", "id2", "code", "family") + #### Check that the slots have the right columns #### + errors <- c(errors, check_slot_fd(object, NULL, rel_cols)) + + #### Check that the rel columns have the right values #### + codes <- c("MZ twin", "DZ twin", "UZ twin", "Spouse") + errors <- c(errors, check_values(object@rel@code, codes)) + + if (length(errors) == 0) { + TRUE + } else { + errors + } + + return(errors) +} + +is_valid_pedigree <- function(object) { + errors <- c() + + #### Check that the family id and individual id present in the rel slot #### + #### are present in the ped slot #### + errors <- c(errors, check_values( + object@rel@family, c(object@ped@family, NA) + )) + errors <- c(errors, check_values(object@rel@id1, object@ped@id)) + errors <- c(errors, check_values(object@rel@id2, object@ped@id)) + + #### Check if twins has same parents #### + code <- object@rel@code + ncode <- as.numeric(code) + id1 <- object@rel@id1 + id2 <- object@rel@id2 + id <- object@ped@id + momid <- object@ped@momid + dadid <- object@ped@dadid + sex <- object@ped@sex + temp1 <- match(id1, id, nomatch = 0) + temp2 <- match(id2, id, nomatch = 0) + if (any(ncode < 3)) { + twins <- (ncode < 3) + if (any(momid[temp1[twins]] != momid[temp2[twins]])) { + errors <- c(errors, "twins found with different mothers") + } + if (any(dadid[temp1[twins]] != dadid[temp2[twins]])) { + errors <- c(errors, "twins found with different fathers") + } + } + + #### Check if the monozygote twins has same gender #### + if (any(ncode == 1)) { + mztwins <- (ncode == 1) + if (any(sex[temp1[mztwins]] != sex[temp2[mztwins]])) { + errors <- c(errors, "MZ twins with different genders") + } + } + + #### Check that the scales columns have the right values #### + errors <- c(errors, check_values( + object@scales@fill$column_values, colnames(object@ped) + )) + errors <- c(errors, check_values( + object@scales@fill$column_mods, colnames(object@ped) + )) + errors <- c(errors, check_values( + object@scales@border$column, colnames(object@ped) + )) + + #### Check that all fill modalities are present in the pedigree data #### + for (col in unique(object@scales@fill$column)){ + errors <- c(errors, check_values( + object@ped[[col]], + object@scales@fill[object@scales@fill$column_mods == col, "mods"] + )) + } + #### Check that all borders modalities are present in the pedigree data #### + for (col in unique(object@scales@border$column)){ + errors <- c(errors, check_values( + object@ped[[col]], + object@scales@border[object@scales@border$column_mods == col, "mods"] + )) + } + + if (length(errors) == 0) { + TRUE + } else { + errors + } + + return(errors) +} \ No newline at end of file diff --git a/R/Pedigree.R b/R/Pedigree.R index a062d56b..7e4cb43d 100644 --- a/R/Pedigree.R +++ b/R/Pedigree.R @@ -108,24 +108,29 @@ setMethod("Pedigree", "character", function(obj, dadid, momid, ped_df <- data.frame( family = family, - id = obj, - dadid = dadid, - momid = momid, - sex = sex + indId = obj, + fatherId = dadid, + motherId = momid, + gender = sex ) - if (any(!is.na(affected))) { + + if (is.null(affected)) { + ped_df$affection <- NA + } else if (any(!is.na(affected))) { if (is.vector(affected)) { ped_df$affection <- affected - } else { + } else if (is.data.frame(affected)) { ped_df <- cbind(ped_df, affected) col_aff <- colnames(affected) + } else { + stop("Affected must be a vector or a data.frame") } } if (any(!is.na(avail))) { ped_df$available <- avail } if (any(!is.na(status))) { - ped_df$vitalStatus <- status + ped_df$vitalstatus <- status } if (any(!is.na(steril))) { ped_df$sterilisation <- steril @@ -149,13 +154,15 @@ setMethod("Pedigree", "character", function(obj, dadid, momid, #' @docType methods setMethod("Pedigree", "data.frame", function( obj = data.frame( - id = character(), - dadid = character(), - momid = character(), - sex = numeric(), + indId = character(), + fatherId = character(), + motherId = character(), + gender = numeric(), family = character(), available = numeric(), - affection = numeric() + vitalstatus = numeric(), + affection = numeric(), + sterilisation = numeric() ), relation = data.frame( id1 = character(), @@ -168,14 +175,14 @@ setMethod("Pedigree", "data.frame", function( "fatherId" = "dadid", "motherId" = "momid", "gender" = "sex", - "family" = "family", "sterilisation" = "steril", - "vitalStatus" = "status", - "affection" = "affected" + "affection" = "affected", + "available" = "avail", + "vitalstatus" = "status" ), cols_ren_rel = list( - "indId1" = "id1", - "indId2" = "id2" + "id1" = "indId1", + "id2" = "indId2" ), scales = list( fill = data.frame( @@ -277,9 +284,23 @@ setMethod("Pedigree", "data.frame", function( return(rel_df) } - rownames(ped_df) <- ped_df$id + cols <- colnames(ped_df) + col_ped <- c("id", "dadid", "momid", "sex", "family") + col_deriv <- c("affected", "kin", "useful", "avail", "steril", "status") + col_rel <- c("id1", "id2", "code", "family") + col_meta <- cols[!(cols %in% c(col_ped, col_deriv))] + ped <- ped_df[, col_ped] + deriv <- ped_df[, col_deriv] + meta <- ped_df[, col_meta] + rel <- rel_df[, col_rel] + + rownames(ped) <- ped_df$id + rownames(deriv) <- ped_df$id + rownames(meta) <- ped_df$id + ## Create the object - ped <- new("Pedigree", ped = ped_df, rel = rel_df, + ped <- new("Pedigree", + ped = ped, deriv = deriv, meta = meta, rel = rel, scales = scales, hints = hints ) diff --git a/R/align.R b/R/align.R index 6c35260e..f0bac39a 100644 --- a/R/align.R +++ b/R/align.R @@ -121,12 +121,12 @@ ancestors <- function(idx, momx, dadx) { align <- function(ped, packed = TRUE, width = 10, align = TRUE, hints = ped$hints, missid = "0" ) { - famlist <- unique(ped(ped)$family) + famlist <- unique(ped(ped, "family")) if (length(famlist) > 1) { nfam <- length(famlist) alignment <- vector("list", nfam) for (i_fam in famlist) { - ped_fam <- ped[ped(ped)$family == i_fam] + ped_fam <- ped[ped(ped, "family") == i_fam] alignment[[i_fam]] <- align(ped_fam, packed, width, align) } return(alignment) @@ -141,17 +141,17 @@ align <- function(ped, packed = TRUE, width = 10, hints <- list(order = seq_len(max(1, dim(ped)))) } } else { - check_hints(hints, ped(ped)$sex) + check_hints(hints, ped(ped, "sex")) } ## Doc: Setup-align - n <- length(ped(ped)$id) + n <- length(ped(ped, "id")) level <- 1 + kindepth(ped, align = TRUE) horder <- hints$order # relative order of siblings within a family if (!is.null(hints$spouse)) { # start with the hints list - tsex <- ped(ped)$sex[hints$spouse[, 1]] # sex of the left member + tsex <- ped(ped, "sex")[hints$spouse[, 1]] # sex of the left member spouselist <- cbind(0, 0, 1 + (tsex != "male"), hints$spouse[, 3]) spouselist[, 1] <- ifelse(tsex == "male", hints$spouse[, 1], hints$spouse[, 2] @@ -163,19 +163,19 @@ align <- function(ped, packed = TRUE, width = 10, spouselist <- matrix(0L, nrow = 0, ncol = 4) } - if (nrow(rel(ped)) > 0 && any(rel(ped)$code == "Spouse")) { + if (nrow(rel(ped)) > 0 && any(rel(ped, "code") == "Spouse")) { # Add spouses from the relationship matrix - trel <- rel(ped)[ - rel(ped)$code == "Spouse", c("id1", "id2"), drop = FALSE + trel <- rel(ped, c("id1", "id2"))[ + rel(ped, "code") == "Spouse", drop = FALSE ] - trel$id1 <- match(trel$id1, ped(ped)$id) - trel$id2 <- match(trel$id2, ped(ped)$id) - tsex <- ped(ped)$sex[trel[, 1]] + trel$id1 <- match(trel$id1, ped(ped, "id")) + trel$id2 <- match(trel$id2, ped(ped, "id")) + tsex <- ped(ped, "sex")[trel[, 1]] trel[tsex != "male", seq_len(2)] <- trel[tsex != "male", 2:1] spouselist <- rbind(spouselist, cbind(trel[, 1], trel[, 2], 0, 0)) } - dad <- match(ped(ped)$dadid, ped(ped)$id, nomatch = 0) - mom <- match(ped(ped)$momid, ped(ped)$id, nomatch = 0) + dad <- match(ped(ped, "dadid"), ped(ped, "id"), nomatch = 0) + mom <- match(ped(ped, "momid"), ped(ped, "id"), nomatch = 0) is_child <- dad > 0 & mom > 0 if (any(is_child)) { # add parents @@ -222,12 +222,12 @@ align <- function(ped, packed = TRUE, width = 10, } } ## Doc: finish align(2) - if (nrow(rel(ped)) > 0 && any(rel(ped)$code != "Spouse")) { + if (nrow(rel(ped)) > 0 && any(rel(ped, "code") != "Spouse")) { twins <- 0 * nid - who <- (rel(ped)$code != "Spouse") - ltwin <- match(rel(ped)[who, "id1"], ped(ped)$id, nomatch = 0) - rtwin <- match(rel(ped)[who, "id2"], ped(ped)$id, nomatch = 0) - ttype <- rel(ped)[who, "code"] + who <- (rel(ped, "code") != "Spouse") + ltwin <- match(rel(ped, "id1")[who], ped(ped, "id"), nomatch = 0) + rtwin <- match(rel(ped, "id2")[who], ped(ped, "id"), nomatch = 0) + ttype <- rel(ped, "code")[who] # find where each of them is plotted (any twin only appears once with a # family id, i.e., under their parents) # matrix of connected-to-parent ids diff --git a/R/auto_hint.R b/R/auto_hint.R index e89240d1..f80f54c6 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -111,8 +111,8 @@ findspouse <- function(idpos, plist, lev, ped) { stop("auto_hint bug 3") } - opposite <- ped(ped)$sex[plist$nid[lev, lpos:rpos]] != - ped(ped)$sex[plist$nid[lev, idpos]] + opposite <- ped(ped, "sex")[plist$nid[lev, lpos:rpos]] != + ped(ped, "sex")[plist$nid[lev, idpos]] ## Can happen with a triple marriage if (!any(opposite)) { @@ -230,11 +230,11 @@ get_twin_rel <- function(ped) { relation <- NULL } else { relation <- cbind( - as.matrix(rel(ped)[, c("id1", "id2")]), - as.numeric(rel(ped)[, "code"]) + as.matrix(rel(ped, c("id1", "id2"))), + as.numeric(rel(ped, "code")) ) } - n <- length(ped(ped)$id) + n <- length(ped) twinset <- rep(0, n) twinord <- rep(1, n) twinrel <- NULL @@ -305,18 +305,18 @@ auto_hint <- function( ## full documentation now in vignette: align_code_details.Rmd ## References to those sections appear here as: ## Doc: auto_hint - if ((!is.null(hints(ped)$order) || - !is.null(hints(ped)$spouse) + if ((!is.null(order(ped)) || + !is.null(spouse(ped)) ) && !reset ) { return(hints(ped)) } # nothing to do - if (length(unique(ped(ped)$family)) > 1) { + if (length(unique(ped(ped, "family"))) > 1) { stop("auto_hint only works on Pedigrees with a single family") } - n <- length(ped(ped)$id) + n <- length(ped) depth <- kindepth(ped, align_parents = TRUE) ## Doc: init-auto_hint diff --git a/R/best_hint.R b/R/best_hint.R index e03a85aa..d46f2e54 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -49,15 +49,15 @@ best_hint <- function(ped, wt = c(1000, 10, 1), tolerance = 0) { # find founders married to founders the female of such pairs # determines the plot order of founders - mom <- match(ped(ped)$momid, ped(ped)$id) - dad <- match(ped(ped)$dadid, ped(ped)$id) + mom <- match(ped(ped, "momid"), ped(ped, "id")) + dad <- match(ped(ped, "dadid"), ped(ped, "id")) # founders and marry-ins - founders <- ped(ped)$id[is.na(mom) & is.na(dad)] - fpair <- !(is.na(match(ped(ped)$momid, founders)) | - is.na(match(ped(ped)$dadid, founders)) + founders <- ped(ped, "id")[is.na(mom) & is.na(dad)] + fpair <- !(is.na(match(ped(ped, "momid"), founders)) | + is.na(match(ped(ped, "dadid"), founders)) ) # row num of founding moms - fmom <- unique(match(ped(ped)$momid[fpair], ped(ped)$id)) + fmom <- unique(match(ped(ped, "momid")[fpair], ped(ped, "id"))) # This function generates the permutations one after the other permute <- function(x) { @@ -80,7 +80,7 @@ best_hint <- function(ped, wt = c(1000, 10, 1), tolerance = 0) { # This way we should hit one of them soon. pmat <- pmat[order(runif(nrow(pmat))), ] - n <- length(ped(ped)$id) + n <- length(ped(ped, "id")) for (perm in seq_len(nrow(pmat))) { hint <- cbind(seq_len(n), rep(0, n)) hint[fmom, 1] <- pmat[perm, ] diff --git a/R/find_avail_affected.R b/R/find_avail_affected.R index 55c209b2..d32ffc7b 100644 --- a/R/find_avail_affected.R +++ b/R/find_avail_affected.R @@ -31,18 +31,20 @@ #' @include utils.R #' @include find_unavailable.R #' @export -find_avail_affected <- function(ped, avail = ped(ped)$avail, affstatus = NA) { +find_avail_affected <- function( + ped, avail = ped(ped, "avail"), affstatus = NA +) { ped_df <- ped(ped) ped_df$avail <- avail not_parent <- !is_parent(ped_df$id, ped_df$dadid, ped_df$momid) if (is.na(affstatus)) { possibl_trim <- ped_df$id[not_parent & avail == 1 & - is.na(ped_df$affected) + is.na(deriv(ped, "affected")) ] } else { possibl_trim <- ped_df$id[not_parent & avail == 1 & - ped_df$affected == affstatus + deriv(ped, "affected") == affstatus ] } n_trim <- length(possibl_trim) diff --git a/R/find_avail_noninform.R b/R/find_avail_noninform.R index bff4c84d..ecd887bd 100644 --- a/R/find_avail_noninform.R +++ b/R/find_avail_noninform.R @@ -24,7 +24,7 @@ #' #' @seealso [shrink()] #' @export -find_avail_noninform <- function(ped, avail = ped(ped)$avail, missid = "0") { +find_avail_noninform <- function(ped, avail = ped(ped, "avail"), missid = "0") { ## trim persons who are available but not informative b/c not parent by ## setting their availability to FALSE, then call find_unavailable() JPS ## 3/10/14 add strings check in case of char ids diff --git a/R/find_unavailable.R b/R/find_unavailable.R index a8f55101..b3bd66f5 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -36,7 +36,7 @@ #' @seealso [shrink()] #' @include utils.R #' @export -find_unavailable <- function(ped, avail = ped(ped)$avail) { +find_unavailable <- function(ped, avail = ped(ped, "avail")) { ## find id within Pedigree anyone who is not available and ## does not have an available descendant @@ -45,19 +45,19 @@ find_unavailable <- function(ped, avail = ped(ped)$avail) { ## will do this iteratively by successively removing unavailable ## terminal nodes ## Steve Iturria, PhD, modified by Dan Schaid - df <- ped(ped) - df$avail <- avail + ped_df <- ped(ped) + ped_df$avail <- avail cont <- TRUE # flag for whether to keep iterating - df$is_terminal <- (is_parent(df$id, df$dadid, df$momid) == FALSE) + ped_df$is_terminal <- (is_parent(ped_df$id, ped_df$dadid, ped_df$momid) == FALSE) ## JPS 3/10/14 add strings check in case of char ids while (cont) { - id_to_remove <- df$id[df$is_terminal & df$avail == 0] + id_to_remove <- ped_df$id[ped_df$is_terminal & ped_df$avail == 0] if (length(id_to_remove) > 0) { - idx_to_remove <- match(id_to_remove, df$id) - df <- df[-idx_to_remove, ] - df$is_terminal <- - (is_parent(df$id, df$dadid, df$momid) == FALSE) + idx_to_remove <- match(id_to_remove, ped_df$id) + ped_df <- ped_df[-idx_to_remove, ] + ped_df$is_terminal <- + (is_parent(ped_df$id, ped_df$dadid, ped_df$momid) == FALSE) } else { cont <- FALSE } @@ -67,14 +67,14 @@ find_unavailable <- function(ped, avail = ped(ped)$avail) { ## remove unavailable founders tmp_ped <- exclude_unavail_founders( - df$id, - df$dadid, df$momid, df$avail + ped_df$id, + ped_df$dadid, ped_df$momid, ped_df$avail ) ## remove stray marry-ins tmp_ped <- exclude_stray_marryin(tmp_ped$id, tmp_ped$dadid, tmp_ped$momid) - ped(ped)$id[is.na(match(ped(ped)$id, tmp_ped$id))] + ped(ped, "id")[is.na(match(ped(ped, "id"), tmp_ped$id))] } #' Exclude stray marry-ins diff --git a/R/generate_colors.R b/R/generate_colors.R index fde099c1..348cbf45 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -313,7 +313,7 @@ setMethod("generate_colors", "logical", setMethod("generate_colors", "Pedigree", function(obj, col_aff = "affected", add_to_scale = TRUE, - col_avail = "avail", + col_avail = "available", mods_aff = NULL, threshold = 0.5, sup_thres_aff = TRUE, keep_full_scale = FALSE, breaks = 3, colors_aff = c("yellow2", "red"), @@ -338,7 +338,7 @@ setMethod("generate_colors", "Pedigree", } new_col <- paste0(col_aff, "_aff") - df <- check_columns(obj$ped, c(col_aff, col_avail), + df <- check_columns(meta(obj), c(col_aff, col_avail), "", new_col, others_cols = TRUE ) @@ -348,7 +348,7 @@ setMethod("generate_colors", "Pedigree", colors_aff, colors_unaff, colors_avail ) - df[new_col] <- lst_sc$mods + deriv(obj, new_col) <- lst_sc$mods if (nrow(lst_sc$fill_scale) > 0) { lst_sc$fill_scale$column_mods <- new_col lst_sc$fill_scale$column_values <- col_aff @@ -359,8 +359,6 @@ setMethod("generate_colors", "Pedigree", border = lst_sc$border_scale ) - obj$ped <- df - if (add_to_scale) { if (col_aff %in% obj$scales$fill$column_values & !reset) { diff --git a/R/is_informative.R b/R/is_informative.R index 35c1f291..f776b698 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -98,8 +98,9 @@ setMethod("is_informative", "character", function( setMethod("is_informative", "Pedigree", function( obj, col_aff = NULL, informative = "AvAf", missid = "0", reset = FALSE ) { - obj$ped$affected <- NA - aff_scl <- obj$scales$fill + ped <- obj + deriv(ped, "affected") <- NA + aff_scl <- fill(ped) if (is.null(col_aff)) { stop("The col_aff argument is required") } diff --git a/R/make_famid.R b/R/make_famid.R index 339ce4a7..8ae8fbe3 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -101,16 +101,13 @@ setMethod("make_famid", "character", setMethod("make_famid", "Pedigree", function(obj) { ped <- obj - family <- make_famid(ped(ped)$id, ped(ped)$dadid, ped(ped)$momid) - col_ped_compute <- c("sex", "avail", "id", "dadid", "momid", - "family", "momid", "error", "steril", "status" + family <- make_famid( + ped(ped, "id"), ped(ped, "dadid"), ped(ped, "momid") ) - ped_df <- ped(ped)[! colnames(ped(ped)) %in% col_ped_compute] - ped_df$family <- family - col_rel_compute <- c("family", "error") - rel_df <- rel(ped)[! colnames(rel(ped)) %in% col_rel_compute] - fam_id1 <- family[match(rel_df$id1, ped(ped)$id)] - fam_id2 <- family[match(rel_df$id2, ped(ped)$id)] + ped(obj, "family") <- family + + fam_id1 <- family[match(rel(ped, "id1"), ped(ped, "id"))] + fam_id2 <- family[match(rel(ped, "id2"), ped(ped, "id"))] if (any(fam_id1 != fam_id2)) { stop("The two individuals in the relationship", @@ -118,9 +115,8 @@ setMethod("make_famid", "Pedigree", ) } - rel_df$family <- fam_id1 - Pedigree(ped_df, rel_df, - scales = scales(ped), normalize = TRUE - ) + rel(ped, "family") <- fam_id1 + validObject(ped) + ped } ) \ No newline at end of file diff --git a/R/min_dist_inf.R b/R/min_dist_inf.R index 8304b95b..b14a882a 100644 --- a/R/min_dist_inf.R +++ b/R/min_dist_inf.R @@ -85,18 +85,18 @@ setMethod("min_dist_inf", "Pedigree", function(obj, missid, reset ) - cols_needed <- c("avail", "affected") - check_columns(ped(ped), cols_needed, NULL, NULL, others_cols = TRUE) - kin <- min_dist_inf( - ped(ped)$id, ped(ped)$dadid, ped(ped)$momid, ped(ped)$sex, - ped(ped)$avail, ped(ped)$affected, informative + ped(ped, "id"), ped(ped, "dadid"), ped(ped, "momid"), ped(ped, "sex"), + ped(ped, "avail"), deriv(ped, "affected"), informative ) - if (!reset) { - check_columns(ped(ped), NULL, "kin", NULL) + if (!reset & deriv(ped, "kin") != NULL) { + stop( + "The kin column already exists in the Pedigree object", + " and reset is set to FALSE" + ) } - ped(ped)$kin <- kin + deriv(ped, "kin") <- kin ped }) diff --git a/R/norm_data.R b/R/norm_data.R index 628c2952..eba8ab1d 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -87,11 +87,12 @@ norm_ped <- function( err <- data.frame(matrix(NA, nrow = nrow(ped_df), ncol = length(err_cols))) colnames(err) <- err_cols cols_need <- c("indId", "fatherId", "motherId", "gender") - cols_used <- c("sex", "steril", "avail", "id", "dadid", "momid", "error", - "affected", "status" + cols_used <- c( + "sex", "steril", "status", "avail", "id", "dadid", "momid", + "error", "affected", "kin", "useful" ) - cols_to_use <- c("sterilisation", "available", "family", - "vitalStatus", "affection" + cols_to_use <- c( + "available", "family", "sterilisation", "vitalstatus", "affection" ) ped_df <- check_columns( ped_df, cols_need, cols_used, cols_to_use, @@ -131,8 +132,8 @@ norm_ped <- function( is_mother <- ped_df$id %in% ped_df$momid & !is.na(ped_df$id) ## Add missing sex due to parenthood - ped_df$sex[is.na(ped_df$gender) & is_father] <- "male" - ped_df$sex[is.na(ped_df$gender) & is_mother] <- "female" + ped_df$sex[is_father] <- "male" + ped_df$sex[is_mother] <- "female" ## Add terminated for sterilized individuals that is neither dad nor mom if ("sterilisation" %in% colnames(ped_df)) { @@ -212,10 +213,9 @@ norm_ped <- function( ped_df$avail <- vect_to_binary(ped_df$available) } #### Status #### - if ("vitalStatus" %in% colnames(ped_df)) { - ped_df$status <- vect_to_binary(ped_df$vitalStatus) + if ("vitalstatus" %in% colnames(ped_df)) { + ped_df$status <- vect_to_binary(ped_df$vitalstatus) } - #### Affected #### if ("affection" %in% colnames(ped_df)) { ped_df$affected <- vect_to_binary(ped_df$affection) @@ -266,8 +266,8 @@ norm_ped <- function( #' #' @examples #' df <- data.frame( -#' indId1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), -#' indId2 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 1), +#' id1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), +#' id2 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 1), #' code = c("MZ twin", "DZ twin", "UZ twin", "Spouse", 1, 2, #' 3, 4, "MzTwin", "sp oUse"), #' family = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2) @@ -281,8 +281,8 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = "0") { err_cols <- c("codeErr", "sameIdErr", "id1Err", "id2Err", "error") err <- data.frame(matrix(NA, nrow = nrow(rel_df), ncol = length(err_cols))) colnames(err) <- err_cols - cols_needed <- c("indId1", "indId2", "code") - cols_used <- c("id1", "id2", "error") + cols_needed <- c("id1", "id2", "code") + cols_used <- c("error") cols_to_use <- c("family") rel_df <- check_columns( rel_df, cols_needed, cols_used, cols_to_use, @@ -302,17 +302,17 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = "0") { #### Check for id errors #### Set ids as characters rel_df <- rel_df %>% - mutate(across(c("indId1", "indId2"), as.character)) + mutate(across(c("id1", "id2"), as.character)) ## Check for non null ids - len1 <- nchar(rel_df$indId1) - len2 <- nchar(rel_df$indId2) + len1 <- nchar(rel_df$id1) + len2 <- nchar(rel_df$id2) err$id1Err[is.na(len1) | len1 == missid] <- "indId1length0" err$id2Err[is.na(len2) | len2 == missid] <- "indId2length0" ## Compute id with family id - rel_df$id1 <- prefix_famid(rel_df$family, rel_df$indId1, missid) - rel_df$id2 <- prefix_famid(rel_df$family, rel_df$indId2, missid) + rel_df$id1 <- prefix_famid(rel_df$family, rel_df$id1, missid) + rel_df$id2 <- prefix_famid(rel_df$family, rel_df$id2, missid) err$sameIdErr[rel_df$id1 == rel_df$id2] <- "SameId" diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index 0d084e12..1ae434a9 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -37,9 +37,9 @@ ped_to_legdf <- function(ped, adjy = numeric() ) sex_equiv <- c("Male", "Female", "Terminated", "Unknown") - all_lab <- list(sex_equiv, scales(ped)$border$labels) - all_aff <- lapply(unique(scales(ped)$fill$order), function(x) { - scales(ped)$fill$labels[scales(ped)$fill$order == x] + all_lab <- list(sex_equiv, border(ped, "labels")) + all_aff <- lapply(unique(fill(ped, "order")), function(x) { + fill(ped, "labels")[fill(ped, "order") == x] }) all_lab <- c(all_lab, all_aff) @@ -63,7 +63,7 @@ ped_to_legdf <- function(ped, posy <- cumsum(posy) - boxh posy <- posy[seq_along(posy) %% 2 == 0] - all_aff <- scales(ped)$fill + all_aff <- fill(ped) n_aff <- length(unique(all_aff$order)) lab_title <- c("Sex", "Border", unique(all_aff$column_values)) @@ -77,7 +77,7 @@ ped_to_legdf <- function(ped, # Sex poly1 <- polygons(1) - all_sex <- unique(as.numeric(ped(ped)$sex)) + all_sex <- unique(as.numeric(ped(ped, "sex"))) sex <- data.frame( x0 = posx[1], y0 = posy[all_sex], type = paste(names(poly1)[all_sex], 1, 1, sep = "_"), @@ -98,16 +98,15 @@ ped_to_legdf <- function(ped, plot_df <- rbind.fill(plot_df, sex, sex_label) # Border - bord_df <- scales(ped)$border - border_mods <- unique(ped(ped)[, unique(bord_df[["column"]])]) + border_mods <- unique(ped(ped)[, unique(border(ped, "column"))]) border <- data.frame( x0 = posx[3], y0 = posy[seq_along(border_mods)], type = rep("square_1_1", length(border_mods)), - border = bord_df$border[match(border_mods, bord_df$mods)], + border = border(ped, "border")[match(border_mods, border(ped, "mods"))], fill = "white", id = "border" ) - lab <- bord_df$labels[match(border_mods, bord_df$mods)] + lab <- border(ped, "labels")[match(border_mods, border(ped, "mods"))] lab[is.na(lab)] <- "NA" border_label <- data.frame( x0 = posx[4] + adjx, diff --git a/R/ped_to_plotdf.R b/R/ped_to_plotdf.R index 2e4d6692..ec827d18 100644 --- a/R/ped_to_plotdf.R +++ b/R/ped_to_plotdf.R @@ -32,12 +32,12 @@ ped_to_plotdf <- function( aff_mark = TRUE, label = NULL, ... ) { - famlist <- unique(ped(ped)$family) + famlist <- unique(ped(ped, "family")) if (length(famlist) > 1) { nfam <- length(famlist) all_df <- vector("list", nfam) for (i_fam in famlist) { - ped_fam <- ped[ped(ped)$family == i_fam] + ped_fam <- ped[ped(ped, "family") == i_fam] all_df[[i_fam]] <- ped_to_plotdf(ped_fam, packed, width, align, subreg, cex, symbolsize, ... ) @@ -62,7 +62,7 @@ ped_to_plotdf <- function( maxlev <- nrow(plist$pos) params_plot <- set_plot_area( - cex, ped(ped)$id, maxlev, xrange, symbolsize, ... + cex, ped(ped, "id"), maxlev, xrange, symbolsize, ... ) boxw <- params_plot$boxw @@ -80,16 +80,15 @@ ped_to_plotdf <- function( # y position i <- (seq_len(length(plist$nid)) - 1) %% length(plist$n) + 1 # sex of each box - sex <- as.numeric(ped(ped)$sex)[id[idx]] + sex <- as.numeric(ped(ped, "sex"))[id[idx]] - all_aff <- scales(ped)$fill - bord_df <- scales(ped)$border - n_aff <- length(unique(all_aff$order)) + all_aff <- fill(ped) + n_aff <- length(unique(fill(ped, "order"))) polylist <- polygons(max(1, n_aff)) # border mods of each box - border_mods <- ped(ped)[id[idx], unique(bord_df[["column"]])] - border_idx <- match(border_mods, bord_df[["mods"]]) + border_mods <- ped(ped)[id[idx], unique(border(ped, "column"))] + border_idx <- match(border_mods, border(ped, "mods")) for (aff in seq_len(n_aff)) { aff_df <- all_aff[all_aff$order == aff, ] @@ -116,7 +115,7 @@ ped_to_plotdf <- function( fill = aff_df[aff_idx, "fill"], density = aff_df[aff_idx, "density"], angle = aff_df[aff_idx, "angle"], - border = bord_df[border_idx, "border"], + border = border(ped, "border")[border_idx], id = "polygon" ) plot_df <- rbind.fill(plot_df, ind) diff --git a/R/shrink.R b/R/shrink.R index 86aadeae..bb90e40e 100644 --- a/R/shrink.R +++ b/R/shrink.R @@ -41,7 +41,7 @@ #' @seealso [Pedigree()], [bit_size()] #' @export shrink <- function( - ped, avail = ped(ped)$avail, affected = ped(ped)$affected, max_bits = 16 + ped, avail = ped(ped, "avail"), affected = deriv(ped, "affected"), max_bits = 16 ) { if (any(is.na(avail))) { stop("NA values not allowed in avail vector.") @@ -49,7 +49,7 @@ shrink <- function( id_trim <- numeric() id_lst <- list() - n_origin <- length(ped(ped)$id) + n_origin <- length(ped) bitsize_old <- bit_size(ped)$bit_size @@ -60,7 +60,7 @@ shrink <- function( if (length(id_trim_unav)) { ped_trim <- trim(ped, id_trim_unav) - avail <- avail[match(ped_trim$ped$id, ped(ped)$id)] + avail <- avail[match(ped_trim$ped$id, ped(ped, "id"))] id_trim <- c(id_trim, id_trim_unav) id_lst$unavail <- id_trim_unav diff --git a/R/trim.R b/R/trim.R index 7f62322e..72d5ea21 100644 --- a/R/trim.R +++ b/R/trim.R @@ -17,11 +17,10 @@ trim <- function(ped, id_rm, missid = "0") { ## trim subjects from a Pedigree who match the removeID trim relation ## matrix as well - rmidx <- match(id_rm, ped(ped)$id) + rmidx <- match(id_rm, ped(ped, "id")) if (length(rmidx) > 0) { - ped(ped)[ped(ped)$dadid %in% id_rm | - ped(ped)$momid %in% id_rm, - c("dadid", "momid")] <- missid + ped(ped, c("dadid", "momid"))[ped(ped, "dadid") %in% id_rm | + ped(ped, "momid") %in% id_rm] <- missid ped[-rmidx, ] } else { ped diff --git a/R/unrelated.R b/R/unrelated.R index c6e315d4..1d34dcc9 100644 --- a/R/unrelated.R +++ b/R/unrelated.R @@ -46,7 +46,7 @@ NULL #' ## [1] '110' '113' '116' '109' #' ## [1] '113' '133' '141' '109' #' @export -unrelated <- function(ped, avail = ped(ped)$avail) { +unrelated <- function(ped, avail = ped(ped, "avail")) { # Requires: kinship function # Given vectors id, father, and mother for a Pedigree structure, and avail @@ -62,7 +62,7 @@ unrelated <- function(ped, avail = ped(ped)$avail) { # count of zeros for rows, a random choice is made. Hence, running this # function multiple times can return different sets of unrelated subjects. - id <- ped(ped)$id + id <- ped(ped, "id") kin <- kinship(ped) diff --git a/R/utils.R b/R/utils.R index e26e2659..d893f446 100644 --- a/R/utils.R +++ b/R/utils.R @@ -249,6 +249,7 @@ sex_to_factor <- function(sex) { ), sex_equiv, warn_missing = FALSE)) sex_codes <- c("male", "female", "unknown", "terminated") sex[!sex %in% sex_codes] <- "unknown" + sex <- factor(sex, sex_codes, ordered = TRUE) sex diff --git a/data/sampleped.rda b/data/sampleped.rda index 5662217556addf2d51501e7d1b25672a4e0f7ecf..9a9024d3c4fba313966d423a3320ac3132621cf3 100644 GIT binary patch literal 546 zcmV+-0^R*WT4*^jL0KkKSqOJ?S^x&x|G@vc$bf(Wf8YcF5I`>{-QYj~00BS(oFNT$ zox@XV1NBmmNv41r001<4gDF1}lxSob0MInkG?_4jJxWhg(@~%UO$JnLQur3Mg|Lj0WuL7 zOcYI(5{MFR7~nyLFjk|uS69xaqnAf5X?8>o)l>+eR800&N`+Y{lH)!c@r)U}=P@2| z7VM-!!4x+HMRtHx6-7R~=^dltOV literal 550 zcmV+>0@?jST4*^jL0KkKS>uP|vUg#(X$9`=@T7s%y9>Cu^cA}(-$I-619y@D5BRrIyHLYt_ z-~a#s0000000001rR!Frdc{-DFn63_@erAAF(KmPB+eyCxECw{1Pq3{ za7_+SNtj99oOTdhKq}4b6xE9+*Q7+UOR6AnRX~abMANFOR4U0tml@g17{QyqQxW9> zZpuU)5kqi9S4agxR8zNoBcyx0dBZSWt8SleM=6xehG1h5g9wo$5-}u62tou%`m98? zB~X$eC7(5jm`DI5kp!etB&3i8OSa0ULP9{1H)ac2*In8fbDK-%o1!|Rt1~Jy00005 zhiJv#$|NBP7D#{rAtNIoNXS;Toa?TEmpQjwNdV3|IL z>QI70g{ierGTA^WX5=A|+B-Y_Hh*x@w~rsu_qO}@cKrISvS-SF*TYQWYk&5(+fA8H oHE!LEQd%}_*k4}@i_@% diff --git a/devel/documentation/S4_class.md b/devel/documentation/S4_class.md new file mode 100644 index 00000000..615a8394 --- /dev/null +++ b/devel/documentation/S4_class.md @@ -0,0 +1,26 @@ +# The Pedigree S4 class + +The different slots: + +- ped +- derived +- rel +- meta +- scales +- hints + +What to expose: +- meta +- input + +What to not expose: +- id +- derived +- scales + +Accessors: +- mcols +- fill_colors +- col_id +- col_derived +- col_input diff --git a/devel/idea/debugging.R b/devel/idea/debugging.R new file mode 100644 index 00000000..16d8eb17 --- /dev/null +++ b/devel/idea/debugging.R @@ -0,0 +1,10 @@ +load_all() +ped <- Pedigree(data.frame( + id = character(), + dadid = character(), + momid = character(), + sex = numeric(), + family = character(), + avail = numeric(), + affection = numeric() +)) diff --git a/devel/idea/pedigree2Class.R b/devel/idea/pedigree2Class.R new file mode 100644 index 00000000..e69de29b diff --git a/devel/old/pedigreeAccessors.R b/devel/old/pedigreeAccessors.R new file mode 100644 index 00000000..aca43ab0 --- /dev/null +++ b/devel/old/pedigreeAccessors.R @@ -0,0 +1,294 @@ +#### S4 Accessors #### +#' @include Pedigree.R +#' @include pedigreeClass.R +NULL + +#### S4 ped Accessors #### +#' @title Pedigree ped accessors +#' @param object A Pedigree object. +#' @return The slot `ped` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases ped,Pedigree-method +#' @export +setGeneric("ped", function(object, col) { + standardGeneric("ped") +}) + +setMethod( + "ped", + signature(object = "Pedigree", col = "ANY"), + function(object, col) { + object@ped[col] + } +) + +setMethod( + "ped", + signature(object = "Pedigree", col = "missing"), + function(object) { + object@ped + } +) + +setGeneric("ped<-", function(object, value) { + standardGeneric("ped<-") +}) + +setReplaceMethod("ped", signature(object = "Pedigree", value = "Ped"), + function(object, value) { + object@ped <- value + validObject(object) + object + } +) + +#### S4 metadata Accessors #### +#' @title Pedigree metadata accessors +#' @param object A Pedigree object. +#' @return The metadata present in the Pedigree object. +#' @rdname extract-methods +#' @aliases mcols,Pedigree-method +#' @export +setMethod( + "mcols", + signature(object = "Pedigree"), + function(object) { + mcols(object@ped) + } +) + +setMethod( + "mcols<-", + signature(object = "Pedigree", value = "ANY"), + function(object) { + mcols(object@ped) <- value + } +) + +#### S4 rel Accessors #### + +#' @description Pedigree rel accessors +#' @param object A Pedigree object. +#' @return The slot `rel` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases rel,Pedigree-method +#' @export +setGeneric("rel", function(object, col) { + standardGeneric("rel") +}) + +setMethod( + "rel", + signature(object = "Pedigree", col = "ANY"), + function(object, col) { + object@rel[col] + } +) + +setMethod( + "rel", + signature(object = "Pedigree", col = "missing"), + function(object, col) { + object@rel + } +) + +setGeneric("rel<-", function(object, col, value) { + standardGeneric("rel<-") +}) + +setMethod( + "rel<-", + signature(object = "Pedigree", col = "ANY", value = "ANY"), + function(object, col, value) { + rel_cols <- c("id1", "id2", "code", "family") + if (! col %in% rel_cols) { + stop("Col selected: ", col, " is not a relationship column") + } + if (length(value) != length(object)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) + } + object@rel[col] <- value + validObject(object) + object + } +) + +#### S4 scales Accessors #### +#' @description Pedigree scales accessors +#' @param object A Pedigree object. +#' @return The slot `scales` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases scales,Pedigree-method +#' @export +setGeneric("scales", function(object) { + standardGeneric("scales") +}) + +setMethod("scales", signature(object = "Pedigree"), function(object) { + object@scales +}) +#### S4 fill Accessors #### +#' @description Pedigree fill accessors +#' @param object A Pedigree object. +#' @return The slot `fill` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases fill,Pedigree-method +#' @export +setGeneric("fill", function(object, col) { + standardGeneric("fill") +}) + +setMethod("fill", + signature(object = "Pedigree", col = "ANY"), + function(object, col) { + object@scales$fill[col] + } +) + +setMethod("fill", + signature(object = "Pedigree", col = "missing"), + function(object) { + object@scales$fill + } +) + +setGeneric("fill<-", function(object, col, value) { + standardGeneric("fill<-") +}) + +setMethod( + "fill<-", + signature(object = "Pedigree", col = "ANY", value = "ANY"), + function(object, col, value) { + fill_cols <- c("column", "column_values") + if (! col %in% fill_cols) { + stop("Col selected: ", col, " is not a fill column") + } + object@scales$fill[col] <- value + validObject(object) + object + } +) + +#### S4 border Accessors #### +#' @description Pedigree border accessors +#' @param object A Pedigree object. +#' @return The slot `border` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases border,Pedigree-method +#' @export +setGeneric("border", function(object, col) { + standardGeneric("border") +}) + +setMethod("border", + signature(object = "Pedigree", col = "ANY"), + function(object, col) { + object@scales$border[col] + } +) + +setGeneric("border<-", function(object, col, value) { + standardGeneric("border<-") +}) + +setMethod( + "border<-", + signature(object = "Pedigree", col = "ANY", value = "ANY"), + function(object, col, value) { + fill_cols <- c("column", "column_values") + if (! col %in% fill_cols) { + stop("Col selected: ", col, " is not a border column") + } + object@scales$border[col] <- value + validObject(object) + object + } +) + +#### S4 hints Accessors #### +#' @description Pedigree hints accessors +#' @param object A Pedigree object. +#' @return The slot `hints` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases hints,Pedigree-method +#' @export +setGeneric("hints", function(object) { + standardGeneric("hints") +}) + +setMethod("hints", signature(object = "Pedigree"), function(object) { + object@hints +}) +#### S4 order Accessors #### +#' @description Pedigree order accessors +#' @param object A Pedigree object. +#' @return The slot `order` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases order,Pedigree-method +#' @export +setGeneric("order", function(object) { + standardGeneric("order") +}) + +setMethod("order", signature(object = "Pedigree"), function(object) { + object@hints$order +}) + +setGeneric("order<-", function(object, value) { + standardGeneric("order<-") +}) + +setMethod( + "order<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + if (length(value) != length(object)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) + } + object@hints$order <- value + validObject(object) + object + } +) +#### S4 spouse Accessors #### +#' @description Pedigree spouse accessors +#' @param object A Pedigree object. +#' @return The slot `spouse` present in the Pedigree object. +#' @rdname extract-methods +#' @aliases spouse,Pedigree-method +#' @export +setGeneric("spouse", function(object) { + standardGeneric("spouse") +}) + +setMethod("spouse", signature(object = "Pedigree"), function(object) { + object@hints$spouse +}) + +setGeneric("spouse<-", function(object, value) { + standardGeneric("spouse<-") +}) + +setMethod( + "spouse<-", + signature(object = "Pedigree", value = "ANY"), + function(object, value) { + if (length(value) != length(object)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) + } + object@hints$spouse <- value + validObject(object) + object + } +) \ No newline at end of file diff --git a/R/pedigreeClass.R b/devel/old/pedigreeClass.R similarity index 69% rename from R/pedigreeClass.R rename to devel/old/pedigreeClass.R index a1272132..d90f7cb1 100644 --- a/R/pedigreeClass.R +++ b/devel/old/pedigreeClass.R @@ -41,13 +41,15 @@ NULL #' @name Pedigree-class #' @rdname Pedigree-class #' @aliases Pedigree-class -#' @include validity.R +#' @include pedigreeValidity.R #' @include Pedigree.R #' @export setClass( "Pedigree", - slots = c( + representation( ped = "data.frame", + deriv = "data.frame", + meta = "data.frame", rel = "data.frame", scales = "list", hints = "list" @@ -56,169 +58,6 @@ setClass( setValidity("Pedigree", is_valid) -#### S4 Accessors #### - -#' @title Pedigree ped accessors -#' @param object A Pedigree object. -#' @return The slot `ped` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases ped,Pedigree-method -#' @export -setGeneric("ped", function(object) { - standardGeneric("ped") -}) - -setMethod("ped", signature(object = "Pedigree"), function(object) { - object@ped -}) - -setGeneric("ped<-", function(object, value) { - standardGeneric("ped<-") -}) - -setMethod( - "ped<-", - signature(object = "Pedigree", value = "ANY"), - function(object, value) { - object@ped <- value - validObject(object) - object - } -) - -#' @description Pedigree rel accessors -#' @param object A Pedigree object. -#' @return The slot `rel` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases rel,Pedigree-method -#' @export -setGeneric("rel", function(object) { - standardGeneric("rel") -}) - -setMethod("rel", signature(object = "Pedigree"), function(object) { - object@rel -}) - -setGeneric("rel<-", function(object, value) { - standardGeneric("rel<-") -}) - -setMethod( - "rel<-", - signature(object = "Pedigree", value = "ANY"), - function(object, value) { - object@rel <- value - validObject(object) - object - } -) - -#' @description Pedigree scales accessors -#' @param object A Pedigree object. -#' @return The slot `scales` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases scales,Pedigree-method -#' @export -setGeneric("scales", function(object) { - standardGeneric("scales") -}) - -setMethod("scales", signature(object = "Pedigree"), function(object) { - object@scales -}) - -setGeneric("scales<-", function(object, value) { - standardGeneric("scales<-") -}) - -setMethod( - "scales<-", - signature(object = "Pedigree", value = "ANY"), - function(object, value) { - object@scales <- value - validObject(object) - object - } -) - -#' @description Pedigree hints accessors -#' @param object A Pedigree object. -#' @return The slot `hints` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases hints,Pedigree-method -#' @export -setGeneric("hints", function(object) { - standardGeneric("hints") -}) - -setMethod("hints", signature(object = "Pedigree"), function(object) { - object@hints -}) - -setGeneric("hints<-", function(object, value) { - standardGeneric("hints<-") -}) - -setMethod( - "hints<-", - signature(object = "Pedigree", value = "ANY"), - function(object, value) { - object@hints <- value - validObject(object) - object - } -) - - -#' @description Pedigree hints accessors -#' @param object A Pedigree object. -#' @return The slot `hints` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases hints,Pedigree-method -#' @export -setGeneric("col_id", function(object, col) { - standardGeneric("col_id") -}) - -setMethod( - "col_id", - signature(object = "Pedigree", col = "ANY"), - function(object, col) { - col_id <- c("id", "dadid", "momid", "sex") - if (is.null(col)) { - col <- col_id - } else if (!all(col %in% col_id)) { - stop( - "Col selected: ", - col[!col %in% col_id], - " is not an identity column" - ) - } - ped(ped)[col] - } -) - -setGeneric("col_id<-", function(object, value) { - standardGeneric("col_id<-") -}) - -setMethod( - "col_id<-", - signature(object = "Pedigree", col = "ANY", value = "ANY"), - function(object, value) { - if (! length(value) %in% c(1, length(object))) { - stop( - "The length of the new value should be:", - "1 or equal to the length of the pedigree" - ) - } - ped(ped)[col] <- value - validObject(object) - object - } -) - #### S4 methods #### #' @title Pedigree methods @@ -390,7 +229,7 @@ setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), allId <- unique(c(ped_df$id, ped_df$dadid, ped_df$momid)) rel_df <- x$rel[x$rel$id1 %in% allId & x$rel$id2 %in% allId, ] idx <- match(allId, ped_df$id, nomatch = 0) - sub_hints <- sub_sel_hints(x$hints, idx) + sub_hints <- sub_sel_hints(hints(x), idx) new_ped <- Pedigree(ped_df, rel_df, x$scales, hints = sub_hints, cols_ren_ped = NULL, normalize = FALSE ) @@ -404,6 +243,7 @@ setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), #' @return A data.frame with the individuals informations. #' @docType methods #' @aliases as.data.frame,Pedigree-method +#' @rdname extract-methods #' @export setMethod("as.data.frame", c(x = "Pedigree"), function(x) { @@ -412,18 +252,21 @@ setMethod("as.data.frame", c(x = "Pedigree"), ) #' Convert a Pedigree object to a list -#' @param x A Pedigree object. +#' @param from A Pedigree object. #' @return A list with all the slots of the Pedigree object. #' @docType methods #' @aliases as.list,Pedigree-method +#' @rdname extract-methods #' @export -setMethod("as.list", c(x = "Pedigree"), - function(x) { +setAs("Pedigree", "list", + function(from) { list( - ped = x$ped, - rel = x$rel, - scales = x$scales, - hints = x$hints + ped = ped(from), + meta = meta(from), + deriv = deriv(from), + rel = rel(from), + scales = scales(from), + hints = hints(from) ) } ) diff --git a/R/validity.R b/devel/old/pedigreeValidity.R similarity index 91% rename from R/validity.R rename to devel/old/pedigreeValidity.R index 19709715..6ea8afba 100644 --- a/R/validity.R +++ b/devel/old/pedigreeValidity.R @@ -26,15 +26,17 @@ paste0max <- function(x, max = 5, ...) { #' @keywords internal check_slot_fd <- function(obj, slot = NULL, fields = character()) { if (is.object(obj)) { - obj <- as.list(obj) + obj <- as(obj, "list") } - if (is.data.frame(obj[[slot]])) { + if (is.null(slot)) { + array_names <- names(obj) + } else if (is.data.frame(obj[[slot]])) { array_names <- colnames(obj[[slot]]) } else if (is.list(obj[[slot]])) { array_names <- names(obj[[slot]]) } else { stop( - "Slot ", slot, " is not a data.frame or a list.", + "Slot ", slot, " is not a data.frame or a list. ", class(obj[[slot]]), " found." ) } @@ -100,10 +102,8 @@ is_valid <- function(object) { errors <- c() #### Check that the slots have the right columns #### - ped_cols <- c( - "id", "dadid", "momid", "family", - "sex", "steril", "status", "avail", "affected" - ) + ped_cols <- c("id", "dadid", "momid", "family", "sex") + deriv_cols <- c("affected", "kin", "useful", "avail", "steril", "status") rel_cols <- c("id1", "id2", "code", "family") fill_cols <- c( "order", "column_values", "column_mods", "mods", @@ -111,12 +111,12 @@ is_valid <- function(object) { ) border_cols <- c("column", "mods", "labels", "border") errors <- c(errors, check_slot_fd(object, "ped", ped_cols)) + errors <- c(errors, check_slot_fd(object, "deriv", deriv_cols)) errors <- c(errors, check_slot_fd(object, "rel", rel_cols)) errors <- c(errors, check_slot_fd(object, "scales", c("fill", "border"))) errors <- c(errors, check_slot_fd(object$scales, "fill", fill_cols)) errors <- c(errors, check_slot_fd(object$scales, "border", border_cols)) - #### Check that the ped columns have the right values #### # Check for ped$id uniqueness if (any(duplicated(object$ped$id))) { @@ -194,13 +194,13 @@ is_valid <- function(object) { # Check that the scales columns have the right values errors <- c(errors, check_values( - object$scales$fill$column_values, colnames(object$ped) + object$scales$fill$column_values, colnames(mcols(object)) )) errors <- c(errors, check_values( - object$scales$fill$column_mods, colnames(object$ped) + object$scales$fill$column_mods, colnames(mcols(object)) )) errors <- c(errors, check_values( - object$scales$border$column, colnames(object$ped) + object$scales$border$column, colnames(mcols(object)) )) # Check that all modalities are present in the scales diff --git a/inst/extdata/sampleped.tab b/inst/extdata/sampleped.tab index 043253e7..72e63af4 100644 --- a/inst/extdata/sampleped.tab +++ b/inst/extdata/sampleped.tab @@ -1,4 +1,4 @@ -"family" "id" "dadid" "momid" "sex" "affected" "available" +"family" "id" "dadid" "momid" "sex" "affection" "avail" "1" 1 101 0 0 1 0 0 "2" 1 102 0 0 2 1 0 "3" 1 103 135 136 1 1 0 diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd index 2828092c..49d74895 100644 --- a/man/Pedigree.Rd +++ b/man/Pedigree.Rd @@ -33,14 +33,15 @@ Pedigree(obj, ...) ) \S4method{Pedigree}{data.frame}( - obj = data.frame(id = character(), dadid = character(), momid = character(), sex = - numeric(), family = character(), available = numeric(), affection = numeric()), + obj = data.frame(indId = character(), fatherId = character(), motherId = character(), + gender = numeric(), family = character(), available = numeric(), vitalstatus = + numeric(), affection = numeric(), sterilisation = numeric()), relation = data.frame(id1 = character(), id2 = character(), code = numeric(), family = character()), cols_ren_ped = list(indId = "id", fatherId = "dadid", motherId = "momid", gender = - "sex", family = "family", sterilisation = "steril", vitalStatus = "status", affection - = "affected"), - cols_ren_rel = list(indId1 = "id1", indId2 = "id2"), + "sex", sterilisation = "steril", affection = "affected", available = "avail", + vitalstatus = "status"), + cols_ren_rel = list(id1 = "indId1", id2 = "indId2"), scales = list(fill = data.frame(order = numeric(), column_values = character(), column_mods = character(), mods = numeric(), labels = character(), affected = logical(), fill = character(), density = numeric(), angle = numeric()), border = diff --git a/man/align.Rd b/man/align.Rd index af9c6199..fbe85bf2 100644 --- a/man/align.Rd +++ b/man/align.Rd @@ -96,7 +96,7 @@ supply an initial guess. If multiple families are present in the Pedigree, this routine is called once for each family, and the results are combined in the list returned. For more information you can read the associated vignette:align -\code{vignette("alignement_details")}. +\code{vignette("alignment_details")}. } \examples{ data(sampleped) diff --git a/man/alignped1.Rd b/man/alignped1.Rd index e9ae73cd..c6fdcf32 100644 --- a/man/alignped1.Rd +++ b/man/alignped1.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped1.R \name{alignped1} \alias{alignped1} -\title{First routine alignement} +\title{First routine alignment} \usage{ alignped1(idx, dadx, momx, level, horder, packed, spouselist) } @@ -50,7 +50,7 @@ in the row above, are this subject's parents. } } \description{ -First alignement routine which create the subtree founded on a single +First alignment routine which create the subtree founded on a single subject as though it were the only tree. } \details{ diff --git a/man/alignped2.Rd b/man/alignped2.Rd index ade26d80..edd1fec2 100644 --- a/man/alignped2.Rd +++ b/man/alignped2.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped2.R \name{alignped2} \alias{alignped2} -\title{Second routine alignement} +\title{Second routine alignment} \usage{ alignped2(idx, dadx, momx, level, horder, packed, spouselist) } diff --git a/man/alignped3.Rd b/man/alignped3.Rd index f399eb32..062f1a9a 100644 --- a/man/alignped3.Rd +++ b/man/alignped3.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped3.R \name{alignped3} \alias{alignped3} -\title{Third routine alignement} +\title{Third routine alignment} \usage{ alignped3(alt1, alt2, packed, space = 1) } diff --git a/man/alignped4.Rd b/man/alignped4.Rd index b9c797bb..94bf5525 100644 --- a/man/alignped4.Rd +++ b/man/alignped4.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped4.R \name{alignped4} \alias{alignped4} -\title{Fourth and last routine alignement} +\title{Fourth and last routine alignment} \usage{ alignped4(rval, spouse, level, width, align) } diff --git a/man/as.data.frame-Pedigree-method.Rd b/man/as.data.frame-Pedigree-method.Rd deleted file mode 100644 index 2b6c0754..00000000 --- a/man/as.data.frame-Pedigree-method.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeClass.R -\docType{methods} -\name{as.data.frame,Pedigree-method} -\alias{as.data.frame,Pedigree-method} -\title{Convert a Pedigree object to a data.frame} -\usage{ -\S4method{as.data.frame}{Pedigree}(x) -} -\arguments{ -\item{x}{A Pedigree object.} -} -\value{ -A data.frame with the individuals informations. -} -\description{ -Convert a Pedigree object to a data.frame -} diff --git a/man/as.list-Pedigree-method.Rd b/man/as.list-Pedigree-method.Rd deleted file mode 100644 index 5a6660dd..00000000 --- a/man/as.list-Pedigree-method.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeClass.R -\docType{methods} -\name{as.list,Pedigree-method} -\alias{as.list,Pedigree-method} -\title{Convert a Pedigree object to a list} -\usage{ -\S4method{as.list}{Pedigree}(x) -} -\arguments{ -\item{x}{A Pedigree object.} -} -\value{ -A list with all the slots of the Pedigree object. -} -\description{ -Convert a Pedigree object to a list -} diff --git a/man/best_hint.Rd b/man/best_hint.Rd index 0eafb54e..bff16415 100644 --- a/man/best_hint.Rd +++ b/man/best_hint.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/best_hint.R \name{best_hint} \alias{best_hint} -\title{Best hint for alignement} +\title{Best hint for alignment} \usage{ best_hint(ped, wt = c(1000, 10, 1), tolerance = 0) } diff --git a/man/check_slot_fd.Rd b/man/check_slot_fd.Rd index 0731ac6b..9fc10151 100644 --- a/man/check_slot_fd.Rd +++ b/man/check_slot_fd.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/validity.R +% Please edit documentation in R/pedigreeValidity.R \name{check_slot_fd} \alias{check_slot_fd} \title{Check if the fields are present in an object slot} diff --git a/man/check_values.Rd b/man/check_values.Rd index e2eb9b15..f1c0b20f 100644 --- a/man/check_values.Rd +++ b/man/check_values.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/validity.R +% Please edit documentation in R/pedigreeValidity.R \name{check_values} \alias{check_values} \title{Check values in a slot} diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd index 2b946732..b314e2e6 100644 --- a/man/extract-methods.Rd +++ b/man/extract-methods.Rd @@ -1,14 +1,7 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeClass.R -\name{ped} -\alias{ped} -\alias{ped,Pedigree-method} -\alias{rel} -\alias{rel,Pedigree-method} -\alias{scales} -\alias{scales,Pedigree-method} -\alias{hints} -\alias{hints,Pedigree-method} +% Please edit documentation in R/pedigreeClass.R, R/pedigreeAccessors.R +\docType{methods} +\name{show,Pedigree-method} \alias{show,Pedigree-method} \alias{summary,Pedigree-method} \alias{[[,Pedigree,ANY,missing-method} @@ -19,16 +12,29 @@ \alias{[,Pedigree,ANY,ANY,ANY-method} \alias{[,Pedigree,missing,ANY,ANY-method} \alias{[,Pedigree,ANY,missing,ANY-method} -\title{Pedigree ped accessors} +\alias{as.data.frame,Pedigree-method} +\alias{ped} +\alias{ped,Pedigree-method} +\alias{meta} +\alias{meta,Pedigree-method} +\alias{deriv} +\alias{deriv,Pedigree-method} +\alias{rel} +\alias{rel,Pedigree-method} +\alias{scales} +\alias{scales,Pedigree-method} +\alias{fill} +\alias{fill,Pedigree-method} +\alias{border} +\alias{border,Pedigree-method} +\alias{hints} +\alias{hints,Pedigree-method} +\alias{order} +\alias{order,Pedigree-method} +\alias{spouse} +\alias{spouse,Pedigree-method} +\title{Pedigree methods} \usage{ -ped(object) - -rel(object) - -scales(object) - -hints(object) - \S4method{show}{Pedigree}(object) \S4method{summary}{Pedigree}(object) @@ -46,6 +52,28 @@ sub_sel_hints(hints, index) \S4method{[}{Pedigree,missing,ANY,ANY}(x, i, j, drop = TRUE) \S4method{[}{Pedigree,ANY,missing,ANY}(x, i, j, drop = TRUE) + +\S4method{as.data.frame}{Pedigree}(x) + +ped(object, col) + +meta(object, col) + +deriv(object, col) + +rel(object, col) + +scales(object) + +fill(object, col) + +border(object, col) + +hints(object) + +order(object) + +spouse(object) } \arguments{ \item{object}{A Pedigree object.} @@ -69,14 +97,6 @@ sub_sel_hints(hints, index) \item{index}{A vector of index} } \value{ -The slot \code{ped} present in the Pedigree object. - -The slot \code{rel} present in the Pedigree object. - -The slot \code{scales} present in the Pedigree object. - -The slot \code{hints} present in the Pedigree object. - A character vector with the informations about the object. A character vector with the summary of the object. @@ -94,14 +114,30 @@ A Pedigree object subsetted. A Pedigree object subsetted. A Pedigree object subsetted. -} -\description{ -Pedigree rel accessors -Pedigree scales accessors +A data.frame with the individuals informations. -Pedigree hints accessors +The slot \code{ped} present in the Pedigree object. + +The slot \code{meta} present in the Pedigree object. + +The slot \code{deriv} present in the Pedigree object. + +The slot \code{rel} present in the Pedigree object. + +The slot \code{scales} present in the Pedigree object. + +The slot \code{fill} present in the Pedigree object. + +The slot \code{border} present in the Pedigree object. + +The slot \code{hints} present in the Pedigree object. +The slot \code{order} present in the Pedigree object. + +The slot \code{spouse} present in the Pedigree object. +} +\description{ Pedigree show method Pedigree summary method. @@ -119,5 +155,19 @@ Extract parts of a Pedigree object Extract parts of a Pedigree object Extract parts of a Pedigree object + +Pedigree rel accessors + +Pedigree scales accessors + +Pedigree fill accessors + +Pedigree border accessors + +Pedigree hints accessors + +Pedigree order accessors + +Pedigree spouse accessors } \keyword{internal} diff --git a/man/find_avail_affected.Rd b/man/find_avail_affected.Rd index 46afc347..750e0c26 100644 --- a/man/find_avail_affected.Rd +++ b/man/find_avail_affected.Rd @@ -4,7 +4,7 @@ \alias{find_avail_affected} \title{Find a single person to trim from a Pedigree whose is available} \usage{ -find_avail_affected(ped, avail = ped(ped)$avail, affstatus = NA) +find_avail_affected(ped, avail = ped(ped, "avail"), affstatus = NA) } \arguments{ \item{ped}{A Pedigree object} diff --git a/man/find_avail_noninform.Rd b/man/find_avail_noninform.Rd index 66ab9e05..fe3984e5 100644 --- a/man/find_avail_noninform.Rd +++ b/man/find_avail_noninform.Rd @@ -4,7 +4,7 @@ \alias{find_avail_noninform} \title{Find uninformative but available subject} \usage{ -find_avail_noninform(ped, avail = ped(ped)$avail, missid = "0") +find_avail_noninform(ped, avail = ped(ped, "avail"), missid = "0") } \arguments{ \item{ped}{A Pedigree object} diff --git a/man/find_unavailable.Rd b/man/find_unavailable.Rd index 7ab7250e..b285eef3 100644 --- a/man/find_unavailable.Rd +++ b/man/find_unavailable.Rd @@ -4,7 +4,7 @@ \alias{find_unavailable} \title{Find unavailable subjects in a Pedigree} \usage{ -find_unavailable(ped, avail = ped(ped)$avail) +find_unavailable(ped, avail = ped(ped, "avail")) } \arguments{ \item{ped}{A Pedigree object} diff --git a/man/generate_colors.Rd b/man/generate_colors.Rd index aa631296..89855207 100644 --- a/man/generate_colors.Rd +++ b/man/generate_colors.Rd @@ -58,7 +58,7 @@ generate_colors(obj, ...) obj, col_aff = "affected", add_to_scale = TRUE, - col_avail = "avail", + col_avail = "available", mods_aff = NULL, threshold = 0.5, sup_thres_aff = TRUE, diff --git a/man/is_valid.Rd b/man/is_valid.Rd index 84d7fc09..78ab0bdf 100644 --- a/man/is_valid.Rd +++ b/man/is_valid.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/validity.R +% Please edit documentation in R/pedigreeValidity.R \name{is_valid} \alias{is_valid} \title{Pedigree validity method.} diff --git a/man/norm_rel.Rd b/man/norm_rel.Rd index 556692f7..cdc954eb 100644 --- a/man/norm_rel.Rd +++ b/man/norm_rel.Rd @@ -38,8 +38,8 @@ Normalise relationship dataframe for Pedigree object } \examples{ df <- data.frame( - indId1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - indId2 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 1), + id1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), + id2 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 1), code = c("MZ twin", "DZ twin", "UZ twin", "Spouse", 1, 2, 3, 4, "MzTwin", "sp oUse"), family = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2) diff --git a/man/paste0max.Rd b/man/paste0max.Rd index f679a4a1..49854a56 100644 --- a/man/paste0max.Rd +++ b/man/paste0max.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/validity.R +% Please edit documentation in R/pedigreeValidity.R \name{paste0max} \alias{paste0max} \title{Print0 to max} diff --git a/man/shrink.Rd b/man/shrink.Rd index d540ea7d..86a6fa5e 100644 --- a/man/shrink.Rd +++ b/man/shrink.Rd @@ -6,8 +6,8 @@ \usage{ shrink( ped, - avail = ped(ped)$avail, - affected = ped(ped)$affected, + avail = ped(ped, "avail"), + affected = deriv(ped, "affected"), max_bits = 16 ) } diff --git a/man/unrelated.Rd b/man/unrelated.Rd index f3e0a39a..a5670329 100644 --- a/man/unrelated.Rd +++ b/man/unrelated.Rd @@ -4,7 +4,7 @@ \alias{unrelated} \title{Get unrelated subjects} \usage{ -unrelated(ped, avail = ped(ped)$avail) +unrelated(ped, avail = ped(ped, "avail")) } \arguments{ \item{ped}{A Pedigree object} diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index e95e9d87..48369b9e 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -1,11 +1,11 @@ test_that("align works", { data("sampleped") ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped)$family == 1] + ped1 <- ped[ped(ped, "family") == 1] plist1 <- align(ped1) expect_equal(plist1$n, c(6, 12, 17, 8)) - ped2 <- ped[ped(ped)$family == 2] + ped2 <- ped[ped(ped, "family") == 2] withr::local_options(width = 50) plist2 <- align(ped2) expect_equal(plist2$n, c(2, 7, 5)) diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R new file mode 100644 index 00000000..7eac3f07 --- /dev/null +++ b/tests/testthat/test-class.R @@ -0,0 +1,7 @@ +test_that("Class ped work", { + ped <- new("Ped") + expect_is(ped, "Ped") + expect_is(ped, "Vector") + expect_equal(length(ped), 0) + expect_error(ped@id <- "test") +}) \ No newline at end of file diff --git a/tests/testthat/test-generate_scales.R b/tests/testthat/test-generate_scales.R index 2f9aae7e..07bc0e7d 100644 --- a/tests/testthat/test-generate_scales.R +++ b/tests/testthat/test-generate_scales.R @@ -89,7 +89,7 @@ test_that("generate fill full scale on", { test_that("generate colors works on Pedigree object", { data("sampleped") ped <- Pedigree(sampleped[sampleped$family == "1", -1]) - ped(ped)$id <- as.numeric(ped(ped)$id) + ped(ped, "id") <- as.numeric(ped(ped, "id")) ped_aff <- generate_colors(ped, col_aff = "id", threshold = 120, sup_thres_aff = TRUE, add_to_scale = FALSE ) @@ -104,15 +104,16 @@ test_that("generate colors works on Pedigree object", { test_that("generate with full scale", { data("sampleped") + sampleped$val_num <- as.numeric(sampleped$id) ped <- Pedigree(sampleped) - ped <- ped[ped(ped)$family == "1", ] - ped(ped)$indId <- as.numeric(ped(ped)$indId) - ped <- generate_colors(ped, add_to_scale = FALSE, "indId", threshold = 115, + ped <- ped[ped(ped, "family") == "1", ] + ped <- generate_colors( + ped, add_to_scale = FALSE, "val_num", threshold = 115, colors_aff = c("pink", "purple"), keep_full_scale = TRUE ) - expect_equal(scales(ped)$fill$labels[c(1, 4)], + expect_equal(fill(ped, "labels")[c(1, 4)], c("Healthy <= to 115 : [101,106]", "Affected > to 115 : [116,124]") ) - expect(nrow(scales(ped)$fill), 6) + expect(nrow(fill(ped)), 6) }) TRUE \ No newline at end of file diff --git a/tests/testthat/test-is_informative.R b/tests/testthat/test-is_informative.R index e438250c..1d423711 100644 --- a/tests/testthat/test-is_informative.R +++ b/tests/testthat/test-is_informative.R @@ -80,7 +80,7 @@ test_that("is_informative works with Pedigree", { sum(is_informative(ped, col_aff = "sex_aff", informative = "Af" )$ped$id_inf), - length(ped(ped)[ped(ped)$sex == "male", "id"]) + length(ped(ped, "id")[ped(ped, "sex") == "male"]) ) data(minnbreast) diff --git a/tests/testthat/test-make_famid.R b/tests/testthat/test-make_famid.R index b1ec745b..3269ebb4 100644 --- a/tests/testthat/test-make_famid.R +++ b/tests/testthat/test-make_famid.R @@ -28,16 +28,16 @@ test_that("make_famid works with Pedigree", { fam <- sampleped$family fam[sampleped$id == "113"] <- 0 # singleton id <- paste(fam, c(101:141, 201:214), sep = "_") - expect_equal(ped(ped)$id, id) - expect_equal(rel(ped)$id1, c("2_213", "2_210", "1_140", "1_133")) + expect_equal(ped(ped, "id"), id) + expect_equal(rel(ped, "id1"), c("2_213", "2_210", "1_140", "1_133")) ## Updating already present family id data("sampleped") sampleped$family[sampleped$family == "2"] <- 3 ped <- Pedigree(sampleped, rel_df) ped <- make_famid(ped) - expect_equal(ped(ped)$id, id) - expect_equal(rel(ped)$id1, c("2_213", "2_210", "1_140", "1_133")) + expect_equal(ped(ped, "id"), id) + expect_equal(rel(ped, "id1"), c("2_213", "2_210", "1_140", "1_133")) }) test_that("Family check works", { diff --git a/tests/testthat/test-norm_data.R b/tests/testthat/test-norm_data.R index 7243831e..4a405468 100644 --- a/tests/testthat/test-norm_data.R +++ b/tests/testthat/test-norm_data.R @@ -20,9 +20,9 @@ test_that("Norm ped", { ped_df <- suppressWarnings(norm_ped( ped_df, na_strings = c("None", "NA") )) - expect_equal(dim(ped_df), c(10, 20)) + expect_equal(dim(ped_df), c(10, 22)) expect_snapshot(ped_df) - expect_equal(sum(is.na(ped_df$error)), 3) + expect_equal(sum(is.na(ped_df$error)), 4) }) test_that("Norm rel", { diff --git a/tests/testthat/test-ped_to_legdf.R b/tests/testthat/test-ped_to_legdf.R index 08c4580a..3bb1c9bd 100644 --- a/tests/testthat/test-ped_to_legdf.R +++ b/tests/testthat/test-ped_to_legdf.R @@ -15,12 +15,12 @@ new_par <- list( test_that("Pedigree legend works", { data("sampleped") + sampleped$val_num <- as.numeric(sampleped$id) ped <- Pedigree(sampleped) - ped <- ped[ped(ped)$family == "1", ] + ped <- ped[ped(ped, "family") == "1", ] ped <- generate_colors(ped, add_to_scale = TRUE, "avail") - ped(ped)$indId <- as.numeric(ped(ped)$indId) ped <- generate_colors(ped, - add_to_scale = TRUE, "indId", threshold = 115, + add_to_scale = TRUE, "val_num", threshold = 115, colors_aff = c("pink", "purple"), keep_full_scale = TRUE ) diff --git a/tests/testthat/test-pedigreeClass.R b/tests/testthat/test-pedigreeClass.R index 515f73f2..03004e48 100644 --- a/tests/testthat/test-pedigreeClass.R +++ b/tests/testthat/test-pedigreeClass.R @@ -5,12 +5,14 @@ test_that("Pedigree works", { momid = character(), sex = numeric(), family = character(), - available = numeric(), - affected = numeric() + avail = numeric(), + affection = numeric() )) expect_s4_class(ped, "Pedigree") expect_equal(nrow(ped@ped), 0) expect_equal(nrow(ped@rel), 0) + expect_equal(nrow(ped@meta), 0) + expect_equal(nrow(ped@deriv), 0) expect_equal(length(ped@scales), 2) expect_equal(length(ped@scales$fill), 9) expect_equal(length(ped@scales$border), 4) @@ -19,7 +21,7 @@ test_that("Pedigree works", { test_that("Pedigree old usage compatibility", { data(sampleped) ped1 <- with(sampleped, - Pedigree(id, dadid, momid, sex, family, available, affected) + Pedigree(id, dadid, momid, sex, family, avail, affection) ) expect_equal(ped1, Pedigree(sampleped)) @@ -150,9 +152,11 @@ test_that("Pedigree getters", { ped <- Pedigree(sampleped) expect_equal(ped$ped, ped(ped)) expect_equal(ped$rel, rel(ped)) - expect_equal(ped$scales, scales(ped)) expect_equal(ped$hints, hints(ped)) - scales(ped)$fill + expect_equal(ped$hints$order, order(ped)) + expect_equal(ped$hints$spouse, spouse(ped)) + expect_equal(ped$scales$fill, fill(ped)) + expect_equal(ped$scales$border, border(ped)) }) test_that("Pedigree setters", { diff --git a/tests/testthat/test-shrink.R b/tests/testthat/test-shrink.R index 14894b7d..039cf584 100644 --- a/tests/testthat/test-shrink.R +++ b/tests/testthat/test-shrink.R @@ -59,7 +59,7 @@ test_that("Pedigree shrink error if missing info", { ## use sampleped from the package data("sampleped") ped <- Pedigree(sampleped) - ped2 <- ped[ped(ped)$family == "2", ] + ped2 <- ped[ped(ped, "family") == "2", ] ped2$ped$sex[c(13, 12)] <- c("unknown", "terminated") ## set 2nd col of affected to NA @@ -71,7 +71,7 @@ test_that("Pedigree shrink avail test", { ## use sampleped from the package data("sampleped") ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped)$family == "1", ] + ped1 <- ped[ped(ped, "family") == "1", ] set.seed(10) ped1_s_av_32 <- shrink(ped = ped1, max_bits = 32) @@ -99,7 +99,7 @@ test_that("Pedigree shrink with character", { data("sampleped") sampleped$family[sampleped$family == 1] <- "A" ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped)$family == "A", ] + ped1 <- ped[ped(ped, "family") == "A", ] set.seed(100) ped1_s_av_32 <- shrink(ped = ped1, max_bits = 32) @@ -122,7 +122,7 @@ test_that("Pedigree shrink with character", { test_that("Shrink works", { data("sampleped") ped <- Pedigree(sampleped) - ped2 <- ped[ped(ped)$family == "2", ] + ped2 <- ped[ped(ped, "family") == "2", ] ped2_s <- shrink(ped2) vdiffr::expect_doppelganger("Whole ped", diff --git a/tests/testthat/test-unavail.R b/tests/testthat/test-unavail.R index 17cf0eb4..1ca6c1a0 100644 --- a/tests/testthat/test-unavail.R +++ b/tests/testthat/test-unavail.R @@ -7,7 +7,7 @@ test_that("unavailable detection works", { ), sep = "_"), paste("2", c(205, 210, 213), sep = "_")) ) find_avail_affected(ped) - ped(ped)$affected[25] <- NA + deriv(ped, "affected")[25] <- NA expect_equal(as.vector(find_avail_affected(ped)$id_trimmed), "1_125") expect_equal(find_avail_noninform(ped), c(paste("1", c( @@ -21,8 +21,8 @@ test_that("Unrelated detection works", { ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped)$family == 1, ] - ped2 <- ped[ped(ped)$family == 2, ] + ped1 <- ped[ped(ped, "family") == 1, ] + ped2 <- ped[ped(ped, "family") == 2, ] set.seed(10) expect_equal(unrelated(ped1), diff --git a/tests/testthat/test-useful_inds.R b/tests/testthat/test-useful_inds.R index 93d76fa9..11eba20b 100644 --- a/tests/testthat/test-useful_inds.R +++ b/tests/testthat/test-useful_inds.R @@ -25,13 +25,13 @@ test_that("useful_inds works with Pedigree", { ped <- Pedigree(sampleped) ped <- num_child(ped) ped <- useful_inds(ped, informative = "Av") - expect_equal(ped(ped)$id[!ped(ped)$useful], + expect_equal(ped(ped, "id")[!deriv(ped, "useful")], c("1_101", "1_102", "1_107", "1_108", "1_117") ) expect_error(useful_inds(ped, informative = "AvOrAf")) ped <- useful_inds(ped, informative = "AvOrAf", reset = TRUE) - expect_equal(ped(ped)$id[!ped(ped)$useful], c("1_101", "1_108")) + expect_equal(ped(ped, "id")[!deriv(ped, "useful")], c("1_101", "1_108")) }) TRUE diff --git a/vignettes/alignment_details.Rmd b/vignettes/alignment_details.Rmd index 5e70918f..e8cb8919 100644 --- a/vignettes/alignment_details.Rmd +++ b/vignettes/alignment_details.Rmd @@ -90,7 +90,7 @@ to figure that out. The first thing to be done is to check on twins. They increase the complexity, since twins need to move together. -The `rel(ped)$code` object is a factor, so first turn that into numeric. +The `rel(ped, "code")` object is a factor, so first turn that into numeric. We create 3 vectors: - $twinrel$ is a matrix containing pairs of twins and @@ -196,7 +196,7 @@ We'll look at more complex cases below when looking at the $duporder$ (order the duplicates) function, which returns a matrix with columns 1 and 2 being a pair of duplicates, and 3 a direction. Note that in the following code $idlist$ refers to the row numbers of each subject in the Pedigree, not to -their label `ped(ped)$id`. +their label `ped(ped, "id")`. ## duporder diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 0f75528f..9b33af84 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -119,7 +119,7 @@ The summary method prints a more detailed summary of the Pedigree. Finally the plot method displays the Pedigree. ```{r, ped1} -ped1 <- ped[ped(ped)$family == "1", ] +ped1 <- ped[ped(ped, "family") == "1", ] print(ped1) summary(ped1) plot(ped1) diff --git a/vignettes/pedigree_plot_details.Rmd b/vignettes/pedigree_plot_details.Rmd index c14cfa78..6e0a8835 100644 --- a/vignettes/pedigree_plot_details.Rmd +++ b/vignettes/pedigree_plot_details.Rmd @@ -205,7 +205,7 @@ will make up the symbol. These are then used again and again. The collection is kept as a list with the four elements square, circle, diamond and triangle. -Each of these is in turn a list with `max(scales(ped)$fill$order)` elements, +Each of these is in turn a list with `max(fill(ped, "order"))` elements, and each of those in turn a list of x and y coordinates. ### Circfun From 74ed8030976707925f42f83b1a47b9b16a18df18 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 25 Oct 2023 21:26:02 +0200 Subject: [PATCH 011/111] Continue MAJ Ped --- DESCRIPTION | 9 +- NAMESPACE | 20 +++-- R/AllAccessors.R | 73 +++++++++++++--- R/AllClass.R | 27 ++++-- R/AllConstructor.R | 60 +++++++++++++ R/AllGeneric.R | 62 +++++++++++--- R/AllValidity.R | 147 +++++++++++++++++++++++++++++++- R/align.R | 2 +- R/bit_size.R | 2 +- R/descendants.R | 2 +- R/family_check.R | 2 +- R/generate_colors.R | 2 +- R/kindepth.R | 2 +- R/kinship.R | 2 +- R/make_famid.R | 2 +- R/norm_data.R | 27 +++--- R/num_child.R | 9 +- devel/old/pedigreeAccessors.R | 2 +- devel/old/pedigreeClass.R | 2 +- man/Hints-class.Rd | 46 ++++++++++ man/Ped-class.Rd | 65 +++++++++++++++ man/Ped.Rd | 51 ++++++++++++ man/Pedigree-class.Rd | 2 +- man/Rel-class.Rd | 33 ++++++++ man/check_slot_fd.Rd | 2 +- man/check_values.Rd | 4 +- man/extract-methods.Rd | 153 ++++++++++++++-------------------- man/is_valid.Rd | 23 ----- man/is_valid_hints.Rd | 20 +++++ man/is_valid_ped.Rd | 27 ++++++ man/is_valid_scales.Rd | 19 +++++ man/length-Pedigree-method.Rd | 2 +- man/paste0max.Rd | 4 +- man/show-Ped-method.Rd | 18 ++++ tests/testthat/test-class.R | 73 ++++++++++++++-- 35 files changed, 802 insertions(+), 194 deletions(-) create mode 100644 R/AllConstructor.R create mode 100644 man/Hints-class.Rd create mode 100644 man/Ped-class.Rd create mode 100644 man/Ped.Rd create mode 100644 man/Rel-class.Rd delete mode 100644 man/is_valid.Rd create mode 100644 man/is_valid_hints.Rd create mode 100644 man/is_valid_ped.Rd create mode 100644 man/is_valid_scales.Rd create mode 100644 man/show-Ped-method.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 79d6b8c6..5637da09 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -25,6 +25,7 @@ Imports: tidyr, quadprog, Matrix, + S4Vectors, testthat Description: Routines to handle family data with a Pedigree object. The initial purpose was to create correlation structures that describe family relationships such @@ -52,13 +53,16 @@ url: https://github.com/LouisLeNezet/Pedixplorer BiocType: Software Collate: 'Pedigree.R' + 'AllValidity.R' + 'AllClass.R' + 'AllAccessors.R' + 'AllConstructor.R' + 'AllGeneric.R' 'Pedixplorer-package.R' 'alignped4.R' 'alignped3.R' 'alignped2.R' 'alignped1.R' - 'pedigreeValidity.R' - 'pedigreeClass.R' 'check_hints.R' 'kindepth.R' 'auto_hint.R' @@ -84,7 +88,6 @@ Collate: 'num_child.R' 'ped_to_legdf.R' 'ped_to_plotdf.R' - 'pedigreeAccessors.R' 'plot_fct.R' 'plot_fromdf.R' 'plot.R' diff --git a/NAMESPACE b/NAMESPACE index 83cd7542..dcfcbe83 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,6 @@ # Generated by roxygen2: do not edit by hand -export() +export(Ped) export(Pedigree) export(align) export(alignped1) @@ -12,7 +12,6 @@ export(best_hint) export(bit_size) export(border) export(check_hints) -export(deriv) export(descendants) export(family_check) export(fill) @@ -27,10 +26,10 @@ export(generate_fill) export(hints) export(ibd_matrix) export(is_informative) +export(is_valid_scales) export(kindepth) export(kinship) export(make_famid) -export(meta) export(min_dist_inf) export(norm_ped) export(norm_rel) @@ -50,9 +49,14 @@ export(trim) export(unrelated) export(useful_inds) export(vect_to_binary) +exportClasses(Hints) +exportClasses(Ped) exportClasses(Pedigree) +exportClasses(Rel) +exportClasses(Scales) exportMethods(Pedigree) exportMethods(as.data.frame) +exportMethods(as.list) exportMethods(family_check) exportMethods(fix_parents) exportMethods(generate_colors) @@ -61,13 +65,19 @@ exportMethods(kindepth) exportMethods(kinship) exportMethods(length) exportMethods(make_famid) +exportMethods(mcols) exportMethods(min_dist_inf) exportMethods(num_child) exportMethods(plot) +exportMethods(show) exportMethods(useful_inds) +importClassesFrom(S4Vectors,Vector) importFrom(Matrix,bdiag) importFrom(Matrix,forceSymmetric) importFrom(Matrix,sparseMatrix) +importFrom(S4Vectors,'mcols<-') +importFrom(S4Vectors,mcols) +importFrom(S4Vectors,parallel_slot_names) importFrom(dplyr,"%>%") importFrom(dplyr,across) importFrom(dplyr,group_by) @@ -104,11 +114,7 @@ importFrom(graphics,segments) importFrom(graphics,strheight) importFrom(graphics,strwidth) importFrom(graphics,text) -importFrom(methods,"slot<-") importFrom(methods,as) -importFrom(methods,new) -importFrom(methods,slot) -importFrom(methods,validObject) importFrom(plyr,rbind.fill) importFrom(plyr,revalue) importFrom(quadprog,solve.QP) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 86066f59..0faf63db 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -1,8 +1,51 @@ #### S4 Accessors #### #' @include Pedigree.R #' @include AllClass.R +#' @importFrom S4Vectors mcols +NULL -#### S4 ped Accessors #### +#### S4 Ped Accessors #### +## metadata Accessors ## +#' @title Pedigree metadata accessors +#' @param object A Pedigree object. +#' @return The metadata present in the Pedigree object. +#' @rdname extract-methods +#' @aliases mcols,Pedigree-method +#' @export +setMethod( + "mcols", + signature(x = "Ped"), + function(x) { + ped@elementMetadata + } +) + +#' @importFrom S4Vectors 'mcols<-' +setMethod( + "mcols<-", + signature(x = "Pedigree", value = "ANY"), + function(x, value) { + if (is.data.frame(value)) { + if (nrow(value) != length(x)) { + stop( + "The number of rows of the new value should be: ", + "equal to the length of the pedigree" + ) + } + } else if (is.list(value)) { + if (length(value) != length(x)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) + } + value <- as.data.frame(value) + } + mcols(ped) <- value + } +) + +#### S4 Pedigree Accessors #### #' @title Pedigree ped accessors #' @param object A Pedigree object. #' @param slot A slot in the Ped object of the Pedigree. @@ -69,17 +112,18 @@ setMethod( #' @export setMethod( "mcols", - signature(object = "Pedigree"), - function(object) { - mcols(object@ped) + signature(x = "Pedigree"), + function(x) { + mcols(x@ped) } ) +#' @importFrom S4Vectors 'mcols<-' setMethod( "mcols<-", - signature(object = "Pedigree", value = "ANY"), - function(object) { - mcols(object@ped) <- value + signature(x = "Pedigree", value = "ANY"), + function(x, value) { + mcols(x@ped) <- value } ) @@ -245,7 +289,8 @@ setMethod("hints", signature(object = "Pedigree"), function(object) { #### S4 order Accessors #### #' @description Pedigree order accessors #' @param object A Pedigree object. -#' @return The slot `order` present in the Pedigree object. +#' @return The slot `order` present in the `Hints` slot of +#' a Pedigree object. #' @rdname extract-methods #' @aliases order,Pedigree-method #' @export @@ -254,7 +299,7 @@ setGeneric("order", function(object) { }) setMethod("order", signature(object = "Pedigree"), function(object) { - object@hints$order + object@hints@order }) setGeneric("order<-", function(object, value) { @@ -271,15 +316,17 @@ setMethod( "equal to the length of the pedigree" ) } - object@hints$order <- value + object@hints@order <- value validObject(object) object } ) + #### S4 spouse Accessors #### #' @description Pedigree spouse accessors #' @param object A Pedigree object. -#' @return The slot `spouse` present in the Pedigree object. +#' @return The slot `spouse` present in the `Hints` slot of +#' a Pedigree object. #' @rdname extract-methods #' @aliases spouse,Pedigree-method #' @export @@ -288,7 +335,7 @@ setGeneric("spouse", function(object) { }) setMethod("spouse", signature(object = "Pedigree"), function(object) { - object@hints$spouse + object@hints@spouse }) setGeneric("spouse<-", function(object, value) { @@ -300,7 +347,7 @@ setMethod( signature(object = "Pedigree", value = "ANY"), function(object, value) { # TODO: Check that the spouse matrix is valid - object@hints$spouse <- value + object@hints@spouse <- value validObject(object) object } diff --git a/R/AllClass.R b/R/AllClass.R index 6381d639..f08758d3 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -1,3 +1,8 @@ +#' @importFrom S4Vectors parallel_slot_names +NULL + +#### Hints Class #### + #' S4 class to represent a hints object. #' #' A hints object is a list of two elements used @@ -28,6 +33,8 @@ setClass("Hints", setValidity("Hints", is_valid_hints) +#### Scale Class #### + #' S4 class to represent the scales of a Pedigree. #' #' A scales object is a list of two data.frame used @@ -54,6 +61,8 @@ setClass("Scales", setValidity("Scales", is_valid_scales) +#### Ped Class #### + #' S4 class to represent the identity informations in a Pedigree. #' #' A Ped object is a list of identity informations @@ -96,11 +105,10 @@ setValidity("Scales", is_valid_scales) #' @docType class #' @name Ped-class #' @rdname Ped-class -#' +#' @importClassesFrom S4Vectors Vector #' @export setClass("Ped", - contains = c("Vector"), - representation( + slots = c( id = "character", dadid = "character", momid = "character", @@ -114,7 +122,8 @@ setClass("Ped", kin = "numeric", num_child_total = "numeric", num_child_direct = "numeric", - num_child_indirect = "numeric" + num_child_indirect = "numeric", + elementMetadata = "data.frame" ) ) @@ -132,7 +141,7 @@ setMethod("parallel_slot_names", "Ped", setValidity("Ped", is_valid_ped) - +#### Rel Class #### #' S4 class to represent the special relationships in a Pedigree. #' #' A Rel object is a list of special relationships @@ -153,14 +162,15 @@ setValidity("Ped", is_valid_ped) #' @docType class #' @name Rel-class #' @rdname Rel-class +#' @importClassesFrom S4Vectors Vector #' @export setClass("Rel", - contains = c("Vector"), representation( id1 = "character", id2 = "character", code = "character", - family = "character" + family = "character", + elementMetadata = "data.frame" ) ) @@ -214,11 +224,10 @@ setMethod("parallel_slot_names", "Rel", #' @docType class #' @name Pedigree-class #' @rdname Pedigree-class -#' @include pedigreeValidity.R +#' @include AllValidity.R #' @include Pedigree.R #' @export setClass("Pedigree", - contains = c("RectangularData"), representation( ped = "Ped", # identity data rel = "Rel", # special relationships diff --git a/R/AllConstructor.R b/R/AllConstructor.R new file mode 100644 index 00000000..5496c124 --- /dev/null +++ b/R/AllConstructor.R @@ -0,0 +1,60 @@ +na_to_length <- function(x, y, value) { + if (length(x) == 1 & all(is.na(x))) { + rep(value, length(y)) + } else { + x + } +} + +#' Constructor for the Ped class +#' @description Constructor for the Ped class +#' @param id A character vector with the id of the individuals. +#' @param dadid A character vector with the id of the father of the individuals. +#' @param momid A character vector with the id of the mother of the individuals. +#' @param family A character vector with the family of the individuals. +#' @param sex A factor vector with the sex of the individuals (i.e. `male`, +#' `female`, `unknown` or `terminated`). +#' @param steril A numeric vector with the sterilisation status of the +#' individuals (i.e. `0` = not sterilised, `1` = sterilised, `NA` = unknown). +#' @param status A numeric vector with the affection status of the +#' individuals (i.e. `0` = alive, `1` = dead, `NA` = unknown). +#' @param avail A numeric vector with the availability status of the +#' individuals (i.e. `0` = not available, `1` = available, `NA` = unknown). +#' +#' @return A Ped object. +#' @seealso [Pedigree()] +#' +#' @export +Ped <- function( + id, sex, dadid, momid, family = NA, + steril = NA, status = NA, avail = NA, + affected = NA, useful = NA, kin = NA, + missid = NA +) { + family <- na_to_length(family, id, as.character(NA)) + id <- as.character(id) + dadid <- as.character(dadid) + momid <- as.character(momid) + missid <- as.character(missid) + + sex <- sex_to_factor(sex) + + steril <- na_to_length(steril, id, as.numeric(NA)) + status <- na_to_length(status, id, as.numeric(NA)) + avail <- na_to_length(avail, id, as.numeric(NA)) + affected <- na_to_length(affected, id, as.numeric(NA)) + useful <- na_to_length(useful, id, as.numeric(NA)) + kin <- na_to_length(kin, id, as.numeric(NA)) + + df_child <- num_child(id, dadid, momid, rel_df = NULL, missid = missid) + + new( + "Ped", + id = id, dadid = dadid, momid = momid, family = family, + sex = sex, steril = steril, status = status, avail = avail, + affected = affected, useful = useful, kin = kin, + num_child_total = df_child$num_child_tot, + num_child_direct = df_child$num_child_dir, + num_child_indirect = df_child$num_child_ind + ) +} diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 1ba936c8..c204af1f 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -1,3 +1,55 @@ +#### Generic for Ped object #### + +#' Show function of Ped object +#' +#' @description Convert the Ped object to a data.frame +#' and print it +#' +#' @param object A Ped object. +#' +#' @return A data.frame with the individuals informations. +#' +#' @export +setMethod("show", signature(object = "Ped"), + function(object) { + print(as.data.frame(object)) + } +) + +#' @title Ped to data.frame +#' @description Convert a Pedigree object to a data.frame +#' @param from A Pedigree object. +#' @return A data.frame with the individuals informations. +#' @rdname extract-methods +#' @aliases as.list,Ped-method +#' @export +setMethod("as.list", "Ped", function(x) { + to <- list() + for (slot in slotNames(x)) { + if (slot %in% c("metadata", "elementMetadata")) { + next + } else { + to[[slot]] <- slot(x, slot) + } + } + to +}) + +#' @title Ped to data.frame +#' @description Convert a Pedigree object to a data.frame +#' @param from A Pedigree object. +#' @return A data.frame with the individuals informations. +#' @rdname extract-methods +#' @aliases as.data.frame,Ped-method +#' @export +setMethod("as.data.frame", "Ped", function(x) { + lst <- as.list(x) + if (length(unique(lapply(lst, length))) != 1) { + stop("All slots should have the same length") + } + data.frame(lst) +}) + #' Compute the length of a Pedigree object #' @param x A Pedigree object. #' @return The number of individuals in the Pedigree object. @@ -10,16 +62,6 @@ setMethod("length", c(x = "Pedigree"), } ) -#' Convert a Pedigree object to a data.frame -#' @param x A Pedigree object. -#' @return A data.frame with the individuals informations. -#' @docType methods -#' @aliases as.data.frame,Pedigree-method -#' @rdname extract-methods -#' @export -setAs("ped", "data.frame", function(object) { - data.frame(as.list(object)) -}) #' @title Pedigree methods #' @description Pedigree show method diff --git a/R/AllValidity.R b/R/AllValidity.R index 45bcc603..783a8160 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -1,3 +1,105 @@ +#' Print0 to max +#' +#' Print0 the elements inside a vector until a maximum is reached. +#' +#' @param x A vector. +#' @param max The maximum number of elements to print. +#' @param ... Additional arguments passed to print0 +#' +#' @return The character vector aggregated until the maximum is reached. +#' @keywords internal +paste0max <- function(x, max = 5, sep = "", ...) { + lgt <- min(length(x), max) + ext <- ifelse(length(x) > max, "...", "") + paste( + "'", paste0(x[seq_len(lgt)], collapse = "', '"), + "'", ext, sep = sep, ... + ) +} + +#' Check if the fields are present in an object slot +#' +#' @param obj An object. +#' @param slot A slot of object. +#' @param fields A character vector with the fields to check. +#' +#' @return A character vector with the errors if any. +#' @keywords internal +check_slot_fd <- function(obj, slot = NULL, fields = character()) { + if (is.object(obj)) { + obj <- as(obj, "list") + } + if (is.null(slot)) { + array_names <- names(obj) + } else if (is.data.frame(obj[[slot]])) { + array_names <- colnames(obj[[slot]]) + } else if (is.list(obj[[slot]])) { + array_names <- names(obj[[slot]]) + } else { + stop( + "Slot ", slot, " is not a data.frame or a list. ", + class(obj[[slot]]), " found." + ) + } + if (length(array_names) == 0) { + paste0( + "Missing fields in ", slot, + " slot. See Pedigree documentation." + ) + } else if (any(!fields %in% array_names)) { + paste0( + "`", paste0max(fields[!fields %in% array_names]), + "`", " column(s) is not present in slot ", slot, "." + ) + } +} + +#' Check values in a slot +#' +#' Check if the all the values in a slot are in a vector of values. +#' +#' @param obj An object. +#' @param slot A slot of the object. +#' @param column A column of the slot. +#' @param values A vector of values to check. +#' @param present A logical value indicating if the values should be present +#' or not +#' +#' @return A character vector with the errors if any. +#' @keywords internal +check_values <- function(val, ref, name = NULL, present = TRUE) { + if (length(dim(val)) > 1) { + stop("val must be a vector") + } + + if (present) { + val_abs <- !val %in% ref + should <- " should be in " + } else { + val_abs <- val %in% ref + should <- " should not be in " + } + + val_name <- ifelse(is.null(name), "Values ", paste(name, "values ")) + + if (any(val_abs)) { + paste0( + val_name, paste0max(val[val_abs]), should, + paste0max(ref) + ) + } +} + +#' Check if the Hints are valid +#' +#' Check if order and spouse slots are valid (i.e. order is numeric and +#' spouse is a matrix with 3 columns). +#' Check if the spouse matrix is valid (i.e. only numeric values). +#' @param object A Hints object. +#' +#' @return A character vector with the errors or `TRUE` if no errors. +#' @keywords internal +#' is_valid_hints <- function(object) { errors <- c() @@ -18,6 +120,17 @@ is_valid_hints <- function(object) { return(errors) } +#' Check if the Scales are valid +#' +#' Check if the fill and border slots are valid (i.e. they have the right +#' columns). +#' +#' @param object A Scales object. +#' +#' @return A character vector with the errors or `TRUE` if no errors. +#' @keywords internal +#' +#' @export is_valid_scales <- function(object) { errors <- c() @@ -39,7 +152,21 @@ is_valid_scales <- function(object) { return(errors) } - +#' Check if the Ped is valid +#' +#' Multiple checks are done here +#' +#' 1. Check that the ped ids slots have the right values +#' 2. Check that the sex, steril, status, avail and affected slots have the +#' right values +#' 3. Check that dad are male and mom are female +#' 4. Check that individuals have both parents or none +#' +#' @param object A Ped object. +#' +#' @return A character vector with the errors or `TRUE` if no errors. +#' +#' @keywords internal is_valid_ped <- function(object) { missid <- NA errors <- c() @@ -50,14 +177,28 @@ is_valid_ped <- function(object) { errors <- c(errors, "Id in ped slot must be unique") } - # Control values for ped - errors <- c(errors, check_values(object@id, missid, present = FALSE)) + # Control values for ids + famid <- unique(object@family) + errors <- c(errors, check_values( + famid, c("", missid), "family", present = FALSE + )) + errors <- c(errors, check_values( + object@id, + c( + missid, "", + paste(missid, famid, sep = "_"), + paste("", famid, sep = "_") + ), + "id", present = FALSE + )) errors <- c(errors, check_values( object@dadid, c(object@id, missid) )) errors <- c(errors, check_values( object@momid, c(object@id, missid) )) + + # Control values for sex, steril, status, avail and affected sex_code <- c("male", "female", "unknown", "terminated") errors <- c(errors, check_values(object@sex, sex_code)) errors <- c(errors, check_values(object@steril, c(0, 1, NA))) diff --git a/R/align.R b/R/align.R index f0bac39a..3e33ae2e 100644 --- a/R/align.R +++ b/R/align.R @@ -113,7 +113,7 @@ ancestors <- function(idx, momx, dadx) { #' @include auto_hint.R #' @include kindepth.R #' @include check_hints.R -#' @include pedigreeClass.R +#' @include AllClass.R #' @include alignped1.R #' @include alignped2.R #' @include alignped3.R diff --git a/R/bit_size.R b/R/bit_size.R index d1e9e784..4f3c838a 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -22,7 +22,7 @@ #' - nNonFounder The number of nonfounders in the Pedigree #' #' @seealso [shrink()] -#' @include pedigreeClass.R +#' @include AllClass.R #' @docType methods #' @examples #' data(sampleped) diff --git a/R/descendants.R b/R/descendants.R index a46d5008..9434d1a9 100644 --- a/R/descendants.R +++ b/R/descendants.R @@ -15,7 +15,7 @@ #' data("sampleped") #' ped <- Pedigree(sampleped) #' descendants(c("1_101", "2_208"), ped) -#' @include pedigreeClass.R +#' @include AllClass.R #' @export #' @keywords internal #' @docType methods diff --git a/R/family_check.R b/R/family_check.R index ea0c6485..21469137 100644 --- a/R/family_check.R +++ b/R/family_check.R @@ -65,7 +65,7 @@ #' ## fcheck1.bad is a try-error #' #' @seealso [make_famid()], [kinship()] -#' @include pedigreeClass.R +#' @include AllClass.R #' @keywords internal #' @docType methods #' @export diff --git a/R/generate_colors.R b/R/generate_colors.R index 348cbf45..b928310f 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -300,7 +300,7 @@ setMethod("generate_colors", "logical", ) #' @importFrom plyr rbind.fill -#' @include pedigreeClass.R +#' @include AllClass.R #' @docType methods #' @aliases generate_colors,Pedigree #' @param add_to_scale Boolean defining if the scales need to be added to the diff --git a/R/kindepth.R b/R/kindepth.R index e3827410..4bc72ace 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -22,7 +22,7 @@ #' #' @author Terry Therneau #' @seealso [align()] -#' @include pedigreeClass.R +#' @include AllClass.R #' @examples #' data(sampleped) #' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) diff --git a/R/kinship.R b/R/kinship.R index 0b7dc18d..527ac697 100644 --- a/R/kinship.R +++ b/R/kinship.R @@ -59,7 +59,7 @@ NULL #' @section References: K Lange, Mathematical and Statistical Methods for #' Genetic Analysis, Springer-Verlag, New York, 1997. #' @seealso [make_famid()], [kindepth()] -#' @include pedigreeClass.R +#' @include AllClass.R #' @include utils.R #' @export #' @docType methods diff --git a/R/make_famid.R b/R/make_famid.R index 8ae8fbe3..c75d4db3 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -97,7 +97,7 @@ setMethod("make_famid", "character", #' @rdname make_famid #' @aliases make_famid,Pedigree #' @docType methods -#' @include pedigreeClass.R +#' @include AllClass.R setMethod("make_famid", "Pedigree", function(obj) { ped <- obj diff --git a/R/norm_data.R b/R/norm_data.R index eba8ab1d..8ef957b4 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -81,8 +81,8 @@ norm_ped <- function( ) { err_cols <- c( "sexErrMoFa", "sexErrFa", "sexErrMo", "sexErrTer", "sexNA", - "sexError", "idErrFa", "idErrMo", "idErrSelf", "idErrOwnParent", - "idErrBothParent", "idError", "error" + "sexError", "idErr", "idErrFa", "idErrMo", "idErrSelf", + "idErrOwnParent", "idErrBothParent", "idError", "error" ) err <- data.frame(matrix(NA, nrow = nrow(ped_df), ncol = length(err_cols))) colnames(err) <- err_cols @@ -105,17 +105,20 @@ norm_ped <- function( #### Id #### Check id type for (id in c("indId", "fatherId", "motherId", "family")) { - if (!is.numeric(ped_df[[id]])) { - ped_df[[id]] <- as.character(ped_df[[id]]) - if (length(grep("^ *$", ped_df[[id]])) > 0) { - stop( - "A blank or empty string is not allowed as the ", - id, " variable" - ) + ped_df[[id]] <- as.character(ped_df[[id]]) + } + err$idErr <- lapply( + as.data.frame(t(ped_df[, c( + "indId", "fatherId", "motherId", "family" + )])), + function(x) { + if (any(x == "" & !is.na(x))) { + "One id is Empty" + } else { + NA_character_ } } - } - + ) ## Make a new id from the family and subject pair ped_df$id <- prefix_famid(ped_df$family, ped_df$indId, missid) ped_df$dadid <- prefix_famid(ped_df$family, ped_df$fatherId, missid) @@ -202,7 +205,7 @@ norm_ped <- function( ## Unite all id errors in one column err <- unite( err, "idError", c( - "idErrFa", "idErrMo", "idErrSelf", + "idErr", "idErrFa", "idErrMo", "idErrSelf", "idErrOwnParent", "idErrBothParent" ), na.rm = TRUE, sep = "_", remove = TRUE ) diff --git a/R/num_child.R b/R/num_child.R index 18960d49..17502e68 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -30,7 +30,7 @@ NULL #' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) #' ped1 <- num_child(ped1) #' summary(ped1$ped) -#' @include pedigreeClass.R +#' @include AllClass.R #' @export setGeneric("num_child", signature = "obj", function(obj, ...) standardGeneric("num_child") @@ -45,6 +45,13 @@ setMethod("num_child", "character", function(obj, dadid, momid, ) { id <- obj + if (length(dadid) != length(id)) { + stop("The length of dadid should be equal to the length of id") + } + if (length(momid) != length(id)) { + stop("The length of momid should be equal to the length of id") + } + # Create dummy vectors for the check() function child <- NULL num_child_dir <- NULL diff --git a/devel/old/pedigreeAccessors.R b/devel/old/pedigreeAccessors.R index aca43ab0..40ae3358 100644 --- a/devel/old/pedigreeAccessors.R +++ b/devel/old/pedigreeAccessors.R @@ -1,6 +1,6 @@ #### S4 Accessors #### #' @include Pedigree.R -#' @include pedigreeClass.R +#' @include AllClass.R NULL #### S4 ped Accessors #### diff --git a/devel/old/pedigreeClass.R b/devel/old/pedigreeClass.R index d90f7cb1..c28aed93 100644 --- a/devel/old/pedigreeClass.R +++ b/devel/old/pedigreeClass.R @@ -41,7 +41,7 @@ NULL #' @name Pedigree-class #' @rdname Pedigree-class #' @aliases Pedigree-class -#' @include pedigreeValidity.R +#' @include AllValidity.R #' @include Pedigree.R #' @export setClass( diff --git a/man/Hints-class.Rd b/man/Hints-class.Rd new file mode 100644 index 00000000..54fe7333 --- /dev/null +++ b/man/Hints-class.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R +\docType{class} +\name{Hints-class} +\alias{Hints-class} +\title{S4 class to represent a hints object.} +\value{ +A Hints object. + +A Hints object. +} +\description{ +A hints object is a list of two elements used +to order the individuals in the pedigree plot. + +A scales object is a list of two data.frame used +to represent the affection and the availability status +of the individuals in the pedigree plot. +} +\section{Slots}{ + +\describe{ +\item{\code{order}}{A numeric vector with one element per subject in the +Pedigree. It determines the relative order of subjects within a sibship, as +well as the relative order of processing for the founder couples. (For this +latter, the female founders are ordered as though they were sisters).} + +\item{\code{spouse}}{A matrix with one row per hinted marriage, usually +only a few marriages in a Pedigree will need an added hint, for +instance reverse the plot order of a husband/wife pair. +Each row contains the index of the left spouse, the right hand spouse, +and the anchor (i.e : \code{1} = left, \code{2} = right, \code{0} = either).} + +\item{\code{fill}}{A data.frame with the informations for the affection status. +The columns needed are: 'column_values', 'column_mods', 'mods', 'labels', +'affected', 'fill', 'density' and 'angle'.} + +\item{\code{border}}{A data.frame with the informations for the availability status. +The columns needed are: 'column', 'mods', 'labels' and 'border'.} +}} + +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} + +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Ped-class.Rd b/man/Ped-class.Rd new file mode 100644 index 00000000..25a4c737 --- /dev/null +++ b/man/Ped-class.Rd @@ -0,0 +1,65 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R +\docType{class} +\name{Ped-class} +\alias{Ped-class} +\title{S4 class to represent the identity informations in a Pedigree.} +\value{ +A Ped object. +} +\description{ +A Ped object is a list of identity informations +of the individuals in the pedigree. +It is used to create a Pedigree object. +The minimal needed informations are \code{id}, \code{dadid}, \code{momid} and \code{sex}. +If a \code{family} is provided, the individuals \code{id} will be aggregated +to the \code{family} character to ensure the uniqueness of the \code{id}. +The other slots are used to store recognized informations. +Additional columns can be added to the Ped object and will be +stored in the \code{meta} slot of the Ped object. +} +\section{Slots}{ + +\describe{ +\item{\code{id}}{A character vector with the id of the individuals.} + +\item{\code{dadid}}{A character vector with the id of the father of the individuals.} + +\item{\code{momid}}{A character vector with the id of the mother of the individuals.} + +\item{\code{sex}}{A factor vector for the sex of the individuals (i.e. \code{male}, +\code{female}, \code{unknown} or \code{terminated}).} + +\item{\code{family}}{A character vector with the family of the individuals.} + +\item{\code{steril}}{A numeric vector with the sterilisation status of the +individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} + +\item{\code{status}}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} + +\item{\code{avail}}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} + +\item{\code{affected}}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = not affected, \code{1} = affected, \code{NA} = unknown).} + +\item{\code{useful}}{A numeric vector with the usefulness status of the +individuals (i.e. \code{0} = not useful, \code{1} = useful).} + +\item{\code{kin}}{A numeric vector with minimal kinship value between the +individuals and the useful individuals.} + +\item{\code{num_child_total}}{A numeric vector with the total number of children +of the individuals.} + +\item{\code{num_child_direct}}{A numeric vector with the number of children +of the individuals.} + +\item{\code{num_child_indirect}}{A numeric vector with the number of children +of the individuals.} +}} + +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Ped.Rd b/man/Ped.Rd new file mode 100644 index 00000000..2c40d971 --- /dev/null +++ b/man/Ped.Rd @@ -0,0 +1,51 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllConstructor.R +\name{Ped} +\alias{Ped} +\title{Constructor for the Ped class} +\usage{ +Ped( + id, + sex, + dadid, + momid, + family = NA, + steril = NA, + status = NA, + avail = NA, + affected = NA, + useful = NA, + kin = NA, + missid = NA +) +} +\arguments{ +\item{id}{A character vector with the id of the individuals.} + +\item{sex}{A factor vector with the sex of the individuals (i.e. \code{male}, +\code{female}, \code{unknown} or \code{terminated}).} + +\item{dadid}{A character vector with the id of the father of the individuals.} + +\item{momid}{A character vector with the id of the mother of the individuals.} + +\item{family}{A character vector with the family of the individuals.} + +\item{steril}{A numeric vector with the sterilisation status of the +individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} + +\item{status}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} + +\item{avail}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +} +\value{ +A Ped object. +} +\description{ +Constructor for the Ped class +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Pedigree-class.Rd b/man/Pedigree-class.Rd index 3790495f..89e29926 100644 --- a/man/Pedigree-class.Rd +++ b/man/Pedigree-class.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeClass.R +% Please edit documentation in R/AllClass.R \docType{class} \name{Pedigree-class} \alias{Pedigree-class} diff --git a/man/Rel-class.Rd b/man/Rel-class.Rd new file mode 100644 index 00000000..6608796d --- /dev/null +++ b/man/Rel-class.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R +\docType{class} +\name{Rel-class} +\alias{Rel-class} +\title{S4 class to represent the special relationships in a Pedigree.} +\value{ +A Rel object. +} +\description{ +A Rel object is a list of special relationships +between individuals in the pedigree. +It is used to create a Pedigree object. +The minimal needed informations are \code{id1}, \code{id2} and \code{code}. +If a \code{family} is provided, the individuals \code{id} will be aggregated +to the \code{family} character to ensure the uniqueness of the \code{id}. +} +\section{Slots}{ + +\describe{ +\item{\code{id1}}{A character vector with the id of the first individual.} + +\item{\code{id2}}{A character vector with the id of the second individual.} + +\item{\code{code}}{A character vector with the code of the special relationship. +(i.e. \verb{MZ twin}, \verb{DZ twin}, \verb{UZ twin} or \code{Spouse}).} + +\item{\code{family}}{A character vector with the family of the individuals.} +}} + +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/check_slot_fd.Rd b/man/check_slot_fd.Rd index 9fc10151..51ac5eb3 100644 --- a/man/check_slot_fd.Rd +++ b/man/check_slot_fd.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeValidity.R +% Please edit documentation in R/AllValidity.R \name{check_slot_fd} \alias{check_slot_fd} \title{Check if the fields are present in an object slot} diff --git a/man/check_values.Rd b/man/check_values.Rd index f1c0b20f..113016ed 100644 --- a/man/check_values.Rd +++ b/man/check_values.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeValidity.R +% Please edit documentation in R/AllValidity.R \name{check_values} \alias{check_values} \title{Check values in a slot} \usage{ -check_values(val, ref, present = TRUE) +check_values(val, ref, name = NULL, present = TRUE) } \arguments{ \item{present}{A logical value indicating if the values should be present diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd index b314e2e6..a41032c2 100644 --- a/man/extract-methods.Rd +++ b/man/extract-methods.Rd @@ -1,24 +1,9 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeClass.R, R/pedigreeAccessors.R -\docType{methods} -\name{show,Pedigree-method} -\alias{show,Pedigree-method} -\alias{summary,Pedigree-method} -\alias{[[,Pedigree,ANY,missing-method} -\alias{$,Pedigree-method} -\alias{$<-,Pedigree-method} -\alias{sub_sel_hints} -\alias{sub_sel_hints,Pedigree-method} -\alias{[,Pedigree,ANY,ANY,ANY-method} -\alias{[,Pedigree,missing,ANY,ANY-method} -\alias{[,Pedigree,ANY,missing,ANY-method} -\alias{as.data.frame,Pedigree-method} +% Please edit documentation in R/AllAccessors.R, R/AllGeneric.R +\name{mcols,Pedigree-method} +\alias{mcols,Pedigree-method} \alias{ped} \alias{ped,Pedigree-method} -\alias{meta} -\alias{meta,Pedigree-method} -\alias{deriv} -\alias{deriv,Pedigree-method} \alias{rel} \alias{rel,Pedigree-method} \alias{scales} @@ -33,95 +18,73 @@ \alias{order,Pedigree-method} \alias{spouse} \alias{spouse,Pedigree-method} -\title{Pedigree methods} +\alias{as.list,Ped-method} +\alias{as.data.frame,Ped-method} +\alias{show,Pedigree-method} +\alias{summary,Pedigree-method} +\alias{sub_sel_hints} +\alias{sub_sel_hints,Pedigree-method} +\alias{[,Pedigree,ANY,missing,ANY-method} +\title{Pedigree metadata accessors} \usage{ -\S4method{show}{Pedigree}(object) - -\S4method{summary}{Pedigree}(object) - -\S4method{[[}{Pedigree,ANY,missing}(x, i, j, ..., drop = TRUE) - -\S4method{$}{Pedigree}(x, name) - -\S4method{$}{Pedigree}(x, name) <- value - -sub_sel_hints(hints, index) - -\S4method{[}{Pedigree,ANY,ANY,ANY}(x, i, j, drop = TRUE) - -\S4method{[}{Pedigree,missing,ANY,ANY}(x, i, j, drop = TRUE) - -\S4method{[}{Pedigree,ANY,missing,ANY}(x, i, j, drop = TRUE) - -\S4method{as.data.frame}{Pedigree}(x) +\S4method{mcols}{Pedigree}(x) -ped(object, col) +ped(object, slot) -meta(object, col) +\S4method{mcols}{Pedigree}(x) -deriv(object, col) - -rel(object, col) +rel(object, slot) scales(object) -fill(object, col) +fill(object, slot) -border(object, col) +border(object, slot) hints(object) order(object) spouse(object) -} -\arguments{ -\item{object}{A Pedigree object.} - -\item{x}{A Pedigree object.} -\item{i}{A vector of individuals id or a vector of index.} - -\item{j}{A vector of columns names.} +\S4method{as.list}{Ped}(x) -\item{...}{Other arguments.} +\S4method{as.data.frame}{Ped}(x) -\item{drop}{A logical value indicating if the dimensions should be dropped.} - -\item{name}{A slot name.} +\S4method{show}{Pedigree}(object) -\item{value}{A vector of values to replace.} +\S4method{summary}{Pedigree}(object) -\item{hints}{A list of hints} +sub_sel_hints(hints, index) -\item{index}{A vector of index} +\S4method{[}{Pedigree,ANY,missing,ANY}(x, i, j, drop = TRUE) } -\value{ -A character vector with the informations about the object. - -A character vector with the summary of the object. +\arguments{ +\item{x}{A Pedigree object.} -The slot \code{i} present in the Pedigree object. +\item{object}{A Pedigree object.} -The slot \code{name} present in the Pedigree object. +\item{slot}{A slot in the Ped object of the Pedigree.} -The Pedigree object with the slot \code{name} replaced by \code{value}. +\item{hints}{A list of hints} -A list of hints subsetted +\item{index}{A vector of index} -A Pedigree object subsetted. +\item{i}{A vector of individuals id or a vector of index.} -A Pedigree object subsetted. +\item{j}{A vector of columns names.} -A Pedigree object subsetted. +\item{drop}{A logical value indicating if the dimensions should be dropped.} -A data.frame with the individuals informations. +\item{from}{A Pedigree object.} +} +\value{ +The metadata present in the Pedigree object. The slot \code{ped} present in the Pedigree object. +or one of its slot. -The slot \code{meta} present in the Pedigree object. - -The slot \code{deriv} present in the Pedigree object. +The metadata present in the Pedigree object. The slot \code{rel} present in the Pedigree object. @@ -133,29 +96,25 @@ The slot \code{border} present in the Pedigree object. The slot \code{hints} present in the Pedigree object. -The slot \code{order} present in the Pedigree object. - -The slot \code{spouse} present in the Pedigree object. -} -\description{ -Pedigree show method +The slot \code{order} present in the \code{Hints} slot of +a Pedigree object. -Pedigree summary method. - -Extract parts of a Pedigree object - -Extract parts of a Pedigree object +The slot \code{spouse} present in the \code{Hints} slot of +a Pedigree object. -Replace parts of a Pedigree object +A data.frame with the individuals informations. -Subset the hints list based on the index given +A data.frame with the individuals informations. -Extract parts of a Pedigree object +A character vector with the informations about the object. -Extract parts of a Pedigree object +A character vector with the summary of the object. -Extract parts of a Pedigree object +A list of hints subsetted +A Pedigree object subsetted. +} +\description{ Pedigree rel accessors Pedigree scales accessors @@ -169,5 +128,17 @@ Pedigree hints accessors Pedigree order accessors Pedigree spouse accessors + +Convert a Pedigree object to a data.frame + +Convert a Pedigree object to a data.frame + +Pedigree show method + +Pedigree summary method. + +Subset the hints list based on the index given + +Extract parts of a Pedigree object } \keyword{internal} diff --git a/man/is_valid.Rd b/man/is_valid.Rd deleted file mode 100644 index 78ab0bdf..00000000 --- a/man/is_valid.Rd +++ /dev/null @@ -1,23 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeValidity.R -\name{is_valid} -\alias{is_valid} -\title{Pedigree validity method.} -\usage{ -is_valid(object) -} -\arguments{ -\item{object}{A Pedigree object.} -} -\value{ -A logical value or a character vector with the errors. -} -\description{ -Check if the Pedigree object is valid. -} -\details{ -It will check : -the fields of the slots -the values in the columns of the ped, rel and scale slot -} -\keyword{internal} diff --git a/man/is_valid_hints.Rd b/man/is_valid_hints.Rd new file mode 100644 index 00000000..7cda7090 --- /dev/null +++ b/man/is_valid_hints.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllValidity.R +\name{is_valid_hints} +\alias{is_valid_hints} +\title{Check if the Hints are valid} +\usage{ +is_valid_hints(object) +} +\arguments{ +\item{object}{A Hints object.} +} +\value{ +A character vector with the errors or \code{TRUE} if no errors. +} +\description{ +Check if order and spouse slots are valid (i.e. order is numeric and +spouse is a matrix with 3 columns). +Check if the spouse matrix is valid (i.e. only numeric values). +} +\keyword{internal} diff --git a/man/is_valid_ped.Rd b/man/is_valid_ped.Rd new file mode 100644 index 00000000..ba8ff212 --- /dev/null +++ b/man/is_valid_ped.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllValidity.R +\name{is_valid_ped} +\alias{is_valid_ped} +\title{Check if the Ped is valid} +\usage{ +is_valid_ped(object) +} +\arguments{ +\item{object}{A Ped object.} +} +\value{ +A character vector with the errors or \code{TRUE} if no errors. +} +\description{ +Multiple checks are done here +} +\details{ +\enumerate{ +\item Check that the ped ids slots have the right values +\item Check that the sex, steril, status, avail and affected slots have the +right values +\item Check that dad are male and mom are female +\item Check that individuals have both parents or none +} +} +\keyword{internal} diff --git a/man/is_valid_scales.Rd b/man/is_valid_scales.Rd new file mode 100644 index 00000000..7b0a06e8 --- /dev/null +++ b/man/is_valid_scales.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllValidity.R +\name{is_valid_scales} +\alias{is_valid_scales} +\title{Check if the Scales are valid} +\usage{ +is_valid_scales(object) +} +\arguments{ +\item{object}{A Scales object.} +} +\value{ +A character vector with the errors or \code{TRUE} if no errors. +} +\description{ +Check if the fill and border slots are valid (i.e. they have the right +columns). +} +\keyword{internal} diff --git a/man/length-Pedigree-method.Rd b/man/length-Pedigree-method.Rd index 66aca38e..e0b3fb2e 100644 --- a/man/length-Pedigree-method.Rd +++ b/man/length-Pedigree-method.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeClass.R +% Please edit documentation in R/AllGeneric.R \docType{methods} \name{length,Pedigree-method} \alias{length,Pedigree-method} diff --git a/man/paste0max.Rd b/man/paste0max.Rd index 49854a56..db81a1cc 100644 --- a/man/paste0max.Rd +++ b/man/paste0max.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pedigreeValidity.R +% Please edit documentation in R/AllValidity.R \name{paste0max} \alias{paste0max} \title{Print0 to max} \usage{ -paste0max(x, max = 5, ...) +paste0max(x, max = 5, sep = "", ...) } \arguments{ \item{x}{A vector.} diff --git a/man/show-Ped-method.Rd b/man/show-Ped-method.Rd new file mode 100644 index 00000000..bbe343cb --- /dev/null +++ b/man/show-Ped-method.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllGeneric.R +\name{show,Ped-method} +\alias{show,Ped-method} +\title{Show function of Ped object} +\usage{ +\S4method{show}{Ped}(object) +} +\arguments{ +\item{object}{A Ped object.} +} +\value{ +A data.frame with the individuals informations. +} +\description{ +Convert the Ped object to a data.frame +and print it +} diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index 7eac3f07..ff8f71b0 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -1,7 +1,70 @@ test_that("Class ped work", { - ped <- new("Ped") - expect_is(ped, "Ped") - expect_is(ped, "Vector") - expect_equal(length(ped), 0) - expect_error(ped@id <- "test") + ped0 <- new("Ped") + expect_s4_class(ped0, "Ped") + expect_s4_class(ped0, "Vector") + expect_equal(length(ped0), 0) + expect_equal(length(as.list(ped0)), 14) + expect_equal(dim(as.data.frame(ped0)), c(0, 14)) + + ped2 <- Ped( + id = c("ID1", "ID2"), + momid = c(NA, NA), + dadid = c(NA, NA), + sex = factor(c("female", "male")) + ) + expect_s4_class(ped2, "Ped") + expect_s4_class(ped2, "Vector") + expect_equal(length(ped2), 2) + expect_equal(length(as.list(ped2)), 14) + expect_equal(dim(as.data.frame(ped2)), c(2, 14)) + expect_snapshot(ped2) + + expect_error(Ped( + id = c("ID1", "ID2", "ID3"), + momid = c(NA, NA), + dadid = c(NA, NA) + )) + expect_error(Ped( + id = c("ID1", "ID2"), + momid = c(NA, NA, NA), + dadid = c(NA, NA, NA) + )) + expect_error(Ped( + id = c("ID1", "ID2", "ID3"), + momid = c("ID3", NA, NA), + dadid = c(NA, NA, NA), + sex = c("male", "female", "male") + )) + expect_no_error(Ped( + id = c("ID1", "ID2", "ID3"), + momid = c("ID2", NA, NA), + dadid = c("ID3", NA, NA), + sex = c("male", "female", "male") + )) + expect_no_error(Ped( + id = c("ID1", "ID2", "ID3"), + momid = c("ID2", NA, NA), + dadid = c("ID3", NA, NA), + sex = c("male", "female", "male"), + family = c("F1", "F1", "F2") + )) + expect_error(Ped( + id = c("ID3", "ID2", ""), + momid = c("ID2", NA, NA), + dadid = c("ID3", NA, NA), + sex = c("male", "female", "male"), + family = c("F1", "F1", "F2") + )) + ped3 <- Ped( + id = c("ID1", "ID2", "ID3"), + momid = c("ID2", NA, NA), + dadid = c("ID3", NA, NA), + sex = c("male", "female", "male"), + family = c("F1", "F1", "F2") + ) + mcols(ped3) <- list(A = c("test", 1, 3)) + mcols(ped3)$Test <- c("test", 1, 3) + expect_equal(dim(mcols(ped3)), c(3, 2)) + as.list(ped3) + ped3 }) \ No newline at end of file From 6c5e62055cf1a35a82bfea42cc075f3739ec9d75 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 26 Oct 2023 17:01:03 +0200 Subject: [PATCH 012/111] Finish Ped and start Rel class --- NAMESPACE | 13 +- R/AllAccessors.R | 24 ++-- R/AllClass.R | 23 ++-- R/AllConstructor.R | 193 +++++++++++++++++++++++------ R/AllGeneric.R | 240 +++++++++++++++++++++++++++++++++--- R/AllValidity.R | 9 +- R/utils.R | 2 +- man/Ped-class.Rd | 65 ---------- man/Ped.Rd | 86 +++++++++++-- man/Rel-class.Rd | 33 ----- man/Rel.Rd | 103 ++++++++++++++++ man/c-Ped-method.Rd | 20 +++ man/c-Rel-method.Rd | 20 +++ man/extract-methods.Rd | 22 ++-- man/length-Ped-method.Rd | 18 +++ man/na_to_length.Rd | 22 ++++ man/show-Ped-method.Rd | 4 +- man/summary-Ped-method.Rd | 17 +++ tests/testthat/test-class.R | 78 +++++++++--- 19 files changed, 778 insertions(+), 214 deletions(-) delete mode 100644 man/Ped-class.Rd delete mode 100644 man/Rel-class.Rd create mode 100644 man/Rel.Rd create mode 100644 man/c-Ped-method.Rd create mode 100644 man/c-Rel-method.Rd create mode 100644 man/length-Ped-method.Rd create mode 100644 man/na_to_length.Rd create mode 100644 man/summary-Ped-method.Rd diff --git a/NAMESPACE b/NAMESPACE index dcfcbe83..b8546de1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,7 @@ export(Ped) export(Pedigree) +export(Rel) export(align) export(alignped1) export(alignped2) @@ -54,9 +55,12 @@ exportClasses(Ped) exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) +exportMethods("mcols<-") exportMethods(Pedigree) +exportMethods(Rel) exportMethods(as.data.frame) exportMethods(as.list) +exportMethods(c) exportMethods(family_check) exportMethods(fix_parents) exportMethods(generate_colors) @@ -70,14 +74,20 @@ exportMethods(min_dist_inf) exportMethods(num_child) exportMethods(plot) exportMethods(show) +exportMethods(summary) exportMethods(useful_inds) -importClassesFrom(S4Vectors,Vector) importFrom(Matrix,bdiag) importFrom(Matrix,forceSymmetric) importFrom(Matrix,sparseMatrix) importFrom(S4Vectors,'mcols<-') +importFrom(S4Vectors,as.data.frame) +importFrom(S4Vectors,as.list) +importFrom(S4Vectors,cbind_mcols_for_display) +importFrom(S4Vectors,classNameForDisplay) +importFrom(S4Vectors,makeClassinfoRowForCompactPrinting) importFrom(S4Vectors,mcols) importFrom(S4Vectors,parallel_slot_names) +importFrom(S4Vectors,summary) importFrom(dplyr,"%>%") importFrom(dplyr,across) importFrom(dplyr,group_by) @@ -128,3 +138,4 @@ importFrom(tidyr,pivot_longer) importFrom(tidyr,unite) importFrom(utils,setTxtProgressBar) importFrom(utils,txtProgressBar) +importMethodsFrom(S4Vectors,as.list) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 0faf63db..3527986e 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -10,20 +10,26 @@ NULL #' @param object A Pedigree object. #' @return The metadata present in the Pedigree object. #' @rdname extract-methods -#' @aliases mcols,Pedigree-method +#' @aliases mcols,Ped-method #' @export setMethod( "mcols", signature(x = "Ped"), function(x) { - ped@elementMetadata + x@elementMetadata } ) +#' @title Pedigree metadata accessors +#' @param object A Pedigree object. +#' @return The metadata present in the Pedigree object. +#' @rdname extract-methods +#' @aliases mcols<-,Ped-method +#' @export #' @importFrom S4Vectors 'mcols<-' setMethod( "mcols<-", - signature(x = "Pedigree", value = "ANY"), + signature(x = "Ped", value = "ANY"), function(x, value) { if (is.data.frame(value)) { if (nrow(value) != length(x)) { @@ -33,15 +39,19 @@ setMethod( ) } } else if (is.list(value)) { - if (length(value) != length(x)) { + lglst <- lapply(value, length) + if (any(lglst != length(x))) { stop( - "The length of the new value should be: ", + "The length of the element(s) '", + names(lglst[lglst != length(x)]), + "' should be: ", "equal to the length of the pedigree" ) } value <- as.data.frame(value) - } - mcols(ped) <- value + } + x@elementMetadata <- value + x } ) diff --git a/R/AllClass.R b/R/AllClass.R index f08758d3..4caa4560 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -104,11 +104,10 @@ setValidity("Scales", is_valid_scales) #' @seealso [Pedigree()] #' @docType class #' @name Ped-class -#' @rdname Ped-class -#' @importClassesFrom S4Vectors Vector +#' @rdname Ped #' @export setClass("Ped", - slots = c( + representation( id = "character", dadid = "character", momid = "character", @@ -118,8 +117,6 @@ setClass("Ped", status = "numeric", avail = "numeric", affected = "numeric", - useful = "numeric", - kin = "numeric", num_child_total = "numeric", num_child_direct = "numeric", num_child_indirect = "numeric", @@ -127,13 +124,13 @@ setClass("Ped", ) ) +#' @importFrom S4Vectors parallel_slot_names setMethod("parallel_slot_names", "Ped", function(x) { c( "id", "momid", "dadid", "sex", "family", "steril", "status", "avail", "affected", - "kin", "useful", "num_child_total", - "num_child_direct", "num_child_indirect", + "num_child_total", "num_child_direct", "num_child_indirect", callNextMethod() ) } @@ -153,24 +150,22 @@ setValidity("Ped", is_valid_ped) #' #' @slot id1 A character vector with the id of the first individual. #' @slot id2 A character vector with the id of the second individual. -#' @slot code A character vector with the code of the special relationship. -#' (i.e. `MZ twin`, `DZ twin`, `UZ twin` or `Spouse`). +#' @slot code An ordered factor vector with the code of the special +#' relationship. (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). #' @slot family A character vector with the family of the individuals. #' #' @return A Rel object. #' @seealso [Pedigree()] #' @docType class #' @name Rel-class -#' @rdname Rel-class -#' @importClassesFrom S4Vectors Vector +#' @rdname Rel #' @export setClass("Rel", representation( id1 = "character", id2 = "character", - code = "character", - family = "character", - elementMetadata = "data.frame" + code = "factor", + family = "character" ) ) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 5496c124..10b78f58 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -1,14 +1,33 @@ -na_to_length <- function(x, y, value) { +#' NA to specific length +#' +#' @param x The vector to check. +#' @param temp A template vector to use to determine the length. +#' @param value The value to use to fill the vector. +#' +#' @return A vector with the same length as temp. +#' @keywords internal +na_to_length <- function(x, temp, value) { if (length(x) == 1 & all(is.na(x))) { - rep(value, length(y)) + rep(value, length(temp)) } else { + if (length(x) != length(temp)) { + stop("The length of the new value should be: ", + "equal to the length of the template vector" + ) + } x } } +#### S4 Ped constructor #### #' Constructor for the Ped class +#' #' @description Constructor for the Ped class -#' @param id A character vector with the id of the individuals. +#' If a `data.frame` is provided, the metadata will correspond to the columns +#' that do not correspond to the Ped slots. +#' +#' @param obj A character vector with the id of the individuals or a +#' `data.frame` with all the informations in corresponding columns. #' @param dadid A character vector with the id of the father of the individuals. #' @param momid A character vector with the id of the mother of the individuals. #' @param family A character vector with the family of the individuals. @@ -23,38 +42,140 @@ na_to_length <- function(x, y, value) { #' #' @return A Ped object. #' @seealso [Pedigree()] +#' @rdname Ped +#' @export +setGeneric("Ped", signature = "obj", function(obj, ...) { + standardGeneric("Ped") +}) + +#' @docType methods +#' @aliases Ped,data.frame +#' @rdname Ped +setMethod("Ped", "data.frame", + function(obj, cols_used_init = FALSE, cols_used_del = FALSE) { + col_need <- c("id", "sex", "dadid", "momid") + col_to_use <- c("family", "steril", "status", "avail", "affected") + col_used <- c( + "num_child_total", "num_child_direct", "num_child_indirect", + "elementMetadata" + ) + df <- check_columns( + obj, col_need, col_used, col_to_use, + others_cols = TRUE, cols_to_use_init = TRUE, + cols_used_init = cols_used_init, cols_used_del = cols_used_del + ) + df$steril <- vect_to_binary(df$steril) + df$status <- vect_to_binary(df$status) + df$avail <- vect_to_binary(df$avail) + df$affected <- vect_to_binary(df$affected) + + myped <- with(df, Ped( + obj = id, sex = sex, dadid = dadid, momid = momid, + family = family, + steril = steril, status = status, avail = avail, + affected = affected + )) + mcols(myped) <- df[, + colnames(df)[!colnames(df) %in% slotNames(myped)] + ] + rownames(mcols(myped)) <- df$id + myped + } +) + +#' @docType methods +#' @aliases Ped,character +#' @rdname Ped +setMethod("Ped", "character", + function( + obj, sex, dadid, momid, family = NA, + steril = NA, status = NA, avail = NA, + affected = NA + ) { + family <- na_to_length(family, obj, NA_character_) + id <- as.character(obj) + dadid <- as.character(dadid) + momid <- as.character(momid) + + sex <- sex_to_factor(sex) + + steril <- na_to_length(steril, id, NA_real_) + status <- na_to_length(status, id, NA_real_) + avail <- na_to_length(avail, id, NA_real_) + affected <- na_to_length(affected, id, NA_real_) + + df_child <- num_child(id, dadid, momid, rel_df = NULL) + + + new( + "Ped", + id = id, dadid = dadid, momid = momid, family = family, + sex = sex, steril = steril, status = status, avail = avail, + affected = affected, + num_child_total = df_child$num_child_tot, + num_child_direct = df_child$num_child_dir, + num_child_indirect = df_child$num_child_ind + ) + } +) + +#### S4 Rel constructor #### +#' Constructor for the Rel class +#' +#' @description Constructor for the Rel class. +#' +#' @param obj A character vector with the id of the first individuals of each +#' pairs or a `data.frame` with all the informations in corresponding columns. +#' @param id2 A character vector with the id of the second individuals of each +#' pairs +#' @param code An ordered factor vector with the code of the special +#' relationship (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). +#' @param family A character vector with the family of the individuals. #' +#' @return A Rel object. +#' @seealso [Pedigree()] +#' @rdname Rel #' @export -Ped <- function( - id, sex, dadid, momid, family = NA, - steril = NA, status = NA, avail = NA, - affected = NA, useful = NA, kin = NA, - missid = NA -) { - family <- na_to_length(family, id, as.character(NA)) - id <- as.character(id) - dadid <- as.character(dadid) - momid <- as.character(momid) - missid <- as.character(missid) - - sex <- sex_to_factor(sex) - - steril <- na_to_length(steril, id, as.numeric(NA)) - status <- na_to_length(status, id, as.numeric(NA)) - avail <- na_to_length(avail, id, as.numeric(NA)) - affected <- na_to_length(affected, id, as.numeric(NA)) - useful <- na_to_length(useful, id, as.numeric(NA)) - kin <- na_to_length(kin, id, as.numeric(NA)) - - df_child <- num_child(id, dadid, momid, rel_df = NULL, missid = missid) - - new( - "Ped", - id = id, dadid = dadid, momid = momid, family = family, - sex = sex, steril = steril, status = status, avail = avail, - affected = affected, useful = useful, kin = kin, - num_child_total = df_child$num_child_tot, - num_child_direct = df_child$num_child_dir, - num_child_indirect = df_child$num_child_ind - ) -} +setGeneric("Rel", signature = "obj", function(obj, ...) { + standardGeneric("Rel") +}) + +#' @docType methods +#' @aliases Rel,data.frame +#' @rdname Rel +#' @export +setMethod("Rel", "data.frame", + function(obj) { + col_need <- c("id1", "id2", "code") + col_to_use <- c("family") + df <- check_columns( + obj, col_need, NULL, col_to_use, + cols_to_use_init = TRUE + ) + + with(df, Rel( + obj = id1, id2 = id2, code = code, family = family + )) + } +) + +#' @docType methods +#' @aliases Rel,character +#' @rdname Rel +#' @export +setMethod("Rel", "character", + function( + obj, id2, code, family = NA + ) { + family <- na_to_length(family, obj, NA_character_) + id1 <- as.character(obj) + id2 <- as.character(id2) + code <- rel_code_to_factor(code) + + rel <- new( + "Rel", + id1 = id1, id2 = id2, code = code, family = family + ) + rel + } +) \ No newline at end of file diff --git a/R/AllGeneric.R b/R/AllGeneric.R index c204af1f..dc22e6ad 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -1,27 +1,66 @@ #### Generic for Ped object #### +#' Summary function of Ped object +#' +#' @description Compute the summary of a Ped object +#' +#' @param object A Ped object. +#' +#' @return A character vector with the summary of the object. +#' +#' @export +#' @importFrom S4Vectors classNameForDisplay +#' @importFrom S4Vectors summary +setMethod("summary", "Ped", + function(object) { + object_class <- classNameForDisplay(object) + object_len <- length(object) + object_mcols <- mcols(object, use.names = FALSE) + object_nmc <- if (is.null(object_mcols)) 0L else ncol(object_mcols) + paste0(object_class, " object with ", object_len, " ", + ifelse(object_len == 1L, "individual", "individuals"), + " and ", object_nmc, " metadata ", + ifelse(object_nmc == 1L, "column", "columns") + ) + } +) + #' Show function of Ped object #' #' @description Convert the Ped object to a data.frame -#' and print it +#' and print it with its summary. #' #' @param object A Ped object. #' -#' @return A data.frame with the individuals informations. +#' @return The Ped object with the individuals informations. #' #' @export -setMethod("show", signature(object = "Ped"), +#' @importFrom S4Vectors cbind_mcols_for_display +#' @importFrom S4Vectors makeClassinfoRowForCompactPrinting +setMethod("show", "Ped", function(object) { - print(as.data.frame(object)) + cat(summary(object), ":\n", sep = "") + df <- as.data.frame(object) + df <- df[, !colnames(df) %in% colnames(mcols(object))] + out <- S4Vectors::cbind_mcols_for_display(df, object) + class_df <- lapply(df, class) + classinfo <- S4Vectors::makeClassinfoRowForCompactPrinting( + object, class_df + ) + stopifnot(identical(colnames(classinfo), colnames(out))) + out <- rbind(classinfo, out) + print(out, quote = FALSE, right = TRUE) } ) -#' @title Ped to data.frame -#' @description Convert a Pedigree object to a data.frame -#' @param from A Pedigree object. -#' @return A data.frame with the individuals informations. +#' @title Ped object to list +#' @description Convert a Ped object to a list +#' @param from A Ped object. +#' @return A list with the individuals informations. +#' The metadata are put at the end. #' @rdname extract-methods #' @aliases as.list,Ped-method +#' @importFrom S4Vectors as.list #' @export setMethod("as.list", "Ped", function(x) { to <- list() @@ -32,17 +71,153 @@ setMethod("as.list", "Ped", function(x) { to[[slot]] <- slot(x, slot) } } - to + # Add the metadata in separate slot + c(to, as.list(mcols(x))) }) -#' @title Ped to data.frame -#' @description Convert a Pedigree object to a data.frame -#' @param from A Pedigree object. +#' @title Ped object to data.frame +#' @description Convert a Ped object to a data.frame +#' @param from A Ped object. #' @return A data.frame with the individuals informations. +#' The metadata are put at the end. #' @rdname extract-methods #' @aliases as.data.frame,Ped-method +#' @importFrom S4Vectors as.data.frame #' @export setMethod("as.data.frame", "Ped", function(x) { + lst <- as.list(x) + if (length(unique(lapply(lst, length))) != 1) { + stop("All slots should have the same length") + } + ped_df <- data.frame(lst) + rownames(ped_df) <- ped_df$id + ped_df +}) + +#' Compute the length of a Ped object +#' @param x A Ped object. +#' @return The number of individuals in the Ped object. +#' @docType methods +#' @aliases length,Ped-method +#' @export +setMethod("length", "Ped", + function(x) { + length(x@id) + } +) + +#' Bind two Ped objects +#' +#' @description Bind two Ped objects by row. +#' The metadata need to be the same. +#' +#' @param x A Ped object. +#' @param y A Ped object. +#' +#' @return A Ped object containing the individuals of x and y. +#' +#' @export +setMethod(c, "Ped", + function(x, y) { + if (any(!names(mcols(x)) %in% names(mcols(y))) | + any(!names(mcols(y)) %in% names(mcols(x))) + ) { + warning( + "Some of the metadata are not the same", + "Missing information will be filled with NA" + ) + } + ped_df <- unique(merge.data.frame( + as.data.frame(x), as.data.frame(y), all = TRUE + )) + new_ped <- Ped(ped_df, cols_used_init = TRUE, cols_used_del = TRUE) + validObject(new_ped) + new_ped + } +) + + +#### S4 Rel generics #### +#' Summary function of Rel object +#' +#' @description Compute the summary of a Rel object +#' +#' @param object A Rel object. +#' +#' @return A character vector with the summary of the object. +#' +#' @export +#' @importFrom S4Vectors classNameForDisplay +#' @importFrom S4Vectors summary +#' @rdname Rel +setMethod("summary", "Rel", + function(object) { + object_class <- classNameForDisplay(object) + object_len <- length(object) + tbl <- table(object@code) + if (length(tbl) == 0L) { + sum_codes <- 0L + } else { + sum_codes <- paste0( + paste(tbl, levels(object@code)), collapse = ", " + ) + } + paste0(object_class, " object with ", object_len, " ", + ifelse(object_len == 1L, "relationship", "relationships"), + ifelse(sum_codes == 0L, "", paste0("with ", sum_codes, ".")) + ) + } +) + +#' Show function of Rel object +#' +#' @description Convert the Rel object to a data.frame +#' and print it with its summary. +#' +#' @param object A Rel object. +#' +#' @return The Rel object with the relationship informations. +#' +#' @export +#' @importFrom S4Vectors cbind_mcols_for_display +#' @importFrom S4Vectors makeClassinfoRowForCompactPrinting +#' @rdname Rel +setMethod("show", signature(object = "Rel"), + function(object) { + cat(summary(object), ":\n", sep = "") + df <- as.data.frame(object) + class_df <- lapply(df, function(x) { paste0("<", class(x), ">") }) + stopifnot(identical(names(class_df), colnames(df))) + out <- rbind(class_df, df) + print(out, quote = FALSE, right = TRUE) + } +) + +#' @title Rel object to list +#' @description Convert a Rel object to a list +#' @param from A Rel object. +#' @return A list with the relationship informations. +#' @rdname Rel +#' @aliases as.list,Rel-method +#' @importMethodsFrom S4Vectors as.list +#' @export +setMethod("as.list", "Rel", function(x) { + to <- list() + for (slot in slotNames(x)) { + to[[slot]] <- slot(x, slot) + } + to +}) + +#' @title Rel to data.frame +#' @description Convert a Rel object to a data.frame +#' @param from A Rel object. +#' @return A data.frame with the relationship informations. +#' @rdname Rel +#' @aliases as.data.frame,Rel-method +#' @importFrom S4Vectors as.data.frame +#' @export +setMethod("as.data.frame", "Rel", function(x) { lst <- as.list(x) if (length(unique(lapply(lst, length))) != 1) { stop("All slots should have the same length") @@ -50,6 +225,43 @@ setMethod("as.data.frame", "Ped", function(x) { data.frame(lst) }) +#' Compute the length of a Rel object +#' @param x A Rel object. +#' @return The number of relationships in the Rel object. +#' @docType methods +#' @aliases length,Rel-method +#' @rdname Rel +#' @export +setMethod("length", c(x = "Rel"), + function(x) { + length(x@id1) + } +) + +#' Bind two Rel objects +#' +#' @description Bind two Rel objects by row. +#' The metadata need to be the same. +#' +#' @param x A Rel object. +#' @param y A Rel object. +#' +#' @return A Rel object containing the relationships of x and y. +#' +#' @export +setMethod(c, "Rel", + function(x, y) { + df <- unique(merge.data.frame( + as.data.frame(x), as.data.frame(y), all = TRUE + )) + new_rel <- Rel(df) + validObject(new_rel) + new_rel + } +) + +#### S4 Pedigree generics #### + #' Compute the length of a Pedigree object #' @param x A Pedigree object. #' @return The number of individuals in the Pedigree object. @@ -61,8 +273,6 @@ setMethod("length", c(x = "Pedigree"), length(ped(x)) } ) - - #' @title Pedigree methods #' @description Pedigree show method #' @param object A Pedigree object. @@ -94,7 +304,7 @@ setMethod("summary", signature(object = "Pedigree"), function(object) { ) }) -#### Subscripting #### +## Subscripting #' @description Subset the hints list based on the index given #' @param hints A list of hints #' @param index A vector of index diff --git a/R/AllValidity.R b/R/AllValidity.R index 783a8160..7f11be77 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -27,7 +27,7 @@ paste0max <- function(x, max = 5, sep = "", ...) { #' @keywords internal check_slot_fd <- function(obj, slot = NULL, fields = character()) { if (is.object(obj)) { - obj <- as(obj, "list") + obj <- as.list(obj) } if (is.null(slot)) { array_names <- names(obj) @@ -168,7 +168,7 @@ is_valid_scales <- function(object) { #' #' @keywords internal is_valid_ped <- function(object) { - missid <- NA + missid <- NA_character_ errors <- c() #### Check that the ped columns have the right values #### @@ -180,7 +180,7 @@ is_valid_ped <- function(object) { # Control values for ids famid <- unique(object@family) errors <- c(errors, check_values( - famid, c("", missid), "family", present = FALSE + famid, c(""), "family", present = FALSE )) errors <- c(errors, check_values( object@id, @@ -244,14 +244,13 @@ is_valid_rel <- function(object) { #### Check that the rel columns have the right values #### codes <- c("MZ twin", "DZ twin", "UZ twin", "Spouse") - errors <- c(errors, check_values(object@rel@code, codes)) + errors <- c(errors, check_values(object@code, codes)) if (length(errors) == 0) { TRUE } else { errors } - return(errors) } diff --git a/R/utils.R b/R/utils.R index d893f446..01bd040f 100644 --- a/R/utils.R +++ b/R/utils.R @@ -284,7 +284,7 @@ rel_code_to_factor <- function(rel_code) { code_equiv <- c( mztwin = "MZ twin", dztwin = "DZ twin", uztwin = "UZ twin", spouse = "Spouse", - `1` = "MZ twin", `2` = "DZ twin", `3` = "UZ twin", `4` = "Spouse" + "1" = "MZ twin", "2" = "DZ twin", "3" = "UZ twin", "4" = "Spouse" ) codes <- c("MZ twin", "DZ twin", "UZ twin", "Spouse") rel_code <- as.character(revalue(as.factor( diff --git a/man/Ped-class.Rd b/man/Ped-class.Rd deleted file mode 100644 index 25a4c737..00000000 --- a/man/Ped-class.Rd +++ /dev/null @@ -1,65 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R -\docType{class} -\name{Ped-class} -\alias{Ped-class} -\title{S4 class to represent the identity informations in a Pedigree.} -\value{ -A Ped object. -} -\description{ -A Ped object is a list of identity informations -of the individuals in the pedigree. -It is used to create a Pedigree object. -The minimal needed informations are \code{id}, \code{dadid}, \code{momid} and \code{sex}. -If a \code{family} is provided, the individuals \code{id} will be aggregated -to the \code{family} character to ensure the uniqueness of the \code{id}. -The other slots are used to store recognized informations. -Additional columns can be added to the Ped object and will be -stored in the \code{meta} slot of the Ped object. -} -\section{Slots}{ - -\describe{ -\item{\code{id}}{A character vector with the id of the individuals.} - -\item{\code{dadid}}{A character vector with the id of the father of the individuals.} - -\item{\code{momid}}{A character vector with the id of the mother of the individuals.} - -\item{\code{sex}}{A factor vector for the sex of the individuals (i.e. \code{male}, -\code{female}, \code{unknown} or \code{terminated}).} - -\item{\code{family}}{A character vector with the family of the individuals.} - -\item{\code{steril}}{A numeric vector with the sterilisation status of the -individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} - -\item{\code{status}}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} - -\item{\code{avail}}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} - -\item{\code{affected}}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = not affected, \code{1} = affected, \code{NA} = unknown).} - -\item{\code{useful}}{A numeric vector with the usefulness status of the -individuals (i.e. \code{0} = not useful, \code{1} = useful).} - -\item{\code{kin}}{A numeric vector with minimal kinship value between the -individuals and the useful individuals.} - -\item{\code{num_child_total}}{A numeric vector with the total number of children -of the individuals.} - -\item{\code{num_child_direct}}{A numeric vector with the number of children -of the individuals.} - -\item{\code{num_child_indirect}}{A numeric vector with the number of children -of the individuals.} -}} - -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/Ped.Rd b/man/Ped.Rd index 2c40d971..23dd7d86 100644 --- a/man/Ped.Rd +++ b/man/Ped.Rd @@ -1,11 +1,21 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllConstructor.R -\name{Ped} +% Please edit documentation in R/AllClass.R, R/AllConstructor.R +\docType{class} +\name{Ped-class} +\alias{Ped-class} \alias{Ped} -\title{Constructor for the Ped class} +\alias{Ped,data.frame-method} +\alias{Ped,data.frame} +\alias{Ped,character-method} +\alias{Ped,character} +\title{S4 class to represent the identity informations in a Pedigree.} \usage{ -Ped( - id, +Ped(obj, ...) + +\S4method{Ped}{data.frame}(obj, cols_used_init = FALSE, cols_used_del = FALSE) + +\S4method{Ped}{character}( + obj, sex, dadid, momid, @@ -13,14 +23,12 @@ Ped( steril = NA, status = NA, avail = NA, - affected = NA, - useful = NA, - kin = NA, - missid = NA + affected = NA ) } \arguments{ -\item{id}{A character vector with the id of the individuals.} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} \item{sex}{A factor vector with the sex of the individuals (i.e. \code{male}, \code{female}, \code{unknown} or \code{terminated}).} @@ -41,11 +49,69 @@ individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} } \value{ +A Ped object. + A Ped object. } \description{ +A Ped object is a list of identity informations +of the individuals in the pedigree. +It is used to create a Pedigree object. +The minimal needed informations are \code{id}, \code{dadid}, \code{momid} and \code{sex}. +If a \code{family} is provided, the individuals \code{id} will be aggregated +to the \code{family} character to ensure the uniqueness of the \code{id}. +The other slots are used to store recognized informations. +Additional columns can be added to the Ped object and will be +stored in the \code{meta} slot of the Ped object. + Constructor for the Ped class +If a \code{data.frame} is provided, the metadata will correspond to the columns +that do not correspond to the Ped slots. } +\section{Slots}{ + +\describe{ +\item{\code{id}}{A character vector with the id of the individuals.} + +\item{\code{dadid}}{A character vector with the id of the father of the individuals.} + +\item{\code{momid}}{A character vector with the id of the mother of the individuals.} + +\item{\code{sex}}{A factor vector for the sex of the individuals (i.e. \code{male}, +\code{female}, \code{unknown} or \code{terminated}).} + +\item{\code{family}}{A character vector with the family of the individuals.} + +\item{\code{steril}}{A numeric vector with the sterilisation status of the +individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} + +\item{\code{status}}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} + +\item{\code{avail}}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} + +\item{\code{affected}}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = not affected, \code{1} = affected, \code{NA} = unknown).} + +\item{\code{useful}}{A numeric vector with the usefulness status of the +individuals (i.e. \code{0} = not useful, \code{1} = useful).} + +\item{\code{kin}}{A numeric vector with minimal kinship value between the +individuals and the useful individuals.} + +\item{\code{num_child_total}}{A numeric vector with the total number of children +of the individuals.} + +\item{\code{num_child_direct}}{A numeric vector with the number of children +of the individuals.} + +\item{\code{num_child_indirect}}{A numeric vector with the number of children +of the individuals.} +}} + \seealso{ +\code{\link[=Pedigree]{Pedigree()}} + \code{\link[=Pedigree]{Pedigree()}} } diff --git a/man/Rel-class.Rd b/man/Rel-class.Rd deleted file mode 100644 index 6608796d..00000000 --- a/man/Rel-class.Rd +++ /dev/null @@ -1,33 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R -\docType{class} -\name{Rel-class} -\alias{Rel-class} -\title{S4 class to represent the special relationships in a Pedigree.} -\value{ -A Rel object. -} -\description{ -A Rel object is a list of special relationships -between individuals in the pedigree. -It is used to create a Pedigree object. -The minimal needed informations are \code{id1}, \code{id2} and \code{code}. -If a \code{family} is provided, the individuals \code{id} will be aggregated -to the \code{family} character to ensure the uniqueness of the \code{id}. -} -\section{Slots}{ - -\describe{ -\item{\code{id1}}{A character vector with the id of the first individual.} - -\item{\code{id2}}{A character vector with the id of the second individual.} - -\item{\code{code}}{A character vector with the code of the special relationship. -(i.e. \verb{MZ twin}, \verb{DZ twin}, \verb{UZ twin} or \code{Spouse}).} - -\item{\code{family}}{A character vector with the family of the individuals.} -}} - -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/Rel.Rd b/man/Rel.Rd new file mode 100644 index 00000000..69e992f8 --- /dev/null +++ b/man/Rel.Rd @@ -0,0 +1,103 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, R/AllGeneric.R +\docType{class} +\name{Rel-class} +\alias{Rel-class} +\alias{Rel} +\alias{Rel,data.frame-method} +\alias{Rel,data.frame} +\alias{Rel,character-method} +\alias{Rel,character} +\alias{summary,Rel-method} +\alias{show,Rel-method} +\alias{as.list,Rel-method} +\alias{as.data.frame,Rel-method} +\alias{length,Rel-method} +\title{S4 class to represent the special relationships in a Pedigree.} +\usage{ +Rel(obj, ...) + +\S4method{Rel}{data.frame}(obj) + +\S4method{Rel}{character}(obj, id2, code, family = NA) + +\S4method{summary}{Rel}(object) + +\S4method{show}{Rel}(object) + +\S4method{as.list}{Rel}(x) + +\S4method{as.data.frame}{Rel}(x) + +\S4method{length}{Rel}(x) +} +\arguments{ +\item{obj}{A character vector with the id of the first individuals of each +pairs or a \code{data.frame} with all the informations in corresponding columns.} + +\item{id2}{A character vector with the id of the second individuals of each +pairs} + +\item{code}{An ordered factor vector with the code of the special +relationship (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} + +\item{family}{A character vector with the family of the individuals.} + +\item{object}{A Rel object.} + +\item{x}{A Rel object.} + +\item{from}{A Rel object.} +} +\value{ +A Rel object. + +A Rel object. + +A character vector with the summary of the object. + +The Rel object with the relationship informations. + +A list with the relationship informations. + +A data.frame with the relationship informations. + +The number of relationships in the Rel object. +} +\description{ +A Rel object is a list of special relationships +between individuals in the pedigree. +It is used to create a Pedigree object. +The minimal needed informations are \code{id1}, \code{id2} and \code{code}. +If a \code{family} is provided, the individuals \code{id} will be aggregated +to the \code{family} character to ensure the uniqueness of the \code{id}. + +Constructor for the Rel class. + +Compute the summary of a Rel object + +Convert the Rel object to a data.frame +and print it with its summary. + +Convert a Rel object to a list + +Convert a Rel object to a data.frame +} +\section{Slots}{ + +\describe{ +\item{\code{id1}}{A character vector with the id of the first individual.} + +\item{\code{id2}}{A character vector with the id of the second individual.} + +\item{\code{code}}{An ordered factor vector with the code of the special +relationship. (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} + +\item{\code{family}}{A character vector with the family of the individuals.} +}} + +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} + +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/c-Ped-method.Rd b/man/c-Ped-method.Rd new file mode 100644 index 00000000..326ea469 --- /dev/null +++ b/man/c-Ped-method.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllGeneric.R +\name{c,Ped-method} +\alias{c,Ped-method} +\title{Bind two Ped objects} +\usage{ +\S4method{c}{Ped}(x, y) +} +\arguments{ +\item{x}{A Ped object.} + +\item{y}{A Ped object.} +} +\value{ +A Ped object containing the individuals of x and y. +} +\description{ +Bind two Ped objects by row. +The metadata need to be the same. +} diff --git a/man/c-Rel-method.Rd b/man/c-Rel-method.Rd new file mode 100644 index 00000000..8fb3b896 --- /dev/null +++ b/man/c-Rel-method.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllGeneric.R +\name{c,Rel-method} +\alias{c,Rel-method} +\title{Bind two Rel objects} +\usage{ +\S4method{c}{Rel}(x, y) +} +\arguments{ +\item{x}{A Rel object.} + +\item{y}{A Rel object.} +} +\value{ +A Rel object containing the relationships of x and y. +} +\description{ +Bind two Rel objects by row. +The metadata need to be the same. +} diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd index a41032c2..7e42b52e 100644 --- a/man/extract-methods.Rd +++ b/man/extract-methods.Rd @@ -1,9 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/AllAccessors.R, R/AllGeneric.R -\name{mcols,Pedigree-method} -\alias{mcols,Pedigree-method} +\name{mcols,Ped-method} +\alias{mcols,Ped-method} +\alias{mcols<-,Ped-method} \alias{ped} \alias{ped,Pedigree-method} +\alias{mcols,Pedigree-method} \alias{rel} \alias{rel,Pedigree-method} \alias{scales} @@ -27,7 +29,9 @@ \alias{[,Pedigree,ANY,missing,ANY-method} \title{Pedigree metadata accessors} \usage{ -\S4method{mcols}{Pedigree}(x) +\S4method{mcols}{Ped}(x) + +\S4method{mcols}{Ped}(x) <- value ped(object, slot) @@ -76,11 +80,13 @@ sub_sel_hints(hints, index) \item{drop}{A logical value indicating if the dimensions should be dropped.} -\item{from}{A Pedigree object.} +\item{from}{A Ped object.} } \value{ The metadata present in the Pedigree object. +The metadata present in the Pedigree object. + The slot \code{ped} present in the Pedigree object. or one of its slot. @@ -102,9 +108,11 @@ a Pedigree object. The slot \code{spouse} present in the \code{Hints} slot of a Pedigree object. -A data.frame with the individuals informations. +A list with the individuals informations. +The metadata are put at the end. A data.frame with the individuals informations. +The metadata are put at the end. A character vector with the informations about the object. @@ -129,9 +137,9 @@ Pedigree order accessors Pedigree spouse accessors -Convert a Pedigree object to a data.frame +Convert a Ped object to a list -Convert a Pedigree object to a data.frame +Convert a Ped object to a data.frame Pedigree show method diff --git a/man/length-Ped-method.Rd b/man/length-Ped-method.Rd new file mode 100644 index 00000000..64aa7728 --- /dev/null +++ b/man/length-Ped-method.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllGeneric.R +\docType{methods} +\name{length,Ped-method} +\alias{length,Ped-method} +\title{Compute the length of a Ped object} +\usage{ +\S4method{length}{Ped}(x) +} +\arguments{ +\item{x}{A Ped object.} +} +\value{ +The number of individuals in the Ped object. +} +\description{ +Compute the length of a Ped object +} diff --git a/man/na_to_length.Rd b/man/na_to_length.Rd new file mode 100644 index 00000000..28c0ef6e --- /dev/null +++ b/man/na_to_length.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllConstructor.R +\name{na_to_length} +\alias{na_to_length} +\title{NA to specific length} +\usage{ +na_to_length(x, temp, value) +} +\arguments{ +\item{x}{The vector to check.} + +\item{temp}{A template vector to use to determine the length.} + +\item{value}{The value to use to fill the vector.} +} +\value{ +A vector with the same length as temp. +} +\description{ +NA to specific length +} +\keyword{internal} diff --git a/man/show-Ped-method.Rd b/man/show-Ped-method.Rd index bbe343cb..8eefdc56 100644 --- a/man/show-Ped-method.Rd +++ b/man/show-Ped-method.Rd @@ -10,9 +10,9 @@ \item{object}{A Ped object.} } \value{ -A data.frame with the individuals informations. +The Ped object with the individuals informations. } \description{ Convert the Ped object to a data.frame -and print it +and print it with its summary. } diff --git a/man/summary-Ped-method.Rd b/man/summary-Ped-method.Rd new file mode 100644 index 00000000..505952c6 --- /dev/null +++ b/man/summary-Ped-method.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllGeneric.R +\name{summary,Ped-method} +\alias{summary,Ped-method} +\title{Summary function of Ped object} +\usage{ +\S4method{summary}{Ped}(object) +} +\arguments{ +\item{object}{A Ped object.} +} +\value{ +A character vector with the summary of the object. +} +\description{ +Compute the summary of a Ped object +} diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index ff8f71b0..c049faf2 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -1,70 +1,112 @@ test_that("Class ped work", { ped0 <- new("Ped") expect_s4_class(ped0, "Ped") - expect_s4_class(ped0, "Vector") expect_equal(length(ped0), 0) - expect_equal(length(as.list(ped0)), 14) - expect_equal(dim(as.data.frame(ped0)), c(0, 14)) + expect_equal(length(as.list(ped0)), 12) + expect_equal(dim(as.data.frame(ped0)), c(0, 12)) ped2 <- Ped( - id = c("ID1", "ID2"), + obj = c("ID5", "ID4"), momid = c(NA, NA), dadid = c(NA, NA), sex = factor(c("female", "male")) ) expect_s4_class(ped2, "Ped") - expect_s4_class(ped2, "Vector") expect_equal(length(ped2), 2) - expect_equal(length(as.list(ped2)), 14) - expect_equal(dim(as.data.frame(ped2)), c(2, 14)) + expect_equal(length(as.list(ped2)), 12) + expect_equal(dim(as.data.frame(ped2)), c(2, 12)) expect_snapshot(ped2) expect_error(Ped( - id = c("ID1", "ID2", "ID3"), + obj = c("ID1", "ID2", "ID3"), momid = c(NA, NA), dadid = c(NA, NA) )) expect_error(Ped( - id = c("ID1", "ID2"), + obj = c("ID1", "ID2"), momid = c(NA, NA, NA), dadid = c(NA, NA, NA) )) expect_error(Ped( - id = c("ID1", "ID2", "ID3"), + obj = c("ID1", "ID2", "ID3"), momid = c("ID3", NA, NA), dadid = c(NA, NA, NA), sex = c("male", "female", "male") )) expect_no_error(Ped( - id = c("ID1", "ID2", "ID3"), + obj = c("ID1", "ID2", "ID3"), momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male") )) expect_no_error(Ped( - id = c("ID1", "ID2", "ID3"), + obj = c("ID1", "ID2", "ID3"), momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male"), family = c("F1", "F1", "F2") )) expect_error(Ped( - id = c("ID3", "ID2", ""), + obj = c("ID3", "ID2", ""), momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male"), family = c("F1", "F1", "F2") )) + + #### Metadata #### ped3 <- Ped( - id = c("ID1", "ID2", "ID3"), + obj = c("ID1", "ID2", "ID3"), momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male"), family = c("F1", "F1", "F2") ) - mcols(ped3) <- list(A = c("test", 1, 3)) - mcols(ped3)$Test <- c("test", 1, 3) + + mcols(ped3) <- list(A = c("test", 1, 3), B = c("test3", 6, 8)) + mcols(ped3)$Test <- c("test2", 3, 4) + expect_equal(dim(mcols(ped3)), c(3, 3)) + + expect_error(mcols(ped3) <- list( + A = c("test", 1, 3), B = c("test3", 6, 8, 9) + )) + expect_equal(length(as.list(ped3)), 15) + expect_equal(dim(as.data.frame(ped3)), c(3, 15)) + + df <- data.frame( + id = c("ID1", "ID2", "ID3"), + momid = c("ID2", NA, NA), + dadid = c("ID3", NA, NA), + sex = c("male", "female", "male"), + family = c("F1", "F1", "F2"), + test = c("test", 1, 3), + test2 = c("test2", 3, 4) + ) + ped3 <- Ped(df) + expect_equal(dim(as.data.frame(ped3)), c(3, 14)) expect_equal(dim(mcols(ped3)), c(3, 2)) - as.list(ped3) - ped3 + + ped3b <- suppressWarnings(c(ped3, ped3)) + ped5 <- suppressWarnings(c(ped3, ped2)) + + expect_equal(ped3b, ped3) + expect_equal(dim(as.data.frame(ped5)), c(5, 14)) +}) + +test_that("Rel class works", { + rel0 <- new("Rel") + expect_s4_class(rel0, "Rel") + expect_equal(length(rel0), 0) + expect_equal(length(as.list(rel0)), 4) + expect_equal(dim(as.data.frame(rel0)), c(0, 4)) + rel2 <- Rel( + obj = c("ID5", "ID4"), + id2 = c("ID3", "ID2"), + code = c(1, 4), + ) + expect_s4_class(rel2, "Rel") + expect_equal(length(rel2), 2) + expect_equal(length(as.list(rel2)), 4) + expect_equal(dim(as.data.frame(rel2)), c(2, 4)) + expect_snapshot(rel2) }) \ No newline at end of file From fe0e7c0f83275123768981bd7e7004fad69142e6 Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 30 Oct 2023 14:28:04 +0100 Subject: [PATCH 013/111] Set as S4 Vector --- NAMESPACE | 5 +- R/AllAccessors.R | 92 +++++++++++++++----------------- R/AllClass.R | 13 ++--- R/AllConstructor.R | 9 +++- R/AllGeneric.R | 102 ++++++------------------------------ R/AllValidity.R | 35 +++++++++++++ man/Ped.Rd | 17 +++++- man/Pedigree.Rd | 21 +++++++- man/Rel.Rd | 7 --- man/c-Ped-method.Rd | 20 ------- man/c-Rel-method.Rd | 20 ------- man/extract-methods.Rd | 27 ++-------- man/length-Ped-method.Rd | 18 ------- tests/testthat/test-class.R | 34 +++++++++--- 14 files changed, 176 insertions(+), 244 deletions(-) delete mode 100644 man/c-Ped-method.Rd delete mode 100644 man/c-Rel-method.Rd delete mode 100644 man/length-Ped-method.Rd diff --git a/NAMESPACE b/NAMESPACE index b8546de1..9fba2064 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -35,7 +35,6 @@ export(min_dist_inf) export(norm_ped) export(norm_rel) export(num_child) -export(order) export(ped) export(ped_to_legdf) export(ped_to_plotdf) @@ -55,12 +54,11 @@ exportClasses(Ped) exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) -exportMethods("mcols<-") +exportMethods("order<-") exportMethods(Pedigree) exportMethods(Rel) exportMethods(as.data.frame) exportMethods(as.list) -exportMethods(c) exportMethods(family_check) exportMethods(fix_parents) exportMethods(generate_colors) @@ -72,6 +70,7 @@ exportMethods(make_famid) exportMethods(mcols) exportMethods(min_dist_inf) exportMethods(num_child) +exportMethods(order) exportMethods(plot) exportMethods(show) exportMethods(summary) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 3527986e..9e713813 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -5,55 +5,32 @@ NULL #### S4 Ped Accessors #### -## metadata Accessors ## -#' @title Pedigree metadata accessors -#' @param object A Pedigree object. -#' @return The metadata present in the Pedigree object. -#' @rdname extract-methods -#' @aliases mcols,Ped-method -#' @export -setMethod( - "mcols", - signature(x = "Ped"), - function(x) { - x@elementMetadata - } -) -#' @title Pedigree metadata accessors -#' @param object A Pedigree object. -#' @return The metadata present in the Pedigree object. -#' @rdname extract-methods -#' @aliases mcols<-,Ped-method -#' @export -#' @importFrom S4Vectors 'mcols<-' -setMethod( - "mcols<-", - signature(x = "Ped", value = "ANY"), - function(x, value) { - if (is.data.frame(value)) { - if (nrow(value) != length(x)) { - stop( - "The number of rows of the new value should be: ", - "equal to the length of the pedigree" - ) - } - } else if (is.list(value)) { - lglst <- lapply(value, length) - if (any(lglst != length(x))) { - stop( - "The length of the element(s) '", - names(lglst[lglst != length(x)]), - "' should be: ", - "equal to the length of the pedigree" - ) - } - value <- as.data.frame(value) - } - x@elementMetadata <- value - x - } -) +#' Metadata setters of Ped object from a list +#' +#' @param x A Ped object. +#' @param value A list with the metadata. +#' +#' @return A Ped object with the metadata set. +#' +#' @rdname Ped +setMethod("mcols<-", signature(x = "Ped", value = "list"), function(x, value) { + mcols(x) <- as(value, "DataFrame") + x +}) + +#' Metadata setters of Ped object from a data.frame +#' +#' @param x A Ped object. +#' @param value A data.frame with the metadata. +#' +#' @return A Ped object with the metadata set. +#' +#' @rdname Ped +setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, value) { + mcols(x) <- as(value, "DataFrame") + x +}) #### S4 Pedigree Accessors #### #' @title Pedigree ped accessors @@ -296,26 +273,39 @@ setGeneric("hints", function(object) { setMethod("hints", signature(object = "Pedigree"), function(object) { object@hints }) + #### S4 order Accessors #### +#' @title Pedigree order accessors #' @description Pedigree order accessors #' @param object A Pedigree object. #' @return The slot `order` present in the `Hints` slot of #' a Pedigree object. -#' @rdname extract-methods +#' @rdname Pedigree #' @aliases order,Pedigree-method -#' @export +#' @exportMethod order Pedigree setGeneric("order", function(object) { standardGeneric("order") }) -setMethod("order", signature(object = "Pedigree"), function(object) { +#' @docType methods +#' @aliases order,Pedigree-method +#' @rdname Pedigree +#' @exportMethod order Pedigree +setMethod("order", "Pedigree", function(object) { object@hints@order }) +#' @docType methods +#' @aliases order<-,Pedigree-method +#' @rdname Pedigree setGeneric("order<-", function(object, value) { standardGeneric("order<-") }) +#' @docType methods +#' @aliases order<-,Pedigree-method +#' @rdname Pedigree +#' @exportMethod order<- Pedigree setMethod( "order<-", signature(object = "Pedigree", value = "ANY"), diff --git a/R/AllClass.R b/R/AllClass.R index 4caa4560..d894dd72 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -107,7 +107,8 @@ setValidity("Scales", is_valid_scales) #' @rdname Ped #' @export setClass("Ped", - representation( + contains = "Vector", + slots = c( id = "character", dadid = "character", momid = "character", @@ -119,8 +120,7 @@ setClass("Ped", affected = "numeric", num_child_total = "numeric", num_child_direct = "numeric", - num_child_indirect = "numeric", - elementMetadata = "data.frame" + num_child_indirect = "numeric" ) ) @@ -161,7 +161,8 @@ setValidity("Ped", is_valid_ped) #' @rdname Rel #' @export setClass("Rel", - representation( + contains = "Vector", + slots = c( id1 = "character", id2 = "character", code = "factor", @@ -169,8 +170,6 @@ setClass("Rel", ) ) -setValidity("Rel", is_valid_rel) - setMethod("parallel_slot_names", "Rel", function(x) { c( @@ -180,6 +179,8 @@ setMethod("parallel_slot_names", "Rel", } ) +setValidity("Rel", is_valid_rel) + #' S4 class to represent a pedigree. #' #' A pedigree is a ensemble of individuals linked to each other into diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 10b78f58..e4344f86 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -170,11 +170,18 @@ setMethod("Rel", "character", family <- na_to_length(family, obj, NA_character_) id1 <- as.character(obj) id2 <- as.character(id2) + + ## Reorder id1 and id2 + ## id1 is the first in the alphabetic order + ## id2 is the second in the alphabetic order + id1o <- pmin(id1, id2) + id2o <- pmax(id1, id2) + code <- rel_code_to_factor(code) rel <- new( "Rel", - id1 = id1, id2 = id2, code = code, family = family + id1 = id1o, id2 = id2o, code = code, family = family ) rel } diff --git a/R/AllGeneric.R b/R/AllGeneric.R index dc22e6ad..dac82380 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -1,4 +1,4 @@ -#### Generic for Ped object #### +#### S4 Ped generics #### #' Summary function of Ped object #' @@ -94,49 +94,6 @@ setMethod("as.data.frame", "Ped", function(x) { ped_df }) -#' Compute the length of a Ped object -#' @param x A Ped object. -#' @return The number of individuals in the Ped object. -#' @docType methods -#' @aliases length,Ped-method -#' @export -setMethod("length", "Ped", - function(x) { - length(x@id) - } -) - -#' Bind two Ped objects -#' -#' @description Bind two Ped objects by row. -#' The metadata need to be the same. -#' -#' @param x A Ped object. -#' @param y A Ped object. -#' -#' @return A Ped object containing the individuals of x and y. -#' -#' @export -setMethod(c, "Ped", - function(x, y) { - if (any(!names(mcols(x)) %in% names(mcols(y))) | - any(!names(mcols(y)) %in% names(mcols(x))) - ) { - warning( - "Some of the metadata are not the same", - "Missing information will be filled with NA" - ) - } - ped_df <- unique(merge.data.frame( - as.data.frame(x), as.data.frame(y), all = TRUE - )) - new_ped <- Ped(ped_df, cols_used_init = TRUE, cols_used_del = TRUE) - validObject(new_ped) - new_ped - } -) - - #### S4 Rel generics #### #' Summary function of Rel object #' @@ -164,7 +121,7 @@ setMethod("summary", "Rel", } paste0(object_class, " object with ", object_len, " ", ifelse(object_len == 1L, "relationship", "relationships"), - ifelse(sum_codes == 0L, "", paste0("with ", sum_codes, ".")) + ifelse(sum_codes == 0L, "", paste0("with ", sum_codes)) ) } ) @@ -186,9 +143,14 @@ setMethod("show", signature(object = "Rel"), function(object) { cat(summary(object), ":\n", sep = "") df <- as.data.frame(object) - class_df <- lapply(df, function(x) { paste0("<", class(x), ">") }) - stopifnot(identical(names(class_df), colnames(df))) - out <- rbind(class_df, df) + df <- df[, !colnames(df) %in% colnames(mcols(object))] + out <- S4Vectors::cbind_mcols_for_display(df, object) + class_df <- lapply(df, class) + classinfo <- S4Vectors::makeClassinfoRowForCompactPrinting( + object, class_df + ) + stopifnot(identical(colnames(classinfo), colnames(out))) + out <- rbind(classinfo, out) print(out, quote = FALSE, right = TRUE) } ) @@ -204,9 +166,14 @@ setMethod("show", signature(object = "Rel"), setMethod("as.list", "Rel", function(x) { to <- list() for (slot in slotNames(x)) { - to[[slot]] <- slot(x, slot) + if (slot %in% c("metadata", "elementMetadata")) { + next + } else { + to[[slot]] <- slot(x, slot) + } } - to + # Add the metadata in separate slot + c(to, as.list(mcols(x))) }) #' @title Rel to data.frame @@ -225,41 +192,6 @@ setMethod("as.data.frame", "Rel", function(x) { data.frame(lst) }) -#' Compute the length of a Rel object -#' @param x A Rel object. -#' @return The number of relationships in the Rel object. -#' @docType methods -#' @aliases length,Rel-method -#' @rdname Rel -#' @export -setMethod("length", c(x = "Rel"), - function(x) { - length(x@id1) - } -) - -#' Bind two Rel objects -#' -#' @description Bind two Rel objects by row. -#' The metadata need to be the same. -#' -#' @param x A Rel object. -#' @param y A Rel object. -#' -#' @return A Rel object containing the relationships of x and y. -#' -#' @export -setMethod(c, "Rel", - function(x, y) { - df <- unique(merge.data.frame( - as.data.frame(x), as.data.frame(y), all = TRUE - )) - new_rel <- Rel(df) - validObject(new_rel) - new_rel - } -) - #### S4 Pedigree generics #### #' Compute the length of a Pedigree object diff --git a/R/AllValidity.R b/R/AllValidity.R index 7f11be77..4ef5cc3d 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -171,6 +171,9 @@ is_valid_ped <- function(object) { missid <- NA_character_ errors <- c() + #### Check that all slots are parallele #### + #errors <- c(errors, parallel_slot_names(object)) + #### Check that the ped columns have the right values #### # Check for ped@id uniqueness if (any(duplicated(object@id))) { @@ -246,6 +249,38 @@ is_valid_rel <- function(object) { codes <- c("MZ twin", "DZ twin", "UZ twin", "Spouse") errors <- c(errors, check_values(object@code, codes)) + #### Check that id1 is different from id2 #### + if (any(object@id1 == object@id2)) { + id1e <- object@id1[object@id1 == object@id2] + id2e <- object@id2[object@id1 == object@id2] + errors <- c(errors, paste( + "id1 '", paste0(id1e, collapse = "', '"), + "' should be different to id2 '", paste0(id2e, collapse = "', '"), + "'.", sep = "" + )) + } + + #### Check that all id1 is smaller than id2 #### + if (any(object@id1 > object@id2)) { + id1b <- object@id1[object@id1 > object@id2] + id2b <- object@id2[object@id1 > object@id2] + errors <- c(errors, paste( + "id1 '", paste0(id1b, collapse = "', '"), + "' should be smaller than id2 '", paste0(id2b, collapse = "', '"), + "'.", sep = "" + )) + } + + #### Check absence of duplicate #### + idr <- paste(object@id1, object@id2, sep = "_") + if (any(duplicated(idr))) { + idd <- idr[duplicated(idr)] + errors <- c(errors, paste( + "Pairs of individuals should be unique", + " ('", paste0(idd, collapse = "', '"), "').", sep = "" + )) + } + if (length(errors) == 0) { TRUE } else { diff --git a/man/Ped.Rd b/man/Ped.Rd index 23dd7d86..85672527 100644 --- a/man/Ped.Rd +++ b/man/Ped.Rd @@ -1,8 +1,11 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R, R/AllConstructor.R +% Please edit documentation in R/AllClass.R, R/AllAccessors.R, +% R/AllConstructor.R \docType{class} \name{Ped-class} \alias{Ped-class} +\alias{mcols<-,Ped,list-method} +\alias{mcols<-,Ped,data.frame-method} \alias{Ped} \alias{Ped,data.frame-method} \alias{Ped,data.frame} @@ -10,6 +13,10 @@ \alias{Ped,character} \title{S4 class to represent the identity informations in a Pedigree.} \usage{ +\S4method{mcols}{Ped,list}(x) <- value + +\S4method{mcols}{Ped,data.frame}(x) <- value + Ped(obj, ...) \S4method{Ped}{data.frame}(obj, cols_used_init = FALSE, cols_used_del = FALSE) @@ -27,6 +34,10 @@ Ped(obj, ...) ) } \arguments{ +\item{x}{A Ped object.} + +\item{value}{A data.frame with the metadata.} + \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} @@ -51,6 +62,10 @@ individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = un \value{ A Ped object. +A Ped object with the metadata set. + +A Ped object with the metadata set. + A Ped object. } \description{ diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd index 49d74895..68cae101 100644 --- a/man/Pedigree.Rd +++ b/man/Pedigree.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Pedigree.R +% Please edit documentation in R/Pedigree.R, R/AllAccessors.R \docType{methods} \name{Pedigree} \alias{Pedigree} @@ -9,6 +9,10 @@ \alias{Pedigree,character} \alias{Pedigree,data.frame-method} \alias{Pedigree,data.frame} +\alias{order} +\alias{order,Pedigree-method} +\alias{order<-} +\alias{order<-,Pedigree-method} \title{Create a Pedigree object} \usage{ Pedigree(obj, ...) @@ -53,6 +57,14 @@ Pedigree(obj, ...) col_aff = "affection", ... ) + +order(object) + +\S4method{order}{Pedigree}(object) + +order(object) <- value + +\S4method{order}{Pedigree}(object) <- value } \arguments{ \item{obj}{A vector of the individuals identifiers or a data.frame @@ -172,13 +184,20 @@ index of the left spouse, the right hand spouse, and the anchor Children will preferentially appear under the parents of the anchored spouse. }} + +\item{object}{A Pedigree object.} } \value{ A Pedigree object. + +The slot \code{order} present in the \code{Hints} slot of +a Pedigree object. } \description{ This constructor help to create a \code{Pedigree} object from different \code{data.frame} or a set of vectors. + +Pedigree order accessors } \details{ If any errors are found in the data, the function will return diff --git a/man/Rel.Rd b/man/Rel.Rd index 69e992f8..2edd68fc 100644 --- a/man/Rel.Rd +++ b/man/Rel.Rd @@ -12,7 +12,6 @@ \alias{show,Rel-method} \alias{as.list,Rel-method} \alias{as.data.frame,Rel-method} -\alias{length,Rel-method} \title{S4 class to represent the special relationships in a Pedigree.} \usage{ Rel(obj, ...) @@ -28,8 +27,6 @@ Rel(obj, ...) \S4method{as.list}{Rel}(x) \S4method{as.data.frame}{Rel}(x) - -\S4method{length}{Rel}(x) } \arguments{ \item{obj}{A character vector with the id of the first individuals of each @@ -45,8 +42,6 @@ relationship (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spou \item{object}{A Rel object.} -\item{x}{A Rel object.} - \item{from}{A Rel object.} } \value{ @@ -61,8 +56,6 @@ The Rel object with the relationship informations. A list with the relationship informations. A data.frame with the relationship informations. - -The number of relationships in the Rel object. } \description{ A Rel object is a list of special relationships diff --git a/man/c-Ped-method.Rd b/man/c-Ped-method.Rd deleted file mode 100644 index 326ea469..00000000 --- a/man/c-Ped-method.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllGeneric.R -\name{c,Ped-method} -\alias{c,Ped-method} -\title{Bind two Ped objects} -\usage{ -\S4method{c}{Ped}(x, y) -} -\arguments{ -\item{x}{A Ped object.} - -\item{y}{A Ped object.} -} -\value{ -A Ped object containing the individuals of x and y. -} -\description{ -Bind two Ped objects by row. -The metadata need to be the same. -} diff --git a/man/c-Rel-method.Rd b/man/c-Rel-method.Rd deleted file mode 100644 index 8fb3b896..00000000 --- a/man/c-Rel-method.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllGeneric.R -\name{c,Rel-method} -\alias{c,Rel-method} -\title{Bind two Rel objects} -\usage{ -\S4method{c}{Rel}(x, y) -} -\arguments{ -\item{x}{A Rel object.} - -\item{y}{A Rel object.} -} -\value{ -A Rel object containing the relationships of x and y. -} -\description{ -Bind two Rel objects by row. -The metadata need to be the same. -} diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd index 7e42b52e..3116b920 100644 --- a/man/extract-methods.Rd +++ b/man/extract-methods.Rd @@ -1,8 +1,6 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/AllAccessors.R, R/AllGeneric.R -\name{mcols,Ped-method} -\alias{mcols,Ped-method} -\alias{mcols<-,Ped-method} +\name{ped} \alias{ped} \alias{ped,Pedigree-method} \alias{mcols,Pedigree-method} @@ -16,8 +14,6 @@ \alias{border,Pedigree-method} \alias{hints} \alias{hints,Pedigree-method} -\alias{order} -\alias{order,Pedigree-method} \alias{spouse} \alias{spouse,Pedigree-method} \alias{as.list,Ped-method} @@ -27,12 +23,8 @@ \alias{sub_sel_hints} \alias{sub_sel_hints,Pedigree-method} \alias{[,Pedigree,ANY,missing,ANY-method} -\title{Pedigree metadata accessors} +\title{Pedigree ped accessors} \usage{ -\S4method{mcols}{Ped}(x) - -\S4method{mcols}{Ped}(x) <- value - ped(object, slot) \S4method{mcols}{Pedigree}(x) @@ -47,8 +39,6 @@ border(object, slot) hints(object) -order(object) - spouse(object) \S4method{as.list}{Ped}(x) @@ -64,12 +54,12 @@ sub_sel_hints(hints, index) \S4method{[}{Pedigree,ANY,missing,ANY}(x, i, j, drop = TRUE) } \arguments{ -\item{x}{A Pedigree object.} - \item{object}{A Pedigree object.} \item{slot}{A slot in the Ped object of the Pedigree.} +\item{x}{A Pedigree object.} + \item{hints}{A list of hints} \item{index}{A vector of index} @@ -83,10 +73,6 @@ sub_sel_hints(hints, index) \item{from}{A Ped object.} } \value{ -The metadata present in the Pedigree object. - -The metadata present in the Pedigree object. - The slot \code{ped} present in the Pedigree object. or one of its slot. @@ -102,9 +88,6 @@ The slot \code{border} present in the Pedigree object. The slot \code{hints} present in the Pedigree object. -The slot \code{order} present in the \code{Hints} slot of -a Pedigree object. - The slot \code{spouse} present in the \code{Hints} slot of a Pedigree object. @@ -133,8 +116,6 @@ Pedigree border accessors Pedigree hints accessors -Pedigree order accessors - Pedigree spouse accessors Convert a Ped object to a list diff --git a/man/length-Ped-method.Rd b/man/length-Ped-method.Rd deleted file mode 100644 index 64aa7728..00000000 --- a/man/length-Ped-method.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllGeneric.R -\docType{methods} -\name{length,Ped-method} -\alias{length,Ped-method} -\title{Compute the length of a Ped object} -\usage{ -\S4method{length}{Ped}(x) -} -\arguments{ -\item{x}{A Ped object.} -} -\value{ -The number of individuals in the Ped object. -} -\description{ -Compute the length of a Ped object -} diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index c049faf2..b37c4772 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -23,10 +23,12 @@ test_that("Class ped work", { dadid = c(NA, NA) )) expect_error(Ped( - obj = c("ID1", "ID2"), + obj = c("ID1", "ID2", "ID3"), momid = c(NA, NA, NA), - dadid = c(NA, NA, NA) + dadid = c(NA, NA, NA), + sex = c(1, 2) )) + expect_error(Ped( obj = c("ID1", "ID2", "ID3"), momid = c("ID3", NA, NA), @@ -68,7 +70,7 @@ test_that("Class ped work", { expect_equal(dim(mcols(ped3)), c(3, 3)) expect_error(mcols(ped3) <- list( - A = c("test", 1, 3), B = c("test3", 6, 8, 9) + A = c("test", 1, 3, 6), B = c("test3", 6, 8, 9) )) expect_equal(length(as.list(ped3)), 15) expect_equal(dim(as.data.frame(ped3)), c(3, 15)) @@ -86,10 +88,9 @@ test_that("Class ped work", { expect_equal(dim(as.data.frame(ped3)), c(3, 14)) expect_equal(dim(mcols(ped3)), c(3, 2)) - ped3b <- suppressWarnings(c(ped3, ped3)) + expect_error(c(ped3, ped3)) ped5 <- suppressWarnings(c(ped3, ped2)) - expect_equal(ped3b, ped3) expect_equal(dim(as.data.frame(ped5)), c(5, 14)) }) @@ -104,9 +105,26 @@ test_that("Rel class works", { id2 = c("ID3", "ID2"), code = c(1, 4), ) + mcols(rel2) <- list("A" = c(1, 2)) expect_s4_class(rel2, "Rel") expect_equal(length(rel2), 2) - expect_equal(length(as.list(rel2)), 4) - expect_equal(dim(as.data.frame(rel2)), c(2, 4)) + expect_equal(length(as.list(rel2)), 5) + expect_equal(dim(as.data.frame(rel2)), c(2, 5)) expect_snapshot(rel2) -}) \ No newline at end of file + + expect_error(rel4 <- c(rel2, rel2)) + + expect_error(rel3 <- Rel( + obj = c("ID5", "ID2", "ID4"), + id2 = c("ID3", "ID3", "ID2"), + code = c(1, 2), + )) + + rel3 <- Rel( + obj = c("ID6", "ID2", "ID4"), + id2 = c("ID3", "ID3", "ID1"), + code = c(1, 2, 3), + ) + expect_equal(dim(as.data.frame(c(rel3, rel2))), c(5, 5)) + +}) From 2f4770da4403c05624adcedcf1e6c6ce49189024 Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 30 Oct 2023 14:47:55 +0100 Subject: [PATCH 014/111] Order to horder --- NAMESPACE | 4 +-- R/AllAccessors.R | 39 +++++++++++------------------ R/AllClass.R | 10 ++++---- R/AllGeneric.R | 6 ++--- R/AllValidity.R | 4 +-- R/Pedigree.R | 2 +- R/align.R | 12 ++++----- R/auto_hint.R | 16 ++++++------ R/bit_size.R | 11 +++++++- R/check_hints.R | 12 ++++----- R/descendants.R | 9 +++++++ devel/documentation/arguments.md | 8 +++--- devel/old/pedigreeAccessors.R | 16 ++++++------ tests/testthat/test-align.R | 2 +- tests/testthat/test-pedigreeClass.R | 2 +- vignettes/alignment_details.Rmd | 8 +++--- vignettes/pedigree.Rmd | 2 +- vignettes/pedigree_constructor.Rmd | 4 +-- 18 files changed, 87 insertions(+), 80 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 9fba2064..6f860ba2 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -54,7 +54,7 @@ exportClasses(Ped) exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) -exportMethods("order<-") +exportMethods("horder<-") exportMethods(Pedigree) exportMethods(Rel) exportMethods(as.data.frame) @@ -70,7 +70,7 @@ exportMethods(make_famid) exportMethods(mcols) exportMethods(min_dist_inf) exportMethods(num_child) -exportMethods(order) +exportMethods(horder) exportMethods(plot) exportMethods(show) exportMethods(summary) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 9e713813..793fb412 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -274,40 +274,29 @@ setMethod("hints", signature(object = "Pedigree"), function(object) { object@hints }) -#### S4 order Accessors #### -#' @title Pedigree order accessors -#' @description Pedigree order accessors +#### S4 horder Accessors #### +#' @title Pedigree horder accessors +#' @description Pedigree horder accessors #' @param object A Pedigree object. -#' @return The slot `order` present in the `Hints` slot of +#' @return The slot `horder` present in the `Hints` slot of #' a Pedigree object. #' @rdname Pedigree -#' @aliases order,Pedigree-method -#' @exportMethod order Pedigree -setGeneric("order", function(object) { - standardGeneric("order") +#' @aliases horder,Pedigree-method +#' @export +setGeneric("horder", function(object) { + standardGeneric("horder") }) -#' @docType methods -#' @aliases order,Pedigree-method -#' @rdname Pedigree -#' @exportMethod order Pedigree -setMethod("order", "Pedigree", function(object) { - object@hints@order +setMethod("horder", "Pedigree", function(object) { + object@hints@horder }) -#' @docType methods -#' @aliases order<-,Pedigree-method -#' @rdname Pedigree -setGeneric("order<-", function(object, value) { - standardGeneric("order<-") +setGeneric("horder<-", function(object, value) { + standardGeneric("horder<-") }) -#' @docType methods -#' @aliases order<-,Pedigree-method -#' @rdname Pedigree -#' @exportMethod order<- Pedigree setMethod( - "order<-", + "horder<-", signature(object = "Pedigree", value = "ANY"), function(object, value) { if (length(value) != length(object)) { @@ -316,7 +305,7 @@ setMethod( "equal to the length of the pedigree" ) } - object@hints@order <- value + object@hints@horder <- value validObject(object) object } diff --git a/R/AllClass.R b/R/AllClass.R index d894dd72..2ceed28b 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -8,8 +8,8 @@ NULL #' A hints object is a list of two elements used #' to order the individuals in the pedigree plot. #' -#' @slot order A numeric vector with one element per subject in the -#' Pedigree. It determines the relative order of subjects within a sibship, as +#' @slot horder A numeric vector with one element per subject in the +#' Pedigree. It determines the relative horizontal order of subjects within a sibship, as #' well as the relative order of processing for the founder couples. (For this #' latter, the female founders are ordered as though they were sisters). #' @slot spouse A matrix with one row per hinted marriage, usually @@ -26,7 +26,7 @@ NULL #' @export setClass("Hints", representation( - order = "numeric", + horder = "numeric", spouse = "matrix" ) ) @@ -205,8 +205,8 @@ setValidity("Rel", is_valid_rel) #' [generate_aff_inds()] followed by #' [generate_colors()]. #' @slot hints List of two elements. -#' - **order** is a numeric vector with one element per subject in the -#' Pedigree. It determines the relative order of subjects within a sibship, as +#' - **horder** is a numeric vector with one element per subject in the +#' Pedigree. It determines the relative horizontal order of subjects within a sibship, as #' well as the relative order of processing for the founder couples. (For this #' latter, the female founders are ordered as though they were sisters). #' - **spouse** is a matrix with one row per hinted marriage, usually diff --git a/R/AllGeneric.R b/R/AllGeneric.R index dac82380..063eb97d 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -245,10 +245,10 @@ setMethod("summary", signature(object = "Pedigree"), function(object) { #' @aliases sub_sel_hints,Pedigree-method #' @keywords internal sub_sel_hints <- function(hints, index) { - if (!is.null(hints$order)) { - temp <- list(order = hints$order[index]) + if (!is.null(hints$horder)) { + temp <- list(horder = hints$horder[index]) } else { - temp <- list(order = NULL) + temp <- list(horder = NULL) } if (!is.null(hints$spouse)) { diff --git a/R/AllValidity.R b/R/AllValidity.R index 4ef5cc3d..37bb9a0e 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -92,7 +92,7 @@ check_values <- function(val, ref, name = NULL, present = TRUE) { #' Check if the Hints are valid #' -#' Check if order and spouse slots are valid (i.e. order is numeric and +#' Check if horder and spouse slots are valid (i.e. horder is numeric and #' spouse is a matrix with 3 columns). #' Check if the spouse matrix is valid (i.e. only numeric values). #' @param object A Hints object. @@ -104,7 +104,7 @@ is_valid_hints <- function(object) { errors <- c() #### Check that the slots have the right columns #### - errors <- c(errors, check_slot_fd(object, "order", "numeric")) + errors <- c(errors, check_slot_fd(object, "horder", "numeric")) errors <- c(errors, check_slot_fd(object, "spouse", "matrix")) #### Check that the hints spouse matrix is valid #### diff --git a/R/Pedigree.R b/R/Pedigree.R index 7e4cb43d..a50504ef 100644 --- a/R/Pedigree.R +++ b/R/Pedigree.R @@ -204,7 +204,7 @@ setMethod("Pedigree", "data.frame", function( ) ), hints = list( - order = NULL, + horder = NULL, spouse = NULL ), normalize = TRUE, diff --git a/R/align.R b/R/align.R index 3e33ae2e..ee434098 100644 --- a/R/align.R +++ b/R/align.R @@ -63,10 +63,10 @@ ancestors <- function(idx, momx, dadx) { #' If `TRUE`, the default is `c(1.5, 2)`, or numeric the routine #' `alignped4()` will be called. #' @param hints Plotting hints for the Pedigree. -#' This is a list with components `order` and `spouse`, the second one +#' This is a list with components `horder` and `spouse`, the second one #' is optional. -#' - **order** is a numeric vector with one element per subject in the -#' Pedigree. It determines the relative order of subjects within a sibship, as +#' - **horder** is a numeric vector with one element per subject in the +#' Pedigree. It determines the relative horizontal order of subjects within a sibship, as #' well as the relative order of processing for the founder couples. (For this #' latter, the female founders are ordered as though they were sisters). #' - **spouse** is a matrix with one row per hinted marriage, usually @@ -131,14 +131,14 @@ align <- function(ped, packed = TRUE, width = 10, } return(alignment) } - if (is.null(hints$order)) { + if (is.null(hints$horder)) { hints <- try({ auto_hint(ped) }, silent = TRUE) ## sometimes appears dim(ped) is empty (ped is NULL), so try fix here: ## (JPS 6/6/17 if ("try-error" %in% class(hints)) { - hints <- list(order = seq_len(max(1, dim(ped)))) + hints <- list(horder = seq_len(max(1, dim(ped)))) } } else { check_hints(hints, ped(ped, "sex")) @@ -147,7 +147,7 @@ align <- function(ped, packed = TRUE, width = 10, n <- length(ped(ped, "id")) level <- 1 + kindepth(ped, align = TRUE) - horder <- hints$order # relative order of siblings within a family + horder <- hints$horder # relative order of siblings within a family if (!is.null(hints$spouse)) { # start with the hints list diff --git a/R/auto_hint.R b/R/auto_hint.R index f80f54c6..d30eab4f 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -291,7 +291,7 @@ get_twin_rel <- function(ped) { #' them to the initial values #' @inheritParams align #' -#' @return The **hints** list containing components `order` and `spouse` +#' @return The **hints** list containing components `horder` and `spouse` #' #' @seealso [align()], [best_hint()] #' @examples @@ -322,15 +322,15 @@ auto_hint <- function( ## Doc: init-auto_hint if (!is.null(hints)) { if (is.vector(hints)) { - hints <- list(order = hints) + hints <- list(horder = hints) } if (is.matrix(hints)) { hints <- list(spouse = hints) } - if (is.null(hints$order)) { + if (is.null(hints$horder)) { horder <- integer(n) } else { - horder <- hints$order + horder <- hints$horder } } else { horder <- integer(n) @@ -374,7 +374,7 @@ auto_hint <- function( plist <- align(ped, packed = packed, align = align, - hints = list(order = horder, spouse = sptemp) + hints = list(horder = horder, spouse = sptemp) ) @@ -439,7 +439,7 @@ auto_hint <- function( warning("Unexpected result in auto_hint,", "please contact developer" ) - return(list(order = seq_len(n))) # punt + return(list(horder = seq_len(n))) # punt } else { sptemp <- rbind(sptemp, temp) } @@ -449,8 +449,8 @@ auto_hint <- function( # plist <- align(ped, packed = packed, align = align, - hints = list(order = horder, spouse = sptemp) + hints = list(horder = horder, spouse = sptemp) ) } - list(order = horder, spouse = sptemp) + list(horder = horder, spouse = sptemp) } diff --git a/R/bit_size.R b/R/bit_size.R index 4f3c838a..23eeeaed 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -58,6 +58,15 @@ setMethod("bit_size", "character", function(obj, momid, missid = "0") { #' @rdname bit_size setMethod("bit_size", "Pedigree", function(obj, missid = "0") { - bit_size(obj$ped$dadid, obj$ped$momid, missid) + bit_size(ped(obj), missid) + } +) + +#' @docType methods +#' @aliases bit_size,Ped +#' @rdname bit_size +setMethod("bit_size", "Ped", + function(obj, missid = "0") { + bit_size(obj@dadid, obj@momid, missid) } ) \ No newline at end of file diff --git a/R/check_hints.R b/R/check_hints.R index 7b428f0a..64f6851d 100644 --- a/R/check_hints.R +++ b/R/check_hints.R @@ -25,15 +25,15 @@ #' @keywords internal #' @export check_hints <- function(hints, sex) { - if (is.null(hints$order)) { - stop("Order component must be present in hints") + if (is.null(hints$horder)) { + stop("horder component must be present in hints") } - if (!is.numeric(hints$order)) { - stop("Order component must be numeric") + if (!is.numeric(hints$horder)) { + stop("horder component must be numeric") } n <- length(sex) - if (length(hints$order) != n) { - stop("Length for order component should be equal to sex length") + if (length(hints$horder) != n) { + stop("Length for horder component should be equal to sex length") } sex <- as.character(sex_to_factor(sex)) spouse <- hints$spouse diff --git a/R/descendants.R b/R/descendants.R index 9434d1a9..7535bd37 100644 --- a/R/descendants.R +++ b/R/descendants.R @@ -54,3 +54,12 @@ setMethod("descendants", signature(idlist = "character", obj = "Pedigree"), descendants(idlist, obj$ped$id, obj$ped$dadid, obj$ped$momid) } ) + +#' @rdname descendants +#' @docType methods +#' @aliases descendants,Pedigree +setMethod("descendants", signature(idlist = "character", obj = "Ped"), + function(idlist, obj) { + descendants(idlist, obj$id, obj$dadid, obj$momid) + } +) diff --git a/devel/documentation/arguments.md b/devel/documentation/arguments.md index 5ff8d306..6ec39342 100644 --- a/devel/documentation/arguments.md +++ b/devel/documentation/arguments.md @@ -81,7 +81,7 @@ #' @param dadx Indexes of the fathers #' @param momx Indexes of the mothers #' @param level Vector of the level of each subject -#' @param horder Vector of the horizontal order of each subject +#' @param horder Vector of the horizontal horder of each subject #' @param spouselist Matrix of the spouses with one row per hinted marriage, #' usually only a few marriages in a pedigree will need an added hint, for #' instance reverse the plot order of a husband/wife pair. @@ -111,10 +111,10 @@ #' parameters, or a logical value. If `TRUE`, the default is `c(1.5, 2)`, or #' numeric the routine `alignped4()` will be called. #' @param hints Plotting hints for the pedigree. -#' This is a list with components `order` and `spouse`, the second one is +#' This is a list with components `horder` and `spouse`, the second one is #' optional. -#' - **order** is a numeric vector with one element per subject in the -#' pedigree. It determines the relative order of subjects within a sibship, as +#' - **horder** is a numeric vector with one element per subject in the +#' pedigree. It determines the relative horizonal order of subjects within a sibship, as #' well as the relative order of processing for the founder couples. (For this #' latter, the female founders are ordered as though they were sisters). #' - **spouse** is a matrix with one row per hinted marriage, usually only diff --git a/devel/old/pedigreeAccessors.R b/devel/old/pedigreeAccessors.R index 40ae3358..b7dd5e23 100644 --- a/devel/old/pedigreeAccessors.R +++ b/devel/old/pedigreeAccessors.R @@ -231,20 +231,20 @@ setMethod("hints", signature(object = "Pedigree"), function(object) { #' @rdname extract-methods #' @aliases order,Pedigree-method #' @export -setGeneric("order", function(object) { - standardGeneric("order") +setGeneric("horder", function(object) { + standardGeneric("horder") }) -setMethod("order", signature(object = "Pedigree"), function(object) { - object@hints$order +setMethod("horder", signature(object = "Pedigree"), function(object) { + object@hints$horder }) -setGeneric("order<-", function(object, value) { - standardGeneric("order<-") +setGeneric("horder<-", function(object, value) { + standardGeneric("horder<-") }) setMethod( - "order<-", + "horder<-", signature(object = "Pedigree", value = "ANY"), function(object, value) { if (length(value) != length(object)) { @@ -253,7 +253,7 @@ setMethod( "equal to the length of the pedigree" ) } - object@hints$order <- value + object@hints$horder <- value validObject(object) object } diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 48369b9e..35368418 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -76,7 +76,7 @@ test_that("Alignement with spouse", { ped1 <- Pedigree(df1, relate1) hints <- auto_hint(ped1) expect_equal(as.vector(hints$spouse), c(9, 10, 2)) - expect_equal(hints$order, + expect_equal(hints$horder, c( 1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 2, 3, 5, 4, 5, 6, 7, 8, 9, 10, diff --git a/tests/testthat/test-pedigreeClass.R b/tests/testthat/test-pedigreeClass.R index 03004e48..65bd0335 100644 --- a/tests/testthat/test-pedigreeClass.R +++ b/tests/testthat/test-pedigreeClass.R @@ -153,7 +153,7 @@ test_that("Pedigree getters", { expect_equal(ped$ped, ped(ped)) expect_equal(ped$rel, rel(ped)) expect_equal(ped$hints, hints(ped)) - expect_equal(ped$hints$order, order(ped)) + expect_equal(ped$hints$horder, order(ped)) expect_equal(ped$hints$spouse, spouse(ped)) expect_equal(ped$scales$fill, fill(ped)) expect_equal(ped$scales$border, border(ped)) diff --git a/vignettes/alignment_details.Rmd b/vignettes/alignment_details.Rmd index e8cb8919..8b3774a4 100644 --- a/vignettes/alignment_details.Rmd +++ b/vignettes/alignment_details.Rmd @@ -150,7 +150,7 @@ test1 <- data.frame(id = 1:11, ped1 <- Pedigree(test1) temp2 <- Pedigree(test1, hints = list( - order = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) + horder = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) )) par(mfrow = c(1, 2)) @@ -234,7 +234,7 @@ test2 <- data.frame(id = c(1:13, 21:41), ) ped2 <- Pedigree(test2) ped2a <- Pedigree(test2, hints = list( - order = seq_along(test2$id) + horder = seq_along(test2$id) )) par(mfrow = c(1, 2)) plot(ped2a, title = "Before auto_hint") @@ -313,7 +313,7 @@ test3 <- data.frame(id = 1:14, affected = c(0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0) ) ped3 <- Pedigree(test3, hints = list( - order = 1:14 + horder = 1:14 )) test4 <- data.frame(id = 1:17, @@ -329,7 +329,7 @@ test4 <- data.frame(id = 1:17, ) ped4 <- Pedigree(test4, hints = list( - order = 1:17 + horder = 1:17 )) par(mfrow = c(1, 2)) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 9b33af84..67da458e 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -74,7 +74,7 @@ It contains the following components: - rel: a dataframe with the relationship information - scales: a list of 2 dataframe with the filling and borders informations for the plot -- hints: a list of 2 elements indicating the order and the spouse to +- hints: a list of 2 elements indicating the horder and the spouse to organise the Pedigree structure Basic Usage diff --git a/vignettes/pedigree_constructor.Rmd b/vignettes/pedigree_constructor.Rmd index 9c1a3889..ea158a54 100644 --- a/vignettes/pedigree_constructor.Rmd +++ b/vignettes/pedigree_constructor.Rmd @@ -75,7 +75,7 @@ It accepts the following input - **scales** Optional, a list of two dataframe with the scales to use for the affection status and the other one for the border color (e.g availability). - **normalize** Optional, a logical to know if the data should be normalised. -- **hints** Optional, a list containing the order in which to plot the +- **hints** Optional, a list containing the horder in which to plot the individuals and the matrix of the spouse. ## Notes @@ -168,7 +168,7 @@ The minimal columns needed are : - $border$ a dataframe describing which modalities in which columns to use to plot the border of the plot elements. - $hints$ a list of two elements - - $order$ numeric vector for the ordering of the individuals plotting + - $horder$ numeric vector for the ordering of the individuals plotting - $spouse$ a matrix of the spouses Pedigree methods From d258b93b8878b8617875635bb7b90aced15459ed Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 30 Oct 2023 15:27:16 +0100 Subject: [PATCH 015/111] family to famid --- R/AllAccessors.R | 69 ++++++++++++++++++++++++++- R/AllClass.R | 20 ++++---- R/AllConstructor.R | 24 +++++----- R/AllGeneric.R | 2 +- R/AllValidity.R | 10 ++-- R/Pedigree.R | 10 ++-- R/align.R | 18 +++++-- R/auto_hint.R | 4 +- R/best_hint.R | 2 +- R/check_hints.R | 2 +- R/data.R | 2 +- R/family_check.R | 24 +++++----- R/find_unavailable.R | 2 +- R/fix_parents.R | 28 +++++------ R/kindepth.R | 2 +- R/kinship.R | 6 +-- R/make_famid.R | 10 ++-- R/norm_data.R | 42 ++++++++-------- R/num_child.R | 2 +- R/ped_to_plotdf.R | 6 +-- R/plot.R | 4 +- R/plot_fromdf.R | 2 +- R/shrink.R | 2 +- R/trim.R | 2 +- R/unrelated.R | 2 +- R/useful_inds.R | 2 +- tests/testthat/test-align.R | 6 +-- tests/testthat/test-class.R | 13 +++-- tests/testthat/test-fix_parents.R | 4 +- tests/testthat/test-generate_scales.R | 4 +- tests/testthat/test-kindepth.R | 2 +- tests/testthat/test-kinship.R | 2 +- tests/testthat/test-make_famid.R | 10 ++-- tests/testthat/test-ped_to_legdf.R | 2 +- tests/testthat/test-pedigreeClass.R | 18 +++---- tests/testthat/test-plot.R | 2 +- tests/testthat/test-shrink.R | 14 +++--- tests/testthat/test-unavail.R | 4 +- vignettes/pedigree.Rmd | 10 ++-- vignettes/pedigree_constructor.Rmd | 6 +-- 40 files changed, 240 insertions(+), 156 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 793fb412..21ef3d37 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -32,6 +32,71 @@ setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, val x }) +#' Famid getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A character vector with the famid of each individual. +#' +#' @rdname Ped +#' @aliases famid,Ped-method +#' @export +setMethod("famid", signature(x = "Ped"), function(x) { + x@famid +}) + +#' Id getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A character vector with the id of each individual. +#' +#' @rdname Ped +#' @aliases id,Ped-method +#' @export +setMethod("id", signature(x = "Ped"), function(x) { + x@id +}) + +#' Dadid getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A character vector with the dadid of each individual. +#' +#' @rdname Ped +#' @aliases dadid,Ped-method +#' @export +setMethod("dadid", signature(x = "Ped"), function(x) { + x@dadid +}) + +#' Momid getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A character vector with the momid of each individual. +#' +#' @rdname Ped +#' @aliases momid,Ped-method +#' @export +setMethod("momid", signature(x = "Ped"), function(x) { + x@momid +}) + +#' Sex getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A character vector with the sex of each individual. +#' +#' @rdname Ped +#' @aliases sex,Ped-method +#' @export +setMethod("sex", signature(x = "Ped"), function(x) { + x@sex +}) + #### S4 Pedigree Accessors #### #' @title Pedigree ped accessors #' @param object A Pedigree object. @@ -70,7 +135,7 @@ setMethod( signature(object = "Pedigree", slot = "ANY", value = "ANY"), function(object, slot, value) { ped_slots <- c( - "id", "dadid", "momid", "sex", "family", + "id", "dadid", "momid", "sex", "famid", "steril", "status", "avail", "affected", "kin", "useful", "num_child_total", "num_child_direct", "num_child_indirect" @@ -150,7 +215,7 @@ setMethod( "rel<-", signature(object = "Pedigree", slot = "ANY", value = "ANY"), function(object, slot, value) { - rel_cols <- c("id1", "id2", "code", "family") + rel_cols <- c("id1", "id2", "code", "famid") if (! slot %in% rel_cols) { stop("slot selected: ", slot, " is not a relationship column") } diff --git a/R/AllClass.R b/R/AllClass.R index 2ceed28b..045a74d2 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -69,8 +69,8 @@ setValidity("Scales", is_valid_scales) #' of the individuals in the pedigree. #' It is used to create a Pedigree object. #' The minimal needed informations are `id`, `dadid`, `momid` and `sex`. -#' If a `family` is provided, the individuals `id` will be aggregated -#' to the `family` character to ensure the uniqueness of the `id`. +#' If a `famid` is provided, the individuals `id` will be aggregated +#' to the `famid` character to ensure the uniqueness of the `id`. #' The other slots are used to store recognized informations. #' Additional columns can be added to the Ped object and will be #' stored in the `meta` slot of the Ped object. @@ -80,7 +80,7 @@ setValidity("Scales", is_valid_scales) #' @slot momid A character vector with the id of the mother of the individuals. #' @slot sex A factor vector for the sex of the individuals (i.e. `male`, #' `female`, `unknown` or `terminated`). -#' @slot family A character vector with the family of the individuals. +#' @slot famid A character vector with the family identifiers of the individuals. #' @slot steril A numeric vector with the sterilisation status of the #' individuals (i.e. `0` = not sterilised, `1` = sterilised, `NA` = unknown). #' @slot status A numeric vector with the affection status of the @@ -113,7 +113,7 @@ setClass("Ped", dadid = "character", momid = "character", sex = "factor", - family = "character", + famid = "character", steril = "numeric", status = "numeric", avail = "numeric", @@ -128,7 +128,7 @@ setClass("Ped", setMethod("parallel_slot_names", "Ped", function(x) { c( - "id", "momid", "dadid", "sex", "family", + "id", "momid", "dadid", "sex", "famid", "steril", "status", "avail", "affected", "num_child_total", "num_child_direct", "num_child_indirect", callNextMethod() @@ -145,14 +145,14 @@ setValidity("Ped", is_valid_ped) #' between individuals in the pedigree. #' It is used to create a Pedigree object. #' The minimal needed informations are `id1`, `id2` and `code`. -#' If a `family` is provided, the individuals `id` will be aggregated -#' to the `family` character to ensure the uniqueness of the `id`. +#' If a `famid` is provided, the individuals `id` will be aggregated +#' to the `famid` character to ensure the uniqueness of the `id`. #' #' @slot id1 A character vector with the id of the first individual. #' @slot id2 A character vector with the id of the second individual. #' @slot code An ordered factor vector with the code of the special #' relationship. (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). -#' @slot family A character vector with the family of the individuals. +#' @slot famid A character vector with the famid of the individuals. #' #' @return A Rel object. #' @seealso [Pedigree()] @@ -166,14 +166,14 @@ setClass("Rel", id1 = "character", id2 = "character", code = "factor", - family = "character" + famid = "character" ) ) setMethod("parallel_slot_names", "Rel", function(x) { c( - "id1", "id2", "code", "family", + "id1", "id2", "code", "famid", callNextMethod() ) } diff --git a/R/AllConstructor.R b/R/AllConstructor.R index e4344f86..9c202220 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -30,7 +30,7 @@ na_to_length <- function(x, temp, value) { #' `data.frame` with all the informations in corresponding columns. #' @param dadid A character vector with the id of the father of the individuals. #' @param momid A character vector with the id of the mother of the individuals. -#' @param family A character vector with the family of the individuals. +#' @param famid A character vector with the family identifiers of the individuals. #' @param sex A factor vector with the sex of the individuals (i.e. `male`, #' `female`, `unknown` or `terminated`). #' @param steril A numeric vector with the sterilisation status of the @@ -54,7 +54,7 @@ setGeneric("Ped", signature = "obj", function(obj, ...) { setMethod("Ped", "data.frame", function(obj, cols_used_init = FALSE, cols_used_del = FALSE) { col_need <- c("id", "sex", "dadid", "momid") - col_to_use <- c("family", "steril", "status", "avail", "affected") + col_to_use <- c("famid", "steril", "status", "avail", "affected") col_used <- c( "num_child_total", "num_child_direct", "num_child_indirect", "elementMetadata" @@ -71,7 +71,7 @@ setMethod("Ped", "data.frame", myped <- with(df, Ped( obj = id, sex = sex, dadid = dadid, momid = momid, - family = family, + famid = famid, steril = steril, status = status, avail = avail, affected = affected )) @@ -88,11 +88,11 @@ setMethod("Ped", "data.frame", #' @rdname Ped setMethod("Ped", "character", function( - obj, sex, dadid, momid, family = NA, + obj, sex, dadid, momid, famid = NA, steril = NA, status = NA, avail = NA, affected = NA ) { - family <- na_to_length(family, obj, NA_character_) + famid <- na_to_length(famid, obj, NA_character_) id <- as.character(obj) dadid <- as.character(dadid) momid <- as.character(momid) @@ -109,7 +109,7 @@ setMethod("Ped", "character", new( "Ped", - id = id, dadid = dadid, momid = momid, family = family, + id = id, dadid = dadid, momid = momid, famid = famid, sex = sex, steril = steril, status = status, avail = avail, affected = affected, num_child_total = df_child$num_child_tot, @@ -130,7 +130,7 @@ setMethod("Ped", "character", #' pairs #' @param code An ordered factor vector with the code of the special #' relationship (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). -#' @param family A character vector with the family of the individuals. +#' @param famid A character vector with the family identifiers of the individuals. #' #' @return A Rel object. #' @seealso [Pedigree()] @@ -147,14 +147,14 @@ setGeneric("Rel", signature = "obj", function(obj, ...) { setMethod("Rel", "data.frame", function(obj) { col_need <- c("id1", "id2", "code") - col_to_use <- c("family") + col_to_use <- c("famid") df <- check_columns( obj, col_need, NULL, col_to_use, cols_to_use_init = TRUE ) with(df, Rel( - obj = id1, id2 = id2, code = code, family = family + obj = id1, id2 = id2, code = code, famid = famid )) } ) @@ -165,9 +165,9 @@ setMethod("Rel", "data.frame", #' @export setMethod("Rel", "character", function( - obj, id2, code, family = NA + obj, id2, code, famid = NA ) { - family <- na_to_length(family, obj, NA_character_) + famid <- na_to_length(famid, obj, NA_character_) id1 <- as.character(obj) id2 <- as.character(id2) @@ -181,7 +181,7 @@ setMethod("Rel", "character", rel <- new( "Rel", - id1 = id1o, id2 = id2o, code = code, family = family + id1 = id1o, id2 = id2o, code = code, famid = famid ) rel } diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 063eb97d..6d99d438 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -212,7 +212,7 @@ setMethod("length", c(x = "Pedigree"), #' @rdname extract-methods #' @aliases show,Pedigree-method setMethod("show", signature(object = "Pedigree"), function(object) { - nb_fam <- length(levels(as.factor(object@ped$family))) + nb_fam <- length(levels(as.factor(object@ped$famid))) cat("Pedigree object with", nrow(object@ped), "individuals and", nrow(object@rel), "special relationships across", nb_fam, "families", fill = TRUE) diff --git a/R/AllValidity.R b/R/AllValidity.R index 37bb9a0e..b1064d5e 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -181,9 +181,9 @@ is_valid_ped <- function(object) { } # Control values for ids - famid <- unique(object@family) + famid <- unique(object@famid) errors <- c(errors, check_values( - famid, c(""), "family", present = FALSE + famid, c(""), "famid", present = FALSE )) errors <- c(errors, check_values( object@id, @@ -241,7 +241,7 @@ is_valid_ped <- function(object) { is_valid_rel <- function(object) { errors <- c() - rel_cols <- c("id1", "id2", "code", "family") + rel_cols <- c("id1", "id2", "code", "famid") #### Check that the slots have the right columns #### errors <- c(errors, check_slot_fd(object, NULL, rel_cols)) @@ -292,10 +292,10 @@ is_valid_rel <- function(object) { is_valid_pedigree <- function(object) { errors <- c() - #### Check that the family id and individual id present in the rel slot #### + #### Check that the famid id and individual id present in the rel slot #### #### are present in the ped slot #### errors <- c(errors, check_values( - object@rel@family, c(object@ped@family, NA) + object@rel@famid, c(object@ped@famid, NA) )) errors <- c(errors, check_values(object@rel@id1, object@ped@id)) errors <- c(errors, check_values(object@rel@id2, object@ped@id)) diff --git a/R/Pedigree.R b/R/Pedigree.R index a50504ef..1e328593 100644 --- a/R/Pedigree.R +++ b/R/Pedigree.R @@ -12,7 +12,7 @@ #' with the individuals informations. #' The minimum columns required are `indID`, `fatherId`, `motherId` and #' `gender`. -#' The `family` column can also be used to specify the family of the +#' The `famid` column can also be used to specify the family of the #' individuals and will be merge to the `id` field separated by an #' underscore. #' The following columns are also recognize `sterilisation`, `available`, @@ -82,7 +82,7 @@ setMethod("Pedigree", "numeric", function(obj, ... #' - `1` : sterilised #' - `NA` : sterilisation status not known setMethod("Pedigree", "character", function(obj, dadid, momid, - sex, family = NA, avail = NULL, affected = NULL, status = NULL, + sex, famid = NA, avail = NULL, affected = NULL, status = NULL, steril = NULL, relation = NULL, missid = "0", col_aff = "affection", normalize = TRUE, ... ) { @@ -107,7 +107,7 @@ setMethod("Pedigree", "character", function(obj, dadid, momid, ped_df <- data.frame( - family = family, + family = famid, indId = obj, fatherId = dadid, motherId = momid, @@ -285,9 +285,9 @@ setMethod("Pedigree", "data.frame", function( } cols <- colnames(ped_df) - col_ped <- c("id", "dadid", "momid", "sex", "family") + col_ped <- c("id", "dadid", "momid", "sex", "famid") col_deriv <- c("affected", "kin", "useful", "avail", "steril", "status") - col_rel <- c("id1", "id2", "code", "family") + col_rel <- c("id1", "id2", "code", "famid") col_meta <- cols[!(cols %in% c(col_ped, col_deriv))] ped <- ped_df[, col_ped] deriv <- ped_df[, col_deriv] diff --git a/R/align.R b/R/align.R index ee434098..a9878ad1 100644 --- a/R/align.R +++ b/R/align.R @@ -118,15 +118,27 @@ ancestors <- function(idx, momx, dadx) { #' @include alignped2.R #' @include alignped3.R #' @include alignped4.R +setGeneric("align", signature = "obj", + function(obj, ...) standardGeneric("align") +) + +setMethod("align", "Pedigree", + function(obj, packed = TRUE, width = 10, + align = TRUE, hints = obj@hints, missid = "0" +) { + align(ped(obj), packed, width, align, hints, missid) +}) + + align <- function(ped, packed = TRUE, width = 10, - align = TRUE, hints = ped$hints, missid = "0" + align = TRUE, hints = NULL, missid = "0" ) { - famlist <- unique(ped(ped, "family")) + famlist <- unique(ped(ped, "famid")) if (length(famlist) > 1) { nfam <- length(famlist) alignment <- vector("list", nfam) for (i_fam in famlist) { - ped_fam <- ped[ped(ped, "family") == i_fam] + ped_fam <- ped[ped(ped, "famid") == i_fam] alignment[[i_fam]] <- align(ped_fam, packed, width, align) } return(alignment) diff --git a/R/auto_hint.R b/R/auto_hint.R index d30eab4f..7ad9e09f 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -296,7 +296,7 @@ get_twin_rel <- function(ped) { #' @seealso [align()], [best_hint()] #' @examples #' data(sampleped) -#' ped <- Pedigree(sampleped[sampleped$family == 1, ]) +#' ped <- Pedigree(sampleped[sampleped$famid == 1, ]) #' auto_hint(ped) #' @export auto_hint <- function( @@ -312,7 +312,7 @@ auto_hint <- function( return(hints(ped)) } # nothing to do - if (length(unique(ped(ped, "family"))) > 1) { + if (length(unique(ped(ped, "famid"))) > 1) { stop("auto_hint only works on Pedigrees with a single family") } diff --git a/R/best_hint.R b/R/best_hint.R index d46f2e54..3022b1fc 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -42,7 +42,7 @@ #' @export #' @examples #' data(sampleped) -#' ped <- Pedigree(sampleped[sampleped$family == 1,]) +#' ped <- Pedigree(sampleped[sampleped$famid == 1,]) #' best_hint(ped) #' @include auto_hint.R #' @include align.R diff --git a/R/check_hints.R b/R/check_hints.R index 64f6851d..d2f42174 100644 --- a/R/check_hints.R +++ b/R/check_hints.R @@ -17,7 +17,7 @@ #' @return Nothing, but will stop if there is a problem. #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' ht1 <- auto_hint(ped1) #' check_hints(ht1, ped1$ped$sex) #' diff --git a/R/data.R b/R/data.R index 63c843f1..05ca12ee 100644 --- a/R/data.R +++ b/R/data.R @@ -105,7 +105,7 @@ #' #' @format A data frame with 55 observations, one line per subject, on the #' following 7 variables. -#' - `family` family identifier +#' - `famid` family identifier #' - `id` subject identifier #' - `dadid` identifier of the father, if the father is part of the #' data set; zero otherwise diff --git a/R/family_check.R b/R/family_check.R index 21469137..ff541693 100644 --- a/R/family_check.R +++ b/R/family_check.R @@ -17,15 +17,15 @@ #' and the number of subjects as entries. #' #' @inheritParams kinship -#' @param family A vector of family identifiers +#' @param famid A vector of family identifiers #' @param newfam The result of a call to `make_famid()`. If this has already #' been computed by the user, adding it as an argument shortens the running #' time somewhat. #' #' @return a data frame with one row for each unique family id in the -#' `family` argument or the one detected in the Pedigree object. +#' `famid` argument or the one detected in the Pedigree object. #' Components of the output are: -#' - `family` : The family id, as entered into the data set +#' - `famid` : The family id, as entered into the data set #' - `n` : Number of subjects in the family #' - `unrelated` : Number of them that appear to be unrelated to #' anyone else in the entire Pedigree. This is usually marry-ins with no @@ -57,7 +57,7 @@ #' sampleped[20, 3] <- 131 #' fcheck1.bad <- try( #' { -#' with(sampleped, family_check(id, father, mother, family)) +#' with(sampleped, family_check(id, father, mother, famid)) #' }, #' silent = FALSE #' ) @@ -78,20 +78,20 @@ setGeneric("family_check", signature = "obj", #' @aliases family_check,character #' @export setMethod("family_check", "character", - function(obj, dadid, momid, family, newfam) { + function(obj, dadid, momid, famid, newfam) { id <- obj - if (is.numeric(family) && any(is.na(family))) { + if (is.numeric(famid) && any(is.na(famid))) { stop("Family id of missing not allowed") } - nfam <- length(unique(family)) + nfam <- length(unique(famid)) if (missing(newfam)) { newfam <- make_famid(id, dadid, momid) - } else if (length(newfam) != length(family)) { + } else if (length(newfam) != length(famid)) { stop("Invalid length for newfam") } - xtab <- table(family, newfam) + xtab <- table(famid, newfam) if (any(newfam == 0)) { unrelated <- xtab[, 1] xtab <- xtab[, -1, drop = FALSE] @@ -105,8 +105,8 @@ setMethod("family_check", "character", temp <- apply((xtab > 0) * outer(rep(1, nfam), joins - 1), 1, sum) - out <- data.frame(family = dimnames(xtab)[[1]], - n = as.vector(table(family)), unrelated = as.vector(unrelated), + out <- data.frame(famid = dimnames(xtab)[[1]], + n = as.vector(table(famid)), unrelated = as.vector(unrelated), split = as.vector(splits), join = temp, row.names = seq_len(nfam) ) if (any(joins > 1)) { @@ -125,6 +125,6 @@ setMethod("family_check", "character", #' @aliases family_check,Pedigree setMethod("family_check", "Pedigree", function(obj) { - family_check(obj$ped$id, obj$ped$dadid, obj$ped$momid, obj$ped$family) + family_check(obj$ped$id, obj$ped$dadid, obj$ped$momid, obj$ped$famid) } ) diff --git a/R/find_unavailable.R b/R/find_unavailable.R index b3bd66f5..1aa273f9 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -30,7 +30,7 @@ #' #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' find_unavailable(ped1) #' #' @seealso [shrink()] diff --git a/R/fix_parents.R b/R/fix_parents.R index 32cd2bd5..9698b555 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -12,7 +12,7 @@ NULL #' First look to add parents whose ids are given in momid/dadid. Second, fix #' sex of parents. Last look to add second parent for children for whom only #' one parent id is given. -#' If a family vector is given the family id will be added to the ids of all +#' If a famid vector is given the famid id will be added to the ids of all #' individuals (id, dadid, momid) separated by an underscore befor proceeding. #' #' ## Special case for dataframe @@ -22,14 +22,14 @@ NULL #' in the dataframe then set availability to O for non available parents. #' - If FALSE then delete the id of missing parents #' -#' @param family Optional family identification set it to NULL to invalidate. +#' @param famid Optional famid identification set it to NULL to invalidate. #' If used it will modify the ids of the individuals by pasting it with an _. #' @inheritParams kinship #' @inheritParams is_parent #' @inheritParams sex_to_factor #' @param obj A data.frame or a vector of the individuals identifiers. If a #' dataframe is given it must contain the columns `id`, `dadid`, -#' `momid`, `sex` and `family`. Family is optional. +#' `momid`, `sex` and `famid`. famid is optional. #' #' @return A data.frame with id, dadid, momid, sex as columns with the #' relationships fixed. @@ -65,7 +65,7 @@ setGeneric("fix_parents", signature = "obj", #' @rdname fix_parents #' @aliases fix_parents,character setMethod("fix_parents", "character", function( - obj, dadid, momid, sex, family = NULL, missid = "0" + obj, dadid, momid, sex, famid = NULL, missid = "0" ) { ## fix sex of parents add parents that are missing n <- length(obj) @@ -79,7 +79,7 @@ setMethod("fix_parents", "character", function( if (length(sex) != n) { stop("Mismatched lengths, id and sex") } - if (length(family) != n & length(family) > 0) { + if (length(famid) != n & length(famid) > 0) { stop("Mismatched lengths, id and sex") } @@ -100,9 +100,9 @@ setMethod("fix_parents", "character", function( stop("Missing value for the id variable") } - id <- prefix_famid(family, id, missid) - dadid <- prefix_famid(family, dadid, missid) - momid <- prefix_famid(family, momid, missid) + id <- prefix_famid(famid, id, missid) + dadid <- prefix_famid(famid, dadid, missid) + momid <- prefix_famid(famid, momid, missid) addids <- paste("addin", seq_along(id), sep = "-") if (length(grep("^ *$", id)) > 0) { stop("A blank or empty string is not allowed as the id variable") @@ -163,13 +163,13 @@ setMethod("fix_parents", "character", function( dadid <- c(dadid, rep(0, length(nodad_idx))) momid <- c(momid, rep(0, length(nodad_idx))) } - if (is.null(family)) { + if (is.null(famid)) { data.frame(id = id, momid = momid, dadid = dadid, sex = sex) } else { - family <- stringr::str_split_i(id, "_", i = 1) + famid <- stringr::str_split_i(id, "_", i = 1) data.frame( id = id, momid = momid, dadid = dadid, - sex = sex, family = family + sex = sex, famid = famid ) } }) @@ -186,7 +186,7 @@ setMethod("fix_parents", "data.frame", function( obj, delete = FALSE, filter = NULL, missid = "0" ) { cols_needed <- c("id", "dadid", "momid", "sex", filter) - df <- check_columns(obj, cols_needed, NULL, "family", others_cols = TRUE, + df <- check_columns(obj, cols_needed, NULL, "famid", others_cols = TRUE, cols_to_use_init = TRUE ) df_old <- df @@ -208,12 +208,12 @@ setMethod("fix_parents", "data.frame", function( } df_fix <- fix_parents( df$id, df$dadid, df$momid, - df$sex, missid = missid, family = df$family + df$sex, missid = missid, famid = df$famid ) col_used <- which(names(df_old) == "momid" | names(df_old) == "dadid" | names(df_old) == "sex" | - names(df_old) == "family" + names(df_old) == "famid" ) df <- merge(df_old[, -col_used], df_fix, by = "id", all.y = TRUE, all.x = FALSE diff --git a/R/kindepth.R b/R/kindepth.R index 4bc72ace..740161f0 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -25,7 +25,7 @@ #' @include AllClass.R #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' kindepth(ped1) #' @export setGeneric("kindepth", signature = "obj", diff --git a/R/kinship.R b/R/kinship.R index 527ac697..5a8cd8c7 100644 --- a/R/kinship.R +++ b/R/kinship.R @@ -139,7 +139,7 @@ setMethod("kinship", "character", #' @docType methods setMethod("kinship", "Pedigree", function(obj, chrtype = "autosome") { - famlist <- unique(obj$ped$family) + famlist <- unique(obj$ped$famid) nfam <- length(famlist) matlist <- vector("list", nfam) ## The possibly reorderd list of id values @@ -147,10 +147,10 @@ setMethod("kinship", "Pedigree", for (i_fam in seq_along(famlist)) { if (is.na(famlist[i_fam])) { # If no family provided - tped <- obj[is.na(obj$ped$family)] + tped <- obj[is.na(obj$ped$famid)] } else { ## Pedigree for this family - tped <- obj[obj$ped$family == famlist[i_fam]] + tped <- obj[obj$ped$famid == famlist[i_fam]] } temp <- try({ chrtype <- match.arg(casefold(chrtype), c("autosome", "x")) diff --git a/R/make_famid.R b/R/make_famid.R index c75d4db3..a679bf7e 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -101,13 +101,13 @@ setMethod("make_famid", "character", setMethod("make_famid", "Pedigree", function(obj) { ped <- obj - family <- make_famid( + famid <- make_famid( ped(ped, "id"), ped(ped, "dadid"), ped(ped, "momid") ) - ped(obj, "family") <- family + ped(obj, "famid") <- famid - fam_id1 <- family[match(rel(ped, "id1"), ped(ped, "id"))] - fam_id2 <- family[match(rel(ped, "id2"), ped(ped, "id"))] + fam_id1 <- famid[match(rel(ped, "id1"), ped(ped, "id"))] + fam_id2 <- famid[match(rel(ped, "id2"), ped(ped, "id"))] if (any(fam_id1 != fam_id2)) { stop("The two individuals in the relationship", @@ -115,7 +115,7 @@ setMethod("make_famid", "Pedigree", ) } - rel(ped, "family") <- fam_id1 + rel(ped, "famid") <- fam_id1 validObject(ped) ped } diff --git a/R/norm_data.R b/R/norm_data.R index 8ef957b4..2c98964c 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -8,21 +8,21 @@ NULL #' #' @description Compute id with family id if the family id available #' -#' @param family_id The family id -#' @param ind_id The individual id +#' @param famid The family id +#' @param id The individual id #' @inheritParams is_parent #' @keywords internal #' @return The id with the family id merged -prefix_famid <- function(family_id, ind_id, missid = "0") { - if (length(family_id) > 1 && length(family_id) != length(ind_id)) { - stop("family_id and ind_id must have the same length.") +prefix_famid <- function(famid, id, missid = "0") { + if (length(famid) > 1 && length(famid) != length(id)) { + stop("famid and id must have the same length.") } pre_famid <- ifelse( - is.na(family_id) | is.null(family_id), - "", paste0(as.character(family_id), "_") + is.na(famid) | is.null(famid), + "", paste0(as.character(famid), "_") ) - ifelse(ind_id == missid, missid, paste0(pre_famid, as.character(ind_id))) + ifelse(id == missid, missid, paste0(pre_famid, as.character(id))) } #' Normalise dataframe @@ -44,7 +44,7 @@ prefix_famid <- function(family_id, ind_id, missid = "0") { #' @param ped_df A data.frame with the individuals informations. #' The minimum columns required are `indID`, `fatherId`, `motherId` and #' `gender`. -#' The `family` column can also be used to specify the family of the +#' The `famid` column can also be used to specify the family of the #' individuals and will be merge to the `id` field separated by an #' underscore. #' The following columns are also recognize `sterilisation`, `available`, @@ -69,7 +69,7 @@ prefix_famid <- function(family_id, ind_id, missid = "0") { #' motherId = c(0, 0, 2, 2, 0, 5, 2, 0, 8, 8), #' gender = c(1, 2, "m", "man", "f", "male", "m", "m", "f", "f"), #' available = c("A", "1", 0, NA, 1, 0, 1, 0, 1, 0), -#' family = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2), +#' famid = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2), #' sterilisation = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, "TRUE"), #' vitalStatus = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0), #' affection = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0) @@ -88,7 +88,7 @@ norm_ped <- function( colnames(err) <- err_cols cols_need <- c("indId", "fatherId", "motherId", "gender") cols_used <- c( - "sex", "steril", "status", "avail", "id", "dadid", "momid", + "sex", "steril", "status", "avail", "id", "dadid", "momid", "famid", "error", "affected", "kin", "useful" ) cols_to_use <- c( @@ -120,9 +120,10 @@ norm_ped <- function( } ) ## Make a new id from the family and subject pair - ped_df$id <- prefix_famid(ped_df$family, ped_df$indId, missid) - ped_df$dadid <- prefix_famid(ped_df$family, ped_df$fatherId, missid) - ped_df$momid <- prefix_famid(ped_df$family, ped_df$motherId, missid) + ped_df$famid <- ped_df$family + ped_df$id <- prefix_famid(ped_df$famid, ped_df$indId, missid) + ped_df$dadid <- prefix_famid(ped_df$famid, ped_df$fatherId, missid) + ped_df$momid <- prefix_famid(ped_df$famid, ped_df$motherId, missid) ped_df <- mutate_at(ped_df, c("id", "dadid", "momid"), ~replace(., . %in% na_strings, missid) @@ -255,7 +256,7 @@ norm_ped <- function( #' @param rel_df A data.frame with the special relationships between #' individuals. #' The minimum columns required are `id1`, `id2` and `code`. -#' The `family` column can also be used to specify the family +#' The `famid` column can also be used to specify the family #' of the individuals. #' The code values are: #' - `1` = Monozygotic twin @@ -273,7 +274,7 @@ norm_ped <- function( #' id2 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 1), #' code = c("MZ twin", "DZ twin", "UZ twin", "Spouse", 1, 2, #' 3, 4, "MzTwin", "sp oUse"), -#' family = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2) +#' famid = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2) #' ) #' norm_rel(df) #' @@ -285,7 +286,7 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = "0") { err <- data.frame(matrix(NA, nrow = nrow(rel_df), ncol = length(err_cols))) colnames(err) <- err_cols cols_needed <- c("id1", "id2", "code") - cols_used <- c("error") + cols_used <- c("error", "famid") cols_to_use <- c("family") rel_df <- check_columns( rel_df, cols_needed, cols_used, cols_to_use, @@ -305,7 +306,7 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = "0") { #### Check for id errors #### Set ids as characters rel_df <- rel_df %>% - mutate(across(c("id1", "id2"), as.character)) + mutate(across(c("id1", "id2", "family"), as.character)) ## Check for non null ids len1 <- nchar(rel_df$id1) @@ -314,8 +315,9 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = "0") { err$id2Err[is.na(len2) | len2 == missid] <- "indId2length0" ## Compute id with family id - rel_df$id1 <- prefix_famid(rel_df$family, rel_df$id1, missid) - rel_df$id2 <- prefix_famid(rel_df$family, rel_df$id2, missid) + rel_df$famid <- rel_df$family + rel_df$id1 <- prefix_famid(rel_df$famid, rel_df$id1, missid) + rel_df$id2 <- prefix_famid(rel_df$famid, rel_df$id2, missid) err$sameIdErr[rel_df$id1 == rel_df$id2] <- "SameId" diff --git a/R/num_child.R b/R/num_child.R index 17502e68..cee7fa5f 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -27,7 +27,7 @@ NULL #' Pedigree `ped` slot. #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' ped1 <- num_child(ped1) #' summary(ped1$ped) #' @include AllClass.R diff --git a/R/ped_to_plotdf.R b/R/ped_to_plotdf.R index ec827d18..e1b20a3b 100644 --- a/R/ped_to_plotdf.R +++ b/R/ped_to_plotdf.R @@ -21,7 +21,7 @@ NULL #' @return A list containing the data frame and the user coordinates. #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == 1,]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) #' ped_to_plotdf(ped1) #' @seealso [plot_fromdf()] #' [ped_to_legdf()] @@ -32,12 +32,12 @@ ped_to_plotdf <- function( aff_mark = TRUE, label = NULL, ... ) { - famlist <- unique(ped(ped, "family")) + famlist <- unique(ped(ped, "famid")) if (length(famlist) > 1) { nfam <- length(famlist) all_df <- vector("list", nfam) for (i_fam in famlist) { - ped_fam <- ped[ped(ped, "family") == i_fam] + ped_fam <- ped[ped(ped, "famid") == i_fam] all_df[[i_fam]] <- ped_to_plotdf(ped_fam, packed, width, align, subreg, cex, symbolsize, ... ) diff --git a/R/plot.R b/R/plot.R index e6879791..8b68d28b 100644 --- a/R/plot.R +++ b/R/plot.R @@ -46,7 +46,7 @@ NULL #' @param fam_to_plot default=1. If the Pedigree contains multiple families, #' this parameter can be used to select which family to plot. #' It can be a numeric value or a character value. If numeric, it is the -#' index of the family to plot returned by `unique(x$ped$family)`. +#' index of the family to plot returned by `unique(x$ped$famid)`. #' If character, it is the family id to plot. #' @param legend default=FALSE. If TRUE, a legend will be added to the plot. #' @param leg_cex default=0.8. Controls the size of the legend text. @@ -92,7 +92,7 @@ setMethod("plot", c(x = "Pedigree", y = "missing"), lst <- ped_to_plotdf(x, packed, width, align, subreg, cex, symbolsize, pconnect, branch, aff_mark, label, ... ) - famlist <- unique(x$ped$family) + famlist <- unique(x$ped$famid) if (length(famlist) > 1) { message("Multiple families present, only plotting family ", fam_to_plot diff --git a/R/plot_fromdf.R b/R/plot_fromdf.R index a72fa416..9f1d03c5 100644 --- a/R/plot_fromdf.R +++ b/R/plot_fromdf.R @@ -43,7 +43,7 @@ NULL #' @include plot_fct.R #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == 1,]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) #' lst <- ped_to_plotdf(ped1) #' #plot_fromdf(lst$df, lst$usr) #' @return an invisible ggplot object and a plot on the current plotting device diff --git a/R/shrink.R b/R/shrink.R index bb90e40e..d83c0660 100644 --- a/R/shrink.R +++ b/R/shrink.R @@ -34,7 +34,7 @@ #' #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == '1',]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == '1',]) #' shrink(ped1, max_bits = 12) #' #' @author Original by Dan Schaid, updated by Jason Sinnwell diff --git a/R/trim.R b/R/trim.R index 72d5ea21..8531bd2d 100644 --- a/R/trim.R +++ b/R/trim.R @@ -11,7 +11,7 @@ #' #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' trim(ped1, "1_101") #' @export trim <- function(ped, id_rm, missid = "0") { diff --git a/R/unrelated.R b/R/unrelated.R index 1d34dcc9..fa5b63bb 100644 --- a/R/unrelated.R +++ b/R/unrelated.R @@ -30,7 +30,7 @@ NULL #' @examples #' data(sampleped) -#' fam1 <- sampleped[sampleped$family == 1, ] +#' fam1 <- sampleped[sampleped$famid == 1, ] #' #' #' ped1 <- Pedigree(fam1) diff --git a/R/useful_inds.R b/R/useful_inds.R index aea76f38..1e5bc576 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -25,7 +25,7 @@ #' useful individuals and 0 otherwise. #' @examples #' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' ped1 <- num_child(ped1) #' useful_inds(ped1, informative = "AvAf")$ped #' @export diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 35368418..c7d702e2 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -1,11 +1,11 @@ test_that("align works", { data("sampleped") ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "family") == 1] + ped1 <- ped[ped(ped, "famid") == 1] plist1 <- align(ped1) expect_equal(plist1$n, c(6, 12, 17, 8)) - ped2 <- ped[ped(ped, "family") == 2] + ped2 <- ped[ped(ped, "famid") == 2] withr::local_options(width = 50) plist2 <- align(ped2) expect_equal(plist2$n, c(2, 7, 5)) @@ -66,7 +66,7 @@ test_that("besthint works", { test_that("Alignement with spouse", { data(sampleped) - df1 <- sampleped[sampleped$family == 1, ] + df1 <- sampleped[sampleped$famid == 1, ] relate1 <- data.frame( indId1 = 113, indId2 = 114, diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index b37c4772..de11ed8b 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -46,14 +46,14 @@ test_that("Class ped work", { momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male"), - family = c("F1", "F1", "F2") + famid = c("F1", "F1", "F2") )) expect_error(Ped( obj = c("ID3", "ID2", ""), momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male"), - family = c("F1", "F1", "F2") + famid = c("F1", "F1", "F2") )) #### Metadata #### @@ -62,7 +62,7 @@ test_that("Class ped work", { momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male"), - family = c("F1", "F1", "F2") + famid = c("F1", "F1", "F2") ) mcols(ped3) <- list(A = c("test", 1, 3), B = c("test3", 6, 8)) @@ -80,11 +80,16 @@ test_that("Class ped work", { momid = c("ID2", NA, NA), dadid = c("ID3", NA, NA), sex = c("male", "female", "male"), - family = c("F1", "F1", "F2"), + famid = c("F1", "F1", "F2"), test = c("test", 1, 3), test2 = c("test2", 3, 4) ) ped3 <- Ped(df) + + expect_equal(ped3[1]@id, "ID1") + expect_equal(ped3[1:2]@id, c("ID1", "ID2")) + famid(ped3) + expect_equal(dim(as.data.frame(ped3)), c(3, 14)) expect_equal(dim(mcols(ped3)), c(3, 2)) diff --git a/tests/testthat/test-fix_parents.R b/tests/testthat/test-fix_parents.R index 888e7e7a..6d492a04 100644 --- a/tests/testthat/test-fix_parents.R +++ b/tests/testthat/test-fix_parents.R @@ -26,7 +26,7 @@ test_that("fix_parents works with character", { test_that("fix_parents works with sex errors", { data("sampleped") - datped2 <- sampleped[sampleped$family %in% 2, ] + datped2 <- sampleped[sampleped$famid %in% 2, ] datped2[datped2$id %in% 203, "sex"] <- 2 datped2 <- datped2[-which(datped2$id %in% 209), ] @@ -44,7 +44,7 @@ test_that("fix_parents works with sex errors", { test_that("fix_parents_df works with sex errors and with family", { data("sampleped") - datped2 <- sampleped[sampleped$family %in% 2, ] + datped2 <- sampleped[sampleped$famid %in% 2, ] # Set individual 203 as female datped2[datped2$id %in% 203, "sex"] <- 2 # Delete individual 209 from id diff --git a/tests/testthat/test-generate_scales.R b/tests/testthat/test-generate_scales.R index 07bc0e7d..14e3182f 100644 --- a/tests/testthat/test-generate_scales.R +++ b/tests/testthat/test-generate_scales.R @@ -88,7 +88,7 @@ test_that("generate fill full scale on", { test_that("generate colors works on Pedigree object", { data("sampleped") - ped <- Pedigree(sampleped[sampleped$family == "1", -1]) + ped <- Pedigree(sampleped[sampleped$famid == "1", -1]) ped(ped, "id") <- as.numeric(ped(ped, "id")) ped_aff <- generate_colors(ped, col_aff = "id", threshold = 120, sup_thres_aff = TRUE, add_to_scale = FALSE @@ -106,7 +106,7 @@ test_that("generate with full scale", { data("sampleped") sampleped$val_num <- as.numeric(sampleped$id) ped <- Pedigree(sampleped) - ped <- ped[ped(ped, "family") == "1", ] + ped <- ped[ped(ped, "famid") == "1", ] ped <- generate_colors( ped, add_to_scale = FALSE, "val_num", threshold = 115, colors_aff = c("pink", "purple"), keep_full_scale = TRUE diff --git a/tests/testthat/test-kindepth.R b/tests/testthat/test-kindepth.R index 7a832def..39378f4d 100644 --- a/tests/testthat/test-kindepth.R +++ b/tests/testthat/test-kindepth.R @@ -1,6 +1,6 @@ test_that("fix_parents_df works with sex errors and with family", { data("sampleped") - datped2 <- sampleped[sampleped$family %in% 2, ] + datped2 <- sampleped[sampleped$famid %in% 2, ] ## this gets an error ped <- Pedigree(datped2) diff --git a/tests/testthat/test-kinship.R b/tests/testthat/test-kinship.R index 677e2066..998abe12 100644 --- a/tests/testthat/test-kinship.R +++ b/tests/testthat/test-kinship.R @@ -162,7 +162,7 @@ test_that("Kinship with 2 different family", { ), ncol = 5, byrow = TRUE) ped2df <- as.data.frame(ped2mat) - names(ped2df) <- c("family", "id", "dadid", "momid", "sex") + names(ped2df) <- c("famid", "id", "dadid", "momid", "sex") ## testing when only one subject in a family peddf <- rbind(ped2df, c(2, 1, 0, 0, 1)) diff --git a/tests/testthat/test-make_famid.R b/tests/testthat/test-make_famid.R index 3269ebb4..729fbcc7 100644 --- a/tests/testthat/test-make_famid.R +++ b/tests/testthat/test-make_famid.R @@ -15,7 +15,7 @@ rel_df <- c( ) rel_df <- matrix(rel_df, ncol = 4, byrow = TRUE) -dimnames(rel_df) <- list(NULL, c("id1", "id2", "code", "family")) +dimnames(rel_df) <- list(NULL, c("id1", "id2", "code", "famid")) rel_df <- data.frame(rel_df) test_that("make_famid works with Pedigree", { @@ -25,7 +25,7 @@ test_that("make_famid works with Pedigree", { ped <- make_famid(ped) ## Expected values - fam <- sampleped$family + fam <- sampleped$famid fam[sampleped$id == "113"] <- 0 # singleton id <- paste(fam, c(101:141, 201:214), sep = "_") expect_equal(ped(ped, "id"), id) @@ -33,7 +33,7 @@ test_that("make_famid works with Pedigree", { ## Updating already present family id data("sampleped") - sampleped$family[sampleped$family == "2"] <- 3 + sampleped$famid[sampleped$famid == "2"] <- 3 ped <- Pedigree(sampleped, rel_df) ped <- make_famid(ped) expect_equal(ped(ped, "id"), id) @@ -46,7 +46,7 @@ test_that("Family check works", { ## check them giving separate ped ids fcheck_df_sep <- with(sampleped, - family_check(id, dadid, momid, family) + family_check(id, dadid, momid, famid) ) fcheck_ped_sep <- family_check(ped) expect_equal(as.numeric(as.vector(fcheck_df_sep[1, ])), c(1, 41, 1, 1, 0)) @@ -56,7 +56,7 @@ test_that("Family check works", { fcheck_df_combined <- with(sampleped, family_check( as.character(id), dadid, momid, rep(1, nrow(sampleped)) )) - sampleped$family[sampleped$family == "2"] <- 1 + sampleped$famid[sampleped$famid == "2"] <- 1 ped <- Pedigree(sampleped) fcheck_ped_combined <- family_check(ped) expect_equal(as.numeric(as.vector(fcheck_df_combined[1, ])), diff --git a/tests/testthat/test-ped_to_legdf.R b/tests/testthat/test-ped_to_legdf.R index 3bb1c9bd..5efda06e 100644 --- a/tests/testthat/test-ped_to_legdf.R +++ b/tests/testthat/test-ped_to_legdf.R @@ -17,7 +17,7 @@ test_that("Pedigree legend works", { data("sampleped") sampleped$val_num <- as.numeric(sampleped$id) ped <- Pedigree(sampleped) - ped <- ped[ped(ped, "family") == "1", ] + ped <- ped[ped(ped, "famid") == "1", ] ped <- generate_colors(ped, add_to_scale = TRUE, "avail") ped <- generate_colors(ped, add_to_scale = TRUE, "val_num", threshold = 115, diff --git a/tests/testthat/test-pedigreeClass.R b/tests/testthat/test-pedigreeClass.R index 65bd0335..5e21c9db 100644 --- a/tests/testthat/test-pedigreeClass.R +++ b/tests/testthat/test-pedigreeClass.R @@ -4,7 +4,7 @@ test_that("Pedigree works", { dadid = character(), momid = character(), sex = numeric(), - family = character(), + famid = character(), avail = numeric(), affection = numeric() )) @@ -21,7 +21,7 @@ test_that("Pedigree works", { test_that("Pedigree old usage compatibility", { data(sampleped) ped1 <- with(sampleped, - Pedigree(id, dadid, momid, sex, family, avail, affection) + Pedigree(id, dadid, momid, sex, famid, avail, affection) ) expect_equal(ped1, Pedigree(sampleped)) @@ -39,18 +39,18 @@ test_that("Pedigree old usage compatibility", { ), ncol = 5, byrow = TRUE) ped2df <- as.data.frame(ped2mat) - names(ped2df) <- c("family", "id", "dadid", "momid", "sex") + names(ped2df) <- c("famid", "id", "dadid", "momid", "sex") ## 1 2 3 4 5 6 7 8 9 10,11,12,13,14,15,16 ped2df$disease <- c(NA, NA, 1, 0, 0, 0, 0, 1, 1, 1) ped2df$smoker <- c(0, NA, 0, 0, 1, 1, 1, 0, 0, 0) ped2df$available <- c(0, 0, 1, 1, 0, 1, 1, 1, 1, 1) ped2df$status <- c(1, 1, 1, 0, 1, 0, 0, 0, 0, 0) - ped2 <- with(ped2df, Pedigree(id, dadid, momid, sex, family, + ped2 <- with(ped2df, Pedigree(id, dadid, momid, sex, famid, available, status, affected = cbind(disease, smoker, available), relation = matrix(c(8, 9, 1, 1), ncol = 4) )) - rel_df <- data.frame(id1 = 8, id2 = 9, code = 1, family = 1) + rel_df <- data.frame(id1 = 8, id2 = 9, code = 1, famid = 1) expect_equal(ped2, Pedigree(ped2df, col_aff = c("disease", "smoker", "available"), @@ -62,7 +62,7 @@ test_that("Pedigree old usage compatibility", { test_that("Pedigree from sampleped and affectation", { # Here is a case where the levels fail to line up properly data("sampleped") - df1 <- sampleped[sampleped$family == 1, ] + df1 <- sampleped[sampleped$famid == 1, ] colnames(df1) ped1 <- Pedigree(df1, cols_ren_ped = list( "indId" = "id", @@ -101,7 +101,7 @@ test_that("Pedigree subscripting", { expect_equal(nrow(ped(minnped)), 28081) expect_equal(ncol(minnped[["ped"]]), 28) - ped8 <- minnped[ped(minnped)$family == "8", + ped8 <- minnped[ped(minnped)$famid == "8", c("id", "dadid", "momid", "sex", "affection") ] @@ -163,7 +163,7 @@ test_that("Pedigree setters", { data("sampleped") ped <- Pedigree(sampleped) peddf <- ped(ped) - peddf[1, "family"] <- "2" + peddf[1, "famid"] <- "2" ped(ped) <- peddf - expect_equal(ped(ped)[1, "family"], "2") + expect_equal(ped(ped)[1, "famid"], "2") }) diff --git a/tests/testthat/test-plot.R b/tests/testthat/test-plot.R index 8019bb07..4839d59b 100644 --- a/tests/testthat/test-plot.R +++ b/tests/testthat/test-plot.R @@ -53,7 +53,7 @@ test_that("Pedigree other test", { test_that("Pedigree fails to line up", { # Here is a case where the levels fail to line up properly data(sampleped) - df1 <- sampleped[sampleped$family == "1", ] + df1 <- sampleped[sampleped$famid == "1", ] ped1 <- Pedigree(df1) vdiffr::expect_doppelganger("ped1", function() plot(ped1) diff --git a/tests/testthat/test-shrink.R b/tests/testthat/test-shrink.R index 039cf584..aef872f8 100644 --- a/tests/testthat/test-shrink.R +++ b/tests/testthat/test-shrink.R @@ -9,7 +9,7 @@ test_that("Pedigree shrink works", { ) ) ped_mb <- generate_colors(ped_mb, col_aff = "cancer", add_to_scale = FALSE) - mn2 <- ped_mb[ped_mb$ped$family == "5", ] + mn2 <- ped_mb[ped_mb$ped$famid == "5", ] ## this Pedigree as one person with cancer. The Pedigree is not informative @@ -35,7 +35,7 @@ test_that("Pedigree shrink works", { ), sep = "_") ) - mn8 <- ped_mb[ped_mb$ped$family == "8", ] + mn8 <- ped_mb[ped_mb$ped$famid == "8", ] vdiffr::expect_doppelganger("Pedigree shrink 2", function() plot(mn8) ) @@ -59,7 +59,7 @@ test_that("Pedigree shrink error if missing info", { ## use sampleped from the package data("sampleped") ped <- Pedigree(sampleped) - ped2 <- ped[ped(ped, "family") == "2", ] + ped2 <- ped[ped(ped, "famid") == "2", ] ped2$ped$sex[c(13, 12)] <- c("unknown", "terminated") ## set 2nd col of affected to NA @@ -71,7 +71,7 @@ test_that("Pedigree shrink avail test", { ## use sampleped from the package data("sampleped") ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "family") == "1", ] + ped1 <- ped[ped(ped, "famid") == "1", ] set.seed(10) ped1_s_av_32 <- shrink(ped = ped1, max_bits = 32) @@ -97,9 +97,9 @@ test_that("Pedigree shrink avail test", { test_that("Pedigree shrink with character", { ## use sampleped from the package data("sampleped") - sampleped$family[sampleped$family == 1] <- "A" + sampleped$famid[sampleped$famid == 1] <- "A" ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "family") == "A", ] + ped1 <- ped[ped(ped, "famid") == "A", ] set.seed(100) ped1_s_av_32 <- shrink(ped = ped1, max_bits = 32) @@ -122,7 +122,7 @@ test_that("Pedigree shrink with character", { test_that("Shrink works", { data("sampleped") ped <- Pedigree(sampleped) - ped2 <- ped[ped(ped, "family") == "2", ] + ped2 <- ped[ped(ped, "famid") == "2", ] ped2_s <- shrink(ped2) vdiffr::expect_doppelganger("Whole ped", diff --git a/tests/testthat/test-unavail.R b/tests/testthat/test-unavail.R index 1ca6c1a0..a327f1b0 100644 --- a/tests/testthat/test-unavail.R +++ b/tests/testthat/test-unavail.R @@ -21,8 +21,8 @@ test_that("Unrelated detection works", { ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "family") == 1, ] - ped2 <- ped[ped(ped, "family") == 2, ] + ped1 <- ped[ped(ped, "famid") == 1, ] + ped2 <- ped[ped(ped, "famid") == 2, ] set.seed(10) expect_equal(unrelated(ped1), diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 67da458e..6bf556e7 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -98,7 +98,7 @@ in the dataset, and create a *Pedigree* object using the This function automaticaly detect the necessary columns in the dataframe. If necessary you can modify the columns names with *cols_ren*. To create a Pedigree object, with multiple families, the dataframe just need -a family column in the *ped_df* dataframe. When this is the case, the family +a family column in the *ped_df* dataframe. When this is the case, the famid column will be pasted to the id of each individuals separated by an underscore to create a unique id for each individual in the Pedigree object. @@ -119,7 +119,7 @@ The summary method prints a more detailed summary of the Pedigree. Finally the plot method displays the Pedigree. ```{r, ped1} -ped1 <- ped[ped(ped, "family") == "1", ] +ped1 <- ped[ped(ped, "famid") == "1", ] print(ped1) summary(ped1) plot(ped1) @@ -150,7 +150,7 @@ delete the specified subject (in this case, $209$). Reassign this code to ~datped22~ to drop the specified subject entirely. ```{r, datped2} -datped2 <- sampleped[sampleped$family == 2, ] +datped2 <- sampleped[sampleped$famid == 2, ] datped2[datped2$id %in% 203, "sex"] <- 2 datped2 <- datped2[-which(datped2$id %in% 209), ] ``` @@ -263,7 +263,7 @@ Pedigree 2, subjects 1 and 2, are deceased. The $status$ indicator is used to cross out the individuals in the Pedigree plot. ```{r, status} -df2 <- sampleped[sampleped$family == 2, ] +df2 <- sampleped[sampleped$famid == 2, ] names(df2) df2$status <- c(1, 1, rep(0, 12)) ped2 <- Pedigree(df2) @@ -401,7 +401,7 @@ subject $113$ from the plot. The basic plot of Pedigree 1 is shown in the figure below. ```{r, plotped1} -df1 <- sampleped[sampleped$family == 1, ] +df1 <- sampleped[sampleped$famid == 1, ] relate1 <- data.frame( indId1 = 113, indId2 = 114, diff --git a/vignettes/pedigree_constructor.Rmd b/vignettes/pedigree_constructor.Rmd index ea158a54..231601e2 100644 --- a/vignettes/pedigree_constructor.Rmd +++ b/vignettes/pedigree_constructor.Rmd @@ -57,7 +57,7 @@ It accepts the following input and 1 = affected. - $status$ Optional, a numeric variable with 0 = censored and 1 = dead. - - $family$ Optional, a numeric or character vector of family + - $famid$ Optional, a numeric or character vector of family identifiers. - $steril$ Optional, a numeric variable with 0 = not steril and 1 = steril. @@ -66,7 +66,7 @@ It accepts the following input - $indId2$ identifier values of the subject pairs - $code$ relationship codification : 1 = Monozygotic twin, 2=Dizygotic twin, 3= twin of unknown zygosity, 4 = Spouse. - - $family$ Optional, a numeric or character vector of family + - $famid$ Optional, a numeric or character vector of family identifiers. - **cols_ren_ped** Optional, a named list for the renaming of the **ped_df** dataframe @@ -113,7 +113,7 @@ correctly. If the normalisation process is selected `normalize = TRUE`, then both dataframe will be checked by their dedicated normalization function. It will ensure that all modalities are written correctly and set up the -right way. If a $family$ column is present in the dataframe, then it will +right way. If a $famid$ column is present in the dataframe, then it will be aggregated to the id of each individual and separated by an ''_'' to ensure the uniqueness of the individuals identifiers. From 7ab2c609ce9e54a08c04d523288e51568fcd1caa Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 30 Oct 2023 18:19:11 +0100 Subject: [PATCH 016/111] Add pedigree constructor and character_integer union class --- R/AllAccessors.R | 18 +++ R/AllClass.R | 4 + R/AllConstructor.R | 310 ++++++++++++++++++++++++++++++++++++++++++++- R/Pedigree.R | 309 -------------------------------------------- 4 files changed, 330 insertions(+), 311 deletions(-) delete mode 100644 R/Pedigree.R diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 21ef3d37..f7aceafa 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -41,9 +41,15 @@ setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, val #' @rdname Ped #' @aliases famid,Ped-method #' @export +setGeneric("famid", function(x) { + standardGeneric("famid") +}) setMethod("famid", signature(x = "Ped"), function(x) { x@famid }) +setMethod("famid", signature(x = "Rel"), function(x) { + x@famid +}) #' Id getter of Ped object #' @@ -54,6 +60,9 @@ setMethod("famid", signature(x = "Ped"), function(x) { #' @rdname Ped #' @aliases id,Ped-method #' @export +setGeneric("id", function(x) { + standardGeneric("id") +}) setMethod("id", signature(x = "Ped"), function(x) { x@id }) @@ -67,6 +76,9 @@ setMethod("id", signature(x = "Ped"), function(x) { #' @rdname Ped #' @aliases dadid,Ped-method #' @export +setGeneric("dadid", function(x) { + standardGeneric("dadid") +}) setMethod("dadid", signature(x = "Ped"), function(x) { x@dadid }) @@ -80,6 +92,9 @@ setMethod("dadid", signature(x = "Ped"), function(x) { #' @rdname Ped #' @aliases momid,Ped-method #' @export +setGeneric("momid", function(x) { + standardGeneric("momid") +}) setMethod("momid", signature(x = "Ped"), function(x) { x@momid }) @@ -93,6 +108,9 @@ setMethod("momid", signature(x = "Ped"), function(x) { #' @rdname Ped #' @aliases sex,Ped-method #' @export +setGeneric("sex", function(x) { + standardGeneric("sex") +}) setMethod("sex", signature(x = "Ped"), function(x) { x@sex }) diff --git a/R/AllClass.R b/R/AllClass.R index 045a74d2..1401a311 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -1,6 +1,10 @@ #' @importFrom S4Vectors parallel_slot_names NULL +#### Class integer / character #### + +setClassUnion("character_OR_integer", c("character", "integer")) + #### Hints Class #### #' S4 class to represent a hints object. diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 9c202220..cd95ba35 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -86,17 +86,21 @@ setMethod("Ped", "data.frame", #' @docType methods #' @aliases Ped,character #' @rdname Ped -setMethod("Ped", "character", +setMethod("Ped", "character_OR_integer", function( obj, sex, dadid, momid, famid = NA, steril = NA, status = NA, avail = NA, - affected = NA + affected = NA, missid = NA_character_ ) { famid <- na_to_length(famid, obj, NA_character_) id <- as.character(obj) dadid <- as.character(dadid) momid <- as.character(momid) + id[id %in% missid] <- NA_character_ + dadid[dadid %in% missid] <- NA_character_ + momid[momid %in% missid] <- NA_character_ + sex <- sex_to_factor(sex) steril <- na_to_length(steril, id, NA_real_) @@ -185,4 +189,306 @@ setMethod("Rel", "character", ) rel } +) + + +#### S4 Pedigree constructor #### +#' Create a Pedigree object +#' +#' This constructor help to create a `Pedigree` object from +#' different `data.frame` or a set of vectors. +#' +#' If any errors are found in the data, the function will return +#' the data.frame with the errors for the Pedigree and the relationship +#' data.frame. +#' +#' @inheritParams align +#' @param obj A vector of the individuals identifiers or a data.frame +#' with the individuals informations. +#' The minimum columns required are `indID`, `fatherId`, `motherId` and +#' `gender`. +#' The `famid` column can also be used to specify the family of the +#' individuals and will be merge to the `id` field separated by an +#' underscore. +#' The following columns are also recognize `sterilisation`, `available`, +#' `vitalStatus`, `affection`. The four of them will be transformed with the +#' [vect_to_binary()] function when the normalisation is selected and will +#' be set respectively to `steril`, `avail`, +#' `status` and `affected`. +#' If you do not use the normalisation, the columns will be checked to +#' be `0` or `1`. +#' They respectively correspond to the sterilisation status, +#' the availability status, the death status and the affection status +#' of the individuals. The values recognized for those columns are `1` or +#' `0`. +#' @param relation A matrix or a data.frame with 3 required columns +#' (i.e. id1, id2, code) specifying special relationship between pairs +#' of individuals. +#' #' The code values are: +#' - `1` = Monozygotic twin +#' - `2` = Dizygotic twin +#' - `3` = twin of unknown zygosity +#' - `4` = Spouse +#' +#' If `famid` is given in the call to create Pedigrees, then +#' `famid` needs to be in the last column of `relation`. +#' @param cols_ren_ped A named list with the columns to rename for the +#' pedigree dataframe. +#' @param cols_ren_rel A named list with the columns to rename for the +#' relationship matrix. +#' @param scales A list of two data.frame with the scales to use for the +#' affection status and the other one for the border color (e.g availability). +#' @param normalize A logical to know if the data should be normalised. +#' @param ... Other arguments to pass to the function `generate_colors`. +#' @return A Pedigree object. +#' @examples +#' data(sampleped) +#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +#' @export +setGeneric("Pedigree", signature = "obj", + function(obj, ...) standardGeneric("Pedigree") +) + +#' @export +#' @rdname Pedigree +#' @aliases Pedigree,numeric +#' @docType methods +setMethod("Pedigree", "numeric", function(obj, ... +) { + Pedigree(as.character(obj), ...) +}) + +#' @export +#' @rdname Pedigree +#' @aliases Pedigree,character +#' @docType methods +#' @inheritParams is_parent +#' @inheritParams sex_to_factor +#' @inheritParams family_check +#' @inheritParams is_informative +#' @param status A numeric vector of vital status of each individual +#' (e.g., genotyped). The values are: +#' - `0` : alive +#' - `1` : dead +#' - `NA` : vital status not known +#' @param steril A numeric vector of sterilisation status of each individual +#' (e.g., genotyped). The values are: +#' - `0` : not sterilised +#' - `1` : sterilised +#' - `NA` : sterilisation status not known +setMethod("Pedigree", "character", function(obj, dadid, momid, + sex, famid = NA, avail = NULL, affected = NULL, status = NULL, + steril = NULL, relation = NULL, + missid = "0", col_aff = "affection", normalize = TRUE, ... +) { + n <- length(obj) + ## Code transferred from noweb to markdown vignette. + ## Sections from the noweb/vignettes are noted here with + ## Doc: Error and Data Checks + ## Doc: Errors1 + if (length(momid) != n) stop("Mismatched lengths, id and momid") + if (length(dadid) != n) stop("Mismatched lengths, id and momid") + if (length(sex) != n) stop("Mismatched lengths, id and sex") + if (length(steril) != n & !is.null(steril)) { + stop("Mismatched lengths, id and steril") + } + + if (length(avail) != n & !is.null(avail)) { + stop("Mismatched lengths, id and avail") + } + if (length(status) != n & !is.null(status)) { + stop("Mismatched lengths, id and status") + } + + + ped_df <- data.frame( + family = famid, + indId = obj, + fatherId = dadid, + motherId = momid, + gender = sex + ) + + if (is.null(affected)) { + ped_df$affection <- NA + } else if (any(!is.na(affected))) { + if (is.vector(affected)) { + ped_df$affection <- affected + } else if (is.data.frame(affected)) { + ped_df <- cbind(ped_df, affected) + col_aff <- colnames(affected) + } else { + stop("Affected must be a vector or a data.frame") + } + } + if (any(!is.na(avail))) { + ped_df$available <- avail + } + if (any(!is.na(status))) { + ped_df$vitalstatus <- status + } + if (any(!is.na(steril))) { + ped_df$sterilisation <- steril + } + if (is.null(relation)) { + relation <- data.frame( + id1 = character(), + id2 = character(), + code = numeric(), + family = character() + ) + } + Pedigree(ped_df, relation = relation, + missid = missid, col_aff = col_aff, ... + ) +}) + +#' @export +#' @rdname Pedigree +#' @aliases Pedigree,data.frame +#' @docType methods +setMethod("Pedigree", "data.frame", function( + obj = data.frame( + indId = character(), + fatherId = character(), + motherId = character(), + gender = numeric(), + family = character(), + available = numeric(), + vitalstatus = numeric(), + affection = numeric(), + sterilisation = numeric() + ), + relation = data.frame( + id1 = character(), + id2 = character(), + code = numeric(), + family = character() + ), + cols_ren_ped = list( + "indId" = "id", + "fatherId" = "dadid", + "motherId" = "momid", + "family" = "famid", + "gender" = "sex", + "sterilisation" = "steril", + "affection" = "affected", + "available" = "avail", + "vitalstatus" = "status" + ), + cols_ren_rel = list( + "id1" = "indId1", + "id2" = "indId2" + ), + scales = list( + fill = data.frame( + order = numeric(), + column_values = character(), + column_mods = character(), + mods = numeric(), + labels = character(), + affected = logical(), + fill = character(), + density = numeric(), + angle = numeric() + ), + border = data.frame( + column = character(), + mods = numeric(), + labels = character(), + border = character() + ) + ), + hints = list( + horder = NULL, + spouse = NULL + ), + normalize = TRUE, + missid = "0", + col_aff = "affection", + ... +) { + ped_df <- obj + if (!is.data.frame(ped_df)) { + stop("ped_df must be a data.frame") + } + + if (is.matrix(relation)) { + rel_df <- data.frame( + id1 = relation[, 1], + id2 = relation[, 2], + code = relation[, 3] + ) + if (dim(relation)[2] > 3) { + rel_df$family <- relation[, 4] + } + } else if (is.data.frame(relation)) { + rel_df <- relation + } else { + stop("relation must be a matrix or a data.frame") + } + + ## Rename columns ped + old_cols <- as.vector(unlist(cols_ren_ped)) + new_cols <- names(cols_ren_ped) + cols_to_ren <- match(old_cols, names(ped_df)) + names(ped_df)[cols_to_ren[!is.na(cols_to_ren)]] <- + new_cols[!is.na(cols_to_ren)] + + ## Rename columns rel + old_cols <- as.vector(unlist(cols_ren_rel)) + new_cols <- names(cols_ren_rel) + cols_to_ren <- match(old_cols, names(rel_df)) + names(rel_df)[cols_to_ren[!is.na(cols_to_ren)]] <- + new_cols[!is.na(cols_to_ren)] + + ## Set family, id, dadid and momid to character + to_char <- c("family", "indId", "fatherId", "motherId") + to_char <- colnames(ped_df)[colnames(ped_df) %in% to_char] + ped_df[to_char] <- lapply(ped_df[to_char], as.character) + + ## Normalise the data before creating the object + if (normalize) { + ped_df <- norm_ped(ped_df, missid = missid) + rel_df <- norm_rel(rel_df, missid = missid) + } else { + cols_need <- c("id", "dadid", "momid", "sex") + cols_to_use <- c("steril", "avail", "famid", "status", "affected") + ped_df <- check_columns( + ped_df, cols_need, "", cols_to_use, + others_cols = TRUE, cols_to_use_init = TRUE + ) + cols_need <- c("id1", "id2", "code") + cols_to_use <- c("famid") + rel_df <- check_columns( + rel_df, cols_need, "", cols_to_use, cols_to_use_init = TRUE + ) + } + if (any(!is.na(ped_df$error))) { + warning("The Pedigree informations are not valid.", + "Here is the normalised Pedigree informations", + "with the identified problems" + ) + return(ped_df) + } + + if (any(!is.na(rel_df$error))) { + warning("The relationship informations are not valid.", + "Here is the normalised relationship informations", + "with the identified problems" + ) + return(rel_df) + } + + ped = Ped(ped_df) + rel = Rel(rel_df) + + ## Create the object + ped <- new("Pedigree", + ped = ped, rel = rel, + scales = scales, hints = hints + ) + + generate_colors(ped, col_aff = col_aff, ...) +} ) \ No newline at end of file diff --git a/R/Pedigree.R b/R/Pedigree.R deleted file mode 100644 index 1e328593..00000000 --- a/R/Pedigree.R +++ /dev/null @@ -1,309 +0,0 @@ -#' Create a Pedigree object -#' -#' This constructor help to create a `Pedigree` object from -#' different `data.frame` or a set of vectors. -#' -#' If any errors are found in the data, the function will return -#' the data.frame with the errors for the Pedigree and the relationship -#' data.frame. -#' -#' @inheritParams align -#' @param obj A vector of the individuals identifiers or a data.frame -#' with the individuals informations. -#' The minimum columns required are `indID`, `fatherId`, `motherId` and -#' `gender`. -#' The `famid` column can also be used to specify the family of the -#' individuals and will be merge to the `id` field separated by an -#' underscore. -#' The following columns are also recognize `sterilisation`, `available`, -#' `vitalStatus`, `affection`. The four of them will be transformed with the -#' [vect_to_binary()] function when the normalisation is selected and will -#' be set respectively to `steril`, `avail`, -#' `status` and `affected`. -#' If you do not use the normalisation, the columns will be checked to -#' be `0` or `1`. -#' They respectively correspond to the sterilisation status, -#' the availability status, the death status and the affection status -#' of the individuals. The values recognized for those columns are `1` or -#' `0`. -#' @param relation A matrix or a data.frame with 3 required columns -#' (i.e. id1, id2, code) specifying special relationship between pairs -#' of individuals. -#' #' The code values are: -#' - `1` = Monozygotic twin -#' - `2` = Dizygotic twin -#' - `3` = twin of unknown zygosity -#' - `4` = Spouse -#' -#' If `famid` is given in the call to create Pedigrees, then -#' `famid` needs to be in the last column of `relation`. -#' @param cols_ren_ped A named list with the columns to rename for the -#' pedigree dataframe. -#' @param cols_ren_rel A named list with the columns to rename for the -#' relationship matrix. -#' @param scales A list of two data.frame with the scales to use for the -#' affection status and the other one for the border color (e.g availability). -#' @param normalize A logical to know if the data should be normalised. -#' @param ... Other arguments to pass to the function `generate_colors`. -#' @return A Pedigree object. -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) -#' @export -setGeneric("Pedigree", signature = "obj", - function(obj, ...) standardGeneric("Pedigree") -) - -#' @export -#' @rdname Pedigree -#' @aliases Pedigree,numeric -#' @docType methods -setMethod("Pedigree", "numeric", function(obj, ... -) { - Pedigree(as.character(obj), ...) -}) - -#' @export -#' @rdname Pedigree -#' @aliases Pedigree,character -#' @docType methods -#' @inheritParams is_parent -#' @inheritParams sex_to_factor -#' @inheritParams family_check -#' @inheritParams is_informative -#' @param status A numeric vector of vital status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : alive -#' - `1` : dead -#' - `NA` : vital status not known -#' @param steril A numeric vector of sterilisation status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : not sterilised -#' - `1` : sterilised -#' - `NA` : sterilisation status not known -setMethod("Pedigree", "character", function(obj, dadid, momid, - sex, famid = NA, avail = NULL, affected = NULL, status = NULL, - steril = NULL, relation = NULL, - missid = "0", col_aff = "affection", normalize = TRUE, ... -) { - n <- length(obj) - ## Code transferred from noweb to markdown vignette. - ## Sections from the noweb/vignettes are noted here with - ## Doc: Error and Data Checks - ## Doc: Errors1 - if (length(momid) != n) stop("Mismatched lengths, id and momid") - if (length(dadid) != n) stop("Mismatched lengths, id and momid") - if (length(sex) != n) stop("Mismatched lengths, id and sex") - if (length(steril) != n & !is.null(steril)) { - stop("Mismatched lengths, id and steril") - } - - if (length(avail) != n & !is.null(avail)) { - stop("Mismatched lengths, id and avail") - } - if (length(status) != n & !is.null(status)) { - stop("Mismatched lengths, id and status") - } - - - ped_df <- data.frame( - family = famid, - indId = obj, - fatherId = dadid, - motherId = momid, - gender = sex - ) - - if (is.null(affected)) { - ped_df$affection <- NA - } else if (any(!is.na(affected))) { - if (is.vector(affected)) { - ped_df$affection <- affected - } else if (is.data.frame(affected)) { - ped_df <- cbind(ped_df, affected) - col_aff <- colnames(affected) - } else { - stop("Affected must be a vector or a data.frame") - } - } - if (any(!is.na(avail))) { - ped_df$available <- avail - } - if (any(!is.na(status))) { - ped_df$vitalstatus <- status - } - if (any(!is.na(steril))) { - ped_df$sterilisation <- steril - } - if (is.null(relation)) { - relation <- data.frame( - id1 = character(), - id2 = character(), - code = numeric(), - family = character() - ) - } - Pedigree(ped_df, relation = relation, - missid = missid, col_aff = col_aff, ... - ) -}) - -#' @export -#' @rdname Pedigree -#' @aliases Pedigree,data.frame -#' @docType methods -setMethod("Pedigree", "data.frame", function( - obj = data.frame( - indId = character(), - fatherId = character(), - motherId = character(), - gender = numeric(), - family = character(), - available = numeric(), - vitalstatus = numeric(), - affection = numeric(), - sterilisation = numeric() - ), - relation = data.frame( - id1 = character(), - id2 = character(), - code = numeric(), - family = character() - ), - cols_ren_ped = list( - "indId" = "id", - "fatherId" = "dadid", - "motherId" = "momid", - "gender" = "sex", - "sterilisation" = "steril", - "affection" = "affected", - "available" = "avail", - "vitalstatus" = "status" - ), - cols_ren_rel = list( - "id1" = "indId1", - "id2" = "indId2" - ), - scales = list( - fill = data.frame( - order = numeric(), - column_values = character(), - column_mods = character(), - mods = numeric(), - labels = character(), - affected = logical(), - fill = character(), - density = numeric(), - angle = numeric() - ), - border = data.frame( - column = character(), - mods = numeric(), - labels = character(), - border = character() - ) - ), - hints = list( - horder = NULL, - spouse = NULL - ), - normalize = TRUE, - missid = "0", - col_aff = "affection", - ... -) { - ped_df <- obj - if (!is.data.frame(ped_df)) { - stop("ped_df must be a data.frame") - } - - if (is.matrix(relation)) { - rel_df <- data.frame( - id1 = relation[, 1], - id2 = relation[, 2], - code = relation[, 3] - ) - if (dim(relation)[2] > 3) { - rel_df$family <- relation[, 4] - } - } else if (is.data.frame(relation)) { - rel_df <- relation - } else { - stop("relation must be a matrix or a data.frame") - } - - ## Rename columns ped - old_cols <- as.vector(unlist(cols_ren_ped)) - new_cols <- names(cols_ren_ped) - cols_to_ren <- match(old_cols, names(ped_df)) - names(ped_df)[cols_to_ren[!is.na(cols_to_ren)]] <- - new_cols[!is.na(cols_to_ren)] - - ## Rename columns rel - old_cols <- as.vector(unlist(cols_ren_rel)) - new_cols <- names(cols_ren_rel) - cols_to_ren <- match(old_cols, names(rel_df)) - names(rel_df)[cols_to_ren[!is.na(cols_to_ren)]] <- - new_cols[!is.na(cols_to_ren)] - - ## Set family, id, dadid and momid to character - to_char <- c("family", "indId", "fatherId", "motherId") - to_char <- colnames(ped_df)[colnames(ped_df) %in% to_char] - ped_df[to_char] <- lapply(ped_df[to_char], as.character) - - ## Normalise the data before creating the object - if (normalize) { - ped_df <- norm_ped(ped_df, missid = missid) - rel_df <- norm_rel(rel_df, missid = missid) - } else { - cols_need <- c("id", "dadid", "momid", "sex") - cols_to_use <- c("steril", "avail", "family", "status", "affected") - ped_df <- check_columns( - ped_df, cols_need, "", cols_to_use, - others_cols = TRUE, cols_to_use_init = TRUE - ) - cols_need <- c("id1", "id2", "code") - cols_to_use <- c("family") - rel_df <- check_columns( - rel_df, cols_need, "", cols_to_use, cols_to_use_init = TRUE - ) - } - if (any(!is.na(ped_df$error))) { - warning("The Pedigree informations are not valid.", - "Here is the normalised Pedigree informations", - "with the identified problems" - ) - return(ped_df) - } - - if (any(!is.na(rel_df$error))) { - warning("The relationship informations are not valid.", - "Here is the normalised relationship informations", - "with the identified problems" - ) - return(rel_df) - } - - cols <- colnames(ped_df) - col_ped <- c("id", "dadid", "momid", "sex", "famid") - col_deriv <- c("affected", "kin", "useful", "avail", "steril", "status") - col_rel <- c("id1", "id2", "code", "famid") - col_meta <- cols[!(cols %in% c(col_ped, col_deriv))] - ped <- ped_df[, col_ped] - deriv <- ped_df[, col_deriv] - meta <- ped_df[, col_meta] - rel <- rel_df[, col_rel] - - rownames(ped) <- ped_df$id - rownames(deriv) <- ped_df$id - rownames(meta) <- ped_df$id - - ## Create the object - ped <- new("Pedigree", - ped = ped, deriv = deriv, meta = meta, rel = rel, - scales = scales, hints = hints - ) - - generate_colors(ped, col_aff = col_aff, ...) -} -) From e39b4e7ce451ea9722b6cc33ffd1adab85d625af Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 30 Oct 2023 18:19:33 +0100 Subject: [PATCH 017/111] Add bit_size of ped object --- R/bit_size.R | 9 +++++---- tests/testthat/test-bitSize.R | 7 ++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/R/bit_size.R b/R/bit_size.R index 23eeeaed..0fb048b2 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -37,12 +37,12 @@ setGeneric("bit_size", signature = "obj", #' @docType methods #' @aliases bit_size,character #' @rdname bit_size -setMethod("bit_size", "character", function(obj, momid, missid = "0") { +setMethod("bit_size", "character_OR_integer", function(obj, momid, missid = "0") { dadid <- obj if (length(dadid) != length(momid)) { stop("dadid and momid should have the same length") } - founder <- dadid == missid & momid == missid + founder <- dadid %in% missid & momid %in% missid ped_size <- length(dadid) n_founder <- sum(founder) n_non_founder <- ped_size - n_founder @@ -66,7 +66,8 @@ setMethod("bit_size", "Pedigree", #' @aliases bit_size,Ped #' @rdname bit_size setMethod("bit_size", "Ped", - function(obj, missid = "0") { - bit_size(obj@dadid, obj@momid, missid) + function(obj, missid = NA_character_) { + print(summary(obj)) + bit_size(dadid(obj), momid(obj), missid) } ) \ No newline at end of file diff --git a/tests/testthat/test-bitSize.R b/tests/testthat/test-bitSize.R index a6e8a682..ad6d9acb 100644 --- a/tests/testthat/test-bitSize.R +++ b/tests/testthat/test-bitSize.R @@ -4,9 +4,14 @@ test_that("bit_size works", { "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", "gender" = "sex", "family" = "famid" )) - bs_ped <- bit_size(minnped, missid = "0") + bs_pedi <- bit_size(minnped, missid = "0") bs_char <- bit_size(as.character(minnbreast$fatherid), as.character(minnbreast$motherid), missid = "0" ) + + ped <- with(minnbreast, Ped(id, sex, fatherid, motherid, missid = "0")) + bs_ped <- bit_size(ped) + expect_equal(bs_ped, bs_char) + expect_equal(bs_pedi, bs_char) }) From 367760d4c9ca630156c8cdbd016e2f6f5882faaa Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 30 Oct 2023 18:30:36 +0100 Subject: [PATCH 018/111] Change default missid to NA_character_ --- R/AllConstructor.R | 4 ++-- R/AllValidity.R | 2 +- R/align.R | 4 ++-- R/bit_size.R | 4 ++-- R/find_avail_noninform.R | 4 ++-- R/find_unavailable.R | 4 ++-- R/fix_parents.R | 16 ++++++++-------- R/is_informative.R | 4 ++-- R/min_dist_inf.R | 2 +- R/norm_data.R | 16 ++++++++-------- R/num_child.R | 10 +++++----- R/trim.R | 2 +- R/useful_inds.R | 4 ++-- R/utils.R | 12 ++++++------ devel/documentation/arguments.md | 10 +++++----- tests/testthat/test-bitSize.R | 6 +++--- tests/testthat/test-fix_parents.R | 6 +++--- tests/testthat/test-norm_data.R | 2 +- 18 files changed, 56 insertions(+), 56 deletions(-) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index cd95ba35..ffa000f4 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -279,7 +279,7 @@ setMethod("Pedigree", "numeric", function(obj, ... setMethod("Pedigree", "character", function(obj, dadid, momid, sex, famid = NA, avail = NULL, affected = NULL, status = NULL, steril = NULL, relation = NULL, - missid = "0", col_aff = "affection", normalize = TRUE, ... + missid = NA_character_, col_aff = "affection", normalize = TRUE, ... ) { n <- length(obj) ## Code transferred from noweb to markdown vignette. @@ -404,7 +404,7 @@ setMethod("Pedigree", "data.frame", function( spouse = NULL ), normalize = TRUE, - missid = "0", + missid = NA_character_, col_aff = "affection", ... ) { diff --git a/R/AllValidity.R b/R/AllValidity.R index b1064d5e..fa22db99 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -189,7 +189,7 @@ is_valid_ped <- function(object) { object@id, c( missid, "", - paste(missid, famid, sep = "_"), + paste(as.character(missid), famid, sep = "_"), paste("", famid, sep = "_") ), "id", present = FALSE diff --git a/R/align.R b/R/align.R index a9878ad1..66fcbf9c 100644 --- a/R/align.R +++ b/R/align.R @@ -124,14 +124,14 @@ setGeneric("align", signature = "obj", setMethod("align", "Pedigree", function(obj, packed = TRUE, width = 10, - align = TRUE, hints = obj@hints, missid = "0" + align = TRUE, hints = obj@hints, missid = "NA_character_" ) { align(ped(obj), packed, width, align, hints, missid) }) align <- function(ped, packed = TRUE, width = 10, - align = TRUE, hints = NULL, missid = "0" + align = TRUE, hints = NULL, missid = "NA_character_" ) { famlist <- unique(ped(ped, "famid")) if (length(famlist) > 1) { diff --git a/R/bit_size.R b/R/bit_size.R index 0fb048b2..92078846 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -37,7 +37,7 @@ setGeneric("bit_size", signature = "obj", #' @docType methods #' @aliases bit_size,character #' @rdname bit_size -setMethod("bit_size", "character_OR_integer", function(obj, momid, missid = "0") { +setMethod("bit_size", "character_OR_integer", function(obj, momid, missid = NA_character_) { dadid <- obj if (length(dadid) != length(momid)) { stop("dadid and momid should have the same length") @@ -57,7 +57,7 @@ setMethod("bit_size", "character_OR_integer", function(obj, momid, missid = "0") #' @aliases bit_size,Pedigree #' @rdname bit_size setMethod("bit_size", "Pedigree", - function(obj, missid = "0") { + function(obj, missid = NA_character_) { bit_size(ped(obj), missid) } ) diff --git a/R/find_avail_noninform.R b/R/find_avail_noninform.R index ecd887bd..9e644b9a 100644 --- a/R/find_avail_noninform.R +++ b/R/find_avail_noninform.R @@ -24,7 +24,7 @@ #' #' @seealso [shrink()] #' @export -find_avail_noninform <- function(ped, avail = ped(ped, "avail"), missid = "0") { +find_avail_noninform <- function(ped, avail = ped(ped, "avail"), missid = NA_character_) { ## trim persons who are available but not informative b/c not parent by ## setting their availability to FALSE, then call find_unavailable() JPS ## 3/10/14 add strings check in case of char ids @@ -39,7 +39,7 @@ find_avail_noninform <- function(ped, avail = ped(ped, "avail"), missid = "0") { fa <- ped_df$dadid[i] mo <- ped_df$momid[i] if (avail[ped_df$id == fa] && avail[ped_df$id == mo] || - fa == missid || mo == missid) { + fa %in% missid || mo %in% missid) { ped_df$avail[i] <- FALSE } } diff --git a/R/find_unavailable.R b/R/find_unavailable.R index 1aa273f9..b85f0ce3 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -124,11 +124,11 @@ exclude_stray_marryin <- function(id, dadid, momid) { #' - id Vector of subject identifiers #' - dadid Vector of father identifiers #' - momid Vector of mother identifiers -exclude_unavail_founders <- function(id, dadid, momid, avail, missid = "0") { +exclude_unavail_founders <- function(id, dadid, momid, avail, missid = NA_character_) { n_old <- length(id) ## zed = TRUE if both parents are present - zed <- dadid != missid & momid != missid + zed <- (!dadid %in% missid) & (!momid %in% missid) ## concat ids to represent marriages. ## Bug if there is ":" in char subj ids marriage <- paste(dadid[zed], momid[zed], sep = ":") diff --git a/R/fix_parents.R b/R/fix_parents.R index 9698b555..5140017a 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -50,7 +50,7 @@ NULL #' ) #' test1newmom <- with(test1char, fix_parents(id, father, mother, #' sex, -#' missid = '0' +#' missid = NA_character_ #' )) #' newped <- Pedigree(test1newmom) #' as.data.frame(newped) @@ -65,7 +65,7 @@ setGeneric("fix_parents", signature = "obj", #' @rdname fix_parents #' @aliases fix_parents,character setMethod("fix_parents", "character", function( - obj, dadid, momid, sex, famid = NULL, missid = "0" + obj, dadid, momid, sex, famid = NULL, missid = NA_character_ ) { ## fix sex of parents add parents that are missing n <- length(obj) @@ -96,7 +96,7 @@ setMethod("fix_parents", "character", function( } else if (mean(sex == 3) > 0.25) { warning("More than 25% of the gender values are 'unknown'") } - if (any(is.na(id) | id == missid)) { + if (any(is.na(id) | id %in% missid)) { stop("Missing value for the id variable") } @@ -108,8 +108,8 @@ setMethod("fix_parents", "character", function( stop("A blank or empty string is not allowed as the id variable") } - nofather <- (is.na(dadid) | dadid == missid) - nomother <- (is.na(momid) | momid == missid) + nofather <- (is.na(dadid) | dadid %in% missid) + nomother <- (is.na(momid) | momid %in% missid) if (any(duplicated(id))) { duplist <- id[duplicated(id)] msg_nb <- min(length(duplist), 6) @@ -183,7 +183,7 @@ setMethod("fix_parents", "character", function( #' @export #' @rdname fix_parents setMethod("fix_parents", "data.frame", function( - obj, delete = FALSE, filter = NULL, missid = "0" + obj, delete = FALSE, filter = NULL, missid = NA_character_ ) { cols_needed <- c("id", "dadid", "momid", "sex", filter) df <- check_columns(obj, cols_needed, NULL, "famid", others_cols = TRUE, @@ -202,8 +202,8 @@ setMethod("fix_parents", "data.frame", function( # One of the parents doesn't not have a line in id dad_present <- match(df$dadid, df$id, nomatch = missid) mom_present <- match(df$momid, df$id, nomatch = missid) - df[dad_present == missid | - mom_present == missid, c("momid", "dadid") + df[dad_present %in% missid | + mom_present %in% missid, c("momid", "dadid") ] <- missid } df_fix <- fix_parents( diff --git a/R/is_informative.R b/R/is_informative.R index f776b698..c3fbedd2 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -58,7 +58,7 @@ setGeneric("is_informative", signature = "obj", #' @aliases is_informative,character #' @docType methods setMethod("is_informative", "character", function( - obj, avail, affected, informative = "AvAf", missid = "0" + obj, avail, affected, informative = "AvAf", missid = NA_character_ ) { id <- obj # Selection of all informative individuals depending of the informative @@ -96,7 +96,7 @@ setMethod("is_informative", "character", function( #' @docType methods #' @param reset If `TRUE`, the `id_inf` column is reset setMethod("is_informative", "Pedigree", function( - obj, col_aff = NULL, informative = "AvAf", missid = "0", reset = FALSE + obj, col_aff = NULL, informative = "AvAf", missid = NA_character_, reset = FALSE ) { ped <- obj deriv(ped, "affected") <- NA diff --git a/R/min_dist_inf.R b/R/min_dist_inf.R index b14a882a..6c9a5e23 100644 --- a/R/min_dist_inf.R +++ b/R/min_dist_inf.R @@ -79,7 +79,7 @@ setMethod("min_dist_inf", "character", function(obj, #' @docType methods #' @param reset If TRUE, the `kin` and if `id_inf` columns is reset setMethod("min_dist_inf", "Pedigree", function(obj, - col_aff = NULL, informative = "AvAf", missid = "0", reset = FALSE, ... + col_aff = NULL, informative = "AvAf", missid = NA_character_, reset = FALSE, ... ) { ped <- is_informative(obj, col_aff, informative = informative, missid, reset diff --git a/R/norm_data.R b/R/norm_data.R index 2c98964c..5ef2cabd 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -13,7 +13,7 @@ NULL #' @inheritParams is_parent #' @keywords internal #' @return The id with the family id merged -prefix_famid <- function(famid, id, missid = "0") { +prefix_famid <- function(famid, id, missid = NA_character_) { if (length(famid) > 1 && length(famid) != length(id)) { stop("famid and id must have the same length.") } @@ -22,7 +22,7 @@ prefix_famid <- function(famid, id, missid = "0") { is.na(famid) | is.null(famid), "", paste0(as.character(famid), "_") ) - ifelse(id == missid, missid, paste0(pre_famid, as.character(id))) + ifelse(id %in% missid, missid, paste0(pre_famid, as.character(id))) } #' Normalise dataframe @@ -77,7 +77,7 @@ prefix_famid <- function(famid, id, missid = "0") { #' norm_ped(df) #' @export norm_ped <- function( - ped_df, na_strings = c("NA", ""), missid = "0", try_num = FALSE + ped_df, na_strings = c("NA", ""), missid = NA_character_, try_num = FALSE ) { err_cols <- c( "sexErrMoFa", "sexErrFa", "sexErrMo", "sexErrTer", "sexNA", @@ -199,8 +199,8 @@ norm_ped <- function( ] <- "selfIdDuplicated" err$idErrOwnParent[ped_df$id %in% id_own_parent] <- "isItsOwnParent" err$idErrBothParent[ - (ped_df$dadid == missid & ped_df$momid != missid) | - (ped_df$dadid != missid & ped_df$momid == missid) + (ped_df$dadid %in% missid & (!ped_df$momid %in% missid)) | + ((!ped_df$dadid %in% missid) & ped_df$momid %in% missid) ] <- "oneParentMissing" ## Unite all id errors in one column @@ -280,7 +280,7 @@ norm_ped <- function( #' #' @return A dataframe with the errors identified #' @export -norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = "0") { +norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { #### Check columns #### err_cols <- c("codeErr", "sameIdErr", "id1Err", "id2Err", "error") err <- data.frame(matrix(NA, nrow = nrow(rel_df), ncol = length(err_cols))) @@ -311,8 +311,8 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = "0") { ## Check for non null ids len1 <- nchar(rel_df$id1) len2 <- nchar(rel_df$id2) - err$id1Err[is.na(len1) | len1 == missid] <- "indId1length0" - err$id2Err[is.na(len2) | len2 == missid] <- "indId2length0" + err$id1Err[is.na(len1) | len1 %in% missid] <- "indId1length0" + err$id2Err[is.na(len2) | len2 %in% missid] <- "indId2length0" ## Compute id with family id rel_df$famid <- rel_df$family diff --git a/R/num_child.R b/R/num_child.R index cee7fa5f..4f04fc01 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -41,7 +41,7 @@ setGeneric("num_child", signature = "obj", #' @aliases num_child,character #' @docType methods setMethod("num_child", "character", function(obj, dadid, momid, - rel_df = NULL, missid = "0" + rel_df = NULL, missid = NA_character_ ) { id <- obj @@ -65,8 +65,8 @@ setMethod("num_child", "character", function(obj, dadid, momid, df <- data.frame(id, dadid, momid, stringsAsFactors = FALSE) - spouse_rel <- unique(df[df$dadid != missid & - df$momid != missid, c("dadid", "momid") + spouse_rel <- unique(df[(!df$dadid %in% missid) & + (!df$momid %in% missid), c("dadid", "momid") ] ) colnames(spouse_rel) <- c("id1", "id2") @@ -84,12 +84,12 @@ setMethod("num_child", "character", function(obj, dadid, momid, spouse_rel$idmax <- pmax(spouse_rel$id1, spouse_rel$id2) spouse_rel <- unique(spouse_rel[c("idmin", "idmax")]) - dad_child <- df[df$dadid != missid, c("dadid", "id")] %>% + dad_child <- df[(!df$dadid %in% missid), c("dadid", "id")] %>% group_by(dadid) %>% summarise(child = list(id)) %>% mutate(num_child_dir = lengths(child)) %>% rename(id = dadid) - mom_child <- df[df$momid != missid, c("id", "momid")] %>% + mom_child <- df[(!df$momid %in% missid), c("id", "momid")] %>% group_by(momid) %>% summarise(child = list(id)) %>% mutate(num_child_dir = lengths(child)) %>% diff --git a/R/trim.R b/R/trim.R index 8531bd2d..e7948d46 100644 --- a/R/trim.R +++ b/R/trim.R @@ -14,7 +14,7 @@ #' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' trim(ped1, "1_101") #' @export -trim <- function(ped, id_rm, missid = "0") { +trim <- function(ped, id_rm, missid = NA_character_) { ## trim subjects from a Pedigree who match the removeID trim relation ## matrix as well rmidx <- match(id_rm, ped(ped, "id")) diff --git a/R/useful_inds.R b/R/useful_inds.R index 1e5bc576..554a7a86 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -40,7 +40,7 @@ setGeneric("useful_inds", signature = "obj", #' @aliases useful_inds,character setMethod("useful_inds", "character", function(obj, dadid, momid, avail, affected, num_child_tot, - informative = "AvAf", keep_infos = FALSE, missid = "0" + informative = "AvAf", keep_infos = FALSE, missid = NA_character_ ) { id <- obj @@ -87,7 +87,7 @@ setMethod("useful_inds", "character", #' @param reset Boolean to indicate if the `useful` column should be reset setMethod("useful_inds", "Pedigree", function(obj, informative = "AvAf", keep_infos = FALSE, - missid = "0", reset = FALSE + missid = NA_character_, reset = FALSE ) { cols_needed <- c( "avail", "affected", "num_child_tot" diff --git a/R/utils.R b/R/utils.R index 01bd040f..06ce10be 100644 --- a/R/utils.R +++ b/R/utils.R @@ -162,13 +162,13 @@ check_num_na <- function(var, na_as_num = TRUE) { #' @param missid The missing identifier value. Founders are the individuals with #' no father and no mother in the Pedigree #' (i.e. `dadid` and `momid` equal to the value of this variable). -#' The default for `missid` is `"0"`. +#' The default for `missid` is `NA_character_`. #' #' @return A vector of boolean of the same size as `id` #' with TRUE if the individual is a parent and FALSE otherwise #' #' @keywords internal -is_parent <- function(id, dadid, momid, missid = "0") { +is_parent <- function(id, dadid, momid, missid = NA_character_) { # determine subjects who are parents assume input of dadid/momid indices, # not ids @@ -176,8 +176,8 @@ is_parent <- function(id, dadid, momid, missid = "0") { stop("The length of the vectors are not the same") } - is_father <- !is.na(match(id, unique(dadid[dadid != missid]))) - is_mother <- !is.na(match(id, unique(momid[momid != missid]))) + is_father <- !is.na(match(id, unique(dadid[!dadid %in% missid]))) + is_mother <- !is.na(match(id, unique(momid[!momid %in% missid]))) is_father | is_mother } @@ -192,8 +192,8 @@ is_parent <- function(id, dadid, momid, missid = "0") { #' otherwise. #' #' @keywords internal -is_founder <- function(momid, dadid, missid = "0") { - (dadid == missid) & (momid == missid) +is_founder <- function(momid, dadid, missid = NA_character_) { + (dadid %in% missid) & (momid %in% missid) } #' Check wich individuals are disconnected diff --git a/devel/documentation/arguments.md b/devel/documentation/arguments.md index 6ec39342..c918a1cd 100644 --- a/devel/documentation/arguments.md +++ b/devel/documentation/arguments.md @@ -21,7 +21,7 @@ #' biologicals mothers. #' @param missid The missing identifier value. Founders are the individuals with #' no father and no mother in the pedigree (i.e. `dadid` and `momid` equal to the -#' value of this variable). The default for `missid` is `"0"`. +#' value of this variable). The default for `missid` is `"NA_character_"`. ## Argument of is_informative #' @param avail A numeric vector of availability status of each individual @@ -231,9 +231,9 @@ setGeneric("myfunction", signature = "obj", #' @param momid A character vector #' @param missid Character defining the missing ids #' @usage ## S4 method for signature 'character' -#' @usage myfunction(dadid, momid, missid = "0") +#' @usage myfunction(dadid, momid, missid = "NA_character_") #' @return A character vector with the parents ids -setMethod("myfunction", "character", function(dadid, momid, missid = "0") { +setMethod("myfunction", "character", function(dadid, momid, missid = "NA_character_") { paste(dadid, momid, sep = missid) }) @@ -242,10 +242,10 @@ setMethod("myfunction", "character", function(dadid, momid, missid = "0") { #' @param ped A pedigree object #' @param missid Character defining the missing ids #' @usage ## S4 method for signature 'Pedigree' -#' @usage myfunction(dadid, momid, missid = "0") +#' @usage myfunction(dadid, momid, missid = "NA_character_") #' @return A pedigree with the parents ids setMethod("myfunction", "Pedigree", - function(ped, missid = "0") { + function(ped, missid = "NA_character_") { ped$par <- myfunction(ped$dadid, ped$momid, missid) ped } diff --git a/tests/testthat/test-bitSize.R b/tests/testthat/test-bitSize.R index ad6d9acb..527f9fc7 100644 --- a/tests/testthat/test-bitSize.R +++ b/tests/testthat/test-bitSize.R @@ -4,12 +4,12 @@ test_that("bit_size works", { "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", "gender" = "sex", "family" = "famid" )) - bs_pedi <- bit_size(minnped, missid = "0") + bs_pedi <- bit_size(minnped, missid = NA_character_) bs_char <- bit_size(as.character(minnbreast$fatherid), - as.character(minnbreast$motherid), missid = "0" + as.character(minnbreast$motherid), missid = NA_character_ ) - ped <- with(minnbreast, Ped(id, sex, fatherid, motherid, missid = "0")) + ped <- with(minnbreast, Ped(id, sex, fatherid, motherid, missid = NA_character_)) bs_ped <- bit_size(ped) expect_equal(bs_ped, bs_char) diff --git a/tests/testthat/test-fix_parents.R b/tests/testthat/test-fix_parents.R index 6d492a04..ff00d285 100644 --- a/tests/testthat/test-fix_parents.R +++ b/tests/testthat/test-fix_parents.R @@ -3,7 +3,7 @@ test_that("fix_parents works with number", { materdf$dadid <- materdf$momid * 100 materdf <- as.data.frame(lapply(materdf, as.character)) expect_error(Pedigree(materdf)) - peddf <- with(materdf, fix_parents(id, dadid, momid, sex, missid = "0")) + peddf <- with(materdf, fix_parents(id, dadid, momid, sex, missid = NA_character_)) expect_no_error(Pedigree(peddf)) }) @@ -19,7 +19,7 @@ test_that("fix_parents works with character", { ) expect_error(Pedigree(test1char)) test1newmom <- with(test1char, - fix_parents(id, dadid, momid, sex, missid = "0") + fix_parents(id, dadid, momid, sex, missid = NA_character_) ) expect_no_error(Pedigree(test1newmom)) }) @@ -37,7 +37,7 @@ test_that("fix_parents works with sex errors", { datped2[, c("id", "momid", "dadid")] <- as.data.frame(lapply( datped2[, c("id", "momid", "dadid")], as.character )) - fixped2 <- with(datped2, fix_parents(id, dadid, momid, sex, missid = "0")) + fixped2 <- with(datped2, fix_parents(id, dadid, momid, sex, missid = NA_character_)) expect_no_error(Pedigree(fixped2)) }) diff --git a/tests/testthat/test-norm_data.R b/tests/testthat/test-norm_data.R index 4a405468..aea06719 100644 --- a/tests/testthat/test-norm_data.R +++ b/tests/testthat/test-norm_data.R @@ -51,7 +51,7 @@ test_that("Norm rel", { test_that("prefix_famid works", { family_id <- NULL ind_id <- c("A", "B", "0", NA) - missid <- "0" + missid <- NA_character_ a <- prefix_famid(family_id, ind_id, missid) expect_equal(a, ind_id) From 1f1dd85cc058e9af0dbc9f265fee205c371e5477 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 14:10:06 +0100 Subject: [PATCH 019/111] Add Hints class constructor --- R/AllClass.R | 13 ++--- R/AllConstructor.R | 98 ++++++++++++++++++++++++++++--------- R/AllGeneric.R | 23 +++++++-- R/AllValidity.R | 36 ++++++++------ tests/testthat/test-class.R | 5 ++ 5 files changed, 128 insertions(+), 47 deletions(-) diff --git a/R/AllClass.R b/R/AllClass.R index 1401a311..adf65273 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -12,10 +12,11 @@ setClassUnion("character_OR_integer", c("character", "integer")) #' A hints object is a list of two elements used #' to order the individuals in the pedigree plot. #' -#' @slot horder A numeric vector with one element per subject in the -#' Pedigree. It determines the relative horizontal order of subjects within a sibship, as -#' well as the relative order of processing for the founder couples. (For this -#' latter, the female founders are ordered as though they were sisters). +#' @slot horder A character vector with one element per subject in the +#' Pedigree. It determines the relative horizontal order of subjects within +#' a sibship, as well as the relative order of processing for the founder +#' couples. (For this latter, the female founders are ordered as though they +#' were sisters). #' @slot spouse A matrix with one row per hinted marriage, usually #' only a few marriages in a Pedigree will need an added hint, for #' instance reverse the plot order of a husband/wife pair. @@ -30,8 +31,8 @@ setClassUnion("character_OR_integer", c("character", "integer")) #' @export setClass("Hints", representation( - horder = "numeric", - spouse = "matrix" + horder = "character", + spouse = "data.frame" ) ) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index ffa000f4..0d71d662 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -191,6 +191,75 @@ setMethod("Rel", "character", } ) +#### S4 Hints constructor #### +#' Create a Hints object +#' +#' @description Create a Hints object +#' +#' @param horder A vector with the order of the individuals in the pedigree. +#' @param spouse A data.frame with one row per hinted marriage, usually only +#' a few marriages in a pedigree will need an added hint, for instance reverse +#' the plot order of a husband/wife pair. +#' Each row contains the id of the left spouse (i.e. `idl`), the id of the +#' right hand spouse (i.e. `idr`), and the anchor (i.e : `anchor` : +#' `1` = left, `2` = right, `0` = either). +#' Children will preferentially appear under the parents of the anchored spouse. +#' +#' @return A Hints object. +#' @seealso [Pedigree()] +#' @rdname Hints +#' @export +setGeneric("Hints", function(horder, spouse) { + standardGeneric("Hints") +}) + +#' @docType methods +#' @aliases Hints,list +#' @rdname Hints +#' @export +setMethod("Hints", + signature(horder = "character_OR_integer", spouse = "data.frame"), + function(horder, spouse) { + new("Hints", horder = as.character(horder), spouse = spouse) + } +) + +#' @docType methods +#' @aliases Hints,list +#' @rdname Hints +#' @export +setMethod("Hints", + signature(horder = "character_OR_integer", spouse = "missing"), + function(horder, spouse) { + dfe <- data.frame("idl" = character(), "idr" = character(), + "anchor" = factor() + ) + new("Hints", horder = horder, spouse = dfe) + } +) + +#' @docType methods +#' @aliases Hints,list +#' @rdname Hints +#' @export +setMethod("Hints", signature(horder = "missing", spouse = "data.frame"), + function(horder, spouse) { + new("Hints", horder = character(), spouse = spouse) + } +) + +#' @docType methods +#' @aliases Hints,list +#' @rdname Hints +#' @export +setMethod("Hints", signature(horder = "missing", spouse = "missing"), + function(horder, spouse) { + dfe <- data.frame("idl" = character(), "idr" = character(), + "anchor" = factor() + ) + new("Hints", horder = character(), spouse = dfe) + } +) #### S4 Pedigree constructor #### #' Create a Pedigree object @@ -276,7 +345,7 @@ setMethod("Pedigree", "numeric", function(obj, ... #' - `0` : not sterilised #' - `1` : sterilised #' - `NA` : sterilisation status not known -setMethod("Pedigree", "character", function(obj, dadid, momid, +setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, sex, famid = NA, avail = NULL, affected = NULL, status = NULL, steril = NULL, relation = NULL, missid = NA_character_, col_aff = "affection", normalize = TRUE, ... @@ -380,25 +449,6 @@ setMethod("Pedigree", "data.frame", function( "id1" = "indId1", "id2" = "indId2" ), - scales = list( - fill = data.frame( - order = numeric(), - column_values = character(), - column_mods = character(), - mods = numeric(), - labels = character(), - affected = logical(), - fill = character(), - density = numeric(), - angle = numeric() - ), - border = data.frame( - column = character(), - mods = numeric(), - labels = character(), - border = character() - ) - ), hints = list( horder = NULL, spouse = NULL @@ -480,13 +530,15 @@ setMethod("Pedigree", "data.frame", function( return(rel_df) } - ped = Ped(ped_df) - rel = Rel(rel_df) + ped <- Ped(ped_df) + rel <- Rel(rel_df) + hints <- Hints(hints) + scales <- new("Scales") ## Create the object ped <- new("Pedigree", ped = ped, rel = rel, - scales = scales, hints = hints + hints = hints, scales = scales ) generate_colors(ped, col_aff = col_aff, ...) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 6d99d438..2503217d 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -192,6 +192,23 @@ setMethod("as.data.frame", "Rel", function(x) { data.frame(lst) }) +#### S4 Hints generics #### +#' Set Hints object to list +#' +#' @description Convert a Hints object to a list +#' +#' @param from A Hints object. +#' +#' @return A list with the hints informations. +#' +#' @rdname Hints +#' @aliases as.list,Hints-method +#' @importMethodsFrom S4Vectors as.list +#' @export +setMethod("as.list", "Hints", function(x) { + list(horder = x@horder, spouse = x@spouse) +}) + #### S4 Pedigree generics #### #' Compute the length of a Pedigree object @@ -212,9 +229,9 @@ setMethod("length", c(x = "Pedigree"), #' @rdname extract-methods #' @aliases show,Pedigree-method setMethod("show", signature(object = "Pedigree"), function(object) { - nb_fam <- length(levels(as.factor(object@ped$famid))) - cat("Pedigree object with", nrow(object@ped), "individuals and", - nrow(object@rel), "special relationships across", nb_fam, "families", + nb_fam <- length(levels(as.factor(famid(ped(object))))) + cat("Pedigree object with", length(ped(object)), "individuals and", + length(rel(object)), "special relationships across", nb_fam, "families", fill = TRUE) }) diff --git a/R/AllValidity.R b/R/AllValidity.R index fa22db99..82ee0b6d 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -43,7 +43,7 @@ check_slot_fd <- function(obj, slot = NULL, fields = character()) { } if (length(array_names) == 0) { paste0( - "Missing fields in ", slot, + "No fields in ", slot, " slot. See Pedigree documentation." ) } else if (any(!fields %in% array_names)) { @@ -58,10 +58,9 @@ check_slot_fd <- function(obj, slot = NULL, fields = character()) { #' #' Check if the all the values in a slot are in a vector of values. #' -#' @param obj An object. -#' @param slot A slot of the object. -#' @param column A column of the slot. -#' @param values A vector of values to check. +#' @param val A vector of values to check. +#' @param ref A vector of reference values. +#' @param name A character vector with the name of the values to check. #' @param present A logical value indicating if the values should be present #' or not #' @@ -104,19 +103,26 @@ is_valid_hints <- function(object) { errors <- c() #### Check that the slots have the right columns #### - errors <- c(errors, check_slot_fd(object, "horder", "numeric")) - errors <- c(errors, check_slot_fd(object, "spouse", "matrix")) - - #### Check that the hints spouse matrix is valid #### - if (dim(object@spouse) != 3) { - errors <- c(errors, "The spouse matrix must have 3 columns.") + if (! is.character(object@horder)) { + errors <- c(errors, "horder slot must be character") } - if (any(is.numeric(object@spouse[, 1:3]))) { - errors <- c( - errors, "The spouse matrix must contains only numeric values." - ) + if (! is.data.frame(object@spouse)) { + errors <- c(errors, "spouse slot must be a data.frame") + } + + #### Check that the hints spouse data.frame is valid #### + errors <- c(errors, check_slot_fd( + object, "spouse", c("idl", "idr", "anchor") + )) + + if (!is.factor(object@spouse$anchor)) { + errors <- c(errors, "anchor column must be a factor") } + errors <- c(errors, check_values( + object@spouse$anchor, c("left", "rihgt", "either"), "anchor" + )) + return(errors) } diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index de11ed8b..b9040f3d 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -133,3 +133,8 @@ test_that("Rel class works", { expect_equal(dim(as.data.frame(c(rel3, rel2))), c(5, 5)) }) + + +test_that("Hints class works", { + Hints() +}) \ No newline at end of file From 35d2882699c0df08d4e7e4f13cf6f797c984383c Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 14:10:36 +0100 Subject: [PATCH 020/111] Modify descendants function for Ped object usage --- R/descendants.R | 19 +++++++++++-------- tests/testthat/test-descendants.R | 9 +++++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/R/descendants.R b/R/descendants.R index 7535bd37..8d617c1d 100644 --- a/R/descendants.R +++ b/R/descendants.R @@ -25,10 +25,13 @@ setGeneric("descendants", #' @rdname descendants #' @docType methods -#' @aliases descendants,character -setMethod("descendants", signature(idlist = "character", obj = "character"), +#' @aliases descendants,character_OR_integer +setMethod("descendants", signature(idlist = "character_OR_integer", obj = "character_OR_integer"), function(idlist, obj, dadid, momid) { - id <- obj + id <- as.character(obj) + idlist <- as.character(obj) + dadid <- as.character(dadid) + momid <- as.character(momid) child <- id[!(is.na(match(dadid, idlist)) & is.na(match(momid, idlist)) ) @@ -49,17 +52,17 @@ setMethod("descendants", signature(idlist = "character", obj = "character"), #' @rdname descendants #' @docType methods #' @aliases descendants,Pedigree -setMethod("descendants", signature(idlist = "character", obj = "Pedigree"), +setMethod("descendants", signature(idlist = "character_OR_integer", obj = "Pedigree"), function(idlist, obj) { - descendants(idlist, obj$ped$id, obj$ped$dadid, obj$ped$momid) + descendants(idlist, ped(obj)) } ) #' @rdname descendants #' @docType methods -#' @aliases descendants,Pedigree -setMethod("descendants", signature(idlist = "character", obj = "Ped"), +#' @aliases descendants,Ped +setMethod("descendants", signature(idlist = "character_OR_integer", obj = "Ped"), function(idlist, obj) { - descendants(idlist, obj$id, obj$dadid, obj$momid) + descendants(as.character(idlist), id(obj), dadid(obj), momid(obj)) } ) diff --git a/tests/testthat/test-descendants.R b/tests/testthat/test-descendants.R index 6298b56e..3b20220e 100644 --- a/tests/testthat/test-descendants.R +++ b/tests/testthat/test-descendants.R @@ -1,10 +1,15 @@ test_that("descendants works", { data("sampleped") idlist <- c("1_101", "2_208") - ped <- Pedigree(sampleped) - desc <- descendants(idlist, ped) + pedi <- Pedigree(sampleped) + desc <- descendants(idlist, pedi) expect_equal(desc, c( "1_109", "2_212", "2_213", "2_214", "1_121", "1_122", "1_123", "1_124" )) + ped <- with(sampleped, Ped(id, sex, dadid, momid, family, missid = "0")) + expect_equal(descendants(idlist, ped), c( + "109", "212", "213", "214", + "121", "122", "123", "124" + )) }) From 06f0bcc2000c2bb6d169c17f92ad71cae742deca Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 14:26:31 +0100 Subject: [PATCH 021/111] Set getters ans setters for Hints + add tests --- R/AllAccessors.R | 53 ++++++++++++++++++++++++++++--------- R/AllValidity.R | 9 +++++-- tests/testthat/test-class.R | 35 +++++++++++++++++++++++- 3 files changed, 81 insertions(+), 16 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index f7aceafa..f0d401ed 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -7,12 +7,12 @@ NULL #### S4 Ped Accessors #### #' Metadata setters of Ped object from a list -#' +#' #' @param x A Ped object. #' @param value A list with the metadata. -#' +#' #' @return A Ped object with the metadata set. -#' +#' #' @rdname Ped setMethod("mcols<-", signature(x = "Ped", value = "list"), function(x, value) { mcols(x) <- as(value, "DataFrame") @@ -20,12 +20,12 @@ setMethod("mcols<-", signature(x = "Ped", value = "list"), function(x, value) { }) #' Metadata setters of Ped object from a data.frame -#' +#' #' @param x A Ped object. #' @param value A data.frame with the metadata. -#' +#' #' @return A Ped object with the metadata set. -#' +#' #' @rdname Ped setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, value) { mcols(x) <- as(value, "DataFrame") @@ -33,11 +33,11 @@ setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, val }) #' Famid getter of Ped object -#' +#' #' @param x A Ped object. -#' +#' #' @return A character vector with the famid of each individual. -#' +#' #' @rdname Ped #' @aliases famid,Ped-method #' @export @@ -371,7 +371,11 @@ setGeneric("horder", function(object) { }) setMethod("horder", "Pedigree", function(object) { - object@hints@horder + horder(hints(object)) +}) + +setMethod("horder", "Hints", function(object) { + object@horder }) setGeneric("horder<-", function(object, value) { @@ -388,12 +392,21 @@ setMethod( "equal to the length of the pedigree" ) } - object@hints@horder <- value + horder(hints(object)) <- value validObject(object) object } ) +setMethod( + "horder<-", + signature(object = "Hints", value = "ANY"), + function(object, value) { + object@horder <- value + validObject(object) + object + } +) #### S4 spouse Accessors #### #' @description Pedigree spouse accessors #' @param object A Pedigree object. @@ -407,7 +420,11 @@ setGeneric("spouse", function(object) { }) setMethod("spouse", signature(object = "Pedigree"), function(object) { - object@hints@spouse + spouse(hints(object)) +}) + +setMethod("spouse", signature(object = "Hints"), function(object) { + object@spouse }) setGeneric("spouse<-", function(object, value) { @@ -417,9 +434,19 @@ setGeneric("spouse<-", function(object, value) { setMethod( "spouse<-", signature(object = "Pedigree", value = "ANY"), + function(object, value) { + spouse(hints(object)) <- value + validObject(object) + object + } +) + +setMethod( + "spouse<-", + signature(object = "Hints", value = "ANY"), function(object, value) { # TODO: Check that the spouse matrix is valid - object@hints@spouse <- value + object@spouse <- value validObject(object) object } diff --git a/R/AllValidity.R b/R/AllValidity.R index 82ee0b6d..0764cb1f 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -102,7 +102,7 @@ check_values <- function(val, ref, name = NULL, present = TRUE) { is_valid_hints <- function(object) { errors <- c() - #### Check that the slots have the right columns #### + #### Check that the slots are of the right class #### if (! is.character(object@horder)) { errors <- c(errors, "horder slot must be character") } @@ -110,6 +110,11 @@ is_valid_hints <- function(object) { errors <- c(errors, "spouse slot must be a data.frame") } + #### Check that the horder slot is valid #### + errors <- c(errors, check_values( + object@horder, c(NA_character_, ""), "horder", present = FALSE + )) + #### Check that the hints spouse data.frame is valid #### errors <- c(errors, check_slot_fd( object, "spouse", c("idl", "idr", "anchor") @@ -120,7 +125,7 @@ is_valid_hints <- function(object) { } errors <- c(errors, check_values( - object@spouse$anchor, c("left", "rihgt", "either"), "anchor" + object@spouse$anchor, c("left", "right", "either"), "anchor" )) return(errors) diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index b9040f3d..0117177a 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -136,5 +136,38 @@ test_that("Rel class works", { test_that("Hints class works", { - Hints() + ## From scratch + hts0 <- Hints() + expect_equal(horder(hts0), character()) + horder(hts0) <- c("ID1", "ID2") + expect_equal(horder(hts0), c("ID1", "ID2")) + expect_equal(dim(spouse(hts0)), c(0, 3)) + spouse(hts0) <- data.frame( + idl = c("ID1", "ID2"), + idr = c("ID3", "ID4"), + anchor = factor(c("left", "right")) + ) + expect_equal(dim(spouse(hts0)), c(2, 3)) + expect_snapshot(hts0) + + ## With constructor + hts2 <- Hints(horder = c("ID1", "ID2"), spouse = data.frame( + idl = c("ID1", "ID2"), + idr = c("ID3", "ID4"), + anchor = factor(c("left", "right")) + )) + expect_equal(hts0, hts2) + + ## With missing values + hts_horder <- Hints(horder = c("ID1", "ID2", 1, "ID3")) + expect_equal(horder(hts_horder), c("ID1", "ID2", "1", "ID3")) + expect_equal(dim(spouse(hts_horder)), c(0, 3)) + + hts_spouse <- Hints(spouse = data.frame( + idl = c("ID1", "ID2"), + idr = c("ID3", NA), + anchor = factor(c("left", "right")) + )) + expect_equal(horder(hts_spouse), character()) + expect_equal(dim(spouse(hts_spouse)), c(2, 3)) }) \ No newline at end of file From 93c0cf72e3047acb5af2edc00f32cf464397b053 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 17:23:00 +0100 Subject: [PATCH 022/111] Correct scale access --- R/AllAccessors.R | 71 ++++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index f0d401ed..72b4f5ec 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -270,37 +270,43 @@ setMethod("scales", signature(object = "Pedigree"), function(object) { #' @rdname extract-methods #' @aliases fill,Pedigree-method #' @export -setGeneric("fill", function(object, slot) { +setGeneric("fill", function(object) { standardGeneric("fill") }) setMethod("fill", - signature(object = "Pedigree", slot = "ANY"), - function(object, slot) { - object@scales$fill[slot] + signature(object = "Scales"), + function(object) { + object@fill } ) setMethod("fill", - signature(object = "Pedigree", slot = "missing"), + signature(object = "Pedigree"), function(object) { - object@scales$fill + fill(scales(object)) } ) -setGeneric("fill<-", function(object, slot, value) { +setGeneric("fill<-", function(object, value) { standardGeneric("fill<-") }) setMethod( "fill<-", - signature(object = "Pedigree", slot = "ANY", value = "ANY"), - function(object, slot, value) { - fill_cols <- c("column", "column_values") - if (! slot %in% fill_cols) { - stop("slot selected: ", slot, " is not a fill column") - } - object@scales$fill[slot] <- value + signature(object = "Scales", value = "data.frame"), + function(object, value) { + object@fill <- value + validObject(object) + object + } +) + +setMethod( + "fill<-", + signature(object = "Pedigree", value = "data.frame"), + function(object, value) { + fill(scales(object)) <- value validObject(object) object } @@ -313,30 +319,43 @@ setMethod( #' @rdname extract-methods #' @aliases border,Pedigree-method #' @export -setGeneric("border", function(object, slot) { +setGeneric("border", function(object) { standardGeneric("border") }) setMethod("border", - signature(object = "Pedigree", slot = "ANY"), - function(object, slot) { - object@scales$border[slot] + signature(object = "Scales"), + function(object) { + object@border } ) -setGeneric("border<-", function(object, slot, value) { +setMethod("border", + signature(object = "Pedigree"), + function(object) { + border(scales(object)) + } +) + +setGeneric("border<-", function(object, value) { standardGeneric("border<-") }) setMethod( "border<-", - signature(object = "Pedigree", slot = "ANY", value = "ANY"), - function(object, slot, value) { - fill_cols <- c("column", "column_values") - if (! slot %in% fill_cols) { - stop("slot selected: ", slot, " is not a border column") - } - object@scales$border[slot] <- value + signature(object = "Scales", value = "data.frame"), + function(object, value) { + object@border <- value + validObject(object) + object + } +) + +setMethod( + "border<-", + signature(object = "Pedigree", value = "data.frame"), + function(object, value) { + border(scales(object)) <- value validObject(object) object } From 8f731f26beb86f01f1b960016063cd9f85967038 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 17:24:37 +0100 Subject: [PATCH 023/111] Add subsetting for Ped, Rel, Hints Add Scales class and test --- R/AllConstructor.R | 112 +++++++++++++++++++----- R/AllGeneric.R | 167 ++++++++++++++++++++++++++++++------ R/AllValidity.R | 55 ++++++++++-- tests/testthat/test-class.R | 118 ++++++++++++++++++++++++- 4 files changed, 392 insertions(+), 60 deletions(-) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 0d71d662..9335c5fd 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -30,7 +30,8 @@ na_to_length <- function(x, temp, value) { #' `data.frame` with all the informations in corresponding columns. #' @param dadid A character vector with the id of the father of the individuals. #' @param momid A character vector with the id of the mother of the individuals. -#' @param famid A character vector with the family identifiers of the individuals. +#' @param famid A character vector with the family identifiers of the +#' individuals. #' @param sex A factor vector with the sex of the individuals (i.e. `male`, #' `female`, `unknown` or `terminated`). #' @param steril A numeric vector with the sterilisation status of the @@ -68,7 +69,6 @@ setMethod("Ped", "data.frame", df$status <- vect_to_binary(df$status) df$avail <- vect_to_binary(df$avail) df$affected <- vect_to_binary(df$affected) - myped <- with(df, Ped( obj = id, sex = sex, dadid = dadid, momid = momid, famid = famid, @@ -110,7 +110,6 @@ setMethod("Ped", "character_OR_integer", df_child <- num_child(id, dadid, momid, rel_df = NULL) - new( "Ped", id = id, dadid = dadid, momid = momid, famid = famid, @@ -123,6 +122,15 @@ setMethod("Ped", "character_OR_integer", } ) +#' @docType methods +#' @aliases Ped,missing +#' @rdname Ped +setMethod("Ped", "missing", + function(obj) { + new("Ped") + } +) + #### S4 Rel constructor #### #' Constructor for the Rel class #' @@ -134,7 +142,8 @@ setMethod("Ped", "character_OR_integer", #' pairs #' @param code An ordered factor vector with the code of the special #' relationship (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). -#' @param famid A character vector with the family identifiers of the individuals. +#' @param famid A character vector with the family identifiers of the +#' individuals. #' #' @return A Rel object. #' @seealso [Pedigree()] @@ -167,7 +176,7 @@ setMethod("Rel", "data.frame", #' @aliases Rel,character #' @rdname Rel #' @export -setMethod("Rel", "character", +setMethod("Rel", "character_OR_integer", function( obj, id2, code, famid = NA ) { @@ -191,6 +200,14 @@ setMethod("Rel", "character", } ) +#' @docType methods +#' @aliases Rel,missing +#' @rdname Rel +setMethod("Rel", "missing", + function(obj) { + new("Rel") + } +) #### S4 Hints constructor #### #' Create a Hints object #' @@ -214,7 +231,6 @@ setGeneric("Hints", function(horder, spouse) { }) #' @docType methods -#' @aliases Hints,list #' @rdname Hints #' @export setMethod("Hints", @@ -225,7 +241,6 @@ setMethod("Hints", ) #' @docType methods -#' @aliases Hints,list #' @rdname Hints #' @export setMethod("Hints", @@ -239,7 +254,6 @@ setMethod("Hints", ) #' @docType methods -#' @aliases Hints,list #' @rdname Hints #' @export setMethod("Hints", signature(horder = "missing", spouse = "data.frame"), @@ -249,7 +263,6 @@ setMethod("Hints", signature(horder = "missing", spouse = "data.frame"), ) #' @docType methods -#' @aliases Hints,list #' @rdname Hints #' @export setMethod("Hints", signature(horder = "missing", spouse = "missing"), @@ -261,6 +274,61 @@ setMethod("Hints", signature(horder = "missing", spouse = "missing"), } ) +#### S4 Scales constructor #### +#' Create a Scales object +#' +#' @description Create a Scales object +#' +#' @param fill A data.frame with the informations for the affection status. +#' The columns needed are: `column_values`, `column_mods`, `mods`, `labels`, +#' `affected`, `fill`, `density` and `angle`. +#' @param border A data.frame with the informations for the availability status. +#' The columns needed are: `column`, `mods`, `labels` and `border`. +#' +#' @return A Scales object. +#' @seealso [Pedigree()] +#' @rdname Scales +#' @export +setGeneric("Scales", function(fill, border) { + standardGeneric("Scales") +}) + +#' @docType methods +#' @rdname Scales +#' @export +setMethod("Scales", + signature(fill = "data.frame", border = "data.frame"), + function(fill, border) { + new("Scales", fill = fill, border = border) + } +) + +#' @docType methods +#' @rdname Scales +#' @export +setMethod("Scales", + signature(fill = "missing", border = "missing"), + function(fill, border) { + fill <- data.frame( + order = numeric(), + column_values = character(), + column_mods = character(), + mods = character(), + labels = character(), + affected = logical(), + fill = character(), + density = numeric(), + angle = numeric() + ) + border <- data.frame( + column = character(), + mods = character(), + labels = character(), + border = character() + ) + new("Scales", fill = fill, border = border) + } +) #### S4 Pedigree constructor #### #' Create a Pedigree object #' @@ -318,15 +386,6 @@ setGeneric("Pedigree", signature = "obj", function(obj, ...) standardGeneric("Pedigree") ) -#' @export -#' @rdname Pedigree -#' @aliases Pedigree,numeric -#' @docType methods -setMethod("Pedigree", "numeric", function(obj, ... -) { - Pedigree(as.character(obj), ...) -}) - #' @export #' @rdname Pedigree #' @aliases Pedigree,character @@ -533,14 +592,25 @@ setMethod("Pedigree", "data.frame", function( ped <- Ped(ped_df) rel <- Rel(rel_df) hints <- Hints(hints) - scales <- new("Scales") + scales <- Scales() ## Create the object ped <- new("Pedigree", ped = ped, rel = rel, hints = hints, scales = scales ) - generate_colors(ped, col_aff = col_aff, ...) } -) \ No newline at end of file +) + +#' @export +#' @rdname Pedigree +#' @aliases Pedigree,missing +#' @docType methods +setMethod("Pedigree", "missing", function(obj) { + ped <- new("Pedigree", + ped = Ped(), rel = Rel(), + hints = Hints(), scales = Scales() + ) + ped +}) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 2503217d..421bf0f9 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -94,6 +94,45 @@ setMethod("as.data.frame", "Ped", function(x) { ped_df }) +#' Subset a Ped object +#' +#' @description Subset a Ped object based on the individuals +#' identifiers given. +#' +#' @param x A Ped object. +#' @param i A vector of individuals identifiers to keep. +#' +#' @return A Ped object subsetted. +#' +#' @rdname extract-methods +#' @aliases subset,Ped-method +#' @importFrom S4Vectors subset +#' @export +setMethod("subset", "Ped", function(x, i, del_parents = FALSE) { + if (is.factor(i)) { + i <- as.character(i) + } + if (is.character(i)) { + i <- which(x@id %in% i) + } else if (!is.numeric(i) & !is.logical(i)) { + stop("i must be a character, an integer or a logical vector") + } + col_computed <- c( + "num_child_total", "num_child_direct", "num_child_indirect" + ) + ped_df <- as.data.frame(x)[i, ] + ped_df <- ped_df[, ! colnames(ped_df) %in% col_computed] + + if (del_parents) { + ped_df$dadid[!ped_df$dadid %in% ped_df$id] <- NA_character_ + ped_df$momid[!ped_df$momid %in% ped_df$id] <- NA_character_ + } + print(ped_df) + new_ped <- Ped(ped_df) + validObject(new_ped) + new_ped +}) + #### S4 Rel generics #### #' Summary function of Rel object #' @@ -192,6 +231,37 @@ setMethod("as.data.frame", "Rel", function(x) { data.frame(lst) }) +#' Subset a Rel object +#' +#' @description Subset a Rel object based on the individuals +#' identifiers given. +#' +#' @param x A Rel object. +#' @param idlist A vector of individuals identifiers to keep. +#' +#' @return A Rel object subsetted. +#' +#' @rdname extract-methods +#' @aliases subset,Rel-method +#' @importFrom S4Vectors subset +#' @export +setMethod("subset", "Rel", function(x, idlist) { + if (is.factor(idlist)) { + idlist <- as.character(idlist) + } + if (! is.character(idlist)) { + stop("idlist must be a character") + } + rel_df <- as.data.frame(x) + + id1 <- rel_df$id1 %in% idlist + id2 <- rel_df$id2 %in% idlist + rel_df <- rel_df[id1 & id2, ] + new_rel <- Rel(rel_df) + validObject(new_rel) + new_rel +}) + #### S4 Hints generics #### #' Set Hints object to list #' @@ -209,6 +279,56 @@ setMethod("as.list", "Hints", function(x) { list(horder = x@horder, spouse = x@spouse) }) +#' Hints subscripting +#' @description Subset the Hints object based on the identifiers +#' given +#' @param hints A Hints object +#' @param idlist A vector of identifiers to subset +#' @return A list of Hints object subsetted +#' @rdname extract-methods +#' @aliases subset_hints,Hints-method +#' @keywords internal +setMethod("subset", "Hints", function(x, idlist) { + horder <- horder(x) + spouse <- spouse(x) + + if (is.factor(idlist)) { + idlist <- as.character(idlist) + } + if (! is.character(idlist)) { + stop("idlist must be a character") + } + + if (length(horder) > 0) { + horder <- horder[horder %in% idlist] + } + + if (nrow(spouse) > 0) { + spouse <- spouse[spouse$idl %in% idlist & spouse$idr %in% idlist, ] + } + + new_hints <- Hints(horder = horder, spouse = spouse) + validObject(new_hints) + new_hints +}) + +#### S4 Scales generics #### +#' Set Scales object to list +#' +#' @description Convert a Scales object to a list +#' +#' @param from A Scales object. +#' +#' @return A list with the hints informations. +#' +#' @rdname Scales +#' @aliases as.list,Scales-method +#' @importMethodsFrom S4Vectors as.list +#' @export +setMethod("as.list", "Scales", function(x) { + list(fill = x@fill, border = x@border) +}) + #### S4 Pedigree generics #### #' Compute the length of a Pedigree object @@ -253,35 +373,26 @@ setMethod("summary", signature(object = "Pedigree"), function(object) { ) }) -## Subscripting -#' @description Subset the hints list based on the index given -#' @param hints A list of hints -#' @param index A vector of index -#' @return A list of hints subsetted +#' Convert a Pedigree object to a list +#' +#' @description Convert a Pedigree object to a list +#' +#' @param from A Pedigree object. +#' +#' @return A list with the individuals informations. +#' #' @rdname extract-methods -#' @aliases sub_sel_hints,Pedigree-method -#' @keywords internal -sub_sel_hints <- function(hints, index) { - if (!is.null(hints$horder)) { - temp <- list(horder = hints$horder[index]) - } else { - temp <- list(horder = NULL) - } - - if (!is.null(hints$spouse)) { - indx1 <- match(hints$spouse[, 1], index, nomatch = 0) - indx2 <- match(hints$spouse[, 2], index, nomatch = 0) - keep <- (indx1 > 0 & indx2 > 0) # keep only if both id's are kept - if (any(keep)) { - temp$spouse <- cbind(indx1[keep], indx2[keep], - hints$spouse[keep, 3] - ) - } - } else { - temp$spouse <- NULL - } - temp -} +#' @aliases as.list,Pedigree-method +#' @importMethodsFrom S4Vectors as.list +#' @export +setMethod("as.list", "Pedigree", function(x) { + list( + ped = as.list(ped(x)), + rel = as.list(rel(x)), + scales = as.list(scales(x)), + hints = as.list(hints(x)) + ) +}) #' @description Extract parts of a Pedigree object #' @param x A Pedigree object. diff --git a/R/AllValidity.R b/R/AllValidity.R index 0764cb1f..cf4e65b1 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -150,9 +150,49 @@ is_valid_scales <- function(object) { "labels", "affected", "fill", "density", "angle" ) border_cols <- c("column", "mods", "labels", "border") - errors <- c(errors, check_slot_fd(object, "scales", c("fill", "border"))) - errors <- c(errors, check_slot_fd(object@scales, "fill", fill_cols)) - errors <- c(errors, check_slot_fd(object@scales, "border", border_cols)) + errors <- c(errors, check_slot_fd(object, NULL, c("fill", "border"))) + errors <- c(errors, check_slot_fd(object, "fill", fill_cols)) + errors <- c(errors, check_slot_fd(object, "border", border_cols)) + + #### Check that the fill columns have the right values #### + ## Check for logical columns + col_log <- c("affected") + err_log <- col_log[!unlist(lapply(object@fill[col_log], is, "logical"))] + if (length(err_log) > 0) { + errors <- c(errors, paste( + err_log, " column(s) must be logical", sep = "" + )) + } + + ## Check for numeric columns + col_num <- c("density", "angle", "order") + err_num <- col_num[!unlist(lapply(object@fill[col_num], is, "numeric"))] + if (length(err_num) > 0) { + errors <- c(errors, paste( + err_num, " column(s) must be numeric", sep = "" + )) + } + + ## Check for character columns + col_char <- c( + "column_values", "column_mods", "mods", "labels", "fill" + ) + err_char <- col_char[!unlist(lapply(object@fill[col_char], is, "character"))] + if (length(err_char) > 0) { + errors <- c(errors, paste( + err_char, " column(s) must be character", sep = "" + )) + } + + #### Check that the border columns have the right values #### + ## Check for character columns + col_char <- c("column", "mods", "labels", "border") + err_char <- col_char[!unlist(lapply(object@border[col_char], is, "character"))] + if (length(err_char) > 0) { + errors <- c(errors, paste( + err_char, " column(s) must be character", sep = "" + )) + } if (length(errors) == 0) { TRUE @@ -172,7 +212,7 @@ is_valid_scales <- function(object) { #' right values #' 3. Check that dad are male and mom are female #' 4. Check that individuals have both parents or none -#' +#' #' @param object A Ped object. #' #' @return A character vector with the errors or `TRUE` if no errors. @@ -182,9 +222,6 @@ is_valid_ped <- function(object) { missid <- NA_character_ errors <- c() - #### Check that all slots are parallele #### - #errors <- c(errors, parallel_slot_names(object)) - #### Check that the ped columns have the right values #### # Check for ped@id uniqueness if (any(duplicated(object@id))) { @@ -206,10 +243,10 @@ is_valid_ped <- function(object) { "id", present = FALSE )) errors <- c(errors, check_values( - object@dadid, c(object@id, missid) + object@dadid, c(object@id, missid), "dadid" )) errors <- c(errors, check_values( - object@momid, c(object@id, missid) + object@momid, c(object@id, missid), "momid" )) # Control values for sex, steril, status, avail and affected diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index 0117177a..90405429 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -97,6 +97,15 @@ test_that("Class ped work", { ped5 <- suppressWarnings(c(ped3, ped2)) expect_equal(dim(as.data.frame(ped5)), c(5, 14)) + + ## Subsetting + expect_error(subset(ped3, "ID1")) + ped1_char <- subset(ped3, "ID1", del_parents = TRUE) + ped1_num <- subset(ped3, 1, del_parents = TRUE) + ped1_log <- subset(ped3, c(TRUE, FALSE, FALSE), del_parents = TRUE) + + expect_equal(ped1_char, ped1_num) + expect_equal(ped1_char, ped1_log) }) test_that("Rel class works", { @@ -132,8 +141,11 @@ test_that("Rel class works", { ) expect_equal(dim(as.data.frame(c(rel3, rel2))), c(5, 5)) -}) + expect_equal(length(subset(rel3, "ID6")), 0) + expect_equal(length(subset(rel3, c("ID2", "ID3"))), 1) + expect_equal(length(subset(rel3, c("ID2", "ID3", "ID6"))), 2) +}) test_that("Hints class works", { ## From scratch @@ -170,4 +182,106 @@ test_that("Hints class works", { )) expect_equal(horder(hts_spouse), character()) expect_equal(dim(spouse(hts_spouse)), c(2, 3)) -}) \ No newline at end of file + + hts1 <- subset(hts2, "ID1") + expect_equal(horder(hts1), c("ID1")) + expect_equal(dim(spouse(hts1)), c(0, 3)) + + hts13 <- subset(hts2, c("ID1", "ID3")) + expect_equal(horder(hts13), "ID1") + expect_equal(dim(spouse(hts13)), c(1, 3)) +}) + +test_that("Scales class works", { + ## From scratch + scl0 <- Scales() + expect_equal(dim(fill(scl0)), c(0, 9)) + expect_equal(dim(border(scl0)), c(0, 4)) + + expect_error(fill(scl0) <- c("ID1", "ID2")) + expect_error(border(scl0) <- c("ID1", "ID2")) + + expect_error(fill(scl0)$column_values <- c("ID1", "ID2")) + + expect_snapshot_error(fill(scl0) <- data.frame( + order = c("A", 3), + column_values = c("ID1", "ID2"), + column_mods = c(1, 2), + mods = c("ID1", "ID2"), + labels = c("ID1", "ID2"), + affected = c("A", FALSE), + fill = c("ID1", "ID2"), + density = c(1, 2), + angle = c("A", 60) + )) + expect_snapshot_error(border(scl0) <- data.frame( + column = c("ID1", "ID2"), + mods = c("ID1", "ID2"), + labels = c(1, 2), + border = c("ID1", "ID2") + )) + + + fill(scl0) <- data.frame( + order = c(2, 3), + column_values = c("ID1", "ID2"), + column_mods = c("ID1", "ID2"), + mods = c("ID1", "ID2"), + labels = c("ID1", "ID2"), + affected = c(TRUE, FALSE), + fill = c("ID1", "ID2"), + density = c(1, 2), + angle = c(90, 60) + ) + expect_equal(dim(fill(scl0)), c(2, 9)) + fill(scl0)$fill[1] <- "ID3" + expect_equal(fill(scl0)$fill[1], "ID3") + + border(scl0) <- data.frame( + column = c("ID1", "ID2"), + mods = c("ID1", "ID2"), + labels = c("Lab1", "Lab2"), + border = c("ID1", "ID2") + ) + + expect_equal(dim(border(scl0)), c(2, 4)) + expect_snapshot(scl0) + + ## With constructor + scl2 <- Scales( + fill = data.frame( + order = c(2, 3), + column_values = c("ID1", "ID2"), + column_mods = c("ID1", "ID2"), + mods = c("ID1", "ID2"), + labels = c("ID1", "ID2"), + affected = c(TRUE, FALSE), + fill = c("ID3", "ID2"), + density = c(1, 2), + angle = c(90, 60) + ), + border = data.frame( + column = c("ID1", "ID2"), + mods = c("ID1", "ID2"), + labels = c("Lab1", "Lab2"), + border = c("ID1", "ID2") + ) + ) + expect_equal(scl2, scl0) +}) + +test_that("Pedigree class works", { + pedi <- Pedigree() + expect_equal(length(pedi), 0) + expect_equal(length(as.list(pedi)), 4) + expect_s4_class(scales(pedi), "Scales") + expect_s4_class(hints(pedi), "Hints") + expect_s4_class(ped(pedi), "Ped") + expect_s4_class(rel(pedi), "Rel") + expect_equal(horder(pedi), character()) + expect_equal(dim(spouse(pedi)), c(0, 3)) + expect_equal(dim(fill(pedi)), c(0, 9)) + expect_equal(dim(border(pedi)), c(0, 4)) + expect_equal(length(ped(pedi)), 0) + expect_equal(length(rel(pedi)), 0) +}) From ed710f6ab1a980247674c1089d23e376d60693a6 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 17:25:06 +0100 Subject: [PATCH 024/111] Correct bug in num_child if no parent --- R/num_child.R | 98 +++++++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 46 deletions(-) diff --git a/R/num_child.R b/R/num_child.R index 4f04fc01..174ea11a 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -38,9 +38,9 @@ setGeneric("num_child", signature = "obj", #' @export #' @rdname num_child -#' @aliases num_child,character +#' @aliases num_child,character_OR_integer #' @docType methods -setMethod("num_child", "character", function(obj, dadid, momid, +setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, rel_df = NULL, missid = NA_character_ ) { id <- obj @@ -84,49 +84,56 @@ setMethod("num_child", "character", function(obj, dadid, momid, spouse_rel$idmax <- pmax(spouse_rel$id1, spouse_rel$id2) spouse_rel <- unique(spouse_rel[c("idmin", "idmax")]) - dad_child <- df[(!df$dadid %in% missid), c("dadid", "id")] %>% - group_by(dadid) %>% - summarise(child = list(id)) %>% - mutate(num_child_dir = lengths(child)) %>% - rename(id = dadid) - mom_child <- df[(!df$momid %in% missid), c("id", "momid")] %>% - group_by(momid) %>% - summarise(child = list(id)) %>% - mutate(num_child_dir = lengths(child)) %>% - rename(id = momid) - id_child <- rbind(dad_child, mom_child) - - # Number of direct child per individual - df$num_child_dir <- id_child$num_child_dir[match(df$id, id_child$id)] - - # Number of total childs per individual - rel_child <- spouse_rel %>% - left_join(id_child, by = c("idmin" = "id")) %>% - left_join(id_child, by = c("idmax" = "id"), - suffix = c("_min", "_max") - ) %>% - rowwise() %>% - mutate(childs = list(unique(unlist( - list(child_min, child_max) - )))) %>% - select(c(idmin, idmax, childs)) %>% - tidyr::pivot_longer(cols = -childs, names_to = "order", - values_to = "id" - ) %>% - group_by(id) %>% - summarise(childs_all = list(unique(unlist(childs)))) %>% - mutate(num_child_tot = lengths(childs_all)) - - df$num_child_tot <- rel_child$num_child_tot[match(df$id, rel_child$id)] - - df <- df %>% - mutate(across(c(num_child_dir, num_child_tot), - ~replace(., is.na(.), 0) - )) - - df$num_child_ind <- df$num_child_tot - df$num_child_dir - - df + if (nrow(spouse_rel) > 0) { + dad_child <- df[(!df$dadid %in% missid), c("dadid", "id")] %>% + group_by(dadid) %>% + summarise(child = list(id)) %>% + mutate(num_child_dir = lengths(child)) %>% + rename(id = dadid) + mom_child <- df[(!df$momid %in% missid), c("id", "momid")] %>% + group_by(momid) %>% + summarise(child = list(id)) %>% + mutate(num_child_dir = lengths(child)) %>% + rename(id = momid) + id_child <- rbind(dad_child, mom_child) + + # Number of direct child per individual + df$num_child_dir <- id_child$num_child_dir[match(df$id, id_child$id)] + + # Number of total childs per individual + rel_child <- spouse_rel %>% + left_join(id_child, by = c("idmin" = "id")) %>% + left_join(id_child, by = c("idmax" = "id"), + suffix = c("_min", "_max") + ) %>% + rowwise() %>% + mutate(childs = list(unique(unlist( + list(child_min, child_max) + )))) %>% + select(c(idmin, idmax, childs)) %>% + tidyr::pivot_longer(cols = -childs, names_to = "order", + values_to = "id" + ) %>% + group_by(id) %>% + summarise(childs_all = list(unique(unlist(childs)))) %>% + mutate(num_child_tot = lengths(childs_all)) + + df$num_child_tot <- rel_child$num_child_tot[match(df$id, rel_child$id)] + + df <- df %>% + mutate(across(c(num_child_dir, num_child_tot), + ~replace(., is.na(.), 0) + )) + + df$num_child_ind <- df$num_child_tot - df$num_child_dir + + df + } else { + df$num_child_dir <- 0 + df$num_child_ind <- 0 + df$num_child_tot <- 0 + df + } }) #' @export @@ -154,4 +161,3 @@ setMethod("num_child", "Pedigree", function(obj, reset = FALSE) { obj }) -TRUE From 4c7ba2868c9a87edfe7e2accc87a80eeca88c31b Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 18:57:21 +0100 Subject: [PATCH 025/111] Correct mcols setter bug Add scales setter --- R/AllAccessors.R | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 72b4f5ec..666ae491 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -194,6 +194,7 @@ setMethod( signature(x = "Pedigree", value = "ANY"), function(x, value) { mcols(x@ped) <- value + x } ) @@ -263,6 +264,18 @@ setGeneric("scales", function(object) { setMethod("scales", signature(object = "Pedigree"), function(object) { object@scales }) + +setGeneric("scales<-", function(object, value) { + standardGeneric("scales<-") +}) + +setMethod( + "scales<-", signature(object = "Pedigree", value = "Scales"), + function(object, value) { + object@scales <- value + object + } +) #### S4 fill Accessors #### #' @description Pedigree fill accessors #' @param object A Pedigree object. From 87f9107d0c26356921a201cfaee66d6b9997a533 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 18:57:43 +0100 Subject: [PATCH 026/111] Chnage family to famid --- data/sampleped.rda | Bin 546 -> 537 bytes inst/extdata/sampleped.tab | 2 +- inst/script/dataset.R | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/sampleped.rda b/data/sampleped.rda index 9a9024d3c4fba313966d423a3320ac3132621cf3..cebedfa4f5560dc9df6da523dd51cabfffed69e7 100644 GIT binary patch literal 537 zcmV+!0_OcfT4*^jL0KkKS(MZM4gdz)|G@sb$bf(Wf8YcF5I`>{-M~Nq00BS(oFNT% zI}J^!6a7+|O*8-i02+FOB=IFdpa9U&8Z-f+4^orV^*sb=8Z=~L05Jk2L@H=)C!{p> zF{$MNkTDM+hX^4oq)b9aOQ325fz!|cG+6>9gCP3!3@VTaC>eNN3Dy8z`8>eRaDoC8V_16Q-ezXEZl9N$;-uB1<00000 z00000001<~){3WT**Z@R(s*;6)J5@y5bB&rBo~51oh{-TfHdIO= zNw{Ny21;P9M{uq_bbPS&iET@^Aa^RDMFOH}+f^zRWTH!qv)A zV2G}e3WBJo<8>pXe?ETD%olxc?BS8hWiw%z7{nmLBuK=JNfJU3ff7Fp5iLn}B!~%5 zf{2^s01`-oQYjKrNCG9>Wm6#`AV`~L3t87)v@+*5m+YHFf}*Q4Dl-5800u}i-w0(y zbDa{z@Bk`>QK~gSRT`m;;!NhihD37er~w!q9O*T#n_4Bq&w3 zt_E8u1u3}*WHye@?R!78`t94Oef#Ur$o5~UJv%p=lUTiNzN@b~ZqNHVC9cNaF@4-K b(~oTv@7Sg#b$pRQKa05{oG3_2Y5xZR<@w?t literal 546 zcmV+-0^R*WT4*^jL0KkKSqOJ?S^x&x|G@vc$bf(Wf8YcF5I`>{-QYj~00BS(oFNT$ zox@XV1NBmmNv41r001<4gDF1}lxSob0MInkG?_4jJxWhg(@~%UO$JnLQur3Mg|Lj0WuL7 zOcYI(5{MFR7~nyLFjk|uS69xaqnAf5X?8>o)l>+eR800&N`+Y{lH)!c@r)U}=P@2| z7VM-!!4x+HMRtHx6-7R~=^dltOV diff --git a/inst/extdata/sampleped.tab b/inst/extdata/sampleped.tab index 72e63af4..d2c91583 100644 --- a/inst/extdata/sampleped.tab +++ b/inst/extdata/sampleped.tab @@ -1,4 +1,4 @@ -"family" "id" "dadid" "momid" "sex" "affection" "avail" +"famid" "id" "dadid" "momid" "sex" "affection" "avail" "1" 1 101 0 0 1 0 0 "2" 1 102 0 0 2 1 0 "3" 1 103 135 136 1 1 0 diff --git a/inst/script/dataset.R b/inst/script/dataset.R index 3eacf151..4d7e18a3 100644 --- a/inst/script/dataset.R +++ b/inst/script/dataset.R @@ -7,8 +7,8 @@ sampleped <- read.delim("inst/extdata/sampleped.tab", header = TRUE, sep = " ", stringsAsFactors = FALSE ) -sampleped[c("family", "id", "dadid", "momid")] <- as.data.frame( - lapply(sampleped[c("family", "id", "dadid", "momid")], as.character) +sampleped[c("famid", "id", "dadid", "momid")] <- as.data.frame( + lapply(sampleped[c("famid", "id", "dadid", "momid")], as.character) ) summary(sampleped) usethis::use_data(sampleped, overwrite = TRUE) From ca641866dafbb49f73abdf2b0c2182be0a435e20 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 18:58:56 +0100 Subject: [PATCH 027/111] Add new class union missing or null Correct bugs when setting hints in Pedigree constructor --- R/AllClass.R | 1 + R/AllConstructor.R | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/R/AllClass.R b/R/AllClass.R index adf65273..24aeaddb 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -4,6 +4,7 @@ NULL #### Class integer / character #### setClassUnion("character_OR_integer", c("character", "integer")) +setClassUnion("missing_OR_NULL", c("missing", "NULL")) #### Hints Class #### diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 9335c5fd..bcf02c56 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -244,7 +244,7 @@ setMethod("Hints", #' @rdname Hints #' @export setMethod("Hints", - signature(horder = "character_OR_integer", spouse = "missing"), + signature(horder = "character_OR_integer", spouse = "missing_OR_NULL"), function(horder, spouse) { dfe <- data.frame("idl" = character(), "idr" = character(), "anchor" = factor() @@ -256,7 +256,8 @@ setMethod("Hints", #' @docType methods #' @rdname Hints #' @export -setMethod("Hints", signature(horder = "missing", spouse = "data.frame"), +setMethod("Hints", + signature(horder = "missing_OR_NULL", spouse = "data.frame"), function(horder, spouse) { new("Hints", horder = character(), spouse = spouse) } @@ -265,7 +266,8 @@ setMethod("Hints", signature(horder = "missing", spouse = "data.frame"), #' @docType methods #' @rdname Hints #' @export -setMethod("Hints", signature(horder = "missing", spouse = "missing"), +setMethod("Hints", + signature(horder = "missing_OR_NULL", spouse = "missing_OR_NULL"), function(horder, spouse) { dfe <- data.frame("idl" = character(), "idr" = character(), "anchor" = factor() @@ -313,7 +315,7 @@ setMethod("Scales", order = numeric(), column_values = character(), column_mods = character(), - mods = character(), + mods = numeric(), labels = character(), affected = logical(), fill = character(), @@ -322,7 +324,7 @@ setMethod("Scales", ) border <- data.frame( column = character(), - mods = character(), + mods = numeric(), labels = character(), border = character() ) @@ -428,7 +430,6 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, stop("Mismatched lengths, id and status") } - ped_df <- data.frame( family = famid, indId = obj, @@ -442,11 +443,13 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, } else if (any(!is.na(affected))) { if (is.vector(affected)) { ped_df$affection <- affected - } else if (is.data.frame(affected)) { + } else if (is.data.frame(affected) | is.matrix(affected)) { ped_df <- cbind(ped_df, affected) col_aff <- colnames(affected) } else { - stop("Affected must be a vector or a data.frame") + stop("Affected must be a vector or a data.frame, got:", + class(affected) + ) } } if (any(!is.na(avail))) { @@ -506,7 +509,8 @@ setMethod("Pedigree", "data.frame", function( ), cols_ren_rel = list( "id1" = "indId1", - "id2" = "indId2" + "id2" = "indId2", + "famid" = "family" ), hints = list( horder = NULL, @@ -591,7 +595,7 @@ setMethod("Pedigree", "data.frame", function( ped <- Ped(ped_df) rel <- Rel(rel_df) - hints <- Hints(hints) + hints <- Hints(hints$horder, hints$spouse) scales <- Scales() ## Create the object From f228994c7f0e517df23a05a66a15e5905683c6f3 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 18:59:17 +0100 Subject: [PATCH 028/111] Change pedigree show generic --- R/AllGeneric.R | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 421bf0f9..a6a4b5a1 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -349,10 +349,9 @@ setMethod("length", c(x = "Pedigree"), #' @rdname extract-methods #' @aliases show,Pedigree-method setMethod("show", signature(object = "Pedigree"), function(object) { - nb_fam <- length(levels(as.factor(famid(ped(object))))) - cat("Pedigree object with", length(ped(object)), "individuals and", - length(rel(object)), "special relationships across", nb_fam, "families", - fill = TRUE) + cat("Pedigree object with: \n") + print(ped(object)) + print(rel(object)) }) #' @description Pedigree summary method. @@ -361,16 +360,9 @@ setMethod("show", signature(object = "Pedigree"), function(object) { #' @rdname extract-methods #' @aliases summary,Pedigree-method setMethod("summary", signature(object = "Pedigree"), function(object) { - cat("Pedigree object with", nrow(object@ped), "individuals", fill = TRUE) - print(summary(object@ped, maxsum = 5)) - cat("and", nrow(object@rel), "special relationships.", fill = TRUE) - print(summary(object@rel)) - cat("The filling scales columns are:", - levels(as.factor(object@scales$fill$column_values)), fill = TRUE - ) - cat("The border scale column are:", - levels(as.factor(object@scales$border$column)), fill = TRUE - ) + cat("Pedigree object with \n") + print(summary(ped(object))) + print(summary(rel(object))) }) #' Convert a Pedigree object to a list From d43d2dda67c511fb3f9edaa84030ff99197fa9cf Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 18:59:45 +0100 Subject: [PATCH 029/111] Use getters in validity process and correct bugs --- R/AllValidity.R | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/R/AllValidity.R b/R/AllValidity.R index cf4e65b1..101f4001 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -165,7 +165,7 @@ is_valid_scales <- function(object) { } ## Check for numeric columns - col_num <- c("density", "angle", "order") + col_num <- c("density", "angle", "order", "mods") err_num <- col_num[!unlist(lapply(object@fill[col_num], is, "numeric"))] if (length(err_num) > 0) { errors <- c(errors, paste( @@ -175,7 +175,7 @@ is_valid_scales <- function(object) { ## Check for character columns col_char <- c( - "column_values", "column_mods", "mods", "labels", "fill" + "column_values", "column_mods", "labels", "fill" ) err_char <- col_char[!unlist(lapply(object@fill[col_char], is, "character"))] if (length(err_char) > 0) { @@ -186,7 +186,7 @@ is_valid_scales <- function(object) { #### Check that the border columns have the right values #### ## Check for character columns - col_char <- c("column", "mods", "labels", "border") + col_char <- c("column", "labels", "border") err_char <- col_char[!unlist(lapply(object@border[col_char], is, "character"))] if (length(err_char) > 0) { errors <- c(errors, paste( @@ -194,6 +194,15 @@ is_valid_scales <- function(object) { )) } + ## Check for numeric columns + col_num <- c("mods") + err_num <- col_num[!unlist(lapply(object@border[col_num], is, "numeric"))] + if (length(err_num) > 0) { + errors <- c(errors, paste( + err_num, " column(s) must be numeric", sep = "" + )) + } + if (length(errors) == 0) { TRUE } else { @@ -343,10 +352,10 @@ is_valid_pedigree <- function(object) { #### Check that the famid id and individual id present in the rel slot #### #### are present in the ped slot #### errors <- c(errors, check_values( - object@rel@famid, c(object@ped@famid, NA) + object@rel@famid, c(object@ped@famid, NA), "Rel famid" )) - errors <- c(errors, check_values(object@rel@id1, object@ped@id)) - errors <- c(errors, check_values(object@rel@id2, object@ped@id)) + errors <- c(errors, check_values(object@rel@id1, object@ped@id, "Rel id1")) + errors <- c(errors, check_values(object@rel@id2, object@ped@id, "Rel id2")) #### Check if twins has same parents #### code <- object@rel@code @@ -378,28 +387,34 @@ is_valid_pedigree <- function(object) { } #### Check that the scales columns have the right values #### + ped <- as.data.frame(ped(object)) errors <- c(errors, check_values( - object@scales@fill$column_values, colnames(object@ped) + fill(object)$column_values, colnames(ped), + "fill column_values" )) errors <- c(errors, check_values( - object@scales@fill$column_mods, colnames(object@ped) + fill(object)$column_mods, colnames(ped), + "fill column_mods" )) errors <- c(errors, check_values( - object@scales@border$column, colnames(object@ped) + border(object)$column, colnames(ped), + "border column" )) #### Check that all fill modalities are present in the pedigree data #### - for (col in unique(object@scales@fill$column)){ + for (col in unique(fill(object)$column)){ errors <- c(errors, check_values( - object@ped[[col]], - object@scales@fill[object@scales@fill$column_mods == col, "mods"] + ped[[col]], + fill(object)[fill(object)$column_mods == col, "mods"], + paste("fill column", col) )) } #### Check that all borders modalities are present in the pedigree data #### - for (col in unique(object@scales@border$column)){ + for (col in unique(border(object)$column)){ errors <- c(errors, check_values( - object@ped[[col]], - object@scales@border[object@scales@border$column_mods == col, "mods"] + ped[[col]], + border(object)[border(object)$column == col, "mods"], + paste("border column", col) )) } From 2e173259343745138e37460a185655339d21bd09 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 19:00:05 +0100 Subject: [PATCH 030/111] Set affected scales values to logical --- R/generate_aff_inds.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/generate_aff_inds.R b/R/generate_aff_inds.R index e9dd61dc..47a6fbde 100644 --- a/R/generate_aff_inds.R +++ b/R/generate_aff_inds.R @@ -79,7 +79,7 @@ generate_aff_inds <- function(values, mods_aff = NULL, names(aff_to_use) <- c(aff_lab, healthy_lab) labels <- revalue(as.character(mods), labels_to_use, warn_missing = FALSE) - affected <- revalue(labels, aff_to_use, warn_missing = FALSE) + affected <- as.logical(revalue(labels, aff_to_use, warn_missing = FALSE)) as.data.frame(list(mods = mods, labels = labels, affected = affected)) } TRUE From 49db7ff7fcce88c4f9e9c1a1c849544bda088ab8 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 19:00:46 +0100 Subject: [PATCH 031/111] Use getters for fill scales --- R/generate_colors.R | 49 +++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/R/generate_colors.R b/R/generate_colors.R index b928310f..932c530c 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -48,7 +48,6 @@ generate_fill <- function( } mods <- fill <- rep(NA, n) - # Affection modality previously used scale <- unique(as.data.frame( list(mods_aff = labels, affected = affected, fill = fill) @@ -63,8 +62,11 @@ generate_fill <- function( # last of aff fill_to_use <- c(colors_unaff[1], colors_aff[-1], "grey") names(fill_to_use) <- c("FALSE", "TRUE", NA) - fill <- revalue(affected, fill_to_use, warn_missing = FALSE) - mods <- revalue(affected, c("FALSE" = 0, "TRUE" = 1), + fill <- revalue( + as.character(affected), fill_to_use, warn_missing = FALSE + ) + mods <- revalue( + as.character(affected), c("FALSE" = 0, "TRUE" = 1), warn_missing = FALSE ) } else { @@ -136,7 +138,6 @@ generate_fill <- function( density = rep(NA, n), angle = rep(NA, n) ) )) - list(mods = mods, fill_scale = scale) } @@ -262,6 +263,7 @@ setMethod("generate_colors", "numeric", mods_aff, threshold, sup_thres_aff ) border <- generate_border(avail, colors_avail) + lst_sc <- generate_fill( affected_val, affected$affected, affected$labels, keep_full_scale, breaks, colors_aff, colors_unaff @@ -321,7 +323,7 @@ setMethod("generate_colors", "Pedigree", colors_avail = c("green", "black"), reset = TRUE ) { - if (nrow(obj$ped) == 0) { + if (length(obj) == 0) { return(obj) } @@ -338,7 +340,7 @@ setMethod("generate_colors", "Pedigree", } new_col <- paste0(col_aff, "_aff") - df <- check_columns(meta(obj), c(col_aff, col_avail), + df <- check_columns(mcols(obj), c(col_aff, col_avail), "", new_col, others_cols = TRUE ) @@ -348,7 +350,7 @@ setMethod("generate_colors", "Pedigree", colors_aff, colors_unaff, colors_avail ) - deriv(obj, new_col) <- lst_sc$mods + mcols(obj)[new_col] <- lst_sc$mods if (nrow(lst_sc$fill_scale) > 0) { lst_sc$fill_scale$column_mods <- new_col lst_sc$fill_scale$column_values <- col_aff @@ -360,26 +362,29 @@ setMethod("generate_colors", "Pedigree", ) if (add_to_scale) { - if (col_aff %in% obj$scales$fill$column_values & - !reset) { - stop("The column ", col_aff, " is already in the scales") - } else if (col_aff %in% obj$scales$fill$column_values & reset) { - obj$scales$fill <- obj$scales$fill[ - obj$scales$fill$column_values != col_aff, - ] + if (col_aff %in% fill(obj)$column_values) { + if (!reset) { + stop("The column ", col_aff, " is already in the scales") + } else { + new_order <- unique(fill(obj)[ + fill(obj)$column_values == col_aff, + "order" + ]) + fill(obj) <- fill(obj)[ + fill(obj)$column_values != col_aff, + ] + } + } else { + new_order <- ifelse(nrow(fill(obj)) > 0, + max(fill(obj)$order) + 1, 1 + ) } - new_order <- ifelse(nrow(obj$scales$fill) > 0, - max(obj$scales$fill$order) + 1, 1 - ) scales$fill$order <- new_order - scales$fill <- rbind.fill(obj$scales$fill, - scales$fill - ) + scales$fill <- rbind.fill(fill(obj), scales$fill) } else { scales$fill$order <- 1 } - - obj$scales <- scales + scales(obj) <- Scales(scales$fill, scales$border) validObject(obj) obj } From 9653b95d787c0427310736eb8ec982b8646494c1 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 19:01:06 +0100 Subject: [PATCH 032/111] Replace all missid to NA_character --- R/norm_data.R | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/R/norm_data.R b/R/norm_data.R index 5ef2cabd..95d2f76a 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -126,7 +126,7 @@ norm_ped <- function( ped_df$momid <- prefix_famid(ped_df$famid, ped_df$motherId, missid) ped_df <- mutate_at(ped_df, c("id", "dadid", "momid"), - ~replace(., . %in% na_strings, missid) + ~replace(., . %in% c(na_strings, missid), NA_character_) ) #### Sex #### @@ -286,8 +286,8 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { err <- data.frame(matrix(NA, nrow = nrow(rel_df), ncol = length(err_cols))) colnames(err) <- err_cols cols_needed <- c("id1", "id2", "code") - cols_used <- c("error", "famid") - cols_to_use <- c("family") + cols_used <- c("error") + cols_to_use <- c("famid") rel_df <- check_columns( rel_df, cols_needed, cols_used, cols_to_use, others_cols = FALSE, cols_to_use_init = TRUE, cols_used_init = TRUE @@ -306,7 +306,7 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { #### Check for id errors #### Set ids as characters rel_df <- rel_df %>% - mutate(across(c("id1", "id2", "family"), as.character)) + mutate(across(c("id1", "id2", "famid"), as.character)) ## Check for non null ids len1 <- nchar(rel_df$id1) @@ -315,7 +315,6 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { err$id2Err[is.na(len2) | len2 %in% missid] <- "indId2length0" ## Compute id with family id - rel_df$famid <- rel_df$family rel_df$id1 <- prefix_famid(rel_df$famid, rel_df$id1, missid) rel_df$id2 <- prefix_famid(rel_df$famid, rel_df$id2, missid) From 09d21836985499854e323bde178c4298d0b42beb Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 19:01:47 +0100 Subject: [PATCH 033/111] Control for absence of parents Add getters usage for num_child --- R/num_child.R | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/R/num_child.R b/R/num_child.R index 174ea11a..4cc7fdef 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -64,6 +64,15 @@ setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, childs_all <- NULL df <- data.frame(id, dadid, momid, stringsAsFactors = FALSE) + if (nrow(df) == 0) { + df <- data.frame(id = character(), + num_child_dir = integer(), + num_child_ind = integer(), + num_child_tot = integer(), + stringsAsFactors = FALSE + ) + return(df) + } spouse_rel <- unique(df[(!df$dadid %in% missid) & (!df$momid %in% missid), c("dadid", "momid") @@ -143,18 +152,18 @@ setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, #' @param reset If TRUE, the `num_child_tot`, `num_child_ind` and #' the `num_child_dir` columns are reset. setMethod("num_child", "Pedigree", function(obj, reset = FALSE) { - df <- num_child(obj$ped$id, obj$ped$dadid, obj$ped$momid, - rel_df = obj$rel + df <- num_child(id(ped(obj)), dadid(ped(obj)), momid(ped(obj)), + rel_df = rel(obj) ) if (!reset) { - check_columns(obj$ped, NULL, + check_columns(as.data.frame(ped(obj)), NULL, c("num_child_tot", "num_child_ind", "num_child_dir"), NULL, others_cols = TRUE ) } - obj$ped <- merge(obj$ped, + ped(obj) <- merge(as.data.frame(ped(obj)), df[c("id", "num_child_tot", "num_child_ind", "num_child_dir")], by = "id", sort = FALSE ) From 99a6f2cea6f969dbd60d22813096065846e92b11 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 31 Oct 2023 19:02:15 +0100 Subject: [PATCH 034/111] Make first tests work for pedigreeClass --- tests/testthat/test-pedigreeClass.R | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/tests/testthat/test-pedigreeClass.R b/tests/testthat/test-pedigreeClass.R index 5e21c9db..d7b13907 100644 --- a/tests/testthat/test-pedigreeClass.R +++ b/tests/testthat/test-pedigreeClass.R @@ -9,21 +9,20 @@ test_that("Pedigree works", { affection = numeric() )) expect_s4_class(ped, "Pedigree") - expect_equal(nrow(ped@ped), 0) - expect_equal(nrow(ped@rel), 0) - expect_equal(nrow(ped@meta), 0) - expect_equal(nrow(ped@deriv), 0) - expect_equal(length(ped@scales), 2) - expect_equal(length(ped@scales$fill), 9) - expect_equal(length(ped@scales$border), 4) + expect_equal(length(ped@ped), 0) + expect_equal(length(ped@rel), 0) + expect_equal(dim(fill(ped)), c(0, 9)) + expect_equal(dim(border(ped)), c(0, 4)) + expect_equal(dim(spouse(ped)), c(0, 3)) + expect_equal(length(horder(ped)), 0) }) test_that("Pedigree old usage compatibility", { data(sampleped) ped1 <- with(sampleped, - Pedigree(id, dadid, momid, sex, famid, avail, affection) + Pedigree(id, dadid, momid, sex, famid, avail, affection, missid = "0") ) - expect_equal(ped1, Pedigree(sampleped)) + expect_equal(ped1, Pedigree(sampleped, missid = "0")) ped2mat <- matrix(c( 1, 1, 0, 0, 1, @@ -40,21 +39,21 @@ test_that("Pedigree old usage compatibility", { ped2df <- as.data.frame(ped2mat) names(ped2df) <- c("famid", "id", "dadid", "momid", "sex") + ped2df$id <- as.integer(ped2df$id) ## 1 2 3 4 5 6 7 8 9 10,11,12,13,14,15,16 ped2df$disease <- c(NA, NA, 1, 0, 0, 0, 0, 1, 1, 1) ped2df$smoker <- c(0, NA, 0, 0, 1, 1, 1, 0, 0, 0) ped2df$available <- c(0, 0, 1, 1, 0, 1, 1, 1, 1, 1) ped2df$status <- c(1, 1, 1, 0, 1, 0, 0, 0, 0, 0) - ped2 <- with(ped2df, Pedigree(id, dadid, momid, sex, famid, available, status, affected = cbind(disease, smoker, available), - relation = matrix(c(8, 9, 1, 1), ncol = 4) + relation = matrix(c(8, 9, 1, 1), ncol = 4), missid = "0" )) rel_df <- data.frame(id1 = 8, id2 = 9, code = 1, famid = 1) expect_equal(ped2, Pedigree(ped2df, col_aff = c("disease", "smoker", "available"), - rel_df + rel_df, missid = "0" ) ) }) From 6f5d8e80849ad7b5d091d417fb8796ef35882481 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 1 Nov 2023 18:57:06 +0100 Subject: [PATCH 035/111] Replace 0 to NA in dataset --- data/sampleped.rda | Bin 537 -> 559 bytes inst/script/dataset.R | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/data/sampleped.rda b/data/sampleped.rda index cebedfa4f5560dc9df6da523dd51cabfffed69e7..d090493d12bb0781dd40b59d9e5a33d2317abc60 100644 GIT binary patch delta 550 zcmV+>0@?kU1g``ULRx4!F+o`-Q&~SOd5Hi9nvoF}f4~BqtZWXM4FXfsdZv_mMvPBs zKn9u^)F4RF{-~e^fB*mhQ}ra%Q_(aG1ksRa8fl?~N@=8$Z6~Pp4IZN)^#B8D5BNir z7oda;WWpuFMoPdqfgo_}01OmBi6F>3^chtk5Ks=NCNqQq(|?13ZMC!pRa6;T>!2o9 zz3~OVe?>6b_enWEWbG)2)1@MV^@4zM7mp9dR7J!URZ`3-h^W@p716B0U6I9$7ytkO z0000000005%I6lP9x#eM5SzUao5B!AYNs@2d84w*ODR;sj|#>_XAvo(z^teM2^9rs z7?7^SkS3%CWn#)fG!97B3`v#zdokNF(mVsYe;{|Ns}utfHQkI%LljIBRAQ(D$7jsO4@3z3i{WW?HC?Y4s3x^~Qv3ai@nduTG}C2TmxuJfx5naNw+K-J!L zdMvwYO=mgOgd{>bI?19XBoKlj(}sT>I&b;YOvm@%y#EK#-dBtkvd_e1KcEA+3;^*Laz!{$kUuPWiFjG1epX8LRx4!F+o`-Q(2VL{tf^J+K~|!e?S79Aq{pr4Na&M{Zg4tGynhq z8hV2y@g+f^0MO7HGy$OxQj^s6Jp^bPG-P4`F#;q+Drjvdq%`$0spSEXF%KYz2q7$_ zOhQIWplSqx)6f7kSpp=3Ao}zSDv$^$2GDnFge)e9&cBBa?yKRKt>{jo$bG!+6kog) z1CLMYf7C^&Dy8z`8>eRaDoC8V_16Q-ezXEZl9N$;-uB1<0000000000001<~){3WT z**Z@R(s*;6)J5@y5bB&rBo~51oh{-TfHdIO=Nw{Ny21;P9M{uq_ zbbPS&iET@^Aa^RDMFOH}+f^zRWTH!q9$$!X!wJ3G zQb+XiHka(1M1rELGb%Fx000I^Gv5ehM01@I#P9$rg;AzTa_Xo78_c(u11*J+af^}M0fxfRaX?&-<%lFGRkp4MTPOu7xd>!7 zj?V3SKeYPo+o*l}>(9vcU#UGiH=2`Jy=}g$uR3ne`#L4A#@;b~+%waUZ4>XNJ?q{2LJ@h-2(ss diff --git a/inst/script/dataset.R b/inst/script/dataset.R index 4d7e18a3..e025ea23 100644 --- a/inst/script/dataset.R +++ b/inst/script/dataset.R @@ -10,5 +10,9 @@ sampleped <- read.delim("inst/extdata/sampleped.tab", sampleped[c("famid", "id", "dadid", "momid")] <- as.data.frame( lapply(sampleped[c("famid", "id", "dadid", "momid")], as.character) ) +sampleped <- mutate_if( + sampleped, is.character, + ~replace(., . %in% "0", NA) +) summary(sampleped) usethis::use_data(sampleped, overwrite = TRUE) From 63ed3fd1da62ee6f67d3853d09ce095175122dcc Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 1 Nov 2023 18:58:00 +0100 Subject: [PATCH 036/111] Make alignment works --- R/AllAccessors.R | 175 ++++++++++++++++++++++-- R/AllClass.R | 4 +- R/AllConstructor.R | 10 +- R/AllGeneric.R | 26 ++-- R/AllValidity.R | 55 +++++++- R/align.R | 261 ++++++++++++++++++------------------ R/auto_hint.R | 105 +++++++++------ R/best_hint.R | 164 ++++++++++++---------- R/utils.R | 38 +++++- tests/testthat/test-align.R | 41 +++--- 10 files changed, 577 insertions(+), 302 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 666ae491..afcf7e9f 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -50,13 +50,16 @@ setMethod("famid", signature(x = "Ped"), function(x) { setMethod("famid", signature(x = "Rel"), function(x) { x@famid }) +setMethod("famid", signature(x = "Pedigree"), function(x) { + famid(ped(x)) +}) #' Id getter of Ped object -#' +#' #' @param x A Ped object. -#' +#' #' @return A character vector with the id of each individual. -#' +#' #' @rdname Ped #' @aliases id,Ped-method #' @export @@ -66,13 +69,33 @@ setGeneric("id", function(x) { setMethod("id", signature(x = "Ped"), function(x) { x@id }) +setGeneric("id<-", function(x, value) { + standardGeneric("id<-") +}) +setMethod("id<-", + signature(x = "Ped", value = "character_OR_integer"), + function(x, value) { + if (! is.character(value) && ! is.integer(value)) { + stop("id must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for id should be: ", + "equal to the length of the Ped object" + ) + } + x@id <- as.character(value) + validObject(x) + x + } +) #' Dadid getter of Ped object -#' +#' #' @param x A Ped object. -#' +#' #' @return A character vector with the dadid of each individual. -#' +#' #' @rdname Ped #' @aliases dadid,Ped-method #' @export @@ -82,13 +105,33 @@ setGeneric("dadid", function(x) { setMethod("dadid", signature(x = "Ped"), function(x) { x@dadid }) +setGeneric("dadid<-", function(x, value) { + standardGeneric("dadid<-") +}) +setMethod("dadid<-", + signature(x = "Ped", value = "character_OR_integer"), + function(x, value) { + if (! is.character(value) && ! is.integer(value)) { + stop("dadid must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for dadid should be: ", + "equal to the length of the Ped object" + ) + } + x@dadid <- as.character(value) + validObject(x) + x + } +) #' Momid getter of Ped object -#' +#' #' @param x A Ped object. -#' +#' #' @return A character vector with the momid of each individual. -#' +#' #' @rdname Ped #' @aliases momid,Ped-method #' @export @@ -98,13 +141,33 @@ setGeneric("momid", function(x) { setMethod("momid", signature(x = "Ped"), function(x) { x@momid }) +setGeneric("momid<-", function(x, value) { + standardGeneric("momid<-") +}) +setMethod("momid<-", + signature(x = "Ped", value = "character_OR_integer"), + function(x, value) { + if (! is.character(value) && ! is.integer(value)) { + stop("momid must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for momid should be: ", + "equal to the length of the Ped object" + ) + } + x@momid <- as.character(value) + validObject(x) + x + } +) #' Sex getter of Ped object -#' +#' #' @param x A Ped object. -#' +#' #' @return A character vector with the sex of each individual. -#' +#' #' @rdname Ped #' @aliases sex,Ped-method #' @export @@ -114,6 +177,73 @@ setGeneric("sex", function(x) { setMethod("sex", signature(x = "Ped"), function(x) { x@sex }) +setGeneric("sex<-", function(x, value) { + standardGeneric("sex<-") +}) +setMethod("sex<-", + signature(x = "Ped", value = "character_OR_integer"), + function(x, value) { + if ( + ! is.character(value) && + ! is.integer(value) && + ! is.factor(value) + ) { + stop("sex must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for sex should be: ", + "equal to the length of the Ped object" + ) + } + x@sex <- sex_to_factor(value) + validObject(x) + x + } +) + +#### S4 Rel Accessors #### +#' Code accessor of Rel object +#' +#' @param x A Rel object. +#' +#' @return A character vector with the code of each relationship. +#' +#' @rdname Rel +#' @aliases code,Rel-method +#' @export +setGeneric("code", function(x) { + standardGeneric("code") +}) +setMethod("code", signature(x = "Rel"), function(x) { + x@code +}) + +#' Id1 accessor of Rel object +#' @param x A Rel object. +#' @return A character vector with the id1 of each relationship. +#' @rdname Rel +#' @aliases id1,Rel-method +#' @export +setGeneric("id1", function(x) { + standardGeneric("id1") +}) +setMethod("id1", signature(x = "Rel"), function(x) { + x@id1 +}) + +#' Id2 accessor of Rel object +#' @param x A Rel object. +#' @return A character vector with the id2 of each relationship. +#' @rdname Rel +#' @aliases id2,Rel-method +#' @export +setGeneric("id2", function(x) { + standardGeneric("id2") +}) +setMethod("id2", signature(x = "Rel"), function(x) { + x@id2 +}) #### S4 Pedigree Accessors #### #' @title Pedigree ped accessors @@ -173,6 +303,16 @@ setMethod( } ) +setMethod( + "ped<-", + signature(object = "Pedigree", slot = "missing", value = "Ped"), + function(object, slot, value) { + object@ped <- value + validObject(object) + object + } +) + #### S4 metadata Accessors #### #' @title Pedigree metadata accessors #' @param object A Pedigree object. @@ -388,6 +528,17 @@ setGeneric("hints", function(object) { setMethod("hints", signature(object = "Pedigree"), function(object) { object@hints }) +setGeneric("hints<-", function(object, value) { + standardGeneric("hints<-") +}) + +setMethod("hints<-", signature(object = "Pedigree", value = "Hints"), function( + object, value +) { + object@hints <- value + validObject(object) + object +}) #### S4 horder Accessors #### #' @title Pedigree horder accessors diff --git a/R/AllClass.R b/R/AllClass.R index 24aeaddb..6648ef83 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -13,7 +13,7 @@ setClassUnion("missing_OR_NULL", c("missing", "NULL")) #' A hints object is a list of two elements used #' to order the individuals in the pedigree plot. #' -#' @slot horder A character vector with one element per subject in the +#' @slot horder A numeric vector with one element per subject in the #' Pedigree. It determines the relative horizontal order of subjects within #' a sibship, as well as the relative order of processing for the founder #' couples. (For this latter, the female founders are ordered as though they @@ -32,7 +32,7 @@ setClassUnion("missing_OR_NULL", c("missing", "NULL")) #' @export setClass("Hints", representation( - horder = "character", + horder = "numeric", spouse = "data.frame" ) ) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index bcf02c56..446cfa2c 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -234,9 +234,9 @@ setGeneric("Hints", function(horder, spouse) { #' @rdname Hints #' @export setMethod("Hints", - signature(horder = "character_OR_integer", spouse = "data.frame"), + signature(horder = "numeric", spouse = "data.frame"), function(horder, spouse) { - new("Hints", horder = as.character(horder), spouse = spouse) + new("Hints", horder = horder, spouse = spouse) } ) @@ -244,7 +244,7 @@ setMethod("Hints", #' @rdname Hints #' @export setMethod("Hints", - signature(horder = "character_OR_integer", spouse = "missing_OR_NULL"), + signature(horder = "numeric", spouse = "missing_OR_NULL"), function(horder, spouse) { dfe <- data.frame("idl" = character(), "idr" = character(), "anchor" = factor() @@ -259,7 +259,7 @@ setMethod("Hints", setMethod("Hints", signature(horder = "missing_OR_NULL", spouse = "data.frame"), function(horder, spouse) { - new("Hints", horder = character(), spouse = spouse) + new("Hints", horder = numeric(), spouse = spouse) } ) @@ -272,7 +272,7 @@ setMethod("Hints", dfe <- data.frame("idl" = character(), "idr" = character(), "anchor" = factor() ) - new("Hints", horder = character(), spouse = dfe) + new("Hints", horder = numeric(), spouse = dfe) } ) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index a6a4b5a1..7cb0e7ea 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -127,7 +127,6 @@ setMethod("subset", "Ped", function(x, i, del_parents = FALSE) { ped_df$dadid[!ped_df$dadid %in% ped_df$id] <- NA_character_ ped_df$momid[!ped_df$momid %in% ped_df$id] <- NA_character_ } - print(ped_df) new_ped <- Ped(ped_df) validObject(new_ped) new_ped @@ -395,21 +394,16 @@ setMethod("as.list", "Pedigree", function(x) { #' @rdname extract-methods setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), function(x, i, j, drop = TRUE) { - if (is.factor(i)) { - i <- as.character(i) - } - if (is.character(i)) { - i <- which(x$ped$id %in% i) - } - ped_df <- x$ped[i, ] - allId <- unique(c(ped_df$id, ped_df$dadid, ped_df$momid)) - rel_df <- x$rel[x$rel$id1 %in% allId & x$rel$id2 %in% allId, ] - idx <- match(allId, ped_df$id, nomatch = 0) - sub_hints <- sub_sel_hints(hints(x), idx) - new_ped <- Pedigree(ped_df, rel_df, x$scales, - hints = sub_hints, cols_ren_ped = NULL, normalize = FALSE + new_ped <- subset(ped(x), i) + all_id <- id(new_ped) + new_rel <- subset(rel(x), all_id) + new_hints <- subset(hints(x), all_id) + + new_pedi <- new("Pedigree", + ped = new_ped, rel = new_rel, + hints = new_hints, scales = scales(x) ) - validObject(new_ped) - new_ped + validObject(new_pedi) + new_pedi } ) \ No newline at end of file diff --git a/R/AllValidity.R b/R/AllValidity.R index 101f4001..58e183ec 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -103,8 +103,8 @@ is_valid_hints <- function(object) { errors <- c() #### Check that the slots are of the right class #### - if (! is.character(object@horder)) { - errors <- c(errors, "horder slot must be character") + if (! is.numeric(object@horder)) { + errors <- c(errors, "horder slot must be numeric") } if (! is.data.frame(object@spouse)) { errors <- c(errors, "spouse slot must be a data.frame") @@ -112,7 +112,7 @@ is_valid_hints <- function(object) { #### Check that the horder slot is valid #### errors <- c(errors, check_values( - object@horder, c(NA_character_, ""), "horder", present = FALSE + object@horder, NA_real_, "horder", present = FALSE )) #### Check that the hints spouse data.frame is valid #### @@ -128,6 +128,21 @@ is_valid_hints <- function(object) { object@spouse$anchor, c("left", "right", "either"), "anchor" )) + idmin <- pmin(object@spouse$idl, object@spouse$idr) + idmax <- pmax(object@spouse$idl, object@spouse$idr) + if (any(idmin == idmax)) { + errors <- c(errors, "idl and idr should be different") + } + dup <- anyDuplicated(cbind(idmin, idmax)) + if (dup) { + dup <- paste(idmin[dup], idmax[dup], sep = "_") + errors <- c(errors, paste( + "idl and idr should be unique:", + paste(dup, collapse = ", "), + "couples are present more than once in the spouse slot." + )) + } + return(errors) } @@ -418,6 +433,40 @@ is_valid_pedigree <- function(object) { )) } + #### Check that the hints are valid #### + if (length(horder(object)) > 0 && + length(horder(object)) != length(object) + ) { + errors <- c(errors, + "Length for horder component should be equal to Pedigree length" + ) + } + + idl <- spouse(object)$idl + idr <- spouse(object)$idr + + ## Check for presence of spouses in Ped object + idabs <- c(idl, idr)[!c(idl, idr) %in% id(ped(object))] + if (length(idabs) > 0) { + errors <- c(errors, paste( + "Hints spouse(s)", + paste(idabs, sep = ","), + "not present in the Ped object" + )) + } + + ## Check for sex of spouses + idls <- sex(ped(object))[match(idl, id(ped(object)))] + idlr <- sex(ped(object))[match(idr, id(ped(object)))] + sps <- paste(idls, idlr, sep = "_") + sps <- sps %in% c("female_male", "male_female") + if (any(!sps)) { + errors <- c(errors, paste( + "Hints spouse(s)", + paste(paste(idl[!sps], idr[!sps], sep = "_"), sep = ","), + "not female, male" + )) + } if (length(errors) == 0) { TRUE } else { diff --git a/R/align.R b/R/align.R index 66fcbf9c..dfecc007 100644 --- a/R/align.R +++ b/R/align.R @@ -112,7 +112,6 @@ ancestors <- function(idx, momx, dadx) { #' @export #' @include auto_hint.R #' @include kindepth.R -#' @include check_hints.R #' @include AllClass.R #' @include alignped1.R #' @include alignped2.R @@ -123,144 +122,146 @@ setGeneric("align", signature = "obj", ) setMethod("align", "Pedigree", - function(obj, packed = TRUE, width = 10, - align = TRUE, hints = obj@hints, missid = "NA_character_" -) { - align(ped(obj), packed, width, align, hints, missid) -}) + function( + obj, packed = TRUE, width = 10, + align = TRUE, hints = obj@hints, missid = "NA_character_" + ) { + famlist <- unique(famid(obj)) + if (length(famlist) > 1) { + nfam <- length(famlist) + alignment <- vector("list", nfam) + for (i_fam in famlist) { + ped_fam <- obj[famid(obj) == i_fam] + alignment[[i_fam]] <- align(ped_fam, packed, width, align) + } + return(alignment) + } + if (!is(hints, "Hints")) { + stop("hints must be a Hints object") + } + if (length(horder(hints)) == 0) { + hints <- try({ + auto_hint(obj) + }, silent = TRUE) + if ("try-error" %in% class(hints)) { + hints <- Hints(horder = seq_len(max(1, length(ped)))) + } + } + ## Doc: Setup-align + n <- length(obj) + level <- 1 + kindepth(obj, align = TRUE) + ## relative order of siblings within a family + horder <- horder(hints) -align <- function(ped, packed = TRUE, width = 10, - align = TRUE, hints = NULL, missid = "NA_character_" -) { - famlist <- unique(ped(ped, "famid")) - if (length(famlist) > 1) { - nfam <- length(famlist) - alignment <- vector("list", nfam) - for (i_fam in famlist) { - ped_fam <- ped[ped(ped, "famid") == i_fam] - alignment[[i_fam]] <- align(ped_fam, packed, width, align) + if (nrow(spouse(hints)) > 0) { + # start with the hints list + idxl <- match(spouse(hints)$idl, id(ped(obj))) + idxr <- match(spouse(hints)$idr, id(ped(obj))) + tsex <- sex(ped(obj))[idxl] # sex of the left member + spouselist <- cbind(0, 0, 1 + (tsex != "male"), spouse(hints)$anchor) + spouselist[, 1] <- ifelse(tsex == "male", idxl, idxr) + spouselist[, 2] <- ifelse(tsex == "male", idxr, idxl) + } else { + spouselist <- matrix(0L, nrow = 0, ncol = 4) } - return(alignment) - } - if (is.null(hints$horder)) { - hints <- try({ - auto_hint(ped) - }, silent = TRUE) - ## sometimes appears dim(ped) is empty (ped is NULL), so try fix here: - ## (JPS 6/6/17 - if ("try-error" %in% class(hints)) { - hints <- list(horder = seq_len(max(1, dim(ped)))) + if (any(code(rel(obj)) == "Spouse")) { + # Add spouses from the relationship matrix + trel <- as.data.frame(rel(obj)) + trel <- trel[trel$code == "Spouse", c("id1", "id2")] + trel$id1 <- match(trel$id1, id(ped(obj))) + trel$id2 <- match(trel$id2, id(ped(obj))) + tsex <- sex(ped(obj))[trel$id1] + trel[tsex != "male", seq_len(2)] <- trel[tsex != "male", 2:1] + spouselist <- rbind(spouselist, cbind(trel[, 1], trel[, 2], 0, 0)) } - } else { - check_hints(hints, ped(ped, "sex")) - } - ## Doc: Setup-align - n <- length(ped(ped, "id")) - level <- 1 + kindepth(ped, align = TRUE) - horder <- hints$horder # relative order of siblings within a family + dad <- match(dadid(ped(obj)), id(ped(obj)), nomatch = 0) + mom <- match(momid(ped(obj)), id(ped(obj)), nomatch = 0) + is_child <- dad > 0 & mom > 0 + if (any(is_child)) { + # add parents + who <- which(is_child) + spouselist <- rbind(spouselist, cbind(dad[who], mom[who], 0, 0)) + } - if (!is.null(hints$spouse)) { - # start with the hints list - tsex <- ped(ped, "sex")[hints$spouse[, 1]] # sex of the left member - spouselist <- cbind(0, 0, 1 + (tsex != "male"), hints$spouse[, 3]) - spouselist[, 1] <- ifelse(tsex == "male", hints$spouse[, 1], - hints$spouse[, 2] + hash <- spouselist[, 1] * n + spouselist[, 2] + spouselist <- spouselist[!duplicated(hash), , drop = FALSE] + ## Doc: Founders -align + noparents <- (dad[spouselist[, 1]] == 0 & dad[spouselist[, 2]] == 0) + ## Take duplicated mothers and fathers, then founder mothers + dupmom <- spouselist[noparents, 2][duplicated(spouselist[noparents, 2])] + ## Founding mothers with multiple marriages + dupdad <- spouselist[noparents, 1][duplicated(spouselist[noparents, 1])] + ## Founding fathers with multiple marriages + foundmom <- spouselist[ + noparents & !(spouselist[, 1] %in% c(dupmom, dupdad)), 2 + ] # founding mothers + founders <- unique(c(dupmom, dupdad, foundmom)) + # use the hints to order them + founders <- founders[order(horder[founders])] + rval <- alignped1( + founders[1], dad, mom, level, horder, packed, spouselist ) - spouselist[, 2] <- ifelse(tsex == "male", hints$spouse[, 2], - hints$spouse[, 1] - ) - } else { - spouselist <- matrix(0L, nrow = 0, ncol = 4) - } + if (length(founders) > 1) { + spouselist <- rval$spouselist + for (i in 2:length(founders)) { + rval2 <- alignped1(founders[i], dad, mom, level, horder, packed, + spouselist + ) + spouselist <- rval2$spouselist + rval <- alignped3(rval, rval2, packed) + } + } + ## Doc: finish-align (1) Unhash out the spouse and nid arrays + nid <- matrix(as.integer(floor(rval$nid)), nrow = nrow(rval$nid)) + spouse <- 1L * (rval$nid != nid) + maxdepth <- nrow(nid) - if (nrow(rel(ped)) > 0 && any(rel(ped, "code") == "Spouse")) { - # Add spouses from the relationship matrix - trel <- rel(ped, c("id1", "id2"))[ - rel(ped, "code") == "Spouse", drop = FALSE - ] - trel$id1 <- match(trel$id1, ped(ped, "id")) - trel$id2 <- match(trel$id2, ped(ped, "id")) - tsex <- ped(ped, "sex")[trel[, 1]] - trel[tsex != "male", seq_len(2)] <- trel[tsex != "male", 2:1] - spouselist <- rbind(spouselist, cbind(trel[, 1], trel[, 2], 0, 0)) - } - dad <- match(ped(ped, "dadid"), ped(ped, "id"), nomatch = 0) - mom <- match(ped(ped, "momid"), ped(ped, "id"), nomatch = 0) - is_child <- dad > 0 & mom > 0 - if (any(is_child)) { - # add parents - who <- which(is_child) - spouselist <- rbind(spouselist, cbind(dad[who], mom[who], 0, 0)) - } - hash <- spouselist[, 1] * n + spouselist[, 2] - spouselist <- spouselist[!duplicated(hash), , drop = FALSE] - ## Doc: Founders -align - noparents <- (dad[spouselist[, 1]] == 0 & dad[spouselist[, 2]] == 0) - ## Take duplicated mothers and fathers, then founder mothers - dupmom <- spouselist[noparents, 2][duplicated(spouselist[noparents, 2])] - ## Founding mothers with multiple marriages - dupdad <- spouselist[noparents, 1][duplicated(spouselist[noparents, 1])] - ## Founding fathers with multiple marriages - foundmom <- spouselist[ - noparents & !(spouselist[, 1] %in% c(dupmom, dupdad)), 2 - ] # founding mothers - founders <- unique(c(dupmom, dupdad, foundmom)) - # use the hints to order them - founders <- founders[order(horder[founders])] - rval <- alignped1(founders[1], dad, mom, level, horder, packed, spouselist) - if (length(founders) > 1) { - spouselist <- rval$spouselist - for (i in 2:length(founders)) { - rval2 <- alignped1(founders[i], dad, mom, level, horder, packed, - spouselist - ) - spouselist <- rval2$spouselist - rval <- alignped3(rval, rval2, packed) + for (i in (seq_along(spouse))[spouse > 0]) { + a1 <- ancestors(nid[i], mom, dad) + # matrices are in column order + a2 <- ancestors(nid[i + maxdepth], mom, dad) + if (any(duplicated(c(a1, a2)))) { + spouse[i] <- 2 + } } - } - ## Doc: finish-align (1) Unhash out the spouse and nid arrays - nid <- matrix(as.integer(floor(rval$nid)), nrow = nrow(rval$nid)) - spouse <- 1L * (rval$nid != nid) - maxdepth <- nrow(nid) - for (i in (seq_along(spouse))[spouse > 0]) { - a1 <- ancestors(nid[i], mom, dad) - # matrices are in column order - a2 <- ancestors(nid[i + maxdepth], mom, dad) - if (any(duplicated(c(a1, a2)))) { - spouse[i] <- 2 + ## Doc: finish align(2) + if (length(rel(obj)) > 0 && any(code(rel(obj)) != "Spouse")) { + twins <- 0 * nid + who <- (code(rel(obj)) != "Spouse") + ltwin <- match(id1(rel(obj))[who], id(ped(obj)), nomatch = 0) + rtwin <- match(id2(rel(obj))[who], id(ped(obj)), nomatch = 0) + ttype <- code(rel(obj))[who] + ## find where each of them is plotted + ## (any twin only appears once with a + ## family id, i.e., under their parents) + ## matrix of connected-to-parent ids + ntemp <- ifelse(rval$fam > 0, nid, 0) + ltemp <- (seq_along(ntemp))[match(ltwin, ntemp, nomatch = 0)] + rtemp <- (seq_along(ntemp))[match(rtwin, ntemp, nomatch = 0)] + twins[pmin(ltemp, rtemp)] <- ttype + } else { + twins <- NULL + } + ## Doc: finish align(3) + if ((is.numeric(align) || align) && max(level) > 1) { + pos <- alignped4(rval, spouse > 0, level, width, align) + } else { + pos <- rval$pos + } + if (is.null(twins)) { + list( + n = rval$n, nid = nid, pos = pos, + fam = rval$fam, spouse = spouse + ) + } else { + list( + n = rval$n, nid = nid, pos = pos, + fam = rval$fam, spouse = spouse, + twins = twins + ) } } - ## Doc: finish align(2) - if (nrow(rel(ped)) > 0 && any(rel(ped, "code") != "Spouse")) { - twins <- 0 * nid - who <- (rel(ped, "code") != "Spouse") - ltwin <- match(rel(ped, "id1")[who], ped(ped, "id"), nomatch = 0) - rtwin <- match(rel(ped, "id2")[who], ped(ped, "id"), nomatch = 0) - ttype <- rel(ped, "code")[who] - # find where each of them is plotted (any twin only appears once with a - # family id, i.e., under their parents) - # matrix of connected-to-parent ids - ntemp <- ifelse(rval$fam > 0, nid, 0) - ltemp <- (seq_along(ntemp))[match(ltwin, ntemp, nomatch = 0)] - rtemp <- (seq_along(ntemp))[match(rtwin, ntemp, nomatch = 0)] - twins[pmin(ltemp, rtemp)] <- ttype - } else { - twins <- NULL - } - ## Doc: finish align(3) - if ((is.numeric(align) || align) && max(level) > 1) { - pos <- alignped4(rval, spouse > 0, level, width, align) - } else { - pos <- rval$pos - } - if (is.null(twins)) { - list(n = rval$n, nid = nid, pos = pos, fam = rval$fam, spouse = spouse) - } else { - list(n = rval$n, nid = nid, pos = pos, fam = rval$fam, spouse = spouse, - twins = twins - ) - } -} +) \ No newline at end of file diff --git a/R/auto_hint.R b/R/auto_hint.R index 7ad9e09f..adc86040 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -226,18 +226,17 @@ duporder <- function(idlist, plist, lev, ped) { #' 3. `twinord` the order of the twins #' @seealso [auto_hint()] get_twin_rel <- function(ped) { - if (is.null(rel(ped))) { + if (length(rel(ped)) == 0) { relation <- NULL } else { - relation <- cbind( - as.matrix(rel(ped, c("id1", "id2"))), - as.numeric(rel(ped, "code")) - ) + relation <- as.data.frame(rel(ped))[, c("id1", "id2", "code")] + relation$code <- as.numeric(relation$code) } n <- length(ped) twinset <- rep(0, n) twinord <- rep(1, n) twinrel <- NULL + if (!is.null(relation) && any(relation[, 3] < 4)) { ## Select only siblings relationships temp <- (relation[, 3] < 4) @@ -299,41 +298,50 @@ get_twin_rel <- function(ped) { #' ped <- Pedigree(sampleped[sampleped$famid == 1, ]) #' auto_hint(ped) #' @export -auto_hint <- function( - ped, hints = NULL, packed = TRUE, align = FALSE, reset = FALSE +setGeneric("auto_hint", signature = "obj", + function(obj, ...) standardGeneric("auto_hint") +) + +setMethod("auto_hint", "Pedigree", function(obj, + hints = NULL, packed = TRUE, align = FALSE, reset = FALSE ) { ## full documentation now in vignette: align_code_details.Rmd ## References to those sections appear here as: ## Doc: auto_hint - if ((!is.null(order(ped)) || - !is.null(spouse(ped)) - ) && !reset - ) { - return(hints(ped)) + if (!is.null(hints) && is(hints, "Hints")) { + if ( + (length(horder(hints)) != 0 || length(spouse(hints)) != 0) && !reset + ) { + return(hints(obj)) + } } # nothing to do - if (length(unique(ped(ped, "famid"))) > 1) { + if (length(unique(famid(ped(obj)))) > 1) { stop("auto_hint only works on Pedigrees with a single family") } - n <- length(ped) - depth <- kindepth(ped, align_parents = TRUE) + n <- length(obj) + depth <- kindepth(obj, align_parents = TRUE) - ## Doc: init-auto_hint + ## Doc: init-auto_hint horder if (!is.null(hints)) { if (is.vector(hints)) { - hints <- list(horder = hints) - } - if (is.matrix(hints)) { - hints <- list(spouse = hints) + hints <- Hints(horder = hints) + } else if (is.matrix(hints)) { + hints <- Hints(spouse = hints) + } else if (is.list(hints)) { + hints <- Hints(hints) + } else if (!is(hints, "Hints")) { + stop("hints must be a vector, matrix, list or Hints object") } - if (is.null(hints$horder)) { + if (is.null(horder(hints))) { horder <- integer(n) } else { - horder <- hints$horder + horder <- horder(hints) } } else { - horder <- integer(n) + hints <- Hints(horder = integer(n)) + horder <- horder(hints) } for (i in unique(depth)) { @@ -344,7 +352,7 @@ auto_hint <- function( } } - twin_rel <- get_twin_rel(ped = ped) + twin_rel <- get_twin_rel(ped = obj) twinset <- twin_rel$twinset twinord <- twin_rel$twinord twinrel <- twin_rel$twinrel @@ -360,32 +368,32 @@ auto_hint <- function( } # Then reset to integers - for (i in unique(ped$depth)) { - who <- (ped$depth == i) + for (i in unique(depth)) { + who <- (depth == i) horder[who] <- rank(horder[who]) # there should be no ties } } - if (!is.null(hints)) { - sptemp <- hints$spouse + if (nrow(spouse(hints)) > 0) { + sptemp <- spouse(hints) } else { sptemp <- NULL } - plist <- align(ped, + plist <- align(obj, packed = packed, align = align, - hints = list(horder = horder, spouse = sptemp) + hints = Hints(horder = horder, spouse = sptemp) ) ## Doc: fixup-2 - ## Fix if duplicate individuales present + ## Fix if duplicate individuals present maxlev <- nrow(plist$nid) for (lev in seq_len(maxlev)) { # subjects on this level idlist <- plist$nid[lev, seq_len(plist$n[lev])] # duplicates to be dealt with - dpairs <- duporder(idlist, plist, lev, ped) + dpairs <- duporder(idlist, plist, lev, obj) if (nrow(dpairs) == 0) next for (i in seq_len(nrow(dpairs))) { anchor <- spouse <- rep(0, 2) @@ -404,7 +412,7 @@ auto_hint <- function( } } else { # spouse at this location connected to parents ? - spouse[j] <- findspouse(idpos, plist, lev, ped) + spouse[j] <- findspouse(idpos, plist, lev, obj) if (plist$fam[lev, spouse[j]] > 0) { # Yes they are anchor[j] <- 2 # spousal anchor sibs <- idlist[findsibs(spouse[j], plist, lev)] @@ -439,18 +447,39 @@ auto_hint <- function( warning("Unexpected result in auto_hint,", "please contact developer" ) - return(list(horder = seq_len(n))) # punt + return(Hints(horder = seq_len(n))) # punt } else { + if (is.vector(temp)) { + temp <- data.frame( + idl = temp[1], idr = temp[2], anchor = temp[3] + ) + } else if (is.matrix(temp)) { + temp <- data.frame( + idl = temp[, 1], idr = temp[, 2], + anchor = temp[, 3] + ) + } sptemp <- rbind(sptemp, temp) } } # # Recompute, since this shifts things on levels below # - plist <- align(ped, + new_spouse <- data.frame( + idl = id(ped(obj))[sptemp$idl], + idr = id(ped(obj))[sptemp$idr], + anchor = anchor_to_factor(sptemp$anchor) + ) + plist <- align(obj, packed = packed, align = align, - hints = list(horder = horder, spouse = sptemp) + hints = Hints(horder = horder, spouse = new_spouse) ) } - list(horder = horder, spouse = sptemp) -} + + new_spouse <- data.frame( + idl = id(ped(obj))[sptemp$idl], + idr = id(ped(obj))[sptemp$idr], + anchor = anchor_to_factor(sptemp$anchor) + ) + Hints(horder = horder, spouse = new_spouse) +}) diff --git a/R/best_hint.R b/R/best_hint.R index 3022b1fc..b8b600e3 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -1,3 +1,18 @@ +# This function generates the permutations one after the other +permute <- function(x) { + n <- length(x) + if (n == 3) { + rbind(x[seq_len(3)], x[c(2, 1, 3)], x[c(3, 1, 2)]) + } else { + temp <- paste( + "cbind(x[", seq_len(n), "], permute(x[-", seq_len(n), "]))", + collapse = "," + ) + temp <- paste("rbind(", temp, ")") + eval(parse(text = temp)) + } +} + #' Best hint for alignment #' #' @description @@ -46,88 +61,89 @@ #' best_hint(ped) #' @include auto_hint.R #' @include align.R -best_hint <- function(ped, wt = c(1000, 10, 1), tolerance = 0) { - # find founders married to founders the female of such pairs - # determines the plot order of founders - mom <- match(ped(ped, "momid"), ped(ped, "id")) - dad <- match(ped(ped, "dadid"), ped(ped, "id")) - # founders and marry-ins - founders <- ped(ped, "id")[is.na(mom) & is.na(dad)] - fpair <- !(is.na(match(ped(ped, "momid"), founders)) | - is.na(match(ped(ped, "dadid"), founders)) - ) - # row num of founding moms - fmom <- unique(match(ped(ped, "momid")[fpair], ped(ped, "id"))) - - # This function generates the permutations one after the other - permute <- function(x) { - n <- length(x) - if (n == 3) { - rbind(x[seq_len(3)], x[c(2, 1, 3)], x[c(3, 1, 2)]) - } else { - temp <- paste( - "cbind(x[", seq_len(n), "], permute(x[-", seq_len(n), "]))", - collapse = "," - ) - temp <- paste("rbind(", temp, ")") - eval(parse(text = temp)) - } +setGeneric( + "best_hint", signature = "obj", + function(obj, ...) { + standardGeneric("best_hint") } - pmat <- permute(seq_along(fmom)) - # Put the subsets into a random order For most Pedigrees, - # there are several permutations that will give a tolerance - # or near tolerance plot. - # This way we should hit one of them soon. - pmat <- pmat[order(runif(nrow(pmat))), ] +) + +setMethod( + "best_hint", "Pedigree", + function(obj, wt = c(1000, 10, 1), tolerance = 0) { - n <- length(ped(ped, "id")) - for (perm in seq_len(nrow(pmat))) { - hint <- cbind(seq_len(n), rep(0, n)) - hint[fmom, 1] <- pmat[perm, ] - # this fixes up marriages and such - newhint <- auto_hint(ped, hints = hint[, 1]) - plist <- align( - ped, packed = TRUE, align = TRUE, width = 8, hints = newhint + # find founders married to founders the female of such pairs + # determines the plot order of founders + momid <- momid(ped(obj)) + dadid <- dadid(ped(obj)) + id <- id(ped(obj)) + mom <- match(momid, id) + dad <- match(dadid, id) + # founders and marry-ins + founders <- id[is.na(mom) & is.na(dad)] + fpair <- !(is.na(match(momid, founders)) | + is.na(match(dadid, founders)) ) + # row num of founding moms + fmom <- unique(match(momid[fpair], id)) + pmat <- permute(seq_along(fmom)) + # Put the subsets into a random order For most Pedigrees, + # there are several permutations that will give a tolerance + # or near tolerance plot. + # This way we should hit one of them soon. + pmat <- pmat[order(runif(nrow(pmat))), ] - # Compute the error measures - err <- rep(0, 3) - maxlev <- nrow(plist$nid) - for (lev in seq_len(maxlev)) { - idlist <- plist$nid[lev, seq_len(plist$n[lev])] - dups <- duplicated(idlist) - if (any(dups)) { - err[1] <- err[1] + sum(dups) - for (i in idlist[dups]) { - who <- (seq_along(idlist))[match( - idlist, i, nomatch = 0 - ) > 0] - err[2] <- err[2] + abs(diff(plist$pos[lev, who])) + n <- length(obj) + for (perm in seq_len(nrow(pmat))) { + hint <- cbind(seq_len(n), rep(0, n)) + hint[fmom, 1] <- pmat[perm, ] + # this fixes up marriages and such + newhint <- auto_hint( + obj, hints = Hints(horder = hint[, 1]), reset = TRUE + ) + plist <- align( + obj, packed = TRUE, align = TRUE, width = 8, hints = newhint + ) + + # Compute the error measures + err <- rep(0, 3) + maxlev <- nrow(plist$nid) + for (lev in seq_len(maxlev)) { + idlist <- plist$nid[lev, seq_len(plist$n[lev])] + dups <- duplicated(idlist) + if (any(dups)) { + err[1] <- err[1] + sum(dups) + for (i in idlist[dups]) { + who <- (seq_along(idlist))[match( + idlist, i, nomatch = 0 + ) > 0] + err[2] <- err[2] + abs(diff(plist$pos[lev, who])) + } } - } - # get parent-child pulls - fam2 <- plist$fam[lev, ] - if (any(fam2 > 0)) { - # center of kids - centers <- tapply(plist$pos[lev, ], fam2, mean) - if (any(fam2 == 0)) { - centers <- centers[-1] + # get parent-child pulls + fam2 <- plist$fam[lev, ] + if (any(fam2 > 0)) { + # center of kids + centers <- tapply(plist$pos[lev, ], fam2, mean) + if (any(fam2 == 0)) { + centers <- centers[-1] + } + # parents + above <- plist$pos[lev - 1, sort(unique(fam2))] + 0.5 + err[3] <- err[3] + sum(abs(centers - above)) } - # parents - above <- plist$pos[lev - 1, sort(unique(fam2))] + 0.5 - err[3] <- err[3] + sum(abs(centers - above)) } - } - # best one so far? - total <- sum(err * wt) - if (perm == 1 || total < besttot) { - besttot <- total - besthint <- newhint + # best one so far? + total <- sum(err * wt) + if (perm == 1 || total < besttot) { + besttot <- total + besthint <- newhint + } + if (besttot <= tolerance) + break # we needn't do better than this! } - if (besttot <= tolerance) - break # we needn't do better than this! + besthint } - besthint -} +) diff --git a/R/utils.R b/R/utils.R index 06ce10be..99248c14 100644 --- a/R/utils.R +++ b/R/utils.R @@ -249,7 +249,6 @@ sex_to_factor <- function(sex) { ), sex_equiv, warn_missing = FALSE)) sex_codes <- c("male", "female", "unknown", "terminated") sex[!sex %in% sex_codes] <- "unknown" - sex <- factor(sex, sex_codes, ordered = TRUE) sex @@ -333,4 +332,39 @@ vect_to_binary <- function(vect) { vect[!vect %in% c(0, 1)] <- NA vect } -TRUE + +#' Transform a anchor variable to an ordered factor +#' +#' @param anchor A character, factor or numeric vector corresponding to +#' the anchor of the individuals. The following values are recognized: +#' - character() or factor() : "0", "1", "2", "left", "right", "either" +#' - numeric() : 1 = "left", 2 = "right", 0 = "either" +#' +#' @return an ordered factor vector containing the transformed variable +#' "either" < "left" < "right" +#' @examples +#' anchor_to_factor(c(1, 2, 0, "left", "right", "either")) +#' @export +anchor_to_factor <- function(anchor) { + if (is.factor(anchor) || is.numeric(anchor)) { + anchor <- as.character(anchor) + } + ## Normalized difference notations for anchor + anchor_equiv <- c( + "0" = "either", "1" = "left", "2" = "right", + "left" = "left", "right" = "right", "either" = "either" + ) + anchor <- as.character(revalue(as.factor( + casefold(anchor, upper = FALSE) + ), anchor_equiv, warn_missing = FALSE)) + anchor_codes <- c("left", "right", "either") + if (any(!anchor %in% anchor_codes)) { + stop(paste( + "The following values are not recognized :", + paste0(unique(anchor[!anchor %in% anchor_codes]), collapse = ", "), + ".\n" + )) + } + + factor(anchor, anchor_codes, ordered = TRUE) +} diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index c7d702e2..04549df1 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -1,30 +1,29 @@ test_that("align works", { data("sampleped") - ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "famid") == 1] + pedi <- Pedigree(sampleped) + ped1 <- pedi[famid(pedi) == "1"] plist1 <- align(ped1) expect_equal(plist1$n, c(6, 12, 17, 8)) - ped2 <- ped[ped(ped, "famid") == 2] + ped2 <- pedi[famid(pedi) == 2] withr::local_options(width = 50) plist2 <- align(ped2) expect_equal(plist2$n, c(2, 7, 5)) - plist <- align(ped) + plist <- align(pedi) expect_equal(plist[["1"]]$n, plist1$n) expect_equal(plist[["2"]]$n, plist2$n) - }) test_that("test auto_hint works", { data("sampleped") - ped <- Pedigree(sampleped) - expect_equal(sum(kindepth(ped)), 73) - expect_error(auto_hint(ped)) #this fixes up marriages and such + pedi <- Pedigree(sampleped) + expect_equal(sum(kindepth(pedi)), 73) + expect_error(auto_hint(pedi)) # Works only on 1 family - ped <- Pedigree(sampleped[-1]) - newhint <- auto_hint(ped) - plist <- align(ped, packed = TRUE, + pedi <- Pedigree(sampleped[-1]) + newhint <- auto_hint(pedi) + plist <- align(pedi, packed = TRUE, align = TRUE, width = 8, hints = newhint ) expect_snapshot(plist) @@ -37,8 +36,8 @@ test_that("test alignment with inbreeding and relationship matrix", { id2 = c(110, 114, 132, 109), code = c(1, 4, 4, 4) ) - ped <- Pedigree(sampleped[-1], rel_df) - plist <- align(ped) + pedi <- Pedigree(sampleped[-1], rel_df) + plist <- align(pedi) ped_sr <- Pedigree(sampleped[-1]) plist_sr <- align(ped_sr) @@ -53,8 +52,8 @@ test_that("test alignment with inbreeding and relationship matrix", { test_that("besthint works", { data("sampleped") - ped <- Pedigree(sampleped) - expect_error(best_hint(ped)) #this fixes up marriages and such + pedi <- Pedigree(sampleped) + expect_error(best_hint(pedi)) #this fixes up marriages and such ped1 <- Pedigree(sampleped[-1]) newhint1 <- best_hint(ped1) @@ -75,8 +74,11 @@ test_that("Alignement with spouse", { ) ped1 <- Pedigree(df1, relate1) hints <- auto_hint(ped1) - expect_equal(as.vector(hints$spouse), c(9, 10, 2)) - expect_equal(hints$horder, + expect_equal(spouse(hints), data.frame( + idl = "1_109", idr = "1_110", + anchor = anchor_to_factor("right") + )) + expect_equal(horder(hints), c( 1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 2, 3, 5, 4, 5, 6, 7, 8, 9, 10, @@ -85,7 +87,6 @@ test_that("Alignement with spouse", { 13, 14 ) ) - align(ped1) }) test_that("Double wife", { @@ -96,8 +97,8 @@ test_that("Double wife", { id = 1:7, dadid = c(0, 0, 0, 1, 3, 0, 3), momid = c(0, 0, 0, 2, 4, 0, 6), sex = c(1, 2, 1, 2, 1, 2, 1) ) - ped <- Pedigree(df) + pedi <- Pedigree(df, missid = "0") vdiffr::expect_doppelganger("double_wife", - function() plot(ped) + function() plot(pedi) ) }) \ No newline at end of file From 9c2eeece3541884ef2fda6639776b476c09bedf8 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 1 Nov 2023 18:58:16 +0100 Subject: [PATCH 037/111] Delete unecessary files --- DESCRIPTION | 2 -- NAMESPACE | 1 - R/check_hints.R | 60 ------------------------------------------------- 3 files changed, 63 deletions(-) delete mode 100644 R/check_hints.R diff --git a/DESCRIPTION b/DESCRIPTION index 5637da09..c059c138 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -52,7 +52,6 @@ BugReports: https://github.com/LouisLeLezet/Pedixplorer/issues url: https://github.com/LouisLeNezet/Pedixplorer BiocType: Software Collate: - 'Pedigree.R' 'AllValidity.R' 'AllClass.R' 'AllAccessors.R' @@ -63,7 +62,6 @@ Collate: 'alignped3.R' 'alignped2.R' 'alignped1.R' - 'check_hints.R' 'kindepth.R' 'auto_hint.R' 'align.R' diff --git a/NAMESPACE b/NAMESPACE index 6f860ba2..83d75b60 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -12,7 +12,6 @@ export(auto_hint) export(best_hint) export(bit_size) export(border) -export(check_hints) export(descendants) export(family_check) export(fill) diff --git a/R/check_hints.R b/R/check_hints.R deleted file mode 100644 index d2f42174..00000000 --- a/R/check_hints.R +++ /dev/null @@ -1,60 +0,0 @@ -## Extracted from checks.Rnw - -#' Detect hints inconsistencies -#' -#' @description -#' This routine tries to detect inconsistencies in spousal hints. -#' -#' @details -#' These arise in `auto_hint()` with complex Pedigrees. -#' One can have ABA (subject A is on both the left and the right of B), -#' cycles, etc. -#' Users can introduce problems as well if they modify the hints. -#' -#' @inheritParams sex_to_factor -#' @inheritParams align -#' -#' @return Nothing, but will stop if there is a problem. -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -#' ht1 <- auto_hint(ped1) -#' check_hints(ht1, ped1$ped$sex) -#' -#' @seealso [auto_hint()], [best_hint()] -#' @keywords internal -#' @export -check_hints <- function(hints, sex) { - if (is.null(hints$horder)) { - stop("horder component must be present in hints") - } - if (!is.numeric(hints$horder)) { - stop("horder component must be numeric") - } - n <- length(sex) - if (length(hints$horder) != n) { - stop("Length for horder component should be equal to sex length") - } - sex <- as.character(sex_to_factor(sex)) - spouse <- hints$spouse - if (!is.null(spouse)) { - lspouse <- spouse[, 1] - rspouse <- spouse[, 2] - if (any(lspouse < 1 | lspouse > n | rspouse < 1 | rspouse > n)) { - stop("Invalid spouse value, should be between 1 and", n) - } - - temp1 <- (sex[lspouse] == "female" & sex[rspouse] == "male") - temp2 <- (sex[rspouse] == "female" & sex[lspouse] == "male") - if (!all(temp1 | temp2)) { - stop("A marriage is not male/female") - } - - hash <- n * pmax(lspouse, rspouse) + pmin(lspouse, rspouse) - # Turn off this check for now - is set off if someone is married to two - # siblings if (any(duplicated(hash))) stop('Duplicate marriage') - - # TODO Break any loops: A left of B, B left of C, C left of A. Not yet - # done - } -} From ba3c441c112adda411a1d5a8dbe377f43dd20619 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 1 Nov 2023 18:58:55 +0100 Subject: [PATCH 038/111] Add Ped support for bitsize and kindepth --- R/bit_size.R | 1 - R/kindepth.R | 12 +++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/R/bit_size.R b/R/bit_size.R index 92078846..51806cf7 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -67,7 +67,6 @@ setMethod("bit_size", "Pedigree", #' @rdname bit_size setMethod("bit_size", "Ped", function(obj, missid = NA_character_) { - print(summary(obj)) bit_size(dadid(obj), momid(obj), missid) } ) \ No newline at end of file diff --git a/R/kindepth.R b/R/kindepth.R index 740161f0..d39fc1b1 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -233,6 +233,16 @@ setMethod("kindepth", "character", function(obj, dadid, momid, #' @docType methods setMethod("kindepth", "Pedigree", function(obj, align_parents = FALSE) { - kindepth(obj$ped$id, obj$ped$dadid, obj$ped$momid, align_parents) + kindepth(ped(obj), align_parents) + } +) + +#' @export +#' @rdname kindepth +#' @aliases kindepth,Ped +#' @docType methods +setMethod("kindepth", "Ped", + function(obj, align_parents = FALSE) { + kindepth(id(obj), dadid(obj), momid(obj), align_parents) } ) \ No newline at end of file From 48f4ae4d9da3383aeab74186ae5329a929efc070 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 1 Nov 2023 18:59:05 +0100 Subject: [PATCH 039/111] Make pedigree test pass --- tests/testthat/test-pedigreeClass.R | 109 +++++++++++----------------- 1 file changed, 43 insertions(+), 66 deletions(-) diff --git a/tests/testthat/test-pedigreeClass.R b/tests/testthat/test-pedigreeClass.R index d7b13907..447ee8b7 100644 --- a/tests/testthat/test-pedigreeClass.R +++ b/tests/testthat/test-pedigreeClass.R @@ -62,32 +62,29 @@ test_that("Pedigree from sampleped and affectation", { # Here is a case where the levels fail to line up properly data("sampleped") df1 <- sampleped[sampleped$famid == 1, ] - colnames(df1) ped1 <- Pedigree(df1, cols_ren_ped = list( "indId" = "id", "fatherId" = "dadid", "motherId" = "momid", "gender" = "sex", "available" = "avail", - "affection" = "affected" - )) - - expect_equal(nrow(ped1@ped), 41) - expect_equal(ncol(ped1@ped), 19) - expect_equal(nrow(ped1@rel), 0) - expect_equal(ncol(ped1@rel), 7) - - expect_error(ped1$ped$id <- "1") - expect_error(ped1$ped$id[1] <- "1") - expect_error(ped1$ped$id[1] <- "102") - expect_error(ped1$ped$dadid[1] <- "101") - expect_no_error(ped1$ped$dadid[3] <- "1_103") - expect_warning(expect_error(ped1$ped$sex[3] <- "103")) - expect_error(ped1$ped$sex[3] <- "female") - expect_error(ped1$ped$sex[3] <- "unknown") - expect_no_error(ped1$ped$sex[41] <- "unknown") - - expect_equal(as.data.frame(ped1), ped1$ped) + "affection" = "affected", + "family" = "famid" + ), missid = "0") + + expect_equal(dim(as.data.frame(ped(ped1))), c(41, 25)) + expect_equal(dim(as.data.frame(rel(ped1))), c(0, 4)) + + expect_error(id(ped(ped1)) <- "1") + expect_error(id(ped(ped1))[1] <- "1") + expect_error(id(ped(ped1))[1] <- "102") + expect_no_error(id(ped(ped1))[41] <- "142") + expect_equal(id(ped(ped1))[41], "142") + expect_no_error(dadid(ped(ped1))[3] <- "1_103") + expect_warning(expect_error(sex(ped(ped1))[3] <- "103")) + expect_error(sex(ped(ped1))[3] <- "female") + expect_error(sex(ped(ped1))[3] <- "unknown") + expect_no_error(sex(ped(ped1))[41] <- "male") }) test_that("Pedigree subscripting", { @@ -96,73 +93,53 @@ test_that("Pedigree subscripting", { "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", "gender" = "sex", "family" = "famid", "affection" = "cancer" - )) - expect_equal(nrow(ped(minnped)), 28081) - expect_equal(ncol(minnped[["ped"]]), 28) + ), missid = "0") + expect_equal(length(minnped), 28081) + expect_equal(dim(as.data.frame(ped(minnped))), c(28081, 34)) - ped8 <- minnped[ped(minnped)$famid == "8", - c("id", "dadid", "momid", "sex", "affection") - ] + ped8 <- minnped[famid(ped(minnped)) == "8"] - expect_equal(nrow(ped8$ped), 40) - expect_equal(ncol(ped8$ped), 11) + expect_equal(dim(as.data.frame(ped(ped8))), c(40, 34)) # Subjects 150, 152, 154, 158 are children, # and 143, 162, 149 are parents and a child droplist <- paste("8", c(150, 152, 154, 158, 143, 162, 149), sep = "_") - keep1 <- !(ped8$ped$id %in% droplist) # logical + keep1 <- !(id(ped(ped8)) %in% droplist) # logical keep2 <- which(keep1) # numeric - keep3 <- as.character(ped8$ped$id[keep1]) # character + keep3 <- as.character(id(ped(ped8))[keep1]) # character keep4 <- factor(keep3) - test1 <- ped8[keep1, ] - test2 <- ped8[keep2, ] - test3 <- ped8[keep3, ] - test4 <- ped8[keep4, ] + test1 <- ped8[keep1] + test2 <- ped8[keep2] + test3 <- ped8[keep3] + test4 <- ped8[keep4] expect_equal(test1, test2) expect_equal(test1, test3) expect_equal(test1, test4) - pedcol <- minnped[, c("id", "dadid", "momid", "sex", "affection")] - expect_equal(nrow(pedcol$ped), 28081) - expect_equal(ncol(pedcol$ped), 11) pedrow <- minnped[c("8_150", "8_163", "8_145", "8_135", "8_136")] - expect_equal(nrow(pedrow$ped), 5) - expect_equal(ncol(pedrow$ped), 28) -}) - -test_that("Pedigree to dataframe", { - data("sampleped") - ped <- Pedigree(sampleped) - expect_equal(dim(as.data.frame(ped)), c(55, 19)) -}) - -test_that("Pedigree length", { - data("sampleped") - ped <- Pedigree(sampleped) - expect_equal(length(ped), 55) + expect_equal(length(pedrow), 5) }) -test_that("Pedigree getters", { +test_that("Pedigree generic", { data("sampleped") - ped <- Pedigree(sampleped) - expect_equal(ped$ped, ped(ped)) - expect_equal(ped$rel, rel(ped)) - expect_equal(ped$hints, hints(ped)) - expect_equal(ped$hints$horder, order(ped)) - expect_equal(ped$hints$spouse, spouse(ped)) - expect_equal(ped$scales$fill, fill(ped)) - expect_equal(ped$scales$border, border(ped)) + pedi <- Pedigree(sampleped, missid = "0") + expect_equal(dim(as.data.frame(ped(pedi))), c(55, 25)) + expect_equal(names(as.list(pedi)), c("ped", "rel", "scales", "hints")) + expect_equal(length(pedi), 55) }) -test_that("Pedigree setters", { +test_that("Pedigree accessors", { data("sampleped") - ped <- Pedigree(sampleped) - peddf <- ped(ped) - peddf[1, "famid"] <- "2" - ped(ped) <- peddf - expect_equal(ped(ped)[1, "famid"], "2") + pedi <- Pedigree(sampleped, missid = "0") + expect_equal(pedi@ped, ped(pedi)) + expect_equal(pedi@rel, rel(pedi)) + expect_equal(pedi@hints, hints(pedi)) + expect_equal(pedi@hints@horder, horder(pedi)) + expect_equal(pedi@hints@spouse, spouse(pedi)) + expect_equal(pedi@scales@fill, fill(pedi)) + expect_equal(pedi@scales@border, border(pedi)) }) From 551881a11fa862b888af24ef12b3d8b1e716a69f Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 1 Nov 2023 19:16:08 +0100 Subject: [PATCH 040/111] Update plot function --- R/ped_to_legdf.R | 6 +++--- R/ped_to_plotdf.R | 46 +++++++++++++++++++++++++++------------------- R/plot.R | 2 +- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index 1ae434a9..52122ca3 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -37,9 +37,9 @@ ped_to_legdf <- function(ped, adjy = numeric() ) sex_equiv <- c("Male", "Female", "Terminated", "Unknown") - all_lab <- list(sex_equiv, border(ped, "labels")) - all_aff <- lapply(unique(fill(ped, "order")), function(x) { - fill(ped, "labels")[fill(ped, "order") == x] + all_lab <- list(sex_equiv, border(ped)$labels) + all_aff <- lapply(unique(fill(ped)$order), function(x) { + fill(ped)$labels[fill(ped)$order == x] }) all_lab <- c(all_lab, all_aff) diff --git a/R/ped_to_plotdf.R b/R/ped_to_plotdf.R index e1b20a3b..ed29df50 100644 --- a/R/ped_to_plotdf.R +++ b/R/ped_to_plotdf.R @@ -26,18 +26,25 @@ NULL #' @seealso [plot_fromdf()] #' [ped_to_legdf()] #' @export -ped_to_plotdf <- function( - ped, packed = FALSE, width = 10, align = c(1.5, 2), +setGeneric( + "ped_to_plotdf", signature = "obj", + function(obj, ...) { + standardGeneric("ped_to_plotdf") + } +) + +setMethod("ped_to_plotdf", "Pedigree", function( + obj, packed = FALSE, width = 10, align = c(1.5, 2), subreg = NULL, cex = 0.5, symbolsize = cex, pconnect = 0.5, branch = 0.6, aff_mark = TRUE, label = NULL, ... ) { - famlist <- unique(ped(ped, "famid")) + famlist <- unique(famid(obj)) if (length(famlist) > 1) { nfam <- length(famlist) all_df <- vector("list", nfam) for (i_fam in famlist) { - ped_fam <- ped[ped(ped, "famid") == i_fam] + ped_fam <- obj[famid(obj) == i_fam] all_df[[i_fam]] <- ped_to_plotdf(ped_fam, packed, width, align, subreg, cex, symbolsize, ... ) @@ -53,7 +60,7 @@ ped_to_plotdf <- function( label = character(), tips = character(), adjx = numeric(), adjy = numeric() ) - plist <- align(ped, packed = packed, width = width, align = align) + plist <- align(obj, packed = packed, width = width, align = align) if (!is.null(subreg)) { plist <- subregion(plist, subreg) @@ -62,7 +69,7 @@ ped_to_plotdf <- function( maxlev <- nrow(plist$pos) params_plot <- set_plot_area( - cex, ped(ped, "id"), maxlev, xrange, symbolsize, ... + cex, id(ped(obj)), maxlev, xrange, symbolsize, ... ) boxw <- params_plot$boxw @@ -80,19 +87,20 @@ ped_to_plotdf <- function( # y position i <- (seq_len(length(plist$nid)) - 1) %% length(plist$n) + 1 # sex of each box - sex <- as.numeric(ped(ped, "sex"))[id[idx]] + sex <- as.numeric(sex(ped(obj)))[id[idx]] - all_aff <- fill(ped) - n_aff <- length(unique(fill(ped, "order"))) + all_aff <- fill(obj) + n_aff <- length(unique(fill(obj)$order)) polylist <- polygons(max(1, n_aff)) + ped_df <- as.data.frame(ped(obj)) # border mods of each box - border_mods <- ped(ped)[id[idx], unique(border(ped, "column"))] - border_idx <- match(border_mods, border(ped, "mods")) + border_mods <- ped_df[id[idx], unique(border(obj)$column)] + border_idx <- match(border_mods, border(obj)$mods) for (aff in seq_len(n_aff)) { aff_df <- all_aff[all_aff$order == aff, ] - aff_mods <- ped(ped)[id[idx], unique(aff_df[["column_mods"]])] + aff_mods <- ped_df[id[idx], unique(aff_df[["column_mods"]])] aff_idx <- match(aff_mods, aff_df[["mods"]]) @@ -115,7 +123,7 @@ ped_to_plotdf <- function( fill = aff_df[aff_idx, "fill"], density = aff_df[aff_idx, "density"], angle = aff_df[aff_idx, "angle"], - border = border(ped, "border")[border_idx], + border = border(obj)$border[border_idx], id = "polygon" ) plot_df <- rbind.fill(plot_df, ind) @@ -123,7 +131,7 @@ ped_to_plotdf <- function( aff_mark_df <- data.frame( x0 = pos[idx] + poly_aff_x_mr[sex], y0 = i[idx] + boxh / 2, - label = ped(ped)[id[idx], unique(aff_df[["column_values"]])], + label = ped_df[id[idx], unique(aff_df[["column_values"]])], fill = "black", type = "text", cex = cex, id = "aff_mark" @@ -133,7 +141,7 @@ ped_to_plotdf <- function( } ## Add status - status <- ped(ped)[id[idx], "status"] + status <- ped_df[id[idx], "status"] idx_dead <- idx[status == 1 & !is.na(status)] if (length(idx_dead) > 0) { @@ -150,7 +158,7 @@ ped_to_plotdf <- function( ## Add ids id_df <- data.frame( x0 = pos[idx], y0 = i[idx] + boxh + labh * 1.2, - label = ped(ped)[id[idx], "id"], fill = "black", + label = ped_df[id[idx], "id"], fill = "black", type = "text", cex = cex, id = "id" ) @@ -159,10 +167,10 @@ ped_to_plotdf <- function( ## Add a label if given if (!is.null(label)) { - check_columns(ped(ped), label) + check_columns(ped_df, label) label <- data.frame( x0 = pos[idx], y0 = i[idx] + boxh + labh * 2.8, - label = ped(ped)[id[idx], label], + label = ped_df[id[idx], label], fill = "black", type = "text", cex = cex, id = "label" @@ -332,4 +340,4 @@ ped_to_plotdf <- function( } } list(df = plot_df, par_usr = params_plot) -} +}) diff --git a/R/plot.R b/R/plot.R index 8b68d28b..0c6aa693 100644 --- a/R/plot.R +++ b/R/plot.R @@ -92,7 +92,7 @@ setMethod("plot", c(x = "Pedigree", y = "missing"), lst <- ped_to_plotdf(x, packed, width, align, subreg, cex, symbolsize, pconnect, branch, aff_mark, label, ... ) - famlist <- unique(x$ped$famid) + famlist <- unique(famid(x)) if (length(famlist) > 1) { message("Multiple families present, only plotting family ", fam_to_plot From 025d3451c57d010a260f2a76c6403bc93f096cf1 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 10:24:14 +0100 Subject: [PATCH 041/111] Correct bug auto_hint --- R/auto_hint.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/auto_hint.R b/R/auto_hint.R index adc86040..b5415888 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -233,8 +233,8 @@ get_twin_rel <- function(ped) { relation$code <- as.numeric(relation$code) } n <- length(ped) - twinset <- rep(0, n) - twinord <- rep(1, n) + twinset <- setNames(rep(0, n), id(ped(ped))) + twinord <- setNames(rep(1, n), id(ped(ped))) twinrel <- NULL if (!is.null(relation) && any(relation[, 3] < 4)) { From 3a6e0952bb904a43043d67679d2bfccf265ef0d4 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 11:56:02 +0100 Subject: [PATCH 042/111] Update tests snaps --- .../testthat/_snaps/align/sampleped-norel.svg | 309 +++++++++ .../_snaps/align/sampleped-withrel.svg | 309 +++++++++ tests/testthat/_snaps/class.md | 43 ++ tests/testthat/_snaps/ped_to_legdf.md | 86 +-- .../_snaps/ped_to_legdf/legend-alone.svg | 92 +-- tests/testthat/_snaps/plot.md | 609 ++++++++++-------- .../_snaps/plot/ped-2-affections-ggplot.svg | 168 +++-- .../plot/ped-simple-affection-ggplot.svg | 126 ++-- .../_snaps/plot/ped-simple-affection.svg | 120 ++-- tests/testthat/test-align.R | 29 +- tests/testthat/test-bitSize.R | 12 +- tests/testthat/test-class.R | 23 +- 12 files changed, 1335 insertions(+), 591 deletions(-) create mode 100644 tests/testthat/_snaps/align/sampleped-norel.svg create mode 100644 tests/testthat/_snaps/align/sampleped-withrel.svg create mode 100644 tests/testthat/_snaps/class.md diff --git a/tests/testthat/_snaps/align/sampleped-norel.svg b/tests/testthat/_snaps/align/sampleped-norel.svg new file mode 100644 index 00000000..26f56878 --- /dev/null +++ b/tests/testthat/_snaps/align/sampleped-norel.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +105 +101 +209 +121 +106 +102 +109 +122 +107 +115 +129 +123 +108 +117 +130 +124 +135 +116 +131 +125 +136 +118 +132 +126 +201 +119 +133 +127 +202 +120 +134 +128 +103 +109 +104 +110 +137 +112 +138 +118 +203 +111 +204 +113 +205 +114 +206 +115 +207 +139 +209 +140 +208 +141 +210 +211 +212 +213 +214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/align/sampleped-withrel.svg b/tests/testthat/_snaps/align/sampleped-withrel.svg new file mode 100644 index 00000000..26f56878 --- /dev/null +++ b/tests/testthat/_snaps/align/sampleped-withrel.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +105 +101 +209 +121 +106 +102 +109 +122 +107 +115 +129 +123 +108 +117 +130 +124 +135 +116 +131 +125 +136 +118 +132 +126 +201 +119 +133 +127 +202 +120 +134 +128 +103 +109 +104 +110 +137 +112 +138 +118 +203 +111 +204 +113 +205 +114 +206 +115 +207 +139 +209 +140 +208 +141 +210 +211 +212 +213 +214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/class.md b/tests/testthat/_snaps/class.md new file mode 100644 index 00000000..905f8172 --- /dev/null +++ b/tests/testthat/_snaps/class.md @@ -0,0 +1,43 @@ +# Class ped work + + Code + ped2 + Output + Ped object with 2 individuals and 0 metadata columns: + id dadid momid sex famid + + ID5 ID5 female + ID4 ID4 male + steril status avail affected num_child_total num_child_direct + + ID5 0 0 + ID4 0 0 + num_child_indirect + + ID5 0 + ID4 0 + +# Rel class works + + Code + rel2 + Output + Rel object with 2 relationshipswith 1 MZ twin, 0 DZ twin, 0 UZ twin, 1 Spouse: + id1 id2 code famid | A + | + 1 ID3 ID5 MZ twin | 1 + 2 ID2 ID4 Spouse | 2 + +# Scales class works + + invalid class "Scales" object: 1: affected column(s) must be logical + invalid class "Scales" object: 2: angle column(s) must be numeric + invalid class "Scales" object: 3: order column(s) must be numeric + invalid class "Scales" object: 4: mods column(s) must be numeric + invalid class "Scales" object: 5: column_mods column(s) must be character + +--- + + invalid class "Scales" object: 1: labels column(s) must be character + invalid class "Scales" object: 2: mods column(s) must be numeric + diff --git a/tests/testthat/_snaps/ped_to_legdf.md b/tests/testthat/_snaps/ped_to_legdf.md index e8b5d088..c905a9a6 100644 --- a/tests/testthat/_snaps/ped_to_legdf.md +++ b/tests/testthat/_snaps/ped_to_legdf.md @@ -6,53 +6,53 @@ $leg_df id x0 y0 x1 y1 type fill border angle 1 titles 0.20000 0.0 NA NA text black NA - 2 titles 4.46750 0.0 NA NA text black NA - 3 titles 9.20250 0.0 NA NA text black NA - 4 titles 14.56333 0.0 NA NA text black NA - 5 titles 19.92417 0.0 NA NA text black NA + 2 titles 4.40000 0.0 NA NA text black NA + 3 titles 9.03750 0.0 NA NA text black NA + 4 titles 14.39375 0.0 NA NA text black NA + 5 titles 19.75000 0.0 NA NA text black NA 6 sex 0.00000 1.0 NA NA square_1_1 white black NA 7 sex 0.00000 3.0 NA NA circle_1_1 white black NA 8 sex_label 1.20000 1.5 NA NA text black NA 9 sex_label 1.20000 3.5 NA NA text black NA - 10 border 4.26750 1.0 NA NA square_1_1 white black NA - 11 border 4.26750 3.0 NA NA square_1_1 white green NA - 12 border_label 5.46750 1.5 NA NA text black NA - 13 border_label 5.46750 3.5 NA NA text black NA - 14 aff_bkg_1_0 9.00250 1.0 NA NA square_1_1 white black NA - 15 aff_bkg_1_1 9.00250 3.0 NA NA square_1_1 white black NA - 16 aff_bkg_1_NA 9.00250 5.0 NA NA square_1_1 white black NA - 17 affected_1_0 9.00250 1.0 NA NA square_3_1 white black NA - 18 affected_1_1 9.00250 3.0 NA NA square_3_1 red black NA - 19 affected_1_NA 9.00250 5.0 NA NA square_3_1 grey black NA - 20 affected_label_1_0 10.20250 1.5 NA NA text black NA - 21 affected_label_1_1 10.20250 3.5 NA NA text black NA - 22 affected_label_1_NA 10.20250 5.5 NA NA text black NA - 23 aff_bkg_2_0 14.36333 1.0 NA NA square_1_1 white black NA - 24 aff_bkg_2_1 14.36333 3.0 NA NA square_1_1 white black NA - 25 affected_2_0 14.36333 1.0 NA NA square_3_2 white black NA - 26 affected_2_1 14.36333 3.0 NA NA square_3_2 red black NA - 27 affected_label_2_0 15.56333 1.5 NA NA text black NA - 28 affected_label_2_1 15.56333 3.5 NA NA text black NA - 29 aff_bkg_3_1 19.72417 1.0 NA NA square_1_1 white black NA - 30 aff_bkg_3_2 19.72417 3.0 NA NA square_1_1 white black NA - 31 aff_bkg_3_3 19.72417 5.0 NA NA square_1_1 white black NA - 32 aff_bkg_3_4 19.72417 7.0 NA NA square_1_1 white black NA - 33 aff_bkg_3_5 19.72417 9.0 NA NA square_1_1 white black NA - 34 aff_bkg_3_6 19.72417 11.0 NA NA square_1_1 white black NA - 35 affected_3_1 19.72417 1.0 NA NA square_3_3 #FFFFFF black NA - 36 affected_3_2 19.72417 3.0 NA NA square_3_3 #9AB1C4 black NA - 37 affected_3_3 19.72417 5.0 NA NA square_3_3 #36648B black NA - 38 affected_3_4 19.72417 7.0 NA NA square_3_3 #FFC0CB black NA - 39 affected_3_5 19.72417 9.0 NA NA square_3_3 #CF70DD black NA - 40 affected_3_6 19.72417 11.0 NA NA square_3_3 #A020F0 black NA - 41 affected_label_3_1 20.92417 1.5 NA NA text black NA - 42 affected_label_3_2 20.92417 3.5 NA NA text black NA - 43 affected_label_3_3 20.92417 5.5 NA NA text black NA - 44 affected_label_3_4 20.92417 7.5 NA NA text black NA - 45 affected_label_3_5 20.92417 9.5 NA NA text black NA - 46 affected_label_3_6 20.92417 11.5 NA NA text black NA + 10 border 4.20000 1.0 NA NA square_1_1 white black NA + 11 border 4.20000 3.0 NA NA square_1_1 white green NA + 12 border_label 5.40000 1.5 NA NA text black NA + 13 border_label 5.40000 3.5 NA NA text black NA + 14 aff_bkg_1_0 8.83750 1.0 NA NA square_1_1 white black NA + 15 aff_bkg_1_1 8.83750 3.0 NA NA square_1_1 white black NA + 16 aff_bkg_1_NA 8.83750 5.0 NA NA square_1_1 white black NA + 17 affected_1_0 8.83750 1.0 NA NA square_3_1 white black NA + 18 affected_1_1 8.83750 3.0 NA NA square_3_1 red black NA + 19 affected_1_NA 8.83750 5.0 NA NA square_3_1 grey black NA + 20 affected_label_1_0 10.03750 1.5 NA NA text black NA + 21 affected_label_1_1 10.03750 3.5 NA NA text black NA + 22 affected_label_1_NA 10.03750 5.5 NA NA text black NA + 23 aff_bkg_2_0 14.19375 1.0 NA NA square_1_1 white black NA + 24 aff_bkg_2_1 14.19375 3.0 NA NA square_1_1 white black NA + 25 affected_2_0 14.19375 1.0 NA NA square_3_2 white black NA + 26 affected_2_1 14.19375 3.0 NA NA square_3_2 red black NA + 27 affected_label_2_0 15.39375 1.5 NA NA text black NA + 28 affected_label_2_1 15.39375 3.5 NA NA text black NA + 29 aff_bkg_3_1 19.55000 1.0 NA NA square_1_1 white black NA + 30 aff_bkg_3_2 19.55000 3.0 NA NA square_1_1 white black NA + 31 aff_bkg_3_3 19.55000 5.0 NA NA square_1_1 white black NA + 32 aff_bkg_3_4 19.55000 7.0 NA NA square_1_1 white black NA + 33 aff_bkg_3_5 19.55000 9.0 NA NA square_1_1 white black NA + 34 aff_bkg_3_6 19.55000 11.0 NA NA square_1_1 white black NA + 35 affected_3_1 19.55000 1.0 NA NA square_3_3 #FFFFFF black NA + 36 affected_3_2 19.55000 3.0 NA NA square_3_3 #9AB1C4 black NA + 37 affected_3_3 19.55000 5.0 NA NA square_3_3 #36648B black NA + 38 affected_3_4 19.55000 7.0 NA NA square_3_3 #FFC0CB black NA + 39 affected_3_5 19.55000 9.0 NA NA square_3_3 #CF70DD black NA + 40 affected_3_6 19.55000 11.0 NA NA square_3_3 #A020F0 black NA + 41 affected_label_3_1 20.75000 1.5 NA NA text black NA + 42 affected_label_3_2 20.75000 3.5 NA NA text black NA + 43 affected_label_3_3 20.75000 5.5 NA NA text black NA + 44 affected_label_3_4 20.75000 7.5 NA NA text black NA + 45 affected_label_3_5 20.75000 9.5 NA NA text black NA + 46 affected_label_3_6 20.75000 11.5 NA NA text black NA 47 max_lim 0.00000 0.0 NA NA text black NA - 48 max_lim 26.30875 11.0 NA NA text black NA + 48 max_lim 26.06250 11.0 NA NA text black NA density cex label tips adjx adjy 1 NA 1.2 Sex 0 1 2 NA 1.2 Border 0 1 @@ -114,7 +114,7 @@ [1] 0.8 $par_usr$usr - [1] 0.00000 26.30875 0.00000 11.50000 + [1] 0.0000 26.0625 0.0000 11.5000 diff --git a/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg b/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg index 033fd718..cf842e6e 100644 --- a/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg +++ b/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg @@ -25,51 +25,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -Sex -Border -affection -avail -indId -Male -Female -Non Available -Available -Healthy <= to 0.5 -Affected > to 0.5 -NA -Healthy <= to 0.5 -Affected > to 0.5 -Healthy <= to 115 : [101,106] -Healthy <= to 115 : (106,110] -Healthy <= to 115 : (110,115] -Affected > to 115 : [116,124] -Affected > to 115 : (124,133] -Affected > to 115 : (133,141] + + + + + + + + + + + + + + + + + + + + + + + + + + +Sex +Border +affection +avail +indId +Male +Female +Non Available +Available +Healthy <= to 0.5 +Affected > to 0.5 +NA +Healthy <= to 0.5 +Affected > to 0.5 +Healthy <= to 115 : [101,106] +Healthy <= to 115 : (106,110] +Healthy <= to 115 : (110,115] +Affected > to 115 : [116,124] +Affected > to 115 : (124,133] +Affected > to 115 : (133,141] diff --git a/tests/testthat/_snaps/plot.md b/tests/testthat/_snaps/plot.md index 36eb673a..69bd859c 100644 --- a/tests/testthat/_snaps/plot.md +++ b/tests/testthat/_snaps/plot.md @@ -4,277 +4,342 @@ lst Output $df - id x0 y0 - 1 polygon 1.499999763 1.000000 - 2 polygon 0.499999820 2.000000 - 3 polygon 0.000000000 3.000000 - 4 polygon 0.499999995 4.000000 - 5 polygon 2.499999763 1.000000 - 6 polygon 1.499999820 2.000000 - 7 polygon 1.000000000 3.000000 - 8 polygon 2.499999820 2.000000 - 9 polygon 2.499999735 3.000000 - 10 polygon 3.499999820 2.000000 - 11 polygon 3.499999735 3.000000 - 12 aff_mark 1.492925717 1.013154 - 13 aff_mark 0.492925773 2.013154 - 14 aff_mark -0.007074047 3.013154 - 15 aff_mark 0.492925948 4.013154 - 16 aff_mark 2.492925717 1.013154 - 17 aff_mark 1.492925773 2.013154 - 18 aff_mark 0.992925953 3.013154 - 19 aff_mark 2.492925773 2.013154 - 20 aff_mark 2.492925688 3.013154 - 21 aff_mark 3.492925773 2.013154 - 22 aff_mark 3.492925688 3.013154 - 23 polygon 1.499999763 1.000000 - 24 polygon 0.499999820 2.000000 - 25 polygon 0.000000000 3.000000 - 26 polygon 0.499999995 4.000000 - 27 polygon 2.499999763 1.000000 - 28 polygon 1.499999820 2.000000 - 29 polygon 1.000000000 3.000000 - 30 polygon 2.499999820 2.000000 - 31 polygon 2.499999735 3.000000 - 32 polygon 3.499999820 2.000000 - 33 polygon 3.499999735 3.000000 - 34 aff_mark 1.507073810 1.013154 - 35 aff_mark 0.507073867 2.013154 - 36 aff_mark 0.007074047 3.013154 - 37 aff_mark 0.507074042 4.013154 - 38 aff_mark 2.507073810 1.013154 - 39 aff_mark 1.507073867 2.013154 - 40 aff_mark 1.007074047 3.013154 - 41 aff_mark 2.507073867 2.013154 - 42 aff_mark 2.507073782 3.013154 - 43 aff_mark 3.507073867 2.013154 - 44 aff_mark 3.507073782 3.013154 - 45 dead 1.483022051 1.028940 - 46 dead 0.483022108 2.028940 - 47 dead 2.483022051 1.028940 - 48 dead 1.483022108 2.028940 - 49 id 1.499999763 1.052769 - 50 id 0.499999820 2.052769 - 51 id 0.000000000 3.052769 - 52 id 0.499999995 4.052769 - 53 id 2.499999763 1.052769 - 54 id 1.499999820 2.052769 - 55 id 1.000000000 3.052769 - 56 id 2.499999820 2.052769 - 57 id 2.499999735 3.052769 - 58 id 3.499999820 2.052769 - 59 id 3.499999735 3.052769 - 60 line_spouses 1.514147857 1.013154 - 61 line_spouses 0.514147914 2.013154 - 62 line_spouses 0.014148094 3.013154 - 63 line_spouses 2.514147914 2.013154 - 64 line_spouses2 0.014148094 3.015785 - 65 line_children_vertical 0.499999820 2.000000 - 66 line_children_vertical 3.499999820 2.000000 - 67 line_children_horizontal 0.499999820 1.960537 - 68 line_parent_mid 1.999999763 1.960537 - 69 line_parent_mid 1.999999763 1.676322 - 70 line_parent_mid 1.999999763 1.297369 - 71 line_children_vertical 1.000000000 3.000000 - 72 line_children_horizontal 1.000000000 2.960537 - 73 line_parent_mid 1.000000000 2.960537 - 74 line_parent_mid 1.000000000 2.676322 - 75 line_parent_mid 0.999999820 2.297369 - 76 line_children_vertical 2.499999735 3.000000 - 77 line_children_vertical 3.499999735 3.000000 - 78 label_children_twin3 2.999999735 2.980268 - 79 line_children_horizontal 2.999999735 2.960537 - 80 line_parent_mid 2.999999735 2.960537 - 81 line_parent_mid 2.999999735 2.676322 - 82 line_parent_mid 2.999999820 2.297369 - 83 line_children_vertical 0.499999995 4.000000 - 84 line_children_horizontal 0.499999995 3.960537 - 85 line_parent_mid 0.499999995 3.960537 - 86 line_parent_mid 0.499999995 3.676322 - 87 line_parent_mid 0.500000000 3.297369 - 88 arc 0.000000000 3.000000 - x1 y1 type fill border - 1 NA NA square_2_1 red black - 2 NA NA square_2_1 white green - 3 NA NA square_2_1 red green - 4 NA NA circle_2_1 white black - 5 NA NA circle_2_1 white green - 6 NA NA circle_2_1 red green - 7 NA NA circle_2_1 white black - 8 NA NA square_2_1 white green - 9 NA NA square_2_1 red green - 10 NA NA circle_2_1 red black - 11 NA NA square_2_1 white green - 12 NA NA text black - 13 NA NA text black - 14 NA NA text black - 15 NA NA text black - 16 NA NA text black - 17 NA NA text black - 18 NA NA text black - 19 NA NA text black - 20 NA NA text black - 21 NA NA text black - 22 NA NA text black - 23 NA NA square_2_2 white black - 24 NA NA square_2_2 white green - 25 NA NA square_2_2 white green - 26 NA NA circle_2_2 white black - 27 NA NA circle_2_2 grey green - 28 NA NA circle_2_2 #c300ff green - 29 NA NA circle_2_2 #c300ff black - 30 NA NA square_2_2 #c300ff green - 31 NA NA square_2_2 white green - 32 NA NA circle_2_2 white black - 33 NA NA square_2_2 white green - 34 NA NA text black - 35 NA NA text black - 36 NA NA text black - 37 NA NA text black - 38 NA NA text black - 39 NA NA text black - 40 NA NA text black - 41 NA NA text black - 42 NA NA text black - 43 NA NA text black - 44 NA NA text black - 45 1.5169775 0.9973691 segments black - 46 0.5169775 1.9973691 segments black - 47 2.5169775 0.9973691 segments black - 48 1.5169775 1.9973691 segments black - 49 NA NA text black - 50 NA NA text black - 51 NA NA text black - 52 NA NA text black - 53 NA NA text black - 54 NA NA text black - 55 NA NA text black - 56 NA NA text black - 57 NA NA text black - 58 NA NA text black - 59 NA NA text black - 60 2.4858517 1.0131545 segments black - 61 1.4858517 2.0131545 segments black - 62 0.9858519 3.0131545 segments black - 63 3.4858517 2.0131545 segments black - 64 0.9858519 3.0157854 segments black - 65 0.4999998 1.9605366 segments black - 66 3.4999998 1.9605366 segments black - 67 3.4999998 1.9605366 segments black - 68 1.9999998 1.6763220 segments black - 69 1.9999998 1.2973691 segments black - 70 1.9999998 1.0131545 segments black - 71 1.0000000 2.9605366 segments black - 72 1.0000000 2.9605366 segments black - 73 1.0000000 2.6763220 segments black - 74 0.9999998 2.2973691 segments black - 75 0.9999998 2.0131545 segments black - 76 2.9999997 2.9605366 segments black - 77 2.9999997 2.9605366 segments black - 78 NA NA text black - 79 2.9999997 2.9605366 segments black - 80 2.9999997 2.6763220 segments black - 81 2.9999998 2.2973691 segments black - 82 2.9999998 2.0131545 segments black - 83 0.5000000 3.9605366 segments black - 84 0.5000000 3.9605366 segments black - 85 0.5000000 3.6763220 segments black - 86 0.5000000 3.2973691 segments black - 87 0.5000000 3.0131545 segments black - 88 2.4999997 3.0000000 arc black - angle density cex label tips adjx adjy - 1 NA NA NA NA NA - 2 NA NA NA NA NA - 3 NA NA NA NA NA - 4 NA NA NA NA NA - 5 NA NA NA NA NA - 6 NA NA NA NA NA - 7 NA NA NA NA NA - 8 NA NA NA NA NA - 9 NA NA NA NA NA - 10 NA NA NA NA NA - 11 NA NA NA NA NA - 12 NA NA 0.5 1 NA NA - 13 NA NA 0.5 0 NA NA - 14 NA NA 0.5 1 NA NA - 15 NA NA 0.5 0 NA NA - 16 NA NA 0.5 0 NA NA - 17 NA NA 0.5 1 NA NA - 18 NA NA 0.5 0 NA NA - 19 NA NA 0.5 0 NA NA - 20 NA NA 0.5 1 NA NA - 21 NA NA 0.5 1 NA NA - 22 NA NA 0.5 0 NA NA - 23 NA NA NA NA NA - 24 NA NA NA NA NA - 25 NA NA NA NA NA - 26 NA NA NA NA NA - 27 NA NA NA NA NA - 28 NA NA NA NA NA - 29 NA NA NA NA NA - 30 NA NA NA NA NA - 31 NA NA NA NA NA - 32 NA NA NA NA NA - 33 NA NA NA NA NA - 34 NA NA 0.5 0 NA NA - 35 NA NA 0.5 0 NA NA - 36 NA NA 0.5 0 NA NA - 37 NA NA 0.5 0 NA NA - 38 NA NA 0.5 NA NA - 39 NA NA 0.5 1 NA NA - 40 NA NA 0.5 1 NA NA - 41 NA NA 0.5 1 NA NA - 42 NA NA 0.5 0 NA NA - 43 NA NA 0.5 0 NA NA - 44 NA NA 0.5 0 NA NA - 45 NA NA 0.5 NA NA - 46 NA NA 0.5 NA NA - 47 NA NA 0.5 NA NA - 48 NA NA 0.5 NA NA - 49 NA NA 0.5 1_1 NA NA - 50 NA NA 0.5 1_3 NA NA - 51 NA NA 0.5 1_8 NA NA - 52 NA NA 0.5 1_10 NA NA - 53 NA NA 0.5 1_2 NA NA - 54 NA NA 0.5 1_5 NA NA - 55 NA NA 0.5 1_7 NA NA - 56 NA NA 0.5 1_6 NA NA - 57 NA NA 0.5 1_8 NA NA - 58 NA NA 0.5 1_4 NA NA - 59 NA NA 0.5 1_9 NA NA - 60 NA NA 0.5 NA NA - 61 NA NA 0.5 NA NA - 62 NA NA 0.5 NA NA - 63 NA NA 0.5 NA NA - 64 NA NA 0.5 NA NA - 65 NA NA 0.5 NA NA - 66 NA NA 0.5 NA NA - 67 NA NA 0.5 NA NA - 68 NA NA 0.5 NA NA - 69 NA NA 0.5 NA NA - 70 NA NA 0.5 NA NA - 71 NA NA 0.5 NA NA - 72 NA NA 0.5 NA NA - 73 NA NA 0.5 NA NA - 74 NA NA 0.5 NA NA - 75 NA NA 0.5 NA NA - 76 NA NA 0.5 NA NA - 77 NA NA 0.5 NA NA - 78 NA NA 0.5 ? NA NA - 79 NA NA 0.5 NA NA - 80 NA NA 0.5 NA NA - 81 NA NA 0.5 NA NA - 82 NA NA 0.5 NA NA - 83 NA NA 0.5 NA NA - 84 NA NA 0.5 NA NA - 85 NA NA 0.5 NA NA - 86 NA NA 0.5 NA NA - 87 NA NA 0.5 NA NA - 88 NA NA 0.5 NA NA + id x0 + 1 polygon 1.000000e+00 + 2 polygon 1.619369e-08 + 3 polygon 7.071068e-01 + 4 polygon 1.207107e+00 + 5 polygon 2.000000e+00 + 6 polygon 1.000000e+00 + 7 polygon 1.707107e+00 + 8 polygon 2.000000e+00 + 9 polygon 2.707107e+00 + 10 polygon 3.000000e+00 + 11 aff_mark 9.908138e-01 + 12 aff_mark -9.186207e-03 + 13 aff_mark 6.979205e-01 + 14 aff_mark 1.197921e+00 + 15 aff_mark 1.990814e+00 + 16 aff_mark 9.908138e-01 + 17 aff_mark 1.697921e+00 + 18 aff_mark 1.990814e+00 + 19 aff_mark 2.697921e+00 + 20 aff_mark 2.990814e+00 + 21 polygon 1.000000e+00 + 22 polygon 1.619369e-08 + 23 polygon 7.071068e-01 + 24 polygon 1.207107e+00 + 25 polygon 2.000000e+00 + 26 polygon 1.000000e+00 + 27 polygon 1.707107e+00 + 28 polygon 2.000000e+00 + 29 polygon 2.707107e+00 + 30 polygon 3.000000e+00 + 31 aff_mark 1.009186e+00 + 32 aff_mark 9.186239e-03 + 33 aff_mark 7.162930e-01 + 34 aff_mark 1.216293e+00 + 35 aff_mark 2.009186e+00 + 36 aff_mark 1.009186e+00 + 37 aff_mark 1.716293e+00 + 38 aff_mark 2.009186e+00 + 39 aff_mark 2.716293e+00 + 40 aff_mark 3.009186e+00 + 41 dead 9.779530e-01 + 42 dead -2.204692e-02 + 43 dead 1.977953e+00 + 44 dead 9.779531e-01 + 45 id 1.000000e+00 + 46 id 1.619369e-08 + 47 id 7.071068e-01 + 48 id 1.207107e+00 + 49 id 2.000000e+00 + 50 id 1.000000e+00 + 51 id 1.707107e+00 + 52 id 2.000000e+00 + 53 id 2.707107e+00 + 54 id 3.000000e+00 + 55 line_spouses 1.018372e+00 + 56 line_spouses 1.837246e-02 + 57 line_spouses 7.254792e-01 + 58 line_spouses 2.018372e+00 + 59 line_spouses2 7.254792e-01 + 60 line_children_vertical 1.619369e-08 + 61 line_children_vertical 3.000000e+00 + 62 line_children_horizontal 1.619369e-08 + 63 line_parent_mid 1.500000e+00 + 64 line_parent_mid 1.500000e+00 + 65 line_parent_mid 1.500000e+00 + 66 line_children_vertical 7.071068e-01 + 67 line_children_horizontal 7.071068e-01 + 68 line_parent_mid 7.071068e-01 + 69 line_parent_mid 7.071068e-01 + 70 line_parent_mid 5.000000e-01 + 71 line_children_vertical 1.707107e+00 + 72 line_children_vertical 2.707107e+00 + 73 label_children_twin3 2.207107e+00 + 74 line_children_horizontal 2.207107e+00 + 75 line_parent_mid 2.207107e+00 + 76 line_parent_mid 2.207107e+00 + 77 line_parent_mid 2.500000e+00 + 78 line_children_vertical 1.207107e+00 + 79 line_children_horizontal 1.207107e+00 + 80 line_parent_mid 1.207107e+00 + 81 line_parent_mid 1.207107e+00 + 82 line_parent_mid 1.207107e+00 + y0 x1 y1 type + 1 1.000000 NA NA square_2_1 + 2 2.000000 NA NA square_2_1 + 3 3.000000 NA NA circle_2_1 + 4 4.000000 NA NA circle_2_1 + 5 1.000000 NA NA circle_2_1 + 6 2.000000 NA NA circle_2_1 + 7 3.000000 NA NA square_2_1 + 8 2.000000 NA NA square_2_1 + 9 3.000000 NA NA square_2_1 + 10 2.000000 NA NA circle_2_1 + 11 1.022312 NA NA text + 12 2.022312 NA NA text + 13 3.022312 NA NA text + 14 4.022312 NA NA text + 15 1.022312 NA NA text + 16 2.022312 NA NA text + 17 3.022312 NA NA text + 18 2.022312 NA NA text + 19 3.022312 NA NA text + 20 2.022312 NA NA text + 21 1.000000 NA NA square_2_2 + 22 2.000000 NA NA square_2_2 + 23 3.000000 NA NA circle_2_2 + 24 4.000000 NA NA circle_2_2 + 25 1.000000 NA NA circle_2_2 + 26 2.000000 NA NA circle_2_2 + 27 3.000000 NA NA square_2_2 + 28 2.000000 NA NA square_2_2 + 29 3.000000 NA NA square_2_2 + 30 2.000000 NA NA circle_2_2 + 31 1.022312 NA NA text + 32 2.022312 NA NA text + 33 3.022312 NA NA text + 34 4.022312 NA NA text + 35 1.022312 NA NA text + 36 2.022312 NA NA text + 37 3.022312 NA NA text + 38 2.022312 NA NA text + 39 3.022312 NA NA text + 40 2.022312 NA NA text + 41 1.049086 1.022047e+00 0.9955376 segments + 42 2.049086 2.204695e-02 1.9955376 segments + 43 1.049086 2.022047e+00 0.9955376 segments + 44 2.049086 1.022047e+00 1.9955376 segments + 45 1.100849 NA NA text + 46 2.100849 NA NA text + 47 3.100849 NA NA text + 48 4.100849 NA NA text + 49 1.100849 NA NA text + 50 2.100849 NA NA text + 51 3.100849 NA NA text + 52 2.100849 NA NA text + 53 3.100849 NA NA text + 54 2.100849 NA NA text + 55 1.022312 1.981628e+00 1.0223118 segments + 56 2.022312 9.816276e-01 2.0223118 segments + 57 3.022312 1.688734e+00 3.0223118 segments + 58 2.022312 2.981628e+00 2.0223118 segments + 59 3.026774 1.688734e+00 3.0267742 segments + 60 2.000000 1.619369e-08 1.9330646 segments + 61 2.000000 3.000000e+00 1.9330646 segments + 62 1.933065 3.000000e+00 1.9330646 segments + 63 1.933065 1.500000e+00 1.6598388 segments + 64 1.659839 1.500000e+00 1.2955376 segments + 65 1.295538 1.500000e+00 1.0223118 segments + 66 3.000000 7.071068e-01 2.9330646 segments + 67 2.933065 7.071068e-01 2.9330646 segments + 68 2.933065 7.071068e-01 2.6598388 segments + 69 2.659839 5.000000e-01 2.2955376 segments + 70 2.295538 5.000000e-01 2.0223118 segments + 71 3.000000 2.207107e+00 2.9330646 segments + 72 3.000000 2.207107e+00 2.9330646 segments + 73 2.966532 NA NA text + 74 2.933065 2.207107e+00 2.9330646 segments + 75 2.933065 2.207107e+00 2.6598388 segments + 76 2.659839 2.500000e+00 2.2955376 segments + 77 2.295538 2.500000e+00 2.0223118 segments + 78 4.000000 1.207107e+00 3.9330646 segments + 79 3.933065 1.207107e+00 3.9330646 segments + 80 3.933065 1.207107e+00 3.6598388 segments + 81 3.659839 1.207107e+00 3.2955376 segments + 82 3.295538 1.207107e+00 3.0223118 segments + fill border angle density cex label tips + 1 red black NA NA NA + 2 white green NA NA NA + 3 white black NA NA NA + 4 white black NA NA NA + 5 white green NA NA NA + 6 red green NA NA NA + 7 red green NA NA NA + 8 white green NA NA NA + 9 white green NA NA NA + 10 red black NA NA NA + 11 black NA NA 0.5 1 + 12 black NA NA 0.5 0 + 13 black NA NA 0.5 0 + 14 black NA NA 0.5 0 + 15 black NA NA 0.5 0 + 16 black NA NA 0.5 1 + 17 black NA NA 0.5 1 + 18 black NA NA 0.5 0 + 19 black NA NA 0.5 0 + 20 black NA NA 0.5 1 + 21 white black NA NA NA + 22 white green NA NA NA + 23 #c300ff black NA NA NA + 24 white black NA NA NA + 25 grey green NA NA NA + 26 #c300ff green NA NA NA + 27 white green NA NA NA + 28 #c300ff green NA NA NA + 29 white green NA NA NA + 30 white black NA NA NA + 31 black NA NA 0.5 0 + 32 black NA NA 0.5 0 + 33 black NA NA 0.5 1 + 34 black NA NA 0.5 0 + 35 black NA NA 0.5 + 36 black NA NA 0.5 1 + 37 black NA NA 0.5 0 + 38 black NA NA 0.5 1 + 39 black NA NA 0.5 0 + 40 black NA NA 0.5 0 + 41 black NA NA 0.5 + 42 black NA NA 0.5 + 43 black NA NA 0.5 + 44 black NA NA 0.5 + 45 black NA NA 0.5 1_1 + 46 black NA NA 0.5 1_3 + 47 black NA NA 0.5 1_7 + 48 black NA NA 0.5 1_10 + 49 black NA NA 0.5 1_2 + 50 black NA NA 0.5 1_5 + 51 black NA NA 0.5 1_8 + 52 black NA NA 0.5 1_6 + 53 black NA NA 0.5 1_9 + 54 black NA NA 0.5 1_4 + 55 black NA NA 0.5 + 56 black NA NA 0.5 + 57 black NA NA 0.5 + 58 black NA NA 0.5 + 59 black NA NA 0.5 + 60 black NA NA 0.5 + 61 black NA NA 0.5 + 62 black NA NA 0.5 + 63 black NA NA 0.5 + 64 black NA NA 0.5 + 65 black NA NA 0.5 + 66 black NA NA 0.5 + 67 black NA NA 0.5 + 68 black NA NA 0.5 + 69 black NA NA 0.5 + 70 black NA NA 0.5 + 71 black NA NA 0.5 + 72 black NA NA 0.5 + 73 black NA NA 0.5 ? + 74 black NA NA 0.5 + 75 black NA NA 0.5 + 76 black NA NA 0.5 + 77 black NA NA 0.5 + 78 black NA NA 0.5 + 79 black NA NA 0.5 + 80 black NA NA 0.5 + 81 black NA NA 0.5 + 82 black NA NA 0.5 + adjx adjy + 1 NA NA + 2 NA NA + 3 NA NA + 4 NA NA + 5 NA NA + 6 NA NA + 7 NA NA + 8 NA NA + 9 NA NA + 10 NA NA + 11 NA NA + 12 NA NA + 13 NA NA + 14 NA NA + 15 NA NA + 16 NA NA + 17 NA NA + 18 NA NA + 19 NA NA + 20 NA NA + 21 NA NA + 22 NA NA + 23 NA NA + 24 NA NA + 25 NA NA + 26 NA NA + 27 NA NA + 28 NA NA + 29 NA NA + 30 NA NA + 31 NA NA + 32 NA NA + 33 NA NA + 34 NA NA + 35 NA NA + 36 NA NA + 37 NA NA + 38 NA NA + 39 NA NA + 40 NA NA + 41 NA NA + 42 NA NA + 43 NA NA + 44 NA NA + 45 NA NA + 46 NA NA + 47 NA NA + 48 NA NA + 49 NA NA + 50 NA NA + 51 NA NA + 52 NA NA + 53 NA NA + 54 NA NA + 55 NA NA + 56 NA NA + 57 NA NA + 58 NA NA + 59 NA NA + 60 NA NA + 61 NA NA + 62 NA NA + 63 NA NA + 64 NA NA + 65 NA NA + 66 NA NA + 67 NA NA + 68 NA NA + 69 NA NA + 70 NA NA + 71 NA NA + 72 NA NA + 73 NA NA + 74 NA NA + 75 NA NA + 76 NA NA + 77 NA NA + 78 NA NA + 79 NA NA + 80 NA NA + 81 NA NA + 82 NA NA $par_usr $par_usr$usr - [1] -0.01414809 3.51414791 4.11605893 + [1] -0.01837243 3.01837246 4.15399860 [4] 1.00000000 $par_usr$old_par @@ -283,16 +348,16 @@ $par_usr$boxw - [1] 0.02829619 + [1] 0.03674489 $par_usr$boxh - [1] 0.02630893 + [1] 0.0446236 $par_usr$labh - [1] 0.02205037 + [1] 0.04685478 $par_usr$legh - [1] 0.0394634 + [1] 0.0669354 diff --git a/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg b/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg index db459144..61f8ab3a 100644 --- a/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg +++ b/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg @@ -27,93 +27,87 @@ - - - - - - - - - - - - - - - - - - - - - - -1 -0 -1 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1_1 -1_3 -1_8 -1_10 -1_2 -1_5 -1_7 -1_6 -1_8 -1_4 -1_9 -? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1_1 +1_3 +1_7 +1_10 +1_2 +1_5 +1_8 +1_6 +1_9 +1_4 +? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pedigree diff --git a/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg b/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg index 0475effe..5a4534c7 100644 --- a/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg +++ b/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg @@ -27,71 +27,67 @@ - - - - - - - - - - - -1_1 -1_3 -1_8 -1_10 -1_2 -1_5 -1_7 -1_6 -1_8 -1_4 -1_9 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + +1_1 +1_3 +1_7 +1_10 +1_2 +1_5 +1_8 +1_6 +1_9 +1_4 +0 +0 +1 +0 +1 +0 +1 +0 +0 +? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/plot/ped-simple-affection.svg b/tests/testthat/_snaps/plot/ped-simple-affection.svg index 4c658f93..b3800dee 100644 --- a/tests/testthat/_snaps/plot/ped-simple-affection.svg +++ b/tests/testthat/_snaps/plot/ped-simple-affection.svg @@ -18,71 +18,67 @@ - - - - - - - - - + + + + + + + + + - -1 -0 -1 -0 -0 -1 -0 -0 -1 +1 +0 +0 +0 +0 +1 +1 +0 +0 1 -0 -1_1 -1_3 -1_8 -1_10 -1_2 -1_5 -1_7 -1_6 -1_8 +1_1 +1_3 +1_7 +1_10 +1_2 +1_5 +1_8 +1_6 +1_9 1_4 -1_9 -? - - - - - - - - - - +? + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 04549df1..f99a6e0a 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -27,6 +27,26 @@ test_that("test auto_hint works", { align = TRUE, width = 8, hints = newhint ) expect_snapshot(plist) + + ## With rel matrix + rel_df <- data.frame( + id1 = c(112, 113, 133, 209), + id2 = c(110, 114, 132, 109), + code = c(1, 4, 4, 4) + ) + pedi <- Pedigree(sampleped[-1], rel_df) + newhint <- auto_hint(pedi) + expect_equal(horder(newhint), + c( + 1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 3, 2, 5, 4, 5, + 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, + 8, 9, 10, 11, 6, 7, 11, 12, 12, 13, 14, 8, 9, 13, 14, + 15, 16, 17, 18, 19, 15, 16, 17, 18, 19 + ) + ) + expect_equal(unlist(spouse(newhint)), + c("idl" = "109", "idr" = "110", "anchor" = "2") + ) }) test_that("test alignment with inbreeding and relationship matrix", { @@ -94,11 +114,14 @@ test_that("Double wife", { ## version 1.9.6 failed to plot subject 3 second marriage and kids ## fix in 9/2023 to revert to some version 1.8.5 version of kindepth df <- data.frame( - id = 1:7, dadid = c(0, 0, 0, 1, 3, 0, 3), - momid = c(0, 0, 0, 2, 4, 0, 6), sex = c(1, 2, 1, 2, 1, 2, 1) + id = 1:7, + dadid = c(0, 0, 0, 1, 3, 0, 3), + momid = c(0, 0, 0, 2, 4, 0, 6), + sex = c(1, 2, 1, 2, 1, 2, 1) ) pedi <- Pedigree(df, missid = "0") + expect_equal(sum(kindepth(pedi)), 4) vdiffr::expect_doppelganger("double_wife", function() plot(pedi) ) -}) \ No newline at end of file +}) diff --git a/tests/testthat/test-bitSize.R b/tests/testthat/test-bitSize.R index 527f9fc7..540cdd48 100644 --- a/tests/testthat/test-bitSize.R +++ b/tests/testthat/test-bitSize.R @@ -3,13 +3,17 @@ test_that("bit_size works", { minnped <- Pedigree(minnbreast, cols_ren_ped = list( "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", "gender" = "sex", "family" = "famid" - )) + ), missid = "0") bs_pedi <- bit_size(minnped, missid = NA_character_) - bs_char <- bit_size(as.character(minnbreast$fatherid), - as.character(minnbreast$motherid), missid = NA_character_ + bs_char <- bit_size( + as.character(minnbreast$fatherid), + as.character(minnbreast$motherid), + missid = "0" ) - ped <- with(minnbreast, Ped(id, sex, fatherid, motherid, missid = NA_character_)) + ped <- with(minnbreast, + Ped(id, sex, fatherid, motherid, missid = "0") + ) bs_ped <- bit_size(ped) expect_equal(bs_ped, bs_char) diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index 90405429..bf4622bc 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -88,7 +88,6 @@ test_that("Class ped work", { expect_equal(ped3[1]@id, "ID1") expect_equal(ped3[1:2]@id, c("ID1", "ID2")) - famid(ped3) expect_equal(dim(as.data.frame(ped3)), c(3, 14)) expect_equal(dim(mcols(ped3)), c(3, 2)) @@ -150,9 +149,9 @@ test_that("Rel class works", { test_that("Hints class works", { ## From scratch hts0 <- Hints() - expect_equal(horder(hts0), character()) - horder(hts0) <- c("ID1", "ID2") - expect_equal(horder(hts0), c("ID1", "ID2")) + expect_equal(horder(hts0), numeric()) + horder(hts0) <- c(1, 2) + expect_equal(horder(hts0), c(1, 2)) expect_equal(dim(spouse(hts0)), c(0, 3)) spouse(hts0) <- data.frame( idl = c("ID1", "ID2"), @@ -163,7 +162,7 @@ test_that("Hints class works", { expect_snapshot(hts0) ## With constructor - hts2 <- Hints(horder = c("ID1", "ID2"), spouse = data.frame( + hts2 <- Hints(horder = c(1, 2), spouse = data.frame( idl = c("ID1", "ID2"), idr = c("ID3", "ID4"), anchor = factor(c("left", "right")) @@ -171,16 +170,22 @@ test_that("Hints class works", { expect_equal(hts0, hts2) ## With missing values - hts_horder <- Hints(horder = c("ID1", "ID2", 1, "ID3")) - expect_equal(horder(hts_horder), c("ID1", "ID2", "1", "ID3")) + expect_error(Hints(horder = c(1, 2, NA, 3))) + hts_horder <- Hints(horder = c(1, 2, 4, 3)) + expect_equal(horder(hts_horder), c(1, 2, 4, 3)) expect_equal(dim(spouse(hts_horder)), c(0, 3)) - hts_spouse <- Hints(spouse = data.frame( + expect_error(Hints(spouse = data.frame( idl = c("ID1", "ID2"), idr = c("ID3", NA), anchor = factor(c("left", "right")) + ))) + hts_spouse <- Hints(spouse = data.frame( + idl = c("ID1", "ID2"), + idr = c("ID3", "ID4"), + anchor = factor(c("left", "right")) )) - expect_equal(horder(hts_spouse), character()) + expect_equal(horder(hts_spouse), numeric()) expect_equal(dim(spouse(hts_spouse)), c(2, 3)) hts1 <- subset(hts2, "ID1") From 2d5d73d588479670cbfc2b627a1a3f6829ebbff8 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 12:31:38 +0100 Subject: [PATCH 043/111] Set horder as named numeric vector --- R/AllAccessors.R | 3 +++ R/AllConstructor.R | 16 ++++++---------- R/AllGeneric.R | 3 +-- R/AllValidity.R | 34 ++++++++++++++++++++++++++++++---- R/align.R | 8 ++++++-- R/auto_hint.R | 12 ++++-------- R/best_hint.R | 4 +++- tests/testthat/test-align.R | 10 +++++----- 8 files changed, 58 insertions(+), 32 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index afcf7e9f..23c2e35f 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -585,6 +585,9 @@ setMethod( "horder<-", signature(object = "Hints", value = "ANY"), function(object, value) { + if (length(value) > 0 && is.null(names(value))) { + stop("horder must be named") + } object@horder <- value validObject(object) object diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 446cfa2c..0477bba5 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -236,6 +236,9 @@ setGeneric("Hints", function(horder, spouse) { setMethod("Hints", signature(horder = "numeric", spouse = "data.frame"), function(horder, spouse) { + if (length(horder) > 0 && is.null(names(horder))) { + stop("The horder vector must be named") + } new("Hints", horder = horder, spouse = spouse) } ) @@ -246,6 +249,9 @@ setMethod("Hints", setMethod("Hints", signature(horder = "numeric", spouse = "missing_OR_NULL"), function(horder, spouse) { + if (length(horder) > 0 && is.null(names(horder))) { + stop("The horder vector must be named") + } dfe <- data.frame("idl" = character(), "idr" = character(), "anchor" = factor() ) @@ -253,16 +259,6 @@ setMethod("Hints", } ) -#' @docType methods -#' @rdname Hints -#' @export -setMethod("Hints", - signature(horder = "missing_OR_NULL", spouse = "data.frame"), - function(horder, spouse) { - new("Hints", horder = numeric(), spouse = spouse) - } -) - #' @docType methods #' @rdname Hints #' @export diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 7cb0e7ea..cb1bfb30 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -299,13 +299,12 @@ setMethod("subset", "Hints", function(x, idlist) { } if (length(horder) > 0) { - horder <- horder[horder %in% idlist] + horder <- horder[names(horder) %in% idlist] } if (nrow(spouse) > 0) { spouse <- spouse[spouse$idl %in% idlist & spouse$idr %in% idlist, ] } - new_hints <- Hints(horder = horder, spouse = spouse) validObject(new_hints) new_hints diff --git a/R/AllValidity.R b/R/AllValidity.R index 58e183ec..40e7648a 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -106,6 +106,9 @@ is_valid_hints <- function(object) { if (! is.numeric(object@horder)) { errors <- c(errors, "horder slot must be numeric") } + if (length(object@horder) > 0 && is.null(names(object@horder))) { + errors <- c(errors, "horder slot should be named") + } if (! is.data.frame(object@spouse)) { errors <- c(errors, "spouse slot must be a data.frame") } @@ -127,22 +130,45 @@ is_valid_hints <- function(object) { errors <- c(errors, check_values( object@spouse$anchor, c("left", "right", "either"), "anchor" )) + errors <- c(errors, check_values( + object@spouse$idl, NA_character_, "idl", present = FALSE + )) + errors <- c(errors, check_values( + object@spouse$idr, NA_character_, "idr", present = FALSE + )) - idmin <- pmin(object@spouse$idl, object@spouse$idr) - idmax <- pmax(object@spouse$idl, object@spouse$idr) - if (any(idmin == idmax)) { + if (any(object@spouse$idl == object@spouse$idr, na.rm = TRUE)) { errors <- c(errors, "idl and idr should be different") } + + idmin <- pmin(object@spouse$idl, object@spouse$idr, na.rm = TRUE) + idmax <- pmax(object@spouse$idl, object@spouse$idr, na.rm = TRUE) dup <- anyDuplicated(cbind(idmin, idmax)) if (dup) { dup <- paste(idmin[dup], idmax[dup], sep = "_") errors <- c(errors, paste( - "idl and idr should be unique:", + "idl and idr couple should be unique:", paste(dup, collapse = ", "), "couples are present more than once in the spouse slot." )) } + ## All idl and idr should be in the names of horder + if (length(object@horder) > 0) { + id <- c(object@spouse$idl, object@spouse$idr) + if (any(!id %in% names(object@horder))) { + errors <- c(errors, paste( + "All idl and idr should be in the names of horder" + )) + } + } else { + if (nrow(spouse(object)) > 0) { + errors <- c(errors, paste( + "horder slot should be non empty if spouse slot is non empty" + )) + } + } + return(errors) } diff --git a/R/align.R b/R/align.R index dfecc007..662b954b 100644 --- a/R/align.R +++ b/R/align.R @@ -144,7 +144,9 @@ setMethod("align", "Pedigree", auto_hint(obj) }, silent = TRUE) if ("try-error" %in% class(hints)) { - hints <- Hints(horder = seq_len(max(1, length(ped)))) + hints <- Hints(horder = setNames( + seq_len(length(ped(obj))), id(ped(obj)) + )) } } ## Doc: Setup-align @@ -159,7 +161,9 @@ setMethod("align", "Pedigree", idxl <- match(spouse(hints)$idl, id(ped(obj))) idxr <- match(spouse(hints)$idr, id(ped(obj))) tsex <- sex(ped(obj))[idxl] # sex of the left member - spouselist <- cbind(0, 0, 1 + (tsex != "male"), spouse(hints)$anchor) + spouselist <- cbind( + 0, 0, 1 + (tsex != "male"), as.numeric(spouse(hints)$anchor) + ) spouselist[, 1] <- ifelse(tsex == "male", idxl, idxr) spouselist[, 2] <- ifelse(tsex == "male", idxr, idxl) } else { diff --git a/R/auto_hint.R b/R/auto_hint.R index b5415888..cd5335a6 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -324,24 +324,20 @@ setMethod("auto_hint", "Pedigree", function(obj, depth <- kindepth(obj, align_parents = TRUE) ## Doc: init-auto_hint horder + horder <- setNames(rep(0, n), id(ped(obj))) if (!is.null(hints)) { if (is.vector(hints)) { hints <- Hints(horder = hints) } else if (is.matrix(hints)) { - hints <- Hints(spouse = hints) + hints <- Hints(spouse = hints, horder = horder) } else if (is.list(hints)) { hints <- Hints(hints) } else if (!is(hints, "Hints")) { stop("hints must be a vector, matrix, list or Hints object") } - if (is.null(horder(hints))) { - horder <- integer(n) - } else { - horder <- horder(hints) - } - } else { - hints <- Hints(horder = integer(n)) horder <- horder(hints) + } else { + hints <- Hints(horder = horder) } for (i in unique(depth)) { diff --git a/R/best_hint.R b/R/best_hint.R index b8b600e3..a6ae87db 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -99,7 +99,9 @@ setMethod( hint[fmom, 1] <- pmat[perm, ] # this fixes up marriages and such newhint <- auto_hint( - obj, hints = Hints(horder = hint[, 1]), reset = TRUE + obj, hints = Hints( + horder = setNames(hint[, 1], id(ped(obj))) + ), reset = TRUE ) plist <- align( obj, packed = TRUE, align = TRUE, width = 8, hints = newhint diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index f99a6e0a..ffb0384c 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -37,12 +37,12 @@ test_that("test auto_hint works", { pedi <- Pedigree(sampleped[-1], rel_df) newhint <- auto_hint(pedi) expect_equal(horder(newhint), - c( + setNames(c( 1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 3, 2, 5, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 6, 7, 11, 12, 12, 13, 14, 8, 9, 13, 14, 15, 16, 17, 18, 19, 15, 16, 17, 18, 19 - ) + ), id(ped(pedi))) ) expect_equal(unlist(spouse(newhint)), c("idl" = "109", "idr" = "110", "anchor" = "2") @@ -63,7 +63,7 @@ test_that("test alignment with inbreeding and relationship matrix", { plist_sr <- align(ped_sr) expect_equal(plist$nid[1, ], - c(35, 36, 5, 6, 7, 8, 42, 43, rep(0, 16)) + c(5, 6, 7, 8, 35, 36, 42, 43, rep(0, 16)) ) expect_equal(plist_sr$nid[1, ], c(5, 6, 7, 8, 35, 36, 42, 43, rep(0, 14)) @@ -99,13 +99,13 @@ test_that("Alignement with spouse", { anchor = anchor_to_factor("right") )) expect_equal(horder(hints), - c( + setNames(c( 1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 2, 3, 5, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 6, 7, 11, 12, 12, 13, 14 - ) + ), id(ped(ped1))) ) }) From 4566f2f69ff19280a1f02fb1ff8f2feaaed63a41 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 12:32:00 +0100 Subject: [PATCH 044/111] Add hints test with named horder --- tests/testthat/test-class.R | 53 ++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index bf4622bc..8118c911 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -150,9 +150,16 @@ test_that("Hints class works", { ## From scratch hts0 <- Hints() expect_equal(horder(hts0), numeric()) - horder(hts0) <- c(1, 2) - expect_equal(horder(hts0), c(1, 2)) + expect_error(horder(hts0) <- c(1, 2)) + horder(hts0) <- c("ID1" = 1, "ID2" = 2) + expect_equal(horder(hts0), c("ID1" = 1, "ID2" = 2)) expect_equal(dim(spouse(hts0)), c(0, 3)) + expect_error(spouse(hts0) <- data.frame( + idl = c("ID1", "ID2"), + idr = c("ID3", "ID4"), + anchor = factor(c("left", "right")) + )) + horder(hts0) <- c("ID1" = 1, "ID2" = 2, "ID3" = 3, "ID4" = 4) spouse(hts0) <- data.frame( idl = c("ID1", "ID2"), idr = c("ID3", "ID4"), @@ -162,38 +169,34 @@ test_that("Hints class works", { expect_snapshot(hts0) ## With constructor - hts2 <- Hints(horder = c(1, 2), spouse = data.frame( - idl = c("ID1", "ID2"), - idr = c("ID3", "ID4"), - anchor = factor(c("left", "right")) - )) + hts2 <- Hints( + horder = c("ID1" = 1, "ID2" = 2, "ID3" = 3, "ID4" = 4), + spouse = data.frame( + idl = c("ID1", "ID2"), + idr = c("ID3", "ID4"), + anchor = factor(c("left", "right")) + ) + ) expect_equal(hts0, hts2) ## With missing values - expect_error(Hints(horder = c(1, 2, NA, 3))) - hts_horder <- Hints(horder = c(1, 2, 4, 3)) - expect_equal(horder(hts_horder), c(1, 2, 4, 3)) - expect_equal(dim(spouse(hts_horder)), c(0, 3)) - - expect_error(Hints(spouse = data.frame( - idl = c("ID1", "ID2"), - idr = c("ID3", NA), - anchor = factor(c("left", "right")) - ))) - hts_spouse <- Hints(spouse = data.frame( - idl = c("ID1", "ID2"), - idr = c("ID3", "ID4"), - anchor = factor(c("left", "right")) + expect_error(Hints(horder = c("ID1" = 1, "ID2" = NA, "ID3" = 3, "ID4" = 4))) + + expect_error(Hints( + horder = c("ID1" = 1, "ID2" = 2, "ID3" = 3, "ID4" = 4), + spouse = data.frame( + idl = c("ID1", "ID2"), + idr = c("ID3", NA), + anchor = factor(c("left", "right")) + ) )) - expect_equal(horder(hts_spouse), numeric()) - expect_equal(dim(spouse(hts_spouse)), c(2, 3)) hts1 <- subset(hts2, "ID1") - expect_equal(horder(hts1), c("ID1")) + expect_equal(horder(hts1), c("ID1" = 1)) expect_equal(dim(spouse(hts1)), c(0, 3)) hts13 <- subset(hts2, c("ID1", "ID3")) - expect_equal(horder(hts13), "ID1") + expect_equal(horder(hts13), c("ID1" = 1, "ID3" = 3)) expect_equal(dim(spouse(hts13)), c(1, 3)) }) From fdff6c127c44bd9fb736a7236417429d8e224400 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 13:06:05 +0100 Subject: [PATCH 045/111] print only unique values --- R/AllValidity.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/AllValidity.R b/R/AllValidity.R index 40e7648a..3a18640f 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -83,7 +83,7 @@ check_values <- function(val, ref, name = NULL, present = TRUE) { if (any(val_abs)) { paste0( - val_name, paste0max(val[val_abs]), should, + val_name, paste0max(unique(val[val_abs])), should, paste0max(ref) ) } @@ -314,6 +314,7 @@ is_valid_ped <- function(object) { sex <- object@sex is_dad <- id %in% dadid is_mom <- id %in% momid + if (any(sex[is_dad] != "male")) { errors <- c(errors, "Some dad are not male") } From d933246d79d1118d75fde5ff4ded2b3d4c5b018e Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 13:06:32 +0100 Subject: [PATCH 046/111] Correct bug descendant --- R/descendants.R | 10 +++++----- tests/testthat/test-descendants.R | 11 ++++++----- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/R/descendants.R b/R/descendants.R index 8d617c1d..44747dc7 100644 --- a/R/descendants.R +++ b/R/descendants.R @@ -29,13 +29,13 @@ setGeneric("descendants", setMethod("descendants", signature(idlist = "character_OR_integer", obj = "character_OR_integer"), function(idlist, obj, dadid, momid) { id <- as.character(obj) - idlist <- as.character(obj) + idlist <- as.character(idlist) dadid <- as.character(dadid) momid <- as.character(momid) - child <- id[!(is.na(match(dadid, idlist)) & - is.na(match(momid, idlist)) - ) - ] + child <- id[!( + is.na(match(dadid, idlist)) & + is.na(match(momid, idlist)) + )] descend <- NULL while (length(child > 0)) { newchild <- id[!(is.na(match(dadid, child)) & diff --git a/tests/testthat/test-descendants.R b/tests/testthat/test-descendants.R index 3b20220e..ebcb1f91 100644 --- a/tests/testthat/test-descendants.R +++ b/tests/testthat/test-descendants.R @@ -1,15 +1,16 @@ test_that("descendants works", { data("sampleped") idlist <- c("1_101", "2_208") + + desc_char <- with(sampleped, descendants(c("101", "208"), id, dadid, momid)) + pedi <- Pedigree(sampleped) desc <- descendants(idlist, pedi) expect_equal(desc, c( "1_109", "2_212", "2_213", "2_214", "1_121", "1_122", "1_123", "1_124" )) - ped <- with(sampleped, Ped(id, sex, dadid, momid, family, missid = "0")) - expect_equal(descendants(idlist, ped), c( - "109", "212", "213", "214", - "121", "122", "123", "124" - )) + ped <- with(sampleped, Ped(id, sex, dadid, momid, famid, missid = "0")) + idlist <- c("101", "208") + expect_equal(descendants(idlist, ped), desc_char) }) From 06d51fe5ab0a02f698bfeb74e39ecc8b706097be Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 13:07:41 +0100 Subject: [PATCH 047/111] Set missing id in fix parents to missid --- R/fix_parents.R | 17 +++++----- tests/testthat/_snaps/fix_parents.md | 12 +++++++ tests/testthat/test-fix_parents.R | 50 ++++++++-------------------- 3 files changed, 34 insertions(+), 45 deletions(-) create mode 100644 tests/testthat/_snaps/fix_parents.md diff --git a/R/fix_parents.R b/R/fix_parents.R index 5140017a..294186db 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -117,20 +117,21 @@ setMethod("fix_parents", "character", function( } findex <- match(dadid, id, nomatch = 0) mindex <- match(momid, id, nomatch = 0) + ## dadid given, not found id, so add if (any(findex == 0 & !nofather)) { dadnotfound <- unique(dadid[which(findex == 0 & !nofather)]) id <- c(id, dadnotfound) sex <- c(sex, rep(1, length(dadnotfound))) - dadid <- c(dadid, rep(0, length(dadnotfound))) - momid <- c(momid, rep(0, length(dadnotfound))) + dadid <- c(dadid, rep(missid, length(dadnotfound))) + momid <- c(momid, rep(missid, length(dadnotfound))) } if (any(mindex == 0 & !nomother)) { momnotfound <- unique(momid[which(mindex == 0 & !nomother)]) id <- c(id, momnotfound) sex <- c(sex, rep(2, length(momnotfound))) - dadid <- c(dadid, rep(0, length(momnotfound))) - momid <- c(momid, rep(0, length(momnotfound))) + dadid <- c(dadid, rep(missid, length(momnotfound))) + momid <- c(momid, rep(missid, length(momnotfound))) } if (any(sex[mindex] != 1)) { dadnotmale <- unique((id[findex])[sex[findex] != 1]) @@ -150,8 +151,8 @@ setMethod("fix_parents", "character", function( dadid[nodad_idx] <- addids[seq_along(nodad_idx)] id <- c(id, addids[seq_along(nodad_idx)]) sex <- c(sex, rep(1, length(nodad_idx))) - dadid <- c(dadid, rep(0, length(nodad_idx))) - momid <- c(momid, rep(0, length(nodad_idx))) + dadid <- c(dadid, rep(missid, length(nodad_idx))) + momid <- c(momid, rep(missid, length(nodad_idx))) } ## children with dad in ped, mom missing addids <- addids[!(addids %in% id)] @@ -160,8 +161,8 @@ setMethod("fix_parents", "character", function( momid[nodad_idx] <- addids[seq_along(nodad_idx)] id <- c(id, addids[seq_along(nodad_idx)]) sex <- c(sex, rep(2, length(nodad_idx))) - dadid <- c(dadid, rep(0, length(nodad_idx))) - momid <- c(momid, rep(0, length(nodad_idx))) + dadid <- c(dadid, rep(missid, length(nodad_idx))) + momid <- c(momid, rep(missid, length(nodad_idx))) } if (is.null(famid)) { data.frame(id = id, momid = momid, dadid = dadid, sex = sex) diff --git a/tests/testthat/_snaps/fix_parents.md b/tests/testthat/_snaps/fix_parents.md new file mode 100644 index 00000000..52a445cd --- /dev/null +++ b/tests/testthat/_snaps/fix_parents.md @@ -0,0 +1,12 @@ +# fix_parents works with number + + invalid class "Ped" object: dadid values '100', '200' should be in '1', '2', '3', '4', '5'... + +# fix_parents works with character + + invalid class "Ped" object: momid values 'fam112' should be in 'fam101', 'fam102', 'fam103', 'fam104', 'fam105'... + +# fix_parents works with sex errors + + invalid class "Ped" object: dadid values '2_209' should be in '2_201', '2_202', '2_203', '2_204', '2_205'... + diff --git a/tests/testthat/test-fix_parents.R b/tests/testthat/test-fix_parents.R index ff00d285..72a433dd 100644 --- a/tests/testthat/test-fix_parents.R +++ b/tests/testthat/test-fix_parents.R @@ -2,9 +2,9 @@ test_that("fix_parents works with number", { materdf <- data.frame(id = 1:5, momid = c(0, 1, 1, 2, 2), sex = "female") materdf$dadid <- materdf$momid * 100 materdf <- as.data.frame(lapply(materdf, as.character)) - expect_error(Pedigree(materdf)) - peddf <- with(materdf, fix_parents(id, dadid, momid, sex, missid = NA_character_)) - expect_no_error(Pedigree(peddf)) + expect_snapshot_error(Pedigree(materdf, missid = "0")) + peddf <- with(materdf, fix_parents(id, dadid, momid, sex, missid = "0")) + expect_no_error(Pedigree(peddf, missid = "0")) }) test_that("fix_parents works with character", { @@ -17,11 +17,11 @@ test_that("fix_parents works with character", { "fam107", "fam107", "fam107", "fam112" ) ) - expect_error(Pedigree(test1char)) + expect_snapshot_error(Pedigree(test1char, missid = "0")) test1newmom <- with(test1char, - fix_parents(id, dadid, momid, sex, missid = NA_character_) + fix_parents(id, dadid, momid, sex, missid = "0") ) - expect_no_error(Pedigree(test1newmom)) + expect_no_error(Pedigree(test1newmom, missid = "0")) }) test_that("fix_parents works with sex errors", { @@ -31,37 +31,13 @@ test_that("fix_parents works with sex errors", { datped2 <- datped2[-which(datped2$id %in% 209), ] ## this gets an error - expect_warning(Pedigree(datped2)) - - ## This fix the error - datped2[, c("id", "momid", "dadid")] <- as.data.frame(lapply( - datped2[, c("id", "momid", "dadid")], as.character - )) - fixped2 <- with(datped2, fix_parents(id, dadid, momid, sex, missid = NA_character_)) - expect_no_error(Pedigree(fixped2)) -}) - - -test_that("fix_parents_df works with sex errors and with family", { - data("sampleped") - datped2 <- sampleped[sampleped$famid %in% 2, ] - # Set individual 203 as female - datped2[datped2$id %in% 203, "sex"] <- 2 - # Delete individual 209 from id - datped2 <- datped2[-which(datped2$id %in% 209), ] - - ## this gets an error - expect_warning(Pedigree(datped2)) + expect_snapshot_error(Pedigree(datped2)) ## This fix the error and keep the dataframe dimensions - datped2[, c("id", "momid", "dadid")] <- as.data.frame(lapply( - datped2[, c("id", "momid", "dadid")], as.character - )) - fixped2 <- fix_parents(datped2, delete = TRUE) - expect_no_error(Pedigree(fixped2)) - expect_equal(dim(fixped2), c(13, 7)) - - fixped2 <- fix_parents(datped2, delete = FALSE) + fixped2 <- with(datped2, + fix_parents(id, dadid, momid, sex, missid = NA_character_) + ) + expect_equal(fixped2$sex[fixped2$id == 203], 1) + expect_contains(fixped2$id, "209") expect_no_error(Pedigree(fixped2)) - expect_equal(dim(fixped2), c(14, 7)) -}) \ No newline at end of file +}) From eb131550a45654c75bad5ffba8f4d04b155644c5 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 13:07:55 +0100 Subject: [PATCH 048/111] Fix mods in Scales test --- tests/testthat/_snaps/class.md | 33 +++++++++++++++++++++++++++++++++ tests/testthat/test-class.R | 10 +++++----- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/tests/testthat/_snaps/class.md b/tests/testthat/_snaps/class.md index 905f8172..d4aa3180 100644 --- a/tests/testthat/_snaps/class.md +++ b/tests/testthat/_snaps/class.md @@ -28,6 +28,22 @@ 1 ID3 ID5 MZ twin | 1 2 ID2 ID4 Spouse | 2 +# Hints class works + + Code + hts0 + Output + An object of class "Hints" + Slot "horder": + ID1 ID2 ID3 ID4 + 1 2 3 4 + + Slot "spouse": + idl idr anchor + 1 ID1 ID3 left + 2 ID2 ID4 right + + # Scales class works invalid class "Scales" object: 1: affected column(s) must be logical @@ -41,3 +57,20 @@ invalid class "Scales" object: 1: labels column(s) must be character invalid class "Scales" object: 2: mods column(s) must be numeric +--- + + Code + scl0 + Output + An object of class "Scales" + Slot "fill": + order column_values column_mods mods labels affected fill density angle + 1 2 ID1 ID1 1 ID1 TRUE ID3 1 90 + 2 3 ID2 ID2 2 ID2 FALSE ID2 2 60 + + Slot "border": + column mods labels border + 1 ID1 1 Lab1 ID1 + 2 ID2 2 Lab2 ID2 + + diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index 8118c911..58b58d47 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -234,7 +234,7 @@ test_that("Scales class works", { order = c(2, 3), column_values = c("ID1", "ID2"), column_mods = c("ID1", "ID2"), - mods = c("ID1", "ID2"), + mods = c(1, 2), labels = c("ID1", "ID2"), affected = c(TRUE, FALSE), fill = c("ID1", "ID2"), @@ -247,7 +247,7 @@ test_that("Scales class works", { border(scl0) <- data.frame( column = c("ID1", "ID2"), - mods = c("ID1", "ID2"), + mods = c(1, 2), labels = c("Lab1", "Lab2"), border = c("ID1", "ID2") ) @@ -261,7 +261,7 @@ test_that("Scales class works", { order = c(2, 3), column_values = c("ID1", "ID2"), column_mods = c("ID1", "ID2"), - mods = c("ID1", "ID2"), + mods = c(1, 2), labels = c("ID1", "ID2"), affected = c(TRUE, FALSE), fill = c("ID3", "ID2"), @@ -270,7 +270,7 @@ test_that("Scales class works", { ), border = data.frame( column = c("ID1", "ID2"), - mods = c("ID1", "ID2"), + mods = c(1, 2), labels = c("Lab1", "Lab2"), border = c("ID1", "ID2") ) @@ -286,7 +286,7 @@ test_that("Pedigree class works", { expect_s4_class(hints(pedi), "Hints") expect_s4_class(ped(pedi), "Ped") expect_s4_class(rel(pedi), "Rel") - expect_equal(horder(pedi), character()) + expect_equal(horder(pedi), numeric()) expect_equal(dim(spouse(pedi)), c(0, 3)) expect_equal(dim(fill(pedi)), c(0, 9)) expect_equal(dim(border(pedi)), c(0, 4)) From 0f2b48810a2a6b3ddd9566d65634691bd5f670a0 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 15:02:35 +0100 Subject: [PATCH 049/111] Make generate_scales test pass --- R/AllValidity.R | 37 +++++++++++++++++---------- R/generate_colors.R | 4 +-- tests/testthat/test-generate_scales.R | 19 +++++++------- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/R/AllValidity.R b/R/AllValidity.R index 3a18640f..986d5f66 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -200,8 +200,9 @@ is_valid_scales <- function(object) { col_log <- c("affected") err_log <- col_log[!unlist(lapply(object@fill[col_log], is, "logical"))] if (length(err_log) > 0) { - errors <- c(errors, paste( - err_log, " column(s) must be logical", sep = "" + errors <- c(errors, paste("Fill slot ", + paste(err_log, collapse = ", "), + " column(s) must be logical", sep = "" )) } @@ -209,8 +210,9 @@ is_valid_scales <- function(object) { col_num <- c("density", "angle", "order", "mods") err_num <- col_num[!unlist(lapply(object@fill[col_num], is, "numeric"))] if (length(err_num) > 0) { - errors <- c(errors, paste( - err_num, " column(s) must be numeric", sep = "" + errors <- c(errors, paste("Fill slot ", + paste(err_num, collapse = ", "), + " column(s) must be numeric", sep = "" )) } @@ -218,29 +220,38 @@ is_valid_scales <- function(object) { col_char <- c( "column_values", "column_mods", "labels", "fill" ) - err_char <- col_char[!unlist(lapply(object@fill[col_char], is, "character"))] + err_char <- col_char[!unlist(lapply( + object@fill[col_char], is, "character" + ))] if (length(err_char) > 0) { - errors <- c(errors, paste( - err_char, " column(s) must be character", sep = "" + errors <- c(errors, paste("Fill slot ", + paste(err_char, collapse = ", "), + " column(s) must be character", sep = "" )) } #### Check that the border columns have the right values #### ## Check for character columns col_char <- c("column", "labels", "border") - err_char <- col_char[!unlist(lapply(object@border[col_char], is, "character"))] + err_char <- col_char[!unlist(lapply( + object@border[col_char], is, "character" + ))] if (length(err_char) > 0) { - errors <- c(errors, paste( - err_char, " column(s) must be character", sep = "" + errors <- c(errors, paste("Border slot ", + paste(err_char, collapse = ", "), + " column(s) must be character", sep = "" )) } ## Check for numeric columns col_num <- c("mods") - err_num <- col_num[!unlist(lapply(object@border[col_num], is, "numeric"))] + err_num <- col_num[!unlist(lapply( + object@border[col_num], is, "numeric" + ))] if (length(err_num) > 0) { - errors <- c(errors, paste( - err_num, " column(s) must be numeric", sep = "" + errors <- c(errors, paste("Border slot ", + paste(err_num, collapse = ", "), + " column(s) must be numeric", sep = "" )) } diff --git a/R/generate_colors.R b/R/generate_colors.R index 932c530c..78f2b349 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -135,7 +135,7 @@ generate_fill <- function( scale <- unique(as.data.frame( list( mods = mods, labels = labels, affected = affected, fill = fill, - density = rep(NA, n), angle = rep(NA, n) + density = rep(NA_integer_, n), angle = rep(NA_integer_, n) ) )) list(mods = mods, fill_scale = scale) @@ -340,7 +340,7 @@ setMethod("generate_colors", "Pedigree", } new_col <- paste0(col_aff, "_aff") - df <- check_columns(mcols(obj), c(col_aff, col_avail), + df <- check_columns(as.data.frame(ped(obj)), c(col_aff, col_avail), "", new_col, others_cols = TRUE ) diff --git a/tests/testthat/test-generate_scales.R b/tests/testthat/test-generate_scales.R index 14e3182f..fe9b3533 100644 --- a/tests/testthat/test-generate_scales.R +++ b/tests/testthat/test-generate_scales.R @@ -89,31 +89,30 @@ test_that("generate fill full scale on", { test_that("generate colors works on Pedigree object", { data("sampleped") ped <- Pedigree(sampleped[sampleped$famid == "1", -1]) - ped(ped, "id") <- as.numeric(ped(ped, "id")) - ped_aff <- generate_colors(ped, col_aff = "id", + mcols(ped)$"id_num" <- as.numeric(id(ped(ped))) + ped_aff <- generate_colors(ped, col_aff = "id_num", threshold = 120, sup_thres_aff = TRUE, add_to_scale = FALSE ) - expect_equal(ped_aff$ped$id_aff, c(rep(0, 20), rep(1, 21))) - expect_equal(ped_aff$scales$fill$fill, c("white", "red")) - expect_equal(ped_aff$scales$fill$labels, + expect_equal(mcols(ped_aff)$id_num_aff, c(rep(0, 20), rep(1, 21))) + expect_equal(fill(ped_aff)$fill, c("white", "red")) + expect_equal(fill(ped_aff)$labels, c("Healthy <= to 120", "Affected > to 120") ) - expect_equal(ped_aff$scales$fill$mods, c(0, 1)) - expect_equal(ped_aff$scales$fill$affected, c("FALSE", "TRUE")) + expect_equal(fill(ped_aff)$mods, c(0, 1)) + expect_equal(fill(ped_aff)$affected, c(FALSE, TRUE)) }) test_that("generate with full scale", { data("sampleped") sampleped$val_num <- as.numeric(sampleped$id) ped <- Pedigree(sampleped) - ped <- ped[ped(ped, "famid") == "1", ] + ped <- ped[famid(ped) == "1"] ped <- generate_colors( ped, add_to_scale = FALSE, "val_num", threshold = 115, colors_aff = c("pink", "purple"), keep_full_scale = TRUE ) - expect_equal(fill(ped, "labels")[c(1, 4)], + expect_equal(fill(ped)$labels[c(1, 4)], c("Healthy <= to 115 : [101,106]", "Affected > to 115 : [116,124]") ) expect(nrow(fill(ped)), 6) }) -TRUE \ No newline at end of file From 43d0aadd1d80e2f1b95551cc2a45b68e2564db24 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 15:49:03 +0100 Subject: [PATCH 050/111] Add affected Make is informative, kindepth works --- R/AllAccessors.R | 45 ++++++++++++++++++++++++++++ R/is_informative.R | 21 ++++++------- tests/testthat/test-align.R | 2 +- tests/testthat/test-is_informative.R | 42 +++++++++++--------------- tests/testthat/test-kindepth.R | 2 +- 5 files changed, 75 insertions(+), 37 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 23c2e35f..db90774c 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -202,6 +202,51 @@ setMethod("sex<-", } ) +#' Affected getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A numeric vector with the affected of each individual. +#' +#' @rdname Ped +#' @aliases affected,Ped-method +#' @export +setGeneric("affected", function(x) { + standardGeneric("affected") +}) +setMethod("affected", signature(x = "Ped"), function(x) { + x@affected +}) +setGeneric("affected<-", function(x, value) { + standardGeneric("affected<-") +}) +setMethod("affected<-", + signature(x = "Ped", value = "ANY"), + function(x, value) { + if ( + ! is.character(value) && + ! is.integer(value) && + ! is.logical(value) && + ! is.factor(value) + ) { + stop("Affected must be a character or integer vector") + } + if (length(value) != length(x)) { + if (length(value) == 1) { + value <- rep(value, length(x)) + } else { + stop( + "The length of the new values for affected should be: ", + "equal to the length of the Ped object" + ) + } + } + x@affected <- vect_to_binary(value) + validObject(x) + x + } +) + #### S4 Rel Accessors #### #' Code accessor of Rel object #' diff --git a/R/is_informative.R b/R/is_informative.R index c3fbedd2..f211a3f6 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -96,11 +96,12 @@ setMethod("is_informative", "character", function( #' @docType methods #' @param reset If `TRUE`, the `id_inf` column is reset setMethod("is_informative", "Pedigree", function( - obj, col_aff = NULL, informative = "AvAf", missid = NA_character_, reset = FALSE + obj, col_aff = NULL, informative = "AvAf", + missid = NA_character_, reset = FALSE ) { - ped <- obj - deriv(ped, "affected") <- NA - aff_scl <- fill(ped) + affected(ped(obj)) <- NA + aff_scl <- fill(obj) + ped_df <- as.data.frame(ped(obj)) if (is.null(col_aff)) { stop("The col_aff argument is required") } @@ -111,22 +112,22 @@ setMethod("is_informative", "Pedigree", function( unaff <- aff_scl$mods[aff_scl$affected == FALSE & aff_scl$column_mods == col_aff ] - obj$ped$affected[obj$ped[, col_aff] %in% aff] <- 1 - obj$ped$affected[obj$ped[, col_aff] %in% unaff] <- 0 + ped_df$affected[ped_df[, col_aff] %in% aff] <- 1 + ped_df$affected[ped_df[, col_aff] %in% unaff] <- 0 } else { stop("The column ", col_aff, " is not in the scales fill") } cols_needed <- c("id", "avail", "affected") - obj$ped <- check_columns(obj$ped, cols_needed, "", "", others_cols = TRUE) - id_inf <- is_informative(obj$ped$id, obj$ped$avail, obj$ped$affected, + check_columns(ped_df, cols_needed, "", "", others_cols = TRUE) + id_inf <- is_informative(ped_df$id, ped_df$avail, ped_df$affected, informative, missid ) if (!reset) { - check_columns(obj$ped, NULL, "id_inf", NULL) + check_columns(ped_df, NULL, "id_inf", NULL) } - obj$ped$id_inf <- ifelse(obj$ped$id %in% id_inf, 1, 0) + mcols(obj)$id_inf <- ifelse(ped_df$id %in% id_inf, 1, 0) obj }) diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index ffb0384c..930bba2c 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -6,7 +6,7 @@ test_that("align works", { expect_equal(plist1$n, c(6, 12, 17, 8)) ped2 <- pedi[famid(pedi) == 2] - withr::local_options(width = 50) + withr::local_options(width = 180) plist2 <- align(ped2) expect_equal(plist2$n, c(2, 7, 5)) diff --git a/tests/testthat/test-is_informative.R b/tests/testthat/test-is_informative.R index 1d423711..d00de03c 100644 --- a/tests/testthat/test-is_informative.R +++ b/tests/testthat/test-is_informative.R @@ -3,8 +3,8 @@ test_that("is_informative works", { # Test for character id <- as.character(sampleped$id) - avail <- sampleped$available - affected <- sampleped$affected + avail <- sampleped$avail + affected <- sampleped$affection expect_equal(is_informative(id, avail, affected), c( @@ -36,17 +36,6 @@ test_that("is_informative works", { length(is_informative(id, avail, affected, informative = "All")), 55 ) - - sampleped$avail <- sampleped$available - sampleped$id <- as.character(sampleped$id) - expect_equal(with(sampleped, - is_informative(id, avail, affected, informative = "AvAf") - ), - c( - "110", "116", "118", "119", "124", "127", - "128", "201", "203", "206", "207", "214" - ) - ) }) test_that("is_informative works with Pedigree", { @@ -59,46 +48,49 @@ test_that("is_informative works with Pedigree", { ) - df <- is_informative(ped, col_aff = "affection_aff", + ped_upd <- is_informative(ped, col_aff = "affection_aff", informative = "AvAf" - )$ped + ) + expect_equal( - df$id[df$id_inf == 1], + id(ped(ped_upd))[mcols(ped_upd)$id_inf == 1], c( "1_110", "1_116", "1_118", "1_119", "1_124", "1_127", "1_128", "2_201", "2_203", "2_206", "2_207", "2_214" ) ) ped <- Pedigree(sampleped[c(2:5, 7)]) - expect_error(is_informative(ped, informative = "AvAf")) - expect_error(is_informative(ped, column = "test", informative = "AvAf")) + expect_snapshot_error(is_informative( + ped, col_aff = "test", informative = "AvAf" + )) + ped <- generate_colors(ped, col_aff = "sex", mods_aff = "male", add_to_scale = FALSE ) expect_equal( - sum(is_informative(ped, col_aff = "sex_aff", + sum(mcols(is_informative(ped, col_aff = "sex_aff", informative = "Af" - )$ped$id_inf), + ))$id_inf), length(ped(ped, "id")[ped(ped, "sex") == "male"]) ) data(minnbreast) - summary(minnbreast) ped <- Pedigree(minnbreast, cols_ren_ped = list( "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", - "gender" = "sex" - )) + "gender" = "sex", + "family" = "famid" + ), missid = "0") ped <- generate_colors(ped, col_aff = "education", threshold = 3, sup_thres_aff = TRUE, keep_full_scale = TRUE, add_to_scale = FALSE ) expect_equal( - sum(is_informative(ped, + sum(mcols(is_informative(ped, col_aff = "education_aff", informative = "Af" - )$ped$id_inf + ))$id_inf ), sum(minnbreast$education > 3, na.rm = TRUE) ) diff --git a/tests/testthat/test-kindepth.R b/tests/testthat/test-kindepth.R index 39378f4d..62b0ecd3 100644 --- a/tests/testthat/test-kindepth.R +++ b/tests/testthat/test-kindepth.R @@ -17,7 +17,7 @@ test_that("fix_parents_df works with sex errors and with family", { ped <- Pedigree(minnbreast, cols_ren_ped = list( "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", "gender" = "sex", "family" = "famid" - )) + ), missid = "0") expect_equal(sum(kindepth(ped)), 33147) expect_equal(sum(kindepth(ped, align = TRUE)), 39087) }) \ No newline at end of file From 990515df61273793e1bcfdbf4dbaee6b195e887b Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 16:01:31 +0100 Subject: [PATCH 051/111] Update kinship --- R/kinship.R | 46 +++++++++++++++++++++++------------ tests/testthat/test-kinship.R | 8 +++--- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/R/kinship.R b/R/kinship.R index 5a8cd8c7..713e9da3 100644 --- a/R/kinship.R +++ b/R/kinship.R @@ -139,7 +139,7 @@ setMethod("kinship", "character", #' @docType methods setMethod("kinship", "Pedigree", function(obj, chrtype = "autosome") { - famlist <- unique(obj$ped$famid) + famlist <- unique(famid(obj)) nfam <- length(famlist) matlist <- vector("list", nfam) ## The possibly reorderd list of id values @@ -147,26 +147,42 @@ setMethod("kinship", "Pedigree", for (i_fam in seq_along(famlist)) { if (is.na(famlist[i_fam])) { # If no family provided - tped <- obj[is.na(obj$ped$famid)] + tped <- obj[is.na(famid(obj))] } else { ## Pedigree for this family - tped <- obj[obj$ped$famid == famlist[i_fam]] + tped <- obj[famid(obj) == famlist[i_fam]] } temp <- try({ chrtype <- match.arg(casefold(chrtype), c("autosome", "x")) - n <- length(ped(tped)$id) + n <- length(id(ped(tped))) pdepth <- kindepth(tped) - mom_row <- match(ped(tped)$momid, ped(tped)$id, nomatch = n + 1) - dad_row <- match(ped(tped)$dadid, ped(tped)$id, nomatch = n + 1) + mom_row <- match( + momid(ped(tped)), + id(ped(tped)), + nomatch = n + 1 + ) + dad_row <- match( + dadid(ped(tped)), + id(ped(tped)), + nomatch = n + 1 + ) # Are there any MZ twins to worry about? have_mz <- FALSE - if (!is.null(rel(tped)) && any(rel(tped)$code == "MZ twin")) { + if (length(rel(tped)) > 0 && any(code(rel(tped)) == "MZ twin")) { have_mz <- TRUE ## Doc: MakeMZIndex - temp <- which(rel(tped)$code == "MZ twin") + temp <- which(code(rel(tped)) == "MZ twin") ## drop=FALSE added in case only one MZ twin set - id1x <- match(rel(tped)$id1, ped(tped)$id, nomatch = NA) - id2x <- match(rel(tped)$id2, ped(tped)$id, nomatch = NA) + id1x <- match( + id1(rel(tped)), + id(ped(tped)), + nomatch = NA + ) + id2x <- match( + id2(rel(tped)), + id(ped(tped)), + nomatch = NA + ) if (any(is.na(id1x)) | any(is.na(id2x))) { stop("All individuals in relationship matrix", "should be present in the pedigree informations" @@ -209,7 +225,7 @@ setMethod("kinship", "Pedigree", if (chrtype == "autosome") { if (n == 1) { kmat <- matrix(0.5, 1, 1, - dimnames = list(ped(tped)$id, ped(tped)$id) + dimnames = list(id(ped(tped)), id(ped(tped))) ) } else { kmat <- diag(c(rep(0.5, n), 0)) # founders @@ -232,10 +248,10 @@ setMethod("kinship", "Pedigree", } } } else if (chrtype == "x") { - sex <- as.numeric(ped(tped)$sex) # 1=female, 2=male + sex <- as.numeric(sex(ped(tped))) # 1=female, 2=male if (n == 1) { kmat <- matrix(sex / 2, 1, 1, - dimnames = list(ped(tped)$id, ped(tped)$id) + dimnames = list(id(ped(tped)), id(ped(tped))) ) } else { ## 1 for males, 1/2 for females @@ -265,7 +281,7 @@ setMethod("kinship", "Pedigree", } if (n > 1) { kmat <- kmat[seq_len(n), seq_len(n)] - dimnames(kmat) <- list(ped(tped)$id, ped(tped)$id) + dimnames(kmat) <- list(id(ped(tped)), id(ped(tped))) } kmat }, silent = TRUE) @@ -275,7 +291,7 @@ setMethod("kinship", "Pedigree", matlist[[i_fam]] <- temp } ## deprecated in Matrix: as(forceSymmetric(temp), 'dsCMatrix') - idlist[[i_fam]] <- ped(tped)$id + idlist[[i_fam]] <- id(ped(tped)) } if (length(famlist) == 1) { as(matlist[[1]], diff --git a/tests/testthat/test-kinship.R b/tests/testthat/test-kinship.R index 998abe12..cf9866aa 100644 --- a/tests/testthat/test-kinship.R +++ b/tests/testthat/test-kinship.R @@ -39,19 +39,19 @@ test_that("kinship works", { ## Test with no special relationship kmat_char <- with(twindat, kinship(id, dadid, momid)) - tped <- Pedigree(twindat) + tped <- Pedigree(twindat, missid = "0") kmat_ped <- kinship(tped) expect_equal(kmat_char, kmat_ped) ## Test with no special relationship with chr_type to X kmat_char <- with(twindat, kinship(id, dadid, momid, sex, chrtype = "X")) - tped <- Pedigree(twindat) + tped <- Pedigree(twindat, missid = "0") kmat_ped <- kinship(tped, chrtype = "X") expect_equal(kmat_char, kmat_ped) ## Test with monozygotic relationship - tped <- Pedigree(twindat, relate) + tped <- Pedigree(twindat, relate, missid = "0") kmat <- kinship(tped) ## should show kinship coeff of 0.5 for where MZ twins are @@ -71,7 +71,7 @@ test_that("kinship works", { relate$id2 <- match(relate$id2, indx) - 1 # Build the Pedigree and kinship - tped <- Pedigree(twindat, relate) + tped <- Pedigree(twindat, relate, missid = "0") kmat <- kinship(tped) truth <- matrix( From fc41cf7118c75bc8198c3ebf2d6e7bd2a2dc18ca Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Thu, 2 Nov 2023 17:03:17 +0100 Subject: [PATCH 052/111] Add upd_famid_id --- R/AllAccessors.R | 55 +++++++++++++- R/make_famid.R | 123 ++++++++++++++++++++++++++++--- tests/testthat/test-make_famid.R | 51 ++++++++++--- 3 files changed, 206 insertions(+), 23 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index db90774c..f06565da 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -53,6 +53,44 @@ setMethod("famid", signature(x = "Rel"), function(x) { setMethod("famid", signature(x = "Pedigree"), function(x) { famid(ped(x)) }) +setGeneric("famid<-", function(x, value) { + standardGeneric("famid<-") +}) +setMethod("famid<-", + signature(x = "Ped", value = "character_OR_integer"), + function(x, value) { + if (! is.character(value) && ! is.integer(value)) { + stop("famid must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for famid should be: ", + "equal to the length of the Ped object" + ) + } + x@famid <- as.character(value) + validObject(x) + x + } +) + +setMethod("famid<-", + signature(x = "Rel", value = "character_OR_integer"), + function(x, value) { + if (! is.character(value) && ! is.integer(value)) { + stop("famid must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for famid should be: ", + "equal to the length of the Ped object" + ) + } + x@famid <- as.character(value) + validObject(x) + x + } +) #' Id getter of Ped object #' @@ -291,6 +329,7 @@ setMethod("id2", signature(x = "Rel"), function(x) { }) #### S4 Pedigree Accessors #### +##### S4 ped Accessors ##### #' @title Pedigree ped accessors #' @param object A Pedigree object. #' @param slot A slot in the Ped object of the Pedigree. @@ -358,7 +397,7 @@ setMethod( } ) -#### S4 metadata Accessors #### +##### S4 mcols Accessors ##### #' @title Pedigree metadata accessors #' @param object A Pedigree object. #' @return The metadata present in the Pedigree object. @@ -383,7 +422,7 @@ setMethod( } ) -#### S4 rel Accessors #### +##### S4 rel Accessors ##### #' @description Pedigree rel accessors #' @param object A Pedigree object. @@ -435,7 +474,17 @@ setMethod( } ) -#### S4 scales Accessors #### +setMethod( + "rel<-", + signature(object = "Pedigree", slot = "missing", value = "Rel"), + function(object, slot, value) { + object@rel <- value + validObject(object) + object + } +) + +##### S4 scales Accessors #### #' @description Pedigree scales accessors #' @param object A Pedigree object. #' @return The slot `scales` present in the Pedigree object. diff --git a/R/make_famid.R b/R/make_famid.R index a679bf7e..1af2a2c0 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -83,9 +83,9 @@ setMethod("make_famid", "character", if (any(xx == 1)) { singles <- as.integer(names(xx[xx == 1])) # famid of singletons famid[!is.na(match(famid, singles))] <- 0 # set singletons to 0 - match(famid, sort(unique(famid))) - 1 # renumber + as.integer(match(famid, sort(unique(famid))) - 1) # renumber } else { - match(famid, sort(unique(famid))) + as.integer(match(famid, sort(unique(famid)))) } # renumber, no zeros } else { stop("Bug in routine: seem to have found an infinite loop") @@ -100,14 +100,13 @@ setMethod("make_famid", "character", #' @include AllClass.R setMethod("make_famid", "Pedigree", function(obj) { - ped <- obj famid <- make_famid( - ped(ped, "id"), ped(ped, "dadid"), ped(ped, "momid") + id(ped(obj)), dadid(ped(obj)), momid(ped(obj)) ) - ped(obj, "famid") <- famid + famid(ped(obj)) <- famid - fam_id1 <- famid[match(rel(ped, "id1"), ped(ped, "id"))] - fam_id2 <- famid[match(rel(ped, "id2"), ped(ped, "id"))] + fam_id1 <- famid[match(id1(rel(obj)), id(ped(obj)))] + fam_id2 <- famid[match(id2(rel(obj)), id(ped(obj)))] if (any(fam_id1 != fam_id2)) { stop("The two individuals in the relationship", @@ -115,8 +114,112 @@ setMethod("make_famid", "Pedigree", ) } - rel(ped, "famid") <- fam_id1 - validObject(ped) - ped + famid(rel(obj)) <- fam_id1 + validObject(obj) + obj + } +) + +#' Update family prefix in individuals id +#' +#' @param obj A character vector of individual ids +#' @param famid A numeric vector of family ids +#' +#' @return A character vector of individual ids with family prefix +#' +#' @export +setGeneric("upd_famid_id", + function(obj, famid, ...) standardGeneric("upd_famid_id") +) + +setMethod("upd_famid_id", "character", + function(obj, famid, missid = NA_character_) { + id <- obj[!obj %in% missid] + famid <- famid[!obj %in% missid] + if (length(id) != length(famid)) { + stop("id and famid must have the same length") + } + if (any(is.na(famid))) { + stop("famid cannot contain NA") + } + if (! is.character(id)) { + stop("id must be a character vector") + } + id[!str_detect(id, "_")] <- paste0("_", id[!str_detect(id, "_")]) + ids <- str_split_fixed(id, "_", 2) + ids[, 1] <- as.character(famid) + new_ids <- paste(ids[, 1], ids[, 2], sep = "_") + obj[!obj %in% missid] <- new_ids + obj + } +) + +setMethod("upd_famid_id", + signature(obj = "Ped", famid = "character_OR_integer"), + function(obj, famid) { + obj@id <- upd_famid_id(id(obj), famid) + obj@dadid <- upd_famid_id(dadid(obj), famid) + obj@momid <- upd_famid_id(momid(obj), famid) + validObject(obj) + obj + } +) + +setMethod("upd_famid_id", + signature(obj = "Ped", famid = "missing"), + function(obj) { + obj@id <- upd_famid_id(id(obj), famid(obj)) + obj@dadid <- upd_famid_id(dadid(obj), famid(obj)) + obj@momid <- upd_famid_id(momid(obj), famid(obj)) + validObject(obj) + obj + } +) + +setMethod("upd_famid_id", + signature(obj = "Rel", famid = "character_OR_integer"), + function(obj, famid) { + obj@id1 <- upd_famid_id(id1(obj), famid) + obj@id2 <- upd_famid_id(id2(obj), famid) + validObject(obj) + obj + } +) + +setMethod("upd_famid_id", + signature(obj = "Rel", famid = "missing"), + function(obj) { + obj@id1 <- upd_famid_id(id1(obj), famid(obj)) + obj@id2 <- upd_famid_id(id2(obj), famid(obj)) + validObject(obj) + obj + } +) + +setMethod("upd_famid_id", + signature(obj = "Pedigree", famid = "character_OR_integer"), + function(obj, famid) { + old_id <- id(ped(obj)) + obj@ped <- upd_famid_id(ped(obj), famid) + fid1 <- famid[match(id1(rel(obj)), old_id)] + fid2 <- famid[match(id2(rel(obj)), old_id)] + if (any(fid1 != fid2)) { + stop("The two individuals in the relationship", + "are not in the same family" + ) + } + obj@rel <- upd_famid_id(rel(obj), fid1) + validObject(obj) + obj + } +) + +setMethod("upd_famid_id", + signature(obj = "Pedigree", famid = "missing"), + function(obj) { + obj@ped <- upd_famid_id(ped(obj)) + obj@rel <- upd_famid_id(rel(obj)) + validObject(obj) + obj } ) \ No newline at end of file diff --git a/tests/testthat/test-make_famid.R b/tests/testthat/test-make_famid.R index 729fbcc7..90b3a7c1 100644 --- a/tests/testthat/test-make_famid.R +++ b/tests/testthat/test-make_famid.R @@ -1,12 +1,3 @@ -test_that("make_famid works", { - id <- as.character(1:20) - mom <- as.character(c(0, 0, 0, 2, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 2, 7, 7, 11, 14)) - dad <- as.character(c(0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 3, 3, 0, 3, 0, 3, 8, 8, 10, 13)) - famid <- c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1) - temp <- make_famid(id, mom, dad) - expect_equal(temp, famid) -}) - rel_df <- c( 213, 214, 1, 3, 210, 211, 2, 3, @@ -18,6 +9,46 @@ rel_df <- matrix(rel_df, ncol = 4, byrow = TRUE) dimnames(rel_df) <- list(NULL, c("id1", "id2", "code", "famid")) rel_df <- data.frame(rel_df) +test_that("upd_famid_id works", { + id <- c("A_1", "B_", "_3", "4", "E_5_A", "NA", NA_character_) + famid <- c(1, 2, 3, 4, 5, 6, 7) + expect_equal( + upd_famid_id(id, famid), + c("1_1", "2_", "3_3", "4_4", "5_5_A", "6_NA", NA_character_) + ) + + data("sampleped") + + pedi <- Pedigree(sampleped[-1], rel_df[c(1:3)]) + pedi <- make_famid(pedi) + ids_all <- paste(famid(pedi), c(101:141, 201:214), sep = "_") + expect_equal( + id(upd_famid_id(ped(pedi), famid(pedi))), + ids_all + ) + expect_equal( + id(upd_famid_id(ped(pedi))), + ids_all + ) + expect_equal( + id(ped(upd_famid_id(pedi, famid(pedi)))), + ids_all + ) + expect_equal( + id1(rel(upd_famid_id(pedi))), + c("2_213", "2_210", "1_140", "1_133") + ) +}) + +test_that("make_famid works", { + id <- as.character(1:20) + mom <- as.character(c(0, 0, 0, 2, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 2, 7, 7, 11, 14)) + dad <- as.character(c(0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 3, 3, 0, 3, 0, 3, 8, 8, 10, 13)) + famid <- c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1) + temp <- make_famid(id, mom, dad) + expect_equal(temp, famid) +}) + test_that("make_famid works with Pedigree", { ## Simple case with no family id data("sampleped") @@ -28,7 +59,7 @@ test_that("make_famid works with Pedigree", { fam <- sampleped$famid fam[sampleped$id == "113"] <- 0 # singleton id <- paste(fam, c(101:141, 201:214), sep = "_") - expect_equal(ped(ped, "id"), id) + expect_equal(id(ped(ped)), id) expect_equal(rel(ped, "id1"), c("2_213", "2_210", "1_140", "1_133")) ## Updating already present family id From 04f78d9a2afc2bf9a8556119911593fe14c0f095 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 11:59:59 +0100 Subject: [PATCH 053/111] Print only unque reference when validating --- R/AllValidity.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/AllValidity.R b/R/AllValidity.R index 986d5f66..17fbc039 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -84,7 +84,7 @@ check_values <- function(val, ref, name = NULL, present = TRUE) { if (any(val_abs)) { paste0( val_name, paste0max(unique(val[val_abs])), should, - paste0max(ref) + paste0max(unique(ref)) ) } } From d995a088ddbd2ac75e60236f06ae9c8d808a56bf Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 12:01:01 +0100 Subject: [PATCH 054/111] Make test works for kindepth and kinship --- tests/testthat/test-kindepth.R | 4 ++-- tests/testthat/test-kinship.R | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/testthat/test-kindepth.R b/tests/testthat/test-kindepth.R index 62b0ecd3..1a6c18f3 100644 --- a/tests/testthat/test-kindepth.R +++ b/tests/testthat/test-kindepth.R @@ -1,4 +1,4 @@ -test_that("fix_parents_df works with sex errors and with family", { +test_that("Kindepth works", { data("sampleped") datped2 <- sampleped[sampleped$famid %in% 2, ] ## this gets an error @@ -20,4 +20,4 @@ test_that("fix_parents_df works with sex errors and with family", { ), missid = "0") expect_equal(sum(kindepth(ped)), 33147) expect_equal(sum(kindepth(ped, align = TRUE)), 39087) -}) \ No newline at end of file +}) diff --git a/tests/testthat/test-kinship.R b/tests/testthat/test-kinship.R index cf9866aa..7eb635cb 100644 --- a/tests/testthat/test-kinship.R +++ b/tests/testthat/test-kinship.R @@ -103,7 +103,7 @@ test_that("Kinship Claus Ekstrom 09/2012", { ) relation <- data.frame(id1 = c(3), id2 = c(4), famid = c(1), code = c(1)) - ped <- Pedigree(mydata, relation) + ped <- Pedigree(mydata, relation, missid = "0") kmat <- kinship(ped) expect_true(all(kmat[3:4, 3:4] == 0.5)) @@ -130,14 +130,14 @@ test_that("kinship works with X chromosoms", { names(ped2df) <- c("fam", "id", "dadid", "momid", "sex") rel_df <- as.data.frame(matrix(c(8, 9, 1), ncol = 3)) names(rel_df) <- c("id1", "id2", "code") - ped2 <- Pedigree(ped2df, rel_df) + ped2 <- Pedigree(ped2df, rel_df, missid = "0") ## regular kinship matrix expect_snapshot(kinship(ped2)) expect_snapshot(kinship(ped2, chr = "X")) ped3 <- ped2 - ped3$ped$sex[10] <- "unknown" + sex(ped(ped3))[10] <- "unknown" ## regular again, should be same as above expect_equal(kinship(ped2), kinship(ped3)) @@ -167,7 +167,7 @@ test_that("Kinship with 2 different family", { ## testing when only one subject in a family peddf <- rbind(ped2df, c(2, 1, 0, 0, 1)) - peds <- Pedigree(peddf) + peds <- Pedigree(peddf, missid = "0") kinfam <- kinship(peds) expect_true(all(kinfam["2_1", 1:10] == 0)) @@ -176,7 +176,7 @@ test_that("Kinship with 2 different family", { c(2, 2, 0, 0, 2), c(2, 3, 1, 2, 1) ) - peds <- Pedigree(peddf) + peds <- Pedigree(peddf, missid = "0") kin2fam <- kinship(peds) expect_true(all(kin2fam[11:13, 1:10] == 0)) }) From 44b7d764a0d53338da68ea8204f490bf947dac2d Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 12:01:14 +0100 Subject: [PATCH 055/111] Make famid and family check works --- R/family_check.R | 11 ++++++++++- R/make_famid.R | 9 +++++---- tests/testthat/test-make_famid.R | 17 +++++++++++------ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/R/family_check.R b/R/family_check.R index ff541693..19781460 100644 --- a/R/family_check.R +++ b/R/family_check.R @@ -125,6 +125,15 @@ setMethod("family_check", "character", #' @aliases family_check,Pedigree setMethod("family_check", "Pedigree", function(obj) { - family_check(obj$ped$id, obj$ped$dadid, obj$ped$momid, obj$ped$famid) + family_check(ped(obj)) + } +) + +#' @rdname family_check +#' @docType methods +#' @aliases family_check,Ped +setMethod("family_check", "Ped", + function(obj) { + family_check(id(obj), dadid(obj), momid(obj), famid(obj)) } ) diff --git a/R/make_famid.R b/R/make_famid.R index 1af2a2c0..cc4d0c7e 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -83,9 +83,9 @@ setMethod("make_famid", "character", if (any(xx == 1)) { singles <- as.integer(names(xx[xx == 1])) # famid of singletons famid[!is.na(match(famid, singles))] <- 0 # set singletons to 0 - as.integer(match(famid, sort(unique(famid))) - 1) # renumber + as.character(match(famid, sort(unique(famid))) - 1) # renumber } else { - as.integer(match(famid, sort(unique(famid)))) + as.character(match(famid, sort(unique(famid)))) } # renumber, no zeros } else { stop("Bug in routine: seem to have found an infinite loop") @@ -103,7 +103,7 @@ setMethod("make_famid", "Pedigree", famid <- make_famid( id(ped(obj)), dadid(ped(obj)), momid(ped(obj)) ) - famid(ped(obj)) <- famid + obj@ped@famid <- famid fam_id1 <- famid[match(id1(rel(obj)), id(ped(obj)))] fam_id2 <- famid[match(id2(rel(obj)), id(ped(obj)))] @@ -114,7 +114,8 @@ setMethod("make_famid", "Pedigree", ) } - famid(rel(obj)) <- fam_id1 + obj@rel@famid <- fam_id1 + obj <- upd_famid_id(obj) validObject(obj) obj } diff --git a/tests/testthat/test-make_famid.R b/tests/testthat/test-make_famid.R index 90b3a7c1..509577ae 100644 --- a/tests/testthat/test-make_famid.R +++ b/tests/testthat/test-make_famid.R @@ -42,8 +42,12 @@ test_that("upd_famid_id works", { test_that("make_famid works", { id <- as.character(1:20) - mom <- as.character(c(0, 0, 0, 2, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 2, 7, 7, 11, 14)) - dad <- as.character(c(0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 3, 3, 0, 3, 0, 3, 8, 8, 10, 13)) + mom <- as.character(c( + 0, 0, 0, 2, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 2, 7, 7, 11, 14 + )) + dad <- as.character(c( + 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 3, 3, 0, 3, 0, 3, 8, 8, 10, 13 + )) famid <- c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1) temp <- make_famid(id, mom, dad) expect_equal(temp, famid) @@ -60,15 +64,17 @@ test_that("make_famid works with Pedigree", { fam[sampleped$id == "113"] <- 0 # singleton id <- paste(fam, c(101:141, 201:214), sep = "_") expect_equal(id(ped(ped)), id) - expect_equal(rel(ped, "id1"), c("2_213", "2_210", "1_140", "1_133")) + expect_equal(id1(rel(ped)), c("2_213", "2_210", "1_140", "1_133")) ## Updating already present family id data("sampleped") sampleped$famid[sampleped$famid == "2"] <- 3 + rel_df[c(1:3)] ped <- Pedigree(sampleped, rel_df) + ped ped <- make_famid(ped) - expect_equal(ped(ped, "id"), id) - expect_equal(rel(ped, "id1"), c("2_213", "2_210", "1_140", "1_133")) + expect_equal(id(ped(ped)), id) + expect_equal(id1(rel(ped)), c("2_213", "2_210", "1_140", "1_133")) }) test_that("Family check works", { @@ -111,4 +117,3 @@ test_that("Family check works", { ) }) - From eca10f3d0b02464d40f3c8003f9f30c4da5a331f Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 13:05:40 +0100 Subject: [PATCH 056/111] Make num_child, min_dist_inf works Add Ped accessors avail, id_inf, kin --- R/AllAccessors.R | 137 +++++++++++++++++- R/AllClass.R | 18 ++- R/AllConstructor.R | 18 ++- R/AllGeneric.R | 2 +- R/generate_aff_inds.R | 2 +- R/is_informative.R | 4 +- R/min_dist_inf.R | 37 ++++- R/norm_data.R | 2 +- R/num_child.R | 10 +- ...test-max_kin_inf.R => test-min_dist_inf.R} | 6 +- tests/testthat/test-norm_data.R | 10 +- tests/testthat/test-num_child.R | 9 +- 12 files changed, 209 insertions(+), 46 deletions(-) rename tests/testthat/{test-max_kin_inf.R => test-min_dist_inf.R} (90%) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index f06565da..553b0e1c 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -6,6 +6,7 @@ NULL #### S4 Ped Accessors #### +##### Mcols Accessors ##### #' Metadata setters of Ped object from a list #' #' @param x A Ped object. @@ -32,6 +33,7 @@ setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, val x }) +##### Famid Accessors ##### #' Famid getter of Ped object #' #' @param x A Ped object. @@ -73,7 +75,6 @@ setMethod("famid<-", x } ) - setMethod("famid<-", signature(x = "Rel", value = "character_OR_integer"), function(x, value) { @@ -92,6 +93,7 @@ setMethod("famid<-", } ) +##### Id Accessors ##### #' Id getter of Ped object #' #' @param x A Ped object. @@ -128,6 +130,7 @@ setMethod("id<-", } ) +##### Dadid Accessors ##### #' Dadid getter of Ped object #' #' @param x A Ped object. @@ -164,6 +167,7 @@ setMethod("dadid<-", } ) +##### Momid Accessors ##### #' Momid getter of Ped object #' #' @param x A Ped object. @@ -200,6 +204,7 @@ setMethod("momid<-", } ) +##### Sex Accessors ##### #' Sex getter of Ped object #' #' @param x A Ped object. @@ -240,6 +245,7 @@ setMethod("sex<-", } ) +##### Affected Accessors ##### #' Affected getter of Ped object #' #' @param x A Ped object. @@ -285,6 +291,131 @@ setMethod("affected<-", } ) +##### Avail Accessors ##### +#' Avail getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A numeric vector with the avail of each individual. +#' +#' @rdname Ped +#' @aliases avail,Ped-method +#' @export +setGeneric("avail", function(x) { + standardGeneric("avail") +}) +setMethod("avail", signature(x = "Ped"), function(x) { + x@avail +}) +setGeneric("avail<-", function(x, value) { + standardGeneric("avail<-") +}) +setMethod("avail<-", + signature(x = "Ped", value = "ANY"), + function(x, value) { + if ( + ! is.character(value) && + ! is.integer(value) && + ! is.logical(value) && + ! is.factor(value) + ) { + stop("avail must be a character or integer vector") + } + if (length(value) != length(x)) { + if (length(value) == 1) { + value <- rep(value, length(x)) + } else { + stop( + "The length of the new values for avail should be: ", + "equal to the length of the Ped object" + ) + } + } + x@avail <- vect_to_binary(value) + validObject(x) + x + } +) + +##### Kin Accessors ##### +#' Kin getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A numeric vector with the minimum kinship distance +#' value of each individual towards the informative +#' individuals. +#' +#' @rdname Ped +#' @aliases kin,Ped-method +#' @export +setGeneric("kin", function(x) { + standardGeneric("kin") +}) +setMethod("kin", signature(x = "Ped"), function(x) { + x@kin +}) +setGeneric("kin<-", function(x, value) { + standardGeneric("kin<-") +}) +setMethod("kin<-", + signature(x = "Ped", value = "numeric"), + function(x, value) { + if (length(value) != length(x)) { + if (length(value) == 1) { + value <- rep(value, length(x)) + } else { + stop( + "The length of the new values for kin should be: ", + "equal to the length of the Ped object" + ) + } + } + x@kin <- value + validObject(x) + x + } +) + +##### id_inf Accessors ##### +#' id_inf getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A numeric vector with the saying if the individual +#' is informative or not. +#' +#' @rdname Ped +#' @aliases id_inf,Ped-method +#' @export +setGeneric("id_inf", function(x) { + standardGeneric("id_inf") +}) +setMethod("id_inf", signature(x = "Ped"), function(x) { + x@id_inf +}) +setGeneric("id_inf<-", function(x, value) { + standardGeneric("id_inf<-") +}) +setMethod("id_inf<-", + signature(x = "Ped", value = "numeric"), + function(x, value) { + if (length(value) != length(x)) { + if (length(value) == 1) { + value <- rep(value, length(x)) + } else { + stop( + "The length of the new values for id_inf should be: ", + "equal to the length of the Ped object" + ) + } + } + x@id_inf <- value + validObject(x) + x + } +) + #### S4 Rel Accessors #### #' Code accessor of Rel object #' @@ -369,8 +500,8 @@ setMethod( ped_slots <- c( "id", "dadid", "momid", "sex", "famid", "steril", "status", "avail", "affected", - "kin", "useful", "num_child_total", - "num_child_direct", "num_child_indirect" + "kin", "useful", "id_inf", + "num_child_tot", "num_child_dir", "num_child_ind" ) if (! slot %in% ped_slots) { stop("slot selected: ", slot, " is not a Ped slot") diff --git a/R/AllClass.R b/R/AllClass.R index 6648ef83..5af1efb2 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -99,11 +99,11 @@ setValidity("Scales", is_valid_scales) #' individuals (i.e. `0` = not useful, `1` = useful). #' @slot kin A numeric vector with minimal kinship value between the #' individuals and the useful individuals. -#' @slot num_child_total A numeric vector with the total number of children +#' @slot num_child_tot A numeric vector with the total number of children #' of the individuals. -#' @slot num_child_direct A numeric vector with the number of children +#' @slot num_child_dir A numeric vector with the number of children #' of the individuals. -#' @slot num_child_indirect A numeric vector with the number of children +#' @slot num_child_ind A numeric vector with the number of children #' of the individuals. #' #' @return A Ped object. @@ -124,9 +124,12 @@ setClass("Ped", status = "numeric", avail = "numeric", affected = "numeric", - num_child_total = "numeric", - num_child_direct = "numeric", - num_child_indirect = "numeric" + useful = "numeric", + kin = "numeric", + id_inf = "numeric", + num_child_tot = "numeric", + num_child_dir = "numeric", + num_child_ind = "numeric" ) ) @@ -136,7 +139,8 @@ setMethod("parallel_slot_names", "Ped", c( "id", "momid", "dadid", "sex", "famid", "steril", "status", "avail", "affected", - "num_child_total", "num_child_direct", "num_child_indirect", + "useful", "kin", "id_inf", + "num_child_tot", "num_child_dir", "num_child_ind", callNextMethod() ) } diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 0477bba5..725e9e8b 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -55,9 +55,12 @@ setGeneric("Ped", signature = "obj", function(obj, ...) { setMethod("Ped", "data.frame", function(obj, cols_used_init = FALSE, cols_used_del = FALSE) { col_need <- c("id", "sex", "dadid", "momid") - col_to_use <- c("famid", "steril", "status", "avail", "affected") + col_to_use <- c( + "famid", "steril", "status", "avail", "affected" + ) col_used <- c( - "num_child_total", "num_child_direct", "num_child_indirect", + "kin", "id_inf", "useful", + "num_child_tot", "num_child_dir", "num_child_ind", "elementMetadata" ) df <- check_columns( @@ -108,6 +111,10 @@ setMethod("Ped", "character_OR_integer", avail <- na_to_length(avail, id, NA_real_) affected <- na_to_length(affected, id, NA_real_) + useful <- na_to_length(NA, id, NA_real_) + kin <- na_to_length(NA, id, NA_real_) + id_inf <- na_to_length(NA, id, NA_real_) + df_child <- num_child(id, dadid, momid, rel_df = NULL) new( @@ -115,9 +122,10 @@ setMethod("Ped", "character_OR_integer", id = id, dadid = dadid, momid = momid, famid = famid, sex = sex, steril = steril, status = status, avail = avail, affected = affected, - num_child_total = df_child$num_child_tot, - num_child_direct = df_child$num_child_dir, - num_child_indirect = df_child$num_child_ind + useful = useful, kin = kin, id_inf = id_inf, + num_child_tot = df_child$num_child_tot, + num_child_dir = df_child$num_child_dir, + num_child_ind = df_child$num_child_ind ) } ) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index cb1bfb30..cfb61e9a 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -118,7 +118,7 @@ setMethod("subset", "Ped", function(x, i, del_parents = FALSE) { stop("i must be a character, an integer or a logical vector") } col_computed <- c( - "num_child_total", "num_child_direct", "num_child_indirect" + "num_child_tot", "num_child_dir", "num_child_ind" ) ped_df <- as.data.frame(x)[i, ] ped_df <- ped_df[, ! colnames(ped_df) %in% col_computed] diff --git a/R/generate_aff_inds.R b/R/generate_aff_inds.R index 47a6fbde..3edd7900 100644 --- a/R/generate_aff_inds.R +++ b/R/generate_aff_inds.R @@ -82,4 +82,4 @@ generate_aff_inds <- function(values, mods_aff = NULL, affected <- as.logical(revalue(labels, aff_to_use, warn_missing = FALSE)) as.data.frame(list(mods = mods, labels = labels, affected = affected)) } -TRUE + diff --git a/R/is_informative.R b/R/is_informative.R index f211a3f6..faa49342 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -124,10 +124,10 @@ setMethod("is_informative", "Pedigree", function( informative, missid ) - if (!reset) { + if (!reset & any(!is.na(id_inf(ped(obj))))) { check_columns(ped_df, NULL, "id_inf", NULL) } - mcols(obj)$id_inf <- ifelse(ped_df$id %in% id_inf, 1, 0) + id_inf(ped(obj)) <- vect_to_binary(ifelse(ped_df$id %in% id_inf, 1, 0)) obj }) diff --git a/R/min_dist_inf.R b/R/min_dist_inf.R index 6c9a5e23..c80bb11b 100644 --- a/R/min_dist_inf.R +++ b/R/min_dist_inf.R @@ -79,24 +79,45 @@ setMethod("min_dist_inf", "character", function(obj, #' @docType methods #' @param reset If TRUE, the `kin` and if `id_inf` columns is reset setMethod("min_dist_inf", "Pedigree", function(obj, - col_aff = NULL, informative = "AvAf", missid = NA_character_, reset = FALSE, ... + col_aff = NULL, informative = "AvAf", + missid = NA_character_, reset = FALSE, ... ) { - ped <- is_informative(obj, col_aff, informative = informative, + obj_aff <- is_informative(obj, col_aff, informative = informative, missid, reset ) + new_ped <- min_dist_inf( + ped(obj_aff), col_aff, informative, missid, reset, ... + ) + + ped(obj_aff) <- new_ped + validObject(obj_aff) + obj_aff +}) + +#' @export +#' @rdname min_dist_inf +#' @aliases min_dist_inf,Ped +#' @docType methods +#' @param reset If TRUE, the `kin` and if `id_inf` columns is reset +setMethod("min_dist_inf", "Ped", function(obj, + col_aff = NULL, informative = "AvAf", + missid = NA_character_, reset = FALSE, ... +) { + kin <- min_dist_inf( - ped(ped, "id"), ped(ped, "dadid"), ped(ped, "momid"), ped(ped, "sex"), - ped(ped, "avail"), deriv(ped, "affected"), informative + id(obj), dadid(obj), momid(obj), sex(obj), + avail(obj), affected(obj), informative ) - if (!reset & deriv(ped, "kin") != NULL) { + if (!reset & any(!is.na(kin(obj)))) { stop( - "The kin column already exists in the Pedigree object", + "The kin slot already has values in the Ped object", " and reset is set to FALSE" ) } - deriv(ped, "kin") <- kin - ped + kin(obj) <- kin + validObject(obj) + obj }) diff --git a/R/norm_data.R b/R/norm_data.R index 95d2f76a..9fb065cf 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -89,7 +89,7 @@ norm_ped <- function( cols_need <- c("indId", "fatherId", "motherId", "gender") cols_used <- c( "sex", "steril", "status", "avail", "id", "dadid", "momid", "famid", - "error", "affected", "kin", "useful" + "error", "affected" ) cols_to_use <- c( "available", "family", "sterilisation", "vitalstatus", "affection" diff --git a/R/num_child.R b/R/num_child.R index 4cc7fdef..0f47db06 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -153,7 +153,7 @@ setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, #' the `num_child_dir` columns are reset. setMethod("num_child", "Pedigree", function(obj, reset = FALSE) { df <- num_child(id(ped(obj)), dadid(ped(obj)), momid(ped(obj)), - rel_df = rel(obj) + rel_df = as.data.frame(rel(obj)) ) if (!reset) { @@ -163,10 +163,10 @@ setMethod("num_child", "Pedigree", function(obj, reset = FALSE) { ) } - ped(obj) <- merge(as.data.frame(ped(obj)), - df[c("id", "num_child_tot", "num_child_ind", "num_child_dir")], - by = "id", sort = FALSE - ) + obj@ped@num_child_tot <- df$num_child_tot + obj@ped@num_child_ind <- df$num_child_ind + obj@ped@num_child_dir <- df$num_child_dir + validObject(obj) obj }) diff --git a/tests/testthat/test-max_kin_inf.R b/tests/testthat/test-min_dist_inf.R similarity index 90% rename from tests/testthat/test-max_kin_inf.R rename to tests/testthat/test-min_dist_inf.R index 1d4798ee..fa11d371 100644 --- a/tests/testthat/test-max_kin_inf.R +++ b/tests/testthat/test-min_dist_inf.R @@ -6,7 +6,6 @@ test_that("min_dist_inf works", { sampleped[c("id", "dadid", "momid")] <- as.data.frame(lapply( sampleped[c("id", "dadid", "momid")], as.character ), stringsAsFactors = FALSE) - summary(sampleped) res <- with(sampleped, min_dist_inf(id, informative = "AvAf", dadid, momid, sex, avail, affected @@ -28,9 +27,8 @@ test_that("min_dist_inf works with Pedigree", { ped <- generate_colors(ped, col_aff = "affection", threshold = 0.5, sup_thres_aff = TRUE ) - + expect_equal(sum(affected(ped(ped)), na.rm = TRUE), 23) mxkin <- min_dist_inf(ped, col_aff = "affection_aff", informative = "Av") expect_s4_class(mxkin, "Pedigree") - expect_equal(sum(mxkin$ped$kin, na.rm = TRUE), 90) + expect_equal(sum(kin(ped(mxkin)), na.rm = TRUE), 90) }) -TRUE diff --git a/tests/testthat/test-norm_data.R b/tests/testthat/test-norm_data.R index aea06719..38dd50b2 100644 --- a/tests/testthat/test-norm_data.R +++ b/tests/testthat/test-norm_data.R @@ -20,7 +20,7 @@ test_that("Norm ped", { ped_df <- suppressWarnings(norm_ped( ped_df, na_strings = c("None", "NA") )) - expect_equal(dim(ped_df), c(10, 22)) + expect_equal(dim(ped_df), c(10, 21)) expect_snapshot(ped_df) expect_equal(sum(is.na(ped_df$error)), 4) }) @@ -39,11 +39,11 @@ test_that("Norm rel", { ) rel_df <- matrix(rel_df, ncol = 4, byrow = TRUE) - dimnames(rel_df) <- list(NULL, c("indId1", "indId2", "code", "family")) + dimnames(rel_df) <- list(NULL, c("id1", "id2", "code", "family")) rel_df <- data.frame(rel_df) rel_df <- norm_rel(rel_df) - expect_equal(dim(rel_df), c(9, 7)) + expect_equal(dim(rel_df), c(9, 5)) expect_snapshot(rel_df) expect_equal(sum(is.na(rel_df$error)), 6) }) @@ -58,11 +58,11 @@ test_that("prefix_famid works", { family_id <- "1" b <- prefix_famid(family_id, ind_id, missid) - expect_equal(b, c("1_A", "1_B", "0", NA)) + expect_equal(b, c("1_A", "1_B", "1_0", NA)) family_id <- c("1", "2", "0", NA) c <- prefix_famid(family_id, ind_id, missid) - expect_equal(c, c("1_A", "2_B", "0", NA)) + expect_equal(c, c("1_A", "2_B", "0_0", NA)) family_id <- c("1", "2", "0") expect_error(prefix_famid(family_id, ind_id, missid)) diff --git a/tests/testthat/test-num_child.R b/tests/testthat/test-num_child.R index f8518400..39e91eed 100644 --- a/tests/testthat/test-num_child.R +++ b/tests/testthat/test-num_child.R @@ -41,8 +41,9 @@ test_that("Num child", { c(1, 1, 0, 0, 0, 0, 1, 4, 4, 0, 0, 0, 0, 0) ) - ped <- Pedigree(df, relation) - ped <- num_child(ped) - expect_equal(ped(ped)[colnames(df_num)], df_num) + ped <- Pedigree(df, relation, missid = "0") + ped <- num_child(ped, reset = TRUE) + cols <- c("num_child_dir", "num_child_tot", "num_child_ind") + rownames(df_num) <- df_num$id + expect_equal(as.data.frame(ped(ped))[cols], df_num[cols]) }) -TRUE From 340736da1a0b03202c38189a0dec933c22a2675f Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 13:06:26 +0100 Subject: [PATCH 057/111] Affected slot is set as last usage of generate colors --- R/generate_colors.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/generate_colors.R b/R/generate_colors.R index 78f2b349..e1de2bc8 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -138,7 +138,7 @@ generate_fill <- function( density = rep(NA_integer_, n), angle = rep(NA_integer_, n) ) )) - list(mods = mods, fill_scale = scale) + list(mods = mods, affected = affected, fill_scale = scale) } #' Process the colors based on affection and availability @@ -351,6 +351,7 @@ setMethod("generate_colors", "Pedigree", ) mcols(obj)[new_col] <- lst_sc$mods + affected(ped(obj)) <- lst_sc$affected if (nrow(lst_sc$fill_scale) > 0) { lst_sc$fill_scale$column_mods <- new_col lst_sc$fill_scale$column_values <- col_aff From 0f43c1a2b3a0b08cf7272b772c712e3440f35232 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 16:30:02 +0100 Subject: [PATCH 058/111] Make shrinking works --- DESCRIPTION | 1 - NAMESPACE | 1 - R/AllAccessors.R | 6 +- R/AllConstructor.R | 6 +- R/AllGeneric.R | 23 ++++- R/find_avail_affected.R | 108 +++++++++++--------- R/find_avail_noninform.R | 44 ++++---- R/find_unavailable.R | 92 +++++++++-------- R/shrink.R | 191 ++++++++++++++++++++--------------- R/trim.R | 29 ------ R/utils.R | 30 ++++-- tests/testthat/test-shrink.R | 37 +++---- 12 files changed, 306 insertions(+), 262 deletions(-) delete mode 100644 R/trim.R diff --git a/DESCRIPTION b/DESCRIPTION index c059c138..f8572a51 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -90,7 +90,6 @@ Collate: 'plot_fromdf.R' 'plot.R' 'shrink.R' - 'trim.R' 'unrelated.R' 'useful_inds.R' LazyData: true diff --git a/NAMESPACE b/NAMESPACE index 83d75b60..a577770a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -44,7 +44,6 @@ export(scales) export(sex_to_factor) export(shrink) export(spouse) -export(trim) export(unrelated) export(useful_inds) export(vect_to_binary) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 553b0e1c..864414c4 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -269,7 +269,7 @@ setMethod("affected<-", function(x, value) { if ( ! is.character(value) && - ! is.integer(value) && + ! is.numeric(value) && ! is.logical(value) && ! is.factor(value) ) { @@ -315,11 +315,11 @@ setMethod("avail<-", function(x, value) { if ( ! is.character(value) && - ! is.integer(value) && + ! is.numeric(value) && ! is.logical(value) && ! is.factor(value) ) { - stop("avail must be a character or integer vector") + stop("avail must be a character or numeric vector") } if (length(value) != length(x)) { if (length(value) == 1) { diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 725e9e8b..9eca50ae 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -56,10 +56,10 @@ setMethod("Ped", "data.frame", function(obj, cols_used_init = FALSE, cols_used_del = FALSE) { col_need <- c("id", "sex", "dadid", "momid") col_to_use <- c( - "famid", "steril", "status", "avail", "affected" + "famid", "steril", "status", "avail", "affected", + "kin", "id_inf", "useful" ) - col_used <- c( - "kin", "id_inf", "useful", + col_used <- c( "num_child_tot", "num_child_dir", "num_child_ind", "elementMetadata" ) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index cfb61e9a..e8d1b75d 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -101,6 +101,10 @@ setMethod("as.data.frame", "Ped", function(x) { #' #' @param x A Ped object. #' @param i A vector of individuals identifiers to keep. +#' @param del_parents A logical value indicating if the parents +#' of the individuals should be deleted. +#' @param keep A logical value indicating if the individuals +#' should be kept or deleted. #' #' @return A Ped object subsetted. #' @@ -108,15 +112,18 @@ setMethod("as.data.frame", "Ped", function(x) { #' @aliases subset,Ped-method #' @importFrom S4Vectors subset #' @export -setMethod("subset", "Ped", function(x, i, del_parents = FALSE) { +setMethod("subset", "Ped", function(x, i, del_parents = FALSE, keep = TRUE) { if (is.factor(i)) { i <- as.character(i) } if (is.character(i)) { - i <- which(x@id %in% i) + i <- x@id %in% i } else if (!is.numeric(i) & !is.logical(i)) { stop("i must be a character, an integer or a logical vector") } + if (!keep) { + i <- !i + } col_computed <- c( "num_child_tot", "num_child_dir", "num_child_ind" ) @@ -391,9 +398,9 @@ setMethod("as.list", "Pedigree", function(x) { #' @param drop A logical value indicating if the dimensions should be dropped. #' @return A Pedigree object subsetted. #' @rdname extract-methods -setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), - function(x, i, j, drop = TRUE) { - new_ped <- subset(ped(x), i) +setMethod("subset", "Pedigree", + function(x, i, del_parents = FALSE) { + new_ped <- subset(ped(x), i, del_parents = del_parents) all_id <- id(new_ped) new_rel <- subset(rel(x), all_id) new_hints <- subset(hints(x), all_id) @@ -405,4 +412,10 @@ setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), validObject(new_pedi) new_pedi } +) + +setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), + function(x, i, j, drop = TRUE) { + subset(x, i) + } ) \ No newline at end of file diff --git a/R/find_avail_affected.R b/R/find_avail_affected.R index d32ffc7b..9de0360e 100644 --- a/R/find_avail_affected.R +++ b/R/find_avail_affected.R @@ -31,62 +31,70 @@ #' @include utils.R #' @include find_unavailable.R #' @export -find_avail_affected <- function( - ped, avail = ped(ped, "avail"), affstatus = NA -) { - ped_df <- ped(ped) - ped_df$avail <- avail - not_parent <- !is_parent(ped_df$id, ped_df$dadid, ped_df$momid) +setGeneric("find_avail_affected", signature = "obj", + function(obj, ...) standardGeneric("find_avail_affected") +) - if (is.na(affstatus)) { - possibl_trim <- ped_df$id[not_parent & avail == 1 & - is.na(deriv(ped, "affected")) - ] - } else { - possibl_trim <- ped_df$id[not_parent & avail == 1 & - deriv(ped, "affected") == affstatus - ] - } - n_trim <- length(possibl_trim) +setMethod("find_avail_affected", "Ped", + function(obj, avail = NULL, affected = NULL, affstatus = NA) { + if (is.null(avail)) { + avail <- avail(obj) + } + if (is.null(affected)) { + affected <- affected(obj) + } + not_parent <- !is_parent(id(obj), dadid(obj), momid(obj)) - if (n_trim == 0) { - return(list( - ped = ped, id_trimmed = NA, is_trimmed = FALSE, - bit_size = bit_size(ped)$bit_size - )) - } + if (is.na(affstatus)) { + possibl_trim <- id(obj)[not_parent & avail == 1 & + is.na(affected) + ] + } else { + possibl_trim <- id(obj)[not_parent & avail == 1 & + affected == affstatus + ] + } + n_trim <- length(possibl_trim) - trim_dat <- NULL + if (n_trim == 0) { + return(list( + ped = obj, id_trimmed = NA, is_trimmed = FALSE, + bit_size = bit_size(obj)$bit_size + )) + } - for (id_trim in possibl_trim) { - tmp_avail <- avail - tmp_avail[ped_df$id == id_trim] <- FALSE - id_rm <- find_unavailable(ped, tmp_avail) - new_ped <- trim(ped, id_rm) - trim_dat <- rbind(trim_dat, c(id = id_trim, - bit_size = bit_size(new_ped)$bit_size - )) - } + trim_dat <- NULL - bits <- trim_dat[, 2] + for (id_trim in possibl_trim) { + tmp_avail <- avail + tmp_avail[id(obj) == id_trim] <- FALSE + id_rm <- find_unavailable(obj, tmp_avail) + new_ped <- subset(obj, id_rm, keep = FALSE, del_parents = TRUE) + trim_dat <- rbind(trim_dat, c(id = id_trim, + bit_size = bit_size(new_ped)$bit_size + )) + } - # trim by subject with min bits. This trims fewer subject than using - # max(bits). - id_trim <- trim_dat[, 1][bits == min(bits)] + bits <- trim_dat[, 2] - ## break ties by random choice - if (length(id_trim) > 1) { - rord <- order(runif(length(id_trim))) - id_trim <- id_trim[rord][1] - } + # trim by subject with min bits. This trims fewer subject than using + # max(bits). + id_trim <- trim_dat[, 1][bits == min(bits)] + + ## break ties by random choice + if (length(id_trim) > 1) { + rord <- order(runif(length(id_trim))) + id_trim <- id_trim[rord][1] + } - avail[ped_df$id == id_trim] <- FALSE - id_rm <- find_unavailable(ped, avail) - new_ped <- trim(ped, id_rm) - new_size <- bit_size(new_ped)$bit_size - avail <- avail[!(ped_df$id %in% id_rm)] + avail[id(obj) == id_trim] <- FALSE + id_rm <- find_unavailable(obj, avail) + new_ped <- subset(obj, id_rm, keep = FALSE, del_parents = TRUE) + new_size <- bit_size(new_ped)$bit_size + avail <- avail[!(id(obj) %in% id_rm)] - list(ped = new_ped, new_avail = avail, id_trimmed = id_trim, - is_trimmed = TRUE, bit_size = new_size - ) -} + list(ped = new_ped, new_avail = avail, id_trimmed = id_trim, + is_trimmed = TRUE, bit_size = new_size + ) + } +) diff --git a/R/find_avail_noninform.R b/R/find_avail_noninform.R index 9e644b9a..a8863b4c 100644 --- a/R/find_avail_noninform.R +++ b/R/find_avail_noninform.R @@ -24,26 +24,32 @@ #' #' @seealso [shrink()] #' @export -find_avail_noninform <- function(ped, avail = ped(ped, "avail"), missid = NA_character_) { - ## trim persons who are available but not informative b/c not parent by - ## setting their availability to FALSE, then call find_unavailable() JPS - ## 3/10/14 add strings check in case of char ids - ped_df <- ped(ped) - ped_df$avail <- avail +setGeneric("find_avail_noninform", signature = "obj", + function(obj, ...) standardGeneric("find_avail_noninform") +) - check_parent <- is_parent(ped_df$id, ped_df$dadid, ped_df$momid) - for (i in seq_along(nrow(ped_df))) { - if (check_parent[i] == FALSE && avail[i] == 1 && - all(ped_df$affected[i] == 0, na.rm = TRUE)) { - ## could use ped$affected[i,] if keep matrix - fa <- ped_df$dadid[i] - mo <- ped_df$momid[i] - if (avail[ped_df$id == fa] && avail[ped_df$id == mo] || - fa %in% missid || mo %in% missid) { - ped_df$avail[i] <- FALSE +setMethod("find_avail_noninform", "Ped", + function(obj, avail = NULL, affected = NULL) { + if (is.null(avail)) { + avail <- avail(obj) + } + if (is.null(affected)) { + affected <- affected(obj) + } + check_parent <- is_parent(id(obj), dadid(obj), momid(obj)) + for (i in seq_along(length(obj))) { + if (check_parent[i] == FALSE && avail[i] == 1 && + all(affected[i] == 0, na.rm = TRUE)) { + ## could use ped$affected[i,] if keep matrix + fa <- dadid(obj)[i] + mo <- momid(obj)[i] + if (avail[id(obj) == fa] && avail[id(obj) == mo] || + is.na(fa) || is.na(mo)) { + avail[i] <- FALSE + } } } - } - find_unavailable(ped, ped_df$avail) -} + find_unavailable(obj, avail) + } +) diff --git a/R/find_unavailable.R b/R/find_unavailable.R index b85f0ce3..240fbf52 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -36,46 +36,54 @@ #' @seealso [shrink()] #' @include utils.R #' @export -find_unavailable <- function(ped, avail = ped(ped, "avail")) { - ## find id within Pedigree anyone who is not available and - ## does not have an available descendant - - ## avail = TRUE/1 if available, FALSE/0 if not - - ## will do this iteratively by successively removing unavailable - ## terminal nodes - ## Steve Iturria, PhD, modified by Dan Schaid - ped_df <- ped(ped) - ped_df$avail <- avail - cont <- TRUE # flag for whether to keep iterating - - ped_df$is_terminal <- (is_parent(ped_df$id, ped_df$dadid, ped_df$momid) == FALSE) - ## JPS 3/10/14 add strings check in case of char ids - while (cont) { - id_to_remove <- ped_df$id[ped_df$is_terminal & ped_df$avail == 0] - if (length(id_to_remove) > 0) { - idx_to_remove <- match(id_to_remove, ped_df$id) - ped_df <- ped_df[-idx_to_remove, ] - ped_df$is_terminal <- - (is_parent(ped_df$id, ped_df$dadid, ped_df$momid) == FALSE) - } else { - cont <- FALSE +setGeneric("find_unavailable", signature = "obj", + function(obj, ...) standardGeneric("find_unavailable") +) + +setMethod("find_unavailable", "Ped", + function(obj, avail = NULL) { + if (is.null(avail)) { + avail <- avail(obj) } - } - - ## A few more clean up steps + ## find id within Pedigree anyone who is not available and + ## does not have an available descendant + + ## avail = TRUE/1 if available, FALSE/0 if not + + ## will do this iteratively by successively removing unavailable + ## terminal nodes + ## Steve Iturria, PhD, modified by Dan Schaid + + cont <- TRUE # flag for whether to keep iterating + + is_terminal <- (is_parent(obj) == FALSE) + ## JPS 3/10/14 add strings check in case of char ids + obji <- obj + avail(obji) <- avail + while (cont) { + id_to_remove <- id(obji)[is_terminal & avail(obji) == 0] + if (length(id_to_remove) > 0) { + obji <- subset(obji, id_to_remove, keep = FALSE) + is_terminal <- (is_parent(obji) == FALSE) + } else { + cont <- FALSE + } + } + ## A few more clean up steps - ## remove unavailable founders - tmp_ped <- exclude_unavail_founders( - ped_df$id, - ped_df$dadid, ped_df$momid, ped_df$avail - ) + ## remove unavailable founders + tmp_ped <- exclude_unavail_founders( + id(obji), dadid(obji), momid(obji), avail(obji) + ) - ## remove stray marry-ins - tmp_ped <- exclude_stray_marryin(tmp_ped$id, tmp_ped$dadid, tmp_ped$momid) + ## remove stray marry-ins + tmp_ped <- exclude_stray_marryin( + tmp_ped$id, tmp_ped$dadid, tmp_ped$momid + ) - ped(ped, "id")[is.na(match(ped(ped, "id"), tmp_ped$id))] -} + id(obj)[is.na(match(id(obj), tmp_ped$id))] + } +) #' Exclude stray marry-ins #' @@ -124,7 +132,9 @@ exclude_stray_marryin <- function(id, dadid, momid) { #' - id Vector of subject identifiers #' - dadid Vector of father identifiers #' - momid Vector of mother identifiers -exclude_unavail_founders <- function(id, dadid, momid, avail, missid = NA_character_) { +exclude_unavail_founders <- function( + id, dadid, momid, avail, missid = NA_character_ +) { n_old <- length(id) ## zed = TRUE if both parents are present @@ -182,8 +192,10 @@ exclude_unavail_founders <- function(id, dadid, momid, avail, missid = NA_charac mom <- mom[zed] for (i in seq_len(n)) { ## check if mom and dad are founders (where their parents = 0) - dad_f <- (dadid[id == dad[i]] == 0) & (momid[id == dad[i]] == 0) - mom_f <- (dadid[id == mom[i]] == 0) & (momid[id == mom[i]] == 0) + dad_f <- (dadid[id == dad[i]] %in% missid) & + (momid[id == dad[i]] %in% missid) + mom_f <- (dadid[id == mom[i]] %in% missid) & + (momid[id == mom[i]] %in% missid) both_f <- dad_f & mom_f ## check if mom and dad have avail @@ -191,7 +203,7 @@ exclude_unavail_founders <- function(id, dadid, momid, avail, missid = NA_charac mom_avail <- avail[id == mom[i]] ## define both_unavail = T if both mom & dad not avail - both_unavail <- (dad_avail == FALSE & mom_avail == FALSE) + both_unavail <- (dad_avail == 0 & mom_avail == 0) if (both_f && both_unavail) { ## remove mom and dad from ped, and zero-out parent diff --git a/R/shrink.R b/R/shrink.R index d83c0660..d5e19296 100644 --- a/R/shrink.R +++ b/R/shrink.R @@ -40,113 +40,136 @@ #' @author Original by Dan Schaid, updated by Jason Sinnwell #' @seealso [Pedigree()], [bit_size()] #' @export -shrink <- function( - ped, avail = ped(ped, "avail"), affected = deriv(ped, "affected"), max_bits = 16 -) { - if (any(is.na(avail))) { - stop("NA values not allowed in avail vector.") +setGeneric("shrink", signature = "obj", + function(obj, ...) standardGeneric("shrink") +) + +setMethod("shrink", "Pedigree", + function(obj, avail = NULL, affected = NULL, max_bits = 16) { + lst_trim <- shrink(ped(obj), + avail = avail, + affected = affected, + max_bits = max_bits + ) + all_ids <- id(lst_trim$pedObj) + lst_trim$pedObj <- subset( + obj, id(ped(obj)) %in% all_ids, del_parents = TRUE + ) + lst_trim } +) - id_trim <- numeric() - id_lst <- list() - n_origin <- length(ped) +setMethod("shrink", "Ped", + function(obj, avail = NULL, affected = NULL, max_bits = 16, ...) { + if (is.null(avail)) { + avail <- avail(obj) + } + if (is.null(affected)) { + affected <- affected(obj) + } + if (any(is.na(avail))) { + stop("NA values not allowed in avail vector.") + } - bitsize_old <- bit_size(ped)$bit_size + id_trim <- numeric() + id_lst <- list() + n_origin <- length(obj) - ## first find unavailable subjects to remove anyone who is not available - ## and does not have an available descendant + bitsize_old <- bit_size(obj)$bit_size - id_trim_unav <- find_unavailable(ped, avail) + ## first find unavailable subjects to remove anyone who is not available + ## and does not have an available descendant + id_trim_unav <- find_unavailable(obj, avail) - if (length(id_trim_unav)) { - ped_trim <- trim(ped, id_trim_unav) - avail <- avail[match(ped_trim$ped$id, ped(ped, "id"))] - id_trim <- c(id_trim, id_trim_unav) - id_lst$unavail <- id_trim_unav + if (length(id_trim_unav)) { + ped_trim <- subset( + obj, id_trim_unav, keep = FALSE, del_parents = TRUE + ) + avail <- avail[match(id(ped_trim), id(obj))] + id_trim <- c(id_trim, id_trim_unav) + id_lst$unavail <- id_trim_unav - } else { - ## no trimming, reset to original ped - ped_trim <- ped - } + } else { + ## no trimming, reset to original ped + ped_trim <- obj + } - ## Next trim any available terminal subjects with unknown phenotype but - ## only if both parents are available + ## Next trim any available terminal subjects with unknown phenotype but + ## only if both parents are available - ## added n_new>0 check because no need to trim anymore if empty ped + ## added n_new>0 check because no need to trim anymore if empty ped - n_chg <- 1 - id_lst$noninform <- NULL - n_new <- length(ped_trim$ped$id) + n_chg <- 1 + id_lst$noninform <- NULL + n_new <- length(ped_trim) - while (n_chg > 0 && n_new > 0) { - n_old <- length(ped_trim$ped$id) + while (n_chg > 0 && n_new > 0) { + n_old <- length(ped_trim) - ## find_avail_noninform finds non-informative, - ## but after suggesting their removal, - ## checks for more unavailable subjects before returning - id_trim_noninf <- find_avail_noninform(ped_trim, avail) + ## find_avail_noninform finds non-informative, + ## but after suggesting their removal, + ## checks for more unavailable subjects before returning + id_trim_noninf <- find_avail_noninform(ped_trim, avail) - if (length(id_trim_noninf)) { - ped_new <- trim(ped_trim, id_trim_noninf) - avail <- avail[match(ped_new$ped$id, ped_trim$ped$id)] - id_trim <- c(id_trim, id_trim_noninf) - id_lst$noninform <- c(id_lst$noninform, id_trim_noninf) - ped_trim <- ped_new + if (length(id_trim_noninf)) { + ped_new <- subset(ped_trim, id_trim_noninf, keep = FALSE) + avail <- avail[match(id(ped_new), id(ped_trim))] + id_trim <- c(id_trim, id_trim_noninf) + id_lst$noninform <- c(id_lst$noninform, id_trim_noninf) + ped_trim <- ped_new + } + n_new <- length(ped_trim) + n_chg <- n_old - n_new } - n_new <- length(ped_trim$ped$id) - n_chg <- n_old - n_new - } - ## Determine number of subjects & bit_size after initial trimming - n_inter <- length(ped_trim$ped$id) + ## Determine number of subjects & bit_size after initial trimming + n_inter <- length(ped_trim) - bit_size <- bit_size(ped_trim)$bit_size + bit_size <- bit_size(ped_trim)$bit_size - ## Now sequentially shrink to fit bit_size <= max_bits + ## Now sequentially shrink to fit bit_size <= max_bits - bitsize_vec <- c(bitsize_old, bit_size) + bitsize_vec <- c(bitsize_old, bit_size) - is_trim <- TRUE - id_lst$affect <- NULL + is_trim <- TRUE + id_lst$affect <- NULL - while (is_trim && (bit_size > max_bits)) { - ## First, try trimming by unknown status - save <- find_avail_affected(ped_trim, avail, affstatus = NA) - is_trim <- save$is_trim - - ## Second, try trimming by unaffected status if no unknowns to trim - if (!is_trim) { - save <- find_avail_affected(ped_trim, avail, affstatus = 0) + while (is_trim && (bit_size > max_bits)) { + ## First, try trimming by unknown status + save <- find_avail_affected(ped_trim, avail, affstatus = NA) is_trim <- save$is_trim - } - - ## Third, try trimming by affected status if no unknowns & no - ## unaffecteds to trim - if (!is_trim) { - save <- find_avail_affected(ped_trim, avail, affstatus = 1) - is_trim <- save$is_trim + ## Second, try trimming by unaffected status if no unknowns to trim + if (!is_trim) { + save <- find_avail_affected(ped_trim, avail, affstatus = 0) + is_trim <- save$is_trim + } + + ## Third, try trimming by affected status if no unknowns & no + ## unaffecteds to trim + if (!is_trim) { + save <- find_avail_affected(ped_trim, avail, affstatus = 1) + is_trim <- save$is_trim + } + + if (is_trim) { + ped_trim <- save$ped + avail <- save$new_avail + bit_size <- save$bit_size + bitsize_vec <- c(bitsize_vec, bit_size) + id_trim <- c(id_trim, save$id_trim) + id_lst$affect <- c(id_lst$affect, save$id_trim) + } } + ## end while (is_trim) & (bit_size > max_bits) - if (is_trim) { - ped_trim <- save$ped - avail <- save$new_avail - bit_size <- save$bit_size - bitsize_vec <- c(bitsize_vec, bit_size) - id_trim <- c(id_trim, save$id_trim) - id_lst$affect <- c(id_lst$affect, save$id_trim) - } - } - ## end while (is_trim) & (bit_size > max_bits) + n_final <- length(ped_trim) - n_final <- length(ped_trim$ped$id) + obj <- list(pedObj = ped_trim, id_trim = id_trim, id_lst = id_lst, + bit_size = bitsize_vec, avail = avail, pedSizeOriginal = n_origin, + pedSizeIntermed = n_inter, pedSizeFinal = n_final + ) - obj <- list(pedObj = ped_trim, id_trim = id_trim, id_lst = id_lst, - bit_size = bitsize_vec, avail = avail, pedSizeOriginal = n_origin, - pedSizeIntermed = n_inter, pedSizeFinal = n_final - ) - - obj -} - -TRUE \ No newline at end of file + obj + } +) diff --git a/R/trim.R b/R/trim.R deleted file mode 100644 index e7948d46..00000000 --- a/R/trim.R +++ /dev/null @@ -1,29 +0,0 @@ -# Automatically generated from all.nw using noweb TODO add documentation -#' Trim a Pedigree -#' -#' Carries out the removal of the subjects identified from a Pedigree object. -#' -#' @inheritParams align -#' @inheritParams is_parent -#' @param id_rm Vector of ids to remove -#' -#' @return A Pedigree object with the subjects removed -#' -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -#' trim(ped1, "1_101") -#' @export -trim <- function(ped, id_rm, missid = NA_character_) { - ## trim subjects from a Pedigree who match the removeID trim relation - ## matrix as well - rmidx <- match(id_rm, ped(ped, "id")) - if (length(rmidx) > 0) { - ped(ped, c("dadid", "momid"))[ped(ped, "dadid") %in% id_rm | - ped(ped, "momid") %in% id_rm] <- missid - ped[-rmidx, ] - } else { - ped - } -} -TRUE diff --git a/R/utils.R b/R/utils.R index 99248c14..656172ec 100644 --- a/R/utils.R +++ b/R/utils.R @@ -168,18 +168,30 @@ check_num_na <- function(var, na_as_num = TRUE) { #' with TRUE if the individual is a parent and FALSE otherwise #' #' @keywords internal -is_parent <- function(id, dadid, momid, missid = NA_character_) { - # determine subjects who are parents assume input of dadid/momid indices, - # not ids +setGeneric("is_parent", signature = "obj", + function(obj, ...) standardGeneric("is_parent") +) - if (length(id) != length(dadid) | length(id) != length(momid)) { - stop("The length of the vectors are not the same") +setMethod("is_parent", "character_OR_integer", + function(obj, dadid, momid, missid = NA_character_) { + # determine subjects who are parents assume input of + # dadid/momid indices, not ids + + if (length(obj) != length(dadid) | length(obj) != length(momid)) { + stop("The length of the vectors are not the same") + } + + is_father <- !is.na(match(obj, unique(dadid[!dadid %in% missid]))) + is_mother <- !is.na(match(obj, unique(momid[!momid %in% missid]))) + is_father | is_mother } +) - is_father <- !is.na(match(id, unique(dadid[!dadid %in% missid]))) - is_mother <- !is.na(match(id, unique(momid[!momid %in% missid]))) - is_father | is_mother -} +setMethod("is_parent", "Ped", + function(obj, missid = NA_character_) { + is_parent(id(obj), dadid(obj), momid(obj), missid) + } +) #' Check wich individuals are founders #' diff --git a/tests/testthat/test-shrink.R b/tests/testthat/test-shrink.R index aef872f8..c11669ef 100644 --- a/tests/testthat/test-shrink.R +++ b/tests/testthat/test-shrink.R @@ -6,10 +6,10 @@ test_that("Pedigree shrink works", { ped_mb <- Pedigree(minnbreast, cols_ren_ped = list(fatherId = "fatherid", motherId = "motherid", indId = "id", gender = "sex", family = "famid" - ) + ), missid = "0" ) ped_mb <- generate_colors(ped_mb, col_aff = "cancer", add_to_scale = FALSE) - mn2 <- ped_mb[ped_mb$ped$famid == "5", ] + mn2 <- ped_mb[famid(ped_mb) == "5"] ## this Pedigree as one person with cancer. The Pedigree is not informative @@ -22,9 +22,10 @@ test_that("Pedigree shrink works", { ) ## breaks in trim - avail <- ifelse(is.na(mn2$ped$cancer), 0, mn2$ped$cancer) + avail(ped(mn2)) <- ifelse(is.na(mcols(mn2)$cancer), 0, mcols(mn2)$cancer) - mn2_s <- shrink(mn2, avail) + find_unavailable(ped(mn2)) + mn2_s <- shrink(mn2) expect_equal(mn2_s$id_lst$unavail, paste("5", c( @@ -35,12 +36,12 @@ test_that("Pedigree shrink works", { ), sep = "_") ) - mn8 <- ped_mb[ped_mb$ped$famid == "8", ] + mn8 <- ped_mb[famid(ped_mb) == "8"] vdiffr::expect_doppelganger("Pedigree shrink 2", function() plot(mn8) ) - avail <- ifelse(is.na(mn8$ped$cancer), 0, mn8$ped$cancer) + avail <- ifelse(is.na(mcols(mn8)$cancer), 0, mcols(mn8)$cancer) mn8_s <- shrink(mn8, avail) @@ -59,25 +60,26 @@ test_that("Pedigree shrink error if missing info", { ## use sampleped from the package data("sampleped") ped <- Pedigree(sampleped) - ped2 <- ped[ped(ped, "famid") == "2", ] - ped2$ped$sex[c(13, 12)] <- c("unknown", "terminated") + ped2 <- ped[famid(ped) == "2"] + sex(ped(ped2))[c(13, 12)] <- c("unknown", "terminated") ## set 2nd col of affected to NA - ped2$ped$affected[c(7, 9)] <- NA - expect_error(shrink(ped = ped2, avail = ped2$ped$affected, max_bits = 32)) + expect__no_error(shrink(ped2, max_bits = 32)) + avail(ped(ped2))[c(7, 9)] <- NA + expect_error(shrink(ped2, max_bits = 32)) }) test_that("Pedigree shrink avail test", { ## use sampleped from the package data("sampleped") ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "famid") == "1", ] + ped1 <- ped[famid(ped) == "1"] set.seed(10) - ped1_s_av_32 <- shrink(ped = ped1, max_bits = 32) + ped1_s_av_32 <- shrink(ped1, max_bits = 32) set.seed(10) - ped1_s_av_25 <- shrink(ped = ped1, max_bits = 25) + ped1_s_av_25 <- shrink(ped1, max_bits = 25) expect_equal(ped1_s_av_32$id_trim, paste("1", c( @@ -99,10 +101,10 @@ test_that("Pedigree shrink with character", { data("sampleped") sampleped$famid[sampleped$famid == 1] <- "A" ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "famid") == "A", ] + ped1 <- ped[famid(ped) == "A"] set.seed(100) - ped1_s_av_32 <- shrink(ped = ped1, max_bits = 32) + ped1_s_av_32 <- shrink(ped1, max_bits = 32) expect_equal(ped1_s_av_32$id_trim, c( "A_101", "A_102", "A_107", "A_108", "A_111", "A_113", "A_121", "A_122", @@ -110,7 +112,7 @@ test_that("Pedigree shrink with character", { )) set.seed(100) - ped1_s_av_25 <- shrink(ped = ped1, max_bits = 25) + ped1_s_av_25 <- shrink(ped1, max_bits = 25) expect_equal(ped1_s_av_25$id_trim, c( "A_101", "A_102", "A_107", "A_108", "A_111", "A_113", "A_121", "A_122", @@ -122,7 +124,7 @@ test_that("Pedigree shrink with character", { test_that("Shrink works", { data("sampleped") ped <- Pedigree(sampleped) - ped2 <- ped[ped(ped, "famid") == "2", ] + ped2 <- ped[famid(ped) == "2"] ped2_s <- shrink(ped2) vdiffr::expect_doppelganger("Whole ped", @@ -132,4 +134,3 @@ test_that("Shrink works", { function() plot(ped2_s$pedObj, title = "Shrinked ped") ) }) -TRUE From b809fec33e9357b0059e7d275f4a4b2a0854835e Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 16:30:58 +0100 Subject: [PATCH 059/111] Separate function chaseup Make ped_to_legdf and tests class pedigree works --- R/kindepth.R | 22 +++++++++++----------- R/ped_to_legdf.R | 12 +++++++----- tests/testthat/test-ped_to_legdf.R | 2 +- tests/testthat/test-pedigreeClass.R | 18 +++++++++--------- tests/testthat/test-plot.R | 2 +- 5 files changed, 29 insertions(+), 27 deletions(-) diff --git a/R/kindepth.R b/R/kindepth.R index d39fc1b1..08fbff14 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -1,3 +1,14 @@ +chaseup <- function(x, midx, didx) { + new <- c(midx[x], didx[x]) # mother and father + new <- new[new > 0] + while (length(new) > 1) { + x <- unique(c(x, new)) + new <- c(midx[new], didx[new]) + new <- new[new > 0] + } + x +} + #' Compute the depth of each subject in a Pedigree #' #' @description @@ -112,17 +123,6 @@ setMethod("kindepth", "character", function(obj, dadid, momid, ## It may be possible to do better alignment when the Pedigree has loops, ## but it is definitely beyond this program, perhaps in auto_hint one day. - chaseup <- function(x, midx, didx) { - new <- c(midx[x], didx[x]) # mother and father - new <- new[new > 0] - while (length(new) > 1) { - x <- unique(c(x, new)) - new <- c(midx[new], didx[new]) - new <- new[new > 0] - } - x - } - ## First deal with any parents who are founders They all start with depth 0 dads <- didx[midx > 0 & didx > 0] # the father side of all spouse pairs moms <- midx[midx > 0 & didx > 0] diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index 52122ca3..08b87d33 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -75,9 +75,11 @@ ped_to_legdf <- function(ped, ) plot_df <- rbind.fill(plot_df, titles) + ## Get ped_df + ped_df <- as.data.frame(ped(ped)) # Sex poly1 <- polygons(1) - all_sex <- unique(as.numeric(ped(ped, "sex"))) + all_sex <- unique(as.numeric(ped_df$sex)) sex <- data.frame( x0 = posx[1], y0 = posy[all_sex], type = paste(names(poly1)[all_sex], 1, 1, sep = "_"), @@ -98,15 +100,15 @@ ped_to_legdf <- function(ped, plot_df <- rbind.fill(plot_df, sex, sex_label) # Border - border_mods <- unique(ped(ped)[, unique(border(ped, "column"))]) + border_mods <- unique(ped_df[, unique(border(ped)$column)]) border <- data.frame( x0 = posx[3], y0 = posy[seq_along(border_mods)], type = rep("square_1_1", length(border_mods)), - border = border(ped, "border")[match(border_mods, border(ped, "mods"))], + border = border(ped)$border[match(border_mods, border(ped)$mods)], fill = "white", id = "border" ) - lab <- border(ped, "labels")[match(border_mods, border(ped, "mods"))] + lab <- border(ped)$labels[match(border_mods, border(ped)$mods)] lab[is.na(lab)] <- "NA" border_label <- data.frame( x0 = posx[4] + adjx, @@ -122,7 +124,7 @@ ped_to_legdf <- function(ped, ## Affected for (aff in seq_len(n_aff)) { aff_df <- all_aff[all_aff$order == aff, ] - aff_mods <- unique(ped(ped)[, unique(aff_df[["column_mods"]])]) + aff_mods <- unique(ped_df[, unique(aff_df[["column_mods"]])]) aff_bkg <- data.frame( x0 = posx[3 + aff * 2], y0 = posy[seq_along(aff_mods)], type = rep(paste("square", 1, 1, sep = "_"), diff --git a/tests/testthat/test-ped_to_legdf.R b/tests/testthat/test-ped_to_legdf.R index 5efda06e..6fffdeb1 100644 --- a/tests/testthat/test-ped_to_legdf.R +++ b/tests/testthat/test-ped_to_legdf.R @@ -17,7 +17,7 @@ test_that("Pedigree legend works", { data("sampleped") sampleped$val_num <- as.numeric(sampleped$id) ped <- Pedigree(sampleped) - ped <- ped[ped(ped, "famid") == "1", ] + ped <- ped[ped(ped, "famid") == "1"] ped <- generate_colors(ped, add_to_scale = TRUE, "avail") ped <- generate_colors(ped, add_to_scale = TRUE, "val_num", threshold = 115, diff --git a/tests/testthat/test-pedigreeClass.R b/tests/testthat/test-pedigreeClass.R index 447ee8b7..af3847dd 100644 --- a/tests/testthat/test-pedigreeClass.R +++ b/tests/testthat/test-pedigreeClass.R @@ -20,9 +20,9 @@ test_that("Pedigree works", { test_that("Pedigree old usage compatibility", { data(sampleped) ped1 <- with(sampleped, - Pedigree(id, dadid, momid, sex, famid, avail, affection, missid = "0") + Pedigree(id, dadid, momid, sex, famid, avail, affection) ) - expect_equal(ped1, Pedigree(sampleped, missid = "0")) + expect_equal(ped1, Pedigree(sampleped)) ped2mat <- matrix(c( 1, 1, 0, 0, 1, @@ -70,9 +70,9 @@ test_that("Pedigree from sampleped and affectation", { "available" = "avail", "affection" = "affected", "family" = "famid" - ), missid = "0") + )) - expect_equal(dim(as.data.frame(ped(ped1))), c(41, 25)) + expect_equal(dim(as.data.frame(ped(ped1))), c(41, 26)) expect_equal(dim(as.data.frame(rel(ped1))), c(0, 4)) expect_error(id(ped(ped1)) <- "1") @@ -95,11 +95,11 @@ test_that("Pedigree subscripting", { "affection" = "cancer" ), missid = "0") expect_equal(length(minnped), 28081) - expect_equal(dim(as.data.frame(ped(minnped))), c(28081, 34)) + expect_equal(dim(as.data.frame(ped(minnped))), c(28081, 35)) ped8 <- minnped[famid(ped(minnped)) == "8"] - expect_equal(dim(as.data.frame(ped(ped8))), c(40, 34)) + expect_equal(dim(as.data.frame(ped(ped8))), c(40, 35)) # Subjects 150, 152, 154, 158 are children, # and 143, 162, 149 are parents and a child @@ -126,15 +126,15 @@ test_that("Pedigree subscripting", { test_that("Pedigree generic", { data("sampleped") - pedi <- Pedigree(sampleped, missid = "0") - expect_equal(dim(as.data.frame(ped(pedi))), c(55, 25)) + pedi <- Pedigree(sampleped) + expect_equal(dim(as.data.frame(ped(pedi))), c(55, 26)) expect_equal(names(as.list(pedi)), c("ped", "rel", "scales", "hints")) expect_equal(length(pedi), 55) }) test_that("Pedigree accessors", { data("sampleped") - pedi <- Pedigree(sampleped, missid = "0") + pedi <- Pedigree(sampleped) expect_equal(pedi@ped, ped(pedi)) expect_equal(pedi@rel, rel(pedi)) expect_equal(pedi@hints, hints(pedi)) diff --git a/tests/testthat/test-plot.R b/tests/testthat/test-plot.R index 4839d59b..623b96bc 100644 --- a/tests/testthat/test-plot.R +++ b/tests/testthat/test-plot.R @@ -25,7 +25,7 @@ test_that("Pedigree other test", { ped2df$vitalStatus <- c(1, 1, 1, 0, 1, 0, 0, 8, 0, 0) rel_df <- data.frame(indId1 = 8, indId2 = 9, code = 3, family = 1) - ped <- Pedigree(ped2df, rel_df) + ped <- Pedigree(ped2df, rel_df, missid = "0") vdiffr::expect_doppelganger("Ped simple affection", function() plot(ped) From 30eed14350c10441c57a916c3d71334459551463 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 16:42:09 +0100 Subject: [PATCH 060/111] Make unrelated and other tests pass --- R/find_avail_affected.R | 6 +++ R/find_avail_noninform.R | 6 +++ R/find_unavailable.R | 6 +++ R/kinship.R | 6 +++ R/unrelated.R | 94 +++++++++++++++++++++-------------- tests/testthat/test-unavail.R | 7 ++- 6 files changed, 83 insertions(+), 42 deletions(-) diff --git a/R/find_avail_affected.R b/R/find_avail_affected.R index 9de0360e..81ef17be 100644 --- a/R/find_avail_affected.R +++ b/R/find_avail_affected.R @@ -98,3 +98,9 @@ setMethod("find_avail_affected", "Ped", ) } ) + +setMethod("find_avail_affected", "Pedigree", + function(obj, ...) { + find_avail_affected(ped(obj), ...) + } +) diff --git a/R/find_avail_noninform.R b/R/find_avail_noninform.R index a8863b4c..0f3b6e7b 100644 --- a/R/find_avail_noninform.R +++ b/R/find_avail_noninform.R @@ -53,3 +53,9 @@ setMethod("find_avail_noninform", "Ped", find_unavailable(obj, avail) } ) + +setMethod("find_avail_noninform", "Pedigree", + function(obj, ...) { + find_avail_noninform(ped(obj), ...) + } +) diff --git a/R/find_unavailable.R b/R/find_unavailable.R index 240fbf52..b9faec3e 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -40,6 +40,12 @@ setGeneric("find_unavailable", signature = "obj", function(obj, ...) standardGeneric("find_unavailable") ) +setMethod("find_unavailable", "Pedigree", + function(obj, ...) { + find_unavailable(ped(obj), ...) + } +) + setMethod("find_unavailable", "Ped", function(obj, avail = NULL) { if (is.null(avail)) { diff --git a/R/kinship.R b/R/kinship.R index 713e9da3..022b0d64 100644 --- a/R/kinship.R +++ b/R/kinship.R @@ -67,6 +67,12 @@ setGeneric("kinship", signature = "obj", function(obj, ...) standardGeneric("kinship") ) +setMethod("kinship", "Ped", + function(obj, ...){ + kinship(id(obj), dadid(obj), momid(obj), sex(obj), ...) + } +) + #' @export #' @rdname kinship #' @aliases kinship,character diff --git a/R/unrelated.R b/R/unrelated.R index fa5b63bb..7d02b811 100644 --- a/R/unrelated.R +++ b/R/unrelated.R @@ -46,56 +46,74 @@ NULL #' ## [1] '110' '113' '116' '109' #' ## [1] '113' '133' '141' '109' #' @export -unrelated <- function(ped, avail = ped(ped, "avail")) { - # Requires: kinship function +setGeneric("unrelated", signature = "obj", + function(obj, ...) standardGeneric("unrelated") +) - # Given vectors id, father, and mother for a Pedigree structure, and avail - # = vector of T/F or 1/0 for whether each subject (corresponding to id - # vector) is available (e.g., has DNA available), determine set of maximum - # number of unrelated available subjects from a Pedigree. +setMethod("unrelated", "Ped", + function(obj, avail = NULL) { + if (is.null(avail)) { + avail <- avail(obj) + } + # Requires: kinship function - # This is a greedy algorithm that uses the kinship matrix, sequentially - # removing rows/cols that are non-zero for subjects that have the most - # number of zero kinship coefficients (greedy by choosing a row of kinship - # matrix that has the most number of zeros, and then remove any cols and - # their corresponding rows that are non-zero. To account for ties of the - # count of zeros for rows, a random choice is made. Hence, running this - # function multiple times can return different sets of unrelated subjects. + # Given vectors id, father, and mother for a Pedigree structure, + # and avail = vector of T/F or 1/0 for whether each subject + # (corresponding to id vector) is available + # (e.g., has DNA available), determine set of maximum + # number of unrelated available subjects from a Pedigree. - id <- ped(ped, "id") + # This is a greedy algorithm that uses the kinship matrix, sequentially + # removing rows/cols that are non-zero for subjects that have the most + # number of zero kinship coefficients + # (greedy by choosing a row of kinship matrix that has the most number + # of zeros, and then remove any cols and their corresponding rows that + # are non-zero). + # To account for ties of the count of zeros for rows, a random choice + # is made. + # Hence, running this function multiple times can return different + # sets of unrelated subjects. - kin <- kinship(ped) + id <- id(obj) - ord <- order(id) - id <- id[ord] - avail <- as.logical(avail[ord]) - kin <- kin[ord, ][, ord] + kin <- kinship(obj) - rord <- order(runif(nrow(kin))) + ord <- order(id) + id <- id[ord] + avail <- as.logical(avail[ord]) + kin <- kin[ord, ][, ord] - id <- id[rord] - avail <- avail[rord] - kin <- kin[rord, ][, rord] + rord <- order(runif(nrow(kin))) - kin_avail <- kin[avail, , drop = FALSE][, avail, drop = FALSE] + id <- id[rord] + avail <- avail[rord] + kin <- kin[rord, ][, rord] - diag(kin_avail) <- 0 + kin_avail <- kin[avail, , drop = FALSE][, avail, drop = FALSE] - while (any(kin_avail > 0)) { - nr <- nrow(kin_avail) - indx <- seq_len(nrow(kin_avail)) - zero_count <- apply(kin_avail == 0, 1, sum) + diag(kin_avail) <- 0 - mx <- max(zero_count[zero_count < nr]) - zero_mx <- indx[zero_count == mx][1] + while (any(kin_avail > 0)) { + nr <- nrow(kin_avail) + indx <- seq_len(nrow(kin_avail)) + zero_count <- apply(kin_avail == 0, 1, sum) - exclude <- indx[kin_avail[, zero_mx] > 0] + mx <- max(zero_count[zero_count < nr]) + zero_mx <- indx[zero_count == mx][1] - kin_avail <- kin_avail[-exclude, , drop = FALSE][ - , -exclude, drop = FALSE - ] + exclude <- indx[kin_avail[, zero_mx] > 0] + + kin_avail <- kin_avail[-exclude, , drop = FALSE][ + , -exclude, drop = FALSE + ] + } + + sort(dimnames(kin_avail)[[1]]) } +) - sort(dimnames(kin_avail)[[1]]) -} -TRUE +setMethod("unrelated", "Pedigree", + function(obj, ...) { + unrelated(ped(obj), ...) + } +) diff --git a/tests/testthat/test-unavail.R b/tests/testthat/test-unavail.R index a327f1b0..ffc6349e 100644 --- a/tests/testthat/test-unavail.R +++ b/tests/testthat/test-unavail.R @@ -6,8 +6,7 @@ test_that("unavailable detection works", { 101, 102, 107, 108, 111, 113, 121, 122, 123, 131, 132, 134, 139 ), sep = "_"), paste("2", c(205, 210, 213), sep = "_")) ) - find_avail_affected(ped) - deriv(ped, "affected")[25] <- NA + affected(ped(ped))[25] <- NA expect_equal(as.vector(find_avail_affected(ped)$id_trimmed), "1_125") expect_equal(find_avail_noninform(ped), c(paste("1", c( @@ -21,8 +20,8 @@ test_that("Unrelated detection works", { ped <- Pedigree(sampleped) - ped1 <- ped[ped(ped, "famid") == 1, ] - ped2 <- ped[ped(ped, "famid") == 2, ] + ped1 <- ped[famid(ped) == 1] + ped2 <- ped[famid(ped) == 2] set.seed(10) expect_equal(unrelated(ped1), From 3d67b22f21a729a87f89e7fb083b893c76ae7a4a Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 16:59:51 +0100 Subject: [PATCH 061/111] Make useful works --- R/AllAccessors.R | 41 ++++++++++++++++++++++++++++++- R/is_informative.R | 5 +++- R/useful_inds.R | 39 ++++++++++++++++++++--------- tests/testthat/test-useful_inds.R | 11 ++++----- 4 files changed, 77 insertions(+), 19 deletions(-) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 864414c4..d408d7a2 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -377,7 +377,7 @@ setMethod("kin<-", } ) -##### id_inf Accessors ##### +##### Id_inf Accessors ##### #' id_inf getter of Ped object #' #' @param x A Ped object. @@ -416,6 +416,45 @@ setMethod("id_inf<-", } ) +##### Useful Accessors ##### +#' useful getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A numeric vector with the saying if the individual +#' is informative or not. +#' +#' @rdname Ped +#' @aliases useful,Ped-method +#' @export +setGeneric("useful", function(x) { + standardGeneric("useful") +}) +setMethod("useful", signature(x = "Ped"), function(x) { + x@useful +}) +setGeneric("useful<-", function(x, value) { + standardGeneric("useful<-") +}) +setMethod("useful<-", + signature(x = "Ped", value = "numeric"), + function(x, value) { + if (length(value) != length(x)) { + if (length(value) == 1) { + value <- rep(value, length(x)) + } else { + stop( + "The length of the new values for useful should be: ", + "equal to the length of the Ped object" + ) + } + } + x@useful <- value + validObject(x) + x + } +) + #### S4 Rel Accessors #### #' Code accessor of Rel object #' diff --git a/R/is_informative.R b/R/is_informative.R index faa49342..4135851d 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -125,7 +125,10 @@ setMethod("is_informative", "Pedigree", function( ) if (!reset & any(!is.na(id_inf(ped(obj))))) { - check_columns(ped_df, NULL, "id_inf", NULL) + stop( + "The id_inf slot already has values in the Ped object", + " and reset is set to FALSE" + ) } id_inf(ped(obj)) <- vect_to_binary(ifelse(ped_df$id %in% id_inf, 1, 0)) diff --git a/R/useful_inds.R b/R/useful_inds.R index 554a7a86..5f1df213 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -86,20 +86,37 @@ setMethod("useful_inds", "character", #' @rdname useful_inds #' @param reset Boolean to indicate if the `useful` column should be reset setMethod("useful_inds", "Pedigree", function(obj, - informative = "AvAf", keep_infos = FALSE, - missid = NA_character_, reset = FALSE + informative = "AvAf", keep_infos = FALSE, reset = FALSE ) { - cols_needed <- c( - "avail", "affected", "num_child_tot" + new_ped <- useful_inds(ped(obj), + informative, keep_infos, reset ) - check_columns(obj$ped, cols_needed, "", "", others_cols = TRUE) - useful <- useful_inds(obj$ped$id, obj$ped$dadid, obj$ped$momid, - obj$ped$avail, obj$ped$affected, obj$ped$num_child_tot, - informative, keep_infos, missid + + obj@ped <- new_ped + validObject(obj) + obj +}) + +#' @docType methods +#' @aliases useful_inds,Pedigree +#' @export +#' @rdname useful_inds +#' @param reset Boolean to indicate if the `useful` column should be reset +setMethod("useful_inds", "Ped", function(obj, + informative = "AvAf", keep_infos = FALSE, reset = FALSE +) { + useful <- useful_inds(id(obj), dadid(obj), momid(obj), + avail(obj), affected(obj), obj@num_child_tot, + informative, keep_infos, NA_character_ ) - if (!reset) { - check_columns(obj$ped, NULL, "useful", NULL, others_cols = TRUE) + + if (!reset & any(!is.na(useful(obj)))) { + stop( + "The useful slot already has values in the Ped object", + " and reset is set to FALSE" + ) } - obj$ped$useful <- ifelse(obj$ped$id %in% useful, 1, 0) + obj@useful <- ifelse(id(obj) %in% useful, 1, 0) + validObject(obj) obj }) diff --git a/tests/testthat/test-useful_inds.R b/tests/testthat/test-useful_inds.R index 11eba20b..c5995b91 100644 --- a/tests/testthat/test-useful_inds.R +++ b/tests/testthat/test-useful_inds.R @@ -12,7 +12,7 @@ test_that("useful_inds works", { )[c("id", "num_child_tot")] df <- merge(sampleped, numdf) - use_id <- with(df, + use_id_avaff <- with(df, useful_inds(id, dadid, momid, avail, affected, num_child_tot) ) expect_equal(df$id[!df$id %in% use_id], @@ -23,15 +23,14 @@ test_that("useful_inds works", { test_that("useful_inds works with Pedigree", { data("sampleped") ped <- Pedigree(sampleped) - ped <- num_child(ped) + ped <- useful_inds(ped, informative = "Av") - expect_equal(ped(ped, "id")[!deriv(ped, "useful")], + expect_equal(id(ped(ped))[useful(ped(ped)) == 0], c("1_101", "1_102", "1_107", "1_108", "1_117") ) - expect_error(useful_inds(ped, informative = "AvOrAf")) + expect_snapshot_error(useful_inds(ped, informative = "AvOrAf")) ped <- useful_inds(ped, informative = "AvOrAf", reset = TRUE) - expect_equal(ped(ped, "id")[!deriv(ped, "useful")], c("1_101", "1_108")) + expect_equal(id(ped(ped))[useful(ped(ped)) == 0], c("1_101", "1_108")) }) -TRUE From cf7d5a78394655957debfe3dad6507b1b370ce89 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 17:50:10 +0100 Subject: [PATCH 062/111] Update all test All pass --- R/AllConstructor.R | 8 +- R/AllValidity.R | 4 +- R/norm_data.R | 6 +- R/num_child.R | 5 +- tests/testthat.R | 1 + .../testthat/_snaps/align/sampleped-norel.svg | 540 +++++++++--------- tests/testthat/_snaps/class.md | 28 +- tests/testthat/_snaps/is_informative.md | 4 + tests/testthat/_snaps/norm_data.md | 86 +-- tests/testthat/_snaps/ped_to_legdf.md | 88 +-- .../_snaps/ped_to_legdf/legend-alone.svg | 92 +-- .../_snaps/ped_to_legdf/plot-with-legend.svg | 2 +- tests/testthat/_snaps/plot.md | 511 ++++++----------- .../_snaps/plot/ped-2-affections-ggplot.svg | 162 +++--- .../plot/ped-simple-affection-ggplot.svg | 122 ++-- .../_snaps/shrink/pedigree-shrink-1.svg | 69 ++- .../_snaps/shrink/pedigree-shrink-2.svg | 87 ++- tests/testthat/_snaps/useful_inds.md | 4 + tests/testthat/test-align.R | 14 +- tests/testthat/test-class.R | 16 +- tests/testthat/test-is_informative.R | 10 +- tests/testthat/test-make_famid.R | 4 +- tests/testthat/test-num_child.R | 6 +- tests/testthat/test-plot.R | 7 +- tests/testthat/test-shrink.R | 2 +- tests/testthat/test-validity.R | 18 +- 26 files changed, 892 insertions(+), 1004 deletions(-) create mode 100644 tests/testthat/_snaps/is_informative.md create mode 100644 tests/testthat/_snaps/useful_inds.md diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 9eca50ae..a9abc803 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -59,7 +59,7 @@ setMethod("Ped", "data.frame", "famid", "steril", "status", "avail", "affected", "kin", "id_inf", "useful" ) - col_used <- c( + col_used <- c( "num_child_tot", "num_child_dir", "num_child_ind", "elementMetadata" ) @@ -460,7 +460,7 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, ped_df$available <- avail } if (any(!is.na(status))) { - ped_df$vitalstatus <- status + ped_df$vitalStatus <- status } if (any(!is.na(steril))) { ped_df$sterilisation <- steril @@ -490,7 +490,7 @@ setMethod("Pedigree", "data.frame", function( gender = numeric(), family = character(), available = numeric(), - vitalstatus = numeric(), + vitalStatus = numeric(), affection = numeric(), sterilisation = numeric() ), @@ -509,7 +509,7 @@ setMethod("Pedigree", "data.frame", function( "sterilisation" = "steril", "affection" = "affected", "available" = "avail", - "vitalstatus" = "status" + "vitalStatus" = "status" ), cols_ren_rel = list( "id1" = "indId1", diff --git a/R/AllValidity.R b/R/AllValidity.R index 17fbc039..c50825fc 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -48,8 +48,8 @@ check_slot_fd <- function(obj, slot = NULL, fields = character()) { ) } else if (any(!fields %in% array_names)) { paste0( - "`", paste0max(fields[!fields %in% array_names]), - "`", " column(s) is not present in slot ", slot, "." + paste0max(fields[!fields %in% array_names]), + " column(s) is not present in slot ", slot, "." ) } } diff --git a/R/norm_data.R b/R/norm_data.R index 9fb065cf..c932a807 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -92,7 +92,7 @@ norm_ped <- function( "error", "affected" ) cols_to_use <- c( - "available", "family", "sterilisation", "vitalstatus", "affection" + "available", "family", "sterilisation", "vitalStatus", "affection" ) ped_df <- check_columns( ped_df, cols_need, cols_used, cols_to_use, @@ -217,8 +217,8 @@ norm_ped <- function( ped_df$avail <- vect_to_binary(ped_df$available) } #### Status #### - if ("vitalstatus" %in% colnames(ped_df)) { - ped_df$status <- vect_to_binary(ped_df$vitalstatus) + if ("vitalStatus" %in% colnames(ped_df)) { + ped_df$status <- vect_to_binary(ped_df$vitalStatus) } #### Affected #### if ("affection" %in% colnames(ped_df)) { diff --git a/R/num_child.R b/R/num_child.R index 0f47db06..a16b3670 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -110,11 +110,12 @@ setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, df$num_child_dir <- id_child$num_child_dir[match(df$id, id_child$id)] # Number of total childs per individual - rel_child <- spouse_rel %>% + spouse_child <- spouse_rel %>% left_join(id_child, by = c("idmin" = "id")) %>% left_join(id_child, by = c("idmax" = "id"), suffix = c("_min", "_max") - ) %>% + ) + rel_child <- spouse_child %>% rowwise() %>% mutate(childs = list(unique(unlist( list(child_min, child_max) diff --git a/tests/testthat.R b/tests/testthat.R index 6d001372..f2100946 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -11,5 +11,6 @@ library(testthat) library(Pedixplorer) library(vdiffr) +withr::local_options(width = 150) test_check("Pedixplorer") TRUE diff --git a/tests/testthat/_snaps/align/sampleped-norel.svg b/tests/testthat/_snaps/align/sampleped-norel.svg index 26f56878..6bec8384 100644 --- a/tests/testthat/_snaps/align/sampleped-norel.svg +++ b/tests/testthat/_snaps/align/sampleped-norel.svg @@ -18,292 +18,280 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + 0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -1 -0 -1 -0 -0 -1 -1 -0 -1 -0 -1 -1 -1 -0 -0 -1 -1 -1 -1 -1 -0 -0 -1 -1 -0 -1 -1 -0 -0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 0 -0 -0 -0 -0 -0 +0 +0 +0 1 -105 +105 101 -209 -121 -106 -102 -109 -122 -107 -115 -129 -123 -108 -117 -130 -124 -135 -116 -131 -125 -136 -118 -132 -126 -201 -119 -133 -127 -202 -120 -134 -128 -103 -109 -104 -110 -137 -112 -138 -118 -203 -111 -204 -113 -205 -114 -206 -115 -207 -139 -209 -140 +109 +121 +106 +102 +129 +122 +107 +115 +130 +123 +108 +117 +131 +124 +135 +116 +132 +125 +136 +118 +133 +126 +201 +119 +134 +127 +202 +120 +109 +128 +103 +110 +104 +111 +137 +112 +138 +118 +203 +114 +204 +115 +205 +139 +206 +140 +207 +141 +209 +210 208 -141 -210 -211 -212 -213 +211 +212 +213 214 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/class.md b/tests/testthat/_snaps/class.md index d4aa3180..537c9dd4 100644 --- a/tests/testthat/_snaps/class.md +++ b/tests/testthat/_snaps/class.md @@ -8,14 +8,14 @@ ID5 ID5 female ID4 ID4 male - steril status avail affected num_child_total num_child_direct - - ID5 0 0 - ID4 0 0 - num_child_indirect - - ID5 0 - ID4 0 + steril status avail affected useful kin id_inf + + ID5 + ID4 + num_child_tot num_child_dir num_child_ind + + ID5 0 0 0 + ID4 0 0 0 # Rel class works @@ -46,16 +46,14 @@ # Scales class works - invalid class "Scales" object: 1: affected column(s) must be logical - invalid class "Scales" object: 2: angle column(s) must be numeric - invalid class "Scales" object: 3: order column(s) must be numeric - invalid class "Scales" object: 4: mods column(s) must be numeric - invalid class "Scales" object: 5: column_mods column(s) must be character + invalid class "Scales" object: 1: Fill slot affected column(s) must be logical + invalid class "Scales" object: 2: Fill slot angle, order, mods column(s) must be numeric + invalid class "Scales" object: 3: Fill slot column_mods column(s) must be character --- - invalid class "Scales" object: 1: labels column(s) must be character - invalid class "Scales" object: 2: mods column(s) must be numeric + invalid class "Scales" object: 1: Border slot labels column(s) must be character + invalid class "Scales" object: 2: Border slot mods column(s) must be numeric --- diff --git a/tests/testthat/_snaps/is_informative.md b/tests/testthat/_snaps/is_informative.md new file mode 100644 index 00000000..e581e1eb --- /dev/null +++ b/tests/testthat/_snaps/is_informative.md @@ -0,0 +1,4 @@ +# is_informative works with Pedigree + + The column test is not in the scales fill + diff --git a/tests/testthat/_snaps/norm_data.md b/tests/testthat/_snaps/norm_data.md index 5c600add..4193e7d5 100644 --- a/tests/testthat/_snaps/norm_data.md +++ b/tests/testthat/_snaps/norm_data.md @@ -14,53 +14,53 @@ 8 8 0 0 1 FALSE 0 3 D 9 8 2 0 2 FALSE 3 A 10 9 9 8 3 FALSE Ab 5 B - sex steril avail id dadid momid - 1 terminated 1 NA 1 3 4 - 2 male 0 1 2 0 0 - 3 male 0 0 3 8 7 - 4 female 0 NA 4 6 5 - 5 female 0 NA 5 0 0 - 6 male 0 0 6 0 - 7 male 0 NA 7 0 0 - 8 male 0 0 8 0 0 - 9 female 0 NA 8 2 0 - 10 unknown 0 NA 9 9 8 - error - 1 - 2 isSterilButIsParent - 3 fatherIdDuplicated - 4 - 5 - 6 isSterilButIsParent - 7 isMotherButNotFemale - 8 selfIdDuplicated_isMotherAndFather_isMotherButNotFemale - 9 selfIdDuplicated_oneParentMissing_isMotherAndFather_isFatherButNotMale - 10 motherIdDuplicated_isItsOwnParent_isFatherButNotMale - affected status family vitalStatus affection - 1 NA NA NA NA - 2 NA NA NA NA - 3 NA NA NA NA - 4 NA NA NA NA - 5 NA NA NA NA - 6 NA NA NA NA - 7 NA NA NA NA - 8 NA NA NA NA - 9 NA NA NA NA - 10 NA NA NA NA + sex steril status avail id dadid momid famid + 1 terminated 1 NA NA 1 3 4 + 2 male 0 NA 1 2 0 0 + 3 male 0 NA 0 3 8 7 + 4 female 0 NA NA 4 6 5 + 5 female 0 NA NA 5 0 0 + 6 male 0 NA 0 6 0 + 7 female 0 NA NA 7 0 0 + 8 female 0 NA 0 8 0 0 + 9 female 0 NA NA 8 2 0 + 10 male 0 NA NA 9 9 8 + error affected family + 1 NA + 2 isSterilButIsParent NA + 3 fatherIdDuplicated NA + 4 NA + 5 NA + 6 oneParentMissing_isSterilButIsParent NA + 7 NA + 8 selfIdDuplicated_isMotherAndFather_isFatherButNotMale NA + 9 selfIdDuplicated_isMotherAndFather_isFatherButNotMale NA + 10 motherIdDuplicated_isItsOwnParent NA + vitalStatus affection + 1 NA NA + 2 NA NA + 3 NA NA + 4 NA NA + 5 NA NA + 6 NA NA + 7 NA NA + 8 NA NA + 9 NA NA + 10 NA NA # Norm rel Code rel_df Output - indId1 indId2 code family id1 id2 error - 1 1 2 MZ twin 1 1_1 1_2 - 2 1 3 DZ twin 1 1_1 1_3 - 3 2 3 UZ twin 1 1_2 1_3 - 4 1 2 Spouse 2 2_1 2_2 - 5 3 4 MZ twin 2 2_3 2_4 - 6 6 7 2 2_6 2_7 CodeNotRecognise - 7 8 8 Spouse 2 2_8 2_8 SameId - 8 9 0 Spouse 1 1_9 0 - 9 B 1 1_B indId1length0_CodeNotRecognise + id1 id2 code famid error + 1 1 2 MZ twin + 2 1 3 DZ twin + 3 2 3 UZ twin + 4 1 2 Spouse + 5 3 4 MZ twin + 6 6 7 CodeNotRecognise + 7 8 8 Spouse SameId + 8 9 0 Spouse + 9 B indId1length0_CodeNotRecognise diff --git a/tests/testthat/_snaps/ped_to_legdf.md b/tests/testthat/_snaps/ped_to_legdf.md index c905a9a6..aefbd381 100644 --- a/tests/testthat/_snaps/ped_to_legdf.md +++ b/tests/testthat/_snaps/ped_to_legdf.md @@ -6,59 +6,59 @@ $leg_df id x0 y0 x1 y1 type fill border angle 1 titles 0.20000 0.0 NA NA text black NA - 2 titles 4.40000 0.0 NA NA text black NA - 3 titles 9.03750 0.0 NA NA text black NA - 4 titles 14.39375 0.0 NA NA text black NA - 5 titles 19.75000 0.0 NA NA text black NA + 2 titles 4.46750 0.0 NA NA text black NA + 3 titles 9.20250 0.0 NA NA text black NA + 4 titles 14.56333 0.0 NA NA text black NA + 5 titles 19.92417 0.0 NA NA text black NA 6 sex 0.00000 1.0 NA NA square_1_1 white black NA 7 sex 0.00000 3.0 NA NA circle_1_1 white black NA 8 sex_label 1.20000 1.5 NA NA text black NA 9 sex_label 1.20000 3.5 NA NA text black NA - 10 border 4.20000 1.0 NA NA square_1_1 white black NA - 11 border 4.20000 3.0 NA NA square_1_1 white green NA - 12 border_label 5.40000 1.5 NA NA text black NA - 13 border_label 5.40000 3.5 NA NA text black NA - 14 aff_bkg_1_0 8.83750 1.0 NA NA square_1_1 white black NA - 15 aff_bkg_1_1 8.83750 3.0 NA NA square_1_1 white black NA - 16 aff_bkg_1_NA 8.83750 5.0 NA NA square_1_1 white black NA - 17 affected_1_0 8.83750 1.0 NA NA square_3_1 white black NA - 18 affected_1_1 8.83750 3.0 NA NA square_3_1 red black NA - 19 affected_1_NA 8.83750 5.0 NA NA square_3_1 grey black NA - 20 affected_label_1_0 10.03750 1.5 NA NA text black NA - 21 affected_label_1_1 10.03750 3.5 NA NA text black NA - 22 affected_label_1_NA 10.03750 5.5 NA NA text black NA - 23 aff_bkg_2_0 14.19375 1.0 NA NA square_1_1 white black NA - 24 aff_bkg_2_1 14.19375 3.0 NA NA square_1_1 white black NA - 25 affected_2_0 14.19375 1.0 NA NA square_3_2 white black NA - 26 affected_2_1 14.19375 3.0 NA NA square_3_2 red black NA - 27 affected_label_2_0 15.39375 1.5 NA NA text black NA - 28 affected_label_2_1 15.39375 3.5 NA NA text black NA - 29 aff_bkg_3_1 19.55000 1.0 NA NA square_1_1 white black NA - 30 aff_bkg_3_2 19.55000 3.0 NA NA square_1_1 white black NA - 31 aff_bkg_3_3 19.55000 5.0 NA NA square_1_1 white black NA - 32 aff_bkg_3_4 19.55000 7.0 NA NA square_1_1 white black NA - 33 aff_bkg_3_5 19.55000 9.0 NA NA square_1_1 white black NA - 34 aff_bkg_3_6 19.55000 11.0 NA NA square_1_1 white black NA - 35 affected_3_1 19.55000 1.0 NA NA square_3_3 #FFFFFF black NA - 36 affected_3_2 19.55000 3.0 NA NA square_3_3 #9AB1C4 black NA - 37 affected_3_3 19.55000 5.0 NA NA square_3_3 #36648B black NA - 38 affected_3_4 19.55000 7.0 NA NA square_3_3 #FFC0CB black NA - 39 affected_3_5 19.55000 9.0 NA NA square_3_3 #CF70DD black NA - 40 affected_3_6 19.55000 11.0 NA NA square_3_3 #A020F0 black NA - 41 affected_label_3_1 20.75000 1.5 NA NA text black NA - 42 affected_label_3_2 20.75000 3.5 NA NA text black NA - 43 affected_label_3_3 20.75000 5.5 NA NA text black NA - 44 affected_label_3_4 20.75000 7.5 NA NA text black NA - 45 affected_label_3_5 20.75000 9.5 NA NA text black NA - 46 affected_label_3_6 20.75000 11.5 NA NA text black NA + 10 border 4.26750 1.0 NA NA square_1_1 white black NA + 11 border 4.26750 3.0 NA NA square_1_1 white green NA + 12 border_label 5.46750 1.5 NA NA text black NA + 13 border_label 5.46750 3.5 NA NA text black NA + 14 aff_bkg_1_0 9.00250 1.0 NA NA square_1_1 white black NA + 15 aff_bkg_1_1 9.00250 3.0 NA NA square_1_1 white black NA + 16 aff_bkg_1_NA 9.00250 5.0 NA NA square_1_1 white black NA + 17 affected_1_0 9.00250 1.0 NA NA square_3_1 white black NA + 18 affected_1_1 9.00250 3.0 NA NA square_3_1 red black NA + 19 affected_1_NA 9.00250 5.0 NA NA square_3_1 grey black NA + 20 affected_label_1_0 10.20250 1.5 NA NA text black NA + 21 affected_label_1_1 10.20250 3.5 NA NA text black NA + 22 affected_label_1_NA 10.20250 5.5 NA NA text black NA + 23 aff_bkg_2_0 14.36333 1.0 NA NA square_1_1 white black NA + 24 aff_bkg_2_1 14.36333 3.0 NA NA square_1_1 white black NA + 25 affected_2_0 14.36333 1.0 NA NA square_3_2 white black NA + 26 affected_2_1 14.36333 3.0 NA NA square_3_2 red black NA + 27 affected_label_2_0 15.56333 1.5 NA NA text black NA + 28 affected_label_2_1 15.56333 3.5 NA NA text black NA + 29 aff_bkg_3_1 19.72417 1.0 NA NA square_1_1 white black NA + 30 aff_bkg_3_2 19.72417 3.0 NA NA square_1_1 white black NA + 31 aff_bkg_3_3 19.72417 5.0 NA NA square_1_1 white black NA + 32 aff_bkg_3_4 19.72417 7.0 NA NA square_1_1 white black NA + 33 aff_bkg_3_5 19.72417 9.0 NA NA square_1_1 white black NA + 34 aff_bkg_3_6 19.72417 11.0 NA NA square_1_1 white black NA + 35 affected_3_1 19.72417 1.0 NA NA square_3_3 #FFFFFF black NA + 36 affected_3_2 19.72417 3.0 NA NA square_3_3 #9AB1C4 black NA + 37 affected_3_3 19.72417 5.0 NA NA square_3_3 #36648B black NA + 38 affected_3_4 19.72417 7.0 NA NA square_3_3 #FFC0CB black NA + 39 affected_3_5 19.72417 9.0 NA NA square_3_3 #CF70DD black NA + 40 affected_3_6 19.72417 11.0 NA NA square_3_3 #A020F0 black NA + 41 affected_label_3_1 20.92417 1.5 NA NA text black NA + 42 affected_label_3_2 20.92417 3.5 NA NA text black NA + 43 affected_label_3_3 20.92417 5.5 NA NA text black NA + 44 affected_label_3_4 20.92417 7.5 NA NA text black NA + 45 affected_label_3_5 20.92417 9.5 NA NA text black NA + 46 affected_label_3_6 20.92417 11.5 NA NA text black NA 47 max_lim 0.00000 0.0 NA NA text black NA - 48 max_lim 26.06250 11.0 NA NA text black NA + 48 max_lim 26.30875 11.0 NA NA text black NA density cex label tips adjx adjy 1 NA 1.2 Sex 0 1 2 NA 1.2 Border 0 1 3 NA 1.2 affection 0 1 4 NA 1.2 avail 0 1 - 5 NA 1.2 indId 0 1 + 5 NA 1.2 val_num 0 1 6 NA NA NA NA 7 NA NA NA NA 8 NA 0.8 Male 0 1 @@ -114,7 +114,7 @@ [1] 0.8 $par_usr$usr - [1] 0.0000 26.0625 0.0000 11.5000 + [1] 0.00000 26.30875 0.00000 11.50000 diff --git a/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg b/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg index cf842e6e..d029dd0a 100644 --- a/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg +++ b/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg @@ -25,51 +25,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -Sex -Border -affection -avail -indId -Male -Female -Non Available -Available -Healthy <= to 0.5 -Affected > to 0.5 -NA -Healthy <= to 0.5 -Affected > to 0.5 -Healthy <= to 115 : [101,106] -Healthy <= to 115 : (106,110] -Healthy <= to 115 : (110,115] -Affected > to 115 : [116,124] -Affected > to 115 : (124,133] -Affected > to 115 : (133,141] + + + + + + + + + + + + + + + + + + + + + + + + + + +Sex +Border +affection +avail +val_num +Male +Female +Non Available +Available +Healthy <= to 0.5 +Affected > to 0.5 +NA +Healthy <= to 0.5 +Affected > to 0.5 +Healthy <= to 115 : [101,106] +Healthy <= to 115 : (106,110] +Healthy <= to 115 : (110,115] +Affected > to 115 : [116,124] +Affected > to 115 : (124,133] +Affected > to 115 : (133,141] diff --git a/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg b/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg index de578bab..d5d80e47 100644 --- a/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg +++ b/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg @@ -314,7 +314,7 @@ Border affection avail -indId +val_num Male Female Non Available diff --git a/tests/testthat/_snaps/plot.md b/tests/testthat/_snaps/plot.md index 69bd859c..1d47eb7b 100644 --- a/tests/testthat/_snaps/plot.md +++ b/tests/testthat/_snaps/plot.md @@ -1,346 +1,179 @@ -# Pedigree other test +# Pedigree plotting test Code lst Output $df - id x0 - 1 polygon 1.000000e+00 - 2 polygon 1.619369e-08 - 3 polygon 7.071068e-01 - 4 polygon 1.207107e+00 - 5 polygon 2.000000e+00 - 6 polygon 1.000000e+00 - 7 polygon 1.707107e+00 - 8 polygon 2.000000e+00 - 9 polygon 2.707107e+00 - 10 polygon 3.000000e+00 - 11 aff_mark 9.908138e-01 - 12 aff_mark -9.186207e-03 - 13 aff_mark 6.979205e-01 - 14 aff_mark 1.197921e+00 - 15 aff_mark 1.990814e+00 - 16 aff_mark 9.908138e-01 - 17 aff_mark 1.697921e+00 - 18 aff_mark 1.990814e+00 - 19 aff_mark 2.697921e+00 - 20 aff_mark 2.990814e+00 - 21 polygon 1.000000e+00 - 22 polygon 1.619369e-08 - 23 polygon 7.071068e-01 - 24 polygon 1.207107e+00 - 25 polygon 2.000000e+00 - 26 polygon 1.000000e+00 - 27 polygon 1.707107e+00 - 28 polygon 2.000000e+00 - 29 polygon 2.707107e+00 - 30 polygon 3.000000e+00 - 31 aff_mark 1.009186e+00 - 32 aff_mark 9.186239e-03 - 33 aff_mark 7.162930e-01 - 34 aff_mark 1.216293e+00 - 35 aff_mark 2.009186e+00 - 36 aff_mark 1.009186e+00 - 37 aff_mark 1.716293e+00 - 38 aff_mark 2.009186e+00 - 39 aff_mark 2.716293e+00 - 40 aff_mark 3.009186e+00 - 41 dead 9.779530e-01 - 42 dead -2.204692e-02 - 43 dead 1.977953e+00 - 44 dead 9.779531e-01 - 45 id 1.000000e+00 - 46 id 1.619369e-08 - 47 id 7.071068e-01 - 48 id 1.207107e+00 - 49 id 2.000000e+00 - 50 id 1.000000e+00 - 51 id 1.707107e+00 - 52 id 2.000000e+00 - 53 id 2.707107e+00 - 54 id 3.000000e+00 - 55 line_spouses 1.018372e+00 - 56 line_spouses 1.837246e-02 - 57 line_spouses 7.254792e-01 - 58 line_spouses 2.018372e+00 - 59 line_spouses2 7.254792e-01 - 60 line_children_vertical 1.619369e-08 - 61 line_children_vertical 3.000000e+00 - 62 line_children_horizontal 1.619369e-08 - 63 line_parent_mid 1.500000e+00 - 64 line_parent_mid 1.500000e+00 - 65 line_parent_mid 1.500000e+00 - 66 line_children_vertical 7.071068e-01 - 67 line_children_horizontal 7.071068e-01 - 68 line_parent_mid 7.071068e-01 - 69 line_parent_mid 7.071068e-01 - 70 line_parent_mid 5.000000e-01 - 71 line_children_vertical 1.707107e+00 - 72 line_children_vertical 2.707107e+00 - 73 label_children_twin3 2.207107e+00 - 74 line_children_horizontal 2.207107e+00 - 75 line_parent_mid 2.207107e+00 - 76 line_parent_mid 2.207107e+00 - 77 line_parent_mid 2.500000e+00 - 78 line_children_vertical 1.207107e+00 - 79 line_children_horizontal 1.207107e+00 - 80 line_parent_mid 1.207107e+00 - 81 line_parent_mid 1.207107e+00 - 82 line_parent_mid 1.207107e+00 - y0 x1 y1 type - 1 1.000000 NA NA square_2_1 - 2 2.000000 NA NA square_2_1 - 3 3.000000 NA NA circle_2_1 - 4 4.000000 NA NA circle_2_1 - 5 1.000000 NA NA circle_2_1 - 6 2.000000 NA NA circle_2_1 - 7 3.000000 NA NA square_2_1 - 8 2.000000 NA NA square_2_1 - 9 3.000000 NA NA square_2_1 - 10 2.000000 NA NA circle_2_1 - 11 1.022312 NA NA text - 12 2.022312 NA NA text - 13 3.022312 NA NA text - 14 4.022312 NA NA text - 15 1.022312 NA NA text - 16 2.022312 NA NA text - 17 3.022312 NA NA text - 18 2.022312 NA NA text - 19 3.022312 NA NA text - 20 2.022312 NA NA text - 21 1.000000 NA NA square_2_2 - 22 2.000000 NA NA square_2_2 - 23 3.000000 NA NA circle_2_2 - 24 4.000000 NA NA circle_2_2 - 25 1.000000 NA NA circle_2_2 - 26 2.000000 NA NA circle_2_2 - 27 3.000000 NA NA square_2_2 - 28 2.000000 NA NA square_2_2 - 29 3.000000 NA NA square_2_2 - 30 2.000000 NA NA circle_2_2 - 31 1.022312 NA NA text - 32 2.022312 NA NA text - 33 3.022312 NA NA text - 34 4.022312 NA NA text - 35 1.022312 NA NA text - 36 2.022312 NA NA text - 37 3.022312 NA NA text - 38 2.022312 NA NA text - 39 3.022312 NA NA text - 40 2.022312 NA NA text - 41 1.049086 1.022047e+00 0.9955376 segments - 42 2.049086 2.204695e-02 1.9955376 segments - 43 1.049086 2.022047e+00 0.9955376 segments - 44 2.049086 1.022047e+00 1.9955376 segments - 45 1.100849 NA NA text - 46 2.100849 NA NA text - 47 3.100849 NA NA text - 48 4.100849 NA NA text - 49 1.100849 NA NA text - 50 2.100849 NA NA text - 51 3.100849 NA NA text - 52 2.100849 NA NA text - 53 3.100849 NA NA text - 54 2.100849 NA NA text - 55 1.022312 1.981628e+00 1.0223118 segments - 56 2.022312 9.816276e-01 2.0223118 segments - 57 3.022312 1.688734e+00 3.0223118 segments - 58 2.022312 2.981628e+00 2.0223118 segments - 59 3.026774 1.688734e+00 3.0267742 segments - 60 2.000000 1.619369e-08 1.9330646 segments - 61 2.000000 3.000000e+00 1.9330646 segments - 62 1.933065 3.000000e+00 1.9330646 segments - 63 1.933065 1.500000e+00 1.6598388 segments - 64 1.659839 1.500000e+00 1.2955376 segments - 65 1.295538 1.500000e+00 1.0223118 segments - 66 3.000000 7.071068e-01 2.9330646 segments - 67 2.933065 7.071068e-01 2.9330646 segments - 68 2.933065 7.071068e-01 2.6598388 segments - 69 2.659839 5.000000e-01 2.2955376 segments - 70 2.295538 5.000000e-01 2.0223118 segments - 71 3.000000 2.207107e+00 2.9330646 segments - 72 3.000000 2.207107e+00 2.9330646 segments - 73 2.966532 NA NA text - 74 2.933065 2.207107e+00 2.9330646 segments - 75 2.933065 2.207107e+00 2.6598388 segments - 76 2.659839 2.500000e+00 2.2955376 segments - 77 2.295538 2.500000e+00 2.0223118 segments - 78 4.000000 1.207107e+00 3.9330646 segments - 79 3.933065 1.207107e+00 3.9330646 segments - 80 3.933065 1.207107e+00 3.6598388 segments - 81 3.659839 1.207107e+00 3.2955376 segments - 82 3.295538 1.207107e+00 3.0223118 segments - fill border angle density cex label tips - 1 red black NA NA NA - 2 white green NA NA NA - 3 white black NA NA NA - 4 white black NA NA NA - 5 white green NA NA NA - 6 red green NA NA NA - 7 red green NA NA NA - 8 white green NA NA NA - 9 white green NA NA NA - 10 red black NA NA NA - 11 black NA NA 0.5 1 - 12 black NA NA 0.5 0 - 13 black NA NA 0.5 0 - 14 black NA NA 0.5 0 - 15 black NA NA 0.5 0 - 16 black NA NA 0.5 1 - 17 black NA NA 0.5 1 - 18 black NA NA 0.5 0 - 19 black NA NA 0.5 0 - 20 black NA NA 0.5 1 - 21 white black NA NA NA - 22 white green NA NA NA - 23 #c300ff black NA NA NA - 24 white black NA NA NA - 25 grey green NA NA NA - 26 #c300ff green NA NA NA - 27 white green NA NA NA - 28 #c300ff green NA NA NA - 29 white green NA NA NA - 30 white black NA NA NA - 31 black NA NA 0.5 0 - 32 black NA NA 0.5 0 - 33 black NA NA 0.5 1 - 34 black NA NA 0.5 0 - 35 black NA NA 0.5 - 36 black NA NA 0.5 1 - 37 black NA NA 0.5 0 - 38 black NA NA 0.5 1 - 39 black NA NA 0.5 0 - 40 black NA NA 0.5 0 - 41 black NA NA 0.5 - 42 black NA NA 0.5 - 43 black NA NA 0.5 - 44 black NA NA 0.5 - 45 black NA NA 0.5 1_1 - 46 black NA NA 0.5 1_3 - 47 black NA NA 0.5 1_7 - 48 black NA NA 0.5 1_10 - 49 black NA NA 0.5 1_2 - 50 black NA NA 0.5 1_5 - 51 black NA NA 0.5 1_8 - 52 black NA NA 0.5 1_6 - 53 black NA NA 0.5 1_9 - 54 black NA NA 0.5 1_4 - 55 black NA NA 0.5 - 56 black NA NA 0.5 - 57 black NA NA 0.5 - 58 black NA NA 0.5 - 59 black NA NA 0.5 - 60 black NA NA 0.5 - 61 black NA NA 0.5 - 62 black NA NA 0.5 - 63 black NA NA 0.5 - 64 black NA NA 0.5 - 65 black NA NA 0.5 - 66 black NA NA 0.5 - 67 black NA NA 0.5 - 68 black NA NA 0.5 - 69 black NA NA 0.5 - 70 black NA NA 0.5 - 71 black NA NA 0.5 - 72 black NA NA 0.5 - 73 black NA NA 0.5 ? - 74 black NA NA 0.5 - 75 black NA NA 0.5 - 76 black NA NA 0.5 - 77 black NA NA 0.5 - 78 black NA NA 0.5 - 79 black NA NA 0.5 - 80 black NA NA 0.5 - 81 black NA NA 0.5 - 82 black NA NA 0.5 - adjx adjy - 1 NA NA - 2 NA NA - 3 NA NA - 4 NA NA - 5 NA NA - 6 NA NA - 7 NA NA - 8 NA NA - 9 NA NA - 10 NA NA - 11 NA NA - 12 NA NA - 13 NA NA - 14 NA NA - 15 NA NA - 16 NA NA - 17 NA NA - 18 NA NA - 19 NA NA - 20 NA NA - 21 NA NA - 22 NA NA - 23 NA NA - 24 NA NA - 25 NA NA - 26 NA NA - 27 NA NA - 28 NA NA - 29 NA NA - 30 NA NA - 31 NA NA - 32 NA NA - 33 NA NA - 34 NA NA - 35 NA NA - 36 NA NA - 37 NA NA - 38 NA NA - 39 NA NA - 40 NA NA - 41 NA NA - 42 NA NA - 43 NA NA - 44 NA NA - 45 NA NA - 46 NA NA - 47 NA NA - 48 NA NA - 49 NA NA - 50 NA NA - 51 NA NA - 52 NA NA - 53 NA NA - 54 NA NA - 55 NA NA - 56 NA NA - 57 NA NA - 58 NA NA - 59 NA NA - 60 NA NA - 61 NA NA - 62 NA NA - 63 NA NA - 64 NA NA - 65 NA NA - 66 NA NA - 67 NA NA - 68 NA NA - 69 NA NA - 70 NA NA - 71 NA NA - 72 NA NA - 73 NA NA - 74 NA NA - 75 NA NA - 76 NA NA - 77 NA NA - 78 NA NA - 79 NA NA - 80 NA NA - 81 NA NA - 82 NA NA + id x0 y0 x1 y1 + 1 polygon 1.000000e+00 1.000000 NA NA + 2 polygon 1.619369e-08 2.000000 NA NA + 3 polygon 7.071068e-01 3.000000 NA NA + 4 polygon 1.207107e+00 4.000000 NA NA + 5 polygon 2.000000e+00 1.000000 NA NA + 6 polygon 1.000000e+00 2.000000 NA NA + 7 polygon 1.707107e+00 3.000000 NA NA + 8 polygon 2.000000e+00 2.000000 NA NA + 9 polygon 2.707107e+00 3.000000 NA NA + 10 polygon 3.000000e+00 2.000000 NA NA + 11 aff_mark 9.939365e-01 1.013154 NA NA + 12 aff_mark -6.063453e-03 2.013154 NA NA + 13 aff_mark 7.010433e-01 3.013154 NA NA + 14 aff_mark 1.201043e+00 4.013154 NA NA + 15 aff_mark 1.993937e+00 1.013154 NA NA + 16 aff_mark 9.939365e-01 2.013154 NA NA + 17 aff_mark 1.701043e+00 3.013154 NA NA + 18 aff_mark 1.993937e+00 2.013154 NA NA + 19 aff_mark 2.701043e+00 3.013154 NA NA + 20 aff_mark 2.993937e+00 2.013154 NA NA + 21 polygon 1.000000e+00 1.000000 NA NA + 22 polygon 1.619369e-08 2.000000 NA NA + 23 polygon 7.071068e-01 3.000000 NA NA + 24 polygon 1.207107e+00 4.000000 NA NA + 25 polygon 2.000000e+00 1.000000 NA NA + 26 polygon 1.000000e+00 2.000000 NA NA + 27 polygon 1.707107e+00 3.000000 NA NA + 28 polygon 2.000000e+00 2.000000 NA NA + 29 polygon 2.707107e+00 3.000000 NA NA + 30 polygon 3.000000e+00 2.000000 NA NA + 31 aff_mark 1.006063e+00 1.013154 NA NA + 32 aff_mark 6.063485e-03 2.013154 NA NA + 33 aff_mark 7.131702e-01 3.013154 NA NA + 34 aff_mark 1.213170e+00 4.013154 NA NA + 35 aff_mark 2.006063e+00 1.013154 NA NA + 36 aff_mark 1.006063e+00 2.013154 NA NA + 37 aff_mark 1.713170e+00 3.013154 NA NA + 38 aff_mark 2.006063e+00 2.013154 NA NA + 39 aff_mark 2.713170e+00 3.013154 NA NA + 40 aff_mark 3.006063e+00 2.013154 NA NA + 41 dead 9.854476e-01 1.028940 1.014552e+00 0.9973691 + 42 dead -1.455231e-02 2.028940 1.455234e-02 1.9973691 + 43 dead 1.985448e+00 1.028940 2.014552e+00 0.9973691 + 44 dead 9.854477e-01 2.028940 1.014552e+00 1.9973691 + 45 id 1.000000e+00 1.052769 NA NA + 46 id 1.619369e-08 2.052769 NA NA + 47 id 7.071068e-01 3.052769 NA NA + 48 id 1.207107e+00 4.052769 NA NA + 49 id 2.000000e+00 1.052769 NA NA + 50 id 1.000000e+00 2.052769 NA NA + 51 id 1.707107e+00 3.052769 NA NA + 52 id 2.000000e+00 2.052769 NA NA + 53 id 2.707107e+00 3.052769 NA NA + 54 id 3.000000e+00 2.052769 NA NA + 55 line_spouses 1.012127e+00 1.013154 1.987873e+00 1.0131545 + 56 line_spouses 1.212695e-02 2.013154 9.878731e-01 2.0131545 + 57 line_spouses 7.192337e-01 3.013154 1.694980e+00 3.0131545 + 58 line_spouses 2.012127e+00 2.013154 2.987873e+00 2.0131545 + 59 line_spouses2 7.192337e-01 3.015785 1.694980e+00 3.0157854 + 60 line_children_vertical 1.619369e-08 2.000000 1.619369e-08 1.9605366 + 61 line_children_vertical 3.000000e+00 2.000000 3.000000e+00 1.9605366 + 62 line_children_horizontal 1.619369e-08 1.960537 3.000000e+00 1.9605366 + 63 line_parent_mid 1.500000e+00 1.960537 1.500000e+00 1.6763220 + 64 line_parent_mid 1.500000e+00 1.676322 1.500000e+00 1.2973691 + 65 line_parent_mid 1.500000e+00 1.297369 1.500000e+00 1.0131545 + 66 line_children_vertical 7.071068e-01 3.000000 7.071068e-01 2.9605366 + 67 line_children_horizontal 7.071068e-01 2.960537 7.071068e-01 2.9605366 + 68 line_parent_mid 7.071068e-01 2.960537 7.071068e-01 2.6763220 + 69 line_parent_mid 7.071068e-01 2.676322 5.000000e-01 2.2973691 + 70 line_parent_mid 5.000000e-01 2.297369 5.000000e-01 2.0131545 + 71 line_children_vertical 1.707107e+00 3.000000 2.207107e+00 2.9605366 + 72 line_children_vertical 2.707107e+00 3.000000 2.207107e+00 2.9605366 + 73 label_children_twin3 2.207107e+00 2.980268 NA NA + 74 line_children_horizontal 2.207107e+00 2.960537 2.207107e+00 2.9605366 + 75 line_parent_mid 2.207107e+00 2.960537 2.207107e+00 2.6763220 + 76 line_parent_mid 2.207107e+00 2.676322 2.500000e+00 2.2973691 + 77 line_parent_mid 2.500000e+00 2.297369 2.500000e+00 2.0131545 + 78 line_children_vertical 1.207107e+00 4.000000 1.207107e+00 3.9605366 + 79 line_children_horizontal 1.207107e+00 3.960537 1.207107e+00 3.9605366 + 80 line_parent_mid 1.207107e+00 3.960537 1.207107e+00 3.6763220 + 81 line_parent_mid 1.207107e+00 3.676322 1.207107e+00 3.2973691 + 82 line_parent_mid 1.207107e+00 3.297369 1.207107e+00 3.0131545 + type fill border angle density cex label tips adjx adjy + 1 square_2_1 red black NA NA NA NA NA + 2 square_2_1 white green NA NA NA NA NA + 3 circle_2_1 white black NA NA NA NA NA + 4 circle_2_1 white black NA NA NA NA NA + 5 circle_2_1 white green NA NA NA NA NA + 6 circle_2_1 red green NA NA NA NA NA + 7 square_2_1 red green NA NA NA NA NA + 8 square_2_1 white green NA NA NA NA NA + 9 square_2_1 white green NA NA NA NA NA + 10 circle_2_1 red black NA NA NA NA NA + 11 text black NA NA 0.5 1 NA NA + 12 text black NA NA 0.5 0 NA NA + 13 text black NA NA 0.5 0 NA NA + 14 text black NA NA 0.5 0 NA NA + 15 text black NA NA 0.5 0 NA NA + 16 text black NA NA 0.5 1 NA NA + 17 text black NA NA 0.5 1 NA NA + 18 text black NA NA 0.5 0 NA NA + 19 text black NA NA 0.5 0 NA NA + 20 text black NA NA 0.5 1 NA NA + 21 square_2_2 white black NA NA NA NA NA + 22 square_2_2 white green NA NA NA NA NA + 23 circle_2_2 #c300ff black NA NA NA NA NA + 24 circle_2_2 white black NA NA NA NA NA + 25 circle_2_2 grey green NA NA NA NA NA + 26 circle_2_2 #c300ff green NA NA NA NA NA + 27 square_2_2 white green NA NA NA NA NA + 28 square_2_2 #c300ff green NA NA NA NA NA + 29 square_2_2 white green NA NA NA NA NA + 30 circle_2_2 white black NA NA NA NA NA + 31 text black NA NA 0.5 0 NA NA + 32 text black NA NA 0.5 0 NA NA + 33 text black NA NA 0.5 1 NA NA + 34 text black NA NA 0.5 0 NA NA + 35 text black NA NA 0.5 NA NA + 36 text black NA NA 0.5 1 NA NA + 37 text black NA NA 0.5 0 NA NA + 38 text black NA NA 0.5 1 NA NA + 39 text black NA NA 0.5 0 NA NA + 40 text black NA NA 0.5 0 NA NA + 41 segments black NA NA 0.5 NA NA + 42 segments black NA NA 0.5 NA NA + 43 segments black NA NA 0.5 NA NA + 44 segments black NA NA 0.5 NA NA + 45 text black NA NA 0.5 1_1 NA NA + 46 text black NA NA 0.5 1_3 NA NA + 47 text black NA NA 0.5 1_7 NA NA + 48 text black NA NA 0.5 1_10 NA NA + 49 text black NA NA 0.5 1_2 NA NA + 50 text black NA NA 0.5 1_5 NA NA + 51 text black NA NA 0.5 1_8 NA NA + 52 text black NA NA 0.5 1_6 NA NA + 53 text black NA NA 0.5 1_9 NA NA + 54 text black NA NA 0.5 1_4 NA NA + 55 segments black NA NA 0.5 NA NA + 56 segments black NA NA 0.5 NA NA + 57 segments black NA NA 0.5 NA NA + 58 segments black NA NA 0.5 NA NA + 59 segments black NA NA 0.5 NA NA + 60 segments black NA NA 0.5 NA NA + 61 segments black NA NA 0.5 NA NA + 62 segments black NA NA 0.5 NA NA + 63 segments black NA NA 0.5 NA NA + 64 segments black NA NA 0.5 NA NA + 65 segments black NA NA 0.5 NA NA + 66 segments black NA NA 0.5 NA NA + 67 segments black NA NA 0.5 NA NA + 68 segments black NA NA 0.5 NA NA + 69 segments black NA NA 0.5 NA NA + 70 segments black NA NA 0.5 NA NA + 71 segments black NA NA 0.5 NA NA + 72 segments black NA NA 0.5 NA NA + 73 text black NA NA 0.5 ? NA NA + 74 segments black NA NA 0.5 NA NA + 75 segments black NA NA 0.5 NA NA + 76 segments black NA NA 0.5 NA NA + 77 segments black NA NA 0.5 NA NA + 78 segments black NA NA 0.5 NA NA + 79 segments black NA NA 0.5 NA NA + 80 segments black NA NA 0.5 NA NA + 81 segments black NA NA 0.5 NA NA + 82 segments black NA NA 0.5 NA NA $par_usr $par_usr$usr - [1] -0.01837243 3.01837246 4.15399860 - [4] 1.00000000 + [1] -0.01212692 3.01212695 4.11605893 1.00000000 $par_usr$old_par $par_usr$old_par$xpd @@ -348,16 +181,16 @@ $par_usr$boxw - [1] 0.03674489 + [1] 0.02425388 $par_usr$boxh - [1] 0.0446236 + [1] 0.02630893 $par_usr$labh - [1] 0.04685478 + [1] 0.02205037 $par_usr$legh - [1] 0.0669354 + [1] 0.0394634 diff --git a/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg b/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg index 61f8ab3a..47fb68ce 100644 --- a/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg +++ b/tests/testthat/_snaps/plot/ped-2-affections-ggplot.svg @@ -27,87 +27,87 @@ - - - - - - - - - - - - - - - - - - - - -1 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1_1 -1_3 -1_7 -1_10 -1_2 -1_5 -1_8 -1_6 -1_9 -1_4 -? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1_1 +1_3 +1_7 +1_10 +1_2 +1_5 +1_8 +1_6 +1_9 +1_4 +? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pedigree diff --git a/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg b/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg index 5a4534c7..87854e5b 100644 --- a/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg +++ b/tests/testthat/_snaps/plot/ped-simple-affection-ggplot.svg @@ -27,67 +27,67 @@ - - - - - - - - - - -1_1 -1_3 -1_7 -1_10 -1_2 -1_5 -1_8 -1_6 -1_9 -1_4 -0 -0 -1 -0 -1 -0 -1 -0 -0 -? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + +1_1 +1_3 +1_7 +1_10 +1_2 +1_5 +1_8 +1_6 +1_9 +1_4 +0 +0 +1 +0 +1 +0 +1 +0 +0 +? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/shrink/pedigree-shrink-1.svg b/tests/testthat/_snaps/shrink/pedigree-shrink-1.svg index 2ff3ec03..3ac05063 100644 --- a/tests/testthat/_snaps/shrink/pedigree-shrink-1.svg +++ b/tests/testthat/_snaps/shrink/pedigree-shrink-1.svg @@ -18,33 +18,56 @@ - - - + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - - - + + + + + + + +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 5_44 5_70 5_46 diff --git a/tests/testthat/_snaps/shrink/pedigree-shrink-2.svg b/tests/testthat/_snaps/shrink/pedigree-shrink-2.svg index 679635af..ada83a66 100644 --- a/tests/testthat/_snaps/shrink/pedigree-shrink-2.svg +++ b/tests/testthat/_snaps/shrink/pedigree-shrink-2.svg @@ -18,36 +18,65 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 8_135 8_161 8_137 diff --git a/tests/testthat/_snaps/useful_inds.md b/tests/testthat/_snaps/useful_inds.md new file mode 100644 index 00000000..ea421f19 --- /dev/null +++ b/tests/testthat/_snaps/useful_inds.md @@ -0,0 +1,4 @@ +# useful_inds works with Pedigree + + The useful slot already has values in the Ped object and reset is set to FALSE + diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 930bba2c..6680b2b8 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -56,11 +56,11 @@ test_that("test alignment with inbreeding and relationship matrix", { id2 = c(110, 114, 132, 109), code = c(1, 4, 4, 4) ) - pedi <- Pedigree(sampleped[-1], rel_df) - plist <- align(pedi) + ped_withrel <- Pedigree(sampleped[-1], rel_df) + plist <- align(ped_withrel) - ped_sr <- Pedigree(sampleped[-1]) - plist_sr <- align(ped_sr) + ped_norel <- Pedigree(sampleped[-1]) + plist_sr <- align(ped_norel) expect_equal(plist$nid[1, ], c(5, 6, 7, 8, 35, 36, 42, 43, rep(0, 16)) @@ -68,6 +68,12 @@ test_that("test alignment with inbreeding and relationship matrix", { expect_equal(plist_sr$nid[1, ], c(5, 6, 7, 8, 35, 36, 42, 43, rep(0, 14)) ) + vdiffr::expect_doppelganger("sampleped_withrel", + function() plot(ped_withrel) + ) + vdiffr::expect_doppelganger("sampleped_norel", + function() plot(ped_norel) + ) }) test_that("besthint works", { diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index 58b58d47..84acd5a1 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -2,8 +2,8 @@ test_that("Class ped work", { ped0 <- new("Ped") expect_s4_class(ped0, "Ped") expect_equal(length(ped0), 0) - expect_equal(length(as.list(ped0)), 12) - expect_equal(dim(as.data.frame(ped0)), c(0, 12)) + expect_equal(length(as.list(ped0)), 15) + expect_equal(dim(as.data.frame(ped0)), c(0, 15)) ped2 <- Ped( obj = c("ID5", "ID4"), @@ -13,8 +13,8 @@ test_that("Class ped work", { ) expect_s4_class(ped2, "Ped") expect_equal(length(ped2), 2) - expect_equal(length(as.list(ped2)), 12) - expect_equal(dim(as.data.frame(ped2)), c(2, 12)) + expect_equal(length(as.list(ped2)), 15) + expect_equal(dim(as.data.frame(ped2)), c(2, 15)) expect_snapshot(ped2) expect_error(Ped( @@ -72,8 +72,8 @@ test_that("Class ped work", { expect_error(mcols(ped3) <- list( A = c("test", 1, 3, 6), B = c("test3", 6, 8, 9) )) - expect_equal(length(as.list(ped3)), 15) - expect_equal(dim(as.data.frame(ped3)), c(3, 15)) + expect_equal(length(as.list(ped3)), 18) + expect_equal(dim(as.data.frame(ped3)), c(3, 18)) df <- data.frame( id = c("ID1", "ID2", "ID3"), @@ -89,13 +89,13 @@ test_that("Class ped work", { expect_equal(ped3[1]@id, "ID1") expect_equal(ped3[1:2]@id, c("ID1", "ID2")) - expect_equal(dim(as.data.frame(ped3)), c(3, 14)) + expect_equal(dim(as.data.frame(ped3)), c(3, 17)) expect_equal(dim(mcols(ped3)), c(3, 2)) expect_error(c(ped3, ped3)) ped5 <- suppressWarnings(c(ped3, ped2)) - expect_equal(dim(as.data.frame(ped5)), c(5, 14)) + expect_equal(dim(as.data.frame(ped5)), c(5, 17)) ## Subsetting expect_error(subset(ped3, "ID1")) diff --git a/tests/testthat/test-is_informative.R b/tests/testthat/test-is_informative.R index d00de03c..fc846463 100644 --- a/tests/testthat/test-is_informative.R +++ b/tests/testthat/test-is_informative.R @@ -53,7 +53,7 @@ test_that("is_informative works with Pedigree", { ) expect_equal( - id(ped(ped_upd))[mcols(ped_upd)$id_inf == 1], + id(ped(ped_upd))[id_inf(ped(ped_upd)) == 1], c( "1_110", "1_116", "1_118", "1_119", "1_124", "1_127", "1_128", "2_201", "2_203", "2_206", "2_207", "2_214" @@ -69,9 +69,9 @@ test_that("is_informative works with Pedigree", { col_aff = "sex", mods_aff = "male", add_to_scale = FALSE ) expect_equal( - sum(mcols(is_informative(ped, col_aff = "sex_aff", + sum(id_inf(ped(is_informative(ped, col_aff = "sex_aff", informative = "Af" - ))$id_inf), + )))), length(ped(ped, "id")[ped(ped, "sex") == "male"]) ) @@ -88,9 +88,9 @@ test_that("is_informative works with Pedigree", { add_to_scale = FALSE ) expect_equal( - sum(mcols(is_informative(ped, + sum(id_inf(ped(is_informative(ped, col_aff = "education_aff", informative = "Af" - ))$id_inf + ))) ), sum(minnbreast$education > 3, na.rm = TRUE) ) diff --git a/tests/testthat/test-make_famid.R b/tests/testthat/test-make_famid.R index 509577ae..a351303b 100644 --- a/tests/testthat/test-make_famid.R +++ b/tests/testthat/test-make_famid.R @@ -48,7 +48,9 @@ test_that("make_famid works", { dad <- as.character(c( 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 3, 3, 0, 3, 0, 3, 8, 8, 10, 13 )) - famid <- c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1) + famid <- as.character( + c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1) + ) temp <- make_famid(id, mom, dad) expect_equal(temp, famid) }) diff --git a/tests/testthat/test-num_child.R b/tests/testthat/test-num_child.R index 39e91eed..7417b160 100644 --- a/tests/testthat/test-num_child.R +++ b/tests/testthat/test-num_child.R @@ -25,11 +25,7 @@ test_that("Num child", { code = c("Spouse", "Spouse", "MZ twin") ) - id <- df$id - dadid <- df$dadid - momid <- df$momid - - df_num <- num_child(id, dadid, momid, relation) + df_num <- with(df, num_child(id, dadid, momid, relation, missid = "0")) expect_equal(df_num$num_child_dir, c(5, 4, 4, 4, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0) diff --git a/tests/testthat/test-plot.R b/tests/testthat/test-plot.R index 623b96bc..3956cb0c 100644 --- a/tests/testthat/test-plot.R +++ b/tests/testthat/test-plot.R @@ -1,4 +1,4 @@ -test_that("Pedigree other test", { +test_that("Pedigree plotting test", { ped2mat <- matrix( c( 1, 1, 0, 0, 1, 1, 0, @@ -13,7 +13,6 @@ test_that("Pedigree other test", { 1, 10, 8, 7, 2, 0, 0 ), ncol = 7, byrow = TRUE ) - withr::local_options(width = 50) ped2df <- as.data.frame(ped2mat) names(ped2df) <- c("family", "indId", "fatherId", "motherId", "gender", "affection", "available" @@ -26,7 +25,7 @@ test_that("Pedigree other test", { rel_df <- data.frame(indId1 = 8, indId2 = 9, code = 3, family = 1) ped <- Pedigree(ped2df, rel_df, missid = "0") - + ped vdiffr::expect_doppelganger("Ped simple affection", function() plot(ped) ) @@ -42,7 +41,7 @@ test_that("Pedigree other test", { lst <- ped_to_plotdf(ped) expect_equal(length(lst), 2) - expect_equal(dim(lst$df), c(88, 15)) + expect_equal(dim(lst$df), c(82, 15)) expect_snapshot(lst) p <- plot(ped, title = "Pedigree", ggplot_gen = TRUE) vdiffr::expect_doppelganger("Ped 2 affections ggplot", diff --git a/tests/testthat/test-shrink.R b/tests/testthat/test-shrink.R index c11669ef..4ad0be38 100644 --- a/tests/testthat/test-shrink.R +++ b/tests/testthat/test-shrink.R @@ -64,7 +64,7 @@ test_that("Pedigree shrink error if missing info", { sex(ped(ped2))[c(13, 12)] <- c("unknown", "terminated") ## set 2nd col of affected to NA - expect__no_error(shrink(ped2, max_bits = 32)) + expect_no_error(shrink(ped2, max_bits = 32)) avail(ped(ped2))[c(7, 9)] <- NA expect_error(shrink(ped2, max_bits = 32)) }) diff --git a/tests/testthat/test-validity.R b/tests/testthat/test-validity.R index 984783ca..14b23038 100644 --- a/tests/testthat/test-validity.R +++ b/tests/testthat/test-validity.R @@ -12,7 +12,7 @@ test_that("check_slot_fd works", { expect_error(check_slot_fd(obj, "C", "A")) expect_equal( check_slot_fd(obj, "x", c("B", "C", "D")), - "`C, D` column(s) is not present in slot x." + "'C', 'D' column(s) is not present in slot x." ) expect_equal(check_slot_fd(lst, "X", "a"), NULL) }) @@ -20,27 +20,31 @@ test_that("check_slot_fd works", { test_that("check_values works", { expect_equal( check_values(obj@y$B, 1:15), - "Values 16, 17, 18, 19, 20 should be in 1, 2, 3, 4, 5 ...." + paste0("Values '16', '17', '18', '19', '20' ", + "should be in '1', '2', '3', '4', '5'..." + ) ) expect_equal(check_values(obj@x$A, 1:15), NULL) expect_error(check_values(obj@x[c("B", "A")], 1:15)) expect_equal( check_values(obj@x$B, 1:2), - "Values A, B, C, D, E ... should be in 1, 2." + "Values 'A', 'B', 'C', 'D', 'E'... should be in '1', '2'" ) expect_equal( check_values(obj@x$A, 1:5), - "Values 6, 7, 8, 9, 10 should be in 1, 2, 3, 4, 5." + "Values '6', '7', '8', '9', '10' should be in '1', '2', '3', '4', '5'" ) ## test present = FALSE expect_equal( check_values(obj@x$A, 1:15, present = FALSE), - "Values 1, 2, 3, 4, 5 ... should not be in 1, 2, 3, 4, 5 ...." + paste0("Values '1', '2', '3', '4', '5'... ", + "should not be in '1', '2', '3', '4', '5'..." + ) ) }) test_that("paste0max works", { - expect_equal(paste0max(1:10), "1, 2, 3, 4, 5 ...") - expect_equal(paste0max(1:3), "1, 2, 3") + expect_equal(paste0max(1:10), "'1', '2', '3', '4', '5'...") + expect_equal(paste0max(1:3), "'1', '2', '3'") }) From 44d22f864fd0b51eac23253de8ce1c05e8831222 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 3 Nov 2023 20:20:17 +0100 Subject: [PATCH 063/111] Update documentation --- DESCRIPTION | 8 +- NAMESPACE | 24 +- R/AllAccessors.R | 3 +- R/AllClass.R | 83 +++--- R/AllConstructor.R | 422 +++++++++++++++++++++------- R/AllValidity.R | 4 +- R/align.R | 19 +- R/alignped1.R | 7 +- R/family_check.R | 2 +- R/generate_colors.R | 3 +- R/ibd_matrix.R | 6 +- R/is_informative.R | 11 +- R/make_famid.R | 2 +- R/norm_data.R | 17 +- R/utils.R | 37 +-- man/Hints-class.Rd | 28 +- man/Hints.Rd | 84 ++++++ man/Ped.Rd | 175 +++++++++--- man/Pedigree-class.Rd | 34 +-- man/Pedigree.Rd | 245 ++++++++-------- man/Rel.Rd | 70 ++++- man/Scale-class.Rd | 48 ++++ man/Scales.Rd | 90 ++++++ man/align.Rd | 34 +-- man/alignped1.Rd | 13 +- man/alignped2.Rd | 13 +- man/anchor_to_factor.Rd | 26 ++ man/auto_hint.Rd | 37 +-- man/best_hint.Rd | 6 +- man/bit_size.Rd | 15 +- man/check_hints.Rd | 57 ---- man/check_values.Rd | 12 +- man/descendants.Rd | 20 +- man/duporder.Rd | 2 - man/exclude_stray_marryin.Rd | 6 - man/exclude_unavail_founders.Rd | 16 +- man/extract-methods.Rd | 58 +++- man/family_check.Rd | 15 +- man/find_avail_affected.Rd | 12 +- man/find_avail_noninform.Rd | 17 +- man/find_unavailable.Rd | 14 +- man/findspouse.Rd | 2 - man/fix_parents.Rd | 24 +- man/generate_border.Rd | 4 +- man/generate_colors.Rd | 9 +- man/get_twin_rel.Rd | 3 - man/ibd_matrix.Rd | 6 +- man/is_disconnected.Rd | 6 - man/is_founder.Rd | 10 +- man/is_informative.Rd | 38 ++- man/is_parent.Rd | 13 +- man/is_valid_hints.Rd | 2 +- man/kindepth.Rd | 12 +- man/kinship.Rd | 10 +- man/make_famid.Rd | 6 - man/min_dist_inf.Rd | 48 ++-- man/norm_ped.Rd | 13 +- man/norm_rel.Rd | 12 +- man/num_child.Rd | 22 +- man/ped_to_legdf.Rd | 2 - man/ped_to_plotdf.Rd | 45 +-- man/plot-Pedigree-missing-method.Rd | 2 +- man/plot_fromdf.Rd | 2 +- man/prefix_famid.Rd | 14 +- man/rel_code_to_factor.Rd | 4 +- man/sampleped.Rd | 2 +- man/sex_to_factor.Rd | 4 +- man/shrink.Rd | 27 +- man/trim.Rd | 29 -- man/unrelated.Rd | 14 +- man/upd_famid_id.Rd | 20 ++ man/useful_inds.Rd | 49 +--- 72 files changed, 1280 insertions(+), 969 deletions(-) create mode 100644 man/Hints.Rd create mode 100644 man/Scale-class.Rd create mode 100644 man/Scales.Rd create mode 100644 man/anchor_to_factor.Rd delete mode 100644 man/check_hints.Rd delete mode 100644 man/trim.Rd create mode 100644 man/upd_famid_id.Rd diff --git a/DESCRIPTION b/DESCRIPTION index f8572a51..f8a448e5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -54,15 +54,17 @@ BiocType: Software Collate: 'AllValidity.R' 'AllClass.R' - 'AllAccessors.R' + 'kindepth.R' + 'kinship.R' + 'utils.R' 'AllConstructor.R' + 'AllAccessors.R' 'AllGeneric.R' 'Pedixplorer-package.R' 'alignped4.R' 'alignped3.R' 'alignped2.R' 'alignped1.R' - 'kindepth.R' 'auto_hint.R' 'align.R' 'best_hint.R' @@ -71,8 +73,6 @@ Collate: 'descendants.R' 'make_famid.R' 'family_check.R' - 'kinship.R' - 'utils.R' 'find_unavailable.R' 'find_avail_affected.R' 'find_avail_noninform.R' diff --git a/NAMESPACE b/NAMESPACE index a577770a..55e39885 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,18 +1,26 @@ # Generated by roxygen2: do not edit by hand +export(Hints) export(Ped) export(Pedigree) export(Rel) +export(Scales) +export(affected) export(align) export(alignped1) export(alignped2) export(alignped3) export(alignped4) +export(anchor_to_factor) export(auto_hint) +export(avail) export(best_hint) export(bit_size) export(border) +export(code) +export(dadid) export(descendants) +export(famid) export(family_check) export(fill) export(find_avail_affected) @@ -24,13 +32,20 @@ export(generate_border) export(generate_colors) export(generate_fill) export(hints) +export(horder) export(ibd_matrix) +export(id) +export(id1) +export(id2) +export(id_inf) export(is_informative) export(is_valid_scales) +export(kin) export(kindepth) export(kinship) export(make_famid) export(min_dist_inf) +export(momid) export(norm_ped) export(norm_rel) export(num_child) @@ -41,10 +56,13 @@ export(plot_fromdf) export(rel) export(rel_code_to_factor) export(scales) +export(sex) export(sex_to_factor) export(shrink) export(spouse) export(unrelated) +export(upd_famid_id) +export(useful) export(useful_inds) export(vect_to_binary) exportClasses(Hints) @@ -52,9 +70,10 @@ exportClasses(Ped) exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) -exportMethods("horder<-") +exportMethods(Hints) exportMethods(Pedigree) exportMethods(Rel) +exportMethods(Scales) exportMethods(as.data.frame) exportMethods(as.list) exportMethods(family_check) @@ -68,9 +87,9 @@ exportMethods(make_famid) exportMethods(mcols) exportMethods(min_dist_inf) exportMethods(num_child) -exportMethods(horder) exportMethods(plot) exportMethods(show) +exportMethods(subset) exportMethods(summary) exportMethods(useful_inds) importFrom(Matrix,bdiag) @@ -84,6 +103,7 @@ importFrom(S4Vectors,classNameForDisplay) importFrom(S4Vectors,makeClassinfoRowForCompactPrinting) importFrom(S4Vectors,mcols) importFrom(S4Vectors,parallel_slot_names) +importFrom(S4Vectors,subset) importFrom(S4Vectors,summary) importFrom(dplyr,"%>%") importFrom(dplyr,across) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index d408d7a2..f01c5d6a 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -1,11 +1,10 @@ #### S4 Accessors #### -#' @include Pedigree.R +#' @include AllConstructor.R #' @include AllClass.R #' @importFrom S4Vectors mcols NULL #### S4 Ped Accessors #### - ##### Mcols Accessors ##### #' Metadata setters of Ped object from a list #' diff --git a/R/AllClass.R b/R/AllClass.R index 5af1efb2..0365af50 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -13,15 +13,15 @@ setClassUnion("missing_OR_NULL", c("missing", "NULL")) #' A hints object is a list of two elements used #' to order the individuals in the pedigree plot. #' -#' @slot horder A numeric vector with one element per subject in the +#' @slot horder A numeric named vector with one element per subject in the #' Pedigree. It determines the relative horizontal order of subjects within #' a sibship, as well as the relative order of processing for the founder #' couples. (For this latter, the female founders are ordered as though they #' were sisters). -#' @slot spouse A matrix with one row per hinted marriage, usually +#' @slot spouse A data.frame with one row per hinted marriage, usually #' only a few marriages in a Pedigree will need an added hint, for #' instance reverse the plot order of a husband/wife pair. -#' Each row contains the index of the left spouse, the right hand spouse, +#' Each row contains the identifiers of the left spouse, the right hand spouse, #' and the anchor (i.e : `1` = left, `2` = right, `0` = either). #' #' @return A Hints object. @@ -44,19 +44,35 @@ setValidity("Hints", is_valid_hints) #' S4 class to represent the scales of a Pedigree. #' #' A scales object is a list of two data.frame used -#' to represent the affection and the availability status -#' of the individuals in the pedigree plot. +#' to represent the affection (filling) and the availability +#' (border) status of the individuals in the pedigree plot. #' #' @slot fill A data.frame with the informations for the affection status. -#' The columns needed are: 'column_values', 'column_mods', 'mods', 'labels', -#' 'affected', 'fill', 'density' and 'angle'. +#' The columns needed are: +#' - 'order': the order of the affection to be used +#' - 'column_values': name of the column containing the raw values in the +#' Ped object +#' - 'column_mods': name of the column containing the mods of the transformed +#' affection in the Ped object +#' - 'mods': all the different mods +#' - 'labels': the corresponding labels of each mods +#' - 'affected': a logical value indicating if the mod correspond to an affected +#' individuals +#' - 'fill': the color to use for this mods +#' - 'density': the density of the shading +#' - 'angle': the angle of the shading #' @slot border A data.frame with the informations for the availability status. -#' The columns needed are: 'column', 'mods', 'labels' and 'border'. -#' @return A Hints object. +#' The columns needed are: +#' - 'column':name of the column containing the mods to use in the +#' Ped object +#' - 'mods': all the different mods +#' - 'labels': the corresponding labels of each mods +#' - 'border': the color to use for this mods +#' @return A Scale object. #' @seealso [Pedigree()] #' @docType class -#' @name Hints-class -#' @rdname Hints-class +#' @name Scale-class +#' @rdname Scale-class #' @export setClass("Scales", representation( @@ -79,14 +95,15 @@ setValidity("Scales", is_valid_scales) #' to the `famid` character to ensure the uniqueness of the `id`. #' The other slots are used to store recognized informations. #' Additional columns can be added to the Ped object and will be -#' stored in the `meta` slot of the Ped object. +#' stored in the `elementMetadata` slot of the Ped object. #' #' @slot id A character vector with the id of the individuals. #' @slot dadid A character vector with the id of the father of the individuals. #' @slot momid A character vector with the id of the mother of the individuals. -#' @slot sex A factor vector for the sex of the individuals (i.e. `male`, -#' `female`, `unknown` or `terminated`). -#' @slot famid A character vector with the family identifiers of the individuals. +#' @slot sex An ordered factor vector for the sex of the individuals +#' (i.e. `male` < `female` < `unknown` < `terminated`). +#' @slot famid A character vector with the family identifiers of the +#' individuals (optional). #' @slot steril A numeric vector with the sterilisation status of the #' individuals (i.e. `0` = not sterilised, `1` = sterilised, `NA` = unknown). #' @slot status A numeric vector with the affection status of the @@ -137,7 +154,7 @@ setClass("Ped", setMethod("parallel_slot_names", "Ped", function(x) { c( - "id", "momid", "dadid", "sex", "famid", + "id", "dadid", "momid", "sex", "famid", "steril", "status", "avail", "affected", "useful", "kin", "id_inf", "num_child_tot", "num_child_dir", "num_child_ind", @@ -191,6 +208,7 @@ setMethod("parallel_slot_names", "Rel", setValidity("Rel", is_valid_rel) +#### Pedigree Class #### #' S4 class to represent a pedigree. #' #' A pedigree is a ensemble of individuals linked to each other into @@ -202,36 +220,21 @@ setValidity("Rel", is_valid_rel) #' To create a Pedigree object, use the function #' [Pedigree()]. #' -#' @slot ped A data.frame with the individuals informations. The minimum -#' columns required are 'id', 'dadid', 'momid' and 'sex'. Other columns can be -#' added to the data.frame and will be recognised by the functions. Some -#' errors can be detected by the validity function and some of them can be -#' corrected and others will be added to a dedicated column. -#' @slot rel A data.frame for the special relationship between -#' individuals. -#' The minimum columns required are 'id1', 'id2' and 'code'. -#' @slot scales A data.frame to use for the affection status. -#' This data.frame is generated by the function -#' [generate_aff_inds()] followed by -#' [generate_colors()]. -#' @slot hints List of two elements. -#' - **horder** is a numeric vector with one element per subject in the -#' Pedigree. It determines the relative horizontal order of subjects within a sibship, as -#' well as the relative order of processing for the founder couples. (For this -#' latter, the female founders are ordered as though they were sisters). -#' - **spouse** is a matrix with one row per hinted marriage, usually -#' only a few marriages in a Pedigree will need an added hint, for -#' instance reverse the plot order of a husband/wife pair. -#' Each row contains the index of the left spouse, the right hand spouse, -#' and the anchor (i.e : `1` = left, `2` = right, `0` = either). +#' @slot ped A Ped object for the identity informations. See [Ped()] for +#' more informations. +#' @slot rel A Rel object for the special relationships. See [Rel()] for +#' more informations. +#' @slot scales A Scales object for the filling and bordering +#' colors used in the plot. See [Scales()] for more informations. +#' @slot hints A Hints object for the ordering of the +#' individuals in the plot. See [Hints()] for more informations. #' #' @return A Pedigree object. -#' @seealso [Pedigree()] +#' @seealso [Pedigree()], [Ped()], [Rel()], [Scales()], [Hints()] #' @docType class #' @name Pedigree-class #' @rdname Pedigree-class #' @include AllValidity.R -#' @include Pedigree.R #' @export setClass("Pedigree", representation( diff --git a/R/AllConstructor.R b/R/AllConstructor.R index a9abc803..c7025cda 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -7,7 +7,7 @@ #' @return A vector with the same length as temp. #' @keywords internal na_to_length <- function(x, temp, value) { - if (length(x) == 1 & all(is.na(x))) { + if (length(x) == 1 && all(is.na(x))) { rep(value, length(temp)) } else { if (length(x) != length(temp)) { @@ -23,28 +23,43 @@ na_to_length <- function(x, temp, value) { #' Constructor for the Ped class #' #' @description Constructor for the Ped class -#' If a `data.frame` is provided, the metadata will correspond to the columns -#' that do not correspond to the Ped slots. +#' You either need to provide a vector of the same size for each slot +#' or a `data.frame` with the corresponding columns. +#' The metadata will correspond to the columns that do not correspond +#' to the Ped slots. #' #' @param obj A character vector with the id of the individuals or a #' `data.frame` with all the informations in corresponding columns. -#' @param dadid A character vector with the id of the father of the individuals. -#' @param momid A character vector with the id of the mother of the individuals. +#' @param dadid A vector containing for each subject, the identifiers of the +#' biologicals fathers. +#' @param momid vector containing for each subject, the identifiers of the +#' biologicals mothers. #' @param famid A character vector with the family identifiers of the #' individuals. -#' @param sex A factor vector with the sex of the individuals (i.e. `male`, -#' `female`, `unknown` or `terminated`). +#' @param sex A character, factor or numeric vector corresponding to +#' the gender of the individuals. This will be transformed to an ordered factor +#' with the following levels: `male` < `female` < `unknown` < `terminated +#' The following values are recognized: +#' - character() or factor() : "f", "m", "woman", "man", "male", "female", +#' "unknown", "terminated" +#' - numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" #' @param steril A numeric vector with the sterilisation status of the #' individuals (i.e. `0` = not sterilised, `1` = sterilised, `NA` = unknown). #' @param status A numeric vector with the affection status of the #' individuals (i.e. `0` = alive, `1` = dead, `NA` = unknown). #' @param avail A numeric vector with the availability status of the #' individuals (i.e. `0` = not available, `1` = available, `NA` = unknown). -#' +#' @param affected A numeric vector with the affection status of the +#' individuals (i.e. `0` = unaffected, `1` = affected, `NA` = unknown). +#' @param missid A character vector with the missing values identifiers. +#' All the id, dadid and momid corresponding to those values will be set +#' to `NA_character_`. +#' @inheritParams check_columns #' @return A Ped object. #' @seealso [Pedigree()] #' @rdname Ped #' @export +#' @include utils.R setGeneric("Ped", signature = "obj", function(obj, ...) { standardGeneric("Ped") }) @@ -52,6 +67,9 @@ setGeneric("Ped", signature = "obj", function(obj, ...) { #' @docType methods #' @aliases Ped,data.frame #' @rdname Ped +#' @examples +#' data(sampleped) +#' Ped(sampleped) setMethod("Ped", "data.frame", function(obj, cols_used_init = FALSE, cols_used_del = FALSE) { col_need <- c("id", "sex", "dadid", "momid") @@ -87,8 +105,16 @@ setMethod("Ped", "data.frame", ) #' @docType methods -#' @aliases Ped,character +#' @aliases Ped,character_OR_integer #' @rdname Ped +#' @examples +#' Ped( +#' obj = c("1", "2", "3", "4", "5", "6"), +#' dadid = c("4", "4", "6", "0", "0", "0"), +#' momid = c("5", "5", "5", "0", "0", "0"), +#' sex = c(1, 2, 3, 1, 2, 1), +#' missid = "0" +#' ) setMethod("Ped", "character_OR_integer", function( obj, sex, dadid, momid, famid = NA, @@ -133,6 +159,8 @@ setMethod("Ped", "character_OR_integer", #' @docType methods #' @aliases Ped,missing #' @rdname Ped +#' @examples +#' Ped() setMethod("Ped", "missing", function(obj) { new("Ped") @@ -143,16 +171,24 @@ setMethod("Ped", "missing", #' Constructor for the Rel class #' #' @description Constructor for the Rel class. +#' You either need to provide a vector of the same size for each slot +#' or a `data.frame` with the corresponding columns. #' #' @param obj A character vector with the id of the first individuals of each #' pairs or a `data.frame` with all the informations in corresponding columns. #' @param id2 A character vector with the id of the second individuals of each #' pairs -#' @param code An ordered factor vector with the code of the special -#' relationship (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). -#' @param famid A character vector with the family identifiers of the -#' individuals. -#' +#' @param code A character, factor or numeric vector corresponding to +#' the relation code of the individuals: +#' - MZ twin = Monozygotic twin +#' - DZ twin = Dizygotic twin +#' - UZ twin = twin of unknown zygosity +#' - Spouse = Spouse +#' The following values are recognized: +#' - character() or factor() : "MZ twin", "DZ twin", "UZ twin", "Spouse" with +#' of without space between the words. The case is not important. +#' - numeric() : 1 = "MZ twin", 2 = "DZ twin", 3 = "UZ twin", 4 = "Spouse" +#' @inheritParams Ped #' @return A Rel object. #' @seealso [Pedigree()] #' @rdname Rel @@ -165,6 +201,13 @@ setGeneric("Rel", signature = "obj", function(obj, ...) { #' @aliases Rel,data.frame #' @rdname Rel #' @export +#' @examples +#' rel_df <- data.frame( +#' id1 = c("1", "2", "3"), +#' id2 = c("2", "3", "4"), +#' code = c(1, 2, 3) +#' ) +#' Rel(rel_df) setMethod("Rel", "data.frame", function(obj) { col_need <- c("id1", "id2", "code") @@ -175,7 +218,7 @@ setMethod("Rel", "data.frame", ) with(df, Rel( - obj = id1, id2 = id2, code = code, famid = famid + obj = id1, id2 = id2, code = code, famid = as.character(famid) )) } ) @@ -184,9 +227,15 @@ setMethod("Rel", "data.frame", #' @aliases Rel,character #' @rdname Rel #' @export +#' @examples +#' Rel( +#' obj = c("1", "2", "3"), +#' id2 = c("2", "3", "4"), +#' code = c(1, 2, 3) +#' ) setMethod("Rel", "character_OR_integer", function( - obj, id2, code, famid = NA + obj, id2, code, famid = NA_character_ ) { famid <- na_to_length(famid, obj, NA_character_) id1 <- as.character(obj) @@ -211,17 +260,29 @@ setMethod("Rel", "character_OR_integer", #' @docType methods #' @aliases Rel,missing #' @rdname Rel +#' @examples +#' Rel() setMethod("Rel", "missing", function(obj) { new("Rel") } ) + #### S4 Hints constructor #### #' Create a Hints object #' -#' @description Create a Hints object +#' @description Create a Hints object. +#' The hints are used to specify the order of the individuals in the pedigree +#' and to specify the order of the spouses. +#' You can specify the horder and the spouse in the call to the constructor +#' independently or together. #' -#' @param horder A vector with the order of the individuals in the pedigree. +#' @param horder A named numeric vector with one element per subject in the +#' Pedigree. It determines the relative horizontal order of subjects within a +#' sibship, as well as the relative order of processing for the founder couples. +#' (For this latter, the female founders are ordered as though +#' they were sisters). +#' The names of the vector should be the individual identifiers. #' @param spouse A data.frame with one row per hinted marriage, usually only #' a few marriages in a pedigree will need an added hint, for instance reverse #' the plot order of a husband/wife pair. @@ -241,12 +302,29 @@ setGeneric("Hints", function(horder, spouse) { #' @docType methods #' @rdname Hints #' @export +#' @aliases Hints,numeric,data.frame +#' @examples +#' Hints( +#' horder = c("1" = 1, "2" = 2, "3" = 3), +#' spouse = data.frame( +#' idl = c("1", "2"), +#' idr = c("2", "3"), +#' anchor = c(1, 2) +#' ) +#' ) setMethod("Hints", signature(horder = "numeric", spouse = "data.frame"), function(horder, spouse) { - if (length(horder) > 0 && is.null(names(horder))) { - stop("The horder vector must be named") + if (length(horder) > 0 && ( + is.null(names(horder)) || any(!is.numeric(horder)) + )) { + stop("horder must be a named numeric vector") } + spouse <- check_columns( + spouse, c("idl", "idr", "anchor"), NULL, NULL, + cols_to_use_init = TRUE + ) + spouse$anchor <- anchor_to_factor(spouse$anchor) new("Hints", horder = horder, spouse = spouse) } ) @@ -254,11 +332,18 @@ setMethod("Hints", #' @docType methods #' @rdname Hints #' @export +#' @aliases Hints,numeric,missing_OR_NULL +#' @examples +#' Hints( +#' horder = c("1" = 1, "2" = 2, "3" = 3) +#' ) setMethod("Hints", signature(horder = "numeric", spouse = "missing_OR_NULL"), function(horder, spouse) { - if (length(horder) > 0 && is.null(names(horder))) { - stop("The horder vector must be named") + if (length(horder) > 0 && ( + is.null(names(horder)) || any(!is.numeric(horder)) + )) { + stop("horder must be a named numeric vector") } dfe <- data.frame("idl" = character(), "idr" = character(), "anchor" = factor() @@ -270,6 +355,33 @@ setMethod("Hints", #' @docType methods #' @rdname Hints #' @export +#' @aliases Hints,missing_OR_NULL,data.frame +#' @examples +#' Hints( +#' spouse = data.frame( +#' idl = c("1", "2"), +#' idr = c("2", "3"), +#' anchor = c(1, 2) +#' ) +#' ) +setMethod("Hints", + signature(horder = "missing_OR_NULL", spouse = "data.frame"), + function(horder, spouse) { + spouse <- check_columns( + spouse, c("idl", "idr", "anchor"), NULL, NULL, + cols_to_use_init = TRUE + ) + spouse$anchor <- anchor_to_factor(spouse$anchor) + new("Hints", horder = numeric(), spouse = spouse) + } +) + +#' @docType methods +#' @rdname Hints +#' @export +#' @aliases Hints,missing_OR_NULL,missing_OR_NULL +#' @examples +#' Hints() setMethod("Hints", signature(horder = "missing_OR_NULL", spouse = "missing_OR_NULL"), function(horder, spouse) { @@ -283,13 +395,34 @@ setMethod("Hints", #### S4 Scales constructor #### #' Create a Scales object #' -#' @description Create a Scales object +#' @description Create a Scales object from two data.frame. +#' The first one is used to represent the affection status of the individuals +#' and therefore the filling of the individuals in the pedigree plot. +#' The second one is used to represent the availability status of the +#' individuals and therefore the border color of the individuals in the +#' pedigree plot. #' #' @param fill A data.frame with the informations for the affection status. -#' The columns needed are: `column_values`, `column_mods`, `mods`, `labels`, -#' `affected`, `fill`, `density` and `angle`. +#' The columns needed are: +#' - 'order': the order of the affection to be used +#' - 'column_values': name of the column containing the raw values in the +#' Ped object +#' - 'column_mods': name of the column containing the mods of the transformed +#' affection in the Ped object +#' - 'mods': all the different mods +#' - 'labels': the corresponding labels of each mods +#' - 'affected': a logical value indicating if the mod correspond to an affected +#' individuals +#' - 'fill': the color to use for this mods +#' - 'density': the density of the shading +#' - 'angle': the angle of the shading #' @param border A data.frame with the informations for the availability status. -#' The columns needed are: `column`, `mods`, `labels` and `border`. +#' The columns needed are: +#' - 'column': name of the column containing the mods to use in the +#' Ped object +#' - 'mods': all the different mods +#' - 'labels': the corresponding labels of each mods +#' - 'border': the color to use for this mods #' #' @return A Scales object. #' @seealso [Pedigree()] @@ -302,9 +435,39 @@ setGeneric("Scales", function(fill, border) { #' @docType methods #' @rdname Scales #' @export +#' @aliases Scales,data.frame,data.frame +#' @examples +#' Scales( +#' fill = data.frame( +#' order = 1, +#' column_values = "affected", +#' column_mods = "affected_mod", +#' mods = c(0, 1), +#' labels = c("unaffected", "affected"), +#' affected = c(FALSE, TRUE), +#' fill = c("white", "red"), +#' density = c(NA, 20), +#' angle = c(NA, 45) +#' ), +#' border = data.frame( +#' column = "avail", +#' mods = c(0, 1), +#' labels = c("not available", "available"), +#' border = c("black", "blue") +#' ) +#' ) setMethod("Scales", signature(fill = "data.frame", border = "data.frame"), function(fill, border) { + fill <- check_columns( + fill, c("column_values", "column_mods", "mods", "labels", + "affected", "fill", "density", "angle", "order" + ), NULL, NULL + ) + border <- check_columns( + border, c("column", "mods", "labels", "border"), + NULL, NULL + ) new("Scales", fill = fill, border = border) } ) @@ -312,6 +475,9 @@ setMethod("Scales", #' @docType methods #' @rdname Scales #' @export +#' @aliases Scales,missing,missing +#' @examples +#' Scales() setMethod("Scales", signature(fill = "missing", border = "missing"), function(fill, border) { @@ -338,56 +504,83 @@ setMethod("Scales", #### S4 Pedigree constructor #### #' Create a Pedigree object #' +#' @description Main constructor of the package. #' This constructor help to create a `Pedigree` object from #' different `data.frame` or a set of vectors. #' #' If any errors are found in the data, the function will return -#' the data.frame with the errors for the Pedigree and the relationship -#' data.frame. +#' the data.frame with the errors of the Ped object and the +#' Rel object. #' -#' @inheritParams align -#' @param obj A vector of the individuals identifiers or a data.frame -#' with the individuals informations. -#' The minimum columns required are `indID`, `fatherId`, `motherId` and -#' `gender`. -#' The `famid` column can also be used to specify the family of the -#' individuals and will be merge to the `id` field separated by an +#' If the normalization is set to `TRUE`, then the data will be +#' standardized using the function `norm_ped()` and `norm_rel()`. +#' +#' If a data.frame is given, the columns names needed will depend if +#' the normalization is selected or not. If the normalization is selected, +#' the columns names needed are as follow and if not the columns names +#' needed are in parenthesis: +#' - `indID`: the individual identifier (`id`) +#' - `fatherId`: the identifier of the biological father (`dadid`) +#' - `motherId`: the identifier of the biological mother (`momid`) +#' - `gender`: the sex of the individual (`sex`) +#' - `family`: the family identifier of the individual (`famid`) +#' - `sterilisation`: the sterilisation status of the individual (`steril`) +#' - `available`: the availability status of the individual (`avail`) +#' - `vitalStatus`: the death status of the individual (`status`) +#' - `affection`: the affection status of the individual (`affected`) +#' - `...`: other columns that will be stored in the `elementMetadata` slot +#' +#' The minimum columns required are : +#' - `indID` / `id` +#' - `fatherId` / `dadid` +#' - `motherId` / `momid` +#' - `gender` / `sex` +#' The `family` / `famid` column can also be used to specify the family of the +#' individuals and will be merge to the `indId` / `id` field separated by an #' underscore. -#' The following columns are also recognize `sterilisation`, `available`, -#' `vitalStatus`, `affection`. The four of them will be transformed with the -#' [vect_to_binary()] function when the normalisation is selected and will -#' be set respectively to `steril`, `avail`, -#' `status` and `affected`. +#' The columns `sterilisation`, `available`, `vitalStatus`, `affection` +#' will be transformed with the [vect_to_binary()] function when the +#' normalisation is selected. #' If you do not use the normalisation, the columns will be checked to #' be `0` or `1`. -#' They respectively correspond to the sterilisation status, -#' the availability status, the death status and the affection status -#' of the individuals. The values recognized for those columns are `1` or -#' `0`. -#' @param relation A matrix or a data.frame with 3 required columns -#' (i.e. id1, id2, code) specifying special relationship between pairs -#' of individuals. -#' #' The code values are: +#' +#' @param obj A vector of the individuals identifiers or a data.frame +#' with the individuals informations. See [Ped()] for more informations. +#' @param rel_df A data.frame with the special relationships between +#' individuals. See [Rel()] for more informations. +#' The minimum columns required are `id1`, `id2` and `code`. +#' The `famid` column can also be used to specify the family +#' of the individuals. +#' If a matrix is given, the columns needs to be ordered as +#' `id1`, `id2`, `code` and `famid`. +#' The code values are: #' - `1` = Monozygotic twin #' - `2` = Dizygotic twin #' - `3` = twin of unknown zygosity #' - `4` = Spouse #' -#' If `famid` is given in the call to create Pedigrees, then -#' `famid` needs to be in the last column of `relation`. +#' The value relation code recognized by the function are the one defined +#' by the [rel_code_to_factor()] function. +#' @param hints A list with the hints to use for the pedigree plot. +#' See [Hints()] for more informations. #' @param cols_ren_ped A named list with the columns to rename for the -#' pedigree dataframe. +#' pedigree dataframe. This is useful if you want to use a dataframe with +#' different column names. The names of the list should be the new column +#' names and the values should be the old column names. The default values +#' are to be used with `normalize = TRUE`. #' @param cols_ren_rel A named list with the columns to rename for the -#' relationship matrix. -#' @param scales A list of two data.frame with the scales to use for the -#' affection status and the other one for the border color (e.g availability). +#' relationship matrix. This is useful if you want to use a dataframe with +#' different column names. The names of the list should be the new column +#' names and the values should be the old column names. #' @param normalize A logical to know if the data should be normalised. #' @param ... Other arguments to pass to the function `generate_colors`. +#' @inheritParams Ped +#' @inheritParams is_informative #' @return A Pedigree object. -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$family == "1",]) #' @export +#' @rdname Pedigree +#' @aliases Pedigree +#' @seealso [Pedigree()], [Ped()], [Rel()], [Scales()] setGeneric("Pedigree", signature = "obj", function(obj, ...) standardGeneric("Pedigree") ) @@ -396,23 +589,36 @@ setGeneric("Pedigree", signature = "obj", #' @rdname Pedigree #' @aliases Pedigree,character #' @docType methods -#' @inheritParams is_parent -#' @inheritParams sex_to_factor -#' @inheritParams family_check -#' @inheritParams is_informative -#' @param status A numeric vector of vital status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : alive -#' - `1` : dead -#' - `NA` : vital status not known -#' @param steril A numeric vector of sterilisation status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : not sterilised -#' - `1` : sterilised -#' - `NA` : sterilisation status not known +#' @inheritParams Ped +#' @param affected A numeric vector with the affection status of the +#' individuals (i.e. `0` = unaffected, `1` = affected, `NA` = unknown). +#' Can also be a data.frame with the same length as `obj`. If it is a +#' matrix, it will be converted to a data.frame and the columns will be +#' named after the `col_aff` argument. +#' @param col_aff A character vector with the name of the column to be used +#' for the affection status. +#' If `affected` is a data.frame, it will be overwritten by the column +#' names of the data.frame. +#' @examples +#' Pedigree( +#' obj = c("1", "2", "3", "4", "5", "6"), +#' dadid = c("4", "4", "6", "0", "0", "0"), +#' momid = c("5", "5", "5", "0", "0", "0"), +#' sex = c(1, 2, 3, 1, 2, 1), +#' avail = c(0, 1, 0, 1, 0, 1), +#' affected = matrix(c( +#' 0, 1, 0, 1, 0, 1, +#' 1, 1, 1, 1, 1, 1 +#' ), ncol = 2), +#' col_aff = c("aff1", "aff2"), +#' missid = "0", +#' rel_df = matrix(c( +#' "1", "2", 2 +#' ), ncol = 3, byrow = TRUE), +#' ) setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, sex, famid = NA, avail = NULL, affected = NULL, status = NULL, - steril = NULL, relation = NULL, + steril = NULL, rel_df = NULL, missid = NA_character_, col_aff = "affection", normalize = TRUE, ... ) { n <- length(obj) @@ -443,13 +649,22 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, ) if (is.null(affected)) { - ped_df$affection <- NA + ped_df[col_aff] <- NA } else if (any(!is.na(affected))) { if (is.vector(affected)) { - ped_df$affection <- affected - } else if (is.data.frame(affected) | is.matrix(affected)) { + ped_df[col_aff] <- affected + } else if (is.data.frame(affected)) { ped_df <- cbind(ped_df, affected) col_aff <- colnames(affected) + } else if (is.matrix(affected)) { + affected <- as.data.frame(affected) + if (length(col_aff) != ncol(affected)) { + stop("The length of col_aff should be equal to the number", + "of columns of affected" + ) + } + colnames(affected) <- col_aff + ped_df <- cbind(ped_df, affected) } else { stop("Affected must be a vector or a data.frame, got:", class(affected) @@ -465,15 +680,15 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, if (any(!is.na(steril))) { ped_df$sterilisation <- steril } - if (is.null(relation)) { - relation <- data.frame( + if (is.null(rel_df)) { + rel_df <- data.frame( id1 = character(), id2 = character(), code = numeric(), family = character() ) } - Pedigree(ped_df, relation = relation, + Pedigree(ped_df, rel_df = rel_df, missid = missid, col_aff = col_aff, ... ) }) @@ -482,6 +697,9 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, #' @rdname Pedigree #' @aliases Pedigree,data.frame #' @docType methods +#' @examples +#' data(sampleped) +#' Pedigree(sampleped) setMethod("Pedigree", "data.frame", function( obj = data.frame( indId = character(), @@ -494,27 +712,27 @@ setMethod("Pedigree", "data.frame", function( affection = numeric(), sterilisation = numeric() ), - relation = data.frame( + rel_df = data.frame( id1 = character(), id2 = character(), code = numeric(), - family = character() + famid = character() ), cols_ren_ped = list( - "indId" = "id", - "fatherId" = "dadid", - "motherId" = "momid", - "family" = "famid", - "gender" = "sex", - "sterilisation" = "steril", - "affection" = "affected", - "available" = "avail", - "vitalStatus" = "status" + indId = "id", + fatherId = "dadid", + motherId = "momid", + family = "famid", + gender = "sex", + sterilisation = "steril", + affection = "affected", + available = "avail", + vitalStatus = "status" ), cols_ren_rel = list( - "id1" = "indId1", - "id2" = "indId2", - "famid" = "family" + id1 = "indId1", + id2 = "indId2", + famid = "family" ), hints = list( horder = NULL, @@ -530,18 +748,18 @@ setMethod("Pedigree", "data.frame", function( stop("ped_df must be a data.frame") } - if (is.matrix(relation)) { + if (is.matrix(rel_df)) { rel_df <- data.frame( - id1 = relation[, 1], - id2 = relation[, 2], - code = relation[, 3] + id1 = rel_df[, 1], + id2 = rel_df[, 2], + code = rel_df[, 3] ) - if (dim(relation)[2] > 3) { - rel_df$family <- relation[, 4] + if (dim(rel_df)[2] > 3) { + rel_df$family <- rel_df[, 4] } - } else if (is.data.frame(relation)) { - rel_df <- relation - } else { + } + + if (!is.data.frame(rel_df)) { stop("relation must be a matrix or a data.frame") } @@ -615,6 +833,8 @@ setMethod("Pedigree", "data.frame", function( #' @rdname Pedigree #' @aliases Pedigree,missing #' @docType methods +#' @examples +#' Pedigree() setMethod("Pedigree", "missing", function(obj) { ped <- new("Pedigree", ped = Ped(), rel = Rel(), diff --git a/R/AllValidity.R b/R/AllValidity.R index c50825fc..dbb2541d 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -421,8 +421,8 @@ is_valid_pedigree <- function(object) { sex <- object@ped@sex temp1 <- match(id1, id, nomatch = 0) temp2 <- match(id2, id, nomatch = 0) - if (any(ncode < 3)) { - twins <- (ncode < 3) + if (any(ncode < 4)) { + twins <- (ncode < 4) if (any(momid[temp1[twins]] != momid[temp2[twins]])) { errors <- c(errors, "twins found with different mothers") } diff --git a/R/align.R b/R/align.R index 662b954b..14387fd1 100644 --- a/R/align.R +++ b/R/align.R @@ -49,7 +49,7 @@ ancestors <- function(idx, momx, dadx) { #' For more information you can read the associated vignette:align #' `vignette("alignment_details")`. #' -#' @param ped A Pedigree object +#' @param obj A Pedigree object #' @param packed Should the Pedigree be compressed, i.e., allow diagonal #' lines connecting parents to children in order to have a smaller overall #' width for the plot. @@ -62,20 +62,8 @@ ancestors <- function(idx, momx, dadx) { #' parameters, or a logical value. #' If `TRUE`, the default is `c(1.5, 2)`, or numeric the routine #' `alignped4()` will be called. -#' @param hints Plotting hints for the Pedigree. -#' This is a list with components `horder` and `spouse`, the second one -#' is optional. -#' - **horder** is a numeric vector with one element per subject in the -#' Pedigree. It determines the relative horizontal order of subjects within a sibship, as -#' well as the relative order of processing for the founder couples. (For this -#' latter, the female founders are ordered as though they were sisters). -#' - **spouse** is a matrix with one row per hinted marriage, usually -#' only a few marriages in a pedigree will need an added hint, for instance -#' reverse the plot order of a husband/wife pair. Each row contains the -#' index of the left spouse, the right hand spouse, and the anchor -#' (i.e : `1` = left, `2` = right, `0` = either). -#' Children will preferentially appear under the parents of the anchored -#' spouse. +#' @param hints A Hints object, giving the relative order of the subjects. +#' See [Hints()] for details. #' @inheritParams is_parent #' #' @return A list with components @@ -121,6 +109,7 @@ setGeneric("align", signature = "obj", function(obj, ...) standardGeneric("align") ) + setMethod("align", "Pedigree", function( obj, packed = TRUE, width = 10, diff --git a/R/alignped1.R b/R/alignped1.R index 7ad809a0..53bfe380 100644 --- a/R/alignped1.R +++ b/R/alignped1.R @@ -45,12 +45,7 @@ #' 3. The tree below is narrower, for instance an only child. #' #' @param level Vector of the level of each subject -#' @param horder Vector of the horizontal order of each subject -#' @param spouselist Matrix of the spouses with one row per hinted marriage, -#' usually only a few marriages in a pedigree will need an added hint, for -#' instance reverse the plot order of a husband/wife pair. -#' Each row contains the index of the left spouse, the right hand spouse -#' and the anchor (i.e : `1` = left, `2` = right, `0` = either). +#' @inheritParams Hints #' @inheritParams align #' @inheritParams ancestors #' diff --git a/R/family_check.R b/R/family_check.R index 19781460..5cb6816b 100644 --- a/R/family_check.R +++ b/R/family_check.R @@ -17,7 +17,7 @@ #' and the number of subjects as entries. #' #' @inheritParams kinship -#' @param famid A vector of family identifiers +#' @inheritParams Ped #' @param newfam The result of a call to `make_famid()`. If this has already #' been computed by the user, adding it as an argument shortens the running #' time somewhat. diff --git a/R/generate_colors.R b/R/generate_colors.R index e1de2bc8..db5465ff 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -146,8 +146,7 @@ generate_fill <- function( #' @details Perform transformation uppon a column given as the one #' containing the availability status to compute the border color. #' -#' @param avail The vector containing the availability status. -#' The values need to be numeric and can only be 0, 1 or NA. +#' @inheritParams Ped #' @param colors_avail Set of 2 colors to use for the box's border of an #' individual. The first color will be used for available individual (avail #' == 1) and the second for the unavailable individual (avail == 0). diff --git a/R/ibd_matrix.R b/R/ibd_matrix.R index 769c0e3d..53082951 100644 --- a/R/ibd_matrix.R +++ b/R/ibd_matrix.R @@ -21,8 +21,10 @@ NULL #' index file contains the mapping between this new id and the original one. #' The final matrix should be labeled with the original identifiers. #' -#' @param id1 First subject identifiers -#' @param id2 Second subject identifiers +#' @param id1 A character vector with the id of the first individuals of each +#' pairs +#' @param id2 A character vector with the id of the second individuals of each +#' pairs #' @param ibd the IBD value for that pair #' @param idmap an optional 2 column matrix or data frame whose first element #' is the internal value (as found in `id1` and `id2`, and whose diff --git a/R/is_informative.R b/R/is_informative.R index 4135851d..a4feafba 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -10,16 +10,7 @@ #' corresponding informative individuals based on the avail and affected #' columns. #' -#' @param avail A numeric vector of availability status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : unavailable -#' - `1` : available -#' - `NA` : availability not known -#' @param affected A numeric vector of affection status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : unaffected -#' - `1` : affected -#' - `NA` : affection status not known +#' @inheritParams Ped #' @param col_aff A string with the column name to use for the affection status. #' @param informative Informative individuals selection can take 5 values: #' - 'AvAf' (available and affected), diff --git a/R/make_famid.R b/R/make_famid.R index cc4d0c7e..9ba3f632 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -124,7 +124,7 @@ setMethod("make_famid", "Pedigree", #' Update family prefix in individuals id #' #' @param obj A character vector of individual ids -#' @param famid A numeric vector of family ids +#' @inheritParams Ped #' #' @return A character vector of individual ids with family prefix #' diff --git a/R/norm_data.R b/R/norm_data.R index c932a807..4b6b4efb 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -8,8 +8,7 @@ NULL #' #' @description Compute id with family id if the family id available #' -#' @param famid The family id -#' @param id The individual id +#' @inheritParams Ped #' @inheritParams is_parent #' @keywords internal #' @return The id with the family id merged @@ -253,19 +252,7 @@ norm_ped <- function( #' @description Normalise relationship dataframe for Pedigree object #' #' @inheritParams norm_ped -#' @param rel_df A data.frame with the special relationships between -#' individuals. -#' The minimum columns required are `id1`, `id2` and `code`. -#' The `famid` column can also be used to specify the family -#' of the individuals. -#' The code values are: -#' - `1` = Monozygotic twin -#' - `2` = Dizygotic twin -#' - `3` = twin of unknown zygosity -#' - `4` = Spouse -#' -#' The value relation code recognized by the function are the one defined -#' by the [rel_code_to_factor()] function. +#' @inheritParams Pedigree #' @inheritParams is_parent #' #' @examples diff --git a/R/utils.R b/R/utils.R index 656172ec..2b4d58c0 100644 --- a/R/utils.R +++ b/R/utils.R @@ -155,10 +155,6 @@ check_num_na <- function(var, na_as_num = TRUE) { #' @description Check which individuals are parents. #' #' @param id A vector of each subjects identifiers -#' @param dadid A vector containing for each subject, the identifiers of the -#' biologicals fathers. -#' @param momid vector containing for each subject, the identifiers of the -#' biologicals mothers. #' @param missid The missing identifier value. Founders are the individuals with #' no father and no mother in the Pedigree #' (i.e. `dadid` and `momid` equal to the value of this variable). @@ -166,7 +162,7 @@ check_num_na <- function(var, na_as_num = TRUE) { #' #' @return A vector of boolean of the same size as `id` #' with TRUE if the individual is a parent and FALSE otherwise -#' +#' @inheritParams Ped #' @keywords internal setGeneric("is_parent", signature = "obj", function(obj, ...) standardGeneric("is_parent") @@ -235,11 +231,7 @@ NULL #' Transform a gender variable to an ordered factor #' -#' @param sex A character, factor or numeric vector corresponding to -#' the gender of the individuals. The following values are recognized: -#' - character() or factor() : "f", "m", "woman", "man", "male", "female", -#' "unknown", "terminated" -#' - numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" +#' @inheritParams Ped #' #' @return an ordered factor vector containing the transformed variable #' "male" < "female" < "unknown" < "terminated" @@ -271,25 +263,16 @@ NULL #' Transform a relationship code variable to an ordered factor #' -#' @param rel_code A character, factor or numeric vector corresponding to -#' the relation code of the individuals: -#' - MZ twin = Monozygotic twin -#' - DZ twin = Dizygotic twin -#' - UZ twin = twin of unknown zygosity -#' - Spouse = Spouse -#' The following values are recognized: -#' - character() or factor() : "MZ twin", "DZ twin", "UZ twin", "Spouse" with -#' of without space between the words. The case is not important. -#' - numeric() : 1 = "MZ twin", 2 = "DZ twin", 3 = "UZ twin", 4 = "Spouse" +#' @inheritParams Rel #' #' @return an ordered factor vector containing the transformed variable #' "MZ twin" < "DZ twin" < "UZ twin" < "Spouse" #' @examples #' rel_code_to_factor(c(1, 2, 3, 4, "MZ twin", "DZ twin", "UZ twin", "Spouse")) #' @export -rel_code_to_factor <- function(rel_code) { - if (is.factor(rel_code) || is.numeric(rel_code)) { - rel_code <- as.character(rel_code) +rel_code_to_factor <- function(code) { + if (is.factor(code) || is.numeric(code)) { + code <- as.character(code) } ## Normalized difference notations for code code_equiv <- c( @@ -298,14 +281,14 @@ rel_code_to_factor <- function(rel_code) { "1" = "MZ twin", "2" = "DZ twin", "3" = "UZ twin", "4" = "Spouse" ) codes <- c("MZ twin", "DZ twin", "UZ twin", "Spouse") - rel_code <- as.character(revalue(as.factor( + code <- as.character(revalue(as.factor( str_remove_all( - casefold(as.character(rel_code), upper = FALSE), + casefold(as.character(code), upper = FALSE), " " ) ), code_equiv, warn_missing = FALSE)) - rel_code <- factor(rel_code, codes, ordered = TRUE) - rel_code + code <- factor(code, codes, ordered = TRUE) + code } TRUE diff --git a/man/Hints-class.Rd b/man/Hints-class.Rd index 54fe7333..1ea3468a 100644 --- a/man/Hints-class.Rd +++ b/man/Hints-class.Rd @@ -5,42 +5,28 @@ \alias{Hints-class} \title{S4 class to represent a hints object.} \value{ -A Hints object. - A Hints object. } \description{ A hints object is a list of two elements used to order the individuals in the pedigree plot. - -A scales object is a list of two data.frame used -to represent the affection and the availability status -of the individuals in the pedigree plot. } \section{Slots}{ \describe{ -\item{\code{order}}{A numeric vector with one element per subject in the -Pedigree. It determines the relative order of subjects within a sibship, as -well as the relative order of processing for the founder couples. (For this -latter, the female founders are ordered as though they were sisters).} +\item{\code{horder}}{A numeric named vector with one element per subject in the +Pedigree. It determines the relative horizontal order of subjects within +a sibship, as well as the relative order of processing for the founder +couples. (For this latter, the female founders are ordered as though they +were sisters).} -\item{\code{spouse}}{A matrix with one row per hinted marriage, usually +\item{\code{spouse}}{A data.frame with one row per hinted marriage, usually only a few marriages in a Pedigree will need an added hint, for instance reverse the plot order of a husband/wife pair. -Each row contains the index of the left spouse, the right hand spouse, +Each row contains the identifiers of the left spouse, the right hand spouse, and the anchor (i.e : \code{1} = left, \code{2} = right, \code{0} = either).} - -\item{\code{fill}}{A data.frame with the informations for the affection status. -The columns needed are: 'column_values', 'column_mods', 'mods', 'labels', -'affected', 'fill', 'density' and 'angle'.} - -\item{\code{border}}{A data.frame with the informations for the availability status. -The columns needed are: 'column', 'mods', 'labels' and 'border'.} }} \seealso{ -\code{\link[=Pedigree]{Pedigree()}} - \code{\link[=Pedigree]{Pedigree()}} } diff --git a/man/Hints.Rd b/man/Hints.Rd new file mode 100644 index 00000000..7337c853 --- /dev/null +++ b/man/Hints.Rd @@ -0,0 +1,84 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllConstructor.R, R/AllGeneric.R +\docType{methods} +\name{Hints} +\alias{Hints} +\alias{Hints,numeric,data.frame-method} +\alias{Hints,numeric,data.frame} +\alias{Hints,numeric,missing_OR_NULL-method} +\alias{Hints,numeric,missing_OR_NULL} +\alias{Hints,missing_OR_NULL,data.frame-method} +\alias{Hints,missing_OR_NULL,data.frame} +\alias{Hints,missing_OR_NULL,missing_OR_NULL-method} +\alias{Hints,missing_OR_NULL,missing_OR_NULL} +\alias{as.list,Hints-method} +\title{Create a Hints object} +\usage{ +Hints(horder, spouse) + +\S4method{Hints}{numeric,data.frame}(horder, spouse) + +\S4method{Hints}{numeric,missing_OR_NULL}(horder, spouse) + +\S4method{Hints}{missing_OR_NULL,data.frame}(horder, spouse) + +\S4method{Hints}{missing_OR_NULL,missing_OR_NULL}(horder, spouse) + +\S4method{as.list}{Hints}(x) +} +\arguments{ +\item{horder}{A named numeric vector with one element per subject in the +Pedigree. It determines the relative horizontal order of subjects within a +sibship, as well as the relative order of processing for the founder couples. +(For this latter, the female founders are ordered as though +they were sisters). +The names of the vector should be the individual identifiers.} + +\item{spouse}{A data.frame with one row per hinted marriage, usually only +a few marriages in a pedigree will need an added hint, for instance reverse +the plot order of a husband/wife pair. +Each row contains the id of the left spouse (i.e. \code{idl}), the id of the +right hand spouse (i.e. \code{idr}), and the anchor (i.e : \code{anchor} : +\code{1} = left, \code{2} = right, \code{0} = either). +Children will preferentially appear under the parents of the anchored spouse.} + +\item{from}{A Hints object.} +} +\value{ +A Hints object. + +A list with the hints informations. +} +\description{ +Create a Hints object. +The hints are used to specify the order of the individuals in the pedigree +and to specify the order of the spouses. +You can specify the horder and the spouse in the call to the constructor +independently or together. + +Convert a Hints object to a list +} +\examples{ +Hints( + horder = c("1" = 1, "2" = 2, "3" = 3), + spouse = data.frame( + idl = c("1", "2"), + idr = c("2", "3"), + anchor = c(1, 2) + ) +) +Hints( + horder = c("1" = 1, "2" = 2, "3" = 3) +) +Hints( + spouse = data.frame( + idl = c("1", "2"), + idr = c("2", "3"), + anchor = c(1, 2) + ) +) +Hints() +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Ped.Rd b/man/Ped.Rd index 85672527..6349b550 100644 --- a/man/Ped.Rd +++ b/man/Ped.Rd @@ -1,54 +1,111 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R, R/AllAccessors.R, -% R/AllConstructor.R +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, +% R/AllAccessors.R \docType{class} \name{Ped-class} \alias{Ped-class} -\alias{mcols<-,Ped,list-method} -\alias{mcols<-,Ped,data.frame-method} \alias{Ped} \alias{Ped,data.frame-method} \alias{Ped,data.frame} -\alias{Ped,character-method} -\alias{Ped,character} +\alias{Ped,character_OR_integer-method} +\alias{Ped,character_OR_integer} +\alias{Ped,missing-method} +\alias{Ped,missing} +\alias{mcols<-,Ped,list-method} +\alias{mcols<-,Ped,data.frame-method} +\alias{famid} +\alias{famid,Ped-method} +\alias{id} +\alias{id,Ped-method} +\alias{dadid} +\alias{dadid,Ped-method} +\alias{momid} +\alias{momid,Ped-method} +\alias{sex} +\alias{sex,Ped-method} +\alias{affected} +\alias{affected,Ped-method} +\alias{avail} +\alias{avail,Ped-method} +\alias{kin} +\alias{kin,Ped-method} +\alias{id_inf} +\alias{id_inf,Ped-method} +\alias{useful} +\alias{useful,Ped-method} \title{S4 class to represent the identity informations in a Pedigree.} \usage{ -\S4method{mcols}{Ped,list}(x) <- value - -\S4method{mcols}{Ped,data.frame}(x) <- value - Ped(obj, ...) \S4method{Ped}{data.frame}(obj, cols_used_init = FALSE, cols_used_del = FALSE) -\S4method{Ped}{character}( +\S4method{Ped}{character_OR_integer}( obj, sex, dadid, momid, - family = NA, + famid = NA, steril = NA, status = NA, avail = NA, - affected = NA + affected = NA, + missid = NA_character_ ) -} -\arguments{ -\item{x}{A Ped object.} -\item{value}{A data.frame with the metadata.} +\S4method{Ped}{missing}(obj) + +\S4method{mcols}{Ped,list}(x) <- value + +\S4method{mcols}{Ped,data.frame}(x) <- value + +famid(x) + +id(x) + +dadid(x) + +momid(x) + +sex(x) + +affected(x) + +avail(x) + +kin(x) + +id_inf(x) +useful(x) +} +\arguments{ \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{sex}{A factor vector with the sex of the individuals (i.e. \code{male}, -\code{female}, \code{unknown} or \code{terminated}).} +\item{cols_used_init}{Boolean defining if the columns that will be used +should be initialised to NA.} -\item{dadid}{A character vector with the id of the father of the individuals.} +\item{cols_used_del}{Boolean defining if the columns that will be used +should be deleted.} + +\item{sex}{A character, factor or numeric vector corresponding to +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: +\itemize{ +\item character() or factor() : "f", "m", "woman", "man", "male", "female", +"unknown", "terminated" +\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" +}} -\item{momid}{A character vector with the id of the mother of the individuals.} +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} -\item{family}{A character vector with the family of the individuals.} +\item{momid}{vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{famid}{A character vector with the family identifiers of the +individuals.} \item{steril}{A numeric vector with the sterilisation status of the individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} @@ -58,30 +115,67 @@ individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} \item{avail}{A numeric vector with the availability status of the individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} + +\item{affected}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} + +\item{x}{A Ped object.} + +\item{value}{A data.frame with the metadata.} } \value{ A Ped object. +A Ped object. + A Ped object with the metadata set. A Ped object with the metadata set. -A Ped object. +A character vector with the famid of each individual. + +A character vector with the id of each individual. + +A character vector with the dadid of each individual. + +A character vector with the momid of each individual. + +A character vector with the sex of each individual. + +A numeric vector with the affected of each individual. + +A numeric vector with the avail of each individual. + +A numeric vector with the minimum kinship distance +value of each individual towards the informative +individuals. + +A numeric vector with the saying if the individual +is informative or not. + +A numeric vector with the saying if the individual +is informative or not. } \description{ A Ped object is a list of identity informations of the individuals in the pedigree. It is used to create a Pedigree object. The minimal needed informations are \code{id}, \code{dadid}, \code{momid} and \code{sex}. -If a \code{family} is provided, the individuals \code{id} will be aggregated -to the \code{family} character to ensure the uniqueness of the \code{id}. +If a \code{famid} is provided, the individuals \code{id} will be aggregated +to the \code{famid} character to ensure the uniqueness of the \code{id}. The other slots are used to store recognized informations. Additional columns can be added to the Ped object and will be -stored in the \code{meta} slot of the Ped object. +stored in the \code{elementMetadata} slot of the Ped object. Constructor for the Ped class -If a \code{data.frame} is provided, the metadata will correspond to the columns -that do not correspond to the Ped slots. +You either need to provide a vector of the same size for each slot +or a \code{data.frame} with the corresponding columns. +The metadata will correspond to the columns that do not correspond +to the Ped slots. } \section{Slots}{ @@ -92,10 +186,11 @@ that do not correspond to the Ped slots. \item{\code{momid}}{A character vector with the id of the mother of the individuals.} -\item{\code{sex}}{A factor vector for the sex of the individuals (i.e. \code{male}, -\code{female}, \code{unknown} or \code{terminated}).} +\item{\code{sex}}{An ordered factor vector for the sex of the individuals +(i.e. \code{male} < \code{female} < \code{unknown} < \code{terminated}).} -\item{\code{family}}{A character vector with the family of the individuals.} +\item{\code{famid}}{A character vector with the family identifiers of the +individuals (optional).} \item{\code{steril}}{A numeric vector with the sterilisation status of the individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} @@ -115,16 +210,28 @@ individuals (i.e. \code{0} = not useful, \code{1} = useful).} \item{\code{kin}}{A numeric vector with minimal kinship value between the individuals and the useful individuals.} -\item{\code{num_child_total}}{A numeric vector with the total number of children +\item{\code{num_child_tot}}{A numeric vector with the total number of children of the individuals.} -\item{\code{num_child_direct}}{A numeric vector with the number of children +\item{\code{num_child_dir}}{A numeric vector with the number of children of the individuals.} -\item{\code{num_child_indirect}}{A numeric vector with the number of children +\item{\code{num_child_ind}}{A numeric vector with the number of children of the individuals.} }} +\examples{ +data(sampleped) +Ped(sampleped) +Ped( + obj = c("1", "2", "3", "4", "5", "6"), + dadid = c("4", "4", "6", "0", "0", "0"), + momid = c("5", "5", "5", "0", "0", "0"), + sex = c(1, 2, 3, 1, 2, 1), + missid = "0" +) +Ped() +} \seealso{ \code{\link[=Pedigree]{Pedigree()}} diff --git a/man/Pedigree-class.Rd b/man/Pedigree-class.Rd index 89e29926..47c24e76 100644 --- a/man/Pedigree-class.Rd +++ b/man/Pedigree-class.Rd @@ -21,35 +21,19 @@ To create a Pedigree object, use the function \section{Slots}{ \describe{ -\item{\code{ped}}{A data.frame with the individuals informations. The minimum -columns required are 'id', 'dadid', 'momid' and 'sex'. Other columns can be -added to the data.frame and will be recognised by the functions. Some -errors can be detected by the validity function and some of them can be -corrected and others will be added to a dedicated column.} +\item{\code{ped}}{A Ped object for the identity informations. See \code{\link[=Ped]{Ped()}} for +more informations.} -\item{\code{rel}}{A data.frame for the special relationship between -individuals. -The minimum columns required are 'id1', 'id2' and 'code'.} +\item{\code{rel}}{A Rel object for the special relationships. See \code{\link[=Rel]{Rel()}} for +more informations.} -\item{\code{scales}}{A data.frame to use for the affection status. -This data.frame is generated by the function -\code{\link[=generate_aff_inds]{generate_aff_inds()}} followed by -\code{\link[=generate_colors]{generate_colors()}}.} +\item{\code{scales}}{A Scales object for the filling and bordering +colors used in the plot. See \code{\link[=Scales]{Scales()}} for more informations.} -\item{\code{hints}}{List of two elements. -\itemize{ -\item \strong{order} is a numeric vector with one element per subject in the -Pedigree. It determines the relative order of subjects within a sibship, as -well as the relative order of processing for the founder couples. (For this -latter, the female founders are ordered as though they were sisters). -\item \strong{spouse} is a matrix with one row per hinted marriage, usually -only a few marriages in a Pedigree will need an added hint, for -instance reverse the plot order of a husband/wife pair. -Each row contains the index of the left spouse, the right hand spouse, -and the anchor (i.e : \code{1} = left, \code{2} = right, \code{0} = either). -}} +\item{\code{hints}}{A Hints object for the ordering of the +individuals in the plot. See \code{\link[=Hints]{Hints()}} for more informations.} }} \seealso{ -\code{\link[=Pedigree]{Pedigree()}} +\code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}}, \code{\link[=Hints]{Hints()}} } diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd index 68cae101..9bad5800 100644 --- a/man/Pedigree.Rd +++ b/man/Pedigree.Rd @@ -1,36 +1,32 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Pedigree.R, R/AllAccessors.R +% Please edit documentation in R/AllConstructor.R, R/AllAccessors.R \docType{methods} \name{Pedigree} \alias{Pedigree} -\alias{Pedigree,numeric-method} -\alias{Pedigree,numeric} -\alias{Pedigree,character-method} +\alias{Pedigree,character_OR_integer-method} \alias{Pedigree,character} \alias{Pedigree,data.frame-method} \alias{Pedigree,data.frame} -\alias{order} -\alias{order,Pedigree-method} -\alias{order<-} -\alias{order<-,Pedigree-method} +\alias{Pedigree,missing-method} +\alias{Pedigree,missing} +\alias{horder} +\alias{horder,Pedigree-method} \title{Create a Pedigree object} \usage{ Pedigree(obj, ...) -\S4method{Pedigree}{numeric}(obj, ...) - -\S4method{Pedigree}{character}( +\S4method{Pedigree}{character_OR_integer}( obj, dadid, momid, sex, - family = NA, + famid = NA, avail = NULL, affected = NULL, status = NULL, steril = NULL, - relation = NULL, - missid = "0", + rel_df = NULL, + missid = NA_character_, col_aff = "affection", normalize = TRUE, ... @@ -38,53 +34,28 @@ Pedigree(obj, ...) \S4method{Pedigree}{data.frame}( obj = data.frame(indId = character(), fatherId = character(), motherId = character(), - gender = numeric(), family = character(), available = numeric(), vitalstatus = + gender = numeric(), family = character(), available = numeric(), vitalStatus = numeric(), affection = numeric(), sterilisation = numeric()), - relation = data.frame(id1 = character(), id2 = character(), code = numeric(), family = + rel_df = data.frame(id1 = character(), id2 = character(), code = numeric(), famid = character()), - cols_ren_ped = list(indId = "id", fatherId = "dadid", motherId = "momid", gender = - "sex", sterilisation = "steril", affection = "affected", available = "avail", - vitalstatus = "status"), - cols_ren_rel = list(id1 = "indId1", id2 = "indId2"), - scales = list(fill = data.frame(order = numeric(), column_values = character(), - column_mods = character(), mods = numeric(), labels = character(), affected = - logical(), fill = character(), density = numeric(), angle = numeric()), border = - data.frame(column = character(), mods = numeric(), labels = character(), border = - character())), - hints = list(order = NULL, spouse = NULL), + cols_ren_ped = list(indId = "id", fatherId = "dadid", motherId = "momid", family = + "famid", gender = "sex", sterilisation = "steril", affection = "affected", available + = "avail", vitalStatus = "status"), + cols_ren_rel = list(id1 = "indId1", id2 = "indId2", famid = "family"), + hints = list(horder = NULL, spouse = NULL), normalize = TRUE, - missid = "0", + missid = NA_character_, col_aff = "affection", ... ) -order(object) - -\S4method{order}{Pedigree}(object) +\S4method{Pedigree}{missing}(obj) -order(object) <- value - -\S4method{order}{Pedigree}(object) <- value +horder(object) } \arguments{ \item{obj}{A vector of the individuals identifiers or a data.frame -with the individuals informations. -The minimum columns required are \code{indID}, \code{fatherId}, \code{motherId} and -\code{gender}. -The \code{family} column can also be used to specify the family of the -individuals and will be merge to the \code{id} field separated by an -underscore. -The following columns are also recognize \code{sterilisation}, \code{available}, -\code{vitalStatus}, \code{affection}. The four of them will be transformed with the -\code{\link[=vect_to_binary]{vect_to_binary()}} function when the normalisation is selected and will -be set respectively to \code{steril}, \code{avail}, -\code{status} and \code{affected}. -If you do not use the normalisation, the columns will be checked to -be \code{0} or \code{1}. -They respectively correspond to the sterilisation status, -the availability status, the death status and the affection status -of the individuals. The values recognized for those columns are \code{1} or -\code{0}.} +with the individuals informations. See \code{\link[=Ped]{Ped()}} for more informations.} \item{...}{Other arguments to pass to the function \code{generate_colors}.} @@ -95,51 +66,41 @@ biologicals fathers.} biologicals mothers.} \item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. The following values are recognized: +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: \itemize{ \item character() or factor() : "f", "m", "woman", "man", "male", "female", "unknown", "terminated" \item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" }} -\item{family}{A vector of family identifiers} +\item{famid}{A character vector with the family identifiers of the +individuals.} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} +\item{avail}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector of affection status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unaffected -\item \code{1} : affected -\item \code{NA} : affection status not known -}} +\item{affected}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown). +Can also be a data.frame with the same length as \code{obj}. If it is a +matrix, it will be converted to a data.frame and the columns will be +named after the \code{col_aff} argument.} -\item{status}{A numeric vector of vital status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : alive -\item \code{1} : dead -\item \code{NA} : vital status not known -}} +\item{status}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} -\item{steril}{A numeric vector of sterilisation status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : not sterilised -\item \code{1} : sterilised -\item \code{NA} : sterilisation status not known -}} +\item{steril}{A numeric vector with the sterilisation status of the +individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} -\item{relation}{A matrix or a data.frame with 3 required columns -(i.e. id1, id2, code) specifying special relationship between pairs -of individuals. -#' The code values are: +\item{rel_df}{A data.frame with the special relationships between +individuals. See \code{\link[=Rel]{Rel()}} for more informations. +The minimum columns required are \code{id1}, \code{id2} and \code{code}. +The \code{famid} column can also be used to specify the family +of the individuals. +If a matrix is given, the columns needs to be ordered as +\code{id1}, \code{id2}, \code{code} and \code{famid}. +The code values are: \itemize{ \item \code{1} = Monozygotic twin \item \code{2} = Dizygotic twin @@ -147,64 +108,110 @@ of individuals. \item \code{4} = Spouse } -If \code{famid} is given in the call to create Pedigrees, then -\code{famid} needs to be in the last column of \code{relation}.} +The value relation code recognized by the function are the one defined +by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} -\item{col_aff}{A string with the column name to use for the affection status.} +\item{col_aff}{A character vector with the name of the column to be used +for the affection status. +If \code{affected} is a data.frame, it will be overwritten by the column +names of the data.frame.} \item{normalize}{A logical to know if the data should be normalised.} \item{cols_ren_ped}{A named list with the columns to rename for the -pedigree dataframe.} +pedigree dataframe. This is useful if you want to use a dataframe with +different column names. The names of the list should be the new column +names and the values should be the old column names. The default values +are to be used with \code{normalize = TRUE}.} \item{cols_ren_rel}{A named list with the columns to rename for the -relationship matrix.} +relationship matrix. This is useful if you want to use a dataframe with +different column names. The names of the list should be the new column +names and the values should be the old column names.} -\item{scales}{A list of two data.frame with the scales to use for the -affection status and the other one for the border color (e.g availability).} - -\item{hints}{Plotting hints for the Pedigree. -This is a list with components \code{order} and \code{spouse}, the second one -is optional. -\itemize{ -\item \strong{order} is a numeric vector with one element per subject in the -Pedigree. It determines the relative order of subjects within a sibship, as -well as the relative order of processing for the founder couples. (For this -latter, the female founders are ordered as though they were sisters). -\item \strong{spouse} is a matrix with one row per hinted marriage, usually -only a few marriages in a pedigree will need an added hint, for instance -reverse the plot order of a husband/wife pair. Each row contains the -index of the left spouse, the right hand spouse, and the anchor -(i.e : \code{1} = left, \code{2} = right, \code{0} = either). -Children will preferentially appear under the parents of the anchored -spouse. -}} +\item{hints}{A list with the hints to use for the pedigree plot. +See \code{\link[=Hints]{Hints()}} for more informations.} \item{object}{A Pedigree object.} } \value{ A Pedigree object. -The slot \code{order} present in the \code{Hints} slot of +The slot \code{horder} present in the \code{Hints} slot of a Pedigree object. } \description{ +Main constructor of the package. This constructor help to create a \code{Pedigree} object from different \code{data.frame} or a set of vectors. -Pedigree order accessors -} -\details{ If any errors are found in the data, the function will return -the data.frame with the errors for the Pedigree and the relationship -data.frame. +the data.frame with the errors of the Ped object and the +Rel object. + +If the normalization is set to \code{TRUE}, then the data will be +standardized using the function \code{norm_ped()} and \code{norm_rel()}. + +If a data.frame is given, the columns names needed will depend if +the normalization is selected or not. If the normalization is selected, +the columns names needed are as follow and if not the columns names +needed are in parenthesis: +\itemize{ +\item \code{indID}: the individual identifier (\code{id}) +\item \code{fatherId}: the identifier of the biological father (\code{dadid}) +\item \code{motherId}: the identifier of the biological mother (\code{momid}) +\item \code{gender}: the sex of the individual (\code{sex}) +\item \code{family}: the family identifier of the individual (\code{famid}) +\item \code{sterilisation}: the sterilisation status of the individual (\code{steril}) +\item \code{available}: the availability status of the individual (\code{avail}) +\item \code{vitalStatus}: the death status of the individual (\code{status}) +\item \code{affection}: the affection status of the individual (\code{affected}) +\item \code{...}: other columns that will be stored in the \code{elementMetadata} slot +} + +The minimum columns required are : +\itemize{ +\item \code{indID} / \code{id} +\item \code{fatherId} / \code{dadid} +\item \code{motherId} / \code{momid} +\item \code{gender} / \code{sex} +The \code{family} / \code{famid} column can also be used to specify the family of the +individuals and will be merge to the \code{indId} / \code{id} field separated by an +underscore. +The columns \code{sterilisation}, \code{available}, \code{vitalStatus}, \code{affection} +will be transformed with the \code{\link[=vect_to_binary]{vect_to_binary()}} function when the +normalisation is selected. +If you do not use the normalisation, the columns will be checked to +be \code{0} or \code{1}. +} + +Pedigree horder accessors } \examples{ +Pedigree( + obj = c("1", "2", "3", "4", "5", "6"), + dadid = c("4", "4", "6", "0", "0", "0"), + momid = c("5", "5", "5", "0", "0", "0"), + sex = c(1, 2, 3, 1, 2, 1), + avail = c(0, 1, 0, 1, 0, 1), + affected = matrix(c( + 0, 1, 0, 1, 0, 1, + 1, 1, 1, 1, 1, 1 + ), ncol = 2), + col_aff = c("aff1", "aff2"), + missid = "0", + rel_df = matrix(c( + "1", "2", 2 + ), ncol = 3, byrow = TRUE), +) data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +Pedigree(sampleped) +Pedigree() +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}} } diff --git a/man/Rel.Rd b/man/Rel.Rd index 2edd68fc..d9fe96a0 100644 --- a/man/Rel.Rd +++ b/man/Rel.Rd @@ -1,13 +1,22 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R, R/AllConstructor.R, R/AllGeneric.R +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, +% R/AllAccessors.R, R/AllGeneric.R \docType{class} \name{Rel-class} \alias{Rel-class} \alias{Rel} \alias{Rel,data.frame-method} \alias{Rel,data.frame} -\alias{Rel,character-method} +\alias{Rel,character_OR_integer-method} \alias{Rel,character} +\alias{Rel,missing-method} +\alias{Rel,missing} +\alias{code} +\alias{code,Rel-method} +\alias{id1} +\alias{id1,Rel-method} +\alias{id2} +\alias{id2,Rel-method} \alias{summary,Rel-method} \alias{show,Rel-method} \alias{as.list,Rel-method} @@ -18,7 +27,15 @@ Rel(obj, ...) \S4method{Rel}{data.frame}(obj) -\S4method{Rel}{character}(obj, id2, code, family = NA) +\S4method{Rel}{character_OR_integer}(obj, id2, code, famid = NA_character_) + +\S4method{Rel}{missing}(obj) + +code(x) + +id1(x) + +id2(x) \S4method{summary}{Rel}(object) @@ -35,10 +52,23 @@ pairs or a \code{data.frame} with all the informations in corresponding columns. \item{id2}{A character vector with the id of the second individuals of each pairs} -\item{code}{An ordered factor vector with the code of the special -relationship (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} +\item{code}{A character, factor or numeric vector corresponding to +the relation code of the individuals: +\itemize{ +\item MZ twin = Monozygotic twin +\item DZ twin = Dizygotic twin +\item UZ twin = twin of unknown zygosity +\item Spouse = Spouse +The following values are recognized: +\item character() or factor() : "MZ twin", "DZ twin", "UZ twin", "Spouse" with +of without space between the words. The case is not important. +\item numeric() : 1 = "MZ twin", 2 = "DZ twin", 3 = "UZ twin", 4 = "Spouse" +}} + +\item{famid}{A character vector with the family identifiers of the +individuals.} -\item{family}{A character vector with the family of the individuals.} +\item{x}{A Rel object.} \item{object}{A Rel object.} @@ -49,6 +79,12 @@ A Rel object. A Rel object. +A character vector with the code of each relationship. + +A character vector with the id1 of each relationship. + +A character vector with the id2 of each relationship. + A character vector with the summary of the object. The Rel object with the relationship informations. @@ -62,10 +98,12 @@ A Rel object is a list of special relationships between individuals in the pedigree. It is used to create a Pedigree object. The minimal needed informations are \code{id1}, \code{id2} and \code{code}. -If a \code{family} is provided, the individuals \code{id} will be aggregated -to the \code{family} character to ensure the uniqueness of the \code{id}. +If a \code{famid} is provided, the individuals \code{id} will be aggregated +to the \code{famid} character to ensure the uniqueness of the \code{id}. Constructor for the Rel class. +You either need to provide a vector of the same size for each slot +or a \code{data.frame} with the corresponding columns. Compute the summary of a Rel object @@ -86,9 +124,23 @@ Convert a Rel object to a data.frame \item{\code{code}}{An ordered factor vector with the code of the special relationship. (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} -\item{\code{family}}{A character vector with the family of the individuals.} +\item{\code{famid}}{A character vector with the famid of the individuals.} }} +\examples{ +rel_df <- data.frame( + id1 = c("1", "2", "3"), + id2 = c("2", "3", "4"), + code = c(1, 2, 3) +) +Rel(rel_df) +Rel( + obj = c("1", "2", "3"), + id2 = c("2", "3", "4"), + code = c(1, 2, 3) +) +Rel() +} \seealso{ \code{\link[=Pedigree]{Pedigree()}} diff --git a/man/Scale-class.Rd b/man/Scale-class.Rd new file mode 100644 index 00000000..fabc446c --- /dev/null +++ b/man/Scale-class.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R +\docType{class} +\name{Scale-class} +\alias{Scale-class} +\title{S4 class to represent the scales of a Pedigree.} +\value{ +A Scale object. +} +\description{ +A scales object is a list of two data.frame used +to represent the affection (filling) and the availability +(border) status of the individuals in the pedigree plot. +} +\section{Slots}{ + +\describe{ +\item{\code{fill}}{A data.frame with the informations for the affection status. +The columns needed are: +\itemize{ +\item 'order': the order of the affection to be used +\item 'column_values': name of the column containing the raw values in the +Ped object +\item 'column_mods': name of the column containing the mods of the transformed +affection in the Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'affected': a logical value indicating if the mod correspond to an affected +individuals +\item 'fill': the color to use for this mods +\item 'density': the density of the shading +\item 'angle': the angle of the shading +}} + +\item{\code{border}}{A data.frame with the informations for the availability status. +The columns needed are: +\itemize{ +\item 'column':name of the column containing the mods to use in the +Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'border': the color to use for this mods +}} +}} + +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Scales.Rd b/man/Scales.Rd new file mode 100644 index 00000000..8ac13bd5 --- /dev/null +++ b/man/Scales.Rd @@ -0,0 +1,90 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllConstructor.R, R/AllGeneric.R +\docType{methods} +\name{Scales} +\alias{Scales} +\alias{Scales,data.frame,data.frame-method} +\alias{Scales,data.frame,data.frame} +\alias{Scales,missing,missing-method} +\alias{Scales,missing,missing} +\alias{as.list,Scales-method} +\title{Create a Scales object} +\usage{ +Scales(fill, border) + +\S4method{Scales}{data.frame,data.frame}(fill, border) + +\S4method{Scales}{missing,missing}(fill, border) + +\S4method{as.list}{Scales}(x) +} +\arguments{ +\item{fill}{A data.frame with the informations for the affection status. +The columns needed are: +\itemize{ +\item 'order': the order of the affection to be used +\item 'column_values': name of the column containing the raw values in the +Ped object +\item 'column_mods': name of the column containing the mods of the transformed +affection in the Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'affected': a logical value indicating if the mod correspond to an affected +individuals +\item 'fill': the color to use for this mods +\item 'density': the density of the shading +\item 'angle': the angle of the shading +}} + +\item{border}{A data.frame with the informations for the availability status. +The columns needed are: +\itemize{ +\item 'column': name of the column containing the mods to use in the +Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'border': the color to use for this mods +}} + +\item{from}{A Scales object.} +} +\value{ +A Scales object. + +A list with the hints informations. +} +\description{ +Create a Scales object from two data.frame. +The first one is used to represent the affection status of the individuals +and therefore the filling of the individuals in the pedigree plot. +The second one is used to represent the availability status of the +individuals and therefore the border color of the individuals in the +pedigree plot. + +Convert a Scales object to a list +} +\examples{ +Scales( + fill = data.frame( + order = 1, + column_values = "affected", + column_mods = "affected_mod", + mods = c(0, 1), + labels = c("unaffected", "affected"), + affected = c(FALSE, TRUE), + fill = c("white", "red"), + density = c(NA, 20), + angle = c(NA, 45) + ), + border = data.frame( + column = "avail", + mods = c(0, 1), + labels = c("not available", "available"), + border = c("black", "blue") + ) +) +Scales() +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/align.Rd b/man/align.Rd index fbe85bf2..b8d695ed 100644 --- a/man/align.Rd +++ b/man/align.Rd @@ -4,17 +4,10 @@ \alias{align} \title{Generate plotting information for a Pedigree} \usage{ -align( - ped, - packed = TRUE, - width = 10, - align = TRUE, - hints = ped$hints, - missid = "0" -) +align(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} \item{packed}{Should the Pedigree be compressed, i.e., allow diagonal lines connecting parents to children in order to have a smaller overall @@ -31,27 +24,8 @@ parameters, or a logical value. If \code{TRUE}, the default is \code{c(1.5, 2)}, or numeric the routine \code{alignped4()} will be called.} -\item{hints}{Plotting hints for the Pedigree. -This is a list with components \code{order} and \code{spouse}, the second one -is optional. -\itemize{ -\item \strong{order} is a numeric vector with one element per subject in the -Pedigree. It determines the relative order of subjects within a sibship, as -well as the relative order of processing for the founder couples. (For this -latter, the female founders are ordered as though they were sisters). -\item \strong{spouse} is a matrix with one row per hinted marriage, usually -only a few marriages in a pedigree will need an added hint, for instance -reverse the plot order of a husband/wife pair. Each row contains the -index of the left spouse, the right hand spouse, and the anchor -(i.e : \code{1} = left, \code{2} = right, \code{0} = either). -Children will preferentially appear under the parents of the anchored -spouse. -}} - -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +\item{hints}{A Hints object, giving the relative order of the subjects. +See \code{\link[=Hints]{Hints()}} for details.} } \value{ A list with components diff --git a/man/alignped1.Rd b/man/alignped1.Rd index c6fdcf32..cf5159e0 100644 --- a/man/alignped1.Rd +++ b/man/alignped1.Rd @@ -15,17 +15,16 @@ alignped1(idx, dadx, momx, level, horder, packed, spouselist) \item{level}{Vector of the level of each subject} -\item{horder}{Vector of the horizontal order of each subject} +\item{horder}{A named numeric vector with one element per subject in the +Pedigree. It determines the relative horizontal order of subjects within a +sibship, as well as the relative order of processing for the founder couples. +(For this latter, the female founders are ordered as though +they were sisters). +The names of the vector should be the individual identifiers.} \item{packed}{Should the Pedigree be compressed, i.e., allow diagonal lines connecting parents to children in order to have a smaller overall width for the plot.} - -\item{spouselist}{Matrix of the spouses with one row per hinted marriage, -usually only a few marriages in a pedigree will need an added hint, for -instance reverse the plot order of a husband/wife pair. -Each row contains the index of the left spouse, the right hand spouse -and the anchor (i.e : \code{1} = left, \code{2} = right, \code{0} = either).} } \value{ A list containing the elements to plot the Pedigree. diff --git a/man/alignped2.Rd b/man/alignped2.Rd index edd1fec2..350e3459 100644 --- a/man/alignped2.Rd +++ b/man/alignped2.Rd @@ -15,17 +15,16 @@ alignped2(idx, dadx, momx, level, horder, packed, spouselist) \item{level}{Vector of the level of each subject} -\item{horder}{Vector of the horizontal order of each subject} +\item{horder}{A named numeric vector with one element per subject in the +Pedigree. It determines the relative horizontal order of subjects within a +sibship, as well as the relative order of processing for the founder couples. +(For this latter, the female founders are ordered as though +they were sisters). +The names of the vector should be the individual identifiers.} \item{packed}{Should the Pedigree be compressed, i.e., allow diagonal lines connecting parents to children in order to have a smaller overall width for the plot.} - -\item{spouselist}{Matrix of the spouses with one row per hinted marriage, -usually only a few marriages in a pedigree will need an added hint, for -instance reverse the plot order of a husband/wife pair. -Each row contains the index of the left spouse, the right hand spouse -and the anchor (i.e : \code{1} = left, \code{2} = right, \code{0} = either).} } \value{ A list containing the elements to plot the Pedigree. diff --git a/man/anchor_to_factor.Rd b/man/anchor_to_factor.Rd new file mode 100644 index 00000000..a8bc7fd1 --- /dev/null +++ b/man/anchor_to_factor.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{anchor_to_factor} +\alias{anchor_to_factor} +\title{Transform a anchor variable to an ordered factor} +\usage{ +anchor_to_factor(anchor) +} +\arguments{ +\item{anchor}{A character, factor or numeric vector corresponding to +the anchor of the individuals. The following values are recognized: +\itemize{ +\item character() or factor() : "0", "1", "2", "left", "right", "either" +\item numeric() : 1 = "left", 2 = "right", 0 = "either" +}} +} +\value{ +an ordered factor vector containing the transformed variable +"either" < "left" < "right" +} +\description{ +Transform a anchor variable to an ordered factor +} +\examples{ +anchor_to_factor(c(1, 2, 0, "left", "right", "either")) +} diff --git a/man/auto_hint.Rd b/man/auto_hint.Rd index c53a6183..89dcf41d 100644 --- a/man/auto_hint.Rd +++ b/man/auto_hint.Rd @@ -4,45 +4,16 @@ \alias{auto_hint} \title{First initial guess for the alignment of a Pedigree} \usage{ -auto_hint(ped, hints = NULL, packed = TRUE, align = FALSE, reset = FALSE) +auto_hint(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} - -\item{hints}{Plotting hints for the Pedigree. -This is a list with components \code{order} and \code{spouse}, the second one -is optional. -\itemize{ -\item \strong{order} is a numeric vector with one element per subject in the -Pedigree. It determines the relative order of subjects within a sibship, as -well as the relative order of processing for the founder couples. (For this -latter, the female founders are ordered as though they were sisters). -\item \strong{spouse} is a matrix with one row per hinted marriage, usually -only a few marriages in a pedigree will need an added hint, for instance -reverse the plot order of a husband/wife pair. Each row contains the -index of the left spouse, the right hand spouse, and the anchor -(i.e : \code{1} = left, \code{2} = right, \code{0} = either). -Children will preferentially appear under the parents of the anchored -spouse. -}} - -\item{packed}{Should the Pedigree be compressed, i.e., allow diagonal -lines connecting parents to children in order to have a smaller overall -width for the plot.} - -\item{align}{for a packed Pedigree, align children under parents \code{TRUE}, -to the extent possible given the page width, or align to to the left -margin \code{FALSE}. -This argument can be a two element vector, giving the alignment -parameters, or a logical value. -If \code{TRUE}, the default is \code{c(1.5, 2)}, or numeric the routine -\code{alignped4()} will be called.} +\item{obj}{A Pedigree object} \item{reset}{If \code{TRUE}, then even if \code{ped} object has hints, reset them to the initial values} } \value{ -The \strong{hints} list containing components \code{order} and \code{spouse} +The \strong{hints} list containing components \code{horder} and \code{spouse} } \description{ Compute an initial guess for the alignment of a Pedigree @@ -70,7 +41,7 @@ not important, only their order. } \examples{ data(sampleped) -ped <- Pedigree(sampleped[sampleped$family == 1, ]) +ped <- Pedigree(sampleped[sampleped$famid == 1, ]) auto_hint(ped) } \seealso{ diff --git a/man/best_hint.Rd b/man/best_hint.Rd index bff16415..e69acfb1 100644 --- a/man/best_hint.Rd +++ b/man/best_hint.Rd @@ -4,10 +4,10 @@ \alias{best_hint} \title{Best hint for alignment} \usage{ -best_hint(ped, wt = c(1000, 10, 1), tolerance = 0) +best_hint(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} \item{wt}{A vector of three weights for the three error measures \itemize{ @@ -53,7 +53,7 @@ If during the search, a plot is found with a stress level less than } \examples{ data(sampleped) -ped <- Pedigree(sampleped[sampleped$family == 1,]) +ped <- Pedigree(sampleped[sampleped$famid == 1,]) best_hint(ped) } \seealso{ diff --git a/man/bit_size.Rd b/man/bit_size.Rd index e398c5b4..f92368ee 100644 --- a/man/bit_size.Rd +++ b/man/bit_size.Rd @@ -3,30 +3,31 @@ \docType{methods} \name{bit_size} \alias{bit_size} -\alias{bit_size,character-method} +\alias{bit_size,character_OR_integer-method} \alias{bit_size,character} \alias{bit_size,Pedigree-method} \alias{bit_size,Pedigree} +\alias{bit_size,Ped-method} +\alias{bit_size,Ped} \title{Get Pedigree bit_size} \usage{ bit_size(obj, ...) -\S4method{bit_size}{character}(obj, momid, missid = "0") +\S4method{bit_size}{character_OR_integer}(obj, momid, missid = NA_character_) -\S4method{bit_size}{Pedigree}(obj, missid = "0") +\S4method{bit_size}{Pedigree}(obj, missid = NA_character_) + +\S4method{bit_size}{Ped}(obj, missid = NA_character_) } \arguments{ \item{obj}{A Pedigree object or a vector of fathers identifierss} \item{...}{Additional arguments passed to methods} -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - \item{missid}{The missing identifier value. Founders are the individuals with no father and no mother in the Pedigree (i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +The default for \code{missid} is \code{NA_character_}.} } \value{ A list with the following components: diff --git a/man/check_hints.Rd b/man/check_hints.Rd deleted file mode 100644 index 149f2d99..00000000 --- a/man/check_hints.Rd +++ /dev/null @@ -1,57 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/check_hints.R -\name{check_hints} -\alias{check_hints} -\title{Detect hints inconsistencies} -\usage{ -check_hints(hints, sex) -} -\arguments{ -\item{hints}{Plotting hints for the Pedigree. -This is a list with components \code{order} and \code{spouse}, the second one -is optional. -\itemize{ -\item \strong{order} is a numeric vector with one element per subject in the -Pedigree. It determines the relative order of subjects within a sibship, as -well as the relative order of processing for the founder couples. (For this -latter, the female founders are ordered as though they were sisters). -\item \strong{spouse} is a matrix with one row per hinted marriage, usually -only a few marriages in a pedigree will need an added hint, for instance -reverse the plot order of a husband/wife pair. Each row contains the -index of the left spouse, the right hand spouse, and the anchor -(i.e : \code{1} = left, \code{2} = right, \code{0} = either). -Children will preferentially appear under the parents of the anchored -spouse. -}} - -\item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. The following values are recognized: -\itemize{ -\item character() or factor() : "f", "m", "woman", "man", "male", "female", -"unknown", "terminated" -\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" -}} -} -\value{ -Nothing, but will stop if there is a problem. -} -\description{ -This routine tries to detect inconsistencies in spousal hints. -} -\details{ -These arise in \code{auto_hint()} with complex Pedigrees. -One can have ABA (subject A is on both the left and the right of B), -cycles, etc. -Users can introduce problems as well if they modify the hints. -} -\examples{ -data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == "1",]) -ht1 <- auto_hint(ped1) -check_hints(ht1, ped1$ped$sex) - -} -\seealso{ -\code{\link[=auto_hint]{auto_hint()}}, \code{\link[=best_hint]{best_hint()}} -} -\keyword{internal} diff --git a/man/check_values.Rd b/man/check_values.Rd index 113016ed..c0cc1589 100644 --- a/man/check_values.Rd +++ b/man/check_values.Rd @@ -7,16 +7,14 @@ check_values(val, ref, name = NULL, present = TRUE) } \arguments{ -\item{present}{A logical value indicating if the values should be present -or not} - -\item{obj}{An object.} +\item{val}{A vector of values to check.} -\item{slot}{A slot of the object.} +\item{ref}{A vector of reference values.} -\item{column}{A column of the slot.} +\item{name}{A character vector with the name of the values to check.} -\item{values}{A vector of values to check.} +\item{present}{A logical value indicating if the values should be present +or not} } \value{ A character vector with the errors if any. diff --git a/man/descendants.Rd b/man/descendants.Rd index 49308efe..a1b430a7 100644 --- a/man/descendants.Rd +++ b/man/descendants.Rd @@ -3,17 +3,21 @@ \docType{methods} \name{descendants} \alias{descendants} -\alias{descendants,character,character-method} -\alias{descendants,character} -\alias{descendants,character,Pedigree-method} +\alias{descendants,character_OR_integer,character_OR_integer-method} +\alias{descendants,character_OR_integer} +\alias{descendants,character_OR_integer,Pedigree-method} \alias{descendants,Pedigree} +\alias{descendants,character_OR_integer,Ped-method} +\alias{descendants,Ped} \title{Find all the descendants} \usage{ descendants(idlist, obj, ...) -\S4method{descendants}{character,character}(idlist, obj, dadid, momid) +\S4method{descendants}{character_OR_integer,character_OR_integer}(idlist, obj, dadid, momid) -\S4method{descendants}{character,Pedigree}(idlist, obj) +\S4method{descendants}{character_OR_integer,Pedigree}(idlist, obj) + +\S4method{descendants}{character_OR_integer,Ped}(idlist, obj) } \arguments{ \item{idlist}{List of individuals identifiers to be considered} @@ -21,12 +25,6 @@ descendants(idlist, obj, ...) \item{obj}{A pedigree object or a vector of subject identifiers.} \item{...}{Additional arguments passed to methods} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} } \value{ Vector of all descendants of the individuals in idlist. diff --git a/man/duporder.Rd b/man/duporder.Rd index 632722bd..d1624555 100644 --- a/man/duporder.Rd +++ b/man/duporder.Rd @@ -27,8 +27,6 @@ It contains the following components: }} \item{lev}{The generation level of the subject} - -\item{ped}{A Pedigree object} } \value{ A matrix of duplicate pairs diff --git a/man/exclude_stray_marryin.Rd b/man/exclude_stray_marryin.Rd index 86cb95c2..0a79c103 100644 --- a/man/exclude_stray_marryin.Rd +++ b/man/exclude_stray_marryin.Rd @@ -8,12 +8,6 @@ exclude_stray_marryin(id, dadid, momid) } \arguments{ \item{id}{Vector of subject identifiers} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} } \value{ Returns a data frame of subject identifiers and their parents. diff --git a/man/exclude_unavail_founders.Rd b/man/exclude_unavail_founders.Rd index 5da23d06..eb8d8e4b 100644 --- a/man/exclude_unavail_founders.Rd +++ b/man/exclude_unavail_founders.Rd @@ -4,25 +4,11 @@ \alias{exclude_unavail_founders} \title{Exclude unavailable founders} \usage{ -exclude_unavail_founders(id, dadid, momid, avail, missid = "0") +exclude_unavail_founders(id, dadid, momid, avail, missid = NA_character_) } \arguments{ \item{id}{Vector of subject identifiers} -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} - \item{missid}{Character defining the missing ids} } \value{ diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd index 3116b920..ff143a7b 100644 --- a/man/extract-methods.Rd +++ b/man/extract-methods.Rd @@ -18,11 +18,14 @@ \alias{spouse,Pedigree-method} \alias{as.list,Ped-method} \alias{as.data.frame,Ped-method} +\alias{subset,Ped-method} +\alias{subset,Rel-method} +\alias{subset,Hints-method} +\alias{subset_hints,Hints-method} \alias{show,Pedigree-method} \alias{summary,Pedigree-method} -\alias{sub_sel_hints} -\alias{sub_sel_hints,Pedigree-method} -\alias{[,Pedigree,ANY,missing,ANY-method} +\alias{as.list,Pedigree-method} +\alias{subset,Pedigree-method} \title{Pedigree ped accessors} \usage{ ped(object, slot) @@ -33,9 +36,9 @@ rel(object, slot) scales(object) -fill(object, slot) +fill(object) -border(object, slot) +border(object) hints(object) @@ -45,13 +48,19 @@ spouse(object) \S4method{as.data.frame}{Ped}(x) +\S4method{subset}{Ped}(x, i, del_parents = FALSE, keep = TRUE) + +\S4method{subset}{Rel}(x, idlist) + +\S4method{subset}{Hints}(x, idlist) + \S4method{show}{Pedigree}(object) \S4method{summary}{Pedigree}(object) -sub_sel_hints(hints, index) +\S4method{as.list}{Pedigree}(x) -\S4method{[}{Pedigree,ANY,missing,ANY}(x, i, j, drop = TRUE) +\S4method{subset}{Pedigree}(x, i, del_parents = FALSE) } \arguments{ \item{object}{A Pedigree object.} @@ -60,17 +69,23 @@ sub_sel_hints(hints, index) \item{x}{A Pedigree object.} -\item{hints}{A list of hints} +\item{i}{A vector of individuals id or a vector of index.} + +\item{del_parents}{A logical value indicating if the parents +of the individuals should be deleted.} -\item{index}{A vector of index} +\item{keep}{A logical value indicating if the individuals +should be kept or deleted.} -\item{i}{A vector of individuals id or a vector of index.} +\item{idlist}{A vector of identifiers to subset} + +\item{hints}{A Hints object} + +\item{from}{A Pedigree object.} \item{j}{A vector of columns names.} \item{drop}{A logical value indicating if the dimensions should be dropped.} - -\item{from}{A Ped object.} } \value{ The slot \code{ped} present in the Pedigree object. @@ -97,11 +112,17 @@ The metadata are put at the end. A data.frame with the individuals informations. The metadata are put at the end. +A Ped object subsetted. + +A Rel object subsetted. + +A list of Hints object subsetted + A character vector with the informations about the object. A character vector with the summary of the object. -A list of hints subsetted +A list with the individuals informations. A Pedigree object subsetted. } @@ -122,11 +143,20 @@ Convert a Ped object to a list Convert a Ped object to a data.frame +Subset a Ped object based on the individuals +identifiers given. + +Subset a Rel object based on the individuals +identifiers given. + +Subset the Hints object based on the identifiers +given + Pedigree show method Pedigree summary method. -Subset the hints list based on the index given +Convert a Pedigree object to a list Extract parts of a Pedigree object } diff --git a/man/family_check.Rd b/man/family_check.Rd index 41792931..1112be80 100644 --- a/man/family_check.Rd +++ b/man/family_check.Rd @@ -7,13 +7,17 @@ \alias{family_check,character} \alias{family_check,Pedigree-method} \alias{family_check,Pedigree} +\alias{family_check,Ped-method} +\alias{family_check,Ped} \title{Check family} \usage{ family_check(obj, ...) -\S4method{family_check}{character}(obj, dadid, momid, family, newfam) +\S4method{family_check}{character}(obj, dadid, momid, famid, newfam) \S4method{family_check}{Pedigree}(obj) + +\S4method{family_check}{Ped}(obj) } \arguments{ \item{obj}{A pedigree object or a vector of subject identifiers.} @@ -26,7 +30,8 @@ biologicals fathers.} \item{momid}{vector containing for each subject, the identifiers of the biologicals mothers.} -\item{family}{A vector of family identifiers} +\item{famid}{A character vector with the family identifiers of the +individuals.} \item{newfam}{The result of a call to \code{make_famid()}. If this has already been computed by the user, adding it as an argument shortens the running @@ -34,10 +39,10 @@ time somewhat.} } \value{ a data frame with one row for each unique family id in the -\code{family} argument or the one detected in the Pedigree object. +\code{famid} argument or the one detected in the Pedigree object. Components of the output are: \itemize{ -\item \code{family} : The family id, as entered into the data set +\item \code{famid} : The family id, as entered into the data set \item \code{n} : Number of subjects in the family \item \code{unrelated} : Number of them that appear to be unrelated to anyone else in the entire Pedigree. This is usually marry-ins with no @@ -86,7 +91,7 @@ fcheck.combined sampleped[20, 3] <- 131 fcheck1.bad <- try( { - with(sampleped, family_check(id, father, mother, family)) + with(sampleped, family_check(id, father, mother, famid)) }, silent = FALSE ) diff --git a/man/find_avail_affected.Rd b/man/find_avail_affected.Rd index 750e0c26..b4798d4d 100644 --- a/man/find_avail_affected.Rd +++ b/man/find_avail_affected.Rd @@ -4,18 +4,12 @@ \alias{find_avail_affected} \title{Find a single person to trim from a Pedigree whose is available} \usage{ -find_avail_affected(ped, avail = ped(ped, "avail"), affstatus = NA) +find_avail_affected(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} +\item{...}{Additional arguments passed to methods} \item{affstatus}{Affection status to search for.} } diff --git a/man/find_avail_noninform.Rd b/man/find_avail_noninform.Rd index fe3984e5..bfe35d58 100644 --- a/man/find_avail_noninform.Rd +++ b/man/find_avail_noninform.Rd @@ -4,23 +4,12 @@ \alias{find_avail_noninform} \title{Find uninformative but available subject} \usage{ -find_avail_noninform(ped, avail = ped(ped, "avail"), missid = "0") +find_avail_noninform(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} - -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +\item{...}{Additional arguments passed to methods} } \value{ Vector of subject ids who can be removed by having lowest diff --git a/man/find_unavailable.Rd b/man/find_unavailable.Rd index b285eef3..9937aa4e 100644 --- a/man/find_unavailable.Rd +++ b/man/find_unavailable.Rd @@ -4,18 +4,12 @@ \alias{find_unavailable} \title{Find unavailable subjects in a Pedigree} \usage{ -find_unavailable(ped, avail = ped(ped, "avail")) +find_unavailable(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} +\item{...}{Additional arguments passed to methods} } \value{ Returns a vector of subject ids for who can be @@ -46,7 +40,7 @@ special relations that include the subjects to trim. \examples{ data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) find_unavailable(ped1) } diff --git a/man/findspouse.Rd b/man/findspouse.Rd index 71a9c3db..96fcdd1b 100644 --- a/man/findspouse.Rd +++ b/man/findspouse.Rd @@ -27,8 +27,6 @@ It contains the following components: }} \item{lev}{The generation level of the subject} - -\item{ped}{A Pedigree object} } \value{ The position of the spouse diff --git a/man/fix_parents.Rd b/man/fix_parents.Rd index 8465f0a0..a47cd575 100644 --- a/man/fix_parents.Rd +++ b/man/fix_parents.Rd @@ -9,38 +9,34 @@ \usage{ fix_parents(obj, ...) -\S4method{fix_parents}{character}(obj, dadid, momid, sex, family = NULL, missid = "0") +\S4method{fix_parents}{character}(obj, dadid, momid, sex, famid = NULL, missid = NA_character_) -\S4method{fix_parents}{data.frame}(obj, delete = FALSE, filter = NULL, missid = "0") +\S4method{fix_parents}{data.frame}(obj, delete = FALSE, filter = NULL, missid = NA_character_) } \arguments{ \item{obj}{A data.frame or a vector of the individuals identifiers. If a dataframe is given it must contain the columns \code{id}, \code{dadid}, -\code{momid}, \code{sex} and \code{family}. Family is optional.} +\code{momid}, \code{sex} and \code{famid}. famid is optional.} \item{...}{Additional arguments passed to methods} -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - \item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. The following values are recognized: +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: \itemize{ \item character() or factor() : "f", "m", "woman", "man", "male", "female", "unknown", "terminated" \item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" }} -\item{family}{Optional family identification set it to NULL to invalidate. +\item{famid}{Optional famid identification set it to NULL to invalidate. If used it will modify the ids of the individuals by pasting it with an _.} \item{missid}{The missing identifier value. Founders are the individuals with no father and no mother in the Pedigree (i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +The default for \code{missid} is \code{NA_character_}.} \item{delete}{Boolean defining if missing parents needs to be: \itemize{ @@ -64,7 +60,7 @@ different individuals informations. First look to add parents whose ids are given in momid/dadid. Second, fix sex of parents. Last look to add second parent for children for whom only one parent id is given. -If a family vector is given the family id will be added to the ids of all +If a famid vector is given the famid id will be added to the ids of all individuals (id, dadid, momid) separated by an underscore befor proceeding. \subsection{Special case for dataframe}{ @@ -93,7 +89,7 @@ test1char <- data.frame( ) test1newmom <- with(test1char, fix_parents(id, father, mother, sex, - missid = '0' + missid = NA_character_ )) newped <- Pedigree(test1newmom) as.data.frame(newped) diff --git a/man/generate_border.Rd b/man/generate_border.Rd index f33ce0b7..80e52f8c 100644 --- a/man/generate_border.Rd +++ b/man/generate_border.Rd @@ -7,8 +7,8 @@ generate_border(avail, colors_avail = c("green", "black")) } \arguments{ -\item{avail}{The vector containing the availability status. -The values need to be numeric and can only be 0, 1 or NA.} +\item{avail}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} \item{colors_avail}{Set of 2 colors to use for the box's border of an individual. The first color will be used for available individual (avail diff --git a/man/generate_colors.Rd b/man/generate_colors.Rd index 89855207..1b2c2dcc 100644 --- a/man/generate_colors.Rd +++ b/man/generate_colors.Rd @@ -76,13 +76,8 @@ each individuals. The affection status can be numeric, logical or character.} \item{...}{Other parameters to pass to the \code{generate_colors} function} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} +\item{avail}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} \item{mods_aff}{Vector of modality to consider as affected in the case where the \code{values} is a factor.} diff --git a/man/get_twin_rel.Rd b/man/get_twin_rel.Rd index a542a631..9e20806c 100644 --- a/man/get_twin_rel.Rd +++ b/man/get_twin_rel.Rd @@ -6,9 +6,6 @@ \usage{ get_twin_rel(ped) } -\arguments{ -\item{ped}{A Pedigree object} -} \value{ A list containing components \enumerate{ diff --git a/man/ibd_matrix.Rd b/man/ibd_matrix.Rd index 4b3cb289..0e116c3b 100644 --- a/man/ibd_matrix.Rd +++ b/man/ibd_matrix.Rd @@ -7,9 +7,11 @@ ibd_matrix(id1, id2, ibd, idmap, diagonal) } \arguments{ -\item{id1}{First subject identifiers} +\item{id1}{A character vector with the id of the first individuals of each +pairs} -\item{id2}{Second subject identifiers} +\item{id2}{A character vector with the id of the second individuals of each +pairs} \item{ibd}{the IBD value for that pair} diff --git a/man/is_disconnected.Rd b/man/is_disconnected.Rd index aeb92c8e..15a34cae 100644 --- a/man/is_disconnected.Rd +++ b/man/is_disconnected.Rd @@ -8,12 +8,6 @@ is_disconnected(id, dadid, momid) } \arguments{ \item{id}{A vector of each subjects identifiers} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} } \value{ A vector of boolean of the same size as \code{id} diff --git a/man/is_founder.Rd b/man/is_founder.Rd index e09e09da..4ad88265 100644 --- a/man/is_founder.Rd +++ b/man/is_founder.Rd @@ -4,19 +4,13 @@ \alias{is_founder} \title{Check wich individuals are founders} \usage{ -is_founder(momid, dadid, missid = "0") +is_founder(momid, dadid, missid = NA_character_) } \arguments{ -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - \item{missid}{The missing identifier value. Founders are the individuals with no father and no mother in the Pedigree (i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +The default for \code{missid} is \code{NA_character_}.} } \value{ A vector of boolean of the same size as \code{dadid} and \code{momid} diff --git a/man/is_informative.Rd b/man/is_informative.Rd index 53153e83..ae6e54d6 100644 --- a/man/is_informative.Rd +++ b/man/is_informative.Rd @@ -11,36 +11,33 @@ \usage{ is_informative(obj, ...) -\S4method{is_informative}{character}(obj, avail, affected, informative = "AvAf", missid = "0") +\S4method{is_informative}{character}( + obj, + avail, + affected, + informative = "AvAf", + missid = NA_character_ +) \S4method{is_informative}{Pedigree}( obj, col_aff = NULL, informative = "AvAf", - missid = "0", + missid = NA_character_, reset = FALSE ) } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} \item{...}{Additional arguments passed to methods} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} +\item{avail}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector of affection status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unaffected -\item \code{1} : affected -\item \code{NA} : affection status not known -}} +\item{affected}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} \item{informative}{Informative individuals selection can take 5 values: \itemize{ @@ -53,10 +50,9 @@ is_informative(obj, ...) \item A boolean }} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} \item{col_aff}{A string with the column name to use for the affection status.} diff --git a/man/is_parent.Rd b/man/is_parent.Rd index 5ad27b20..543cd5e9 100644 --- a/man/is_parent.Rd +++ b/man/is_parent.Rd @@ -4,21 +4,18 @@ \alias{is_parent} \title{Check wich individuals are parents} \usage{ -is_parent(id, dadid, momid, missid = "0") +is_parent(obj, ...) } \arguments{ -\item{id}{A vector of each subjects identifiers} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} +\item{id}{A vector of each subjects identifiers} \item{missid}{The missing identifier value. Founders are the individuals with no father and no mother in the Pedigree (i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +The default for \code{missid} is \code{NA_character_}.} } \value{ A vector of boolean of the same size as \code{id} diff --git a/man/is_valid_hints.Rd b/man/is_valid_hints.Rd index 7cda7090..6ccde2d4 100644 --- a/man/is_valid_hints.Rd +++ b/man/is_valid_hints.Rd @@ -13,7 +13,7 @@ is_valid_hints(object) A character vector with the errors or \code{TRUE} if no errors. } \description{ -Check if order and spouse slots are valid (i.e. order is numeric and +Check if horder and spouse slots are valid (i.e. horder is numeric and spouse is a matrix with 3 columns). Check if the spouse matrix is valid (i.e. only numeric values). } diff --git a/man/kindepth.Rd b/man/kindepth.Rd index 50e9963c..1408335c 100755 --- a/man/kindepth.Rd +++ b/man/kindepth.Rd @@ -7,6 +7,8 @@ \alias{kindepth,character} \alias{kindepth,Pedigree-method} \alias{kindepth,Pedigree} +\alias{kindepth,Ped-method} +\alias{kindepth,Ped} \title{Compute the depth of each subject in a Pedigree} \usage{ kindepth(obj, ...) @@ -14,18 +16,14 @@ kindepth(obj, ...) \S4method{kindepth}{character}(obj, dadid, momid, align_parents = FALSE) \S4method{kindepth}{Pedigree}(obj, align_parents = FALSE) + +\S4method{kindepth}{Ped}(obj, align_parents = FALSE) } \arguments{ \item{obj}{A pedigree object or a vector of subject identifiers.} \item{...}{Additional arguments passed to methods} -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - \item{align_parents}{If \code{align_parents=T}, go one step further and try to make both parents of each child have the same depth. (This is not always possible). @@ -48,7 +46,7 @@ In the case of an inbred Pedigree a perfect alignment obeying } \examples{ data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) kindepth(ped1) } \seealso{ diff --git a/man/kinship.Rd b/man/kinship.Rd index 93429ced..ae90ee5a 100755 --- a/man/kinship.Rd +++ b/man/kinship.Rd @@ -20,14 +20,10 @@ kinship(obj, ...) \item{...}{Additional arguments passed to methods} -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - \item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. The following values are recognized: +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: \itemize{ \item character() or factor() : "f", "m", "woman", "man", "male", "female", "unknown", "terminated" diff --git a/man/make_famid.Rd b/man/make_famid.Rd index ad7439cf..a8909a8a 100644 --- a/man/make_famid.Rd +++ b/man/make_famid.Rd @@ -19,12 +19,6 @@ make_famid(obj, ...) \item{obj}{A pedigree object or a vector of subject identifiers.} \item{...}{Additional arguments passed to methods} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} } \value{ \subsection{When used with a character vector}{ diff --git a/man/min_dist_inf.Rd b/man/min_dist_inf.Rd index 485c8c3b..433c77e9 100644 --- a/man/min_dist_inf.Rd +++ b/man/min_dist_inf.Rd @@ -7,6 +7,8 @@ \alias{min_dist_inf,character} \alias{min_dist_inf,Pedigree-method} \alias{min_dist_inf,Pedigree} +\alias{min_dist_inf,Ped-method} +\alias{min_dist_inf,Ped} \title{Minimum distance to the informative individuals} \usage{ min_dist_inf(obj, ...) @@ -17,7 +19,16 @@ min_dist_inf(obj, ...) obj, col_aff = NULL, informative = "AvAf", - missid = "0", + missid = NA_character_, + reset = FALSE, + ... +) + +\S4method{min_dist_inf}{Ped}( + obj, + col_aff = NULL, + informative = "AvAf", + missid = NA_character_, reset = FALSE, ... ) @@ -27,35 +38,21 @@ min_dist_inf(obj, ...) \item{...}{Additional arguments passed to methods} -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - \item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. The following values are recognized: +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: \itemize{ \item character() or factor() : "f", "m", "woman", "man", "male", "female", "unknown", "terminated" \item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" }} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} +\item{avail}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector of affection status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unaffected -\item \code{1} : affected -\item \code{NA} : affection status not known -}} +\item{affected}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} \item{informative}{Informative individuals selection can take 5 values: \itemize{ @@ -70,10 +67,9 @@ the gender of the individuals. The following values are recognized: \item{col_aff}{A string with the column name to use for the affection status.} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} \item{reset}{If TRUE, the \code{kin} and if \code{id_inf} columns is reset} } diff --git a/man/norm_ped.Rd b/man/norm_ped.Rd index 563d1d55..2a985a93 100644 --- a/man/norm_ped.Rd +++ b/man/norm_ped.Rd @@ -4,13 +4,18 @@ \alias{norm_ped} \title{Normalise dataframe} \usage{ -norm_ped(ped_df, na_strings = c("NA", ""), missid = "0", try_num = FALSE) +norm_ped( + ped_df, + na_strings = c("NA", ""), + missid = NA_character_, + try_num = FALSE +) } \arguments{ \item{ped_df}{A data.frame with the individuals informations. The minimum columns required are \code{indID}, \code{fatherId}, \code{motherId} and \code{gender}. -The \code{family} column can also be used to specify the family of the +The \code{famid} column can also be used to specify the family of the individuals and will be merge to the \code{id} field separated by an underscore. The following columns are also recognize \code{sterilisation}, \code{available}, @@ -26,7 +31,7 @@ of the individuals. The values recognized for those columns are \code{1} or \item{missid}{The missing identifier value. Founders are the individuals with no father and no mother in the Pedigree (i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +The default for \code{missid} is \code{NA_character_}.} \item{try_num}{Boolean defining if the function should try to convert all the columns to numeric.} @@ -57,7 +62,7 @@ df <- data.frame( motherId = c(0, 0, 2, 2, 0, 5, 2, 0, 8, 8), gender = c(1, 2, "m", "man", "f", "male", "m", "m", "f", "f"), available = c("A", "1", 0, NA, 1, 0, 1, 0, 1, 0), - family = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2), + famid = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2), sterilisation = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, "TRUE"), vitalStatus = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0), affection = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0) diff --git a/man/norm_rel.Rd b/man/norm_rel.Rd index cdc954eb..80d142de 100644 --- a/man/norm_rel.Rd +++ b/man/norm_rel.Rd @@ -4,14 +4,16 @@ \alias{norm_rel} \title{Normalise relationship dataframe} \usage{ -norm_rel(rel_df, na_strings = c("NA", ""), missid = "0") +norm_rel(rel_df, na_strings = c("NA", ""), missid = NA_character_) } \arguments{ \item{rel_df}{A data.frame with the special relationships between -individuals. +individuals. See \code{\link[=Rel]{Rel()}} for more informations. The minimum columns required are \code{id1}, \code{id2} and \code{code}. -The \code{family} column can also be used to specify the family +The \code{famid} column can also be used to specify the family of the individuals. +If a matrix is given, the columns needs to be ordered as +\code{id1}, \code{id2}, \code{code} and \code{famid}. The code values are: \itemize{ \item \code{1} = Monozygotic twin @@ -28,7 +30,7 @@ by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} \item{missid}{The missing identifier value. Founders are the individuals with no father and no mother in the Pedigree (i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +The default for \code{missid} is \code{NA_character_}.} } \value{ A dataframe with the errors identified @@ -42,7 +44,7 @@ df <- data.frame( id2 = c(2, 3, 4, 5, 6, 7, 8, 9, 10, 1), code = c("MZ twin", "DZ twin", "UZ twin", "Spouse", 1, 2, 3, 4, "MzTwin", "sp oUse"), - family = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2) + famid = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2) ) norm_rel(df) diff --git a/man/num_child.Rd b/man/num_child.Rd index f9e924a7..455d8583 100644 --- a/man/num_child.Rd +++ b/man/num_child.Rd @@ -3,15 +3,15 @@ \docType{methods} \name{num_child} \alias{num_child} -\alias{num_child,character-method} -\alias{num_child,character} +\alias{num_child,character_OR_integer-method} +\alias{num_child,character_OR_integer} \alias{num_child,Pedigree-method} \alias{num_child,Pedigree} \title{Number of child} \usage{ num_child(obj, ...) -\S4method{num_child}{character}(obj, dadid, momid, rel_df = NULL, missid = "0") +\S4method{num_child}{character_OR_integer}(obj, dadid, momid, rel_df = NULL, missid = NA_character_) \S4method{num_child}{Pedigree}(obj, reset = FALSE) } @@ -20,17 +20,13 @@ num_child(obj, ...) \item{...}{Additional arguments passed to methods} -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - \item{rel_df}{A data.frame with the special relationships between -individuals. +individuals. See \code{\link[=Rel]{Rel()}} for more informations. The minimum columns required are \code{id1}, \code{id2} and \code{code}. -The \code{family} column can also be used to specify the family +The \code{famid} column can also be used to specify the family of the individuals. +If a matrix is given, the columns needs to be ordered as +\code{id1}, \code{id2}, \code{code} and \code{famid}. The code values are: \itemize{ \item \code{1} = Monozygotic twin @@ -45,7 +41,7 @@ by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} \item{missid}{The missing identifier value. Founders are the individuals with no father and no mother in the Pedigree (i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +The default for \code{missid} is \code{NA_character_}.} \item{reset}{If TRUE, the \code{num_child_tot}, \code{num_child_ind} and the \code{num_child_dir} columns are reset.} @@ -76,7 +72,7 @@ between 2 spouses, the indirect childs will still be added. } \examples{ data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) ped1 <- num_child(ped1) summary(ped1$ped) } diff --git a/man/ped_to_legdf.Rd b/man/ped_to_legdf.Rd index e4e0d1c6..0053bee5 100644 --- a/man/ped_to_legdf.Rd +++ b/man/ped_to_legdf.Rd @@ -8,8 +8,6 @@ ped_to_legdf(ped, boxh = 1, boxw = 1, cex = 1, adjx = 0, adjy = 0) } \arguments{ -\item{ped}{A Pedigree object} - \item{boxh}{Height of the legend boxes} \item{boxw}{Width of the legend boxes} diff --git a/man/ped_to_plotdf.Rd b/man/ped_to_plotdf.Rd index e2921653..1751b9c6 100644 --- a/man/ped_to_plotdf.Rd +++ b/man/ped_to_plotdf.Rd @@ -4,47 +4,12 @@ \alias{ped_to_plotdf} \title{Convert a Pedigree to a data frame of element to plot} \usage{ -ped_to_plotdf( - ped, - packed = FALSE, - width = 10, - align = c(1.5, 2), - subreg = NULL, - cex = 0.5, - symbolsize = cex, - pconnect = 0.5, - branch = 0.6, - aff_mark = TRUE, - label = NULL, - ... -) +ped_to_plotdf(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} -\item{packed}{Should the Pedigree be compressed, i.e., allow diagonal -lines connecting parents to children in order to have a smaller overall -width for the plot.} - -\item{width}{for a packed output, the minimum width of the plot, in -inches.} - -\item{align}{for a packed Pedigree, align children under parents \code{TRUE}, -to the extent possible given the page width, or align to to the left -margin \code{FALSE}. -This argument can be a two element vector, giving the alignment -parameters, or a logical value. -If \code{TRUE}, the default is \code{c(1.5, 2)}, or numeric the routine -\code{alignped4()} will be called.} - -\item{subreg}{4-element vector for (min x, max x, min depth, max depth), -used to edit away portions of the plot coordinates returned by -\code{\link[=align]{align()}}. -This is useful for zooming in on a particular region of the Pedigree.} - -\item{cex}{character expansion of the text} - -\item{symbolsize}{size of the symbols} +\item{...}{other arguments passed to \code{\link[=par]{par()}}} \item{pconnect}{when connecting parent to children the program will try to make the connecting line as close to vertical as possible, subject to it @@ -60,8 +25,6 @@ value of the affection column for each filling scale.} \item{label}{if not NULL, add a label to each box corresponding to the value of the column given.} - -\item{...}{other arguments passed to \code{\link[=par]{par()}}} } \value{ A list containing the data frame and the user coordinates. @@ -71,7 +34,7 @@ Convert a Pedigree to a data frame of element to plot } \examples{ data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == 1,]) +ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) ped_to_plotdf(ped1) } \seealso{ diff --git a/man/plot-Pedigree-missing-method.Rd b/man/plot-Pedigree-missing-method.Rd index 84231ce4..7dafeafa 100644 --- a/man/plot-Pedigree-missing-method.Rd +++ b/man/plot-Pedigree-missing-method.Rd @@ -80,7 +80,7 @@ force the line to connect at the midpoint of the children.} \item{fam_to_plot}{default=1. If the Pedigree contains multiple families, this parameter can be used to select which family to plot. It can be a numeric value or a character value. If numeric, it is the -index of the family to plot returned by \code{unique(x$ped$family)}. +index of the family to plot returned by \code{unique(x$ped$famid)}. If character, it is the family id to plot.} \item{legend}{default=FALSE. If TRUE, a legend will be added to the plot.} diff --git a/man/plot_fromdf.Rd b/man/plot_fromdf.Rd index 31cca332..5b3059cd 100644 --- a/man/plot_fromdf.Rd +++ b/man/plot_fromdf.Rd @@ -63,7 +63,7 @@ invisibly. } \examples{ data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == 1,]) +ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) lst <- ped_to_plotdf(ped1) #plot_fromdf(lst$df, lst$usr) } diff --git a/man/prefix_famid.Rd b/man/prefix_famid.Rd index 48de66f8..7eab517c 100644 --- a/man/prefix_famid.Rd +++ b/man/prefix_famid.Rd @@ -4,17 +4,17 @@ \alias{prefix_famid} \title{Compute id with family id} \usage{ -prefix_famid(family_id, ind_id, missid = "0") +prefix_famid(famid, id, missid = NA_character_) } \arguments{ -\item{family_id}{The family id} +\item{famid}{A character vector with the family identifiers of the +individuals.} -\item{ind_id}{The individual id} +\item{id}{A vector of each subjects identifiers} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} } \value{ The id with the family id merged diff --git a/man/rel_code_to_factor.Rd b/man/rel_code_to_factor.Rd index 3278a274..609133bd 100644 --- a/man/rel_code_to_factor.Rd +++ b/man/rel_code_to_factor.Rd @@ -4,10 +4,10 @@ \alias{rel_code_to_factor} \title{Transform a relationship code variable to an ordered factor} \usage{ -rel_code_to_factor(rel_code) +rel_code_to_factor(code) } \arguments{ -\item{rel_code}{A character, factor or numeric vector corresponding to +\item{code}{A character, factor or numeric vector corresponding to the relation code of the individuals: \itemize{ \item MZ twin = Monozygotic twin diff --git a/man/sampleped.Rd b/man/sampleped.Rd index 365963fb..b9a36e0a 100644 --- a/man/sampleped.Rd +++ b/man/sampleped.Rd @@ -8,7 +8,7 @@ A data frame with 55 observations, one line per subject, on the following 7 variables. \itemize{ -\item \code{family} family identifier +\item \code{famid} family identifier \item \code{id} subject identifier \item \code{dadid} identifier of the father, if the father is part of the data set; zero otherwise diff --git a/man/sex_to_factor.Rd b/man/sex_to_factor.Rd index ba4f11bb..2d3548e3 100644 --- a/man/sex_to_factor.Rd +++ b/man/sex_to_factor.Rd @@ -8,7 +8,9 @@ sex_to_factor(sex) } \arguments{ \item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. The following values are recognized: +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: \itemize{ \item character() or factor() : "f", "m", "woman", "man", "male", "female", "unknown", "terminated" diff --git a/man/shrink.Rd b/man/shrink.Rd index 86a6fa5e..aad4d4d6 100644 --- a/man/shrink.Rd +++ b/man/shrink.Rd @@ -4,31 +4,12 @@ \alias{shrink} \title{Shrink Pedigree object} \usage{ -shrink( - ped, - avail = ped(ped, "avail"), - affected = deriv(ped, "affected"), - max_bits = 16 -) +shrink(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} - -\item{affected}{A numeric vector of affection status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unaffected -\item \code{1} : affected -\item \code{NA} : affection status not known -}} +\item{...}{Additional arguments passed to methods} \item{max_bits}{Optional, the bit size for which to shrink the Pedigree} } @@ -67,7 +48,7 @@ individuals (chosen at random if there are multiple of the same status): } \examples{ data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == '1',]) +ped1 <- Pedigree(sampleped[sampleped$famid == '1',]) shrink(ped1, max_bits = 12) } diff --git a/man/trim.Rd b/man/trim.Rd deleted file mode 100644 index 876b92c6..00000000 --- a/man/trim.Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/trim.R -\name{trim} -\alias{trim} -\title{Trim a Pedigree} -\usage{ -trim(ped, id_rm, missid = "0") -} -\arguments{ -\item{ped}{A Pedigree object} - -\item{id_rm}{Vector of ids to remove} - -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} -} -\value{ -A Pedigree object with the subjects removed -} -\description{ -Carries out the removal of the subjects identified from a Pedigree object. -} -\examples{ -data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == "1",]) -trim(ped1, "1_101") -} diff --git a/man/unrelated.Rd b/man/unrelated.Rd index a5670329..9ff30be1 100644 --- a/man/unrelated.Rd +++ b/man/unrelated.Rd @@ -4,18 +4,12 @@ \alias{unrelated} \title{Get unrelated subjects} \usage{ -unrelated(ped, avail = ped(ped, "avail")) +unrelated(obj, ...) } \arguments{ -\item{ped}{A Pedigree object} +\item{obj}{A Pedigree object} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} +\item{...}{Additional arguments passed to methods} } \value{ A vector of the ids of subjects that are unrelated. @@ -39,7 +33,7 @@ multiple times can return different sets of unrelated subjects. } \examples{ data(sampleped) -fam1 <- sampleped[sampleped$family == 1, ] +fam1 <- sampleped[sampleped$famid == 1, ] ped1 <- Pedigree(fam1) diff --git a/man/upd_famid_id.Rd b/man/upd_famid_id.Rd new file mode 100644 index 00000000..9c658721 --- /dev/null +++ b/man/upd_famid_id.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/make_famid.R +\name{upd_famid_id} +\alias{upd_famid_id} +\title{Update family prefix in individuals id} +\usage{ +upd_famid_id(obj, famid, ...) +} +\arguments{ +\item{obj}{A character vector of individual ids} + +\item{famid}{A character vector with the family identifiers of the +individuals.} +} +\value{ +A character vector of individual ids with family prefix +} +\description{ +Update family prefix in individuals id +} diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index c01bb27b..9ea40919 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -7,6 +7,7 @@ \alias{useful_inds,character} \alias{useful_inds,Pedigree-method} \alias{useful_inds,Pedigree} +\alias{useful_inds,Ped-method} \title{Compute the usefulness of individuals} \usage{ useful_inds(obj, ...) @@ -20,43 +21,24 @@ useful_inds(obj, ...) num_child_tot, informative = "AvAf", keep_infos = FALSE, - missid = "0" + missid = NA_character_ ) -\S4method{useful_inds}{Pedigree}( - obj, - informative = "AvAf", - keep_infos = FALSE, - missid = "0", - reset = FALSE -) +\S4method{useful_inds}{Pedigree}(obj, informative = "AvAf", keep_infos = FALSE, reset = FALSE) + +\S4method{useful_inds}{Ped}(obj, informative = "AvAf", keep_infos = FALSE, reset = FALSE) } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} \item{...}{Additional arguments passed to methods} -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} +\item{avail}{A numeric vector with the availability status of the +individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} -\item{avail}{A numeric vector of availability status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unavailable -\item \code{1} : available -\item \code{NA} : availability not known -}} - -\item{affected}{A numeric vector of affection status of each individual -(e.g., genotyped). The values are: -\itemize{ -\item \code{0} : unaffected -\item \code{1} : affected -\item \code{NA} : affection status not known -}} +\item{affected}{A numeric vector with the affection status of the +individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} \item{num_child_tot}{A numeric vector of the number of children of each individuals} @@ -75,10 +57,9 @@ individuals} \item{keep_infos}{Boolean to indicate if individuals with unknown status but available or reverse should be kept} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{"0"}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} \item{reset}{Boolean to indicate if the \code{useful} column should be reset} } @@ -105,7 +86,7 @@ usefulness of the individual. This boolean is hereditary. } \examples{ data(sampleped) -ped1 <- Pedigree(sampleped[sampleped$family == "1",]) +ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) ped1 <- num_child(ped1) useful_inds(ped1, informative = "AvAf")$ped } From f1ff2ee492373f596a874fdc877b30250cc36862 Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 5 Nov 2023 15:50:40 +0100 Subject: [PATCH 064/111] Set slots to logical and set border column to column_values and column_mods for consitency. --- NAMESPACE | 2 +- R/AllAccessors.R | 65 ++++----- R/AllClass.R | 46 ++++--- R/AllConstructor.R | 90 +++++++------ R/AllValidity.R | 6 +- R/generate_aff_inds.R | 2 +- R/generate_colors.R | 126 +++++++++++------- R/is_informative.R | 10 +- R/min_dist_inf.R | 6 +- R/norm_data.R | 8 +- R/ped_to_legdf.R | 2 +- R/ped_to_plotdf.R | 2 +- R/useful_inds.R | 10 +- R/utils.R | 8 +- man/Ped.Rd | 51 ++++--- man/Pedigree.Rd | 20 +-- man/Scale-class.Rd | 6 +- man/Scales.Rd | 5 +- man/generate_border.Rd | 11 +- man/generate_colors.Rd | 9 +- man/generate_fill.Rd | 4 +- man/is_informative.Rd | 12 +- man/min_dist_inf.Rd | 14 +- man/useful_inds.Rd | 10 +- man/vect_to_binary.Rd | 2 +- tests/testthat/_snaps/class.md | 10 +- tests/testthat/_snaps/norm_data.md | 20 +-- tests/testthat/_snaps/ped_to_legdf.md | 46 +++---- .../_snaps/ped_to_legdf/legend-alone.svg | 92 ++++++------- .../_snaps/ped_to_legdf/plot-with-legend.svg | 88 ++++++------ tests/testthat/test-class.R | 15 ++- tests/testthat/test-generate_scales.R | 24 ++-- tests/testthat/test-is_informative.R | 15 +-- tests/testthat/test-min_dist_inf.R | 2 +- tests/testthat/test-ped_to_legdf.R | 3 +- tests/testthat/test-pedigreeClass.R | 17 ++- tests/testthat/test-useful_inds.R | 2 +- 37 files changed, 468 insertions(+), 393 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 55e39885..6ddd1874 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -37,9 +37,9 @@ export(ibd_matrix) export(id) export(id1) export(id2) -export(id_inf) export(is_informative) export(is_valid_scales) +export(isinf) export(kin) export(kindepth) export(kinship) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index f01c5d6a..daafbd83 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -264,16 +264,8 @@ setGeneric("affected<-", function(x, value) { standardGeneric("affected<-") }) setMethod("affected<-", - signature(x = "Ped", value = "ANY"), + signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { - if ( - ! is.character(value) && - ! is.numeric(value) && - ! is.logical(value) && - ! is.factor(value) - ) { - stop("Affected must be a character or integer vector") - } if (length(value) != length(x)) { if (length(value) == 1) { value <- rep(value, length(x)) @@ -284,7 +276,7 @@ setMethod("affected<-", ) } } - x@affected <- vect_to_binary(value) + x@affected <- vect_to_binary(value, logical = TRUE) validObject(x) x } @@ -310,16 +302,8 @@ setGeneric("avail<-", function(x, value) { standardGeneric("avail<-") }) setMethod("avail<-", - signature(x = "Ped", value = "ANY"), + signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { - if ( - ! is.character(value) && - ! is.numeric(value) && - ! is.logical(value) && - ! is.factor(value) - ) { - stop("avail must be a character or numeric vector") - } if (length(value) != length(x)) { if (length(value) == 1) { value <- rep(value, length(x)) @@ -330,7 +314,7 @@ setMethod("avail<-", ) } } - x@avail <- vect_to_binary(value) + x@avail <- vect_to_binary(value, logical = TRUE) validObject(x) x } @@ -376,8 +360,8 @@ setMethod("kin<-", } ) -##### Id_inf Accessors ##### -#' id_inf getter of Ped object +##### Isinf Accessors ##### +#' isinf getter of Ped object #' #' @param x A Ped object. #' @@ -385,31 +369,31 @@ setMethod("kin<-", #' is informative or not. #' #' @rdname Ped -#' @aliases id_inf,Ped-method +#' @aliases isinf,Ped-method #' @export -setGeneric("id_inf", function(x) { - standardGeneric("id_inf") +setGeneric("isinf", function(x) { + standardGeneric("isinf") }) -setMethod("id_inf", signature(x = "Ped"), function(x) { - x@id_inf +setMethod("isinf", signature(x = "Ped"), function(x) { + x@isinf }) -setGeneric("id_inf<-", function(x, value) { - standardGeneric("id_inf<-") +setGeneric("isinf<-", function(x, value) { + standardGeneric("isinf<-") }) -setMethod("id_inf<-", - signature(x = "Ped", value = "numeric"), +setMethod("isinf<-", + signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { if (length(value) != length(x)) { if (length(value) == 1) { value <- rep(value, length(x)) } else { stop( - "The length of the new values for id_inf should be: ", + "The length of the new values for isinf should be: ", "equal to the length of the Ped object" ) } } - x@id_inf <- value + x@isinf <- value validObject(x) x } @@ -436,7 +420,7 @@ setGeneric("useful<-", function(x, value) { standardGeneric("useful<-") }) setMethod("useful<-", - signature(x = "Ped", value = "numeric"), + signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { if (length(value) != length(x)) { if (length(value) == 1) { @@ -448,7 +432,7 @@ setMethod("useful<-", ) } } - x@useful <- value + x@useful <- vect_to_binary(value, logical = TRUE) validObject(x) x } @@ -538,7 +522,7 @@ setMethod( ped_slots <- c( "id", "dadid", "momid", "sex", "famid", "steril", "status", "avail", "affected", - "kin", "useful", "id_inf", + "kin", "useful", "isinf", "num_child_tot", "num_child_dir", "num_child_ind" ) if (! slot %in% ped_slots) { @@ -882,7 +866,7 @@ setGeneric("spouse<-", function(object, value) { setMethod( "spouse<-", - signature(object = "Pedigree", value = "ANY"), + signature(object = "Pedigree", value = "data.frame"), function(object, value) { spouse(hints(object)) <- value validObject(object) @@ -892,10 +876,11 @@ setMethod( setMethod( "spouse<-", - signature(object = "Hints", value = "ANY"), + signature(object = "Hints", value = "data.frame"), function(object, value) { - # TODO: Check that the spouse matrix is valid - object@spouse <- value + df <- check_columns(value, c("idl", "idr", "anchor")) + df$anchor <- anchor_to_factor(df$anchor) + object@spouse <- df validObject(object) object } diff --git a/R/AllClass.R b/R/AllClass.R index 0365af50..1bd359f3 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -4,6 +4,7 @@ NULL #### Class integer / character #### setClassUnion("character_OR_integer", c("character", "integer")) +setClassUnion("numeric_OR_logical", c("numeric", "logical")) setClassUnion("missing_OR_NULL", c("missing", "NULL")) #### Hints Class #### @@ -53,7 +54,7 @@ setValidity("Hints", is_valid_hints) #' - 'column_values': name of the column containing the raw values in the #' Ped object #' - 'column_mods': name of the column containing the mods of the transformed -#' affection in the Ped object +#' values in the Ped object #' - 'mods': all the different mods #' - 'labels': the corresponding labels of each mods #' - 'affected': a logical value indicating if the mod correspond to an affected @@ -63,8 +64,10 @@ setValidity("Hints", is_valid_hints) #' - 'angle': the angle of the shading #' @slot border A data.frame with the informations for the availability status. #' The columns needed are: -#' - 'column':name of the column containing the mods to use in the +#' - 'column_values': name of the column containing the raw values in the #' Ped object +#' - 'column_mods': name of the column containing the mods of the transformed +#' values in the Ped object #' - 'mods': all the different mods #' - 'labels': the corresponding labels of each mods #' - 'border': the color to use for this mods @@ -104,16 +107,21 @@ setValidity("Scales", is_valid_scales) #' (i.e. `male` < `female` < `unknown` < `terminated`). #' @slot famid A character vector with the family identifiers of the #' individuals (optional). -#' @slot steril A numeric vector with the sterilisation status of the -#' individuals (i.e. `0` = not sterilised, `1` = sterilised, `NA` = unknown). -#' @slot status A numeric vector with the affection status of the -#' individuals (i.e. `0` = alive, `1` = dead, `NA` = unknown). -#' @slot avail A numeric vector with the availability status of the -#' individuals (i.e. `0` = not available, `1` = available, `NA` = unknown). -#' @slot affected A numeric vector with the affection status of the -#' individuals (i.e. `0` = not affected, `1` = affected, `NA` = unknown). -#' @slot useful A numeric vector with the usefulness status of the -#' individuals (i.e. `0` = not useful, `1` = useful). +#' @slot steril A logical vector with the sterilisation status of the +#' individuals +#' (i.e. `FALSE` = not sterilised, `TRUE` = sterilised, `NA` = unknown). +#' @slot status A logical vector with the affection status of the +#' individuals +#' (i.e. `FALSE` = alive, `TRUE` = dead, `NA` = unknown). +#' @slot avail A logical vector with the availability status of the +#' individuals +#' (i.e. `FALSE` = not available, `TRUE` = available, `NA` = unknown). +#' @slot affected A logical vector with the affection status of the +#' individuals +#' (i.e. `FALSE` = not affected, `TRUE` = affected, `NA` = unknown). +#' @slot useful A logical vector with the usefulness status of the +#' individuals +#' (i.e. `FALSE` = not useful, `TRUE` = useful). #' @slot kin A numeric vector with minimal kinship value between the #' individuals and the useful individuals. #' @slot num_child_tot A numeric vector with the total number of children @@ -137,13 +145,13 @@ setClass("Ped", momid = "character", sex = "factor", famid = "character", - steril = "numeric", - status = "numeric", - avail = "numeric", - affected = "numeric", - useful = "numeric", + steril = "logical", + status = "logical", + avail = "logical", + affected = "logical", + useful = "logical", kin = "numeric", - id_inf = "numeric", + isinf = "logical", num_child_tot = "numeric", num_child_dir = "numeric", num_child_ind = "numeric" @@ -156,7 +164,7 @@ setMethod("parallel_slot_names", "Ped", c( "id", "dadid", "momid", "sex", "famid", "steril", "status", "avail", "affected", - "useful", "kin", "id_inf", + "useful", "kin", "isinf", "num_child_tot", "num_child_dir", "num_child_ind", callNextMethod() ) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index c7025cda..4624f909 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -43,14 +43,18 @@ na_to_length <- function(x, temp, value) { #' - character() or factor() : "f", "m", "woman", "man", "male", "female", #' "unknown", "terminated" #' - numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" -#' @param steril A numeric vector with the sterilisation status of the -#' individuals (i.e. `0` = not sterilised, `1` = sterilised, `NA` = unknown). -#' @param status A numeric vector with the affection status of the -#' individuals (i.e. `0` = alive, `1` = dead, `NA` = unknown). -#' @param avail A numeric vector with the availability status of the -#' individuals (i.e. `0` = not available, `1` = available, `NA` = unknown). -#' @param affected A numeric vector with the affection status of the -#' individuals (i.e. `0` = unaffected, `1` = affected, `NA` = unknown). +#' @param steril A logical vector with the sterilisation status of the +#' individuals +#' (i.e. `FALSE` = not sterilised, `TRUE` = sterilised, `NA` = unknown). +#' @param status A logical vector with the affection status of the +#' individuals +#' (i.e. `FALSE` = alive, `TRUE` = dead, `NA` = unknown). +#' @param avail A logical vector with the availability status of the +#' individuals +#' (i.e. `FALSE` = not available, `TRUE` = available, `NA` = unknown). +#' @param affected A logical vector with the affection status of the +#' individuals +#' (i.e. `FALSE` = unaffected, `TRUE` = affected, `NA` = unknown). #' @param missid A character vector with the missing values identifiers. #' All the id, dadid and momid corresponding to those values will be set #' to `NA_character_`. @@ -75,7 +79,7 @@ setMethod("Ped", "data.frame", col_need <- c("id", "sex", "dadid", "momid") col_to_use <- c( "famid", "steril", "status", "avail", "affected", - "kin", "id_inf", "useful" + "kin", "isinf", "useful" ) col_used <- c( "num_child_tot", "num_child_dir", "num_child_ind", @@ -86,10 +90,10 @@ setMethod("Ped", "data.frame", others_cols = TRUE, cols_to_use_init = TRUE, cols_used_init = cols_used_init, cols_used_del = cols_used_del ) - df$steril <- vect_to_binary(df$steril) - df$status <- vect_to_binary(df$status) - df$avail <- vect_to_binary(df$avail) - df$affected <- vect_to_binary(df$affected) + df$steril <- vect_to_binary(df$steril, logical = TRUE) + df$status <- vect_to_binary(df$status, logical = TRUE) + df$avail <- vect_to_binary(df$avail, logical = TRUE) + df$affected <- vect_to_binary(df$affected, logical = TRUE) myped <- with(df, Ped( obj = id, sex = sex, dadid = dadid, momid = momid, famid = famid, @@ -132,14 +136,13 @@ setMethod("Ped", "character_OR_integer", sex <- sex_to_factor(sex) - steril <- na_to_length(steril, id, NA_real_) - status <- na_to_length(status, id, NA_real_) - avail <- na_to_length(avail, id, NA_real_) - affected <- na_to_length(affected, id, NA_real_) - - useful <- na_to_length(NA, id, NA_real_) + steril <- na_to_length(steril, id, NA) + status <- na_to_length(status, id, NA) + avail <- na_to_length(avail, id, NA) + affected <- na_to_length(affected, id, NA) + useful <- na_to_length(NA, id, NA) + isinf <- na_to_length(NA, id, NA) kin <- na_to_length(NA, id, NA_real_) - id_inf <- na_to_length(NA, id, NA_real_) df_child <- num_child(id, dadid, momid, rel_df = NULL) @@ -148,7 +151,7 @@ setMethod("Ped", "character_OR_integer", id = id, dadid = dadid, momid = momid, famid = famid, sex = sex, steril = steril, status = status, avail = avail, affected = affected, - useful = useful, kin = kin, id_inf = id_inf, + useful = useful, kin = kin, isinf = isinf, num_child_tot = df_child$num_child_tot, num_child_dir = df_child$num_child_dir, num_child_ind = df_child$num_child_ind @@ -441,7 +444,7 @@ setGeneric("Scales", function(fill, border) { #' fill = data.frame( #' order = 1, #' column_values = "affected", -#' column_mods = "affected_mod", +#' column_mods = "affected_mods", #' mods = c(0, 1), #' labels = c("unaffected", "affected"), #' affected = c(FALSE, TRUE), @@ -450,7 +453,8 @@ setGeneric("Scales", function(fill, border) { #' angle = c(NA, 45) #' ), #' border = data.frame( -#' column = "avail", +#' column_values = "avail", +#' column_mods = "avail_mods", #' mods = c(0, 1), #' labels = c("not available", "available"), #' border = c("black", "blue") @@ -460,12 +464,14 @@ setMethod("Scales", signature(fill = "data.frame", border = "data.frame"), function(fill, border) { fill <- check_columns( - fill, c("column_values", "column_mods", "mods", "labels", - "affected", "fill", "density", "angle", "order" + fill, c( + "order", "column_values", "column_mods", "mods", + "labels", "affected", "fill", "density", "angle" ), NULL, NULL ) border <- check_columns( - border, c("column", "mods", "labels", "border"), + border, + c("column_values", "column_mods", "mods", "labels", "border"), NULL, NULL ) new("Scales", fill = fill, border = border) @@ -493,7 +499,8 @@ setMethod("Scales", angle = numeric() ) border <- data.frame( - column = character(), + column_values = character(), + column_mods = character(), mods = numeric(), labels = character(), border = character() @@ -590,8 +597,9 @@ setGeneric("Pedigree", signature = "obj", #' @aliases Pedigree,character #' @docType methods #' @inheritParams Ped -#' @param affected A numeric vector with the affection status of the -#' individuals (i.e. `0` = unaffected, `1` = affected, `NA` = unknown). +#' @param affected A logical vector with the affection status of the +#' individuals +#' (i.e. `FALSE` = unaffected, `TRUE` = affected, `NA` = unknown). #' Can also be a data.frame with the same length as `obj`. If it is a #' matrix, it will be converted to a data.frame and the columns will be #' named after the `col_aff` argument. @@ -658,13 +666,16 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, col_aff <- colnames(affected) } else if (is.matrix(affected)) { affected <- as.data.frame(affected) - if (length(col_aff) != ncol(affected)) { - stop("The length of col_aff should be equal to the number", - "of columns of affected" - ) + if (is.null(colnames(affected))) { + if (length(col_aff) != ncol(affected)) { + stop("The length of col_aff should be equal to the number", + "of columns of affected" + ) + } + colnames(affected) <- col_aff } - colnames(affected) <- col_aff ped_df <- cbind(ped_df, affected) + col_aff <- colnames(affected) } else { stop("Affected must be a vector or a data.frame, got:", class(affected) @@ -749,13 +760,14 @@ setMethod("Pedigree", "data.frame", function( } if (is.matrix(rel_df)) { + rel_mat <- rel_df rel_df <- data.frame( - id1 = rel_df[, 1], - id2 = rel_df[, 2], - code = rel_df[, 3] + id1 = rel_mat[, 1], + id2 = rel_mat[, 2], + code = rel_mat[, 3] ) - if (dim(rel_df)[2] > 3) { - rel_df$family <- rel_df[, 4] + if (dim(rel_mat)[2] > 3) { + rel_df$family <- rel_mat[, 4] } } diff --git a/R/AllValidity.R b/R/AllValidity.R index dbb2541d..25d4c251 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -190,7 +190,9 @@ is_valid_scales <- function(object) { "order", "column_values", "column_mods", "mods", "labels", "affected", "fill", "density", "angle" ) - border_cols <- c("column", "mods", "labels", "border") + border_cols <- c( + "column_values", "column_mods", "mods", "labels", "border" + ) errors <- c(errors, check_slot_fd(object, NULL, c("fill", "border"))) errors <- c(errors, check_slot_fd(object, "fill", fill_cols)) errors <- c(errors, check_slot_fd(object, "border", border_cols)) @@ -232,7 +234,7 @@ is_valid_scales <- function(object) { #### Check that the border columns have the right values #### ## Check for character columns - col_char <- c("column", "labels", "border") + col_char <- c("column_values", "column_mods", "labels", "border") err_char <- col_char[!unlist(lapply( object@border[col_char], is, "character" ))] diff --git a/R/generate_aff_inds.R b/R/generate_aff_inds.R index 3edd7900..40757009 100644 --- a/R/generate_aff_inds.R +++ b/R/generate_aff_inds.R @@ -58,7 +58,7 @@ generate_aff_inds <- function(values, mods_aff = NULL, } else { # Separate for factors by levels mods_non_aff <- levels(droplevels(as.factor( - values[!values %in% mods_aff] + values[!values %in% as.character(mods_aff)] ))) if (length(mods_non_aff) == 0) { mods_non_aff <- "None" diff --git a/R/generate_colors.R b/R/generate_colors.R index db5465ff..174158b9 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -7,7 +7,6 @@ NULL #' containing affection status to compute the filling color. #' #' @param values The vector containing the values to process as affection. -#' @param affected The vector containing the affection status TRUE/FALSE. #' @param labels The vector containing the labels to use for the affection. #' @param keep_full_scale Boolean defining if the affection values need to #' be set as a scale. If `values` is numeric the filling scale will be @@ -20,6 +19,7 @@ NULL #' affected individuls. #' @param colors_unaff Set of increasing colors to use for the filling of the #' unaffected individuls. +#' @inheritParams Ped #' #' @return A list of two elements #' - The processed values column as a numeric factor @@ -132,21 +132,23 @@ generate_fill <- function( fill[is.na(fill)] <- "grey" mods <- as.numeric(mods) - scale <- unique(as.data.frame( + sc_fill <- unique(as.data.frame( list( mods = mods, labels = labels, affected = affected, fill = fill, density = rep(NA_integer_, n), angle = rep(NA_integer_, n) ) )) - list(mods = mods, affected = affected, fill_scale = scale) + list(mods = mods, affected = affected, sc_fill = sc_fill) } -#' Process the colors based on affection and availability +#' Process the colors based on availability #' #' @details Perform transformation uppon a column given as the one #' containing the availability status to compute the border color. +#' The vector given will be transformed using the [vect_to_binary()] +#' function. #' -#' @inheritParams Ped +#' @param values The vector containing the values to process as available. #' @param colors_avail Set of 2 colors to use for the box's border of an #' individual. The first color will be used for available individual (avail #' == 1) and the second for the unavailable individual (avail == 0). @@ -158,28 +160,23 @@ generate_fill <- function( #' generate_border(c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA)) #' #' @export -generate_border <- function(avail, colors_avail = c("green", "black")) { - if (length(avail) > 0) { - if (! is.numeric(avail) && ! all(is.na(avail))) { - stop("Available variable need to be numeric") - } - - if (!all(levels(as.factor(avail)) %in% c("0", "1", "NA"))) { - stop("Available variable need to have only 0, 1 or NA") - } - } - +generate_border <- function(values, colors_avail = c("green", "black")) { # Set border colors if (length(colors_avail) != 2) { stop("Variable `colors_avail` need to be a vector of 2 colors") } - as.data.frame(list( + mods <- vect_to_binary(values) + avail <- vect_to_binary(values, logical = TRUE) + + sc_bord <- data.frame( column = "avail", mods = c(NA, 1, 0), border = c("grey", colors_avail[1], colors_avail[2]), labels = c("NA", "Available", "Non Available") - )) + ) + + list(mods = mods, avail = avail, sc_bord = sc_bord) } #' Process the colors based on affection and availability @@ -234,14 +231,16 @@ setMethod("generate_colors", "character", affected <- generate_aff_inds(affected_val, mods_aff, threshold, sup_thres_aff ) - border <- generate_border(avail, colors_avail) - lst_sc <- generate_fill( + lst_bord <- generate_border(avail, colors_avail) + lst_aff <- generate_fill( affected_val, affected$affected, affected$labels, keep_full_scale, breaks, colors_aff, colors_unaff ) - lst_sc$border_scale <- border - lst_sc + list( + fill = lst_aff, + bord = lst_bord + ) } ) @@ -261,15 +260,17 @@ setMethod("generate_colors", "numeric", affected <- generate_aff_inds(affected_val, mods_aff, threshold, sup_thres_aff ) - border <- generate_border(avail, colors_avail) - lst_sc <- generate_fill( + lst_bord <- generate_border(avail, colors_avail) + lst_aff <- generate_fill( affected_val, affected$affected, affected$labels, keep_full_scale, breaks, colors_aff, colors_unaff ) - lst_sc$border_scale <- border - lst_sc + list( + fill = lst_aff, + bord = lst_bord + ) } ) @@ -279,7 +280,7 @@ setMethod("generate_colors", "numeric", setMethod("generate_colors", "logical", function( obj, avail, - mods_aff = NULL, threshold = 0.5, sup_thres_aff = TRUE, + mods_aff = TRUE, threshold = 0.5, sup_thres_aff = TRUE, keep_full_scale = FALSE, breaks = 3, colors_aff = c("yellow2", "red"), colors_unaff = c("white", "steelblue4"), @@ -289,14 +290,16 @@ setMethod("generate_colors", "logical", affected <- generate_aff_inds(affected_val, mods_aff, threshold, sup_thres_aff ) - border <- generate_border(avail, colors_avail) - lst_sc <- generate_fill( + lst_bord <- generate_border(avail, colors_avail) + lst_aff <- generate_fill( affected_val, affected$affected, affected$labels, keep_full_scale, breaks, colors_aff, colors_unaff ) - lst_sc$border_scale <- border - lst_sc + list( + fill = lst_aff, + bord = lst_bord + ) } ) @@ -314,7 +317,7 @@ setMethod("generate_colors", "logical", setMethod("generate_colors", "Pedigree", function(obj, col_aff = "affected", add_to_scale = TRUE, - col_avail = "available", + col_avail = "avail", mods_aff = NULL, threshold = 0.5, sup_thres_aff = TRUE, keep_full_scale = FALSE, breaks = 3, colors_aff = c("yellow2", "red"), @@ -338,29 +341,50 @@ setMethod("generate_colors", "Pedigree", return(obj) } - new_col <- paste0(col_aff, "_aff") + new_fill <- paste0(col_aff, "_mods") + new_bord <- paste0(col_avail, "_mods") df <- check_columns(as.data.frame(ped(obj)), c(col_aff, col_avail), - "", new_col, others_cols = TRUE + "", c(new_fill, new_bord), others_cols = TRUE ) - lst_sc <- generate_colors(df[[col_aff]], df[[col_avail]], - mods_aff, threshold, sup_thres_aff, - keep_full_scale, breaks, - colors_aff, colors_unaff, colors_avail + ## Generate affected individuals + lst_inds <- generate_aff_inds(df[[col_aff]], + mods_aff, threshold, sup_thres_aff ) - mcols(obj)[new_col] <- lst_sc$mods - affected(ped(obj)) <- lst_sc$affected - if (nrow(lst_sc$fill_scale) > 0) { - lst_sc$fill_scale$column_mods <- new_col - lst_sc$fill_scale$column_values <- col_aff - } + ## Create border and fill scales + lst_bord <- generate_border( + df[[col_avail]], colors_avail + ) + lst_fill <- generate_fill( + df[[col_aff]], lst_inds$affected, lst_inds$labels, + keep_full_scale, breaks, colors_aff, colors_unaff + ) - scales <- list( - fill = lst_sc$fill_scale, - border = lst_sc$border_scale + lst_sc <- list( + fill = lst_fill$sc_fill, + border = lst_bord$sc_bord ) + ## Add mods to Pedigree object and update slots + mcols(obj)[new_fill] <- lst_fill$mods + mcols(obj)[new_bord] <- lst_bord$mods + + affected(ped(obj)) <- lst_fill$affected + avail(ped(obj)) <- lst_bord$avail + + ## Update scales with correct names + if (nrow(lst_sc$fill) > 0) { + lst_sc$fill$column_mods <- new_fill + lst_sc$fill$column_values <- col_aff + } + + if (nrow(lst_sc$bord) > 0) { + lst_sc$border$column_mods <- new_bord + lst_sc$border$column_values <- col_avail + } + + ## Should the affected scales be added to existing one if (add_to_scale) { if (col_aff %in% fill(obj)$column_values) { if (!reset) { @@ -379,12 +403,12 @@ setMethod("generate_colors", "Pedigree", max(fill(obj)$order) + 1, 1 ) } - scales$fill$order <- new_order - scales$fill <- rbind.fill(fill(obj), scales$fill) + lst_sc$fill$order <- new_order + lst_sc$fill <- rbind.fill(fill(obj), lst_sc$fill) } else { - scales$fill$order <- 1 + lst_sc$fill$order <- 1 } - scales(obj) <- Scales(scales$fill, scales$border) + scales(obj) <- Scales(lst_sc$fill, lst_sc$border) validObject(obj) obj } diff --git a/R/is_informative.R b/R/is_informative.R index a4feafba..cbf244ed 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -36,7 +36,7 @@ #' @examples #' data("sampleped") #' ped <- Pedigree(sampleped) -#' is_informative(ped, col_aff = "affection_aff") +#' is_informative(ped, col_aff = "affection_mods") #' #' @export #' @docType methods @@ -115,13 +115,15 @@ setMethod("is_informative", "Pedigree", function( informative, missid ) - if (!reset & any(!is.na(id_inf(ped(obj))))) { + if (!reset & any(!is.na(isinf(ped(obj))))) { stop( - "The id_inf slot already has values in the Ped object", + "The isinf slot already has values in the Ped object", " and reset is set to FALSE" ) } - id_inf(ped(obj)) <- vect_to_binary(ifelse(ped_df$id %in% id_inf, 1, 0)) + isinf(ped(obj)) <- vect_to_binary( + ifelse(ped_df$id %in% id_inf, 1, 0), logical = TRUE + ) obj }) diff --git a/R/min_dist_inf.R b/R/min_dist_inf.R index c80bb11b..9f5481ef 100644 --- a/R/min_dist_inf.R +++ b/R/min_dist_inf.R @@ -37,7 +37,7 @@ NULL #' @examples #' data(sampleped) #' ped <- Pedigree(sampleped) -#' min_dist_inf(ped, col_aff = "affection_aff")$ped +#' min_dist_inf(ped, col_aff = "affection_mods")$ped #' #' @seealso [kinship()] #' @include is_informative.R @@ -77,7 +77,7 @@ setMethod("min_dist_inf", "character", function(obj, #' @rdname min_dist_inf #' @aliases min_dist_inf,Pedigree #' @docType methods -#' @param reset If TRUE, the `kin` and if `id_inf` columns is reset +#' @param reset If TRUE, the `kin` and if `isinf` columns is reset setMethod("min_dist_inf", "Pedigree", function(obj, col_aff = NULL, informative = "AvAf", missid = NA_character_, reset = FALSE, ... @@ -99,7 +99,7 @@ setMethod("min_dist_inf", "Pedigree", function(obj, #' @rdname min_dist_inf #' @aliases min_dist_inf,Ped #' @docType methods -#' @param reset If TRUE, the `kin` and if `id_inf` columns is reset +#' @param reset If TRUE, the `kin` and if `isinf` columns is reset setMethod("min_dist_inf", "Ped", function(obj, col_aff = NULL, informative = "AvAf", missid = NA_character_, reset = FALSE, ... diff --git a/R/norm_data.R b/R/norm_data.R index 4b6b4efb..e466f72d 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -140,7 +140,7 @@ norm_ped <- function( ## Add terminated for sterilized individuals that is neither dad nor mom if ("sterilisation" %in% colnames(ped_df)) { - ped_df$steril <- vect_to_binary(ped_df$sterilisation) + ped_df$steril <- vect_to_binary(ped_df$sterilisation, logical = TRUE) ped_df$sex[ ped_df$steril == 1 & !is.na(ped_df$steril) & !is_father & !is_mother @@ -213,15 +213,15 @@ norm_ped <- function( #### Available #### if ("available" %in% colnames(ped_df)) { - ped_df$avail <- vect_to_binary(ped_df$available) + ped_df$avail <- vect_to_binary(ped_df$available, logical = TRUE) } #### Status #### if ("vitalStatus" %in% colnames(ped_df)) { - ped_df$status <- vect_to_binary(ped_df$vitalStatus) + ped_df$status <- vect_to_binary(ped_df$vitalStatus, logical = TRUE) } #### Affected #### if ("affection" %in% colnames(ped_df)) { - ped_df$affected <- vect_to_binary(ped_df$affection) + ped_df$affected <- vect_to_binary(ped_df$affection, logical = TRUE) } #### Convert to num #### diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index 08b87d33..70dd4f84 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -100,7 +100,7 @@ ped_to_legdf <- function(ped, plot_df <- rbind.fill(plot_df, sex, sex_label) # Border - border_mods <- unique(ped_df[, unique(border(ped)$column)]) + border_mods <- unique(ped_df[, unique(border(ped)$column_mods)]) border <- data.frame( x0 = posx[3], y0 = posy[seq_along(border_mods)], type = rep("square_1_1", length(border_mods)), diff --git a/R/ped_to_plotdf.R b/R/ped_to_plotdf.R index ed29df50..15d58b2d 100644 --- a/R/ped_to_plotdf.R +++ b/R/ped_to_plotdf.R @@ -95,7 +95,7 @@ setMethod("ped_to_plotdf", "Pedigree", function( ped_df <- as.data.frame(ped(obj)) # border mods of each box - border_mods <- ped_df[id[idx], unique(border(obj)$column)] + border_mods <- ped_df[id[idx], unique(border(obj)$column_mods)] border_idx <- match(border_mods, border(obj)$mods) for (aff in seq_len(n_aff)) { diff --git a/R/useful_inds.R b/R/useful_inds.R index 5f1df213..566a3bb8 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -48,18 +48,18 @@ setMethod("useful_inds", "character", id_inf <- is_informative(id, avail, affected, informative, missid ) - is_inf <- id %in% id_inf + isinf <- id %in% id_inf # Keep individual affected or available if (keep_infos) { - is_inf <- is_inf | + isinf <- isinf | (!is.na(affected) & affected == 1) | (!is.na(avail) & avail == 1) } # Check if parents participate to the Pedigree structure ped_part <- num_child_tot > 1 - to_kept <- is_inf | ped_part + to_kept <- isinf | ped_part num_ind_old <- 0 num_ind_new <- length(id[to_kept]) @@ -116,7 +116,9 @@ setMethod("useful_inds", "Ped", function(obj, " and reset is set to FALSE" ) } - obj@useful <- ifelse(id(obj) %in% useful, 1, 0) + obj@useful <- vect_to_binary( + ifelse(id(obj) %in% useful, 1, 0), logical = TRUE + ) validObject(obj) obj }) diff --git a/R/utils.R b/R/utils.R index 2b4d58c0..c4176421 100644 --- a/R/utils.R +++ b/R/utils.R @@ -310,7 +310,7 @@ TRUE #' c(0, 1, 2, 3.6, "TRUE", "FALSE", "0", "1", "NA", "B", TRUE, FALSE, NA) #' ) #' @export -vect_to_binary <- function(vect) { +vect_to_binary <- function(vect, logical = FALSE) { if (is.factor(vect) || is.numeric(vect) || is.logical(vect)) { vect <- as.character(vect) } @@ -325,7 +325,11 @@ vect_to_binary <- function(vect) { ), code_equiv, warn_missing = FALSE )) vect[!vect %in% c(0, 1)] <- NA - vect + if (logical) { + as.logical(vect) + } else { + vect + } } #' Transform a anchor variable to an ordered factor diff --git a/man/Ped.Rd b/man/Ped.Rd index 6349b550..6162e8cf 100644 --- a/man/Ped.Rd +++ b/man/Ped.Rd @@ -29,8 +29,8 @@ \alias{avail,Ped-method} \alias{kin} \alias{kin,Ped-method} -\alias{id_inf} -\alias{id_inf,Ped-method} +\alias{isinf} +\alias{isinf,Ped-method} \alias{useful} \alias{useful,Ped-method} \title{S4 class to represent the identity informations in a Pedigree.} @@ -74,7 +74,7 @@ avail(x) kin(x) -id_inf(x) +isinf(x) useful(x) } @@ -107,17 +107,21 @@ biologicals mothers.} \item{famid}{A character vector with the family identifiers of the individuals.} -\item{steril}{A numeric vector with the sterilisation status of the -individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} +\item{steril}{A logical vector with the sterilisation status of the +individuals +(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} -\item{status}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} +\item{status}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} -\item{avail}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} \item{missid}{A character vector with the missing values identifiers. All the id, dadid and momid corresponding to those values will be set @@ -192,20 +196,25 @@ to the Ped slots. \item{\code{famid}}{A character vector with the family identifiers of the individuals (optional).} -\item{\code{steril}}{A numeric vector with the sterilisation status of the -individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} +\item{\code{steril}}{A logical vector with the sterilisation status of the +individuals +(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} -\item{\code{status}}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} +\item{\code{status}}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} -\item{\code{avail}}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{\code{avail}}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} -\item{\code{affected}}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = not affected, \code{1} = affected, \code{NA} = unknown).} +\item{\code{affected}}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = not affected, \code{TRUE} = affected, \code{NA} = unknown).} -\item{\code{useful}}{A numeric vector with the usefulness status of the -individuals (i.e. \code{0} = not useful, \code{1} = useful).} +\item{\code{useful}}{A logical vector with the usefulness status of the +individuals +(i.e. \code{FALSE} = not useful, \code{TRUE} = useful).} \item{\code{kin}}{A numeric vector with minimal kinship value between the individuals and the useful individuals.} diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd index 9bad5800..202c388f 100644 --- a/man/Pedigree.Rd +++ b/man/Pedigree.Rd @@ -78,20 +78,24 @@ The following values are recognized: \item{famid}{A character vector with the family identifiers of the individuals.} -\item{avail}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown). +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown). Can also be a data.frame with the same length as \code{obj}. If it is a matrix, it will be converted to a data.frame and the columns will be named after the \code{col_aff} argument.} -\item{status}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = alive, \code{1} = dead, \code{NA} = unknown).} +\item{status}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} -\item{steril}{A numeric vector with the sterilisation status of the -individuals (i.e. \code{0} = not sterilised, \code{1} = sterilised, \code{NA} = unknown).} +\item{steril}{A logical vector with the sterilisation status of the +individuals +(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} \item{rel_df}{A data.frame with the special relationships between individuals. See \code{\link[=Rel]{Rel()}} for more informations. diff --git a/man/Scale-class.Rd b/man/Scale-class.Rd index fabc446c..0e58be49 100644 --- a/man/Scale-class.Rd +++ b/man/Scale-class.Rd @@ -22,7 +22,7 @@ The columns needed are: \item 'column_values': name of the column containing the raw values in the Ped object \item 'column_mods': name of the column containing the mods of the transformed -affection in the Ped object +values in the Ped object \item 'mods': all the different mods \item 'labels': the corresponding labels of each mods \item 'affected': a logical value indicating if the mod correspond to an affected @@ -35,8 +35,10 @@ individuals \item{\code{border}}{A data.frame with the informations for the availability status. The columns needed are: \itemize{ -\item 'column':name of the column containing the mods to use in the +\item 'column_values': name of the column containing the raw values in the Ped object +\item 'column_mods': name of the column containing the mods of the transformed +values in the Ped object \item 'mods': all the different mods \item 'labels': the corresponding labels of each mods \item 'border': the color to use for this mods diff --git a/man/Scales.Rd b/man/Scales.Rd index 8ac13bd5..21367633 100644 --- a/man/Scales.Rd +++ b/man/Scales.Rd @@ -68,7 +68,7 @@ Scales( fill = data.frame( order = 1, column_values = "affected", - column_mods = "affected_mod", + column_mods = "affected_mods", mods = c(0, 1), labels = c("unaffected", "affected"), affected = c(FALSE, TRUE), @@ -77,7 +77,8 @@ Scales( angle = c(NA, 45) ), border = data.frame( - column = "avail", + column_values = "avail", + column_mods = "avail_mods", mods = c(0, 1), labels = c("not available", "available"), border = c("black", "blue") diff --git a/man/generate_border.Rd b/man/generate_border.Rd index 80e52f8c..da339e84 100644 --- a/man/generate_border.Rd +++ b/man/generate_border.Rd @@ -2,13 +2,12 @@ % Please edit documentation in R/generate_colors.R \name{generate_border} \alias{generate_border} -\title{Process the colors based on affection and availability} +\title{Process the colors based on availability} \usage{ -generate_border(avail, colors_avail = c("green", "black")) +generate_border(values, colors_avail = c("green", "black")) } \arguments{ -\item{avail}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{values}{The vector containing the values to process as available.} \item{colors_avail}{Set of 2 colors to use for the box's border of an individual. The first color will be used for available individual (avail @@ -19,11 +18,13 @@ A dataframe containing the scale to use for the availability status. } \description{ -Process the colors based on affection and availability +Process the colors based on availability } \details{ Perform transformation uppon a column given as the one containing the availability status to compute the border color. +The vector given will be transformed using the \code{\link[=vect_to_binary]{vect_to_binary()}} +function. } \examples{ generate_border(c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA)) diff --git a/man/generate_colors.Rd b/man/generate_colors.Rd index 1b2c2dcc..24a6e80a 100644 --- a/man/generate_colors.Rd +++ b/man/generate_colors.Rd @@ -44,7 +44,7 @@ generate_colors(obj, ...) \S4method{generate_colors}{logical}( obj, avail, - mods_aff = NULL, + mods_aff = TRUE, threshold = 0.5, sup_thres_aff = TRUE, keep_full_scale = FALSE, @@ -58,7 +58,7 @@ generate_colors(obj, ...) obj, col_aff = "affected", add_to_scale = TRUE, - col_avail = "available", + col_avail = "avail", mods_aff = NULL, threshold = 0.5, sup_thres_aff = TRUE, @@ -76,8 +76,9 @@ each individuals. The affection status can be numeric, logical or character.} \item{...}{Other parameters to pass to the \code{generate_colors} function} -\item{avail}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} \item{mods_aff}{Vector of modality to consider as affected in the case where the \code{values} is a factor.} diff --git a/man/generate_fill.Rd b/man/generate_fill.Rd index 044ab2a4..49e2dce2 100644 --- a/man/generate_fill.Rd +++ b/man/generate_fill.Rd @@ -17,7 +17,9 @@ generate_fill( \arguments{ \item{values}{The vector containing the values to process as affection.} -\item{affected}{The vector containing the affection status TRUE/FALSE.} +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} \item{labels}{The vector containing the labels to use for the affection.} diff --git a/man/is_informative.Rd b/man/is_informative.Rd index ae6e54d6..c0510c2a 100644 --- a/man/is_informative.Rd +++ b/man/is_informative.Rd @@ -33,11 +33,13 @@ is_informative(obj, ...) \item{...}{Additional arguments passed to methods} -\item{avail}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} \item{informative}{Informative individuals selection can take 5 values: \itemize{ @@ -87,6 +89,6 @@ columns. \examples{ data("sampleped") ped <- Pedigree(sampleped) -is_informative(ped, col_aff = "affection_aff") +is_informative(ped, col_aff = "affection_mods") } diff --git a/man/min_dist_inf.Rd b/man/min_dist_inf.Rd index 433c77e9..33014023 100644 --- a/man/min_dist_inf.Rd +++ b/man/min_dist_inf.Rd @@ -48,11 +48,13 @@ The following values are recognized: \item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" }} -\item{avail}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} \item{informative}{Informative individuals selection can take 5 values: \itemize{ @@ -71,7 +73,7 @@ individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknow All the id, dadid and momid corresponding to those values will be set to \code{NA_character_}.} -\item{reset}{If TRUE, the \code{kin} and if \code{id_inf} columns is reset} +\item{reset}{If TRUE, the \code{kin} and if \code{isinf} columns is reset} } \value{ \subsection{When obj is a vector}{ @@ -105,7 +107,7 @@ by 2, the minimum distance is increased by 1. \examples{ data(sampleped) ped <- Pedigree(sampleped) -min_dist_inf(ped, col_aff = "affection_aff")$ped +min_dist_inf(ped, col_aff = "affection_mods")$ped } \seealso{ diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index 9ea40919..291843a3 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -34,11 +34,13 @@ useful_inds(obj, ...) \item{...}{Additional arguments passed to methods} -\item{avail}{A numeric vector with the availability status of the -individuals (i.e. \code{0} = not available, \code{1} = available, \code{NA} = unknown).} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} -\item{affected}{A numeric vector with the affection status of the -individuals (i.e. \code{0} = unaffected, \code{1} = affected, \code{NA} = unknown).} +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} \item{num_child_tot}{A numeric vector of the number of children of each individuals} diff --git a/man/vect_to_binary.Rd b/man/vect_to_binary.Rd index 3e8fa830..276d6eee 100644 --- a/man/vect_to_binary.Rd +++ b/man/vect_to_binary.Rd @@ -4,7 +4,7 @@ \alias{vect_to_binary} \title{Transform a vector variable to binary vector} \usage{ -vect_to_binary(vect) +vect_to_binary(vect, logical = FALSE) } \arguments{ \item{vect}{A character, factor, logical or numeric vector corresponding to diff --git a/tests/testthat/_snaps/class.md b/tests/testthat/_snaps/class.md index 537c9dd4..1e92f50d 100644 --- a/tests/testthat/_snaps/class.md +++ b/tests/testthat/_snaps/class.md @@ -8,8 +8,8 @@ ID5 ID5 female ID4 ID4 male - steril status avail affected useful kin id_inf - + steril status avail affected useful kin isinf + ID5 ID4 num_child_tot num_child_dir num_child_ind @@ -67,8 +67,8 @@ 2 3 ID2 ID2 2 ID2 FALSE ID2 2 60 Slot "border": - column mods labels border - 1 ID1 1 Lab1 ID1 - 2 ID2 2 Lab2 ID2 + column_values column_mods mods labels border + 1 ID1 ID1 1 Lab1 ID1 + 2 ID2 ID2 2 Lab2 ID2 diff --git a/tests/testthat/_snaps/norm_data.md b/tests/testthat/_snaps/norm_data.md index 4193e7d5..86eb804c 100644 --- a/tests/testthat/_snaps/norm_data.md +++ b/tests/testthat/_snaps/norm_data.md @@ -15,16 +15,16 @@ 9 8 2 0 2 FALSE 3 A 10 9 9 8 3 FALSE Ab 5 B sex steril status avail id dadid momid famid - 1 terminated 1 NA NA 1 3 4 - 2 male 0 NA 1 2 0 0 - 3 male 0 NA 0 3 8 7 - 4 female 0 NA NA 4 6 5 - 5 female 0 NA NA 5 0 0 - 6 male 0 NA 0 6 0 - 7 female 0 NA NA 7 0 0 - 8 female 0 NA 0 8 0 0 - 9 female 0 NA NA 8 2 0 - 10 male 0 NA NA 9 9 8 + 1 terminated TRUE NA NA 1 3 4 + 2 male FALSE NA TRUE 2 0 0 + 3 male FALSE NA FALSE 3 8 7 + 4 female FALSE NA NA 4 6 5 + 5 female FALSE NA NA 5 0 0 + 6 male FALSE NA FALSE 6 0 + 7 female FALSE NA NA 7 0 0 + 8 female FALSE NA FALSE 8 0 0 + 9 female FALSE NA NA 8 2 0 + 10 male FALSE NA NA 9 9 8 error affected family 1 NA 2 isSterilButIsParent NA diff --git a/tests/testthat/_snaps/ped_to_legdf.md b/tests/testthat/_snaps/ped_to_legdf.md index aefbd381..9c774d98 100644 --- a/tests/testthat/_snaps/ped_to_legdf.md +++ b/tests/testthat/_snaps/ped_to_legdf.md @@ -9,7 +9,7 @@ 2 titles 4.46750 0.0 NA NA text black NA 3 titles 9.20250 0.0 NA NA text black NA 4 titles 14.56333 0.0 NA NA text black NA - 5 titles 19.92417 0.0 NA NA text black NA + 5 titles 20.28375 0.0 NA NA text black NA 6 sex 0.00000 1.0 NA NA square_1_1 white black NA 7 sex 0.00000 3.0 NA NA circle_1_1 white black NA 8 sex_label 1.20000 1.5 NA NA text black NA @@ -33,26 +33,26 @@ 26 affected_2_1 14.36333 3.0 NA NA square_3_2 red black NA 27 affected_label_2_0 15.56333 1.5 NA NA text black NA 28 affected_label_2_1 15.56333 3.5 NA NA text black NA - 29 aff_bkg_3_1 19.72417 1.0 NA NA square_1_1 white black NA - 30 aff_bkg_3_2 19.72417 3.0 NA NA square_1_1 white black NA - 31 aff_bkg_3_3 19.72417 5.0 NA NA square_1_1 white black NA - 32 aff_bkg_3_4 19.72417 7.0 NA NA square_1_1 white black NA - 33 aff_bkg_3_5 19.72417 9.0 NA NA square_1_1 white black NA - 34 aff_bkg_3_6 19.72417 11.0 NA NA square_1_1 white black NA - 35 affected_3_1 19.72417 1.0 NA NA square_3_3 #FFFFFF black NA - 36 affected_3_2 19.72417 3.0 NA NA square_3_3 #9AB1C4 black NA - 37 affected_3_3 19.72417 5.0 NA NA square_3_3 #36648B black NA - 38 affected_3_4 19.72417 7.0 NA NA square_3_3 #FFC0CB black NA - 39 affected_3_5 19.72417 9.0 NA NA square_3_3 #CF70DD black NA - 40 affected_3_6 19.72417 11.0 NA NA square_3_3 #A020F0 black NA - 41 affected_label_3_1 20.92417 1.5 NA NA text black NA - 42 affected_label_3_2 20.92417 3.5 NA NA text black NA - 43 affected_label_3_3 20.92417 5.5 NA NA text black NA - 44 affected_label_3_4 20.92417 7.5 NA NA text black NA - 45 affected_label_3_5 20.92417 9.5 NA NA text black NA - 46 affected_label_3_6 20.92417 11.5 NA NA text black NA + 29 aff_bkg_3_1 20.08375 1.0 NA NA square_1_1 white black NA + 30 aff_bkg_3_2 20.08375 3.0 NA NA square_1_1 white black NA + 31 aff_bkg_3_3 20.08375 5.0 NA NA square_1_1 white black NA + 32 aff_bkg_3_4 20.08375 7.0 NA NA square_1_1 white black NA + 33 aff_bkg_3_5 20.08375 9.0 NA NA square_1_1 white black NA + 34 aff_bkg_3_6 20.08375 11.0 NA NA square_1_1 white black NA + 35 affected_3_1 20.08375 1.0 NA NA square_3_3 #FFFFFF black NA + 36 affected_3_2 20.08375 3.0 NA NA square_3_3 #9AB1C4 black NA + 37 affected_3_3 20.08375 5.0 NA NA square_3_3 #36648B black NA + 38 affected_3_4 20.08375 7.0 NA NA square_3_3 #FFC0CB black NA + 39 affected_3_5 20.08375 9.0 NA NA square_3_3 #CF70DD black NA + 40 affected_3_6 20.08375 11.0 NA NA square_3_3 #A020F0 black NA + 41 affected_label_3_1 21.28375 1.5 NA NA text black NA + 42 affected_label_3_2 21.28375 3.5 NA NA text black NA + 43 affected_label_3_3 21.28375 5.5 NA NA text black NA + 44 affected_label_3_4 21.28375 7.5 NA NA text black NA + 45 affected_label_3_5 21.28375 9.5 NA NA text black NA + 46 affected_label_3_6 21.28375 11.5 NA NA text black NA 47 max_lim 0.00000 0.0 NA NA text black NA - 48 max_lim 26.30875 11.0 NA NA text black NA + 48 max_lim 26.66833 11.0 NA NA text black NA density cex label tips adjx adjy 1 NA 1.2 Sex 0 1 2 NA 1.2 Border 0 1 @@ -80,8 +80,8 @@ 24 NA NA NA NA 25 NA NA NA NA 26 NA NA NA NA - 27 NA 0.8 Healthy <= to 0.5 0 1 - 28 NA 0.8 Affected > to 0.5 0 1 + 27 NA 0.8 Healthy are FALSE 0 1 + 28 NA 0.8 Affected are TRUE 0 1 29 NA NA NA NA 30 NA NA NA NA 31 NA NA NA NA @@ -114,7 +114,7 @@ [1] 0.8 $par_usr$usr - [1] 0.00000 26.30875 0.00000 11.50000 + [1] 0.00000 26.66833 0.00000 11.50000 diff --git a/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg b/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg index d029dd0a..fbd9f873 100644 --- a/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg +++ b/tests/testthat/_snaps/ped_to_legdf/legend-alone.svg @@ -25,51 +25,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -Sex -Border -affection -avail -val_num -Male -Female -Non Available -Available -Healthy <= to 0.5 -Affected > to 0.5 -NA -Healthy <= to 0.5 -Affected > to 0.5 -Healthy <= to 115 : [101,106] -Healthy <= to 115 : (106,110] -Healthy <= to 115 : (110,115] -Affected > to 115 : [116,124] -Affected > to 115 : (124,133] -Affected > to 115 : (133,141] + + + + + + + + + + + + + + + + + + + + + + + + + + +Sex +Border +affection +avail +val_num +Male +Female +Non Available +Available +Healthy <= to 0.5 +Affected > to 0.5 +NA +Healthy are FALSE +Affected are TRUE +Healthy <= to 115 : [101,106] +Healthy <= to 115 : (106,110] +Healthy <= to 115 : (110,115] +Affected > to 115 : [116,124] +Affected > to 115 : (124,133] +Affected > to 115 : (133,141] diff --git a/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg b/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg index d5d80e47..78421991 100644 --- a/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg +++ b/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg @@ -286,49 +286,49 @@ - - - - - - - - - - - - - - - - - - - - - - - - -Sex -Border -affection -avail -val_num -Male -Female -Non Available -Available -Healthy <= to 0.5 -Affected > to 0.5 -NA -Healthy <= to 0.5 -Affected > to 0.5 -Healthy <= to 115 : [101,106] -Healthy <= to 115 : (106,110] -Healthy <= to 115 : (110,115] -Affected > to 115 : [116,124] -Affected > to 115 : (124,133] -Affected > to 115 : (133,141] + + + + + + + + + + + + + + + + + + + + + + + + +Sex +Border +affection +avail +val_num +Male +Female +Non Available +Available +Healthy <= to 0.5 +Affected > to 0.5 +NA +Healthy are FALSE +Affected are TRUE +Healthy <= to 115 : [101,106] +Healthy <= to 115 : (106,110] +Healthy <= to 115 : (110,115] +Affected > to 115 : [116,124] +Affected > to 115 : (124,133] +Affected > to 115 : (133,141] diff --git a/tests/testthat/test-class.R b/tests/testthat/test-class.R index 84acd5a1..18257e6c 100644 --- a/tests/testthat/test-class.R +++ b/tests/testthat/test-class.R @@ -204,7 +204,7 @@ test_that("Scales class works", { ## From scratch scl0 <- Scales() expect_equal(dim(fill(scl0)), c(0, 9)) - expect_equal(dim(border(scl0)), c(0, 4)) + expect_equal(dim(border(scl0)), c(0, 5)) expect_error(fill(scl0) <- c("ID1", "ID2")) expect_error(border(scl0) <- c("ID1", "ID2")) @@ -223,7 +223,8 @@ test_that("Scales class works", { angle = c("A", 60) )) expect_snapshot_error(border(scl0) <- data.frame( - column = c("ID1", "ID2"), + column_values = c("ID1", "ID2"), + column_mods = c("ID1", "ID2"), mods = c("ID1", "ID2"), labels = c(1, 2), border = c("ID1", "ID2") @@ -246,13 +247,14 @@ test_that("Scales class works", { expect_equal(fill(scl0)$fill[1], "ID3") border(scl0) <- data.frame( - column = c("ID1", "ID2"), + column_values = c("ID1", "ID2"), + column_mods = c("ID1", "ID2"), mods = c(1, 2), labels = c("Lab1", "Lab2"), border = c("ID1", "ID2") ) - expect_equal(dim(border(scl0)), c(2, 4)) + expect_equal(dim(border(scl0)), c(2, 5)) expect_snapshot(scl0) ## With constructor @@ -269,7 +271,8 @@ test_that("Scales class works", { angle = c(90, 60) ), border = data.frame( - column = c("ID1", "ID2"), + column_values = c("ID1", "ID2"), + column_mods = c("ID1", "ID2"), mods = c(1, 2), labels = c("Lab1", "Lab2"), border = c("ID1", "ID2") @@ -289,7 +292,7 @@ test_that("Pedigree class works", { expect_equal(horder(pedi), numeric()) expect_equal(dim(spouse(pedi)), c(0, 3)) expect_equal(dim(fill(pedi)), c(0, 9)) - expect_equal(dim(border(pedi)), c(0, 4)) + expect_equal(dim(border(pedi)), c(0, 5)) expect_equal(length(ped(pedi)), 0) expect_equal(length(rel(pedi)), 0) }) diff --git a/tests/testthat/test-generate_scales.R b/tests/testthat/test-generate_scales.R index fe9b3533..0f5eeefb 100644 --- a/tests/testthat/test-generate_scales.R +++ b/tests/testthat/test-generate_scales.R @@ -37,10 +37,15 @@ test_that("generate aff inds works", { }) test_that("generate border works", { + vect_to_binary(ped_df$avail) border <- generate_border(ped_df$avail) - expect_equal(border$mods, c(NA, 1, 0)) - expect_equal(border$border, c("grey", "green", "black")) - expect_equal(border$labels, c("NA", "Available", "Non Available")) + expect_equal(border$mods, c(0, 1, NA, NA, NA, 0, NA, NA, 0, NA)) + expect_equal(border$avail, + c(FALSE, TRUE, NA, NA, NA, FALSE, NA, NA, FALSE, NA) + ) + expect_equal(border$sc_bord$mods, c(NA, 1, 0)) + expect_equal(border$sc_bord$border, c("grey", "green", "black")) + expect_equal(border$sc_bord$labels, c("NA", "Available", "Non Available")) }) test_that("generate fill full scale off", { @@ -51,9 +56,9 @@ test_that("generate fill full scale off", { aff_fact$labels, keep_full_scale = FALSE ) expect_equal(list_num$mods, aff_num$mods) - expect_equal(list_num$fill_scale$fill, c("white", "red", "grey")) + expect_equal(list_num$sc_fill$fill, c("white", "red", "grey")) expect_equal(list_fact$mods, aff_fact$mods) - expect_equal(list_fact$fill_scale$fill, c("grey", "white", "red")) + expect_equal(list_fact$sc_fill$fill, c("grey", "white", "red")) }) test_that("generate fill full scale on", { @@ -65,12 +70,12 @@ test_that("generate fill full scale on", { ) expect_equal( - list_num$fill_scale$fill, c("#FFFFFF", "#9AB1C4", "#36648B", + list_num$sc_fill$fill, c("#FFFFFF", "#9AB1C4", "#36648B", "#FF0000", "grey", "#F67700", "#EEEE00" ) ) expect_equal( - list_fact$fill_scale$fill, + list_fact$sc_fill$fill, c("grey", "#FFFFFF", "#FF0000", "#EEEE00", "#36648B") ) @@ -80,7 +85,7 @@ test_that("generate fill full scale on", { list_num_rev <- generate_fill(ped_df$NumOther, aff_num_notsup$affected, aff_num_notsup$labels, keep_full_scale = TRUE ) - expect_equal(list_num_rev$fill_scale$fill, c( + expect_equal(list_num_rev$sc_fill$fill, c( "#FF0000", "#F67700", "#EEEE00", "#FFFFFF", "grey", "#9AB1C4", "#36648B" )) @@ -93,7 +98,8 @@ test_that("generate colors works on Pedigree object", { ped_aff <- generate_colors(ped, col_aff = "id_num", threshold = 120, sup_thres_aff = TRUE, add_to_scale = FALSE ) - expect_equal(mcols(ped_aff)$id_num_aff, c(rep(0, 20), rep(1, 21))) + expect_equal(mcols(ped_aff)$id_num_mods, c(rep(0, 20), rep(1, 21))) + expect_equal(sum(mcols(ped_aff)$avail_mods), 16) expect_equal(fill(ped_aff)$fill, c("white", "red")) expect_equal(fill(ped_aff)$labels, c("Healthy <= to 120", "Affected > to 120") diff --git a/tests/testthat/test-is_informative.R b/tests/testthat/test-is_informative.R index fc846463..dae823ac 100644 --- a/tests/testthat/test-is_informative.R +++ b/tests/testthat/test-is_informative.R @@ -48,12 +48,12 @@ test_that("is_informative works with Pedigree", { ) - ped_upd <- is_informative(ped, col_aff = "affection_aff", + ped_upd <- is_informative(ped, col_aff = "affection_mods", informative = "AvAf" ) expect_equal( - id(ped(ped_upd))[id_inf(ped(ped_upd)) == 1], + id(ped(ped_upd))[isinf(ped(ped_upd)) == TRUE], c( "1_110", "1_116", "1_118", "1_119", "1_124", "1_127", "1_128", "2_201", "2_203", "2_206", "2_207", "2_214" @@ -69,8 +69,8 @@ test_that("is_informative works with Pedigree", { col_aff = "sex", mods_aff = "male", add_to_scale = FALSE ) expect_equal( - sum(id_inf(ped(is_informative(ped, col_aff = "sex_aff", - informative = "Af" + sum(isinf(ped(is_informative( + ped, col_aff = "sex_mods", informative = "Af" )))), length(ped(ped, "id")[ped(ped, "sex") == "male"]) ) @@ -88,10 +88,9 @@ test_that("is_informative works with Pedigree", { add_to_scale = FALSE ) expect_equal( - sum(id_inf(ped(is_informative(ped, - col_aff = "education_aff", informative = "Af" - ))) - ), + sum(isinf(ped(is_informative( + ped, col_aff = "education_mods", informative = "Af" + )))), sum(minnbreast$education > 3, na.rm = TRUE) ) }) diff --git a/tests/testthat/test-min_dist_inf.R b/tests/testthat/test-min_dist_inf.R index fa11d371..c085376d 100644 --- a/tests/testthat/test-min_dist_inf.R +++ b/tests/testthat/test-min_dist_inf.R @@ -28,7 +28,7 @@ test_that("min_dist_inf works with Pedigree", { threshold = 0.5, sup_thres_aff = TRUE ) expect_equal(sum(affected(ped(ped)), na.rm = TRUE), 23) - mxkin <- min_dist_inf(ped, col_aff = "affection_aff", informative = "Av") + mxkin <- min_dist_inf(ped, col_aff = "affection_mods", informative = "Av") expect_s4_class(mxkin, "Pedigree") expect_equal(sum(kin(ped(mxkin)), na.rm = TRUE), 90) }) diff --git a/tests/testthat/test-ped_to_legdf.R b/tests/testthat/test-ped_to_legdf.R index 6fffdeb1..eb031971 100644 --- a/tests/testthat/test-ped_to_legdf.R +++ b/tests/testthat/test-ped_to_legdf.R @@ -18,12 +18,11 @@ test_that("Pedigree legend works", { sampleped$val_num <- as.numeric(sampleped$id) ped <- Pedigree(sampleped) ped <- ped[ped(ped, "famid") == "1"] - ped <- generate_colors(ped, add_to_scale = TRUE, "avail") + ped <- generate_colors(ped, add_to_scale = TRUE, "avail", mods_aff = TRUE) ped <- generate_colors(ped, add_to_scale = TRUE, "val_num", threshold = 115, colors_aff = c("pink", "purple"), keep_full_scale = TRUE ) - lst <- ped_to_legdf(ped, boxh = 1, boxw = 1, cex = 0.8) expect_snapshot(lst) diff --git a/tests/testthat/test-pedigreeClass.R b/tests/testthat/test-pedigreeClass.R index af3847dd..aea6b3e5 100644 --- a/tests/testthat/test-pedigreeClass.R +++ b/tests/testthat/test-pedigreeClass.R @@ -12,7 +12,7 @@ test_that("Pedigree works", { expect_equal(length(ped@ped), 0) expect_equal(length(ped@rel), 0) expect_equal(dim(fill(ped)), c(0, 9)) - expect_equal(dim(border(ped)), c(0, 4)) + expect_equal(dim(border(ped)), c(0, 5)) expect_equal(dim(spouse(ped)), c(0, 3)) expect_equal(length(horder(ped)), 0) }) @@ -45,12 +45,15 @@ test_that("Pedigree old usage compatibility", { ped2df$smoker <- c(0, NA, 0, 0, 1, 1, 1, 0, 0, 0) ped2df$available <- c(0, 0, 1, 1, 0, 1, 1, 1, 1, 1) ped2df$status <- c(1, 1, 1, 0, 1, 0, 0, 0, 0, 0) + + ## With vectors ped2 <- with(ped2df, Pedigree(id, dadid, momid, sex, famid, available, status, affected = cbind(disease, smoker, available), - relation = matrix(c(8, 9, 1, 1), ncol = 4), missid = "0" + rel_df = matrix(c(8, 9, 1, 1), ncol = 4), missid = "0" )) - rel_df <- data.frame(id1 = 8, id2 = 9, code = 1, famid = 1) + ## With dataframes + rel_df <- data.frame(id1 = 8, id2 = 9, code = 1, famid = 1) expect_equal(ped2, Pedigree(ped2df, col_aff = c("disease", "smoker", "available"), rel_df, missid = "0" @@ -72,7 +75,7 @@ test_that("Pedigree from sampleped and affectation", { "family" = "famid" )) - expect_equal(dim(as.data.frame(ped(ped1))), c(41, 26)) + expect_equal(dim(as.data.frame(ped(ped1))), c(41, 27)) expect_equal(dim(as.data.frame(rel(ped1))), c(0, 4)) expect_error(id(ped(ped1)) <- "1") @@ -95,11 +98,11 @@ test_that("Pedigree subscripting", { "affection" = "cancer" ), missid = "0") expect_equal(length(minnped), 28081) - expect_equal(dim(as.data.frame(ped(minnped))), c(28081, 35)) + expect_equal(dim(as.data.frame(ped(minnped))), c(28081, 36)) ped8 <- minnped[famid(ped(minnped)) == "8"] - expect_equal(dim(as.data.frame(ped(ped8))), c(40, 35)) + expect_equal(dim(as.data.frame(ped(ped8))), c(40, 36)) # Subjects 150, 152, 154, 158 are children, # and 143, 162, 149 are parents and a child @@ -127,7 +130,7 @@ test_that("Pedigree subscripting", { test_that("Pedigree generic", { data("sampleped") pedi <- Pedigree(sampleped) - expect_equal(dim(as.data.frame(ped(pedi))), c(55, 26)) + expect_equal(dim(as.data.frame(ped(pedi))), c(55, 27)) expect_equal(names(as.list(pedi)), c("ped", "rel", "scales", "hints")) expect_equal(length(pedi), 55) }) diff --git a/tests/testthat/test-useful_inds.R b/tests/testthat/test-useful_inds.R index c5995b91..b7547d04 100644 --- a/tests/testthat/test-useful_inds.R +++ b/tests/testthat/test-useful_inds.R @@ -15,7 +15,7 @@ test_that("useful_inds works", { use_id_avaff <- with(df, useful_inds(id, dadid, momid, avail, affected, num_child_tot) ) - expect_equal(df$id[!df$id %in% use_id], + expect_equal(df$id[!df$id %in% use_id_avaff], c("101", "102", "107", "108", "113", "117") ) }) From 2949aa4f2d9abb8318de5a081b6e765d720c2540 Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 5 Nov 2023 19:37:07 +0100 Subject: [PATCH 065/111] Update documentation --- NAMESPACE | 3 + R/AllAccessors.R | 73 +++++++++++++++------- R/AllClass.R | 9 ++- R/AllConstructor.R | 65 +++++++++++++++++--- R/AllGeneric.R | 2 +- R/align.R | 72 +++++++++++++--------- R/alignped1.R | 53 ++++++++++------ R/alignped2.R | 20 +++--- R/alignped3.R | 22 +++---- R/alignped4.R | 9 +-- R/auto_hint.R | 95 +++++++++++++---------------- R/best_hint.R | 65 +++++++++++++------- R/find_unavailable.R | 6 +- R/fix_parents.R | 3 +- R/utils.R | 15 ++--- devel/documentation/todo.md | 54 ++++++++++++++++ man/Hints.Rd | 16 +++++ man/Ped-constructor.Rd | 65 ++++++++++++++++++++ man/Ped.Rd | 94 ++++++++-------------------- man/Pedigree.Rd | 10 ++- man/Rel.Rd | 9 ++- man/Scales.Rd | 6 +- man/align.Rd | 67 +++++++++++++------- man/alignped1.Rd | 66 +++++++++++++------- man/alignped2.Rd | 37 ++++++----- man/alignped3.Rd | 31 +++++----- man/alignped4.Rd | 14 +++-- man/ancestors.Rd | 9 ++- man/anchor_to_factor.Rd | 4 +- man/auto_hint.Rd | 46 ++++++++++---- man/best_hint.Rd | 44 +++++++------ man/bit_size.Rd | 5 -- man/descendants.Rd | 2 +- man/duporder.Rd | 27 +++----- man/exclude_unavail_founders.Rd | 16 ++++- man/extract-methods.Rd | 2 - man/famid-set.Rd | 20 ++++++ man/famid.Rd | 20 ++++++ man/family_check.Rd | 3 +- man/find_avail_affected.Rd | 2 +- man/find_avail_noninform.Rd | 2 +- man/find_unavailable.Rd | 2 +- man/findsibs.Rd | 23 ++----- man/findspouse.Rd | 27 +++----- man/fix_parents.Rd | 18 ++++-- man/get_twin_rel.Rd | 12 ++-- man/is_disconnected.Rd | 3 - man/is_founder.Rd | 6 -- man/is_parent.Rd | 10 +-- man/na_to_length.Rd | 10 ++- man/norm_ped.Rd | 5 -- man/norm_rel.Rd | 7 +-- man/num_child.Rd | 7 +-- man/ped_to_plotdf.Rd | 2 +- man/permute.Rd | 26 ++++++++ man/plot-Pedigree-missing-method.Rd | 12 ++-- man/prefix_famid.Rd | 5 +- man/rel_code_to_factor.Rd | 4 +- man/set_plot_area.Rd | 2 - man/sex_to_factor.Rd | 4 +- man/shift.Rd | 7 ++- man/shrink.Rd | 2 +- man/subregion.Rd | 16 +---- man/unrelated.Rd | 2 +- man/upd_famid_id.Rd | 3 +- man/vect_to_binary.Rd | 4 +- 66 files changed, 858 insertions(+), 544 deletions(-) create mode 100644 devel/documentation/todo.md create mode 100644 man/Ped-constructor.Rd create mode 100644 man/famid-set.Rd create mode 100644 man/famid.Rd create mode 100644 man/permute.Rd diff --git a/NAMESPACE b/NAMESPACE index 6ddd1874..002f0df7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,6 @@ # Generated by roxygen2: do not edit by hand +export("famid<-") export(Hints) export(Ped) export(Pedigree) @@ -70,12 +71,14 @@ exportClasses(Ped) exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) +exportMethods("mcols<-") exportMethods(Hints) exportMethods(Pedigree) exportMethods(Rel) exportMethods(Scales) exportMethods(as.data.frame) exportMethods(as.list) +exportMethods(auto_hint) exportMethods(family_check) exportMethods(fix_parents) exportMethods(generate_colors) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index daafbd83..a098e0e3 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -6,57 +6,83 @@ NULL #### S4 Ped Accessors #### ##### Mcols Accessors ##### +#' @section Setters: #' Metadata setters of Ped object from a list #' -#' @param x A Ped object. -#' @param value A list with the metadata. +#' Add the metadata into the `elementMetadata` slot of +#' a Ped object. +#' +#' @param x A Ped object. See [Ped()] for more information. +#' @param value A list or a data.frame with the metadata. +#' The length of each element in `value` need to match the +#' length of the Ped object. #' #' @return A Ped object with the metadata set. #' #' @rdname Ped -setMethod("mcols<-", signature(x = "Ped", value = "list"), function(x, value) { - mcols(x) <- as(value, "DataFrame") - x -}) +#' @aliases mcols<-,Ped,list +#' @docType methods +setMethod("mcols<-", + signature(x = "Ped", value = "list"), + function(x, value) { + mcols(x) <- as(value, "DataFrame") + x + } +) -#' Metadata setters of Ped object from a data.frame -#' -#' @param x A Ped object. -#' @param value A data.frame with the metadata. -#' -#' @return A Ped object with the metadata set. -#' +#' @export #' @rdname Ped -setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, value) { - mcols(x) <- as(value, "DataFrame") - x -}) +#' @aliases mcols<-,Ped,data.frame +#' @docType methods +setMethod("mcols<-", + signature(x = "Ped", value = "data.frame"), + function(x, value) { + mcols(x) <- as(value, "DataFrame") + x + } +) ##### Famid Accessors ##### -#' Famid getter of Ped object -#' -#' @param x A Ped object. +#' Famid getter +#' +#' @description Extract the family identifiers out +#' of a Ped, Rel or Pedigree object. +#' If use with a Pedigree object the famid slot of +#' its own Ped object will be given. #' -#' @return A character vector with the famid of each individual. +#' @param x A Ped, Rel or Pedigree object. #' -#' @rdname Ped -#' @aliases famid,Ped-method +#' @return A character vector of the family identifiers. #' @export setGeneric("famid", function(x) { standardGeneric("famid") }) + +#' @rdname Ped setMethod("famid", signature(x = "Ped"), function(x) { x@famid }) +#' @rdname Rel setMethod("famid", signature(x = "Rel"), function(x) { x@famid }) +#' @rdname Pedigree setMethod("famid", signature(x = "Pedigree"), function(x) { famid(ped(x)) }) + +#' Famid setter +#' +#' @param x A Ped or Rel object. +#' @param value A character or integer vector that should be use +#' as the new family id +#' +#' @return An updated Ped, Rel object. +#' @export setGeneric("famid<-", function(x, value) { standardGeneric("famid<-") }) +#' @rdname Ped setMethod("famid<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -74,6 +100,7 @@ setMethod("famid<-", x } ) +#' @rdname Rel setMethod("famid<-", signature(x = "Rel", value = "character_OR_integer"), function(x, value) { diff --git a/R/AllClass.R b/R/AllClass.R index 1bd359f3..f70b8029 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -88,9 +88,9 @@ setValidity("Scales", is_valid_scales) #### Ped Class #### -#' S4 class to represent the identity informations in a Pedigree. +#' Ped S4 class. #' -#' A Ped object is a list of identity informations +#' @description A Ped object is a list of identity informations #' of the individuals in the pedigree. #' It is used to create a Pedigree object. #' The minimal needed informations are `id`, `dadid`, `momid` and `sex`. @@ -99,7 +99,10 @@ setValidity("Scales", is_valid_scales) #' The other slots are used to store recognized informations. #' Additional columns can be added to the Ped object and will be #' stored in the `elementMetadata` slot of the Ped object. -#' +#' @section Constructor: +#' `Ped(obj, ...)`: +#' This constructor creates a Ped instance out of the vectors or the data.frame +#' provided. See [Ped()] for more informations. #' @slot id A character vector with the id of the individuals. #' @slot dadid A character vector with the id of the father of the individuals. #' @slot momid A character vector with the id of the mother of the individuals. diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 4624f909..d71e2c93 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -1,17 +1,26 @@ #' NA to specific length #' +#' Check if all value in a vector is `NA`. +#' If so set all of them to a new value matching the length +#' of the template. +#' If not check that the size of the vector is equal to +#' the template. +#' #' @param x The vector to check. #' @param temp A template vector to use to determine the length. #' @param value The value to use to fill the vector. #' #' @return A vector with the same length as temp. #' @keywords internal +#' @examples +#' na_to_length(NA, rep(0, 4), "NewValue") +#' na_to_length(c(1, 2, 3, NA), rep(0, 4), "NewValue") na_to_length <- function(x, temp, value) { if (length(x) == 1 && all(is.na(x))) { rep(value, length(temp)) } else { if (length(x) != length(temp)) { - stop("The length of the new value should be: ", + stop("The length of the vector should be: ", "equal to the length of the template vector" ) } @@ -20,6 +29,7 @@ na_to_length <- function(x, temp, value) { } #### S4 Ped constructor #### + #' Constructor for the Ped class #' #' @description Constructor for the Ped class @@ -35,7 +45,8 @@ na_to_length <- function(x, temp, value) { #' @param momid vector containing for each subject, the identifiers of the #' biologicals mothers. #' @param famid A character vector with the family identifiers of the -#' individuals. +#' individuals. If provide, will be aggregated to the individuals +#' identifiers separated by an underscore. #' @param sex A character, factor or numeric vector corresponding to #' the gender of the individuals. This will be transformed to an ordered factor #' with the following levels: `male` < `female` < `unknown` < `terminated @@ -61,7 +72,7 @@ na_to_length <- function(x, temp, value) { #' @inheritParams check_columns #' @return A Ped object. #' @seealso [Pedigree()] -#' @rdname Ped +#' @rdname Ped-constructor #' @export #' @include utils.R setGeneric("Ped", signature = "obj", function(obj, ...) { @@ -302,6 +313,41 @@ setGeneric("Hints", function(horder, spouse) { standardGeneric("Hints") }) +#' @docType methods +#' @rdname Hints +setMethod("Hints", + signature(horder = "Hints", spouse = "missing_OR_NULL"), + function(horder, spouse) { + hints + } +) + +#' @docType methods +#' @rdname Hints +#' @export +#' @aliases Hints,list,missing_OR_NULL +#' @examples +#' Hints( +#' list( +#' horder = c("1" = 1, "2" = 2, "3" = 3), +#' spouse = data.frame( +#' idl = c("1", "2"), +#' idr = c("2", "3"), +#' anchor = c(1, 2) +#' ) +#' ) +setMethod("Hints", + signature(horder = "list", spouse = "missing_OR_NULL"), + function(horder, spouse) { + if (any(!c("horder", "spouse") %in% names(horder))) { + stop("hints is a list,", + "but doesn't contains either horder or spouse slot" + ) + } + Hints(horder$horder, horder$spouse) + } +) + #' @docType methods #' @rdname Hints #' @export @@ -411,7 +457,7 @@ setMethod("Hints", #' - 'column_values': name of the column containing the raw values in the #' Ped object #' - 'column_mods': name of the column containing the mods of the transformed -#' affection in the Ped object +#' values in the Ped object #' - 'mods': all the different mods #' - 'labels': the corresponding labels of each mods #' - 'affected': a logical value indicating if the mod correspond to an affected @@ -421,8 +467,10 @@ setMethod("Hints", #' - 'angle': the angle of the shading #' @param border A data.frame with the informations for the availability status. #' The columns needed are: -#' - 'column': name of the column containing the mods to use in the +#' - 'column_values': name of the column containing the raw values in the #' Ped object +#' - 'column_mods': name of the column containing the mods of the transformed +#' values in the Ped object #' - 'mods': all the different mods #' - 'labels': the corresponding labels of each mods #' - 'border': the color to use for this mods @@ -568,8 +616,8 @@ setMethod("Scales", #' #' The value relation code recognized by the function are the one defined #' by the [rel_code_to_factor()] function. -#' @param hints A list with the hints to use for the pedigree plot. -#' See [Hints()] for more informations. +#' @param hints A Hints object or a named list containing `horder` and +#' `spouse`. #' @param cols_ren_ped A named list with the columns to rename for the #' pedigree dataframe. This is useful if you want to use a dataframe with #' different column names. The names of the list should be the new column @@ -596,7 +644,6 @@ setGeneric("Pedigree", signature = "obj", #' @rdname Pedigree #' @aliases Pedigree,character #' @docType methods -#' @inheritParams Ped #' @param affected A logical vector with the affection status of the #' individuals #' (i.e. `FALSE` = unaffected, `TRUE` = affected, `NA` = unknown). @@ -829,7 +876,7 @@ setMethod("Pedigree", "data.frame", function( ped <- Ped(ped_df) rel <- Rel(rel_df) - hints <- Hints(hints$horder, hints$spouse) + hints <- Hints(hints) scales <- Scales() ## Create the object diff --git a/R/AllGeneric.R b/R/AllGeneric.R index e8d1b75d..906f33d5 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -288,7 +288,7 @@ setMethod("as.list", "Hints", function(x) { #' Hints subscripting #' @description Subset the Hints object based on the identifiers #' given -#' @param hints A Hints object +#' @param x A Hints object #' @param idlist A vector of identifiers to subset #' @return A list of Hints object subsetted #' @rdname extract-methods diff --git a/R/align.R b/R/align.R index 14387fd1..dc042a3e 100644 --- a/R/align.R +++ b/R/align.R @@ -1,11 +1,9 @@ -## Automatically generated from all.nw using noweb - -#' Routine function to get ancestors of a subject +#' Get ancestors indexes of a subject #' #' @description Given the index of one or multiple individual(s), this #' function iterate through the mom and dad indexes to #' list out all the ancestors of the said individual(s). -#' This function is use in the `align()` function to +#' This function is use in the [align()] function to #' identify which spouse pairs has a common ancestor and #' therefore if they need to be connected with a double line #' (i.e. inbred). @@ -14,7 +12,11 @@ #' @param dadx Indexes of the fathers #' @param momx Indexes of the mothers #' +#' @examples +#' ancestors(c(1), c(3, 4, 5, 6), c(7, 8, 9, 10)) +#' ancestors(c(1, 2), c(3, 4, 5, 6), c(7, 8, 9, 10)) #' @return A vector of ancestor indexes +#' @keywords internal #' @seealso [align()] ancestors <- function(idx, momx, dadx) { alist <- idx @@ -30,7 +32,7 @@ ancestors <- function(idx, momx, dadx) { } -#' Generate plotting information for a Pedigree +#' Align a Pedigree object #' #' @description #' Given a Pedigree, this function creates helper matrices that describe the @@ -38,49 +40,55 @@ ancestors <- function(idx, momx, dadx) { #' #' @details #' This is an internal routine, used almost exclusively by -#' `ped_to_plotdf()`. The subservient functions `auto_hint()`, -#' `alignped1()`, `alignped2()`, -#' `alignped3()`, and `alignped4()` +#' [ped_to_plotdf()]. +#' +#' The subservient functions [auto_hint()], +#' [alignped1()], [alignped2()], +#' [alignped3()], and [alignped4()] #' contain the bulk of the computation. -#' If the **hints** are missing the `auto_hint()` routine is called to +#' +#' If the **hints** are missing the [auto_hint()] routine is called to #' supply an initial guess. -#' If multiple families are present in the Pedigree, this routine is called -#' once for each family, and the results are combined in the list returned. -#' For more information you can read the associated vignette:align +#' +#' If multiple families are present in the **obj** Pedigree, this routine +#' is called once for each family, and the results are combined in the +#' list returned. +#' +#' For more information you can read the associated vignette: #' `vignette("alignment_details")`. #' #' @param obj A Pedigree object -#' @param packed Should the Pedigree be compressed, i.e., allow diagonal -#' lines connecting parents to children in order to have a smaller overall -#' width for the plot. -#' @param width for a packed output, the minimum width of the plot, in +#' @param packed Should the Pedigree be compressed. +#' (i.e. allow diagonal lines connecting parents to children in order +#' to have a smaller overall width for the plot.) +#' @param width For a packed output, the minimum width of the plot, in #' inches. -#' @param align for a packed Pedigree, align children under parents `TRUE`, +#' @param align For a packed Pedigree, align children under parents `TRUE`, #' to the extent possible given the page width, or align to to the left #' margin `FALSE`. #' This argument can be a two element vector, giving the alignment #' parameters, or a logical value. -#' If `TRUE`, the default is `c(1.5, 2)`, or numeric the routine +#' If `TRUE`, the default is `c(1.5, 2)`, or if numeric the routine #' `alignped4()` will be called. -#' @param hints A Hints object, giving the relative order of the subjects. -#' See [Hints()] for details. -#' @inheritParams is_parent +#' @inheritParams Ped +#' @inheritParams Pedigree +#' @param ... Other arguments to pass to the function #' #' @return A list with components -#' - n A vector giving the number of subjects on each horizonal level of the +#' - `n`: A vector giving the number of subjects on each horizonal level of the #' plot -#' - nid A matrix with one row for each level, giving the numeric id of +#' - `nid`: A matrix with one row for each level, giving the numeric id of #' each subject plotted. #' (A value of `17` means the 17th subject in the Pedigree). -#' - pos A matrix giving the horizontal position of each plot point -#' - fam A matrix giving the family id of each plot point. +#' - `pos`: A matrix giving the horizontal position of each plot point +#' - `fam`: A matrix giving the family id of each plot point. #' A value of `3` would mean that the two subjects in positions 3 and 4, #' in the row above, are this subject's parents. -#' - spouse A matrix with values +#' - `spouse`: A matrix with values #' - `0` = not a spouse #' - `1` = subject plotted to the immediate right is a spouse #' - `2` = subject plotted to the immediate right is an inbred spouse -#' - twins Optional matrix which will only be present if the Pedigree +#' - `twins`: Optional matrix which will only be present if the Pedigree #' contains twins : #' - `0` = not a twin #' - `1` = sibling to the right is a monozygotic twin @@ -105,11 +113,13 @@ ancestors <- function(idx, momx, dadx) { #' @include alignped2.R #' @include alignped3.R #' @include alignped4.R +#' @rdname align setGeneric("align", signature = "obj", function(obj, ...) standardGeneric("align") ) - +#' @rdname align +#' @docType methods setMethod("align", "Pedigree", function( obj, packed = TRUE, width = 10, @@ -126,7 +136,10 @@ setMethod("align", "Pedigree", return(alignment) } if (!is(hints, "Hints")) { - stop("hints must be a Hints object") + if (!is.list(hints)) { + stop("hints argument should be a Hints object or a list") + } + hints <- Hints(hints) } if (length(horder(hints)) == 0) { hints <- try({ @@ -177,7 +190,6 @@ setMethod("align", "Pedigree", who <- which(is_child) spouselist <- rbind(spouselist, cbind(dad[who], mom[who], 0, 0)) } - hash <- spouselist[, 1] * n + spouselist[, 2] spouselist <- spouselist[!duplicated(hash), , drop = FALSE] ## Doc: Founders -align diff --git a/R/alignped1.R b/R/alignped1.R index 53bfe380..bf290da2 100644 --- a/R/alignped1.R +++ b/R/alignped1.R @@ -1,24 +1,30 @@ # Automatically generated from all.nw using noweb -#' First routine alignment +#' Alignment first routine #' #' @description #' First alignment routine which create the subtree founded on a single #' subject as though it were the only tree. #' #' @details -#' 1. In this routine the **nid** array consists of the final -#' `nid array + 1/2` of the final spouse array. -#' Note that the **spouselist** matrix will only contain spouse pairs -#' that are not yet processed. The logic for anchoring is slightly tricky. -#' First, if row 4 of the spouselist matrix is 0, we anchor at the first +#' In this routine the **nid** array consists of the final +#' `nid array + 1/2` of the final spouse array. +#' Note that the **spouselist** matrix will only contain spouse pairs +#' that are not yet processed. The logic for anchoring is slightly tricky. +#' +#' ## 1. Anchoring: +#' First, if col 4 of the spouselist matrix is 0, we anchor at the first #' opportunity. Also note that if `spouselist[, 3] == spouselist[, 4]` #' it is the husband who is the anchor (just write out the possibilities). -#' 2. Create the set of 3 return structures, which will be matrices +#' +#' ## 2. Return values initialization: +#' Create the set of 3 return structures, which will be matrices #' with `1 + nspouse` columns. #' If there are children then other routines will widen the result. -#' 3. Create the two complimentary lists **lspouse** and **rspouse** -#' to denote those plotted on the left and on the right. +#' +#' ## 3. Create **lspouse** and **rspouse**: +#' This two complimentary lists denote the spouses plotted on the left +#' and on the right. #' For someone with lots of spouses we try to split them evenly. #' If the number of spouses is odd, then men should have more on #' the right than on the left, women more on the right. @@ -31,11 +37,15 @@ #' `length(rspouse) > 1`. This caused `nleft > length(indx)`. #' A fix was to not let **indx** to be indexed beyond its length, #' fix by JPS 5/2013. -#' 4. For each spouse get the list of children. If there are any we +#' +#' ## 4. List the children: +#' For each spouse get the list of children. If there are any we #' call [alignped2()] to generate their tree and #' then mark the connection to their parent. #' If multiple marriages have children we need to join the trees. -#' 5. To finish up we need to splice together the tree made up from +#' +#' ## 5. Splice the tree: +#' To finish up we need to splice together the tree made up from #' all the kids, which only has data from `lev + 1` down, with the data here. #' There are 3 cases: #' @@ -45,26 +55,28 @@ #' 3. The tree below is narrower, for instance an only child. #' #' @param level Vector of the level of each subject +#' @param spouselist Matrix of spouses with 4 columns: +#' - `1`: husband index +#' - `2`: wife index +#' - `3`: husband anchor +#' - `4`: wife anchor +#' @inheritParams ancestors #' @inheritParams Hints #' @inheritParams align -#' @inheritParams ancestors #' #' @return A list containing the elements to plot the Pedigree. #' It contains a set of matrices along with the spouselist matrix. #' The latter has marriages removed as they are processed. -#' - n A vector giving the number of subjects on each horizonal level of the +#' - `n` : A vector giving the number of subjects on each horizonal level of the #' plot -#' - nid A matrix with one row for each level, giving the numeric id of +#' - `nid` : A matrix with one row for each level, giving the numeric id of #' each subject plotted. #' (A value of `17` means the 17th subject in the Pedigree). -#' - pos A matrix giving the horizontal position of each plot point -#' - fam A matrix giving the family id of each plot point. +#' - `pos` : A matrix giving the horizontal position of each plot point +#' - `fam` : A matrix giving the family id of each plot point. #' A value of `3` would mean that the two subjects in positions 3 and 4, #' in the row above, are this subject's parents. -#' - spouse A matrix with values -#' - `0` = not a spouse -#' - `1` = subject plotted to the immediate right is a spouse -#' - `2` = subject plotted to the immediate right is an inbred spouse +#' - `spouselist` : Spouse matrix with anchors informations #' #' @examples #' data(sampleped) @@ -72,6 +84,7 @@ #' align(ped) #' #' @seealso [align()] +#' @keywords internal, alignment #' @export alignped1 <- function(idx, dadx, momx, level, horder, packed, spouselist) { # Set a few constants diff --git a/R/alignped2.R b/R/alignped2.R index accab593..acc2628e 100644 --- a/R/alignped2.R +++ b/R/alignped2.R @@ -1,6 +1,6 @@ # Automatically generated from all.nw using noweb -#' Second routine alignment +#' Alignment second routine #' #' @description #' Second of the four co-routines which takes a collection of siblings, @@ -16,7 +16,7 @@ #' When the first sib is processed by `alignped1` then both partners #' (and any children) will be added to the rval structure below. #' When the second sib is processed they will come back as a 1 element tree -#' (the marriage will no longer be on the spouselist), which should be added +#' (the marriage will no longer be on the **spouselist**), which should be added #' onto rval. The rule thus is to not add any 1 element tree whose value #' (which must be `idx[i]` is already in the rval structure for this level. #' @@ -26,26 +26,24 @@ #' @return A list containing the elements to plot the Pedigree. #' It contains a set of matrices along with the spouselist matrix. #' The latter has marriages removed as they are processed. -#' - n A vector giving the number of subjects on each horizonal level of the +#' - `n` : A vector giving the number of subjects on each horizonal level of the #' plot -#' - nid A matrix with one row for each level, giving the numeric id of +#' - `nid` : A matrix with one row for each level, giving the numeric id of #' each subject plotted. #' (A value of `17` means the 17th subject in the Pedigree). -#' - pos A matrix giving the horizontal position of each plot point -#' - fam A matrix giving the family id of each plot point. +#' - `pos` : A matrix giving the horizontal position of each plot point +#' - `fam` : A matrix giving the family id of each plot point. #' A value of `3` would mean that the two subjects in positions 3 and 4, #' in the row above, are this subject's parents. -#' - spouse A matrix with values -#' - `0` = not a spouse -#' - `1` = subject plotted to the immediate right is a spouse -#' - `2` = subject plotted to the immediate right is an inbred spouse +#' - `spouselist` : Spouse matrix with anchors informations #' #' @examples #' data(sampleped) #' ped <- Pedigree(sampleped) #' align(ped) #' -#' @seealso [align()], [alignped1()] +#' @seealso [align()] +#' @keywords internal, alignment #' @export alignped2 <- function(idx, dadx, momx, level, horder, packed, spouselist) { idx <- idx[order(horder[idx])] # Use the hints to order the sibs diff --git a/R/alignped3.R b/R/alignped3.R index 3613f202..3db9df3d 100644 --- a/R/alignped3.R +++ b/R/alignped3.R @@ -1,6 +1,6 @@ # Automatically generated from all.nw using noweb -#' Third routine alignment +#' Alignment third routine #' #' @description #' Third of the four co-routines to merges two pedigree trees which @@ -12,9 +12,9 @@ #' need not plot two copies of the same person side by side. #' (When initializing the output structures do not worry about this, #' there is no harm if they are a column bigger than finally needed.) -#' Beyond that the work is simple bookkeeping. +#' Beyond that the work is simple book keeping. #' -#' ## Slide +#' ## 1. Slide: #' #' For the unpacked case, which is the traditional way to draw #' a Pedigree when we can assume the paper is infinitely wide, all parents are @@ -22,7 +22,7 @@ #' merged as solid blocks. On input they both have a left margin of 0. #' Compute how far over we have to slide the right tree. #' -#' ## Merge +#' ## 2. Merge: #' #' Now merge the two trees. Start at the top level and work down. #' @@ -34,19 +34,16 @@ #' @return A list containing the elements to plot the Pedigree. #' It contains a set of matrices along with the spouselist matrix. #' The latter has marriages removed as they are processed. -#' - n A vector giving the number of subjects on each horizonal level of the +#' - `n` : A vector giving the number of subjects on each horizonal level of the #' plot -#' - nid A matrix with one row for each level, giving the numeric id of +#' - `nid` : A matrix with one row for each level, giving the numeric id of #' each subject plotted. #' (A value of `17` means the 17th subject in the Pedigree). -#' - pos A matrix giving the horizontal position of each plot point -#' - fam A matrix giving the family id of each plot point. +#' - `pos` : A matrix giving the horizontal position of each plot point +#' - `fam` : A matrix giving the family id of each plot point. #' A value of `3` would mean that the two subjects in positions 3 and 4, #' in the row above, are this subject's parents. -#' - spouse A matrix with values -#' - `0` = not a spouse -#' - `1` = subject plotted to the immediate right is a spouse -#' - `2` = subject plotted to the immediate right is an inbred spouse +#' - `spouselist` : Spouse matrix with anchors informations #' #' @examples #' data(sampleped) @@ -54,6 +51,7 @@ #' align(ped) #' #' @seealso [align()] +#' @keywords internal, alignment #' @export alignped3 <- function(alt1, alt2, packed, space = 1) { maxcol <- max(alt1$n + alt2$n) diff --git a/R/alignped4.R b/R/alignped4.R index 952fa407..8873a229 100644 --- a/R/alignped4.R +++ b/R/alignped4.R @@ -2,7 +2,7 @@ #' @importFrom quadprog solve.QP NULL -#' Fourth and last routine alignment +#' Alignment fourth routine #' #' @description #' Last routines which attempts to line up children under parents and put @@ -23,13 +23,13 @@ NULL #' For each set of siblings `x` with parents at `p_1` and `p_2` #' the alignment penalty is : #' -#' \eqn{(1/k^a)\sum{i=1}{k} (x_i - (p_1 + p_2)^2} +#' \deqn{(1/k^a)\sum{i=1}{k} (x_i - (p_1 + p_2)^2} #' #' where `k` is the number of siblings in the set. #' -#' Using the fact that when `a = 1` : +#'Using the fact that when `a = 1` : #' -#' \eqn{\sum(x_i-c)^2 = \sum(x_i-\mu)^2 + k(c-\mu)^2} +#' \deqn{\sum(x_i-c)^2 = \sum(x_i-\mu)^2 + k(c-\mu)^2} #' #' then moving a sibship with `k` sibs one unit to the left or #' right of optimal will incur the same cost as moving one with only 1 or @@ -77,6 +77,7 @@ NULL #' align(ped) #' #' @seealso [align()] +#' @keywords internal, alignment #' @export alignped4 <- function(rval, spouse, level, width, align) { ## Doc: alignped4 -part1, spacing across page diff --git a/R/auto_hint.R b/R/auto_hint.R index cd5335a6..ee602e49 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -1,6 +1,6 @@ # Automatically generated from all.nw using noweb -#' Routine to shift set of siblings to the left or right +#' Shift set of siblings to the left or right #' #' @details This routine is used by `auto_hint()`. #' It shifts a set of siblings to the left or right, so that the @@ -19,7 +19,7 @@ #' #' @return The updated hint vector #' @seealso [auto_hint()] -#' @keywords internal +#' @keywords internal, auto_hint shift <- function(id, sibs, goleft, hint, twinrel, twinset) { if (twinset[id] > 0) { # enough to avoid overlap @@ -74,31 +74,21 @@ shift <- function(id, sibs, goleft, hint, twinrel, twinset) { hint } -#' Routine to find the spouse of a subject +#' Find the spouse of a subject #' #' @details This routine is used by `auto_hint()`. #' It finds the spouse of a subject. #' #' @param idpos The position of the subject #' @param plist The alignment structure representing the Pedigree layout. -#' For the differents matrices present in the list, each row represents a -#' level of the Pedigree and each column a potential subject. -#' It contains the following components: -#' - n Vector of the number of subjects per level -#' - nid Matrix of the subjects indexes -#' - pos Matrix of the subjects positions -#' - fam Matrix of the siblings family identifiers -#' - spouse Matrix of the left spouses -#' - `0` = not spouse -#' - `1` = spouse -#' - `2` = inbred spouse. +#' See [align()] for details. #' @param lev The generation level of the subject #' @inheritParams align #' #' @return The position of the spouse #' @seealso [auto_hint()] -#' @keywords internal -findspouse <- function(idpos, plist, lev, ped) { +#' @keywords internal, auto_hint +findspouse <- function(idpos, plist, lev, obj) { lpos <- idpos while (lpos > 1 && plist$spouse[lev, lpos - 1]) { lpos <- lpos - 1 @@ -111,8 +101,8 @@ findspouse <- function(idpos, plist, lev, ped) { stop("auto_hint bug 3") } - opposite <- ped(ped, "sex")[plist$nid[lev, lpos:rpos]] != - ped(ped, "sex")[plist$nid[lev, idpos]] + opposite <- sex(ped(obj))[plist$nid[lev, lpos:rpos]] != + sex(ped(obj))[plist$nid[lev, idpos]] ## Can happen with a triple marriage if (!any(opposite)) { @@ -122,7 +112,7 @@ findspouse <- function(idpos, plist, lev, ped) { spouse } -#' Routine to find the siblings of a subject +#' Find the siblings of a subject #' #' @details This routine is used by `auto_hint()`. #' It finds the siblings of a subject. @@ -131,7 +121,7 @@ findspouse <- function(idpos, plist, lev, ped) { #' #' @return The positions of the siblings #' @seealso [auto_hint()] -#' @keywords internal +#' @keywords internal, auto_hint findsibs <- function(idpos, plist, lev) { family <- plist$fam[lev, idpos] if (family == 0) { @@ -140,20 +130,20 @@ findsibs <- function(idpos, plist, lev) { which(plist$fam[lev, ] == family) } -#' Routine to find the duplicate pairs of a subject +#' Find the duplicate pairs of a subject #' #' @details This routine is used by `auto_hint()`. #' It finds the duplicate pairs of a subject and returns them in #' the order they should be plotted. #' #' @param idlist List of individuals identifiers to be considered -#' @inheritParams align #' @inheritParams findspouse +#' @inheritParams align #' #' @return A matrix of duplicate pairs #' @seealso [auto_hint()] -#' @keywords internal -duporder <- function(idlist, plist, lev, ped) { +#' @keywords internal, auto_hint +duporder <- function(idlist, plist, lev, obj) { temp <- table(idlist) if (all(temp == 1)) { return(matrix(0L, nrow = 0, ncol = 3)) @@ -183,7 +173,7 @@ duporder <- function(idlist, plist, lev, ped) { if (plist$fam[lev, dmat[i, 1]] > 0) { sib1 <- max(findsibs(dmat[i, 1], plist, lev)) } else { - spouse <- findspouse(dmat[i, 1], plist, lev, ped) + spouse <- findspouse(dmat[i, 1], plist, lev, obj) ## If spouse is marry-in then move on without looking ## for sibs if (plist$fam[lev, spouse] == 0) { @@ -196,7 +186,7 @@ duporder <- function(idlist, plist, lev, ped) { if (plist$fam[lev, dmat[i, 2]] > 0) { sib2 <- min(findsibs(dmat[i, 2], plist, lev)) } else { - spouse <- findspouse(dmat[i, 2], plist, lev, ped) + spouse <- findspouse(dmat[i, 2], plist, lev, obj) ## If spouse is marry-in then move on without looking ## for sibs if (plist$fam[lev, spouse] == 0) { @@ -210,7 +200,7 @@ duporder <- function(idlist, plist, lev, ped) { dmat[order(famtouch, dmat[, 1] - dmat[, 2]), , drop = FALSE] } -#' Routine to get twin relationships +#' Get twin relationships #' #' @details This routine function determine the twin relationships #' in a Pedigree. It complete the missing twin relationships for @@ -219,22 +209,23 @@ duporder <- function(idlist, plist, lev, ped) { #' It is used by `auto_hint()`. #' #' @inheritParams align -#' @keywords internal +#' +#' @keywords internal, auto_hint #' @return A list containing components #' 1. `twinset` the set of twins #' 2. `twinrel` the twins relationships #' 3. `twinord` the order of the twins #' @seealso [auto_hint()] -get_twin_rel <- function(ped) { - if (length(rel(ped)) == 0) { +get_twin_rel <- function(obj) { + if (length(rel(obj)) == 0) { relation <- NULL } else { - relation <- as.data.frame(rel(ped))[, c("id1", "id2", "code")] + relation <- as.data.frame(rel(obj))[, c("id1", "id2", "code")] relation$code <- as.numeric(relation$code) } - n <- length(ped) - twinset <- setNames(rep(0, n), id(ped(ped))) - twinord <- setNames(rep(1, n), id(ped(ped))) + n <- length(obj) + twinset <- setNames(rep(0, n), id(ped(obj))) + twinord <- setNames(rep(1, n), id(ped(obj))) twinrel <- NULL if (!is.null(relation) && any(relation[, 3] < 4)) { @@ -260,13 +251,13 @@ get_twin_rel <- function(ped) { list(twinset = twinset, twinrel = twinrel, twinord = twinord) } -#' First initial guess for the alignment of a Pedigree +#' Initial hint for a Pedigree alignment #' #' @description #' Compute an initial guess for the alignment of a Pedigree #' #' @details -#' A Pedigree structure can contain a `hints` object which helps to +#' A Pedigree structure can contain a [Hints-class] object which helps to #' reorder the Pedigree (e.g. left-to-right order of children within family) so #' as to plot with minimal distortion. This routine is used to create an #' initial version of the hints. They can then be modified if desired. @@ -275,33 +266,35 @@ get_twin_rel <- function(ped) { #' within families, so that marriages are on the "edge" of a set children, #' closest to the spouse. For pedigrees that have only a single connection #' between two families this simple-minded approach works surprisingly well. -#' For more complex structures hand-tuning of the hints matrix may be required. +#' For more complex structures hand-tuning of the hints may be required. #' -#' The Pedigree in the example below is one where rearranging the founders -#' greatly decreases the number of extra connections. When `auto_hint()` is -#' called with a a vector of numbers as the second argument, the values for the -#' founder females are used to order the founder families left to right across -#' the plot. The values within a sibship are used as the preliminary order of +#' When `auto_hint()` is called with a a vector of numbers as the **hints** +#' argument, the values for the founder females are used to order the founder +#' families left to right across the plot. +#' The values within a sibship are used as the preliminary order of #' siblings within a family; this may be changed to move one of them to the #' edge so as to match up with a spouse. The actual values in the vector are #' not important, only their order. #' -#' @param reset If `TRUE`, then even if `ped` object has hints, reset -#' them to the initial values +#' @param reset If `TRUE`, then even if the Ped object has Hints, reset +#' them to the initial values. #' @inheritParams align #' -#' @return The **hints** list containing components `horder` and `spouse` +#' @return The initial [Hints-class] object. #' -#' @seealso [align()], [best_hint()] +#' @seealso [align()], [best_hint()], [Hints-class] #' @examples #' data(sampleped) #' ped <- Pedigree(sampleped[sampleped$famid == 1, ]) #' auto_hint(ped) #' @export +#' @keywords internal, alignment, auto_hint setGeneric("auto_hint", signature = "obj", function(obj, ...) standardGeneric("auto_hint") ) +#' @rdname auto_hint +#' @export setMethod("auto_hint", "Pedigree", function(obj, hints = NULL, packed = TRUE, align = FALSE, reset = FALSE ) { @@ -326,14 +319,10 @@ setMethod("auto_hint", "Pedigree", function(obj, ## Doc: init-auto_hint horder horder <- setNames(rep(0, n), id(ped(obj))) if (!is.null(hints)) { - if (is.vector(hints)) { - hints <- Hints(horder = hints) - } else if (is.matrix(hints)) { - hints <- Hints(spouse = hints, horder = horder) - } else if (is.list(hints)) { + if (is.list(hints)) { hints <- Hints(hints) } else if (!is(hints, "Hints")) { - stop("hints must be a vector, matrix, list or Hints object") + stop("hints must be a list or a Hints object") } horder <- horder(hints) } else { @@ -348,7 +337,7 @@ setMethod("auto_hint", "Pedigree", function(obj, } } - twin_rel <- get_twin_rel(ped = obj) + twin_rel <- get_twin_rel(obj) twinset <- twin_rel$twinset twinord <- twin_rel$twinord twinrel <- twin_rel$twinrel diff --git a/R/best_hint.R b/R/best_hint.R index a6ae87db..e33b26e2 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -1,7 +1,24 @@ -# This function generates the permutations one after the other +#' Generate all possible permutation +#' +#' Given a vector of length **n**, generate all possible permutations of +#' the numbers 1 to **n**. +#' This is a recursive routine, and is not very efficient. +#' +#' @param x A vector of length **n** +#' @return A matrix with **n** cols and **n!** rows +#' +#' @examples +#' permute(1:3) +#' permute(1:4) +#' permute(1:5) +#' @keywords internal, auto_hint permute <- function(x) { n <- length(x) - if (n == 3) { + if (n == 1) { + x + } else if (n == 2) { + rbind(x, x[c(2, 1)]) + } else if (n == 3) { rbind(x[seq_len(3)], x[c(2, 1, 3)], x[c(3, 1, 2)]) } else { temp <- paste( @@ -13,17 +30,19 @@ permute <- function(x) { } } -#' Best hint for alignment +#' Best hint for a Pedigree alignment #' #' @description -#' When computer time is cheap, use this routine to get a 'best' Pedigree. +#' When computer time is cheap, use this routine to get a *best* +#' Pedigree alignment. #' This routine will try all possible founder orders, and return the one -#' with the least 'stress'. +#' with the least **stress**. #' #' @details -#' The auto_hint routine will rearrange sibling order, but not founder order. -#' This calls auto_hint with every possible founder order, and finds that -#' plot with the least 'stress'. +#' The [auto_hint()] routine will rearrange sibling order, but not +#' founder order. +#' This calls [auto_hint()] with every possible founder order, and finds that +#' plot with the least "stress". #' The stress is computed as a weighted sum of three error measures: #' #' - nbArcs The number of duplicate individuals in the plot @@ -32,28 +51,30 @@ permute <- function(x) { #' - lgParentsChilds The sum of the absolute values of the differences between #' the center of the children and the parents #' -#' \eqn{stress = -#' wt[1] \times nbArcs + -#' wt[2] \times lgArcs + -#' wt[3] \times lgParentsChilds +#' \deqn{stress = +#' wt[1] * nbArcs + +#' wt[2] * lgArcs + +#' wt[3] * lgParentsChilds #'} #' #' If during the search, a plot is found with a stress level less than #' **tolerance**, the search is terminated. #' -#' @param wt A vector of three weights for the three error measures -#' - The number of duplicate individuals in the plot -#' - The sum of the absolute values of the differences in the -#' positions of duplicate individuals -#' - The sum of the absolute values of the differences between -#' the center of the children and the parents +#' @param wt A vector of three weights for the three error measures. #' Default is `c(1000, 10, 1)`. -#' @param tolerance The maximum stress level to accept. Default is `0` +#' 1. The number of duplicate individuals in the plot +#' 2. The sum of the absolute values of the differences in the +#' positions of duplicate individuals +#' 3. The sum of the absolute values of the differences between +#' the center of the children and the parents. +#' +#' @param tolerance The maximum stress level to accept. +#' Default is `0` #' @inheritParams align #' -#' @return The best hint object out of all the permutations +#' @return The best Hints object out of all the permutations #' -#' @seealso [auto_hint()] +#' @seealso [auto_hint()], [align()] #' @export #' @examples #' data(sampleped) @@ -61,6 +82,7 @@ permute <- function(x) { #' best_hint(ped) #' @include auto_hint.R #' @include align.R +#' @keywords alignment, auto_hint setGeneric( "best_hint", signature = "obj", function(obj, ...) { @@ -68,6 +90,7 @@ setGeneric( } ) +#' @rdname best_hint setMethod( "best_hint", "Pedigree", function(obj, wt = c(1000, 10, 1), tolerance = 0) { diff --git a/R/find_unavailable.R b/R/find_unavailable.R index b9faec3e..19a5783a 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -124,10 +124,8 @@ exclude_stray_marryin <- function(id, dadid, momid) { #' @description #' Exclude from a Pedigree any unavailable founders. #' -#' @param id Vector of subject identifiers -#' @inheritParams descendants -#' @inheritParams find_avail_affected -#' @param missid Character defining the missing ids +#' @param id A character vector with the identifiers of each individuals +#' @inheritParams Ped #' #' @keywords internal #' diff --git a/R/fix_parents.R b/R/fix_parents.R index 294186db..b0d75865 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -22,8 +22,7 @@ NULL #' in the dataframe then set availability to O for non available parents. #' - If FALSE then delete the id of missing parents #' -#' @param famid Optional famid identification set it to NULL to invalidate. -#' If used it will modify the ids of the individuals by pasting it with an _. +#' @inheritParams Ped #' @inheritParams kinship #' @inheritParams is_parent #' @inheritParams sex_to_factor diff --git a/R/utils.R b/R/utils.R index c4176421..e2795792 100644 --- a/R/utils.R +++ b/R/utils.R @@ -154,11 +154,8 @@ check_num_na <- function(var, na_as_num = TRUE) { #' #' @description Check which individuals are parents. #' -#' @param id A vector of each subjects identifiers -#' @param missid The missing identifier value. Founders are the individuals with -#' no father and no mother in the Pedigree -#' (i.e. `dadid` and `momid` equal to the value of this variable). -#' The default for `missid` is `NA_character_`. +#' @param obj A vector of each subjects identifiers +#' @inheritParams Ped #' #' @return A vector of boolean of the same size as `id` #' with TRUE if the individual is a parent and FALSE otherwise @@ -229,7 +226,7 @@ is_disconnected <- function(id, dadid, momid) { #' @importFrom plyr revalue NULL -#' Transform a gender variable to an ordered factor +#' Gender variable to ordered factor #' #' @inheritParams Ped #' @@ -261,7 +258,7 @@ sex_to_factor <- function(sex) { #' @importFrom stringr str_remove_all NULL -#' Transform a relationship code variable to an ordered factor +#' Relationship code variable to ordered factor #' #' @inheritParams Rel #' @@ -292,7 +289,7 @@ rel_code_to_factor <- function(code) { } TRUE -#' Transform a vector variable to binary vector +#' Vector variable to binary vector #' #' @param vect A character, factor, logical or numeric vector corresponding to #' a binary variable (i.e. 0 or 1). @@ -332,7 +329,7 @@ vect_to_binary <- function(vect, logical = FALSE) { } } -#' Transform a anchor variable to an ordered factor +#' Anchor variable to ordered factor #' #' @param anchor A character, factor or numeric vector corresponding to #' the anchor of the individuals. The following values are recognized: diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md new file mode 100644 index 00000000..e6edbdf0 --- /dev/null +++ b/devel/documentation/todo.md @@ -0,0 +1,54 @@ +# List of what need to be done for package + +## Documentations of functions + +- [ ] AllClass.R +- [ ] AllConstructor.R +- [ ] AllAccessors.R +- [ ] AllGeneric.R +- [ ] AllValidity.R +- [ ] Pedixplorer-package.R +- [x] align.R +- [x] alignped1.R +- [x] alignped2.R +- [x] alignped3.R +- [x] alignped4.R +- [x] auto_hint.R +- [x] best_hint.R +- [ ] bit_size.R +- [ ] data.R +- [ ] descendants.R +- [ ] family_check.R +- [ ] find_avail_affected.R +- [ ] find_avail_noninform.R +- [ ] find_unavailable.R +- [ ] fix_parents.R +- [ ] generate_aff_inds.R +- [ ] generate_colors.R +- [ ] ibd_matrix.R +- [ ] is_informative.R +- [ ] kindepth.R +- [ ] kinship.R +- [ ] make_famid.R +- [ ] min_dist_inf.R +- [ ] norm_data.R +- [ ] num_child.R +- [ ] ped_to_legdf.R +- [ ] ped_to_plotdf.R +- [ ] plot.R +- [ ] plot_fct.R +- [ ] plot_fromdf.R +- [ ] shrink.R +- [ ] unrelated.R +- [ ] useful_inds.R +- [ ] utils.R + +## For all class + +- [ ] Ped object + - [ ] Constructor + - [ ] Getters + - [ ] Setters + - [ ] Coercion + - [ ] General methods + - [ ] See also \ No newline at end of file diff --git a/man/Hints.Rd b/man/Hints.Rd index 7337c853..24967f50 100644 --- a/man/Hints.Rd +++ b/man/Hints.Rd @@ -3,6 +3,9 @@ \docType{methods} \name{Hints} \alias{Hints} +\alias{Hints,Hints,missing_OR_NULL-method} +\alias{Hints,list,missing_OR_NULL-method} +\alias{Hints,list,missing_OR_NULL} \alias{Hints,numeric,data.frame-method} \alias{Hints,numeric,data.frame} \alias{Hints,numeric,missing_OR_NULL-method} @@ -16,6 +19,10 @@ \usage{ Hints(horder, spouse) +\S4method{Hints}{Hints,missing_OR_NULL}(horder, spouse) + +\S4method{Hints}{list,missing_OR_NULL}(horder, spouse) + \S4method{Hints}{numeric,data.frame}(horder, spouse) \S4method{Hints}{numeric,missing_OR_NULL}(horder, spouse) @@ -59,6 +66,15 @@ independently or together. Convert a Hints object to a list } \examples{ +Hints( + list( + horder = c("1" = 1, "2" = 2, "3" = 3), + spouse = data.frame( + idl = c("1", "2"), + idr = c("2", "3"), + anchor = c(1, 2) + ) +) Hints( horder = c("1" = 1, "2" = 2, "3" = 3), spouse = data.frame( diff --git a/man/Ped-constructor.Rd b/man/Ped-constructor.Rd new file mode 100644 index 00000000..ebe0610f --- /dev/null +++ b/man/Ped-constructor.Rd @@ -0,0 +1,65 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllConstructor.R +\name{Ped} +\alias{Ped} +\title{Constructor for the Ped class} +\usage{ +Ped(obj, ...) +} +\arguments{ +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{famid}{A character vector with the family identifiers of the +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} + +\item{sex}{A character, factor or numeric vector corresponding to +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: +\itemize{ +\item character() or factor() : "f", "m", "woman", "man", "male", "female", +"unknown", "terminated" +\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" +}} + +\item{steril}{A logical vector with the sterilisation status of the +individuals +(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} + +\item{status}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} + +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} + +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} +} +\value{ +A Ped object. +} +\description{ +Constructor for the Ped class +You either need to provide a vector of the same size for each slot +or a \code{data.frame} with the corresponding columns. +The metadata will correspond to the columns that do not correspond +to the Ped slots. +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Ped.Rd b/man/Ped.Rd index 6162e8cf..1d192f4d 100644 --- a/man/Ped.Rd +++ b/man/Ped.Rd @@ -4,7 +4,6 @@ \docType{class} \name{Ped-class} \alias{Ped-class} -\alias{Ped} \alias{Ped,data.frame-method} \alias{Ped,data.frame} \alias{Ped,character_OR_integer-method} @@ -12,9 +11,11 @@ \alias{Ped,missing-method} \alias{Ped,missing} \alias{mcols<-,Ped,list-method} +\alias{mcols<-,Ped,list} \alias{mcols<-,Ped,data.frame-method} -\alias{famid} +\alias{mcols<-,Ped,data.frame} \alias{famid,Ped-method} +\alias{famid<-,Ped,character_OR_integer-method} \alias{id} \alias{id,Ped-method} \alias{dadid} @@ -33,10 +34,8 @@ \alias{isinf,Ped-method} \alias{useful} \alias{useful,Ped-method} -\title{S4 class to represent the identity informations in a Pedigree.} +\title{Ped S4 class.} \usage{ -Ped(obj, ...) - \S4method{Ped}{data.frame}(obj, cols_used_init = FALSE, cols_used_del = FALSE) \S4method{Ped}{character_OR_integer}( @@ -58,7 +57,9 @@ Ped(obj, ...) \S4method{mcols}{Ped,data.frame}(x) <- value -famid(x) +\S4method{famid}{Ped}(x) + +\S4method{famid}{Ped,character_OR_integer}(x) <- value id(x) @@ -79,69 +80,17 @@ isinf(x) useful(x) } \arguments{ -\item{obj}{A character vector with the id of the individuals or a -\code{data.frame} with all the informations in corresponding columns.} - -\item{cols_used_init}{Boolean defining if the columns that will be used -should be initialised to NA.} - -\item{cols_used_del}{Boolean defining if the columns that will be used -should be deleted.} - -\item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. This will be transformed to an ordered factor -with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated -The following values are recognized: -\itemize{ -\item character() or factor() : "f", "m", "woman", "man", "male", "female", -"unknown", "terminated" -\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" -}} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{vector containing for each subject, the identifiers of the -biologicals mothers.} - -\item{famid}{A character vector with the family identifiers of the -individuals.} - -\item{steril}{A logical vector with the sterilisation status of the -individuals -(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} - -\item{status}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} - -\item{avail}{A logical vector with the availability status of the -individuals -(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} - -\item{affected}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} - -\item{missid}{A character vector with the missing values identifiers. -All the id, dadid and momid corresponding to those values will be set -to \code{NA_character_}.} - \item{x}{A Ped object.} -\item{value}{A data.frame with the metadata.} +\item{value}{A list or a data.frame with the metadata. +The length of each element in \code{value} need to match the +length of the Ped object.} } \value{ A Ped object. -A Ped object. - A Ped object with the metadata set. -A Ped object with the metadata set. - -A character vector with the famid of each individual. - A character vector with the id of each individual. A character vector with the dadid of each individual. @@ -174,12 +123,6 @@ to the \code{famid} character to ensure the uniqueness of the \code{id}. The other slots are used to store recognized informations. Additional columns can be added to the Ped object and will be stored in the \code{elementMetadata} slot of the Ped object. - -Constructor for the Ped class -You either need to provide a vector of the same size for each slot -or a \code{data.frame} with the corresponding columns. -The metadata will correspond to the columns that do not correspond -to the Ped slots. } \section{Slots}{ @@ -229,6 +172,21 @@ of the individuals.} of the individuals.} }} +\section{Constructor}{ + +\code{Ped(obj, ...)}: +This constructor creates a Ped instance out of the vectors or the data.frame +provided. See \code{\link[=Ped]{Ped()}} for more informations. +} + +\section{Setters}{ + +Metadata setters of Ped object from a list + +Add the metadata into the \code{elementMetadata} slot of +a Ped object. +} + \examples{ data(sampleped) Ped(sampleped) @@ -242,7 +200,5 @@ Ped( Ped() } \seealso{ -\code{\link[=Pedigree]{Pedigree()}} - \code{\link[=Pedigree]{Pedigree()}} } diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd index 202c388f..3f63c103 100644 --- a/man/Pedigree.Rd +++ b/man/Pedigree.Rd @@ -9,6 +9,7 @@ \alias{Pedigree,data.frame} \alias{Pedigree,missing-method} \alias{Pedigree,missing} +\alias{famid,Pedigree-method} \alias{horder} \alias{horder,Pedigree-method} \title{Create a Pedigree object} @@ -51,6 +52,8 @@ Pedigree(obj, ...) \S4method{Pedigree}{missing}(obj) +\S4method{famid}{Pedigree}(x) + horder(object) } \arguments{ @@ -76,7 +79,8 @@ The following values are recognized: }} \item{famid}{A character vector with the family identifiers of the -individuals.} +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} \item{avail}{A logical vector with the availability status of the individuals @@ -137,8 +141,8 @@ relationship matrix. This is useful if you want to use a dataframe with different column names. The names of the list should be the new column names and the values should be the old column names.} -\item{hints}{A list with the hints to use for the pedigree plot. -See \code{\link[=Hints]{Hints()}} for more informations.} +\item{hints}{A Hints object or a named list containing \code{horder} and +\code{spouse}.} \item{object}{A Pedigree object.} } diff --git a/man/Rel.Rd b/man/Rel.Rd index d9fe96a0..2adb7976 100644 --- a/man/Rel.Rd +++ b/man/Rel.Rd @@ -11,6 +11,8 @@ \alias{Rel,character} \alias{Rel,missing-method} \alias{Rel,missing} +\alias{famid,Rel-method} +\alias{famid<-,Rel,character_OR_integer-method} \alias{code} \alias{code,Rel-method} \alias{id1} @@ -31,6 +33,10 @@ Rel(obj, ...) \S4method{Rel}{missing}(obj) +\S4method{famid}{Rel}(x) + +\S4method{famid}{Rel,character_OR_integer}(x) <- value + code(x) id1(x) @@ -66,7 +72,8 @@ of without space between the words. The case is not important. }} \item{famid}{A character vector with the family identifiers of the -individuals.} +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} \item{x}{A Rel object.} diff --git a/man/Scales.Rd b/man/Scales.Rd index 21367633..5b544147 100644 --- a/man/Scales.Rd +++ b/man/Scales.Rd @@ -26,7 +26,7 @@ The columns needed are: \item 'column_values': name of the column containing the raw values in the Ped object \item 'column_mods': name of the column containing the mods of the transformed -affection in the Ped object +values in the Ped object \item 'mods': all the different mods \item 'labels': the corresponding labels of each mods \item 'affected': a logical value indicating if the mod correspond to an affected @@ -39,8 +39,10 @@ individuals \item{border}{A data.frame with the informations for the availability status. The columns needed are: \itemize{ -\item 'column': name of the column containing the mods to use in the +\item 'column_values': name of the column containing the raw values in the Ped object +\item 'column_mods': name of the column containing the mods of the transformed +values in the Ped object \item 'mods': all the different mods \item 'labels': the corresponding labels of each mods \item 'border': the color to use for this mods diff --git a/man/align.Rd b/man/align.Rd index b8d695ed..623a94f3 100644 --- a/man/align.Rd +++ b/man/align.Rd @@ -1,51 +1,68 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/align.R +\docType{methods} \name{align} \alias{align} -\title{Generate plotting information for a Pedigree} +\alias{align,Pedigree-method} +\title{Align a Pedigree object} \usage{ align(obj, ...) + +\S4method{align}{Pedigree}( + obj, + packed = TRUE, + width = 10, + align = TRUE, + hints = obj@hints, + missid = "NA_character_" +) } \arguments{ \item{obj}{A Pedigree object} -\item{packed}{Should the Pedigree be compressed, i.e., allow diagonal -lines connecting parents to children in order to have a smaller overall -width for the plot.} +\item{...}{Other arguments to pass to the function} + +\item{packed}{Should the Pedigree be compressed. +(i.e. allow diagonal lines connecting parents to children in order +to have a smaller overall width for the plot.)} -\item{width}{for a packed output, the minimum width of the plot, in +\item{width}{For a packed output, the minimum width of the plot, in inches.} -\item{align}{for a packed Pedigree, align children under parents \code{TRUE}, +\item{align}{For a packed Pedigree, align children under parents \code{TRUE}, to the extent possible given the page width, or align to to the left margin \code{FALSE}. This argument can be a two element vector, giving the alignment parameters, or a logical value. -If \code{TRUE}, the default is \code{c(1.5, 2)}, or numeric the routine +If \code{TRUE}, the default is \code{c(1.5, 2)}, or if numeric the routine \code{alignped4()} will be called.} -\item{hints}{A Hints object, giving the relative order of the subjects. -See \code{\link[=Hints]{Hints()}} for details.} +\item{hints}{A Hints object or a named list containing \code{horder} and +\code{spouse}.} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} } \value{ A list with components \itemize{ -\item n A vector giving the number of subjects on each horizonal level of the +\item \code{n}: A vector giving the number of subjects on each horizonal level of the plot -\item nid A matrix with one row for each level, giving the numeric id of +\item \code{nid}: A matrix with one row for each level, giving the numeric id of each subject plotted. (A value of \code{17} means the 17th subject in the Pedigree). -\item pos A matrix giving the horizontal position of each plot point -\item fam A matrix giving the family id of each plot point. +\item \code{pos}: A matrix giving the horizontal position of each plot point +\item \code{fam}: A matrix giving the family id of each plot point. A value of \code{3} would mean that the two subjects in positions 3 and 4, in the row above, are this subject's parents. -\item spouse A matrix with values +\item \code{spouse}: A matrix with values \itemize{ \item \code{0} = not a spouse \item \code{1} = subject plotted to the immediate right is a spouse \item \code{2} = subject plotted to the immediate right is an inbred spouse } -\item twins Optional matrix which will only be present if the Pedigree +\item \code{twins}: Optional matrix which will only be present if the Pedigree contains twins : \itemize{ \item \code{0} = not a twin @@ -61,15 +78,21 @@ layout of a plot of the Pedigree. } \details{ This is an internal routine, used almost exclusively by -\code{ped_to_plotdf()}. The subservient functions \code{auto_hint()}, -\code{alignped1()}, \code{alignped2()}, -\code{alignped3()}, and \code{alignped4()} +\code{\link[=ped_to_plotdf]{ped_to_plotdf()}}. + +The subservient functions \code{\link[=auto_hint]{auto_hint()}}, +\code{\link[=alignped1]{alignped1()}}, \code{\link[=alignped2]{alignped2()}}, +\code{\link[=alignped3]{alignped3()}}, and \code{\link[=alignped4]{alignped4()}} contain the bulk of the computation. -If the \strong{hints} are missing the \code{auto_hint()} routine is called to + +If the \strong{hints} are missing the \code{\link[=auto_hint]{auto_hint()}} routine is called to supply an initial guess. -If multiple families are present in the Pedigree, this routine is called -once for each family, and the results are combined in the list returned. -For more information you can read the associated vignette:align + +If multiple families are present in the \strong{obj} Pedigree, this routine +is called once for each family, and the results are combined in the +list returned. + +For more information you can read the associated vignette: \code{vignette("alignment_details")}. } \examples{ diff --git a/man/alignped1.Rd b/man/alignped1.Rd index cf5159e0..161e3b62 100644 --- a/man/alignped1.Rd +++ b/man/alignped1.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped1.R \name{alignped1} \alias{alignped1} -\title{First routine alignment} +\title{Alignment first routine} \usage{ alignped1(idx, dadx, momx, level, horder, packed, spouselist) } @@ -22,30 +22,33 @@ sibship, as well as the relative order of processing for the founder couples. they were sisters). The names of the vector should be the individual identifiers.} -\item{packed}{Should the Pedigree be compressed, i.e., allow diagonal -lines connecting parents to children in order to have a smaller overall -width for the plot.} +\item{packed}{Should the Pedigree be compressed. +(i.e. allow diagonal lines connecting parents to children in order +to have a smaller overall width for the plot.)} + +\item{spouselist}{Matrix of spouses with 4 columns: +\itemize{ +\item \code{1}: husband index +\item \code{2}: wife index +\item \code{3}: husband anchor +\item \code{4}: wife anchor +}} } \value{ A list containing the elements to plot the Pedigree. It contains a set of matrices along with the spouselist matrix. The latter has marriages removed as they are processed. \itemize{ -\item n A vector giving the number of subjects on each horizonal level of the +\item \code{n} : A vector giving the number of subjects on each horizonal level of the plot -\item nid A matrix with one row for each level, giving the numeric id of +\item \code{nid} : A matrix with one row for each level, giving the numeric id of each subject plotted. (A value of \code{17} means the 17th subject in the Pedigree). -\item pos A matrix giving the horizontal position of each plot point -\item fam A matrix giving the family id of each plot point. +\item \code{pos} : A matrix giving the horizontal position of each plot point +\item \code{fam} : A matrix giving the family id of each plot point. A value of \code{3} would mean that the two subjects in positions 3 and 4, in the row above, are this subject's parents. -\item spouse A matrix with values -\itemize{ -\item \code{0} = not a spouse -\item \code{1} = subject plotted to the immediate right is a spouse -\item \code{2} = subject plotted to the immediate right is an inbred spouse -} +\item \code{spouselist} : Spouse matrix with anchors informations } } \description{ @@ -53,19 +56,28 @@ First alignment routine which create the subtree founded on a single subject as though it were the only tree. } \details{ -\enumerate{ -\item In this routine the \strong{nid} array consists of the final +In this routine the \strong{nid} array consists of the final \verb{nid array + 1/2} of the final spouse array. Note that the \strong{spouselist} matrix will only contain spouse pairs that are not yet processed. The logic for anchoring is slightly tricky. -First, if row 4 of the spouselist matrix is 0, we anchor at the first +\subsection{1. Anchoring:}{ + +First, if col 4 of the spouselist matrix is 0, we anchor at the first opportunity. Also note that if \code{spouselist[, 3] == spouselist[, 4]} it is the husband who is the anchor (just write out the possibilities). -\item Create the set of 3 return structures, which will be matrices +} + +\subsection{2. Return values initialization:}{ + +Create the set of 3 return structures, which will be matrices with \code{1 + nspouse} columns. If there are children then other routines will widen the result. -\item Create the two complimentary lists \strong{lspouse} and \strong{rspouse} -to denote those plotted on the left and on the right. +} + +\subsection{3. Create \strong{lspouse} and \strong{rspouse}:}{ + +This two complimentary lists denote the spouses plotted on the left +and on the right. For someone with lots of spouses we try to split them evenly. If the number of spouses is odd, then men should have more on the right than on the left, women more on the right. @@ -78,11 +90,19 @@ by plotting canine data, lspouse could initially be empty but \code{length(rspouse) > 1}. This caused \code{nleft > length(indx)}. A fix was to not let \strong{indx} to be indexed beyond its length, fix by JPS 5/2013. -\item For each spouse get the list of children. If there are any we +} + +\subsection{4. List the children:}{ + +For each spouse get the list of children. If there are any we call \code{\link[=alignped2]{alignped2()}} to generate their tree and then mark the connection to their parent. If multiple marriages have children we need to join the trees. -\item To finish up we need to splice together the tree made up from +} + +\subsection{5. Splice the tree:}{ + +To finish up we need to splice together the tree made up from all the kids, which only has data from \code{lev + 1} down, with the data here. There are 3 cases: \enumerate{ @@ -102,3 +122,5 @@ align(ped) \seealso{ \code{\link[=align]{align()}} } +\keyword{alignment} +\keyword{internal,} diff --git a/man/alignped2.Rd b/man/alignped2.Rd index 350e3459..45dddde9 100644 --- a/man/alignped2.Rd +++ b/man/alignped2.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped2.R \name{alignped2} \alias{alignped2} -\title{Second routine alignment} +\title{Alignment second routine} \usage{ alignped2(idx, dadx, momx, level, horder, packed, spouselist) } @@ -22,30 +22,33 @@ sibship, as well as the relative order of processing for the founder couples. they were sisters). The names of the vector should be the individual identifiers.} -\item{packed}{Should the Pedigree be compressed, i.e., allow diagonal -lines connecting parents to children in order to have a smaller overall -width for the plot.} +\item{packed}{Should the Pedigree be compressed. +(i.e. allow diagonal lines connecting parents to children in order +to have a smaller overall width for the plot.)} + +\item{spouselist}{Matrix of spouses with 4 columns: +\itemize{ +\item \code{1}: husband index +\item \code{2}: wife index +\item \code{3}: husband anchor +\item \code{4}: wife anchor +}} } \value{ A list containing the elements to plot the Pedigree. It contains a set of matrices along with the spouselist matrix. The latter has marriages removed as they are processed. \itemize{ -\item n A vector giving the number of subjects on each horizonal level of the +\item \code{n} : A vector giving the number of subjects on each horizonal level of the plot -\item nid A matrix with one row for each level, giving the numeric id of +\item \code{nid} : A matrix with one row for each level, giving the numeric id of each subject plotted. (A value of \code{17} means the 17th subject in the Pedigree). -\item pos A matrix giving the horizontal position of each plot point -\item fam A matrix giving the family id of each plot point. +\item \code{pos} : A matrix giving the horizontal position of each plot point +\item \code{fam} : A matrix giving the family id of each plot point. A value of \code{3} would mean that the two subjects in positions 3 and 4, in the row above, are this subject's parents. -\item spouse A matrix with values -\itemize{ -\item \code{0} = not a spouse -\item \code{1} = subject plotted to the immediate right is a spouse -\item \code{2} = subject plotted to the immediate right is an inbred spouse -} +\item \code{spouselist} : Spouse matrix with anchors informations } } \description{ @@ -62,7 +65,7 @@ The code below has one non-obvious special case. Suppose that two sibs marry. When the first sib is processed by \code{alignped1} then both partners (and any children) will be added to the rval structure below. When the second sib is processed they will come back as a 1 element tree -(the marriage will no longer be on the spouselist), which should be added +(the marriage will no longer be on the \strong{spouselist}), which should be added onto rval. The rule thus is to not add any 1 element tree whose value (which must be \code{idx[i]} is already in the rval structure for this level. } @@ -73,5 +76,7 @@ align(ped) } \seealso{ -\code{\link[=align]{align()}}, \code{\link[=alignped1]{alignped1()}} +\code{\link[=align]{align()}} } +\keyword{alignment} +\keyword{internal,} diff --git a/man/alignped3.Rd b/man/alignped3.Rd index 062f1a9a..ca89b3f9 100644 --- a/man/alignped3.Rd +++ b/man/alignped3.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped3.R \name{alignped3} \alias{alignped3} -\title{Third routine alignment} +\title{Alignment third routine} \usage{ alignped3(alt1, alt2, packed, space = 1) } @@ -11,9 +11,9 @@ alignped3(alt1, alt2, packed, space = 1) \item{alt2}{Alignement of the second tree} -\item{packed}{Should the Pedigree be compressed, i.e., allow diagonal -lines connecting parents to children in order to have a smaller overall -width for the plot.} +\item{packed}{Should the Pedigree be compressed. +(i.e. allow diagonal lines connecting parents to children in order +to have a smaller overall width for the plot.)} \item{space}{Space between two subjects} } @@ -22,21 +22,16 @@ A list containing the elements to plot the Pedigree. It contains a set of matrices along with the spouselist matrix. The latter has marriages removed as they are processed. \itemize{ -\item n A vector giving the number of subjects on each horizonal level of the +\item \code{n} : A vector giving the number of subjects on each horizonal level of the plot -\item nid A matrix with one row for each level, giving the numeric id of +\item \code{nid} : A matrix with one row for each level, giving the numeric id of each subject plotted. (A value of \code{17} means the 17th subject in the Pedigree). -\item pos A matrix giving the horizontal position of each plot point -\item fam A matrix giving the family id of each plot point. +\item \code{pos} : A matrix giving the horizontal position of each plot point +\item \code{fam} : A matrix giving the family id of each plot point. A value of \code{3} would mean that the two subjects in positions 3 and 4, in the row above, are this subject's parents. -\item spouse A matrix with values -\itemize{ -\item \code{0} = not a spouse -\item \code{1} = subject plotted to the immediate right is a spouse -\item \code{2} = subject plotted to the immediate right is an inbred spouse -} +\item \code{spouselist} : Spouse matrix with anchors informations } } \description{ @@ -49,8 +44,8 @@ the left tree is the same as the leftmost person in the right tree; we need not plot two copies of the same person side by side. (When initializing the output structures do not worry about this, there is no harm if they are a column bigger than finally needed.) -Beyond that the work is simple bookkeeping. -\subsection{Slide}{ +Beyond that the work is simple book keeping. +\subsection{1. Slide:}{ For the unpacked case, which is the traditional way to draw a Pedigree when we can assume the paper is infinitely wide, all parents are @@ -59,7 +54,7 @@ merged as solid blocks. On input they both have a left margin of 0. Compute how far over we have to slide the right tree. } -\subsection{Merge}{ +\subsection{2. Merge:}{ Now merge the two trees. Start at the top level and work down. } @@ -73,3 +68,5 @@ align(ped) \seealso{ \code{\link[=align]{align()}} } +\keyword{alignment} +\keyword{internal,} diff --git a/man/alignped4.Rd b/man/alignped4.Rd index 94bf5525..bfa9365d 100644 --- a/man/alignped4.Rd +++ b/man/alignped4.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/alignped4.R \name{alignped4} \alias{alignped4} -\title{Fourth and last routine alignment} +\title{Alignment fourth routine} \usage{ alignped4(rval, spouse, level, width, align) } @@ -15,15 +15,15 @@ the subject is a spouse or not.} \item{level}{Vector of the level of each subject} -\item{width}{for a packed output, the minimum width of the plot, in +\item{width}{For a packed output, the minimum width of the plot, in inches.} -\item{align}{for a packed Pedigree, align children under parents \code{TRUE}, +\item{align}{For a packed Pedigree, align children under parents \code{TRUE}, to the extent possible given the page width, or align to to the left margin \code{FALSE}. This argument can be a two element vector, giving the alignment parameters, or a logical value. -If \code{TRUE}, the default is \code{c(1.5, 2)}, or numeric the routine +If \code{TRUE}, the default is \code{c(1.5, 2)}, or if numeric the routine \code{alignped4()} will be called.} } \value{ @@ -49,14 +49,14 @@ line, if the user suggestion is too low it is increased to that For each set of siblings \code{x} with parents at \code{p_1} and \code{p_2} the alignment penalty is : -\eqn{(1/k^a)\sum{i=1}{k} (x_i - (p_1 + p_2)^2} +\deqn{(1/k^a)\sum{i=1}{k} (x_i - (p_1 + p_2)^2} where \code{k} is the number of siblings in the set. } Using the fact that when \code{a = 1} : -\eqn{\sum(x_i-c)^2 = \sum(x_i-\mu)^2 + k(c-\mu)^2} +\deqn{\sum(x_i-c)^2 = \sum(x_i-\mu)^2 + k(c-\mu)^2} then moving a sibship with \code{k} sibs one unit to the left or right of optimal will incur the same cost as moving one with only 1 or @@ -99,3 +99,5 @@ align(ped) \seealso{ \code{\link[=align]{align()}} } +\keyword{alignment} +\keyword{internal,} diff --git a/man/ancestors.Rd b/man/ancestors.Rd index 6293c067..56a4017a 100644 --- a/man/ancestors.Rd +++ b/man/ancestors.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/align.R \name{ancestors} \alias{ancestors} -\title{Routine function to get ancestors of a subject} +\title{Get ancestors indexes of a subject} \usage{ ancestors(idx, momx, dadx) } @@ -20,11 +20,16 @@ A vector of ancestor indexes Given the index of one or multiple individual(s), this function iterate through the mom and dad indexes to list out all the ancestors of the said individual(s). -This function is use in the \code{align()} function to +This function is use in the \code{\link[=align]{align()}} function to identify which spouse pairs has a common ancestor and therefore if they need to be connected with a double line (i.e. inbred). } +\examples{ +ancestors(c(1), c(3, 4, 5, 6), c(7, 8, 9, 10)) +ancestors(c(1, 2), c(3, 4, 5, 6), c(7, 8, 9, 10)) +} \seealso{ \code{\link[=align]{align()}} } +\keyword{internal} diff --git a/man/anchor_to_factor.Rd b/man/anchor_to_factor.Rd index a8bc7fd1..7d7c33ae 100644 --- a/man/anchor_to_factor.Rd +++ b/man/anchor_to_factor.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/utils.R \name{anchor_to_factor} \alias{anchor_to_factor} -\title{Transform a anchor variable to an ordered factor} +\title{Anchor variable to ordered factor} \usage{ anchor_to_factor(anchor) } @@ -19,7 +19,7 @@ an ordered factor vector containing the transformed variable "either" < "left" < "right" } \description{ -Transform a anchor variable to an ordered factor +Anchor variable to ordered factor } \examples{ anchor_to_factor(c(1, 2, 0, "left", "right", "either")) diff --git a/man/auto_hint.Rd b/man/auto_hint.Rd index 89dcf41d..b3801349 100644 --- a/man/auto_hint.Rd +++ b/man/auto_hint.Rd @@ -2,24 +2,44 @@ % Please edit documentation in R/auto_hint.R \name{auto_hint} \alias{auto_hint} -\title{First initial guess for the alignment of a Pedigree} +\alias{auto_hint,Pedigree-method} +\title{Initial hint for a Pedigree alignment} \usage{ auto_hint(obj, ...) + +\S4method{auto_hint}{Pedigree}(obj, hints = NULL, packed = TRUE, align = FALSE, reset = FALSE) } \arguments{ \item{obj}{A Pedigree object} -\item{reset}{If \code{TRUE}, then even if \code{ped} object has hints, reset -them to the initial values} +\item{...}{Other arguments to pass to the function} + +\item{hints}{A Hints object or a named list containing \code{horder} and +\code{spouse}.} + +\item{packed}{Should the Pedigree be compressed. +(i.e. allow diagonal lines connecting parents to children in order +to have a smaller overall width for the plot.)} + +\item{align}{For a packed Pedigree, align children under parents \code{TRUE}, +to the extent possible given the page width, or align to to the left +margin \code{FALSE}. +This argument can be a two element vector, giving the alignment +parameters, or a logical value. +If \code{TRUE}, the default is \code{c(1.5, 2)}, or if numeric the routine +\code{alignped4()} will be called.} + +\item{reset}{If \code{TRUE}, then even if the Ped object has Hints, reset +them to the initial values.} } \value{ -The \strong{hints} list containing components \code{horder} and \code{spouse} +The initial \linkS4class{Hints} object. } \description{ Compute an initial guess for the alignment of a Pedigree } \details{ -A Pedigree structure can contain a \code{hints} object which helps to +A Pedigree structure can contain a \linkS4class{Hints} object which helps to reorder the Pedigree (e.g. left-to-right order of children within family) so as to plot with minimal distortion. This routine is used to create an initial version of the hints. They can then be modified if desired. @@ -28,13 +48,12 @@ This routine would not normally be called by a user. It moves children within families, so that marriages are on the "edge" of a set children, closest to the spouse. For pedigrees that have only a single connection between two families this simple-minded approach works surprisingly well. -For more complex structures hand-tuning of the hints matrix may be required. +For more complex structures hand-tuning of the hints may be required. -The Pedigree in the example below is one where rearranging the founders -greatly decreases the number of extra connections. When \code{auto_hint()} is -called with a a vector of numbers as the second argument, the values for the -founder females are used to order the founder families left to right across -the plot. The values within a sibship are used as the preliminary order of +When \code{auto_hint()} is called with a a vector of numbers as the \strong{hints} +argument, the values for the founder females are used to order the founder +families left to right across the plot. +The values within a sibship are used as the preliminary order of siblings within a family; this may be changed to move one of them to the edge so as to match up with a spouse. The actual values in the vector are not important, only their order. @@ -45,5 +64,8 @@ ped <- Pedigree(sampleped[sampleped$famid == 1, ]) auto_hint(ped) } \seealso{ -\code{\link[=align]{align()}}, \code{\link[=best_hint]{best_hint()}} +\code{\link[=align]{align()}}, \code{\link[=best_hint]{best_hint()}}, \linkS4class{Hints} } +\keyword{alignment,} +\keyword{auto_hint} +\keyword{internal,} diff --git a/man/best_hint.Rd b/man/best_hint.Rd index e69acfb1..6038213f 100644 --- a/man/best_hint.Rd +++ b/man/best_hint.Rd @@ -2,37 +2,45 @@ % Please edit documentation in R/best_hint.R \name{best_hint} \alias{best_hint} -\title{Best hint for alignment} +\alias{best_hint,Pedigree-method} +\title{Best hint for a Pedigree alignment} \usage{ best_hint(obj, ...) + +\S4method{best_hint}{Pedigree}(obj, wt = c(1000, 10, 1), tolerance = 0) } \arguments{ \item{obj}{A Pedigree object} -\item{wt}{A vector of three weights for the three error measures -\itemize{ +\item{...}{Other arguments to pass to the function} + +\item{wt}{A vector of three weights for the three error measures. +Default is \code{c(1000, 10, 1)}. +\enumerate{ \item The number of duplicate individuals in the plot \item The sum of the absolute values of the differences in the positions of duplicate individuals \item The sum of the absolute values of the differences between -the center of the children and the parents -Default is \code{c(1000, 10, 1)}. +the center of the children and the parents. }} -\item{tolerance}{The maximum stress level to accept. Default is \code{0}} +\item{tolerance}{The maximum stress level to accept. +Default is \code{0}} } \value{ -The best hint object out of all the permutations +The best Hints object out of all the permutations } \description{ -When computer time is cheap, use this routine to get a 'best' Pedigree. +When computer time is cheap, use this routine to get a \emph{best} +Pedigree alignment. This routine will try all possible founder orders, and return the one -with the least 'stress'. +with the least \strong{stress}. } \details{ -The auto_hint routine will rearrange sibling order, but not founder order. -This calls auto_hint with every possible founder order, and finds that -plot with the least 'stress'. +The \code{\link[=auto_hint]{auto_hint()}} routine will rearrange sibling order, but not +founder order. +This calls \code{\link[=auto_hint]{auto_hint()}} with every possible founder order, and finds that +plot with the least "stress". The stress is computed as a weighted sum of three error measures: \itemize{ \item nbArcs The number of duplicate individuals in the plot @@ -42,10 +50,10 @@ positions of duplicate individuals the center of the children and the parents } -\eqn{stress = - wt[1] \times nbArcs + - wt[2] \times lgArcs + - wt[3] \times lgParentsChilds +\deqn{stress = + wt[1] * nbArcs + + wt[2] * lgArcs + + wt[3] * lgParentsChilds } If during the search, a plot is found with a stress level less than @@ -57,5 +65,7 @@ ped <- Pedigree(sampleped[sampleped$famid == 1,]) best_hint(ped) } \seealso{ -\code{\link[=auto_hint]{auto_hint()}} +\code{\link[=auto_hint]{auto_hint()}}, \code{\link[=align]{align()}} } +\keyword{alignment,} +\keyword{auto_hint} diff --git a/man/bit_size.Rd b/man/bit_size.Rd index f92368ee..cbef35e2 100644 --- a/man/bit_size.Rd +++ b/man/bit_size.Rd @@ -23,11 +23,6 @@ bit_size(obj, ...) \item{obj}{A Pedigree object or a vector of fathers identifierss} \item{...}{Additional arguments passed to methods} - -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{NA_character_}.} } \value{ A list with the following components: diff --git a/man/descendants.Rd b/man/descendants.Rd index a1b430a7..764c8f04 100644 --- a/man/descendants.Rd +++ b/man/descendants.Rd @@ -22,7 +22,7 @@ descendants(idlist, obj, ...) \arguments{ \item{idlist}{List of individuals identifiers to be considered} -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A Pedigree object} \item{...}{Additional arguments passed to methods} } diff --git a/man/duporder.Rd b/man/duporder.Rd index d1624555..a8732d74 100644 --- a/man/duporder.Rd +++ b/man/duporder.Rd @@ -2,37 +2,25 @@ % Please edit documentation in R/auto_hint.R \name{duporder} \alias{duporder} -\title{Routine to find the duplicate pairs of a subject} +\title{Find the duplicate pairs of a subject} \usage{ -duporder(idlist, plist, lev, ped) +duporder(idlist, plist, lev, obj) } \arguments{ \item{idlist}{List of individuals identifiers to be considered} \item{plist}{The alignment structure representing the Pedigree layout. -For the differents matrices present in the list, each row represents a -level of the Pedigree and each column a potential subject. -It contains the following components: -\itemize{ -\item n Vector of the number of subjects per level -\item nid Matrix of the subjects indexes -\item pos Matrix of the subjects positions -\item fam Matrix of the siblings family identifiers -\item spouse Matrix of the left spouses -\itemize{ -\item \code{0} = not spouse -\item \code{1} = spouse -\item \code{2} = inbred spouse. -} -}} +See \code{\link[=align]{align()}} for details.} \item{lev}{The generation level of the subject} + +\item{obj}{A Pedigree object} } \value{ A matrix of duplicate pairs } \description{ -Routine to find the duplicate pairs of a subject +Find the duplicate pairs of a subject } \details{ This routine is used by \code{auto_hint()}. @@ -42,4 +30,5 @@ the order they should be plotted. \seealso{ \code{\link[=auto_hint]{auto_hint()}} } -\keyword{internal} +\keyword{auto_hint} +\keyword{internal,} diff --git a/man/exclude_unavail_founders.Rd b/man/exclude_unavail_founders.Rd index eb8d8e4b..78d5361e 100644 --- a/man/exclude_unavail_founders.Rd +++ b/man/exclude_unavail_founders.Rd @@ -7,9 +7,21 @@ exclude_unavail_founders(id, dadid, momid, avail, missid = NA_character_) } \arguments{ -\item{id}{Vector of subject identifiers} +\item{id}{A character vector with the identifiers of each individuals} -\item{missid}{Character defining the missing ids} +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} } \value{ Returns a list with the following components: diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd index ff143a7b..ba05e12b 100644 --- a/man/extract-methods.Rd +++ b/man/extract-methods.Rd @@ -79,8 +79,6 @@ should be kept or deleted.} \item{idlist}{A vector of identifiers to subset} -\item{hints}{A Hints object} - \item{from}{A Pedigree object.} \item{j}{A vector of columns names.} diff --git a/man/famid-set.Rd b/man/famid-set.Rd new file mode 100644 index 00000000..46ffb8fa --- /dev/null +++ b/man/famid-set.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllAccessors.R +\name{famid<-} +\alias{famid<-} +\title{Famid setter} +\usage{ +famid(x) <- value +} +\arguments{ +\item{x}{A Ped or Rel object.} + +\item{value}{A character or integer vector that should be use +as the new family id} +} +\value{ +An updated Ped, Rel object. +} +\description{ +Famid setter +} diff --git a/man/famid.Rd b/man/famid.Rd new file mode 100644 index 00000000..72fc5d27 --- /dev/null +++ b/man/famid.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllAccessors.R +\name{famid} +\alias{famid} +\title{Famid getter} +\usage{ +famid(x) +} +\arguments{ +\item{x}{A Ped, Rel or Pedigree object.} +} +\value{ +A character vector of the family identifiers. +} +\description{ +Extract the family identifiers out +of a Ped, Rel or Pedigree object. +If use with a Pedigree object the famid slot of +its own Ped object will be given. +} diff --git a/man/family_check.Rd b/man/family_check.Rd index 1112be80..fd3bdb0e 100644 --- a/man/family_check.Rd +++ b/man/family_check.Rd @@ -31,7 +31,8 @@ biologicals fathers.} biologicals mothers.} \item{famid}{A character vector with the family identifiers of the -individuals.} +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} \item{newfam}{The result of a call to \code{make_famid()}. If this has already been computed by the user, adding it as an argument shortens the running diff --git a/man/find_avail_affected.Rd b/man/find_avail_affected.Rd index b4798d4d..1dcc7dd0 100644 --- a/man/find_avail_affected.Rd +++ b/man/find_avail_affected.Rd @@ -9,7 +9,7 @@ find_avail_affected(obj, ...) \arguments{ \item{obj}{A Pedigree object} -\item{...}{Additional arguments passed to methods} +\item{...}{Other arguments to pass to the function} \item{affstatus}{Affection status to search for.} } diff --git a/man/find_avail_noninform.Rd b/man/find_avail_noninform.Rd index bfe35d58..da33e4e0 100644 --- a/man/find_avail_noninform.Rd +++ b/man/find_avail_noninform.Rd @@ -9,7 +9,7 @@ find_avail_noninform(obj, ...) \arguments{ \item{obj}{A Pedigree object} -\item{...}{Additional arguments passed to methods} +\item{...}{Other arguments to pass to the function} } \value{ Vector of subject ids who can be removed by having lowest diff --git a/man/find_unavailable.Rd b/man/find_unavailable.Rd index 9937aa4e..2f751c15 100644 --- a/man/find_unavailable.Rd +++ b/man/find_unavailable.Rd @@ -9,7 +9,7 @@ find_unavailable(obj, ...) \arguments{ \item{obj}{A Pedigree object} -\item{...}{Additional arguments passed to methods} +\item{...}{Other arguments to pass to the function} } \value{ Returns a vector of subject ids for who can be diff --git a/man/findsibs.Rd b/man/findsibs.Rd index 3ae0296d..2deb2084 100644 --- a/man/findsibs.Rd +++ b/man/findsibs.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/auto_hint.R \name{findsibs} \alias{findsibs} -\title{Routine to find the siblings of a subject} +\title{Find the siblings of a subject} \usage{ findsibs(idpos, plist, lev) } @@ -10,21 +10,7 @@ findsibs(idpos, plist, lev) \item{idpos}{The position of the subject} \item{plist}{The alignment structure representing the Pedigree layout. -For the differents matrices present in the list, each row represents a -level of the Pedigree and each column a potential subject. -It contains the following components: -\itemize{ -\item n Vector of the number of subjects per level -\item nid Matrix of the subjects indexes -\item pos Matrix of the subjects positions -\item fam Matrix of the siblings family identifiers -\item spouse Matrix of the left spouses -\itemize{ -\item \code{0} = not spouse -\item \code{1} = spouse -\item \code{2} = inbred spouse. -} -}} +See \code{\link[=align]{align()}} for details.} \item{lev}{The generation level of the subject} } @@ -32,7 +18,7 @@ It contains the following components: The positions of the siblings } \description{ -Routine to find the siblings of a subject +Find the siblings of a subject } \details{ This routine is used by \code{auto_hint()}. @@ -41,4 +27,5 @@ It finds the siblings of a subject. \seealso{ \code{\link[=auto_hint]{auto_hint()}} } -\keyword{internal} +\keyword{auto_hint} +\keyword{internal,} diff --git a/man/findspouse.Rd b/man/findspouse.Rd index 96fcdd1b..047b2149 100644 --- a/man/findspouse.Rd +++ b/man/findspouse.Rd @@ -2,37 +2,25 @@ % Please edit documentation in R/auto_hint.R \name{findspouse} \alias{findspouse} -\title{Routine to find the spouse of a subject} +\title{Find the spouse of a subject} \usage{ -findspouse(idpos, plist, lev, ped) +findspouse(idpos, plist, lev, obj) } \arguments{ \item{idpos}{The position of the subject} \item{plist}{The alignment structure representing the Pedigree layout. -For the differents matrices present in the list, each row represents a -level of the Pedigree and each column a potential subject. -It contains the following components: -\itemize{ -\item n Vector of the number of subjects per level -\item nid Matrix of the subjects indexes -\item pos Matrix of the subjects positions -\item fam Matrix of the siblings family identifiers -\item spouse Matrix of the left spouses -\itemize{ -\item \code{0} = not spouse -\item \code{1} = spouse -\item \code{2} = inbred spouse. -} -}} +See \code{\link[=align]{align()}} for details.} \item{lev}{The generation level of the subject} + +\item{obj}{A Pedigree object} } \value{ The position of the spouse } \description{ -Routine to find the spouse of a subject +Find the spouse of a subject } \details{ This routine is used by \code{auto_hint()}. @@ -41,4 +29,5 @@ It finds the spouse of a subject. \seealso{ \code{\link[=auto_hint]{auto_hint()}} } -\keyword{internal} +\keyword{auto_hint} +\keyword{internal,} diff --git a/man/fix_parents.Rd b/man/fix_parents.Rd index a47cd575..a46121ff 100644 --- a/man/fix_parents.Rd +++ b/man/fix_parents.Rd @@ -20,6 +20,12 @@ dataframe is given it must contain the columns \code{id}, \code{dadid}, \item{...}{Additional arguments passed to methods} +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{vector containing for each subject, the identifiers of the +biologicals mothers.} + \item{sex}{A character, factor or numeric vector corresponding to the gender of the individuals. This will be transformed to an ordered factor with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated @@ -30,13 +36,13 @@ The following values are recognized: \item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" }} -\item{famid}{Optional famid identification set it to NULL to invalidate. -If used it will modify the ids of the individuals by pasting it with an _.} +\item{famid}{A character vector with the family identifiers of the +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{NA_character_}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} \item{delete}{Boolean defining if missing parents needs to be: \itemize{ diff --git a/man/get_twin_rel.Rd b/man/get_twin_rel.Rd index 9e20806c..8657c796 100644 --- a/man/get_twin_rel.Rd +++ b/man/get_twin_rel.Rd @@ -2,9 +2,12 @@ % Please edit documentation in R/auto_hint.R \name{get_twin_rel} \alias{get_twin_rel} -\title{Routine to get twin relationships} +\title{Get twin relationships} \usage{ -get_twin_rel(ped) +get_twin_rel(obj) +} +\arguments{ +\item{obj}{A Pedigree object} } \value{ A list containing components @@ -15,7 +18,7 @@ A list containing components } } \description{ -Routine to get twin relationships +Get twin relationships } \details{ This routine function determine the twin relationships @@ -27,4 +30,5 @@ It is used by \code{auto_hint()}. \seealso{ \code{\link[=auto_hint]{auto_hint()}} } -\keyword{internal} +\keyword{auto_hint} +\keyword{internal,} diff --git a/man/is_disconnected.Rd b/man/is_disconnected.Rd index 15a34cae..3c1d749b 100644 --- a/man/is_disconnected.Rd +++ b/man/is_disconnected.Rd @@ -6,9 +6,6 @@ \usage{ is_disconnected(id, dadid, momid) } -\arguments{ -\item{id}{A vector of each subjects identifiers} -} \value{ A vector of boolean of the same size as \code{id} with TRUE if the individual is disconnected and FALSE otherwise diff --git a/man/is_founder.Rd b/man/is_founder.Rd index 4ad88265..7ef06a95 100644 --- a/man/is_founder.Rd +++ b/man/is_founder.Rd @@ -6,12 +6,6 @@ \usage{ is_founder(momid, dadid, missid = NA_character_) } -\arguments{ -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{NA_character_}.} -} \value{ A vector of boolean of the same size as \code{dadid} and \code{momid} with TRUE if the individual has no parents (i.e is a founder) and FALSE diff --git a/man/is_parent.Rd b/man/is_parent.Rd index 543cd5e9..12a9dfef 100644 --- a/man/is_parent.Rd +++ b/man/is_parent.Rd @@ -7,15 +7,7 @@ is_parent(obj, ...) } \arguments{ -\item{obj}{A character vector with the id of the individuals or a -\code{data.frame} with all the informations in corresponding columns.} - -\item{id}{A vector of each subjects identifiers} - -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{NA_character_}.} +\item{obj}{A vector of each subjects identifiers} } \value{ A vector of boolean of the same size as \code{id} diff --git a/man/na_to_length.Rd b/man/na_to_length.Rd index 28c0ef6e..eb98884a 100644 --- a/man/na_to_length.Rd +++ b/man/na_to_length.Rd @@ -17,6 +17,14 @@ na_to_length(x, temp, value) A vector with the same length as temp. } \description{ -NA to specific length +Check if all value in a vector is \code{NA}. +If so set all of them to a new value matching the length +of the template. +If not check that the size of the vector is equal to +the template. +} +\examples{ +na_to_length(NA, rep(0, 4), "NewValue") +na_to_length(c(1, 2, 3, NA), rep(0, 4), "NewValue") } \keyword{internal} diff --git a/man/norm_ped.Rd b/man/norm_ped.Rd index 2a985a93..823398c9 100644 --- a/man/norm_ped.Rd +++ b/man/norm_ped.Rd @@ -28,11 +28,6 @@ of the individuals. The values recognized for those columns are \code{1} or \item{na_strings}{Vector of strings to be considered as NA values} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{NA_character_}.} - \item{try_num}{Boolean defining if the function should try to convert all the columns to numeric.} } diff --git a/man/norm_rel.Rd b/man/norm_rel.Rd index 80d142de..a0feca7c 100644 --- a/man/norm_rel.Rd +++ b/man/norm_rel.Rd @@ -27,10 +27,9 @@ by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} \item{na_strings}{Vector of strings to be considered as NA values} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{NA_character_}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} } \value{ A dataframe with the errors identified diff --git a/man/num_child.Rd b/man/num_child.Rd index 455d8583..17fb99b7 100644 --- a/man/num_child.Rd +++ b/man/num_child.Rd @@ -38,10 +38,9 @@ The code values are: The value relation code recognized by the function are the one defined by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} -\item{missid}{The missing identifier value. Founders are the individuals with -no father and no mother in the Pedigree -(i.e. \code{dadid} and \code{momid} equal to the value of this variable). -The default for \code{missid} is \code{NA_character_}.} +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} \item{reset}{If TRUE, the \code{num_child_tot}, \code{num_child_ind} and the \code{num_child_dir} columns are reset.} diff --git a/man/ped_to_plotdf.Rd b/man/ped_to_plotdf.Rd index 1751b9c6..74ead83c 100644 --- a/man/ped_to_plotdf.Rd +++ b/man/ped_to_plotdf.Rd @@ -9,7 +9,7 @@ ped_to_plotdf(obj, ...) \arguments{ \item{obj}{A Pedigree object} -\item{...}{other arguments passed to \code{\link[=par]{par()}}} +\item{...}{Other arguments to pass to the function} \item{pconnect}{when connecting parent to children the program will try to make the connecting line as close to vertical as possible, subject to it diff --git a/man/permute.Rd b/man/permute.Rd new file mode 100644 index 00000000..3b4e00ff --- /dev/null +++ b/man/permute.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/best_hint.R +\name{permute} +\alias{permute} +\title{Generate all possible permutation} +\usage{ +permute(x) +} +\arguments{ +\item{x}{A vector of length \strong{n}} +} +\value{ +A matrix with \strong{n} cols and \strong{n!} rows +} +\description{ +Given a vector of length \strong{n}, generate all possible permutations of +the numbers 1 to \strong{n}. +This is a recursive routine, and is not very efficient. +} +\examples{ +permute(1:3) +permute(1:4) +permute(1:5) +} +\keyword{auto_hint} +\keyword{internal,} diff --git a/man/plot-Pedigree-missing-method.Rd b/man/plot-Pedigree-missing-method.Rd index 7dafeafa..59bfc592 100644 --- a/man/plot-Pedigree-missing-method.Rd +++ b/man/plot-Pedigree-missing-method.Rd @@ -49,19 +49,19 @@ value of the column given.} \item{branch}{defines how much angle is used to connect various levels of nuclear families.} -\item{packed}{Should the Pedigree be compressed, i.e., allow diagonal -lines connecting parents to children in order to have a smaller overall -width for the plot.} +\item{packed}{Should the Pedigree be compressed. +(i.e. allow diagonal lines connecting parents to children in order +to have a smaller overall width for the plot.)} -\item{align}{for a packed Pedigree, align children under parents \code{TRUE}, +\item{align}{For a packed Pedigree, align children under parents \code{TRUE}, to the extent possible given the page width, or align to to the left margin \code{FALSE}. This argument can be a two element vector, giving the alignment parameters, or a logical value. -If \code{TRUE}, the default is \code{c(1.5, 2)}, or numeric the routine +If \code{TRUE}, the default is \code{c(1.5, 2)}, or if numeric the routine \code{alignped4()} will be called.} -\item{width}{for a packed output, the minimum width of the plot, in +\item{width}{For a packed output, the minimum width of the plot, in inches.} \item{title}{The title of the plot.} diff --git a/man/prefix_famid.Rd b/man/prefix_famid.Rd index 7eab517c..c72a9946 100644 --- a/man/prefix_famid.Rd +++ b/man/prefix_famid.Rd @@ -8,9 +8,8 @@ prefix_famid(famid, id, missid = NA_character_) } \arguments{ \item{famid}{A character vector with the family identifiers of the -individuals.} - -\item{id}{A vector of each subjects identifiers} +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} \item{missid}{A character vector with the missing values identifiers. All the id, dadid and momid corresponding to those values will be set diff --git a/man/rel_code_to_factor.Rd b/man/rel_code_to_factor.Rd index 609133bd..968bec1b 100644 --- a/man/rel_code_to_factor.Rd +++ b/man/rel_code_to_factor.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/utils.R \name{rel_code_to_factor} \alias{rel_code_to_factor} -\title{Transform a relationship code variable to an ordered factor} +\title{Relationship code variable to ordered factor} \usage{ rel_code_to_factor(code) } @@ -25,7 +25,7 @@ an ordered factor vector containing the transformed variable "MZ twin" < "DZ twin" < "UZ twin" < "Spouse" } \description{ -Transform a relationship code variable to an ordered factor +Relationship code variable to ordered factor } \examples{ rel_code_to_factor(c(1, 2, 3, 4, "MZ twin", "DZ twin", "UZ twin", "Spouse")) diff --git a/man/set_plot_area.Rd b/man/set_plot_area.Rd index 2b74565f..4d9f0bbc 100644 --- a/man/set_plot_area.Rd +++ b/man/set_plot_area.Rd @@ -9,8 +9,6 @@ set_plot_area(cex, id, maxlev, xrange, symbolsize, ...) \arguments{ \item{cex}{character expansion of the text} -\item{id}{A vector of each subjects identifiers} - \item{maxlev}{maximum level} \item{xrange}{range of x values} diff --git a/man/sex_to_factor.Rd b/man/sex_to_factor.Rd index 2d3548e3..91db0cfc 100644 --- a/man/sex_to_factor.Rd +++ b/man/sex_to_factor.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/utils.R \name{sex_to_factor} \alias{sex_to_factor} -\title{Transform a gender variable to an ordered factor} +\title{Gender variable to ordered factor} \usage{ sex_to_factor(sex) } @@ -22,7 +22,7 @@ an ordered factor vector containing the transformed variable "male" < "female" < "unknown" < "terminated" } \description{ -Transform a gender variable to an ordered factor +Gender variable to ordered factor } \examples{ sex_to_factor(c(1, 2, 3, 4, "f", "m", "man", "female")) diff --git a/man/shift.Rd b/man/shift.Rd index 31cf6396..11eba380 100644 --- a/man/shift.Rd +++ b/man/shift.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/auto_hint.R \name{shift} \alias{shift} -\title{Routine to shift set of siblings to the left or right} +\title{Shift set of siblings to the left or right} \usage{ shift(id, sibs, goleft, hint, twinrel, twinset) } @@ -23,7 +23,7 @@ shift(id, sibs, goleft, hint, twinrel, twinset) The updated hint vector } \description{ -Routine to shift set of siblings to the left or right +Shift set of siblings to the left or right } \details{ This routine is used by \code{auto_hint()}. @@ -37,4 +37,5 @@ together within the set of twins. \seealso{ \code{\link[=auto_hint]{auto_hint()}} } -\keyword{internal} +\keyword{auto_hint} +\keyword{internal,} diff --git a/man/shrink.Rd b/man/shrink.Rd index aad4d4d6..47dbfb2d 100644 --- a/man/shrink.Rd +++ b/man/shrink.Rd @@ -9,7 +9,7 @@ shrink(obj, ...) \arguments{ \item{obj}{A Pedigree object} -\item{...}{Additional arguments passed to methods} +\item{...}{Other arguments to pass to the function} \item{max_bits}{Optional, the bit size for which to shrink the Pedigree} } diff --git a/man/subregion.Rd b/man/subregion.Rd index 552e5cb4..05711df1 100644 --- a/man/subregion.Rd +++ b/man/subregion.Rd @@ -8,21 +8,7 @@ subregion(plist, subreg) } \arguments{ \item{plist}{The alignment structure representing the Pedigree layout. -For the differents matrices present in the list, each row represents a -level of the Pedigree and each column a potential subject. -It contains the following components: -\itemize{ -\item n Vector of the number of subjects per level -\item nid Matrix of the subjects indexes -\item pos Matrix of the subjects positions -\item fam Matrix of the siblings family identifiers -\item spouse Matrix of the left spouses -\itemize{ -\item \code{0} = not spouse -\item \code{1} = spouse -\item \code{2} = inbred spouse. -} -}} +See \code{\link[=align]{align()}} for details.} \item{subreg}{4-element vector for (min x, max x, min depth, max depth), used to edit away portions of the plot coordinates returned by diff --git a/man/unrelated.Rd b/man/unrelated.Rd index 9ff30be1..65e184d9 100644 --- a/man/unrelated.Rd +++ b/man/unrelated.Rd @@ -9,7 +9,7 @@ unrelated(obj, ...) \arguments{ \item{obj}{A Pedigree object} -\item{...}{Additional arguments passed to methods} +\item{...}{Other arguments to pass to the function} } \value{ A vector of the ids of subjects that are unrelated. diff --git a/man/upd_famid_id.Rd b/man/upd_famid_id.Rd index 9c658721..81037759 100644 --- a/man/upd_famid_id.Rd +++ b/man/upd_famid_id.Rd @@ -10,7 +10,8 @@ upd_famid_id(obj, famid, ...) \item{obj}{A character vector of individual ids} \item{famid}{A character vector with the family identifiers of the -individuals.} +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} } \value{ A character vector of individual ids with family prefix diff --git a/man/vect_to_binary.Rd b/man/vect_to_binary.Rd index 276d6eee..45d0e5a1 100644 --- a/man/vect_to_binary.Rd +++ b/man/vect_to_binary.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/utils.R \name{vect_to_binary} \alias{vect_to_binary} -\title{Transform a vector variable to binary vector} +\title{Vector variable to binary vector} \usage{ vect_to_binary(vect, logical = FALSE) } @@ -23,7 +23,7 @@ All other values will be transformed to NA. numeric binary vector of the same size as \code{vect} with 0 and 1 } \description{ -Transform a vector variable to binary vector +Vector variable to binary vector } \examples{ vect_to_binary( From dba314ea0a3b9af6cbcdf18ea4f2e26fce109e43 Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 5 Nov 2023 20:17:21 +0100 Subject: [PATCH 066/111] Update documentation --- DESCRIPTION | 2 +- NAMESPACE | 1 - R/AllConstructor.R | 2 +- R/bit_size.R | 75 ++++++++++++++++----------------- R/data.R | 73 ++++++++++++++++---------------- R/descendants.R | 24 +++++------ R/family_check.R | 26 ++---------- devel/documentation/todo.md | 8 ++-- man/Ped-constructor.Rd | 2 +- man/Pedigree.Rd | 2 +- man/bit_size.Rd | 43 +++++++++++-------- man/descendants.Rd | 17 ++++---- man/exclude_stray_marryin.Rd | 6 +++ man/exclude_unavail_founders.Rd | 2 +- man/family_check.Rd | 30 +++---------- man/fix_parents.Rd | 2 +- man/minnbreast.Rd | 55 ++++++++++++------------ man/sampleped.Rd | 18 ++++---- 18 files changed, 182 insertions(+), 206 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f8a448e5..00da1016 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -71,7 +71,6 @@ Collate: 'bit_size.R' 'data.R' 'descendants.R' - 'make_famid.R' 'family_check.R' 'find_unavailable.R' 'find_avail_affected.R' @@ -81,6 +80,7 @@ Collate: 'generate_colors.R' 'ibd_matrix.R' 'is_informative.R' + 'make_famid.R' 'min_dist_inf.R' 'norm_data.R' 'num_child.R' diff --git a/NAMESPACE b/NAMESPACE index 002f0df7..b387139b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -79,7 +79,6 @@ exportMethods(Scales) exportMethods(as.data.frame) exportMethods(as.list) exportMethods(auto_hint) -exportMethods(family_check) exportMethods(fix_parents) exportMethods(generate_colors) exportMethods(is_informative) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index d71e2c93..59ece64f 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -42,7 +42,7 @@ na_to_length <- function(x, temp, value) { #' `data.frame` with all the informations in corresponding columns. #' @param dadid A vector containing for each subject, the identifiers of the #' biologicals fathers. -#' @param momid vector containing for each subject, the identifiers of the +#' @param momid A vector containing for each subject, the identifiers of the #' biologicals mothers. #' @param famid A character vector with the family identifiers of the #' individuals. If provide, will be aggregated to the individuals diff --git a/R/bit_size.R b/R/bit_size.R index 51806cf7..81534895 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -1,72 +1,71 @@ -#' Get Pedigree bit_size +#' Compute bit size of a Pedigree #' -#' @description -#' Calculate Pedigree bit_size, defined as : +#' Utility function used in the `shrink()` function +#' to calculate the bit size of a Pedigree. #' -#' \eqn{ +#' @details +#' The bit size of a Pedigree is defined as : +#' +#' \deqn{ #' 2 \times NbNonFounders - NbFounders #' } #' -#' @details -#' This is a utility function used in `shrink()` -#' to calculate the bit_size of a Pedigree. +#' Where `NbNonFounders` is the number of non founders in the Pedigree +#' (i.e. individuals with identified parents) and +#' `NbFounders` is the number of founders in the Pedigree +#' (i.e. individuals without identified parents). #' -#' @inheritParams kinship -#' @inheritParams is_parent -#' @param obj A Pedigree object or a vector of fathers identifierss +#' @param obj A Ped or Pedigree object or a vector of fathers identifiers +#' @inheritParams Ped #' #' @return A list with the following components: #' -#' - bit_size The bit_size of input Pedigree +#' - bit_size The bit size of the Pedigree #' - nFounder The number of founders in the Pedigree -#' - nNonFounder The number of nonfounders in the Pedigree +#' - nNonFounder The number of non founders in the Pedigree #' #' @seealso [shrink()] #' @include AllClass.R -#' @docType methods #' @examples #' data(sampleped) #' ped <- Pedigree(sampleped) #' bit_size(ped) #' @export -#' @keywords internal +#' @keywords internal, shrink setGeneric("bit_size", signature = "obj", function(obj, ...) standardGeneric("bit_size") ) -#' @docType methods -#' @aliases bit_size,character #' @rdname bit_size -setMethod("bit_size", "character_OR_integer", function(obj, momid, missid = NA_character_) { - dadid <- obj - if (length(dadid) != length(momid)) { - stop("dadid and momid should have the same length") +setMethod("bit_size", + "character_OR_integer", + function(obj, momid, missid = NA_character_) { + dadid <- obj + if (length(dadid) != length(momid)) { + stop("dadid and momid should have the same length") + } + founder <- dadid %in% missid & momid %in% missid + ped_size <- length(dadid) + n_founder <- sum(founder) + n_non_founder <- ped_size - n_founder + bit_size <- 2 * n_non_founder - n_founder + list( + bit_size = bit_size, nFounder = n_founder, + nNonFounder = n_non_founder + ) } - founder <- dadid %in% missid & momid %in% missid - ped_size <- length(dadid) - n_founder <- sum(founder) - n_non_founder <- ped_size - n_founder - bit_size <- 2 * n_non_founder - n_founder - list( - bit_size = bit_size, nFounder = n_founder, - nNonFounder = n_non_founder - ) -}) +) -#' @docType methods -#' @aliases bit_size,Pedigree #' @rdname bit_size setMethod("bit_size", "Pedigree", - function(obj, missid = NA_character_) { - bit_size(ped(obj), missid) + function(obj) { + bit_size(ped(obj), NA_character_) } ) -#' @docType methods -#' @aliases bit_size,Ped #' @rdname bit_size setMethod("bit_size", "Ped", - function(obj, missid = NA_character_) { - bit_size(dadid(obj), momid(obj), missid) + function(obj) { + bit_size(dadid(obj), momid(obj), NA_character_) } ) \ No newline at end of file diff --git a/R/data.R b/R/data.R index 05ca12ee..3e32879c 100644 --- a/R/data.R +++ b/R/data.R @@ -2,7 +2,7 @@ #' #' @description Data from the Minnesota Breast Cancer Family Study. #' This contains extended pedigrees from 426 families, each identified by -#' a single proband in 1945-52, with follow up for incident breast cancer. +#' a single proband in 1945-1952, with follow up for incident breast cancer. #' #' @details The original study was conducted by Dr. Elving Anderson at the #' Dight Institute for Human Genetics at the University of Minnesota. @@ -11,11 +11,13 @@ #' siblings, offspring, aunts / uncles, and grandparents with the goal of #' understanding possible familial aspects of brest cancer. In 1991 the #' study was resurrected by Dr Tom Sellers. +#' #' Of the original 544 he excluded 58 prevalent cases, along with another 19 #' who had less than 2 living relatives at the time of Dr Anderson's survey. #' Of the remaining 462 families 10 had no living members, 23 could not be #' located and 8 refused, leaving 426 families on whom updated pedigrees #' were obtained. +#' #' This gave a study with 13351 males and 12699 females (5183 marry-ins). #' Primary questions were the relationship of early life exposures, breast #' density, and pharmacogenomics on incident breast cancer risk. @@ -29,34 +31,31 @@ #' @format A data frame with 28081 observations, one line per subject, on the #' following 14 variables. #' -#' - `id` subject identifier -#' - `proband` if 1, this subject is one of the original +#' - `id` : Subject identifier +#' - `proband` : If 1, this subject is one of the original #' 426 probands -#' - `fatherid` identifier of the father, if the father is part of +#' - `fatherid` : Identifier of the father, if the father is part of #' the data set; zero otherwise -#' - `motherid` identifier of the mother, if the mother is part of +#' - `motherid` : Identifier of the mother, if the mother is part of #' the data set; zero otherwise -#' - `famid` family identifier -#' - `endage` age at last follow-up or incident cancer -#' - `cancer` 1= breast cancer (females) or prostate cancer (males), -#' 0=censored -#' - `yob` year of birth -#' - `education` amount of education: 1-8 years, 9-12 years, high -#' school graduate, vocational education -#' beyond high school, some college but did not graduate, college graduate, -#' post-graduate education, refused to -#' answer on the questionnaire -#' - `marstat` marital status: married, living with someone in a +#' - `famid` : Family identifier +#' - `endage` : Age at last follow-up or incident cancer +#' - `cancer` : `1` = breast cancer (females) or prostate cancer (males), +#' `0` = censored +#' - `yob` : Year of birth +#' - `education` : Amount of education: 1-8 years, 9-12 years, high +#' school graduate, vocational education beyond high school, +#' some college but did not graduate, college graduate, +#' post-graduate education, refused to answer on the questionnaire +#' - `marstat` : Marital status: married, living with someone in a #' marriage-like relationship, separated #' or divorced, widowed, never married, refused to answer the questionaire -#' - `everpreg` ever pregnant: never pregnant at the time of -#' baseline survey, ever pregnant at the time -#' of baseline survey -#' - `parity` number of births -#' - `nbreast` number of breast biopsies -#' - `sex` M or F -#' - `bcpc` part of one of the families in the breast/prostate -#' cancer substudy: 0=no, 1=yes. +#' - `everpreg` : Ever pregnant at the time of baseline survey +#' - `parity` : Number of births +#' - `nbreast` : Number of breast biopsies +#' - `sex` : `M` or `F` +#' - `bcpc` : Part of one of the families in the breast / prostate +#' cancer substudy: `0` = no, `1` = yes. #' Note that subjects who were recruited to the overall study after the date of #' the BP substudy are coded as zero. #' @@ -89,15 +88,17 @@ #' cols_ren_ped = list( #' "indId" = "id", "fatherId" = "fatherid", #' "motherId" = "motherid", "gender" = "sex", "family" = "famid" -#' ) +#' ), missid = "0", col_aff = "cancer" #' ) -#' print(breastped) -#' #plot(breastped) #plot family 8, proband is solid, slash for cancers +#' summary(breastped) +#' scales(breastped) +#' #plot family 8, proband is solid, slash for cancers +#' #plot(breastped[famid(breastped) == "8"]) "minnbreast" -#' samplepedigree data +#' Sampleped data #' -#' @description Small sample pedigree data set. +#' @description Small sample pedigree data set for testing purposes. #' #' @details This is a small fictive pedigree data set, with 55 #' individuals in 2 families. @@ -105,15 +106,15 @@ #' #' @format A data frame with 55 observations, one line per subject, on the #' following 7 variables. -#' - `famid` family identifier -#' - `id` subject identifier -#' - `dadid` identifier of the father, if the father is part of the +#' - `famid` : Family identifier +#' - `id` : Subject identifier +#' - `dadid` : Identifier of the father, if the father is part of the #' data set; zero otherwise -#' - `momid` identifier of the mother, if the mother is part of the +#' - `momid` : Identifier of the mother, if the mother is part of the #' data set; zero otherwise -#' - `sex` 1 for male or 2 for F -#' - `affected` 1 or 0 -#' - `available` 1 or 0 +#' - `sex` : `1` for male or `2` for female +#' - `affected` : `1` or `0` +#' - `avail` : `1` or `0` #' #' @usage #' data("sampleped") diff --git a/R/descendants.R b/R/descendants.R index 44747dc7..e1f7ab63 100644 --- a/R/descendants.R +++ b/R/descendants.R @@ -1,11 +1,13 @@ -#' Find all the descendants +#' Find all descendants of list of individuals #' #' @description #' Find all the descendants of a particular list of individuals -#' given a Pedigree +#' given a Pedigree object. #' +#' @param obj A Ped or Pedigree object or a vector of the +#' individuals identifiers. #' @inheritParams duporder -#' @inheritParams kinship +#' @inheritParams Ped #' #' @return #' Vector of all descendants of the individuals in idlist. @@ -18,15 +20,13 @@ #' @include AllClass.R #' @export #' @keywords internal -#' @docType methods setGeneric("descendants", function(idlist, obj, ...) standardGeneric("descendants") ) #' @rdname descendants -#' @docType methods -#' @aliases descendants,character_OR_integer -setMethod("descendants", signature(idlist = "character_OR_integer", obj = "character_OR_integer"), +setMethod("descendants", + signature(idlist = "character_OR_integer", obj = "character_OR_integer"), function(idlist, obj, dadid, momid) { id <- as.character(obj) idlist <- as.character(idlist) @@ -50,18 +50,16 @@ setMethod("descendants", signature(idlist = "character_OR_integer", obj = "chara ) #' @rdname descendants -#' @docType methods -#' @aliases descendants,Pedigree -setMethod("descendants", signature(idlist = "character_OR_integer", obj = "Pedigree"), +setMethod("descendants", + signature(idlist = "character_OR_integer", obj = "Pedigree"), function(idlist, obj) { descendants(idlist, ped(obj)) } ) #' @rdname descendants -#' @docType methods -#' @aliases descendants,Ped -setMethod("descendants", signature(idlist = "character_OR_integer", obj = "Ped"), +setMethod("descendants", + signature(idlist = "character_OR_integer", obj = "Ped"), function(idlist, obj) { descendants(as.character(idlist), id(obj), dadid(obj), momid(obj)) } diff --git a/R/family_check.R b/R/family_check.R index 5cb6816b..7cc54108 100644 --- a/R/family_check.R +++ b/R/family_check.R @@ -9,14 +9,13 @@ #' Given a family id vector, also compute the familial grouping from first #' principles using the parenting data, and compare the results. #' -#' The `make_famid` function is used to create a de novo family id from the +#' The [make_famid()] function is used to create a de novo family id from the #' parentage data, and this is compared to the family id given in the data. #' #' If there are any joins, then an attribute 'join' is attached. #' It will be a matrix with family as row labels, new-family-id as the columns, #' and the number of subjects as entries. #' -#' @inheritParams kinship #' @inheritParams Ped #' @param newfam The result of a call to `make_famid()`. If this has already #' been computed by the user, adding it as an argument shortens the running @@ -53,31 +52,16 @@ #' rep(1, nrow(sampleped)))) #' fcheck.combined #' -#' # make person 120's father be her son. -#' sampleped[20, 3] <- 131 -#' fcheck1.bad <- try( -#' { -#' with(sampleped, family_check(id, father, mother, famid)) -#' }, -#' silent = FALSE -#' ) -#' -#' ## fcheck1.bad is a try-error -#' -#' @seealso [make_famid()], [kinship()] +#' @seealso [make_famid()] #' @include AllClass.R #' @keywords internal -#' @docType methods #' @export setGeneric("family_check", signature = "obj", function(obj, ...) standardGeneric("family_check") ) #' @rdname family_check -#' @include make_famid.R -#' @aliases family_check,character -#' @export -setMethod("family_check", "character", +setMethod("family_check", "character_OR_integer", function(obj, dadid, momid, famid, newfam) { id <- obj if (is.numeric(famid) && any(is.na(famid))) { @@ -121,8 +105,6 @@ setMethod("family_check", "character", ) #' @rdname family_check -#' @docType methods -#' @aliases family_check,Pedigree setMethod("family_check", "Pedigree", function(obj) { family_check(ped(obj)) @@ -130,8 +112,6 @@ setMethod("family_check", "Pedigree", ) #' @rdname family_check -#' @docType methods -#' @aliases family_check,Ped setMethod("family_check", "Ped", function(obj) { family_check(id(obj), dadid(obj), momid(obj), famid(obj)) diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index e6edbdf0..bec1e21f 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -15,10 +15,10 @@ - [x] alignped4.R - [x] auto_hint.R - [x] best_hint.R -- [ ] bit_size.R -- [ ] data.R -- [ ] descendants.R -- [ ] family_check.R +- [x] bit_size.R +- [x] data.R +- [x] descendants.R +- [x] family_check.R - [ ] find_avail_affected.R - [ ] find_avail_noninform.R - [ ] find_unavailable.R diff --git a/man/Ped-constructor.Rd b/man/Ped-constructor.Rd index ebe0610f..a5958591 100644 --- a/man/Ped-constructor.Rd +++ b/man/Ped-constructor.Rd @@ -13,7 +13,7 @@ Ped(obj, ...) \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} -\item{momid}{vector containing for each subject, the identifiers of the +\item{momid}{A vector containing for each subject, the identifiers of the biologicals mothers.} \item{famid}{A character vector with the family identifiers of the diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd index 3f63c103..80386960 100644 --- a/man/Pedigree.Rd +++ b/man/Pedigree.Rd @@ -65,7 +65,7 @@ with the individuals informations. See \code{\link[=Ped]{Ped()}} for more inform \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} -\item{momid}{vector containing for each subject, the identifiers of the +\item{momid}{A vector containing for each subject, the identifiers of the biologicals mothers.} \item{sex}{A character, factor or numeric vector corresponding to diff --git a/man/bit_size.Rd b/man/bit_size.Rd index cbef35e2..86a5cc71 100644 --- a/man/bit_size.Rd +++ b/man/bit_size.Rd @@ -1,47 +1,53 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/bit_size.R -\docType{methods} \name{bit_size} \alias{bit_size} \alias{bit_size,character_OR_integer-method} -\alias{bit_size,character} \alias{bit_size,Pedigree-method} -\alias{bit_size,Pedigree} \alias{bit_size,Ped-method} -\alias{bit_size,Ped} -\title{Get Pedigree bit_size} +\title{Compute bit size of a Pedigree} \usage{ bit_size(obj, ...) \S4method{bit_size}{character_OR_integer}(obj, momid, missid = NA_character_) -\S4method{bit_size}{Pedigree}(obj, missid = NA_character_) +\S4method{bit_size}{Pedigree}(obj) -\S4method{bit_size}{Ped}(obj, missid = NA_character_) +\S4method{bit_size}{Ped}(obj) } \arguments{ -\item{obj}{A Pedigree object or a vector of fathers identifierss} +\item{obj}{A Ped or Pedigree object or a vector of fathers identifiers} -\item{...}{Additional arguments passed to methods} +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} } \value{ A list with the following components: \itemize{ -\item bit_size The bit_size of input Pedigree +\item bit_size The bit size of the Pedigree \item nFounder The number of founders in the Pedigree -\item nNonFounder The number of nonfounders in the Pedigree +\item nNonFounder The number of non founders in the Pedigree } } \description{ -Calculate Pedigree bit_size, defined as : +Utility function used in the \code{shrink()} function +to calculate the bit size of a Pedigree. +} +\details{ +The bit size of a Pedigree is defined as : -\eqn{ +\deqn{ 2 \times NbNonFounders - NbFounders } -} -\details{ -This is a utility function used in \code{shrink()} -to calculate the bit_size of a Pedigree. + +Where \code{NbNonFounders} is the number of non founders in the Pedigree +(i.e. individuals with identified parents) and +\code{NbFounders} is the number of founders in the Pedigree +(i.e. individuals without identified parents). } \examples{ data(sampleped) @@ -51,4 +57,5 @@ bit_size(ped) \seealso{ \code{\link[=shrink]{shrink()}} } -\keyword{internal} +\keyword{internal,} +\keyword{shrink} diff --git a/man/descendants.Rd b/man/descendants.Rd index 764c8f04..8ae61323 100644 --- a/man/descendants.Rd +++ b/man/descendants.Rd @@ -1,15 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/descendants.R -\docType{methods} \name{descendants} \alias{descendants} \alias{descendants,character_OR_integer,character_OR_integer-method} -\alias{descendants,character_OR_integer} \alias{descendants,character_OR_integer,Pedigree-method} -\alias{descendants,Pedigree} \alias{descendants,character_OR_integer,Ped-method} -\alias{descendants,Ped} -\title{Find all the descendants} +\title{Find all descendants of list of individuals} \usage{ descendants(idlist, obj, ...) @@ -22,9 +18,14 @@ descendants(idlist, obj, ...) \arguments{ \item{idlist}{List of individuals identifiers to be considered} -\item{obj}{A Pedigree object} +\item{obj}{A Ped or Pedigree object or a vector of the +individuals identifiers.} -\item{...}{Additional arguments passed to methods} +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} } \value{ Vector of all descendants of the individuals in idlist. @@ -32,7 +33,7 @@ The list is not ordered. } \description{ Find all the descendants of a particular list of individuals -given a Pedigree +given a Pedigree object. } \examples{ data("sampleped") diff --git a/man/exclude_stray_marryin.Rd b/man/exclude_stray_marryin.Rd index 0a79c103..92cb57ed 100644 --- a/man/exclude_stray_marryin.Rd +++ b/man/exclude_stray_marryin.Rd @@ -8,6 +8,12 @@ exclude_stray_marryin(id, dadid, momid) } \arguments{ \item{id}{Vector of subject identifiers} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} } \value{ Returns a data frame of subject identifiers and their parents. diff --git a/man/exclude_unavail_founders.Rd b/man/exclude_unavail_founders.Rd index 78d5361e..756e8f71 100644 --- a/man/exclude_unavail_founders.Rd +++ b/man/exclude_unavail_founders.Rd @@ -12,7 +12,7 @@ exclude_unavail_founders(id, dadid, momid, avail, missid = NA_character_) \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} -\item{momid}{vector containing for each subject, the identifiers of the +\item{momid}{A vector containing for each subject, the identifiers of the biologicals mothers.} \item{avail}{A logical vector with the availability status of the diff --git a/man/family_check.Rd b/man/family_check.Rd index fd3bdb0e..4eb61167 100644 --- a/man/family_check.Rd +++ b/man/family_check.Rd @@ -1,33 +1,28 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/family_check.R -\docType{methods} \name{family_check} \alias{family_check} -\alias{family_check,character-method} -\alias{family_check,character} +\alias{family_check,character_OR_integer-method} \alias{family_check,Pedigree-method} -\alias{family_check,Pedigree} \alias{family_check,Ped-method} -\alias{family_check,Ped} \title{Check family} \usage{ family_check(obj, ...) -\S4method{family_check}{character}(obj, dadid, momid, famid, newfam) +\S4method{family_check}{character_OR_integer}(obj, dadid, momid, famid, newfam) \S4method{family_check}{Pedigree}(obj) \S4method{family_check}{Ped}(obj) } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} - -\item{...}{Additional arguments passed to methods} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} -\item{momid}{vector containing for each subject, the identifiers of the +\item{momid}{A vector containing for each subject, the identifiers of the biologicals mothers.} \item{famid}{A character vector with the family identifiers of the @@ -66,7 +61,7 @@ Error check for a family classification Given a family id vector, also compute the familial grouping from first principles using the parenting data, and compare the results. -The \code{make_famid} function is used to create a de novo family id from the +The \code{\link[=make_famid]{make_famid()}} function is used to create a de novo family id from the parentage data, and this is compared to the family id given in the data. If there are any joins, then an attribute 'join' is attached. @@ -88,19 +83,8 @@ fcheck.combined <- with(sampleped, family_check(id, dadid, momid, rep(1, nrow(sampleped)))) fcheck.combined -# make person 120's father be her son. -sampleped[20, 3] <- 131 -fcheck1.bad <- try( - { - with(sampleped, family_check(id, father, mother, famid)) - }, - silent = FALSE -) - -## fcheck1.bad is a try-error - } \seealso{ -\code{\link[=make_famid]{make_famid()}}, \code{\link[=kinship]{kinship()}} +\code{\link[=make_famid]{make_famid()}} } \keyword{internal} diff --git a/man/fix_parents.Rd b/man/fix_parents.Rd index a46121ff..d7c3ed22 100644 --- a/man/fix_parents.Rd +++ b/man/fix_parents.Rd @@ -23,7 +23,7 @@ dataframe is given it must contain the columns \code{id}, \code{dadid}, \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} -\item{momid}{vector containing for each subject, the identifiers of the +\item{momid}{A vector containing for each subject, the identifiers of the biologicals mothers.} \item{sex}{A character, factor or numeric vector corresponding to diff --git a/man/minnbreast.Rd b/man/minnbreast.Rd index f07282c2..d5eeba2c 100644 --- a/man/minnbreast.Rd +++ b/man/minnbreast.Rd @@ -8,34 +8,31 @@ A data frame with 28081 observations, one line per subject, on the following 14 variables. \itemize{ -\item \code{id} subject identifier -\item \code{proband} if 1, this subject is one of the original +\item \code{id} : Subject identifier +\item \code{proband} : If 1, this subject is one of the original 426 probands -\item \code{fatherid} identifier of the father, if the father is part of +\item \code{fatherid} : Identifier of the father, if the father is part of the data set; zero otherwise -\item \code{motherid} identifier of the mother, if the mother is part of +\item \code{motherid} : Identifier of the mother, if the mother is part of the data set; zero otherwise -\item \code{famid} family identifier -\item \code{endage} age at last follow-up or incident cancer -\item \code{cancer} 1= breast cancer (females) or prostate cancer (males), -0=censored -\item \code{yob} year of birth -\item \code{education} amount of education: 1-8 years, 9-12 years, high -school graduate, vocational education -beyond high school, some college but did not graduate, college graduate, -post-graduate education, refused to -answer on the questionnaire -\item \code{marstat} marital status: married, living with someone in a +\item \code{famid} : Family identifier +\item \code{endage} : Age at last follow-up or incident cancer +\item \code{cancer} : \code{1} = breast cancer (females) or prostate cancer (males), +\code{0} = censored +\item \code{yob} : Year of birth +\item \code{education} : Amount of education: 1-8 years, 9-12 years, high +school graduate, vocational education beyond high school, +some college but did not graduate, college graduate, +post-graduate education, refused to answer on the questionnaire +\item \code{marstat} : Marital status: married, living with someone in a marriage-like relationship, separated or divorced, widowed, never married, refused to answer the questionaire -\item \code{everpreg} ever pregnant: never pregnant at the time of -baseline survey, ever pregnant at the time -of baseline survey -\item \code{parity} number of births -\item \code{nbreast} number of breast biopsies -\item \code{sex} M or F -\item \code{bcpc} part of one of the families in the breast/prostate -cancer substudy: 0=no, 1=yes. +\item \code{everpreg} : Ever pregnant at the time of baseline survey +\item \code{parity} : Number of births +\item \code{nbreast} : Number of breast biopsies +\item \code{sex} : \code{M} or \code{F} +\item \code{bcpc} : Part of one of the families in the breast / prostate +cancer substudy: \code{0} = no, \code{1} = yes. Note that subjects who were recruited to the overall study after the date of the BP substudy are coded as zero. } @@ -46,7 +43,7 @@ data(minnbreast) \description{ Data from the Minnesota Breast Cancer Family Study. This contains extended pedigrees from 426 families, each identified by -a single proband in 1945-52, with follow up for incident breast cancer. +a single proband in 1945-1952, with follow up for incident breast cancer. } \details{ The original study was conducted by Dr. Elving Anderson at the @@ -56,11 +53,13 @@ University Hospital were enrolled, and information gathered on parents, siblings, offspring, aunts / uncles, and grandparents with the goal of understanding possible familial aspects of brest cancer. In 1991 the study was resurrected by Dr Tom Sellers. + Of the original 544 he excluded 58 prevalent cases, along with another 19 who had less than 2 living relatives at the time of Dr Anderson's survey. Of the remaining 462 families 10 had no living members, 23 could not be located and 8 refused, leaving 426 families on whom updated pedigrees were obtained. + This gave a study with 13351 males and 12699 females (5183 marry-ins). Primary questions were the relationship of early life exposures, breast density, and pharmacogenomics on incident breast cancer risk. @@ -77,10 +76,12 @@ breastped <- Pedigree(minnbreast, cols_ren_ped = list( "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", "gender" = "sex", "family" = "famid" - ) + ), missid = "0", col_aff = "cancer" ) -print(breastped) -#plot(breastped) #plot family 8, proband is solid, slash for cancers +summary(breastped) +scales(breastped) +#plot family 8, proband is solid, slash for cancers +#plot(breastped[famid(breastped) == "8"]) } \references{ Epidemiologic and genetic follow-up study of 544 Minnesota breast cancer diff --git a/man/sampleped.Rd b/man/sampleped.Rd index b9a36e0a..0f32a96d 100644 --- a/man/sampleped.Rd +++ b/man/sampleped.Rd @@ -3,27 +3,27 @@ \docType{data} \name{sampleped} \alias{sampleped} -\title{samplepedigree data} +\title{Sampleped data} \format{ A data frame with 55 observations, one line per subject, on the following 7 variables. \itemize{ -\item \code{famid} family identifier -\item \code{id} subject identifier -\item \code{dadid} identifier of the father, if the father is part of the +\item \code{famid} : Family identifier +\item \code{id} : Subject identifier +\item \code{dadid} : Identifier of the father, if the father is part of the data set; zero otherwise -\item \code{momid} identifier of the mother, if the mother is part of the +\item \code{momid} : Identifier of the mother, if the mother is part of the data set; zero otherwise -\item \code{sex} 1 for male or 2 for F -\item \code{affected} 1 or 0 -\item \code{available} 1 or 0 +\item \code{sex} : \code{1} for male or \code{2} for female +\item \code{affected} : \code{1} or \code{0} +\item \code{avail} : \code{1} or \code{0} } } \usage{ data("sampleped") } \description{ -Small sample pedigree data set. +Small sample pedigree data set for testing purposes. } \details{ This is a small fictive pedigree data set, with 55 From 838a4d6bfcdedb380b62edad2234ded3ebdc07f6 Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 6 Nov 2023 19:50:19 +0100 Subject: [PATCH 067/111] Update documentation --- NAMESPACE | 2 - R/find_avail_affected.R | 22 +++-- R/find_avail_noninform.R | 25 ++++-- R/find_unavailable.R | 33 ++++--- R/fix_parents.R | 29 +++--- R/generate_aff_inds.R | 25 ++++-- R/generate_colors.R | 152 +++++++++++++++++--------------- R/is_informative.R | 2 +- devel/documentation/todo.md | 12 +-- man/exclude_stray_marryin.Rd | 10 ++- man/exclude_unavail_founders.Rd | 8 +- man/find_avail_affected.Rd | 31 +++++-- man/find_avail_noninform.Rd | 30 +++++-- man/find_unavailable.Rd | 27 ++++-- man/fix_parents.Rd | 25 +++--- man/generate_aff_inds.Rd | 27 ++++-- man/generate_border.Rd | 22 +++-- man/generate_colors.Rd | 97 +++++++++----------- man/generate_fill.Rd | 40 +++++++-- man/is_informative.Rd | 7 +- man/min_dist_inf.Rd | 5 +- man/useful_inds.Rd | 2 +- 22 files changed, 381 insertions(+), 252 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index b387139b..2848bead 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -79,8 +79,6 @@ exportMethods(Scales) exportMethods(as.data.frame) exportMethods(as.list) exportMethods(auto_hint) -exportMethods(fix_parents) -exportMethods(generate_colors) exportMethods(is_informative) exportMethods(kindepth) exportMethods(kinship) diff --git a/R/find_avail_affected.R b/R/find_avail_affected.R index 81ef17be..6870498f 100644 --- a/R/find_avail_affected.R +++ b/R/find_avail_affected.R @@ -1,26 +1,27 @@ -# Automatically generated from all.nw using noweb - -#' Find a single person to trim from a Pedigree whose is available +#' Find single affected and available individual from a Pedigree #' #' @description #' Finds one subject from among available non-parents with indicated affection #' status. #' #' @details -#' When used within pedigree.shrink, this function is called with the first +#' When used within [shrink()], this function is called with the first #' affected indicator, if the affected item in the Pedigree is a matrix of #' multiple affected indicators. #' +#' If **avail** or **affected** is null, then the function will use the +#' corresponding Ped accessor. +#' #' @param affstatus Affection status to search for. -#' @inheritParams align -#' @inheritParams is_informative +#' @param obj A Ped or Pedigree object. +#' @inheritParams Ped #' #' @return A list is returned with the following components -#' - ped The new Pedigree object +#' - ped The new Ped object #' - newAvail Vector of availability status of trimmed individuals #' - idTrimmed Vector of IDs of trimmed individuals -#' - isTrimmed logical value indicating whether Pedigree has been trimmed -#' - bit_size Bit size of the trimmed Pedigree +#' - isTrimmed logical value indicating whether Ped object has been trimmed +#' - bit_size Bit size of the trimmed Ped #' #' @examples #' data(sampleped) @@ -30,11 +31,13 @@ #' @include bit_size.R #' @include utils.R #' @include find_unavailable.R +#' @keywords internal, shrink #' @export setGeneric("find_avail_affected", signature = "obj", function(obj, ...) standardGeneric("find_avail_affected") ) +#' @rdname find_avail_affected setMethod("find_avail_affected", "Ped", function(obj, avail = NULL, affected = NULL, affstatus = NA) { if (is.null(avail)) { @@ -99,6 +102,7 @@ setMethod("find_avail_affected", "Ped", } ) +#' @rdname find_avail_affected setMethod("find_avail_affected", "Pedigree", function(obj, ...) { find_avail_affected(ped(obj), ...) diff --git a/R/find_avail_noninform.R b/R/find_avail_noninform.R index 0f3b6e7b..6a2f675c 100644 --- a/R/find_avail_noninform.R +++ b/R/find_avail_noninform.R @@ -1,18 +1,17 @@ -# Automatically generated from all.nw using noweb - #' Find uninformative but available subject #' -#' @details -#' Find subjects from a Pedigree who are available and uninformative +#' Finds subjects from among available non-parents with all affection +#' equal to `0`. #' #' @details #' Identify subjects to remove from a Pedigree who are available but -#' non-informative. This is the second step to remove subjects in -#' pedigree.shrink if the Pedigree does not meet the desired bit size. +#' non-informative (unaffected). This is the second step to remove subjects in +#' [shrink()] if the Pedigree does not meet the desired bit size. #' -#' @inheritParams align -#' @inheritParams is_informative -#' @inheritParams is_parent +#' If **avail** or **affected** is null, then the function will use the +#' corresponding Ped accessor. +#' +#' @inheritParams find_avail_affected #' #' @examples #' data(sampleped) @@ -23,20 +22,27 @@ #' informativeness. #' #' @seealso [shrink()] +#' @keywords internal, shrink #' @export setGeneric("find_avail_noninform", signature = "obj", function(obj, ...) standardGeneric("find_avail_noninform") ) +#' @rdname find_avail_noninform setMethod("find_avail_noninform", "Ped", function(obj, avail = NULL, affected = NULL) { if (is.null(avail)) { avail <- avail(obj) } if (is.null(affected)) { + ## TODO affected() may need to give back data.frame affected <- affected(obj) } check_parent <- is_parent(id(obj), dadid(obj), momid(obj)) + + # For each individual if not a parent and unaffected + # Set its avail to FALSE if both parent avail + # or if one is absent for (i in seq_along(length(obj))) { if (check_parent[i] == FALSE && avail[i] == 1 && all(affected[i] == 0, na.rm = TRUE)) { @@ -54,6 +60,7 @@ setMethod("find_avail_noninform", "Ped", } ) +#' @rdname find_avail_noninform setMethod("find_avail_noninform", "Pedigree", function(obj, ...) { find_avail_noninform(ped(obj), ...) diff --git a/R/find_unavailable.R b/R/find_unavailable.R index 19a5783a..30565cf5 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -1,13 +1,14 @@ -# Automatically generated from all.nw using noweb - #' Find unavailable subjects in a Pedigree #' #' @description -#' Find the ID of subjects in a Pedigree iteratively, as anyone who is not -#' available and does not have an available descendant by successively removing -#' unavailable terminal nodes. +#' Find the identifiers of subjects in a Pedigree iteratively, +#' as anyone who is not available and does not have an available +#' descendant by successively removing unavailable terminal nodes. #' #' @details +#' If **avail** is null, then the function will use the +#' corresponding Ped accessor. +#' #' Originally written as pedTrim by Steve Iturria, modified by Dan Schaid 2007, #' and now split into the two separate functions: #' `find_unavailable()`, and `trim()` to do the tasks separately. @@ -19,13 +20,15 @@ #' If the subject ids are character, make sure none of the characters in the #' ids is a colon (":"), which is a special character #' used to concatenate and split subjects within the utility. +#' The `trim()` functions is now replaced by the `subset()` function. #' #' @inheritParams find_avail_affected #' #' @return Returns a vector of subject ids for who can be #' removed. #' -#' @section Side Effects: relation matrix from `trim` is trimmed of any +#' @section Side Effects: +#' Relation matrix from subsetting is trimmed of any #' special relations that include the subjects to trim. #' #' @examples @@ -34,18 +37,21 @@ #' find_unavailable(ped1) #' #' @seealso [shrink()] +#' @keywords internal, shrink #' @include utils.R #' @export setGeneric("find_unavailable", signature = "obj", function(obj, ...) standardGeneric("find_unavailable") ) +#' @rdname find_unavailable setMethod("find_unavailable", "Pedigree", function(obj, ...) { find_unavailable(ped(obj), ...) } ) +#' @rdname find_unavailable setMethod("find_unavailable", "Ped", function(obj, avail = NULL) { if (is.null(avail)) { @@ -94,16 +100,16 @@ setMethod("find_unavailable", "Ped", #' Exclude stray marry-ins #' #' @description -#' Exclude from a Pedigree any founders who are not parents. +#' Exclude any founders who are not parents. #' -#' @param id Vector of subject identifiers -#' @inheritParams descendants +#' @inheritParams exclude_unavail_founders #' #' @return #' Returns a data frame of subject identifiers and their parents. #' The data frame is trimmed of any founders who are not parents. #' -#' @keywords internal +#' @keywords internal, shrink +#' @seealso [shrink()] exclude_stray_marryin <- function(id, dadid, momid) { # get rid of founders who are not parents (stray available marryins # who are isolated after trimming their unavailable offspring) @@ -122,13 +128,11 @@ exclude_stray_marryin <- function(id, dadid, momid) { #' Exclude unavailable founders #' #' @description -#' Exclude from a Pedigree any unavailable founders. +#' Exclude any unavailable founders. #' #' @param id A character vector with the identifiers of each individuals #' @inheritParams Ped #' -#' @keywords internal -#' #' @return #' Returns a list with the following components: #' - n_trimmed Number of trimmed individuals @@ -136,6 +140,9 @@ exclude_stray_marryin <- function(id, dadid, momid) { #' - id Vector of subject identifiers #' - dadid Vector of father identifiers #' - momid Vector of mother identifiers +#' +#' @keywords internal, shrink +#' @seealso [shrink()] exclude_unavail_founders <- function( id, dadid, momid, avail, missid = NA_character_ ) { diff --git a/R/fix_parents.R b/R/fix_parents.R index b0d75865..cb1c2b62 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -1,10 +1,10 @@ #' @importFrom stringr str_split_i NULL -#' Fix details on the parents for children of the Pedigree +#' Fix parents relationship and gender #' #' @description -#' Fix the sex of parents, add parents that are missing from the Pedigree +#' Fix the sex of parents, add parents that are missing from the data. #' Can be used with a dataframe or a vector of the #' different individuals informations. #' @@ -12,23 +12,21 @@ NULL #' First look to add parents whose ids are given in momid/dadid. Second, fix #' sex of parents. Last look to add second parent for children for whom only #' one parent id is given. -#' If a famid vector is given the famid id will be added to the ids of all -#' individuals (id, dadid, momid) separated by an underscore befor proceeding. +#' If a **famid** vector is given the family id will be added to the ids of all +#' individuals (`id`, `dadid`, `momid`) +#' separated by an underscore before proceeding. #' #' ## Special case for dataframe -#' Check for presence of both parents id in the `id` field. -#' If not both presence behaviour depend of `delete` parameter -#' - If TRUE then use fix_parents function and merge back the other fields +#' Check for presence of both parents id in the **id** field. +#' If not both presence behaviour depend of **delete** parameter +#' - If `TRUE` then use fix_parents function and merge back the other fields #' in the dataframe then set availability to O for non available parents. -#' - If FALSE then delete the id of missing parents +#' - If `FALSE` then delete the id of missing parents #' #' @inheritParams Ped -#' @inheritParams kinship -#' @inheritParams is_parent -#' @inheritParams sex_to_factor #' @param obj A data.frame or a vector of the individuals identifiers. If a #' dataframe is given it must contain the columns `id`, `dadid`, -#' `momid`, `sex` and `famid`. famid is optional. +#' `momid`, `sex` and `famid` (optional). #' #' @return A data.frame with id, dadid, momid, sex as columns with the #' relationships fixed. @@ -51,8 +49,7 @@ NULL #' sex, #' missid = NA_character_ #' )) -#' newped <- Pedigree(test1newmom) -#' as.data.frame(newped) +#' Pedigree(test1newmom) #' #' @author Jason Sinnwell #' @export @@ -60,9 +57,7 @@ setGeneric("fix_parents", signature = "obj", function(obj, ...) standardGeneric("fix_parents") ) -#' @export #' @rdname fix_parents -#' @aliases fix_parents,character setMethod("fix_parents", "character", function( obj, dadid, momid, sex, famid = NULL, missid = NA_character_ ) { @@ -179,8 +174,6 @@ setMethod("fix_parents", "character", function( #' - `FALSE` : be deleted #' @param filter Filtering column containing `0` or `1` for the #' rows to kept before proceeding. -#' -#' @export #' @rdname fix_parents setMethod("fix_parents", "data.frame", function( obj, delete = FALSE, filter = NULL, missid = NA_character_ diff --git a/R/generate_aff_inds.R b/R/generate_aff_inds.R index 40757009..4ca5c67f 100644 --- a/R/generate_aff_inds.R +++ b/R/generate_aff_inds.R @@ -1,11 +1,25 @@ #' @importFrom plyr revalue NULL -#' Process the information for affection +#' Process the affection informations #' -#' @details Perform transformation uppon a column given as the one -#' containing affection status to get an `affected` column usable for -#' the rest of the script +#' @description Perform transformation uppon a vector given as the one +#' containing the affection status to obtain an `affected` binary state. +#' +#' @details This function helps to configure a binary state from a character or +#' numeric variable. +#' +#' ## If the variable is a `character` or a `factor`: +#' +#' In this case the affected state will depend on the modality provided as +#' an affected status. All individuals with a value corresponding to one of the +#' element in the vector **mods_aff** will be considered as affected. +#' +#' ## If the variable is `numeric`: +#' +#' In this case the affected state will be `TRUE` if the value of the individual +#' is above the **threshold** if **sup_thres_aff** is `TRUE` and `FALSE` +#' otherwise. #' #' @param values Vector containing the values of the column to process. #' @param mods_aff Vector of modality to consider as affected in the case @@ -28,6 +42,8 @@ NULL #' @examples #' generate_aff_inds(c(1, 2, 3, 4, 5), threshold = 3, sup_thres_aff = TRUE) #' generate_aff_inds(c("A", "B", "C", "A", "V", "B"), mods_aff = c("A", "B")) +#' @author Louis Le Nézet +#' @keywords generate_scales #' @export generate_aff_inds <- function(values, mods_aff = NULL, threshold = NULL, sup_thres_aff = NULL @@ -82,4 +98,3 @@ generate_aff_inds <- function(values, mods_aff = NULL, affected <- as.logical(revalue(labels, aff_to_use, warn_missing = FALSE)) as.data.frame(list(mods = mods, labels = labels, affected = affected)) } - diff --git a/R/generate_colors.R b/R/generate_colors.R index 174158b9..e0fc4a27 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -1,11 +1,32 @@ #' @importFrom plyr revalue NULL -#' Process the colors based on affection +#' Process the filling colors based on affection #' -#' @details Perform transformation uppon a column given as the one +#' @description Perform transformation uppon a column given as the one #' containing affection status to compute the filling color. #' +#' @details The colors will be set using the +#' [grDevices::colorRampPalette()] function +#' with the colors given as parameters. +#' +#' The colors will be set as follow: +#' +#' - If **keep_full_scale** is `FALSE`: +#' Then the affected individuals will get the first color of the +#' **colors_aff** vector and the unaffected individuals will get the +#' first color of the **colors_unaff** vector. +#' - If **keep_full_scale** is `TRUE`: +#' - If **values** isn't numeric: +#' Each levels of the affected **values** vector will get it's own color from +#' the **colors_aff** vector using the [grDevices::colorRampPalette()] and +#' the same will be done for the unaffected individuals using the +#' **colors_unaff**. +#' - If **values** is numeric: +#' The mean of the affected individuals will be compared to the mean of the +#' unaffected individuals and the colors will be set up such as the color +#' gradient follow the direction of the affection. +#' #' @param values The vector containing the values to process as affection. #' @param labels The vector containing the labels to use for the affection. #' @param keep_full_scale Boolean defining if the affection values need to @@ -21,14 +42,18 @@ NULL #' unaffected individuls. #' @inheritParams Ped #' -#' @return A list of two elements -#' - The processed values column as a numeric factor -#' - A dataframe containing the description of each modality of the scale +#' @return A list of three elements +#' - `mods` : The processed values column as a numeric factor +#' - `affected` : A logical vector indicating if the individual is affected +#' - `sc_fill` : A dataframe containing the description of each modality of the +#' scale #' #' @examples #' aff <- generate_aff_inds(seq_len(5), threshold = 3, sup_thres_aff = TRUE) #' generate_fill(seq_len(5), aff$affected, aff$labels) #' generate_fill(seq_len(5), aff$affected, aff$labels, keep_full_scale = TRUE) +#' +#' @keywords generate_scales #' @export generate_fill <- function( values, affected, labels, @@ -141,24 +166,29 @@ generate_fill <- function( list(mods = mods, affected = affected, sc_fill = sc_fill) } -#' Process the colors based on availability +#' Process the border colors based on availability #' -#' @details Perform transformation uppon a column given as the one +#' @description Perform transformation uppon a vector given as the one #' containing the availability status to compute the border color. #' The vector given will be transformed using the [vect_to_binary()] #' function. #' #' @param values The vector containing the values to process as available. #' @param colors_avail Set of 2 colors to use for the box's border of an -#' individual. The first color will be used for available individual (avail -#' == 1) and the second for the unavailable individual (avail == 0). +#' individual. The first color will be used for available individual +#' (`avail == 1`) and the second for the unavailable individual +#' (`avail == 0`). #' -#' @return A dataframe containing the scale to use for the availability -#' status. +#' @return A list of three elements +#' - `mods` : The processed values column as a numeric factor +#' - `avail` : A logical vector indicating if the individual is available +#' - `sc_bord` : A dataframe containing the description of each modality of the +#' scale #' #' @examples #' generate_border(c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA)) #' +#' @keywords generate_scales #' @export generate_border <- function(values, colors_avail = c("green", "black")) { # Set border colors @@ -179,62 +209,63 @@ generate_border <- function(values, colors_avail = c("green", "black")) { list(mods = mods, avail = avail, sc_bord = sc_bord) } -#' Process the colors based on affection and availability +#' Process the filling and border colors based on affection and availability #' -#' @details Perform transformation uppon a dataframe given to compute +#' @description Perform transformation uppon a dataframe given to compute #' the colors for the filling and the border of the individuals based #' on the affection and availability status. #' +#' @details The colors will be set using the [generate_fill()] and the +#' [generate_border()] functions respectively for the filling and the border. +#' #' @param obj A Pedigree object or a vector containing the affection status for -#' each individuals. The affection status can be numeric, logical or character. -#' @param col_avail The name of the column containing the availability status. -#' @inheritParams is_informative +#' each individuals. The affection status can be numeric or a character. #' @inheritParams generate_fill #' @inheritParams generate_border #' @inheritParams generate_aff_inds #' #' @return #' ## When used with a vector -#' A list of three elements -#' - A vector containing the transformed filling modalities -#' - A dataframe containing the description of each filling modalities -#' - A dataframe containing the description of the border modalities +#' +#' A list of two elements +#' - The list containing the filling colors processed and their description +#' - The list containing the border colors processed and their description #' #' ## When used with a Pedigree object -#' The Pedigree object with the `affected` and `avail` columns -#' processed accordingly. #' -#' The Pedigree scales slots are updated +#' The Pedigree object with the `affected` and `avail` columns +#' processed accordingly as well as the `scales` slot updated. #' -#' @examples -#' data("sampleped") -#' ped <- Pedigree(sampleped) -#' generate_colors(ped, "affected", add_to_scale=FALSE)$scales +#' @keywords generate_scales #' @export setGeneric("generate_colors", signature = "obj", function(obj, ...) standardGeneric("generate_colors") ) -#' @export -#' @aliases generate_colors,character #' @rdname generate_colors +#' @examples +#' generate_colors( +#' c("A", "B", "A", "B", NA, "A", "B", "A", "B", NA), +#' c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), +#' mods_aff = "A", +#' ) setMethod("generate_colors", "character", function( obj, avail, - mods_aff = NULL, threshold = 0.5, sup_thres_aff = TRUE, - keep_full_scale = FALSE, breaks = 3, + mods_aff = NULL, + keep_full_scale = FALSE, colors_aff = c("yellow2", "red"), colors_unaff = c("white", "steelblue4"), colors_avail = c("green", "black") ) { affected_val <- obj affected <- generate_aff_inds(affected_val, - mods_aff, threshold, sup_thres_aff + mods_aff = mods_aff ) lst_bord <- generate_border(avail, colors_avail) lst_aff <- generate_fill( affected_val, affected$affected, affected$labels, - keep_full_scale, breaks, colors_aff, colors_unaff + keep_full_scale, NULL, colors_aff, colors_unaff ) list( @@ -244,13 +275,16 @@ setMethod("generate_colors", "character", } ) -#' @export -#' @aliases generate_colors,numeric #' @rdname generate_colors +#' @examples +#' generate_colors( +#' c(10, 0, 5, 7, NA, 6, 2, 1, 3, NA), +#' c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), +#' threshold = 3, keep_full_scale = TRUE +#' ) setMethod("generate_colors", "numeric", function( - obj, avail, - mods_aff = NULL, threshold = 0.5, sup_thres_aff = TRUE, + obj, avail, threshold = 0.5, sup_thres_aff = TRUE, keep_full_scale = FALSE, breaks = 3, colors_aff = c("yellow2", "red"), colors_unaff = c("white", "steelblue4"), @@ -258,38 +292,9 @@ setMethod("generate_colors", "numeric", ) { affected_val <- obj affected <- generate_aff_inds(affected_val, - mods_aff, threshold, sup_thres_aff - ) - - lst_bord <- generate_border(avail, colors_avail) - lst_aff <- generate_fill( - affected_val, affected$affected, affected$labels, - keep_full_scale, breaks, colors_aff, colors_unaff + mods_aff = NULL, threshold, sup_thres_aff ) - list( - fill = lst_aff, - bord = lst_bord - ) - } -) - -#' @export -#' @aliases generate_colors,logical -#' @rdname generate_colors -setMethod("generate_colors", "logical", - function( - obj, avail, - mods_aff = TRUE, threshold = 0.5, sup_thres_aff = TRUE, - keep_full_scale = FALSE, breaks = 3, - colors_aff = c("yellow2", "red"), - colors_unaff = c("white", "steelblue4"), - colors_avail = c("green", "black") - ) { - affected_val <- obj - affected <- generate_aff_inds(affected_val, - mods_aff, threshold, sup_thres_aff - ) lst_bord <- generate_border(avail, colors_avail) lst_aff <- generate_fill( affected_val, affected$affected, affected$labels, @@ -304,16 +309,19 @@ setMethod("generate_colors", "logical", ) #' @importFrom plyr rbind.fill -#' @include AllClass.R -#' @docType methods -#' @aliases generate_colors,Pedigree #' @param add_to_scale Boolean defining if the scales need to be added to the #' existing scales or if they need to replace the existing scales. #' @param reset If `TRUE` the scale of the specified column will be reset if #' already present. -#' @param ... Other parameters to pass to the `generate_colors` function +#' @param col_avail The name of the column containing the availability status. +#' @inheritParams Pedigree +#' @examples +#' data("sampleped") +#' ped <- Pedigree(sampleped) +#' ped <- generate_colors(ped, "affected", add_to_scale=FALSE) +#' scales(ped) #' @rdname generate_colors -#' @export +#' @include AllClass.R setMethod("generate_colors", "Pedigree", function(obj, col_aff = "affected", add_to_scale = TRUE, diff --git a/R/is_informative.R b/R/is_informative.R index cbf244ed..cb2602a7 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -11,7 +11,7 @@ #' columns. #' #' @inheritParams Ped -#' @param col_aff A string with the column name to use for the affection status. +#' @inheritParams Pedigree #' @param informative Informative individuals selection can take 5 values: #' - 'AvAf' (available and affected), #' - 'AvOrAf' (available or affected), diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index bec1e21f..b8e6b405 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -19,12 +19,12 @@ - [x] data.R - [x] descendants.R - [x] family_check.R -- [ ] find_avail_affected.R -- [ ] find_avail_noninform.R -- [ ] find_unavailable.R -- [ ] fix_parents.R -- [ ] generate_aff_inds.R -- [ ] generate_colors.R +- [x] find_avail_affected.R +- [x] find_avail_noninform.R +- [x] find_unavailable.R +- [x] fix_parents.R +- [x] generate_aff_inds.R +- [x] generate_colors.R - [ ] ibd_matrix.R - [ ] is_informative.R - [ ] kindepth.R diff --git a/man/exclude_stray_marryin.Rd b/man/exclude_stray_marryin.Rd index 92cb57ed..57dbd3e2 100644 --- a/man/exclude_stray_marryin.Rd +++ b/man/exclude_stray_marryin.Rd @@ -7,7 +7,7 @@ exclude_stray_marryin(id, dadid, momid) } \arguments{ -\item{id}{Vector of subject identifiers} +\item{id}{A character vector with the identifiers of each individuals} \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} @@ -20,6 +20,10 @@ Returns a data frame of subject identifiers and their parents. The data frame is trimmed of any founders who are not parents. } \description{ -Exclude from a Pedigree any founders who are not parents. +Exclude any founders who are not parents. } -\keyword{internal} +\seealso{ +\code{\link[=shrink]{shrink()}} +} +\keyword{internal,} +\keyword{shrink} diff --git a/man/exclude_unavail_founders.Rd b/man/exclude_unavail_founders.Rd index 756e8f71..0b7856ce 100644 --- a/man/exclude_unavail_founders.Rd +++ b/man/exclude_unavail_founders.Rd @@ -34,6 +34,10 @@ Returns a list with the following components: } } \description{ -Exclude from a Pedigree any unavailable founders. +Exclude any unavailable founders. } -\keyword{internal} +\seealso{ +\code{\link[=shrink]{shrink()}} +} +\keyword{internal,} +\keyword{shrink} diff --git a/man/find_avail_affected.Rd b/man/find_avail_affected.Rd index 1dcc7dd0..364b8302 100644 --- a/man/find_avail_affected.Rd +++ b/man/find_avail_affected.Rd @@ -2,25 +2,37 @@ % Please edit documentation in R/find_avail_affected.R \name{find_avail_affected} \alias{find_avail_affected} -\title{Find a single person to trim from a Pedigree whose is available} +\alias{find_avail_affected,Ped-method} +\alias{find_avail_affected,Pedigree-method} +\title{Find single affected and available individual from a Pedigree} \usage{ find_avail_affected(obj, ...) + +\S4method{find_avail_affected}{Ped}(obj, avail = NULL, affected = NULL, affstatus = NA) + +\S4method{find_avail_affected}{Pedigree}(obj, ...) } \arguments{ -\item{obj}{A Pedigree object} +\item{obj}{A Ped or Pedigree object.} -\item{...}{Other arguments to pass to the function} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} + +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} \item{affstatus}{Affection status to search for.} } \value{ A list is returned with the following components \itemize{ -\item ped The new Pedigree object +\item ped The new Ped object \item newAvail Vector of availability status of trimmed individuals \item idTrimmed Vector of IDs of trimmed individuals -\item isTrimmed logical value indicating whether Pedigree has been trimmed -\item bit_size Bit size of the trimmed Pedigree +\item isTrimmed logical value indicating whether Ped object has been trimmed +\item bit_size Bit size of the trimmed Ped } } \description{ @@ -28,9 +40,12 @@ Finds one subject from among available non-parents with indicated affection status. } \details{ -When used within pedigree.shrink, this function is called with the first +When used within \code{\link[=shrink]{shrink()}}, this function is called with the first affected indicator, if the affected item in the Pedigree is a matrix of multiple affected indicators. + +If \strong{avail} or \strong{affected} is null, then the function will use the +corresponding Ped accessor. } \examples{ data(sampleped) @@ -40,3 +55,5 @@ find_avail_affected(ped, affstatus = 1) \seealso{ \code{\link[=shrink]{shrink()}} } +\keyword{internal,} +\keyword{shrink} diff --git a/man/find_avail_noninform.Rd b/man/find_avail_noninform.Rd index da33e4e0..89345831 100644 --- a/man/find_avail_noninform.Rd +++ b/man/find_avail_noninform.Rd @@ -2,28 +2,42 @@ % Please edit documentation in R/find_avail_noninform.R \name{find_avail_noninform} \alias{find_avail_noninform} +\alias{find_avail_noninform,Ped-method} +\alias{find_avail_noninform,Pedigree-method} \title{Find uninformative but available subject} \usage{ find_avail_noninform(obj, ...) + +\S4method{find_avail_noninform}{Ped}(obj, avail = NULL, affected = NULL) + +\S4method{find_avail_noninform}{Pedigree}(obj, ...) } \arguments{ -\item{obj}{A Pedigree object} +\item{obj}{A Ped or Pedigree object.} + +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} -\item{...}{Other arguments to pass to the function} +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} } \value{ Vector of subject ids who can be removed by having lowest informativeness. } \description{ -Find uninformative but available subject +Finds subjects from among available non-parents with all affection +equal to \code{0}. } \details{ -Find subjects from a Pedigree who are available and uninformative - Identify subjects to remove from a Pedigree who are available but -non-informative. This is the second step to remove subjects in -pedigree.shrink if the Pedigree does not meet the desired bit size. +non-informative (unaffected). This is the second step to remove subjects in +\code{\link[=shrink]{shrink()}} if the Pedigree does not meet the desired bit size. + +If \strong{avail} or \strong{affected} is null, then the function will use the +corresponding Ped accessor. } \examples{ data(sampleped) @@ -34,3 +48,5 @@ find_avail_noninform(ped) \seealso{ \code{\link[=shrink]{shrink()}} } +\keyword{internal,} +\keyword{shrink} diff --git a/man/find_unavailable.Rd b/man/find_unavailable.Rd index 2f751c15..ed2ba27f 100644 --- a/man/find_unavailable.Rd +++ b/man/find_unavailable.Rd @@ -2,25 +2,36 @@ % Please edit documentation in R/find_unavailable.R \name{find_unavailable} \alias{find_unavailable} +\alias{find_unavailable,Pedigree-method} +\alias{find_unavailable,Ped-method} \title{Find unavailable subjects in a Pedigree} \usage{ find_unavailable(obj, ...) + +\S4method{find_unavailable}{Pedigree}(obj, ...) + +\S4method{find_unavailable}{Ped}(obj, avail = NULL) } \arguments{ -\item{obj}{A Pedigree object} +\item{obj}{A Ped or Pedigree object.} -\item{...}{Other arguments to pass to the function} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} } \value{ Returns a vector of subject ids for who can be removed. } \description{ -Find the ID of subjects in a Pedigree iteratively, as anyone who is not -available and does not have an available descendant by successively removing -unavailable terminal nodes. +Find the identifiers of subjects in a Pedigree iteratively, +as anyone who is not available and does not have an available +descendant by successively removing unavailable terminal nodes. } \details{ +If \strong{avail} is null, then the function will use the +corresponding Ped accessor. + Originally written as pedTrim by Steve Iturria, modified by Dan Schaid 2007, and now split into the two separate functions: \code{find_unavailable()}, and \code{trim()} to do the tasks separately. @@ -32,9 +43,11 @@ isolated after trimming their unavailable offspring, and If the subject ids are character, make sure none of the characters in the ids is a colon (":"), which is a special character used to concatenate and split subjects within the utility. +The \code{trim()} functions is now replaced by the \code{subset()} function. } \section{Side Effects}{ - relation matrix from \code{trim} is trimmed of any + +Relation matrix from subsetting is trimmed of any special relations that include the subjects to trim. } @@ -47,3 +60,5 @@ find_unavailable(ped1) \seealso{ \code{\link[=shrink]{shrink()}} } +\keyword{internal,} +\keyword{shrink} diff --git a/man/fix_parents.Rd b/man/fix_parents.Rd index d7c3ed22..90e92215 100644 --- a/man/fix_parents.Rd +++ b/man/fix_parents.Rd @@ -3,9 +3,8 @@ \name{fix_parents} \alias{fix_parents} \alias{fix_parents,character-method} -\alias{fix_parents,character} \alias{fix_parents,data.frame-method} -\title{Fix details on the parents for children of the Pedigree} +\title{Fix parents relationship and gender} \usage{ fix_parents(obj, ...) @@ -16,9 +15,7 @@ fix_parents(obj, ...) \arguments{ \item{obj}{A data.frame or a vector of the individuals identifiers. If a dataframe is given it must contain the columns \code{id}, \code{dadid}, -\code{momid}, \code{sex} and \code{famid}. famid is optional.} - -\item{...}{Additional arguments passed to methods} +\code{momid}, \code{sex} and \code{famid} (optional).} \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} @@ -58,7 +55,7 @@ A data.frame with id, dadid, momid, sex as columns with the relationships fixed. } \description{ -Fix the sex of parents, add parents that are missing from the Pedigree +Fix the sex of parents, add parents that are missing from the data. Can be used with a dataframe or a vector of the different individuals informations. } @@ -66,16 +63,17 @@ different individuals informations. First look to add parents whose ids are given in momid/dadid. Second, fix sex of parents. Last look to add second parent for children for whom only one parent id is given. -If a famid vector is given the famid id will be added to the ids of all -individuals (id, dadid, momid) separated by an underscore befor proceeding. +If a \strong{famid} vector is given the family id will be added to the ids of all +individuals (\code{id}, \code{dadid}, \code{momid}) +separated by an underscore before proceeding. \subsection{Special case for dataframe}{ -Check for presence of both parents id in the \code{id} field. -If not both presence behaviour depend of \code{delete} parameter +Check for presence of both parents id in the \strong{id} field. +If not both presence behaviour depend of \strong{delete} parameter \itemize{ -\item If TRUE then use fix_parents function and merge back the other fields +\item If \code{TRUE} then use fix_parents function and merge back the other fields in the dataframe then set availability to O for non available parents. -\item If FALSE then delete the id of missing parents +\item If \code{FALSE} then delete the id of missing parents } } } @@ -97,8 +95,7 @@ test1newmom <- with(test1char, fix_parents(id, father, mother, sex, missid = NA_character_ )) -newped <- Pedigree(test1newmom) -as.data.frame(newped) +Pedigree(test1newmom) } \author{ diff --git a/man/generate_aff_inds.Rd b/man/generate_aff_inds.Rd index d61a6f6c..f8779a53 100644 --- a/man/generate_aff_inds.Rd +++ b/man/generate_aff_inds.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/generate_aff_inds.R \name{generate_aff_inds} \alias{generate_aff_inds} -\title{Process the information for affection} +\title{Process the affection informations} \usage{ generate_aff_inds( values, @@ -37,14 +37,31 @@ The different columns are: } } \description{ -Process the information for affection +Perform transformation uppon a vector given as the one +containing the affection status to obtain an \code{affected} binary state. } \details{ -Perform transformation uppon a column given as the one -containing affection status to get an \code{affected} column usable for -the rest of the script +This function helps to configure a binary state from a character or +numeric variable. +\subsection{If the variable is a \code{character} or a \code{factor}:}{ + +In this case the affected state will depend on the modality provided as +an affected status. All individuals with a value corresponding to one of the +element in the vector \strong{mods_aff} will be considered as affected. +} + +\subsection{If the variable is \code{numeric}:}{ + +In this case the affected state will be \code{TRUE} if the value of the individual +is above the \strong{threshold} if \strong{sup_thres_aff} is \code{TRUE} and \code{FALSE} +otherwise. +} } \examples{ generate_aff_inds(c(1, 2, 3, 4, 5), threshold = 3, sup_thres_aff = TRUE) generate_aff_inds(c("A", "B", "C", "A", "V", "B"), mods_aff = c("A", "B")) } +\author{ +Louis Le Nézet +} +\keyword{generate_scales} diff --git a/man/generate_border.Rd b/man/generate_border.Rd index da339e84..3c1fc4a9 100644 --- a/man/generate_border.Rd +++ b/man/generate_border.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/generate_colors.R \name{generate_border} \alias{generate_border} -\title{Process the colors based on availability} +\title{Process the border colors based on availability} \usage{ generate_border(values, colors_avail = c("green", "black")) } @@ -10,18 +10,21 @@ generate_border(values, colors_avail = c("green", "black")) \item{values}{The vector containing the values to process as available.} \item{colors_avail}{Set of 2 colors to use for the box's border of an -individual. The first color will be used for available individual (avail -== 1) and the second for the unavailable individual (avail == 0).} +individual. The first color will be used for available individual +(\code{avail == 1}) and the second for the unavailable individual +(\code{avail == 0}).} } \value{ -A dataframe containing the scale to use for the availability -status. +A list of three elements +\itemize{ +\item \code{mods} : The processed values column as a numeric factor +\item \code{avail} : A logical vector indicating if the individual is available +\item \code{sc_bord} : A dataframe containing the description of each modality of the +scale } -\description{ -Process the colors based on availability } -\details{ -Perform transformation uppon a column given as the one +\description{ +Perform transformation uppon a vector given as the one containing the availability status to compute the border color. The vector given will be transformed using the \code{\link[=vect_to_binary]{vect_to_binary()}} function. @@ -30,3 +33,4 @@ function. generate_border(c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA)) } +\keyword{generate_scales} diff --git a/man/generate_colors.Rd b/man/generate_colors.Rd index 24a6e80a..ad129515 100644 --- a/man/generate_colors.Rd +++ b/man/generate_colors.Rd @@ -1,17 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/generate_colors.R -\docType{methods} \name{generate_colors} \alias{generate_colors} \alias{generate_colors,character-method} -\alias{generate_colors,character} \alias{generate_colors,numeric-method} -\alias{generate_colors,numeric} -\alias{generate_colors,logical-method} -\alias{generate_colors,logical} \alias{generate_colors,Pedigree-method} -\alias{generate_colors,Pedigree} -\title{Process the colors based on affection and availability} +\title{Process the filling and border colors based on affection and availability} \usage{ generate_colors(obj, ...) @@ -19,10 +13,7 @@ generate_colors(obj, ...) obj, avail, mods_aff = NULL, - threshold = 0.5, - sup_thres_aff = TRUE, keep_full_scale = FALSE, - breaks = 3, colors_aff = c("yellow2", "red"), colors_unaff = c("white", "steelblue4"), colors_avail = c("green", "black") @@ -31,20 +22,6 @@ generate_colors(obj, ...) \S4method{generate_colors}{numeric}( obj, avail, - mods_aff = NULL, - threshold = 0.5, - sup_thres_aff = TRUE, - keep_full_scale = FALSE, - breaks = 3, - colors_aff = c("yellow2", "red"), - colors_unaff = c("white", "steelblue4"), - colors_avail = c("green", "black") -) - -\S4method{generate_colors}{logical}( - obj, - avail, - mods_aff = TRUE, threshold = 0.5, sup_thres_aff = TRUE, keep_full_scale = FALSE, @@ -72,9 +49,9 @@ generate_colors(obj, ...) } \arguments{ \item{obj}{A Pedigree object or a vector containing the affection status for -each individuals. The affection status can be numeric, logical or character.} +each individuals. The affection status can be numeric or a character.} -\item{...}{Other parameters to pass to the \code{generate_colors} function} +\item{...}{Other arguments to pass to the function \code{generate_colors}.} \item{avail}{A logical vector with the availability status of the individuals @@ -83,6 +60,22 @@ individuals \item{mods_aff}{Vector of modality to consider as affected in the case where the \code{values} is a factor.} +\item{keep_full_scale}{Boolean defining if the affection values need to +be set as a scale. If \code{values} is numeric the filling scale will be +calculated based on the values and the number of breaks given. +If \code{values} isn't numeric then each levels will get it's own color} + +\item{colors_aff}{Set of increasing colors to use for the filling of the +affected individuls.} + +\item{colors_unaff}{Set of increasing colors to use for the filling of the +unaffected individuls.} + +\item{colors_avail}{Set of 2 colors to use for the box's border of an +individual. The first color will be used for available individual +(\code{avail == 1}) and the second for the unavailable individual +(\code{avail == 0}).} + \item{threshold}{Numeric value separating the affected and healthy subject in the case where the \code{values} is numeric.} @@ -93,26 +86,14 @@ if the value of \code{values} is stricly above the \code{threshold}. If \code{FALSE}, the individuals will be considered affected if the value is stricly under the \code{threshold}.} -\item{keep_full_scale}{Boolean defining if the affection values need to -be set as a scale. If \code{values} is numeric the filling scale will be -calculated based on the values and the number of breaks given. -If \code{values} isn't numeric then each levels will get it's own color} - \item{breaks}{Number of breaks to use when using full scale with numeric values. The same number of breaks will be done for values from affected individuals and unaffected individuals.} -\item{colors_aff}{Set of increasing colors to use for the filling of the -affected individuls.} - -\item{colors_unaff}{Set of increasing colors to use for the filling of the -unaffected individuls.} - -\item{colors_avail}{Set of 2 colors to use for the box's border of an -individual. The first color will be used for available individual (avail -== 1) and the second for the unavailable individual (avail == 0).} - -\item{col_aff}{A string with the column name to use for the affection status.} +\item{col_aff}{A character vector with the name of the column to be used +for the affection status. +If \code{affected} is a data.frame, it will be overwritten by the column +names of the data.frame.} \item{add_to_scale}{Boolean defining if the scales need to be added to the existing scales or if they need to replace the existing scales.} @@ -125,32 +106,42 @@ already present.} \value{ \subsection{When used with a vector}{ -A list of three elements +A list of two elements \itemize{ -\item A vector containing the transformed filling modalities -\item A dataframe containing the description of each filling modalities -\item A dataframe containing the description of the border modalities +\item The list containing the filling colors processed and their description +\item The list containing the border colors processed and their description } } \subsection{When used with a Pedigree object}{ The Pedigree object with the \code{affected} and \code{avail} columns -processed accordingly. - -The Pedigree scales slots are updated +processed accordingly as well as the \code{scales} slot updated. } } \description{ -Process the colors based on affection and availability -} -\details{ Perform transformation uppon a dataframe given to compute the colors for the filling and the border of the individuals based on the affection and availability status. } +\details{ +The colors will be set using the \code{\link[=generate_fill]{generate_fill()}} and the +\code{\link[=generate_border]{generate_border()}} functions respectively for the filling and the border. +} \examples{ +generate_colors( + c("A", "B", "A", "B", NA, "A", "B", "A", "B", NA), + c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), + mods_aff = "A", +) +generate_colors( + c(10, 0, 5, 7, NA, 6, 2, 1, 3, NA), + c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), + threshold = 3, keep_full_scale = TRUE +) data("sampleped") ped <- Pedigree(sampleped) -generate_colors(ped, "affected", add_to_scale=FALSE)$scales +ped <- generate_colors(ped, "affected", add_to_scale=FALSE) +scales(ped) } +\keyword{generate_scales} diff --git a/man/generate_fill.Rd b/man/generate_fill.Rd index 49e2dce2..c72aff9f 100644 --- a/man/generate_fill.Rd +++ b/man/generate_fill.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/generate_colors.R \name{generate_fill} \alias{generate_fill} -\title{Process the colors based on affection} +\title{Process the filling colors based on affection} \usage{ generate_fill( values, @@ -39,21 +39,47 @@ affected individuls.} unaffected individuls.} } \value{ -A list of two elements +A list of three elements \itemize{ -\item The processed values column as a numeric factor -\item A dataframe containing the description of each modality of the scale +\item \code{mods} : The processed values column as a numeric factor +\item \code{affected} : A logical vector indicating if the individual is affected +\item \code{sc_fill} : A dataframe containing the description of each modality of the +scale } } \description{ -Process the colors based on affection -} -\details{ Perform transformation uppon a column given as the one containing affection status to compute the filling color. } +\details{ +The colors will be set using the +\code{\link[grDevices:colorRamp]{grDevices::colorRampPalette()}} function +with the colors given as parameters. + +The colors will be set as follow: +\itemize{ +\item If \strong{keep_full_scale} is \code{FALSE}: +Then the affected individuals will get the first color of the +\strong{colors_aff} vector and the unaffected individuals will get the +first color of the \strong{colors_unaff} vector. +\item If \strong{keep_full_scale} is \code{TRUE}: +\itemize{ +\item If \strong{values} isn't numeric: +Each levels of the affected \strong{values} vector will get it's own color from +the \strong{colors_aff} vector using the \code{\link[grDevices:colorRamp]{grDevices::colorRampPalette()}} and +the same will be done for the unaffected individuals using the +\strong{colors_unaff}. +\item If \strong{values} is numeric: +The mean of the affected individuals will be compared to the mean of the +unaffected individuals and the colors will be set up such as the color +gradient follow the direction of the affection. +} +} +} \examples{ aff <- generate_aff_inds(seq_len(5), threshold = 3, sup_thres_aff = TRUE) generate_fill(seq_len(5), aff$affected, aff$labels) generate_fill(seq_len(5), aff$affected, aff$labels, keep_full_scale = TRUE) + } +\keyword{generate_scales} diff --git a/man/is_informative.Rd b/man/is_informative.Rd index c0510c2a..af98dbe8 100644 --- a/man/is_informative.Rd +++ b/man/is_informative.Rd @@ -31,7 +31,7 @@ is_informative(obj, ...) \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{...}{Additional arguments passed to methods} +\item{...}{Other arguments to pass to the function \code{generate_colors}.} \item{avail}{A logical vector with the availability status of the individuals @@ -56,7 +56,10 @@ individuals All the id, dadid and momid corresponding to those values will be set to \code{NA_character_}.} -\item{col_aff}{A string with the column name to use for the affection status.} +\item{col_aff}{A character vector with the name of the column to be used +for the affection status. +If \code{affected} is a data.frame, it will be overwritten by the column +names of the data.frame.} \item{reset}{If \code{TRUE}, the \code{id_inf} column is reset} } diff --git a/man/min_dist_inf.Rd b/man/min_dist_inf.Rd index 33014023..272d662f 100644 --- a/man/min_dist_inf.Rd +++ b/man/min_dist_inf.Rd @@ -67,7 +67,10 @@ individuals \item A boolean }} -\item{col_aff}{A string with the column name to use for the affection status.} +\item{col_aff}{A character vector with the name of the column to be used +for the affection status. +If \code{affected} is a data.frame, it will be overwritten by the column +names of the data.frame.} \item{missid}{A character vector with the missing values identifiers. All the id, dadid and momid corresponding to those values will be set diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index 291843a3..aeaea8dd 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -32,7 +32,7 @@ useful_inds(obj, ...) \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{...}{Additional arguments passed to methods} +\item{...}{Other arguments to pass to the function \code{generate_colors}.} \item{avail}{A logical vector with the availability status of the individuals From 2bc5cdb6cf0fb7473d60f27b57789fda26d73012 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 7 Nov 2023 16:10:30 +0100 Subject: [PATCH 068/111] Update functions and documentation --- NAMESPACE | 5 -- R/bit_size.R | 2 +- R/is_informative.R | 87 ++++++++++++++++++++++------------- R/kindepth.R | 55 ++++++++++++---------- R/kinship.R | 65 ++++++++++++++------------ R/make_famid.R | 63 +++++++++++++++++-------- R/min_dist_inf.R | 68 +++++++++++++-------------- devel/documentation/todo.md | 12 ++--- man/chaseup.Rd | 27 +++++++++++ man/is_informative.Rd | 54 +++++++++------------- man/kindepth.Rd | 40 +++++++++------- man/kinship.Rd | 52 +++++++++++++-------- man/make_famid.Rd | 22 ++++++--- man/min_dist_inf.Rd | 71 ++++++++++++---------------- man/num_child.Rd | 10 +++- man/upd_famid_id.Rd | 48 ++++++++++++++++++- man/useful_inds.Rd | 8 +++- tests/testthat/test-bitSize.R | 2 +- 18 files changed, 418 insertions(+), 273 deletions(-) create mode 100644 man/chaseup.Rd diff --git a/NAMESPACE b/NAMESPACE index 2848bead..570331c0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -79,13 +79,8 @@ exportMethods(Scales) exportMethods(as.data.frame) exportMethods(as.list) exportMethods(auto_hint) -exportMethods(is_informative) -exportMethods(kindepth) -exportMethods(kinship) exportMethods(length) -exportMethods(make_famid) exportMethods(mcols) -exportMethods(min_dist_inf) exportMethods(num_child) exportMethods(plot) exportMethods(show) diff --git a/R/bit_size.R b/R/bit_size.R index 81534895..bd1b1d44 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -59,7 +59,7 @@ setMethod("bit_size", #' @rdname bit_size setMethod("bit_size", "Pedigree", function(obj) { - bit_size(ped(obj), NA_character_) + bit_size(ped(obj)) } ) diff --git a/R/is_informative.R b/R/is_informative.R index cb2602a7..7b0a20d3 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -1,15 +1,17 @@ -#' @title Is informative +#' Find informative individuals #' #' @description Select the ids of the informative individuals. #' -#' @details Depending on the informative parameter, the function will extract -#' the ids of the informative individuals. In the case of a numeric vector, -#' the function will return the same vector. In the case of a boolean, the -#' function will return the ids of the individuals if TRUE, NA otherwise. +#' @details Depending on the **informative** parameter, the function will +#' extract the ids of the informative individuals. In the case of a +#' numeric vector, the function will return the same vector. +#' In the case of a boolean, the function will return the ids of the +#' individuals if TRUE, NA otherwise. #' In the case of a string, the function will return the ids of the #' corresponding informative individuals based on the avail and affected #' columns. #' +#' @param ... Additional arguments #' @inheritParams Ped #' @inheritParams Pedigree #' @param informative Informative individuals selection can take 5 values: @@ -25,7 +27,7 @@ #' @return #' #' ## When obj is a vector -#' A vector of individuals informative identifiers +#' A vector of individuals informative identifiers. #' #' ## When obj is a Pedigree #' A list containing the Pedigree object and the vector of individuals @@ -33,29 +35,48 @@ #' The Pedigree object will have a new column named 'id_inf' containing 1 for #' informative individuals and 0 otherwise. #' -#' @examples -#' data("sampleped") -#' ped <- Pedigree(sampleped) -#' is_informative(ped, col_aff = "affection_mods") -#' #' @export #' @docType methods setGeneric("is_informative", signature = "obj", function(obj, ...) standardGeneric("is_informative") ) -#' @export #' @rdname is_informative -#' @aliases is_informative,character -#' @docType methods -setMethod("is_informative", "character", function( - obj, avail, affected, informative = "AvAf", missid = NA_character_ +#' @examples +#' is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) +#' is_informative(c("A", "B", "C", "D", "E"), informative = c(1, 2)) +#' is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) +#' is_informative(c("A", "B", "C", "D", "E"), avail = c(1, 0, 0, 1, 1), +#' affected = c(0, 1, 0, 1, 1), informative = "AvAf") +#' is_informative(c("A", "B", "C", "D", "E"), avail = c(1, 0, 0, 1, 1), +#' affected = c(0, 1, 0, 1, 1), informative = "AvOrAf") +#' is_informative(c("A", "B", "C", "D", "E"), +#' informative = c(TRUE, FALSE, TRUE, FALSE, TRUE)) +setMethod("is_informative", "character_OR_integer", function( + obj, avail, affected, informative = "AvAf" ) { id <- obj # Selection of all informative individuals depending of the informative # parameter - if (is.numeric(informative)) { - id_inf <- id[match(id, informative, nomatch = 0) != 0] + if (length(informative) > 1) { + if (is.character(informative)) { + id_inf <- id[match(id, informative, nomatch = 0) != 0] + } else if (is.numeric(informative)) { + id_inf <- id[informative] + } else if (is.logical(informative)) { + if (length(informative) != length(id)) { + stop("The length of a logical informative parameter must be", + "equal to the length of the id vector" + ) + } + id_inf <- id[informative] + } else { + stop("The informative parameter must be a character, ", + "logical or numeric" + ) + } + } else if (is.numeric(informative)) { + id_inf <- id[informative] } else if (is.logical(informative)) { id_inf <- ifelse(informative, id, NA) id_inf <- id_inf[!is.na(id_inf)] @@ -81,21 +102,30 @@ setMethod("is_informative", "character", function( unique(id_inf) }) -#' @export #' @rdname is_informative -#' @aliases is_informative,Pedigree -#' @docType methods -#' @param reset If `TRUE`, the `id_inf` column is reset +#' @param reset If `TRUE`, the `isinf` slot is reset +#' @examples +#' data("sampleped") +#' ped <- Pedigree(sampleped) +#' ped <- is_informative(ped, col_aff = "affection_mods") +#' isinf(ped(ped)) setMethod("is_informative", "Pedigree", function( - obj, col_aff = NULL, informative = "AvAf", - missid = NA_character_, reset = FALSE + obj, col_aff = NULL, informative = "AvAf", reset = FALSE ) { + if (!reset & any(!is.na(isinf(ped(obj))))) { + warning( + "The isinf slot already has values in the Ped object", + " and reset is set to FALSE" + ) + return(obj) + } affected(ped(obj)) <- NA aff_scl <- fill(obj) ped_df <- as.data.frame(ped(obj)) if (is.null(col_aff)) { stop("The col_aff argument is required") } + # TODO use the affected columns if (col_aff %in% aff_scl$column_mods) { aff <- aff_scl$mods[aff_scl$affected == TRUE & aff_scl$column_mods == col_aff @@ -112,16 +142,9 @@ setMethod("is_informative", "Pedigree", function( cols_needed <- c("id", "avail", "affected") check_columns(ped_df, cols_needed, "", "", others_cols = TRUE) id_inf <- is_informative(ped_df$id, ped_df$avail, ped_df$affected, - informative, missid + informative = informative ) - if (!reset & any(!is.na(isinf(ped(obj))))) { - stop( - "The isinf slot already has values in the Ped object", - " and reset is set to FALSE" - ) - } - isinf(ped(obj)) <- vect_to_binary( ifelse(ped_df$id %in% id_inf, 1, 0), logical = TRUE ) diff --git a/R/kindepth.R b/R/kindepth.R index 08fbff14..1a45bad3 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -1,3 +1,13 @@ +#' Chase up the ancestors of a subject +#' +#' @param x a vector of subject ids +#' @param midx a vector of mother ids +#' @param didx a vector of father ids +#' @return a vector of all ancestors subjects connected to x +#' @keywords internal, kindepth +#' @examples +#' chaseup(1, c(3,0,0), c(2,0,0)) +#' chaseup(1, c(3,4,0,0,0), c(2,5,0,0,0)) chaseup <- function(x, midx, didx) { new <- c(midx[x], didx[x]) # mother and father new <- new[new > 0] @@ -9,45 +19,45 @@ chaseup <- function(x, midx, didx) { x } -#' Compute the depth of each subject in a Pedigree +#' Individual's depth in a pedigree #' #' @description #' Computes the depth of each subject in the Pedigree. #' #' @details -#' Mark each person as to their depth in a Pedigree; 0 for a founder, otherwise +#' Mark each person as to their depth in a Pedigree; `0` for a founder, +#' otherwise : #' -#' \eqn{depth = 1 + \max(fatherDepth, motherDepth)} +#' \deqn{depth = 1 + \max(fatherDepth, motherDepth)} #' -#' In the case of an inbred Pedigree a perfect alignment obeying -#' `extra=TRUE` may not exist. +#' In the case of an inbred Pedigree a perfect alignment may not exist. #' -#' @inheritParams kinship -#' @param align_parents If `align_parents=T`, go one step further and try to -#' make both parents of each child have the same depth. +#' @param ... Additional arguments +#' @inheritParams Ped +#' @param align_parents If `align_parents = TRUE`, go one step further +#' and try to make both parents of each child have the same depth. #' (This is not always possible). #' It helps the drawing program by lining up pedigrees that 'join in the middle' #' via a marriage. #' -#' @return an integer vector containing the depth for each subject +#' @return An integer vector containing the depth for each subject #' #' @author Terry Therneau #' @seealso [align()] #' @include AllClass.R -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -#' kindepth(ped1) #' @export setGeneric("kindepth", signature = "obj", function(obj, ...) standardGeneric("kindepth") ) -#' @export #' @rdname kindepth -#' @aliases kindepth,character -#' @docType methods -setMethod("kindepth", "character", function(obj, dadid, momid, +#' @examples +#' kindepth( +#' c("A", "B", "C", "D", "E"), +#' c("C", "D", "0", "0", "0"), +#' c("E", "E", "0", "0", "0") +#' ) +setMethod("kindepth", "character_OR_integer", function(obj, dadid, momid, align_parents = FALSE ) { id <- obj @@ -73,7 +83,6 @@ setMethod("kindepth", "character", function(obj, dadid, momid, for (i in seq_len(n)) { child <- match(midx, parents, nomatch = 0) + match(didx, parents, nomatch = 0) # Index of parent's childs - ## version 1.8.5 did not have this check with child_old. ## Keeping it here because it was not the issue being fixed in 9/2023. if (all(child == child_old)) { @@ -227,20 +236,18 @@ setMethod("kindepth", "character", function(obj, dadid, momid, } ) -#' @export #' @rdname kindepth -#' @aliases kindepth,Pedigree -#' @docType methods +#' @examples +#' data(sampleped) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) +#' kindepth(ped1) setMethod("kindepth", "Pedigree", function(obj, align_parents = FALSE) { kindepth(ped(obj), align_parents) } ) -#' @export #' @rdname kindepth -#' @aliases kindepth,Ped -#' @docType methods setMethod("kindepth", "Ped", function(obj, align_parents = FALSE) { kindepth(id(obj), dadid(obj), momid(obj), align_parents) diff --git a/R/kinship.R b/R/kinship.R index 022b0d64..563282cb 100644 --- a/R/kinship.R +++ b/R/kinship.R @@ -2,21 +2,21 @@ #' @importFrom Matrix forceSymmetric bdiag NULL -#' Compute a kinship matrix +#' Kinship matrix #' #' @description -#' Compute the kinship matrix for a set of related autosomal subjects. The -#' function is generic, and can accept a Pedigree, vector as +#' Compute the kinship matrix for a set of related autosomal subjects. +#' The function is generic, and can accept a Pedigree, a Ped or a vector as #' the first argument. #' #' @details -#' The function will usually be called with a Pedigree the -#' third form is provided for backwards compatibility with an earlier release -#' of the library that was less capable. The first argument is named `id` -#' for the same reason. Note that when using the third form any information on +#' The function will usually be called with a Pedigree. +#' The call with a Ped or a vector is provided for backwards compatibility +#' with an earlier release of the library that was less capable. +#' Note that when using with a Ped or a vector, any information on #' twins is not available to the function. #' -#' When called with a pedigree, the routine +#' When called with a Pedigree, the routine #' will create a block-diagonal-symmetric sparse matrix object of class #' `dsCMatrix`. Since the `[i, j]` value of the result is 0 for any two #' unrelated individuals i and j and a `Matrix` utilizes sparse @@ -37,46 +37,48 @@ NULL #' The computation is based on a recursive algorithm described in Lange, which #' assumes that the founder alleles are all independent. #' -#' @param obj A pedigree object or a vector of subject identifiers. +#' @param obj A Pedigree or Ped object or a vector of subject identifiers. #' @param chrtype chromosome type. The currently supported types are #' 'autosome' and 'X' or 'x'. -#' @param ... Additional arguments passed to methods -#' @inheritParams sex_to_factor -#' @inheritParams is_parent +#' @param ... Additional arguments +#' @inheritParams Ped #' #' @return #' ## When obj is a vector #' A matrix of kinship coefficients. -#' ## When obj is a pedigree +#' ## When obj is a Pedigree #' A matrix of kinship coefficients ordered by families present -#' in the pedigree. +#' in the Pedigree object. #' -#' @examples -#' data(sampleped) -#' ped <- Pedigree(sampleped) -#' kinship(ped) -#' -#' @section References: K Lange, Mathematical and Statistical Methods for +#' @section References: +#' K Lange, Mathematical and Statistical Methods for #' Genetic Analysis, Springer-Verlag, New York, 1997. #' @seealso [make_famid()], [kindepth()] #' @include AllClass.R #' @include utils.R #' @export -#' @docType methods setGeneric("kinship", signature = "obj", function(obj, ...) standardGeneric("kinship") ) +#' @rdname kinship setMethod("kinship", "Ped", - function(obj, ...){ - kinship(id(obj), dadid(obj), momid(obj), sex(obj), ...) + function(obj, chrtype = "autosome"){ + kinship( + id(obj), dadid(obj), momid(obj), + sex(obj), chrtype = chrtype + ) } ) -#' @export #' @rdname kinship -#' @aliases kinship,character -#' @docType methods +#' @examples +#' kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), +#' c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1)) +#' kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), +#' c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1), +#' chrtype = "x" +#' ) setMethod("kinship", "character", function(obj, dadid, momid, sex, chrtype = "autosome") { id <- obj @@ -139,10 +141,11 @@ setMethod("kinship", "character", ) #' @include kindepth.R -#' @export #' @rdname kinship -#' @aliases kinship,Pedigree -#' @docType methods +#' @examples +#' data(sampleped) +#' ped <- Pedigree(sampleped) +#' kinship(ped) setMethod("kinship", "Pedigree", function(obj, chrtype = "autosome") { famlist <- unique(famid(obj)) @@ -174,7 +177,9 @@ setMethod("kinship", "Pedigree", ) # Are there any MZ twins to worry about? have_mz <- FALSE - if (length(rel(tped)) > 0 && any(code(rel(tped)) == "MZ twin")) { + if (length(rel(tped)) > 0 && + any(code(rel(tped)) == "MZ twin") + ) { have_mz <- TRUE ## Doc: MakeMZIndex temp <- which(code(rel(tped)) == "MZ twin") diff --git a/R/make_famid.R b/R/make_famid.R index 9ba3f632..677fd88e 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -1,9 +1,7 @@ -# $Id: make_famid.s,v 1.7 2003/01/07 15:47:08 therneau Exp - -#' Get family id +#' Update family id #' #' @description -#' Construct a family id from Pedigree information +#' Construct a family identifier from pedigree information #' #' @details #' Create a vector of length n, giving the family 'tree' number of each @@ -21,19 +19,18 @@ #' An updated Pedigree object with the family id added #' #' @seealso [kinship()] -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[,-1]) -#' make_famid(ped1) #' @export setGeneric("make_famid", signature = "obj", function(obj, ...) standardGeneric("make_famid") ) -#' @export #' @rdname make_famid -#' @aliases make_famid,character -#' @docType methods +#' @examples +#' make_famid( +#' c("A", "B", "C", "D", "E", "F"), +#' c("C", "D", "0", "0", "0", "0"), +#' c("E", "E", "0", "0", "0", "0") +#' ) setMethod("make_famid", "character", function(obj, dadid, momid) { id <- obj @@ -93,11 +90,11 @@ setMethod("make_famid", "character", } ) -#' @export #' @rdname make_famid -#' @aliases make_famid,Pedigree -#' @docType methods -#' @include AllClass.R +#' @examples +#' data(sampleped) +#' ped1 <- Pedigree(sampleped[,-1]) +#' make_famid(ped1) setMethod("make_famid", "Pedigree", function(obj) { famid <- make_famid( @@ -123,23 +120,35 @@ setMethod("make_famid", "Pedigree", #' Update family prefix in individuals id #' -#' @param obj A character vector of individual ids +#' Update the family prefix in the individuals identifiers. +#' Individuals identifiers are constructed as follow **famid**_**id**. +#' Therefore to update their family prefix the ids are split by the +#' first underscore and the first part is overwritten by **famid**. +#' +#' If famid is *missing*, then the `famid()` function will be called on the +#' object. +#' +#' @param obj Ped or Pedigree object or a character vector of individual ids #' @inheritParams Ped #' #' @return A character vector of individual ids with family prefix +#' updated #' #' @export setGeneric("upd_famid_id", function(obj, famid, ...) standardGeneric("upd_famid_id") ) +#' @rdname upd_famid_id +#' @examples +#' upd_famid_id(c("1", "2", "B_3"), c("A", "B", "A")) setMethod("upd_famid_id", "character", function(obj, famid, missid = NA_character_) { - id <- obj[!obj %in% missid] - famid <- famid[!obj %in% missid] - if (length(id) != length(famid)) { + if (length(obj) != length(famid)) { stop("id and famid must have the same length") } + id <- obj[!obj %in% missid] + famid <- famid[!obj %in% missid] if (any(is.na(famid))) { stop("famid cannot contain NA") } @@ -155,6 +164,7 @@ setMethod("upd_famid_id", "character", } ) +#' @rdname upd_famid_id setMethod("upd_famid_id", signature(obj = "Ped", famid = "character_OR_integer"), function(obj, famid) { @@ -166,6 +176,7 @@ setMethod("upd_famid_id", } ) +#' @rdname upd_famid_id setMethod("upd_famid_id", signature(obj = "Ped", famid = "missing"), function(obj) { @@ -177,6 +188,7 @@ setMethod("upd_famid_id", } ) +#' @rdname upd_famid_id setMethod("upd_famid_id", signature(obj = "Rel", famid = "character_OR_integer"), function(obj, famid) { @@ -187,6 +199,7 @@ setMethod("upd_famid_id", } ) +#' @rdname upd_famid_id setMethod("upd_famid_id", signature(obj = "Rel", famid = "missing"), function(obj) { @@ -197,6 +210,13 @@ setMethod("upd_famid_id", } ) +#' @rdname upd_famid_id +#' @examples +#' data(sampleped) +#' ped1 <- Pedigree(sampleped[,-1]) +#' id(ped(ped1)) +#' new_fam <- make_famid(id(ped(ped1)), dadid(ped(ped1)), momid(ped(ped1))) +#' id(ped(upd_famid_id(ped1, new_fam))) setMethod("upd_famid_id", signature(obj = "Pedigree", famid = "character_OR_integer"), function(obj, famid) { @@ -215,6 +235,11 @@ setMethod("upd_famid_id", } ) +#' @rdname upd_famid_id +#' @examples +#' data(sampleped) +#' ped1 <- Pedigree(sampleped[,-1]) +#' make_famid(ped1) setMethod("upd_famid_id", signature(obj = "Pedigree", famid = "missing"), function(obj) { diff --git a/R/min_dist_inf.R b/R/min_dist_inf.R index 9f5481ef..1cc4236b 100644 --- a/R/min_dist_inf.R +++ b/R/min_dist_inf.R @@ -1,7 +1,7 @@ #' @importFrom dplyr %>% NULL -#' @title Minimum distance to the informative individuals +#' Minimum distance to the informative individuals #' #' @description Compute the minimum distance between the informative #' individuals and all the others. @@ -18,11 +18,10 @@ NULL #' by 2, the minimum distance is increased by 1. #' #' -#' -#' @inheritParams sex_to_factor -#' @inheritParams kinship +#' @param ... Additional arguments +#' @param id_inf An identifiers vector of informative individuals. +#' @inheritParams Ped #' @inheritParams is_informative -#' @inheritParams is_parent #' #' @return #' ## When obj is a vector @@ -31,13 +30,9 @@ NULL #' `obj` vector. #' #' ## When obj is a Pedigree -#' The Pedigree object with a new column named 'kin' containing the kinship -#' degree. -#' -#' @examples -#' data(sampleped) -#' ped <- Pedigree(sampleped) -#' min_dist_inf(ped, col_aff = "affection_mods")$ped +#' The Pedigree object with a new slot named 'kin' containing the minimum +#' distance between each individuals and the informative individuals. +#' The `isinf` slot is also updated with the informative individuals. #' #' @seealso [kinship()] #' @include is_informative.R @@ -48,17 +43,23 @@ setGeneric("min_dist_inf", signature = "obj", function(obj, ...) standardGeneric("min_dist_inf") ) -#' @export #' @rdname min_dist_inf -#' @aliases min_dist_inf,character -#' @docType methods +#' @examples +#' min_dist_inf( +#' c("A", "B", "C", "D", "E"), +#' c("C", "D", "0", "0", "0"), +#' c("E", "E", "0", "0", "0"), +#' sex = c(1, 2, 1, 2, 1), +#' avail = c(1, 0, 0, 1, 1), +#' affected = c(0, 1, 0, 1, 1), +#' informative = "AvAf" +#' ) setMethod("min_dist_inf", "character", function(obj, - dadid, momid, sex, avail, affected, informative = "AvAf" + dadid, momid, sex, id_inf ) { id <- obj # Selection of all informative individuals depending of the informative # parameter - id_inf <- is_informative(id, avail, affected, informative) if (any(is.na(id_inf)) || length(id_inf) == 0) { stop("No informative individuals detected") } @@ -73,21 +74,22 @@ setMethod("min_dist_inf", "character", function(obj, kin }) -#' @export #' @rdname min_dist_inf -#' @aliases min_dist_inf,Pedigree -#' @docType methods #' @param reset If TRUE, the `kin` and if `isinf` columns is reset +#' @examples +#' data(sampleped) +#' ped <- Pedigree(sampleped) +#' kin(ped(min_dist_inf(ped, col_aff = "affection_mods"))) setMethod("min_dist_inf", "Pedigree", function(obj, - col_aff = NULL, informative = "AvAf", - missid = NA_character_, reset = FALSE, ... + col_aff = NULL, informative = "AvAf", reset = FALSE, ... ) { obj_aff <- is_informative(obj, col_aff, informative = informative, - missid, reset + reset = reset ) new_ped <- min_dist_inf( - ped(obj_aff), col_aff, informative, missid, reset, ... + ped(obj_aff), + informative = informative, reset = reset ) ped(obj_aff) <- new_ped @@ -95,21 +97,12 @@ setMethod("min_dist_inf", "Pedigree", function(obj, obj_aff }) -#' @export #' @rdname min_dist_inf -#' @aliases min_dist_inf,Ped -#' @docType methods #' @param reset If TRUE, the `kin` and if `isinf` columns is reset -setMethod("min_dist_inf", "Ped", function(obj, - col_aff = NULL, informative = "AvAf", - missid = NA_character_, reset = FALSE, ... +setMethod("min_dist_inf", "Ped", function( + obj, informative = "AvAf", reset = FALSE ) { - kin <- min_dist_inf( - id(obj), dadid(obj), momid(obj), sex(obj), - avail(obj), affected(obj), informative - ) - if (!reset & any(!is.na(kin(obj)))) { stop( "The kin slot already has values in the Ped object", @@ -117,6 +110,11 @@ setMethod("min_dist_inf", "Ped", function(obj, ) } + id_inf <- id(obj)[isinf(obj)] + kin <- min_dist_inf( + id(obj), dadid(obj), momid(obj), sex(obj), id_inf + ) + kin(obj) <- kin validObject(obj) obj diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index b8e6b405..6350d81a 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -25,12 +25,12 @@ - [x] fix_parents.R - [x] generate_aff_inds.R - [x] generate_colors.R -- [ ] ibd_matrix.R -- [ ] is_informative.R -- [ ] kindepth.R -- [ ] kinship.R -- [ ] make_famid.R -- [ ] min_dist_inf.R +- [x] ibd_matrix.R +- [x] is_informative.R +- [x] kindepth.R +- [x] kinship.R +- [x] make_famid.R +- [x] min_dist_inf.R - [ ] norm_data.R - [ ] num_child.R - [ ] ped_to_legdf.R diff --git a/man/chaseup.Rd b/man/chaseup.Rd new file mode 100644 index 00000000..e329d93d --- /dev/null +++ b/man/chaseup.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/kindepth.R +\name{chaseup} +\alias{chaseup} +\title{Chase up the ancestors of a subject} +\usage{ +chaseup(x, midx, didx) +} +\arguments{ +\item{x}{a vector of subject ids} + +\item{midx}{a vector of mother ids} + +\item{didx}{a vector of father ids} +} +\value{ +a vector of all ancestors subjects connected to x +} +\description{ +Chase up the ancestors of a subject +} +\examples{ +chaseup(1, c(3,0,0), c(2,0,0)) +chaseup(1, c(3,4,0,0,0), c(2,5,0,0,0)) +} +\keyword{internal,} +\keyword{kindepth} diff --git a/man/is_informative.Rd b/man/is_informative.Rd index af98dbe8..1b912cbf 100644 --- a/man/is_informative.Rd +++ b/man/is_informative.Rd @@ -3,35 +3,21 @@ \docType{methods} \name{is_informative} \alias{is_informative} -\alias{is_informative,character-method} -\alias{is_informative,character} +\alias{is_informative,character_OR_integer-method} \alias{is_informative,Pedigree-method} -\alias{is_informative,Pedigree} -\title{Is informative} +\title{Find informative individuals} \usage{ is_informative(obj, ...) -\S4method{is_informative}{character}( - obj, - avail, - affected, - informative = "AvAf", - missid = NA_character_ -) +\S4method{is_informative}{character_OR_integer}(obj, avail, affected, informative = "AvAf") -\S4method{is_informative}{Pedigree}( - obj, - col_aff = NULL, - informative = "AvAf", - missid = NA_character_, - reset = FALSE -) +\S4method{is_informative}{Pedigree}(obj, col_aff = NULL, informative = "AvAf", reset = FALSE) } \arguments{ \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{...}{Other arguments to pass to the function \code{generate_colors}.} +\item{...}{Additional arguments} \item{avail}{A logical vector with the availability status of the individuals @@ -52,21 +38,17 @@ individuals \item A boolean }} -\item{missid}{A character vector with the missing values identifiers. -All the id, dadid and momid corresponding to those values will be set -to \code{NA_character_}.} - \item{col_aff}{A character vector with the name of the column to be used for the affection status. If \code{affected} is a data.frame, it will be overwritten by the column names of the data.frame.} -\item{reset}{If \code{TRUE}, the \code{id_inf} column is reset} +\item{reset}{If \code{TRUE}, the \code{isinf} slot is reset} } \value{ \subsection{When obj is a vector}{ -A vector of individuals informative identifiers +A vector of individuals informative identifiers. } \subsection{When obj is a Pedigree}{ @@ -81,17 +63,27 @@ informative individuals and 0 otherwise. Select the ids of the informative individuals. } \details{ -Depending on the informative parameter, the function will extract -the ids of the informative individuals. In the case of a numeric vector, -the function will return the same vector. In the case of a boolean, the -function will return the ids of the individuals if TRUE, NA otherwise. +Depending on the \strong{informative} parameter, the function will +extract the ids of the informative individuals. In the case of a +numeric vector, the function will return the same vector. +In the case of a boolean, the function will return the ids of the +individuals if TRUE, NA otherwise. In the case of a string, the function will return the ids of the corresponding informative individuals based on the avail and affected columns. } \examples{ +is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) +is_informative(c("A", "B", "C", "D", "E"), informative = c(1, 2)) +is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) +is_informative(c("A", "B", "C", "D", "E"), avail = c(1, 0, 0, 1, 1), + affected = c(0, 1, 0, 1, 1), informative = "AvAf") +is_informative(c("A", "B", "C", "D", "E"), avail = c(1, 0, 0, 1, 1), + affected = c(0, 1, 0, 1, 1), informative = "AvOrAf") +is_informative(c("A", "B", "C", "D", "E"), + informative = c(TRUE, FALSE, TRUE, FALSE, TRUE)) data("sampleped") ped <- Pedigree(sampleped) -is_informative(ped, col_aff = "affection_mods") - +ped <- is_informative(ped, col_aff = "affection_mods") +isinf(ped(ped)) } diff --git a/man/kindepth.Rd b/man/kindepth.Rd index 1408335c..e65a8cba 100755 --- a/man/kindepth.Rd +++ b/man/kindepth.Rd @@ -1,50 +1,58 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/kindepth.R -\docType{methods} \name{kindepth} \alias{kindepth} -\alias{kindepth,character-method} -\alias{kindepth,character} +\alias{kindepth,character_OR_integer-method} \alias{kindepth,Pedigree-method} -\alias{kindepth,Pedigree} \alias{kindepth,Ped-method} -\alias{kindepth,Ped} -\title{Compute the depth of each subject in a Pedigree} +\title{Individual's depth in a pedigree} \usage{ kindepth(obj, ...) -\S4method{kindepth}{character}(obj, dadid, momid, align_parents = FALSE) +\S4method{kindepth}{character_OR_integer}(obj, dadid, momid, align_parents = FALSE) \S4method{kindepth}{Pedigree}(obj, align_parents = FALSE) \S4method{kindepth}{Ped}(obj, align_parents = FALSE) } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} -\item{...}{Additional arguments passed to methods} +\item{...}{Additional arguments} -\item{align_parents}{If \code{align_parents=T}, go one step further and try to -make both parents of each child have the same depth. +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{align_parents}{If \code{align_parents = TRUE}, go one step further +and try to make both parents of each child have the same depth. (This is not always possible). It helps the drawing program by lining up pedigrees that 'join in the middle' via a marriage.} } \value{ -an integer vector containing the depth for each subject +An integer vector containing the depth for each subject } \description{ Computes the depth of each subject in the Pedigree. } \details{ -Mark each person as to their depth in a Pedigree; 0 for a founder, otherwise +Mark each person as to their depth in a Pedigree; \code{0} for a founder, +otherwise : -\eqn{depth = 1 + \max(fatherDepth, motherDepth)} +\deqn{depth = 1 + \max(fatherDepth, motherDepth)} -In the case of an inbred Pedigree a perfect alignment obeying -\code{extra=TRUE} may not exist. +In the case of an inbred Pedigree a perfect alignment may not exist. } \examples{ +kindepth( + c("A", "B", "C", "D", "E"), + c("C", "D", "0", "0", "0"), + c("E", "E", "0", "0", "0") +) data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) kindepth(ped1) diff --git a/man/kinship.Rd b/man/kinship.Rd index ae90ee5a..9a1d7a77 100755 --- a/man/kinship.Rd +++ b/man/kinship.Rd @@ -1,24 +1,33 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/kinship.R -\docType{methods} \name{kinship} \alias{kinship} +\alias{kinship,Ped-method} \alias{kinship,character-method} -\alias{kinship,character} \alias{kinship,Pedigree-method} -\alias{kinship,Pedigree} -\title{Compute a kinship matrix} +\title{Kinship matrix} \usage{ kinship(obj, ...) +\S4method{kinship}{Ped}(obj, chrtype = "autosome") + \S4method{kinship}{character}(obj, dadid, momid, sex, chrtype = "autosome") \S4method{kinship}{Pedigree}(obj, chrtype = "autosome") } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A Pedigree or Ped object or a vector of subject identifiers.} + +\item{...}{Additional arguments} + +\item{chrtype}{chromosome type. The currently supported types are +'autosome' and 'X' or 'x'.} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} -\item{...}{Additional arguments passed to methods} +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} \item{sex}{A character, factor or numeric vector corresponding to the gender of the individuals. This will be transformed to an ordered factor @@ -29,9 +38,6 @@ The following values are recognized: "unknown", "terminated" \item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" }} - -\item{chrtype}{chromosome type. The currently supported types are -'autosome' and 'X' or 'x'.} } \value{ \subsection{When obj is a vector}{ @@ -39,25 +45,25 @@ The following values are recognized: A matrix of kinship coefficients. } -\subsection{When obj is a pedigree}{ +\subsection{When obj is a Pedigree}{ A matrix of kinship coefficients ordered by families present -in the pedigree. +in the Pedigree object. } } \description{ -Compute the kinship matrix for a set of related autosomal subjects. The -function is generic, and can accept a Pedigree, vector as +Compute the kinship matrix for a set of related autosomal subjects. +The function is generic, and can accept a Pedigree, a Ped or a vector as the first argument. } \details{ -The function will usually be called with a Pedigree the -third form is provided for backwards compatibility with an earlier release -of the library that was less capable. The first argument is named \code{id} -for the same reason. Note that when using the third form any information on +The function will usually be called with a Pedigree. +The call with a Ped or a vector is provided for backwards compatibility +with an earlier release of the library that was less capable. +Note that when using with a Ped or a vector, any information on twins is not available to the function. -When called with a pedigree, the routine +When called with a Pedigree, the routine will create a block-diagonal-symmetric sparse matrix object of class \code{dsCMatrix}. Since the \verb{[i, j]} value of the result is 0 for any two unrelated individuals i and j and a \code{Matrix} utilizes sparse @@ -79,15 +85,21 @@ The computation is based on a recursive algorithm described in Lange, which assumes that the founder alleles are all independent. } \section{References}{ - K Lange, Mathematical and Statistical Methods for + +K Lange, Mathematical and Statistical Methods for Genetic Analysis, Springer-Verlag, New York, 1997. } \examples{ +kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), + c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1)) +kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), + c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1), + chrtype = "x" +) data(sampleped) ped <- Pedigree(sampleped) kinship(ped) - } \seealso{ \code{\link[=make_famid]{make_famid()}}, \code{\link[=kindepth]{kindepth()}} diff --git a/man/make_famid.Rd b/man/make_famid.Rd index a8909a8a..f39dab04 100644 --- a/man/make_famid.Rd +++ b/man/make_famid.Rd @@ -1,13 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/make_famid.R -\docType{methods} \name{make_famid} \alias{make_famid} \alias{make_famid,character-method} -\alias{make_famid,character} \alias{make_famid,Pedigree-method} -\alias{make_famid,Pedigree} -\title{Get family id} +\title{Update family id} \usage{ make_famid(obj, ...) @@ -16,9 +13,15 @@ make_famid(obj, ...) \S4method{make_famid}{Pedigree}(obj) } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A Pedigree or Ped object or a vector of subject identifiers.} -\item{...}{Additional arguments passed to methods} +\item{...}{Additional arguments} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} } \value{ \subsection{When used with a character vector}{ @@ -32,7 +35,7 @@ An updated Pedigree object with the family id added } } \description{ -Construct a family id from Pedigree information +Construct a family identifier from pedigree information } \details{ Create a vector of length n, giving the family 'tree' number of each @@ -41,6 +44,11 @@ tree 1, otherwise the tree numbers represent the disconnected subfamilies. Singleton subjects give a zero for family number. } \examples{ +make_famid( + c("A", "B", "C", "D", "E", "F"), + c("C", "D", "0", "0", "0", "0"), + c("E", "E", "0", "0", "0", "0") +) data(sampleped) ped1 <- Pedigree(sampleped[,-1]) make_famid(ped1) diff --git a/man/min_dist_inf.Rd b/man/min_dist_inf.Rd index 272d662f..eb7c36fe 100644 --- a/man/min_dist_inf.Rd +++ b/man/min_dist_inf.Rd @@ -4,39 +4,29 @@ \name{min_dist_inf} \alias{min_dist_inf} \alias{min_dist_inf,character-method} -\alias{min_dist_inf,character} \alias{min_dist_inf,Pedigree-method} -\alias{min_dist_inf,Pedigree} \alias{min_dist_inf,Ped-method} -\alias{min_dist_inf,Ped} \title{Minimum distance to the informative individuals} \usage{ min_dist_inf(obj, ...) -\S4method{min_dist_inf}{character}(obj, dadid, momid, sex, avail, affected, informative = "AvAf") +\S4method{min_dist_inf}{character}(obj, dadid, momid, sex, id_inf) -\S4method{min_dist_inf}{Pedigree}( - obj, - col_aff = NULL, - informative = "AvAf", - missid = NA_character_, - reset = FALSE, - ... -) +\S4method{min_dist_inf}{Pedigree}(obj, col_aff = NULL, informative = "AvAf", reset = FALSE, ...) -\S4method{min_dist_inf}{Ped}( - obj, - col_aff = NULL, - informative = "AvAf", - missid = NA_character_, - reset = FALSE, - ... -) +\S4method{min_dist_inf}{Ped}(obj, informative = "AvAf", reset = FALSE) } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} + +\item{...}{Additional arguments} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} -\item{...}{Additional arguments passed to methods} +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} \item{sex}{A character, factor or numeric vector corresponding to the gender of the individuals. This will be transformed to an ordered factor @@ -48,13 +38,12 @@ The following values are recognized: \item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" }} -\item{avail}{A logical vector with the availability status of the -individuals -(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} +\item{id_inf}{An identifiers vector of informative individuals.} -\item{affected}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} +\item{col_aff}{A character vector with the name of the column to be used +for the affection status. +If \code{affected} is a data.frame, it will be overwritten by the column +names of the data.frame.} \item{informative}{Informative individuals selection can take 5 values: \itemize{ @@ -67,15 +56,6 @@ individuals \item A boolean }} -\item{col_aff}{A character vector with the name of the column to be used -for the affection status. -If \code{affected} is a data.frame, it will be overwritten by the column -names of the data.frame.} - -\item{missid}{A character vector with the missing values identifiers. -All the id, dadid and momid corresponding to those values will be set -to \code{NA_character_}.} - \item{reset}{If TRUE, the \code{kin} and if \code{isinf} columns is reset} } \value{ @@ -88,8 +68,9 @@ and all the others corresponding to the order of the individuals in the \subsection{When obj is a Pedigree}{ -The Pedigree object with a new column named 'kin' containing the kinship -degree. +The Pedigree object with a new slot named 'kin' containing the minimum +distance between each individuals and the informative individuals. +The \code{isinf} slot is also updated with the informative individuals. } } \description{ @@ -108,10 +89,18 @@ is 0.5 and the minimum distance is 1. Each time the kinship degree is divided by 2, the minimum distance is increased by 1. } \examples{ +min_dist_inf( + c("A", "B", "C", "D", "E"), + c("C", "D", "0", "0", "0"), + c("E", "E", "0", "0", "0"), + sex = c(1, 2, 1, 2, 1), + avail = c(1, 0, 0, 1, 1), + affected = c(0, 1, 0, 1, 1), + informative = "AvAf" +) data(sampleped) ped <- Pedigree(sampleped) -min_dist_inf(ped, col_aff = "affection_mods")$ped - +kin(ped(min_dist_inf(ped, col_aff = "affection_mods"))) } \seealso{ \code{\link[=kinship]{kinship()}} diff --git a/man/num_child.Rd b/man/num_child.Rd index 17fb99b7..96a39d35 100644 --- a/man/num_child.Rd +++ b/man/num_child.Rd @@ -16,9 +16,15 @@ num_child(obj, ...) \S4method{num_child}{Pedigree}(obj, reset = FALSE) } \arguments{ -\item{obj}{A pedigree object or a vector of subject identifiers.} +\item{obj}{A Pedigree or Ped object or a vector of subject identifiers.} -\item{...}{Additional arguments passed to methods} +\item{...}{Additional arguments} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} \item{rel_df}{A data.frame with the special relationships between individuals. See \code{\link[=Rel]{Rel()}} for more informations. diff --git a/man/upd_famid_id.Rd b/man/upd_famid_id.Rd index 81037759..6fc118fe 100644 --- a/man/upd_famid_id.Rd +++ b/man/upd_famid_id.Rd @@ -2,20 +2,64 @@ % Please edit documentation in R/make_famid.R \name{upd_famid_id} \alias{upd_famid_id} +\alias{upd_famid_id,character,ANY-method} +\alias{upd_famid_id,Ped,character_OR_integer-method} +\alias{upd_famid_id,Ped,missing-method} +\alias{upd_famid_id,Rel,character_OR_integer-method} +\alias{upd_famid_id,Rel,missing-method} +\alias{upd_famid_id,Pedigree,character_OR_integer-method} +\alias{upd_famid_id,Pedigree,missing-method} \title{Update family prefix in individuals id} \usage{ upd_famid_id(obj, famid, ...) + +\S4method{upd_famid_id}{character,ANY}(obj, famid, missid = NA_character_) + +\S4method{upd_famid_id}{Ped,character_OR_integer}(obj, famid) + +\S4method{upd_famid_id}{Ped,missing}(obj) + +\S4method{upd_famid_id}{Rel,character_OR_integer}(obj, famid) + +\S4method{upd_famid_id}{Rel,missing}(obj) + +\S4method{upd_famid_id}{Pedigree,character_OR_integer}(obj, famid) + +\S4method{upd_famid_id}{Pedigree,missing}(obj) } \arguments{ -\item{obj}{A character vector of individual ids} +\item{obj}{Ped or Pedigree object or a character vector of individual ids} \item{famid}{A character vector with the family identifiers of the individuals. If provide, will be aggregated to the individuals identifiers separated by an underscore.} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} } \value{ A character vector of individual ids with family prefix +updated } \description{ -Update family prefix in individuals id +Update the family prefix in the individuals identifiers. +Individuals identifiers are constructed as follow \strong{famid}_\strong{id}. +Therefore to update their family prefix the ids are split by the +first underscore and the first part is overwritten by \strong{famid}. +} +\details{ +If famid is \emph{missing}, then the \code{famid()} function will be called on the +object. +} +\examples{ +upd_famid_id(c("1", "2", "B_3"), c("A", "B", "A")) +data(sampleped) +ped1 <- Pedigree(sampleped[,-1]) +id(ped(ped1)) +new_fam <- make_famid(id(ped(ped1)), dadid(ped(ped1)), momid(ped(ped1))) +id(ped(upd_famid_id(ped1, new_fam))) +data(sampleped) +ped1 <- Pedigree(sampleped[,-1]) +make_famid(ped1) } diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index aeaea8dd..a102070e 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -32,7 +32,13 @@ useful_inds(obj, ...) \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{...}{Other arguments to pass to the function \code{generate_colors}.} +\item{...}{Additional arguments} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} \item{avail}{A logical vector with the availability status of the individuals diff --git a/tests/testthat/test-bitSize.R b/tests/testthat/test-bitSize.R index 540cdd48..84bfcab0 100644 --- a/tests/testthat/test-bitSize.R +++ b/tests/testthat/test-bitSize.R @@ -4,7 +4,7 @@ test_that("bit_size works", { "indId" = "id", "fatherId" = "fatherid", "motherId" = "motherid", "gender" = "sex", "family" = "famid" ), missid = "0") - bs_pedi <- bit_size(minnped, missid = NA_character_) + bs_pedi <- bit_size(minnped) bs_char <- bit_size( as.character(minnbreast$fatherid), as.character(minnbreast$motherid), From fabf2e96e186dd70e08402ad0de3dafa66c392a2 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 7 Nov 2023 16:59:30 +0100 Subject: [PATCH 069/111] Fix family ID prefixing and update is_informative function --- R/AllConstructor.R | 3 +++ R/fix_parents.R | 11 +++++--- R/make_famid.R | 12 +++++---- R/norm_data.R | 38 ++++++++-------------------- man/prefix_famid.Rd | 24 ------------------ tests/testthat/test-align.R | 1 + tests/testthat/test-is_informative.R | 11 ++++++-- tests/testthat/test-min_dist_inf.R | 25 +++++++++++++----- tests/testthat/test-norm_data.R | 20 --------------- 9 files changed, 57 insertions(+), 88 deletions(-) delete mode 100644 man/prefix_famid.Rd diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 59ece64f..6b877aa9 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -101,6 +101,9 @@ setMethod("Ped", "data.frame", others_cols = TRUE, cols_to_use_init = TRUE, cols_used_init = cols_used_init, cols_used_del = cols_used_del ) + + df$famid[is.na(df$famid)] <- NA_character_ + df$steril <- vect_to_binary(df$steril, logical = TRUE) df$status <- vect_to_binary(df$status, logical = TRUE) df$avail <- vect_to_binary(df$avail, logical = TRUE) diff --git a/R/fix_parents.R b/R/fix_parents.R index cb1c2b62..c7f4a85f 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -73,6 +73,7 @@ setMethod("fix_parents", "character", function( if (length(sex) != n) { stop("Mismatched lengths, id and sex") } + if (length(famid) != n & length(famid) > 0) { stop("Mismatched lengths, id and sex") } @@ -94,9 +95,12 @@ setMethod("fix_parents", "character", function( stop("Missing value for the id variable") } - id <- prefix_famid(famid, id, missid) - dadid <- prefix_famid(famid, dadid, missid) - momid <- prefix_famid(famid, momid, missid) + if (!is.null(famid)) { + id <- upd_famid_id(id, famid, missid) + dadid <- upd_famid_id(dadid, famid, missid) + momid <- upd_famid_id(momid, famid, missid) + } + addids <- paste("addin", seq_along(id), sep = "-") if (length(grep("^ *$", id)) > 0) { stop("A blank or empty string is not allowed as the id variable") @@ -161,7 +165,6 @@ setMethod("fix_parents", "character", function( if (is.null(famid)) { data.frame(id = id, momid = momid, dadid = dadid, sex = sex) } else { - famid <- stringr::str_split_i(id, "_", i = 1) data.frame( id = id, momid = momid, dadid = dadid, sex = sex, famid = famid diff --git a/R/make_famid.R b/R/make_famid.R index 677fd88e..3b604ec8 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -142,6 +142,7 @@ setGeneric("upd_famid_id", #' @rdname upd_famid_id #' @examples #' upd_famid_id(c("1", "2", "B_3"), c("A", "B", "A")) +#' upd_famid_id(c("1", "B_2", "C_3", "4"), c("A", NA, "A", NA)) setMethod("upd_famid_id", "character", function(obj, famid, missid = NA_character_) { if (length(obj) != length(famid)) { @@ -149,16 +150,17 @@ setMethod("upd_famid_id", "character", } id <- obj[!obj %in% missid] famid <- famid[!obj %in% missid] - if (any(is.na(famid))) { - stop("famid cannot contain NA") - } if (! is.character(id)) { stop("id must be a character vector") } id[!str_detect(id, "_")] <- paste0("_", id[!str_detect(id, "_")]) ids <- str_split_fixed(id, "_", 2) - ids[, 1] <- as.character(famid) - new_ids <- paste(ids[, 1], ids[, 2], sep = "_") + ids[, 1] <- famid + new_ids <- ifelse( + ids[, 1] %in% missid, + ids[, 2], + paste(ids[, 1], ids[, 2], sep = "_") + ) obj[!obj %in% missid] <- new_ids obj } diff --git a/R/norm_data.R b/R/norm_data.R index e466f72d..f2d72e57 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -4,26 +4,6 @@ #' @importFrom stringr str_remove_all NULL -#' Compute id with family id -#' -#' @description Compute id with family id if the family id available -#' -#' @inheritParams Ped -#' @inheritParams is_parent -#' @keywords internal -#' @return The id with the family id merged -prefix_famid <- function(famid, id, missid = NA_character_) { - if (length(famid) > 1 && length(famid) != length(id)) { - stop("famid and id must have the same length.") - } - - pre_famid <- ifelse( - is.na(famid) | is.null(famid), - "", paste0(as.character(famid), "_") - ) - ifelse(id %in% missid, missid, paste0(pre_famid, as.character(id))) -} - #' Normalise dataframe #' #' @description Normalise dataframe for Pedigree object @@ -97,13 +77,16 @@ norm_ped <- function( ped_df, cols_need, cols_used, cols_to_use, others_cols = TRUE, cols_to_use_init = TRUE, cols_used_init = TRUE ) + + ped_df$family[is.na(ped_df$family)] <- missid + if (nrow(ped_df) > 0) { ped_df <- mutate_if( - ped_df, is.character, ~replace(., . %in% na_strings, NA) + ped_df, is.character, ~replace(., . %in% na_strings, NA_character_) ) #### Id #### Check id type - for (id in c("indId", "fatherId", "motherId", "family")) { + for (id in c("indId", "fatherId", "motherId")) { ped_df[[id]] <- as.character(ped_df[[id]]) } err$idErr <- lapply( @@ -120,9 +103,9 @@ norm_ped <- function( ) ## Make a new id from the family and subject pair ped_df$famid <- ped_df$family - ped_df$id <- prefix_famid(ped_df$famid, ped_df$indId, missid) - ped_df$dadid <- prefix_famid(ped_df$famid, ped_df$fatherId, missid) - ped_df$momid <- prefix_famid(ped_df$famid, ped_df$motherId, missid) + ped_df$id <- upd_famid_id(ped_df$indId, ped_df$famid, missid) + ped_df$dadid <- upd_famid_id(ped_df$fatherId, ped_df$famid, missid) + ped_df$momid <- upd_famid_id(ped_df$motherId, ped_df$famid, missid) ped_df <- mutate_at(ped_df, c("id", "dadid", "momid"), ~replace(., . %in% c(na_strings, missid), NA_character_) @@ -279,6 +262,7 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { rel_df, cols_needed, cols_used, cols_to_use, others_cols = FALSE, cols_to_use_init = TRUE, cols_used_init = TRUE ) + rel_df$famid[is.na(rel_df$famid)] <- missid if (nrow(rel_df) > 0) { rel_df <- mutate_if( rel_df, is.character, @@ -302,8 +286,8 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { err$id2Err[is.na(len2) | len2 %in% missid] <- "indId2length0" ## Compute id with family id - rel_df$id1 <- prefix_famid(rel_df$famid, rel_df$id1, missid) - rel_df$id2 <- prefix_famid(rel_df$famid, rel_df$id2, missid) + rel_df$id1 <- upd_famid_id(rel_df$id1, rel_df$famid, missid) + rel_df$id2 <- upd_famid_id(rel_df$id2, rel_df$famid, missid) err$sameIdErr[rel_df$id1 == rel_df$id2] <- "SameId" diff --git a/man/prefix_famid.Rd b/man/prefix_famid.Rd deleted file mode 100644 index c72a9946..00000000 --- a/man/prefix_famid.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/norm_data.R -\name{prefix_famid} -\alias{prefix_famid} -\title{Compute id with family id} -\usage{ -prefix_famid(famid, id, missid = NA_character_) -} -\arguments{ -\item{famid}{A character vector with the family identifiers of the -individuals. If provide, will be aggregated to the individuals -identifiers separated by an underscore.} - -\item{missid}{A character vector with the missing values identifiers. -All the id, dadid and momid corresponding to those values will be set -to \code{NA_character_}.} -} -\value{ -The id with the family id merged -} -\description{ -Compute id with family id if the family id available -} -\keyword{internal} diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 6680b2b8..1d8f8c2f 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -126,6 +126,7 @@ test_that("Double wife", { sex = c(1, 2, 1, 2, 1, 2, 1) ) pedi <- Pedigree(df, missid = "0") + id(ped(pedi)) expect_equal(sum(kindepth(pedi)), 4) vdiffr::expect_doppelganger("double_wife", function() plot(pedi) diff --git a/tests/testthat/test-is_informative.R b/tests/testthat/test-is_informative.R index dae823ac..86b404a8 100644 --- a/tests/testthat/test-is_informative.R +++ b/tests/testthat/test-is_informative.R @@ -25,11 +25,18 @@ test_that("is_informative works", { 23 ) expect_equal( - is_informative(id, avail, affected, informative = c(1, 110, 150, 214)), + is_informative( + id, avail, affected, + informative = c("1", "110", "150", "214") + ), c("110", "214") ) + length(id) expect_equal( - is_informative(id, avail, affected, informative = c(TRUE, FALSE, TRUE)), + is_informative( + id, avail, affected, + informative = c(TRUE, FALSE, TRUE, rep(FALSE, 52)) + ), c("101", "103") ) expect_equal( diff --git a/tests/testthat/test-min_dist_inf.R b/tests/testthat/test-min_dist_inf.R index c085376d..3a83a4a0 100644 --- a/tests/testthat/test-min_dist_inf.R +++ b/tests/testthat/test-min_dist_inf.R @@ -7,17 +7,30 @@ test_that("min_dist_inf works", { sampleped[c("id", "dadid", "momid")], as.character ), stringsAsFactors = FALSE) - res <- with(sampleped, min_dist_inf(id, informative = "AvAf", - dadid, momid, sex, avail, affected + id_inf <- with(sampleped, is_informative( + id, avail, affected, informative = "AvAf" )) + + res <- with(sampleped, + min_dist_inf(id, dadid, momid, sex, id_inf + ) + ) expect_equal(sum(res, na.rm = TRUE), 97) - mxkin <- with(sampleped, min_dist_inf(id, informative = "Av", - dadid, momid, sex, avail, affected + + id_inf <- with(sampleped, is_informative( + id, avail, affected, informative = "Av" )) + mxkin <- with(sampleped, + min_dist_inf(id, dadid, momid, sex, id_inf) + ) expect_equal(sum(mxkin, na.rm = TRUE), 90) - mxkin <- with(sampleped, min_dist_inf(id, informative = "AvOrAf", - dadid, momid, sex, avail, affected + + id_inf <- with(sampleped, is_informative( + id, avail, affected, informative = "AvOrAf" )) + mxkin <- with(sampleped, + min_dist_inf(id, dadid, momid, sex, id_inf) + ) expect_equal(sum(mxkin, na.rm = TRUE), 76) }) diff --git a/tests/testthat/test-norm_data.R b/tests/testthat/test-norm_data.R index 38dd50b2..0df330d5 100644 --- a/tests/testthat/test-norm_data.R +++ b/tests/testthat/test-norm_data.R @@ -47,23 +47,3 @@ test_that("Norm rel", { expect_snapshot(rel_df) expect_equal(sum(is.na(rel_df$error)), 6) }) - -test_that("prefix_famid works", { - family_id <- NULL - ind_id <- c("A", "B", "0", NA) - missid <- NA_character_ - - a <- prefix_famid(family_id, ind_id, missid) - expect_equal(a, ind_id) - - family_id <- "1" - b <- prefix_famid(family_id, ind_id, missid) - expect_equal(b, c("1_A", "1_B", "1_0", NA)) - - family_id <- c("1", "2", "0", NA) - c <- prefix_famid(family_id, ind_id, missid) - expect_equal(c, c("1_A", "2_B", "0_0", NA)) - - family_id <- c("1", "2", "0") - expect_error(prefix_famid(family_id, ind_id, missid)) -}) \ No newline at end of file From 3b730be94c79feaa533f90fcb0fd385932fd1f3f Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 7 Nov 2023 19:59:27 +0100 Subject: [PATCH 070/111] Update documentation for normalisation, and num_childs --- NAMESPACE | 1 - R/norm_data.R | 101 +++++++++++++++++++++++++++--------- R/num_child.R | 44 ++++++++-------- R/useful_inds.R | 6 +-- devel/documentation/todo.md | 4 +- man/norm_ped.Rd | 77 ++++++++++++++++++++------- man/norm_rel.Rd | 28 ++++++++-- man/num_child.Rd | 26 ++++++---- man/upd_famid_id.Rd | 1 + man/useful_inds.Rd | 7 +-- 10 files changed, 206 insertions(+), 89 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 570331c0..2e74fd24 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -81,7 +81,6 @@ exportMethods(as.list) exportMethods(auto_hint) exportMethods(length) exportMethods(mcols) -exportMethods(num_child) exportMethods(plot) exportMethods(show) exportMethods(subset) diff --git a/R/norm_data.R b/R/norm_data.R index f2d72e57..dd69d715 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -4,15 +4,15 @@ #' @importFrom stringr str_remove_all NULL -#' Normalise dataframe +#' Normalise a Ped object dataframe #' -#' @description Normalise dataframe for Pedigree object +#' @description Normalise dataframe for a Ped object #' #' @details Normalise a dataframe and check for columns correspondance -#' to be able to use it as an input to create Pedigree object. +#' to be able to use it as an input to create a Ped object. #' Multiple test are done and errors are checked. -#' Sex is calculated based in the `gender` column the following notations -#' are accepted: f, woman, female, 2 and m, man, male, 1. +#' Sex is calculated based on the `gender` column. +#' #' The `steril` column need to be a boolean either TRUE, FALSE or 'NA'. #' Will be considered available any individual with no 'NA' values in the #' `available` column. @@ -20,25 +20,49 @@ NULL #' All individuals with errors will be remove from the dataframe and will #' be transfered to the error dataframe. #' +#' A number of checks are done to ensure the dataframe is correct: +#' +#' ## On identifiers: +#' - All ids (id, dadid, momid, famid) are not empty (`!= ""`) +#' - All `id` are unique (no duplicated) +#' - All `dadid` and `momid` are unique in the id column (no duplicated) +#' - id is not the same as dadid or momid +#' - Either have both parents or none +#' +#' ## On sex +#' - All sex code are either `male`, `female`, `terminated` or `unknown`. +#' - No parents are steril +#' - All fathers are male +#' - All mothers are female +#' #' @param ped_df A data.frame with the individuals informations. -#' The minimum columns required are `indID`, `fatherId`, `motherId` and -#' `gender`. -#' The `famid` column can also be used to specify the family of the -#' individuals and will be merge to the `id` field separated by an -#' underscore. -#' The following columns are also recognize `sterilisation`, `available`, -#' `vitalStatus`, `affection`. The four of them will be transformed with the -#' [vect_to_binary()] function. -#' They respectively correspond to the sterilisation status, -#' the availability status, the death status and the affection status -#' of the individuals. The values recognized for those columns are `1` or -#' `0`. -#' @param na_strings Vector of strings to be considered as NA values +#' The minimum columns required are: +#' +#' - `indID` individual identifiers -> `id` +#' - `fatherId` biological fathers identifiers -> `dadid` +#' - `motherId` biological mothers identifiers -> `momdid` +#' - `gender` sex of the individual -> `sex` +#' - `family` family identifiers -> `famid` +#' +#' The `family` column, if provided, will be merged to the *ids* field +#' separated by an underscore using the [upd_famid_id()] function. +#' +#' The following columns are also recognize and will be transformed with the +#' [vect_to_binary()] function: +#' +#' - `sterilisation` status -> `steril` +#' - `available` status -> `avail` +#' - `vitalStatus`, is the individual dead -> `status` +#' - `affection` status -> `affected` +#' +#' The values recognized for those columns are `1` or `0`, `TRUE` or `FALSE`. +#' @param na_strings Vector of strings to be considered as NA values. #' @param try_num Boolean defining if the function should try to convert #' all the columns to numeric. -#' @inheritParams is_parent +#' @inheritParams Ped #' -#' @return A dataframe with the errors identified in the `error` column +#' @return A dataframe with different variable correctly standardized +#' and with the errors identified in the `error` column #' #' @include utils.R #' @examples @@ -54,6 +78,8 @@ NULL #' affection = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0) #' ) #' norm_ped(df) +#' +#' @seealso [Ped()], [Ped-class], [Pedigree()] #' @export norm_ped <- function( ped_df, na_strings = c("NA", ""), missid = NA_character_, try_num = FALSE @@ -123,7 +149,9 @@ norm_ped <- function( ## Add terminated for sterilized individuals that is neither dad nor mom if ("sterilisation" %in% colnames(ped_df)) { - ped_df$steril <- vect_to_binary(ped_df$sterilisation, logical = TRUE) + ped_df$steril <- vect_to_binary( + ped_df$sterilisation, logical = TRUE + ) ped_df$sex[ ped_df$steril == 1 & !is.na(ped_df$steril) & !is_father & !is_mother @@ -133,7 +161,6 @@ norm_ped <- function( ped_df$steril == 1 & !is.na(ped_df$steril) ) & (is_father | is_mother) ] <- "isSterilButIsParent" - nb_steril_parent <- sum(!is.na(err$sexErrTer)) ped_df$steril[!is.na(err$sexErrTer) & (is_father | is_mother) ] <- FALSE @@ -230,13 +257,29 @@ norm_ped <- function( ped_df } -#' Normalise relationship dataframe +#' Normalise a Rel object dataframe +#' +#' @description Normalise a dataframe and check for columns correspondance +#' to be able to use it as an input to create a Ped object. +#' +#' @details +#' The `famid` column, if provided, will be merged to the *ids* field +#' separated by an underscore using the [upd_famid_id()] function. +#' The `code` column will be transformed with the [rel_code_to_factor()]. +#' Multiple test are done and errors are checked. +#' +#' A number of checks are done to ensure the dataframe is correct: #' -#' @description Normalise relationship dataframe for Pedigree object +#' ## On identifiers: +#' - All ids (id1, id2) are not empty (`!= ""`) +#' - `id1` and `id2` are not the same +#' +#' ## On code +#' - All code are recognised as either "MZ twin", "DZ twin", "UZ twin" or +#' "Spouse" #' #' @inheritParams norm_ped #' @inheritParams Pedigree -#' @inheritParams is_parent #' #' @examples #' df <- data.frame( @@ -251,6 +294,14 @@ norm_ped <- function( #' @return A dataframe with the errors identified #' @export norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { + + if (is.matrix(rel_df)) { + rel_df <- as.data.frame(rel_df) + colnames(rel_df) <- c( + "id1", "id2", "code", "famid" + )[seq_len(ncol(rel_df))] + } + #### Check columns #### err_cols <- c("codeErr", "sameIdErr", "id1Err", "id2Err", "error") err <- data.frame(matrix(NA, nrow = nrow(rel_df), ncol = length(err_cols))) diff --git a/R/num_child.R b/R/num_child.R index a16b3670..502b70a3 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -2,18 +2,18 @@ #' @importFrom tidyr pivot_longer NULL -#' Number of child +#' Number of childs #' -#' @description Compute the number of child per individual +#' @description Compute the number of childs per individual #' #' @details Compute the number of direct child but also the number #' of indirect child given by the ones related with the linked spouses. -#' If a relation ship matrix is given, then even if no children is present +#' If a relation ship dataframe is given, then even if no children is present #' between 2 spouses, the indirect childs will still be added. #' -#' @inheritParams kinship -#' @inheritParams norm_rel -#' @inheritParams is_parent +#' @param ... Additional arguments +#' @inheritParams Ped +#' @inheritParams Pedigree #' #' @return #' ## When obj is a vector @@ -25,21 +25,24 @@ NULL #' An updated Pedigree object with the columns `num_child_dir`, #' `num_child_ind` and `num_child_tot` added to the #' Pedigree `ped` slot. -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -#' ped1 <- num_child(ped1) -#' summary(ped1$ped) #' @include AllClass.R #' @export setGeneric("num_child", signature = "obj", function(obj, ...) standardGeneric("num_child") ) -#' @export #' @rdname num_child -#' @aliases num_child,character_OR_integer -#' @docType methods +#' @examples +#' num_child( +#' obj = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), +#' dadid = c("3", "3", "6", "8", "0", "0", "0", "0", "0", "0"), +#' momid = c("4", "5", "7", "9", "0", "0", "0", "0", "0", "0"), +#' rel_df = data.frame( +#' id1 = "10", +#' id2 = "3", +#' code = "Spouse" +#' ) +#' ) setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, rel_df = NULL, missid = NA_character_ ) { @@ -81,10 +84,7 @@ setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, colnames(spouse_rel) <- c("id1", "id2") if (!is.null(rel_df)) { - cols_needed <- c("id1", "id2", "code") - rel_df <- check_columns(rel_df, cols_needed, "", "", - others_cols = FALSE - ) + rel_df <- norm_rel(rel_df, missid = missid) spouse_rel <- rbind(spouse_rel, rel_df[rel_df$code == "Spouse", c("id1", "id2")] ) @@ -146,12 +146,14 @@ setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, } }) -#' @export #' @rdname num_child -#' @aliases num_child,Pedigree -#' @docType methods #' @param reset If TRUE, the `num_child_tot`, `num_child_ind` and #' the `num_child_dir` columns are reset. +#' @examples +#' data(sampleped) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) +#' ped1 <- num_child(ped1, reset = TRUE) +#' summary(ped(ped1)) setMethod("num_child", "Pedigree", function(obj, reset = FALSE) { df <- num_child(id(ped(obj)), dadid(ped(obj)), momid(ped(obj)), rel_df = as.data.frame(rel(obj)) diff --git a/R/useful_inds.R b/R/useful_inds.R index 566a3bb8..b2222a1b 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -40,13 +40,13 @@ setGeneric("useful_inds", signature = "obj", #' @aliases useful_inds,character setMethod("useful_inds", "character", function(obj, dadid, momid, avail, affected, num_child_tot, - informative = "AvAf", keep_infos = FALSE, missid = NA_character_ + informative = "AvAf", keep_infos = FALSE ) { id <- obj # Get informative individuals id_inf <- is_informative(id, avail, affected, - informative, missid + informative ) isinf <- id %in% id_inf @@ -107,7 +107,7 @@ setMethod("useful_inds", "Ped", function(obj, ) { useful <- useful_inds(id(obj), dadid(obj), momid(obj), avail(obj), affected(obj), obj@num_child_tot, - informative, keep_infos, NA_character_ + informative, keep_infos ) if (!reset & any(!is.na(useful(obj)))) { diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index 6350d81a..5ddfc768 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -31,8 +31,8 @@ - [x] kinship.R - [x] make_famid.R - [x] min_dist_inf.R -- [ ] norm_data.R -- [ ] num_child.R +- [x] norm_data.R +- [x] num_child.R - [ ] ped_to_legdf.R - [ ] ped_to_plotdf.R - [ ] plot.R diff --git a/man/norm_ped.Rd b/man/norm_ped.Rd index 823398c9..dd8347ff 100644 --- a/man/norm_ped.Rd +++ b/man/norm_ped.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/norm_data.R \name{norm_ped} \alias{norm_ped} -\title{Normalise dataframe} +\title{Normalise a Ped object dataframe} \usage{ norm_ped( ped_df, @@ -13,42 +13,77 @@ norm_ped( } \arguments{ \item{ped_df}{A data.frame with the individuals informations. -The minimum columns required are \code{indID}, \code{fatherId}, \code{motherId} and -\code{gender}. -The \code{famid} column can also be used to specify the family of the -individuals and will be merge to the \code{id} field separated by an -underscore. -The following columns are also recognize \code{sterilisation}, \code{available}, -\code{vitalStatus}, \code{affection}. The four of them will be transformed with the -\code{\link[=vect_to_binary]{vect_to_binary()}} function. -They respectively correspond to the sterilisation status, -the availability status, the death status and the affection status -of the individuals. The values recognized for those columns are \code{1} or -\code{0}.} +The minimum columns required are: -\item{na_strings}{Vector of strings to be considered as NA values} +\if{html}{\out{
}}\preformatted{- `indID` individual identifiers -> `id` +- `fatherId` biological fathers identifiers -> `dadid` +- `motherId` biological mothers identifiers -> `momdid` +- `gender` sex of the individual -> `sex` +- `family` family identifiers -> `famid` +}\if{html}{\out{
}} + +The \code{family} column, if provided, will be merged to the \emph{ids} field +separated by an underscore using the \code{\link[=upd_famid_id]{upd_famid_id()}} function. + +The following columns are also recognize and will be transformed with the +\code{\link[=vect_to_binary]{vect_to_binary()}} function: + +\if{html}{\out{
}}\preformatted{- `sterilisation` status -> `steril` +- `available` status -> `avail` +- `vitalStatus`, is the individual dead -> `status` +- `affection` status -> `affected` +}\if{html}{\out{
}} + +The values recognized for those columns are \code{1} or \code{0}, \code{TRUE} or \code{FALSE}.} + +\item{na_strings}{Vector of strings to be considered as NA values.} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} \item{try_num}{Boolean defining if the function should try to convert all the columns to numeric.} } \value{ -A dataframe with the errors identified in the \code{error} column +A dataframe with different variable correctly standardized +and with the errors identified in the \code{error} column } \description{ -Normalise dataframe for Pedigree object +Normalise dataframe for a Ped object } \details{ Normalise a dataframe and check for columns correspondance -to be able to use it as an input to create Pedigree object. +to be able to use it as an input to create a Ped object. Multiple test are done and errors are checked. -Sex is calculated based in the \code{gender} column the following notations -are accepted: f, woman, female, 2 and m, man, male, 1. +Sex is calculated based on the \code{gender} column. + The \code{steril} column need to be a boolean either TRUE, FALSE or 'NA'. Will be considered available any individual with no 'NA' values in the \code{available} column. Duplicated \code{indId} will nullify the relationship of the individual. All individuals with errors will be remove from the dataframe and will be transfered to the error dataframe. + +A number of checks are done to ensure the dataframe is correct: +\subsection{On identifiers:}{ +\itemize{ +\item All ids (id, dadid, momid, famid) are not empty (\verb{!= ""}) +\item All \code{id} are unique (no duplicated) +\item All \code{dadid} and \code{momid} are unique in the id column (no duplicated) +\item id is not the same as dadid or momid +\item Either have both parents or none +} +} + +\subsection{On sex}{ +\itemize{ +\item All sex code are either \code{male}, \code{female}, \code{terminated} or \code{unknown}. +\item No parents are steril +\item All fathers are male +\item All mothers are female +} +} } \examples{ df <- data.frame( @@ -63,4 +98,8 @@ df <- data.frame( affection = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0) ) norm_ped(df) + +} +\seealso{ +\code{\link[=Ped]{Ped()}}, \linkS4class{Ped}, \code{\link[=Pedigree]{Pedigree()}} } diff --git a/man/norm_rel.Rd b/man/norm_rel.Rd index a0feca7c..1cd6238b 100644 --- a/man/norm_rel.Rd +++ b/man/norm_rel.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/norm_data.R \name{norm_rel} \alias{norm_rel} -\title{Normalise relationship dataframe} +\title{Normalise a Rel object dataframe} \usage{ norm_rel(rel_df, na_strings = c("NA", ""), missid = NA_character_) } @@ -25,7 +25,7 @@ The code values are: The value relation code recognized by the function are the one defined by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} -\item{na_strings}{Vector of strings to be considered as NA values} +\item{na_strings}{Vector of strings to be considered as NA values.} \item{missid}{A character vector with the missing values identifiers. All the id, dadid and momid corresponding to those values will be set @@ -35,7 +35,29 @@ to \code{NA_character_}.} A dataframe with the errors identified } \description{ -Normalise relationship dataframe for Pedigree object +Normalise a dataframe and check for columns correspondance +to be able to use it as an input to create a Ped object. +} +\details{ +The \code{famid} column, if provided, will be merged to the \emph{ids} field +separated by an underscore using the \code{\link[=upd_famid_id]{upd_famid_id()}} function. +The \code{code} column will be transformed with the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}}. +Multiple test are done and errors are checked. + +A number of checks are done to ensure the dataframe is correct: +\subsection{On identifiers:}{ +\itemize{ +\item All ids (id1, id2) are not empty (\verb{!= ""}) +\item \code{id1} and \code{id2} are not the same +} +} + +\subsection{On code}{ +\itemize{ +\item All code are recognised as either "MZ twin", "DZ twin", "UZ twin" or +"Spouse" +} +} } \examples{ df <- data.frame( diff --git a/man/num_child.Rd b/man/num_child.Rd index 96a39d35..bbacdd80 100644 --- a/man/num_child.Rd +++ b/man/num_child.Rd @@ -1,13 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/num_child.R -\docType{methods} \name{num_child} \alias{num_child} \alias{num_child,character_OR_integer-method} -\alias{num_child,character_OR_integer} \alias{num_child,Pedigree-method} -\alias{num_child,Pedigree} -\title{Number of child} +\title{Number of childs} \usage{ num_child(obj, ...) @@ -16,7 +13,8 @@ num_child(obj, ...) \S4method{num_child}{Pedigree}(obj, reset = FALSE) } \arguments{ -\item{obj}{A Pedigree or Ped object or a vector of subject identifiers.} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} \item{...}{Additional arguments} @@ -67,17 +65,27 @@ Pedigree \code{ped} slot. } } \description{ -Compute the number of child per individual +Compute the number of childs per individual } \details{ Compute the number of direct child but also the number of indirect child given by the ones related with the linked spouses. -If a relation ship matrix is given, then even if no children is present +If a relation ship dataframe is given, then even if no children is present between 2 spouses, the indirect childs will still be added. } \examples{ +num_child( + obj = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), + dadid = c("3", "3", "6", "8", "0", "0", "0", "0", "0", "0"), + momid = c("4", "5", "7", "9", "0", "0", "0", "0", "0", "0"), + rel_df = data.frame( + id1 = "10", + id2 = "3", + code = "Spouse" + ) +) data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -ped1 <- num_child(ped1) -summary(ped1$ped) +ped1 <- num_child(ped1, reset = TRUE) +summary(ped(ped1)) } diff --git a/man/upd_famid_id.Rd b/man/upd_famid_id.Rd index 6fc118fe..b8c28322 100644 --- a/man/upd_famid_id.Rd +++ b/man/upd_famid_id.Rd @@ -54,6 +54,7 @@ object. } \examples{ upd_famid_id(c("1", "2", "B_3"), c("A", "B", "A")) +upd_famid_id(c("1", "B_2", "C_3", "4"), c("A", NA, "A", NA)) data(sampleped) ped1 <- Pedigree(sampleped[,-1]) id(ped(ped1)) diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index a102070e..a37ef364 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -20,8 +20,7 @@ useful_inds(obj, ...) affected, num_child_tot, informative = "AvAf", - keep_infos = FALSE, - missid = NA_character_ + keep_infos = FALSE ) \S4method{useful_inds}{Pedigree}(obj, informative = "AvAf", keep_infos = FALSE, reset = FALSE) @@ -65,10 +64,6 @@ individuals} \item{keep_infos}{Boolean to indicate if individuals with unknown status but available or reverse should be kept} -\item{missid}{A character vector with the missing values identifiers. -All the id, dadid and momid corresponding to those values will be set -to \code{NA_character_}.} - \item{reset}{Boolean to indicate if the \code{useful} column should be reset} } \value{ From 10eea2a0c5b30e63a10d896e083611a496c36365 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 16:20:30 +0100 Subject: [PATCH 071/111] Update documentation --- R/Pedixplorer-package.R | 18 ++++--- R/ped_to_legdf.R | 40 ++++++++++++--- R/ped_to_plotdf.R | 47 +++++++++++++---- R/plot.R | 40 +++++++++------ R/plot_fct.R | 72 +++++++++++++++++--------- R/plot_fromdf.R | 18 ++++--- R/shrink.R | 19 +++++-- R/unrelated.R | 2 + devel/documentation/todo.md | 14 ++--- man/Pedixplorer_package.Rd | 18 ++++--- man/circfun.Rd | 17 ++++-- man/draw_arc.Rd | 3 +- man/draw_polygon.Rd | 3 +- man/draw_segment.Rd | 3 +- man/draw_text.Rd | 7 +-- man/ped_to_legdf.Rd | 40 ++++++++++++--- man/ped_to_plotdf.Rd | 80 ++++++++++++++++++++++++++--- man/plot-Pedigree-missing-method.Rd | 39 ++++++++------ man/plot_fromdf.Rd | 18 ++++--- man/polyfun.Rd | 16 ++++-- man/polygons.Rd | 18 +++++-- man/set_plot_area.Rd | 3 +- man/shrink.Rd | 25 +++++++-- man/subregion.Rd | 11 ++-- man/unrelated.Rd | 10 ++++ 25 files changed, 429 insertions(+), 152 deletions(-) diff --git a/R/Pedixplorer-package.R b/R/Pedixplorer-package.R index 3326ede4..2931422a 100644 --- a/R/Pedixplorer-package.R +++ b/R/Pedixplorer-package.R @@ -11,7 +11,8 @@ #' additional functionality and bug fixes. #' #' The package download, NEWS, and README are available on CRAN: -#' \\url{https://cran.r-project.org/package=kinship2} +#' \\url{https://cran.r-project.org/package=kinship2} for the +#' previous version of the package. #' #' @section Functions: #' Below are listed some of the most widely used functions available @@ -24,12 +25,14 @@ #' probability having an allele sampled from two individuals #' be the same via IBD. #' -#' [ped_to_plotdf()] : Method to transform a Pedigree -#' object into a dataframe of graphical elements. -#' Allows extra information to be included in the id under the plot symbol -#' -#' [plot_fromdf()] : Method to plot a Pedigree from a -#' dataframe of graphical elements. +#' [Pedixplorer::plot()] : Method to transform a Pedigree +#' object into a graphical plot. +#' Allows extra information to be included in the id under the +#' plot symbol. +#' This method use the [plot_fromdf()] function to transform the Pedigree +#' object into a data frame of graphical elements, the same is done for the +#' legend with the [ped_to_legdf()] function. +#' When done, the data frames are plotted with the [plot_fromdf()] function. #' #' [shrink()]: Shrink a Pedigree to a specific bit size, #' removing non-informative members first. @@ -49,5 +52,4 @@ #' #' @docType package #' @rdname Pedixplorer_package -#' @keywords internal "_PACKAGE" diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index 70dd4f84..aaae9c26 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -1,10 +1,25 @@ -#' Convert a Pedigree to a legend data frame of element to plot +#' Create plotting legend data frame from a Pedigree #' #' @description #' Convert a Pedigree to a legend data frame for it to -#' be plotted with afterwards with [plot_fromdf()]. +#' be plotted afterwards with [plot_fromdf()]. #' -#' @inheritParams align +#' @details The data frame contains the following columns: +#' - `x0`, `y0`, `x1`, `y1`: coordinates of the elements +#' - `type`: type of the elements +#' - `fill`: fill color of the elements +#' - `border`: border color of the elements +#' - `angle`: angle of the shading of the elements +#' - `density`: density of the shading of the elements +#' - `cex`: size of the elements +#' - `label`: label of the elements +#' - `tips`: tips of the elements (used for the tooltips) +#' - `adjx`: horizontal text adjustment of the labels +#' - `adjy`: vertical text adjustment of the labels +#' +#' All those columns are used by [plot_fromdf()] to plot the graph. +#' +#' @param ... Additional arguments #' @inheritParams set_plot_area #' @inheritParams plot_fromdf #' @param adjx default=0. Controls the horizontal text adjustment of @@ -19,11 +34,19 @@ #' data("sampleped") #' ped <- Pedigree(sampleped) #' leg_df <- ped_to_legdf(ped) -#' summary(leg_df$leg_df) -#' plot_fromdf(leg_df$leg_df) +#' summary(leg_df$df) +#' plot_fromdf(leg_df$df, usr = c(-1,15,0,7)) +#' @keywords internal, Pedigree-plot #' @export -#' @docType methods -ped_to_legdf <- function(ped, +setGeneric( + "ped_to_legdf", signature = "obj", + function(obj, ...) { + standardGeneric("ped_to_legdf") + } +) + +#' @rdname ped_to_legdf +setMethod("ped_to_legdf", "Pedigree", function(obj, boxh = 1, boxw = 1, cex = 1, adjx = 0, adjy = 0 ) { @@ -174,5 +197,6 @@ ped_to_legdf <- function(ped, min(plot_df$x0), max(plot_df$x0), min(plot_df$y0), max(plot_df$y0) ) - list(leg_df = plot_df, par_usr = par_usr) + list(df = plot_df, par_usr = par_usr) } +) diff --git a/R/ped_to_plotdf.R b/R/ped_to_plotdf.R index 15d58b2d..5f1cffd1 100644 --- a/R/ped_to_plotdf.R +++ b/R/ped_to_plotdf.R @@ -1,30 +1,58 @@ #' @importFrom plyr rbind.fill NULL -#' Convert a Pedigree to a data frame of element to plot +#' Create plotting data frame from a Pedigree +#' +#' @description +#' Convert a Pedigree to a data frame with all the elements and their +#' characteristic for them to be plotted afterwards with [plot_fromdf()]. +#' +#' @details The data frame contains the following columns: +#' - `x0`, `y0`, `x1`, `y1`: coordinates of the elements +#' - `type`: type of the elements +#' - `fill`: fill color of the elements +#' - `border`: border color of the elements +#' - `angle`: angle of the shading of the elements +#' - `density`: density of the shading of the elements +#' - `cex`: size of the elements +#' - `label`: label of the elements +#' - `tips`: tips of the elements (used for the tooltips) +#' - `adjx`: horizontal text adjustment of the labels +#' - `adjy`: vertical text adjustment of the labels +#' +#' All those columns are used by [plot_fromdf()] to plot the graph. #' #' @inheritParams align -#' @param pconnect when connecting parent to children the program will try to +#' @param pconnect When connecting parent to children the program will try to #' make the connecting line as close to vertical as possible, subject to it #' lying inside the endpoints of the line that connects the children by at #' least `pconnect` people. Setting this option to a large number will #' force the line to connect at the midpoint of the children. #' @param branch defines how much angle is used to connect various levels of #' nuclear families. -#' @param aff_mark if TRUE, add a aff_mark to each box corresponding to the +#' @param aff_mark If `TRUE`, add a aff_mark to each box corresponding to the #' value of the affection column for each filling scale. -#' @param label if not NULL, add a label to each box corresponding to the +#' @param label If not `NULL`, add a label to each box corresponding to the #' value of the column given. -#' @inheritParams set_plot_area +#' @param ... Other arguments passed to [par()] #' @inheritParams subregion +#' @inheritParams set_plot_area #' #' @return A list containing the data frame and the user coordinates. +#' #' @examples #' data(sampleped) #' ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) -#' ped_to_plotdf(ped1) -#' @seealso [plot_fromdf()] +#' plot_df <- ped_to_plotdf(ped1) +#' summary(plot_df$df) +#' plot_fromdf(plot_df$df, usr = plot_df$par_usr$usr, +#' boxh = plot_df$par_usr$boxh, boxw = plot_df$par_usr$boxw +#' ) +#' +#' @seealso +#' [plot_fromdf()] #' [ped_to_legdf()] +#' @keywords internal, Pedigree-plot #' @export setGeneric( "ped_to_plotdf", signature = "obj", @@ -33,9 +61,10 @@ setGeneric( } ) +#' @rdname ped_to_plotdf setMethod("ped_to_plotdf", "Pedigree", function( - obj, packed = FALSE, width = 10, align = c(1.5, 2), - subreg = NULL, cex = 0.5, symbolsize = cex, pconnect = 0.5, branch = 0.6, + obj, packed = TRUE, width = 6, align = c(1.5, 2), + subreg = NULL, cex = 1, symbolsize = cex, pconnect = 0.5, branch = 0.6, aff_mark = TRUE, label = NULL, ... ) { diff --git a/R/plot.R b/R/plot.R index 0c6aa693..14122f9e 100644 --- a/R/plot.R +++ b/R/plot.R @@ -8,33 +8,41 @@ NULL #' Plot Pedigrees #' #' @description -#' plot objects created with the Pedigree function +#' This function is used to plot a Pedigree object. +#' +#' It is a wrapper for [plot_fromdf()] and [ped_to_plotdf()] as well as +#' [ped_to_legdf()] if `legend = TRUE`. #' #' @details #' Two important parameters control the looks of the result. One is the user #' specified maximum width. The smallest possible width is the maximum number #' of subjects on a line, if the user's suggestion is too low it is -#' increased to 1 + that amount (to give just a little wiggle room). To make a -#' Pedigree where all children are centered under parents simply make the width -#' large enough, however, the symbols may get very small. +#' increased to 1 + that amount (to give just a little wiggle room). +#' +#' To make a Pedigree where all children are centered under parents simply +#' make the width large enough, however, the symbols may get very small. #' #' The second is `align`, a vector of 2 alignment parameters `a` and #' `b`. #' For each set of siblings at a set of locations `x` and with parents at -#' `p=c(p1,p2)` the alignment penalty is \deqn{(1/k^a)\sum{i=1}{k} [(x_i - -#' (p1+p2)/2)]^2} sum(x- mean(p))^2/(k^a) where k is the number of siblings in -#' the set. +#' `p=c(p1,p2)` the alignment penalty is +#' \deqn{(1/k^a)\sum{i=1}{k} [(x_i - (p1+p2)/2)]^2} +#' \deqn{\sum(x- \mean(p))^2/(k^a)} +#' +#' Where k is the number of siblings in the set. +#' #' When `a = 1` moving a sibship with `k` sibs one unit to the #' left or right of optimal will incur the same cost as moving one with #' only 1 or two sibs out of place. -#' If `a=0` then large sibships are harder to move than small ones, +#' +#' If `a = 0` then large sibships are harder to move than small ones, #' with the default value `a = 1.5` they are slightly easier to move #' than small ones. The rationale for the default is as long as the parents #' are somewhere between the first and last siblings the result looks fairly -#' good, so we are more flexible with the spacing of a large family. By -#' tethering all the sibs to a single spot they are kept close to each other. +#' good, so we are more flexible with the spacing of a large family. +#' By tethering all the sibs to a single spot they are kept close to each other. #' The alignment penalty for spouses is \eqn{b(x_1 - x_2)^2}{b *(x1-x2)^2}, -#' which tends to keep them together. The size of `b` controls the relative +#' which tends to keep them together. The size of `b` controls the relative #' importance of sib-parent and spouse-spouse closeness. #' #' @param x A Pedigree object. @@ -79,6 +87,7 @@ NULL #' @include plot_fromdf.R #' @aliases plot.Pedigree #' @aliases plot,Pedigree +#' @keywords Pedigree-plot #' @export #' @docType methods setMethod("plot", c(x = "Pedigree", y = "missing"), @@ -89,9 +98,6 @@ setMethod("plot", c(x = "Pedigree", y = "missing"), legend = FALSE, leg_cex = 0.8, leg_symbolsize = 0.5, leg_loc = NULL, leg_adjx = 0, leg_adjy = 0, ... ) { - lst <- ped_to_plotdf(x, packed, width, align, subreg, - cex, symbolsize, pconnect, branch, aff_mark, label, ... - ) famlist <- unique(famid(x)) if (length(famlist) > 1) { message("Multiple families present, only plotting family ", @@ -100,9 +106,13 @@ setMethod("plot", c(x = "Pedigree", y = "missing"), if (is.numeric(fam_to_plot)) { fam_to_plot <- famlist[fam_to_plot] } - lst <- lst[[fam_to_plot]] + x <- x[famid(x) == fam_to_plot] } + lst <- ped_to_plotdf(x, packed, width, align, subreg, + cex, symbolsize, pconnect, branch, aff_mark, label, ... + ) + p <- plot_fromdf(lst$df, usr = lst$par_usr$usr, title = title, ggplot_gen = ggplot_gen, boxw = lst$par_usr$boxw, boxh = lst$par_usr$boxh diff --git a/R/plot_fct.R b/R/plot_fct.R index 547ec5ac..04284535 100644 --- a/R/plot_fct.R +++ b/R/plot_fct.R @@ -2,16 +2,16 @@ #' @importFrom graphics polygon frame segments NULL -#' Routine to subset a Pedigree +#' Subset a region of a Pedigree #' -#' @param subreg 4-element vector for (min x, max x, min depth, max depth), +#' @param subreg A 4-element vector for (min x, max x, min depth, max depth), #' used to edit away portions of the plot coordinates returned by #' [align()]. #' This is useful for zooming in on a particular region of the Pedigree. #' @inheritParams findspouse #' -#' @return a Pedigree -#' @keywords internal +#' @return A Pedigree structure with the specified region +#' @keywords internal, Pedigree-plot subregion <- function(plist, subreg) { if (subreg[3] < 1 || subreg[4] > length(plist$n)) { stop("Invalid depth indices in subreg") @@ -55,7 +55,9 @@ subregion <- function(plist, subreg) { } n <- max(n2) - out <- list(n = n2[seq_len(n)], nid = nid2[, seq_len(n), drop = FALSE], + out <- list( + n = n2[seq_len(n)], + nid = nid2[, seq_len(n), drop = FALSE], pos = pos2[, seq_len(n), drop = FALSE], spouse = spouse2[, seq_len(n), drop = FALSE], fam = fam2[, seq_len(n), drop = FALSE] @@ -66,14 +68,21 @@ subregion <- function(plist, subreg) { out } # end subregion() -## Plotting function -#' Generate a circular element + +#' Circular element +#' +#' Create a list of x and y coordinates for a circle +#' with a given number of slices. #' -#' @param nslice number of slices in the circle +#' @param nslice Number of slices in the circle #' @param n Total number of points in the circle #' -#' @return a list of x and y coordinates -#' @keywords internal +#' @return A list of x and y coordinates per slice. +#' @keywords internal, Pedigree-plot +#' @examples +#' circfun(1) +#' circfun(1, 10) +#' circfun(4, 50) circfun <- function(nslice, n = 50) { nseg <- ceiling(n / nslice) # segments of arc per slice @@ -89,15 +98,24 @@ circfun <- function(nslice, n = 50) { } -## Doc: polyfun -#' Generate a polygonal element +#' Polygonal element +#' +#' Create a list of x and y coordinates for a polygon +#' with a given number of slices and a list of coordinates +#' for the polygon. #' #' @param nslice number of slices in the polygon #' @param coor Element form which to generate the polygon #' containing x and y coordinates and theta #' #' @return a list of x and y coordinates -#' @keywords internal +#' @keywords internal, Pedigree-plot +#' @examples +#' polyfun(2, list( +#' x = c(-0.5, -0.5, 0.5, 0.5), +#' y = c(-0.5, 0.5, 0.5, -0.5), +#' theta = -c(3, 5, 7, 9) * pi / 4) +#' )) polyfun <- function(nslice, coor) { # make the indirect segments view zmat <- matrix(0, ncol = 4, nrow = length(coor$x)) @@ -140,13 +158,21 @@ polyfun <- function(nslice, coor) { out } -#' Create a list of the different polygonal elements +#' List of polygonal elements +#' +#' Create a list of polygonal elements with x, y coordinates +#' and theta for the square, circle, diamond and triangle. +#' The number of slices in each element can be specified. #' #' @param nslice number of slices in each element +#' If nslice > 1, the elements are created with [polyfun()]. #' #' @return a list of polygonal elements with x, y coordinates -#' and theta -#' @keywords internal +#' and theta by slice. +#' @keywords internal, Pedigree-plot +#' @examples +#' polygons() +#' polygons(4) polygons <- function(nslice = 1) { if (nslice == 1) { polylist <- list( @@ -208,7 +234,7 @@ NULL #' @param lty line type #' #' @return Plot the segments or add it to a ggplot object -#' @keywords internal +#' @keywords internal, Pedigree-plot draw_segment <- function( x0, y0, x1, y1, p, ggplot_gen, @@ -234,7 +260,7 @@ draw_segment <- function( #' @inheritParams draw_segment #' #' @return Plot the polygon or add it to a ggplot object -#' @keywords internal +#' @keywords internal, Pedigree-plot draw_polygon <- function( x, y, p, ggplot_gen = FALSE, fill = "grey", border = NULL, density = NULL, angle = 45 @@ -248,7 +274,7 @@ draw_polygon <- function( p } -#' Draw text for a Pedigree +#' Draw texts for a Pedigree #' #' @param label text to be displayed #' @param cex character expansion of the text @@ -259,7 +285,7 @@ draw_polygon <- function( #' @inheritParams draw_polygon #' #' @return Plot the text or add it to a ggplot object -#' @keywords internal +#' @keywords internal, Pedigree-plot draw_text <- function(x, y, label, p, ggplot_gen = FALSE, cex = 1, col = NULL, adjx = 0, adjy = 0 ) { @@ -272,13 +298,12 @@ draw_text <- function(x, y, label, p, ggplot_gen = FALSE, p } -## Doc: 4 arcs for multiple instances of subj #' Draw arcs for multiple instances of a subject #' #' @inheritParams draw_segment #' #' @return Plot the arcs or add it to a ggplot object -#' @keywords internal +#' @keywords internal, Pedigree-plot draw_arc <- function(x0, y0, x1, y1, p, ggplot_gen = FALSE, lwd = 1, col = "black" ) { @@ -302,7 +327,8 @@ draw_arc <- function(x0, y0, x1, y1, p, ggplot_gen = FALSE, lwd = 1, #' #' @return a list of user coordinates, old par, box width, box height, #' label height and leg height -#' @keywords internal +#' +#' @keywords internal, Pedigree-plot set_plot_area <- function(cex, id, maxlev, xrange, symbolsize, ...) { old_par <- par(xpd = TRUE, ...) ## took out mar=mar psize <- par("pin") # plot region in inches diff --git a/R/plot_fromdf.R b/R/plot_fromdf.R index 9f1d03c5..3774d7c9 100644 --- a/R/plot_fromdf.R +++ b/R/plot_fromdf.R @@ -6,9 +6,10 @@ NULL #' Create a plot from a data.frame #' #' @description -#' This function is used to create a plot from a data.frame. If ggplot_gen is -#' set to TRUE, the plot will be generated with ggplot2 and will be returned -#' invisibly. +#' This function is used to create a plot from a data.frame. +#' +#' If `ggplot_gen = TRUE`, the plot will be generated with ggplot2 and +#' will be returned invisibly. #' #' @param df A data.frame with the following columns: #' - `type`: The type of element to plot. Can be `text`, @@ -36,17 +37,22 @@ NULL #' @param title The title of the plot. #' @param add_to_existing If `TRUE`, the plot will be added to the current #' plot. -#' @param boxh Height of the legend boxes -#' @param boxw Width of the legend boxes +#' @param boxh Height of the polygons elements +#' @param boxw Width of the polygons elements #' @inheritParams draw_segment #' @inheritParams ped_to_plotdf #' @include plot_fct.R +#' #' @examples #' data(sampleped) #' ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) #' lst <- ped_to_plotdf(ped1) -#' #plot_fromdf(lst$df, lst$usr) +#' #plot_fromdf(lst$df, lst$par_usr$usr, +#' # boxw = lst$par_usr$boxw, boxh = lst$par_usr$boxh +#' #) +#' #' @return an invisible ggplot object and a plot on the current plotting device +#' @keywords internal, Pedigree-plot #' @export plot_fromdf <- function( df, usr = NULL, title = NULL, ggplot_gen = FALSE, boxw = 1, diff --git a/R/shrink.R b/R/shrink.R index d5e19296..9097d548 100644 --- a/R/shrink.R +++ b/R/shrink.R @@ -6,6 +6,9 @@ #' Pedigree condensed to a minimally informative size for algorithms or testing #' that are limited by size of the Pedigree. #' +#' If **avail** or **affected** are not specified, they are extracted with their +#' corresponding accessors from the Ped object. +#' #' @details #' Iteratively remove subjects from the Pedigree. The random removal of members #' was previously controlled by a seed argument, but we remove this, forcing @@ -14,11 +17,14 @@ #' Next, available terminal subjects with unknown phenotype if both parents #' available. Last, iteratively shrinks Pedigrees by preferentially removing #' individuals (chosen at random if there are multiple of the same status): +#' #' 1. Subjects with unknown affected status #' 2. Subjects with unaffected affected status #' 3. Affected subjects. #' -#' @inheritParams align +#' @param ... Additional arguments +#' @param obj A Pedigree or Ped object. +#' @inheritParams Ped #' @inheritParams is_informative #' @param max_bits Optional, the bit size for which to shrink the Pedigree #' @@ -37,13 +43,16 @@ #' ped1 <- Pedigree(sampleped[sampleped$famid == '1',]) #' shrink(ped1, max_bits = 12) #' -#' @author Original by Dan Schaid, updated by Jason Sinnwell +#' @author Original by Dan Schaid, +#' updated by Jason Sinnwell and Louis Le Nézet +#' @keywords shrink #' @seealso [Pedigree()], [bit_size()] #' @export setGeneric("shrink", signature = "obj", function(obj, ...) standardGeneric("shrink") ) +#' @rdname shrink setMethod("shrink", "Pedigree", function(obj, avail = NULL, affected = NULL, max_bits = 16) { lst_trim <- shrink(ped(obj), @@ -59,8 +68,9 @@ setMethod("shrink", "Pedigree", } ) +#' @rdname shrink setMethod("shrink", "Ped", - function(obj, avail = NULL, affected = NULL, max_bits = 16, ...) { + function(obj, avail = NULL, affected = NULL, max_bits = 16) { if (is.null(avail)) { avail <- avail(obj) } @@ -165,7 +175,8 @@ setMethod("shrink", "Ped", n_final <- length(ped_trim) - obj <- list(pedObj = ped_trim, id_trim = id_trim, id_lst = id_lst, + obj <- list( + pedObj = ped_trim, id_trim = id_trim, id_lst = id_lst, bit_size = bitsize_vec, avail = avail, pedSizeOriginal = n_origin, pedSizeIntermed = n_inter, pedSizeFinal = n_final ) diff --git a/R/unrelated.R b/R/unrelated.R index 7d02b811..262029e6 100644 --- a/R/unrelated.R +++ b/R/unrelated.R @@ -50,6 +50,7 @@ setGeneric("unrelated", signature = "obj", function(obj, ...) standardGeneric("unrelated") ) +#' @rdname unrelated setMethod("unrelated", "Ped", function(obj, avail = NULL) { if (is.null(avail)) { @@ -112,6 +113,7 @@ setMethod("unrelated", "Ped", } ) +#' @rdname unrelated setMethod("unrelated", "Pedigree", function(obj, ...) { unrelated(ped(obj), ...) diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index 5ddfc768..0b3bdd2d 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -7,7 +7,7 @@ - [ ] AllAccessors.R - [ ] AllGeneric.R - [ ] AllValidity.R -- [ ] Pedixplorer-package.R +- [x] Pedixplorer-package.R - [x] align.R - [x] alignped1.R - [x] alignped2.R @@ -33,12 +33,12 @@ - [x] min_dist_inf.R - [x] norm_data.R - [x] num_child.R -- [ ] ped_to_legdf.R -- [ ] ped_to_plotdf.R -- [ ] plot.R -- [ ] plot_fct.R -- [ ] plot_fromdf.R -- [ ] shrink.R +- [x] ped_to_legdf.R +- [x] ped_to_plotdf.R +- [x] plot.R +- [x] plot_fct.R +- [x] plot_fromdf.R +- [x] shrink.R - [ ] unrelated.R - [ ] useful_inds.R - [ ] utils.R diff --git a/man/Pedixplorer_package.Rd b/man/Pedixplorer_package.Rd index c138c605..75e928d1 100644 --- a/man/Pedixplorer_package.Rd +++ b/man/Pedixplorer_package.Rd @@ -16,7 +16,8 @@ additional functionality and bug fixes. } \details{ The package download, NEWS, and README are available on CRAN: -\\url{https://cran.r-project.org/package=kinship2} +\\url{https://cran.r-project.org/package=kinship2} for the +previous version of the package. } \section{Functions}{ @@ -30,12 +31,14 @@ given identifiers, sex, affection status(es), and special relationships probability having an allele sampled from two individuals be the same via IBD. -\code{\link[=ped_to_plotdf]{ped_to_plotdf()}} : Method to transform a Pedigree -object into a dataframe of graphical elements. -Allows extra information to be included in the id under the plot symbol - -\code{\link[=plot_fromdf]{plot_fromdf()}} : Method to plot a Pedigree from a -dataframe of graphical elements. +\code{\link[=plot]{plot()}} : Method to transform a Pedigree +object into a graphical plot. +Allows extra information to be included in the id under the +plot symbol. +This method use the \code{\link[=plot_fromdf]{plot_fromdf()}} function to transform the Pedigree +object into a data frame of graphical elements, the same is done for the +legend with the \code{\link[=ped_to_legdf]{ped_to_legdf()}} function. +When done, the data frames are plotted with the \code{\link[=plot_fromdf]{plot_fromdf()}} function. \code{\link[=shrink]{shrink()}}: Shrink a Pedigree to a specific bit size, removing non-informative members first. @@ -83,4 +86,3 @@ Other contributors: } } -\keyword{internal} diff --git a/man/circfun.Rd b/man/circfun.Rd index 31819db8..06e90c6e 100644 --- a/man/circfun.Rd +++ b/man/circfun.Rd @@ -2,19 +2,26 @@ % Please edit documentation in R/plot_fct.R \name{circfun} \alias{circfun} -\title{Generate a circular element} +\title{Circular element} \usage{ circfun(nslice, n = 50) } \arguments{ -\item{nslice}{number of slices in the circle} +\item{nslice}{Number of slices in the circle} \item{n}{Total number of points in the circle} } \value{ -a list of x and y coordinates +A list of x and y coordinates per slice. } \description{ -Generate a circular element +Create a list of x and y coordinates for a circle +with a given number of slices. } -\keyword{internal} +\examples{ +circfun(1) +circfun(1, 10) +circfun(4, 50) +} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/draw_arc.Rd b/man/draw_arc.Rd index 1a0be3c5..340b73fd 100644 --- a/man/draw_arc.Rd +++ b/man/draw_arc.Rd @@ -29,4 +29,5 @@ Plot the arcs or add it to a ggplot object \description{ Draw arcs for multiple instances of a subject } -\keyword{internal} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/draw_polygon.Rd b/man/draw_polygon.Rd index 9dbdf111..92c076e9 100644 --- a/man/draw_polygon.Rd +++ b/man/draw_polygon.Rd @@ -38,4 +38,5 @@ Plot the polygon or add it to a ggplot object \description{ Draw a polygon for a Pedigree } -\keyword{internal} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/draw_segment.Rd b/man/draw_segment.Rd index 4eeee997..e3d46eb3 100644 --- a/man/draw_segment.Rd +++ b/man/draw_segment.Rd @@ -41,4 +41,5 @@ Plot the segments or add it to a ggplot object \description{ Draw segments for a Pedigree } -\keyword{internal} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/draw_text.Rd b/man/draw_text.Rd index e6476e2f..a1cb1ec2 100644 --- a/man/draw_text.Rd +++ b/man/draw_text.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plot_fct.R \name{draw_text} \alias{draw_text} -\title{Draw text for a Pedigree} +\title{Draw texts for a Pedigree} \usage{ draw_text( x, @@ -39,6 +39,7 @@ draw_text( Plot the text or add it to a ggplot object } \description{ -Draw text for a Pedigree +Draw texts for a Pedigree } -\keyword{internal} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/ped_to_legdf.Rd b/man/ped_to_legdf.Rd index 0053bee5..ae651665 100644 --- a/man/ped_to_legdf.Rd +++ b/man/ped_to_legdf.Rd @@ -1,16 +1,20 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ped_to_legdf.R -\docType{methods} \name{ped_to_legdf} \alias{ped_to_legdf} -\title{Convert a Pedigree to a legend data frame of element to plot} +\alias{ped_to_legdf,Pedigree-method} +\title{Create plotting legend data frame from a Pedigree} \usage{ -ped_to_legdf(ped, boxh = 1, boxw = 1, cex = 1, adjx = 0, adjy = 0) +ped_to_legdf(obj, ...) + +\S4method{ped_to_legdf}{Pedigree}(obj, boxh = 1, boxw = 1, cex = 1, adjx = 0, adjy = 0) } \arguments{ -\item{boxh}{Height of the legend boxes} +\item{...}{Additional arguments} + +\item{boxh}{Height of the polygons elements} -\item{boxw}{Width of the legend boxes} +\item{boxw}{Width of the polygons elements} \item{cex}{character expansion of the text} @@ -25,12 +29,32 @@ A list containing the legend data frame and the user coordinates. } \description{ Convert a Pedigree to a legend data frame for it to -be plotted with afterwards with \code{\link[=plot_fromdf]{plot_fromdf()}}. +be plotted afterwards with \code{\link[=plot_fromdf]{plot_fromdf()}}. +} +\details{ +The data frame contains the following columns: +\itemize{ +\item \code{x0}, \code{y0}, \code{x1}, \code{y1}: coordinates of the elements +\item \code{type}: type of the elements +\item \code{fill}: fill color of the elements +\item \code{border}: border color of the elements +\item \code{angle}: angle of the shading of the elements +\item \code{density}: density of the shading of the elements +\item \code{cex}: size of the elements +\item \code{label}: label of the elements +\item \code{tips}: tips of the elements (used for the tooltips) +\item \code{adjx}: horizontal text adjustment of the labels +\item \code{adjy}: vertical text adjustment of the labels +} + +All those columns are used by \code{\link[=plot_fromdf]{plot_fromdf()}} to plot the graph. } \examples{ data("sampleped") ped <- Pedigree(sampleped) leg_df <- ped_to_legdf(ped) -summary(leg_df$leg_df) -plot_fromdf(leg_df$leg_df) +summary(leg_df$df) +plot_fromdf(leg_df$df, usr = c(-1,15,0,7)) } +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/ped_to_plotdf.Rd b/man/ped_to_plotdf.Rd index 74ead83c..a5602650 100644 --- a/man/ped_to_plotdf.Rd +++ b/man/ped_to_plotdf.Rd @@ -2,16 +2,56 @@ % Please edit documentation in R/ped_to_plotdf.R \name{ped_to_plotdf} \alias{ped_to_plotdf} -\title{Convert a Pedigree to a data frame of element to plot} +\alias{ped_to_plotdf,Pedigree-method} +\title{Create plotting data frame from a Pedigree} \usage{ ped_to_plotdf(obj, ...) + +\S4method{ped_to_plotdf}{Pedigree}( + obj, + packed = TRUE, + width = 6, + align = c(1.5, 2), + subreg = NULL, + cex = 1, + symbolsize = cex, + pconnect = 0.5, + branch = 0.6, + aff_mark = TRUE, + label = NULL, + ... +) } \arguments{ \item{obj}{A Pedigree object} -\item{...}{Other arguments to pass to the function} +\item{...}{Other arguments passed to \code{\link[=par]{par()}}} + +\item{packed}{Should the Pedigree be compressed. +(i.e. allow diagonal lines connecting parents to children in order +to have a smaller overall width for the plot.)} + +\item{width}{For a packed output, the minimum width of the plot, in +inches.} + +\item{align}{For a packed Pedigree, align children under parents \code{TRUE}, +to the extent possible given the page width, or align to to the left +margin \code{FALSE}. +This argument can be a two element vector, giving the alignment +parameters, or a logical value. +If \code{TRUE}, the default is \code{c(1.5, 2)}, or if numeric the routine +\code{alignped4()} will be called.} + +\item{subreg}{A 4-element vector for (min x, max x, min depth, max depth), +used to edit away portions of the plot coordinates returned by +\code{\link[=align]{align()}}. +This is useful for zooming in on a particular region of the Pedigree.} + +\item{cex}{character expansion of the text} -\item{pconnect}{when connecting parent to children the program will try to +\item{symbolsize}{size of the symbols} + +\item{pconnect}{When connecting parent to children the program will try to make the connecting line as close to vertical as possible, subject to it lying inside the endpoints of the line that connects the children by at least \code{pconnect} people. Setting this option to a large number will @@ -20,24 +60,50 @@ force the line to connect at the midpoint of the children.} \item{branch}{defines how much angle is used to connect various levels of nuclear families.} -\item{aff_mark}{if TRUE, add a aff_mark to each box corresponding to the +\item{aff_mark}{If \code{TRUE}, add a aff_mark to each box corresponding to the value of the affection column for each filling scale.} -\item{label}{if not NULL, add a label to each box corresponding to the +\item{label}{If not \code{NULL}, add a label to each box corresponding to the value of the column given.} } \value{ A list containing the data frame and the user coordinates. } \description{ -Convert a Pedigree to a data frame of element to plot +Convert a Pedigree to a data frame with all the elements and their +characteristic for them to be plotted afterwards with \code{\link[=plot_fromdf]{plot_fromdf()}}. +} +\details{ +The data frame contains the following columns: +\itemize{ +\item \code{x0}, \code{y0}, \code{x1}, \code{y1}: coordinates of the elements +\item \code{type}: type of the elements +\item \code{fill}: fill color of the elements +\item \code{border}: border color of the elements +\item \code{angle}: angle of the shading of the elements +\item \code{density}: density of the shading of the elements +\item \code{cex}: size of the elements +\item \code{label}: label of the elements +\item \code{tips}: tips of the elements (used for the tooltips) +\item \code{adjx}: horizontal text adjustment of the labels +\item \code{adjy}: vertical text adjustment of the labels +} + +All those columns are used by \code{\link[=plot_fromdf]{plot_fromdf()}} to plot the graph. } \examples{ data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) -ped_to_plotdf(ped1) +plot_df <- ped_to_plotdf(ped1) +summary(plot_df$df) +plot_fromdf(plot_df$df, usr = plot_df$par_usr$usr, + boxh = plot_df$par_usr$boxh, boxw = plot_df$par_usr$boxw +) + } \seealso{ \code{\link[=plot_fromdf]{plot_fromdf()}} \code{\link[=ped_to_legdf]{ped_to_legdf()}} } +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/plot-Pedigree-missing-method.Rd b/man/plot-Pedigree-missing-method.Rd index 59bfc592..22027c53 100644 --- a/man/plot-Pedigree-missing-method.Rd +++ b/man/plot-Pedigree-missing-method.Rd @@ -34,10 +34,10 @@ \arguments{ \item{x}{A Pedigree object.} -\item{aff_mark}{if TRUE, add a aff_mark to each box corresponding to the +\item{aff_mark}{If \code{TRUE}, add a aff_mark to each box corresponding to the value of the affection column for each filling scale.} -\item{label}{if not NULL, add a label to each box corresponding to the +\item{label}{If not \code{NULL}, add a label to each box corresponding to the value of the column given.} \item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} @@ -66,12 +66,12 @@ inches.} \item{title}{The title of the plot.} -\item{subreg}{4-element vector for (min x, max x, min depth, max depth), +\item{subreg}{A 4-element vector for (min x, max x, min depth, max depth), used to edit away portions of the plot coordinates returned by \code{\link[=align]{align()}}. This is useful for zooming in on a particular region of the Pedigree.} -\item{pconnect}{when connecting parent to children the program will try to +\item{pconnect}{When connecting parent to children the program will try to make the connecting line as close to vertical as possible, subject to it lying inside the endpoints of the line that connects the children by at least \code{pconnect} people. Setting this option to a large number will @@ -110,33 +110,41 @@ an invisible list containing } } \description{ -plot objects created with the Pedigree function +This function is used to plot a Pedigree object. + +It is a wrapper for \code{\link[=plot_fromdf]{plot_fromdf()}} and \code{\link[=ped_to_plotdf]{ped_to_plotdf()}} as well as +\code{\link[=ped_to_legdf]{ped_to_legdf()}} if \code{legend = TRUE}. } \details{ Two important parameters control the looks of the result. One is the user specified maximum width. The smallest possible width is the maximum number of subjects on a line, if the user's suggestion is too low it is -increased to 1 + that amount (to give just a little wiggle room). To make a -Pedigree where all children are centered under parents simply make the width -large enough, however, the symbols may get very small. +increased to 1 + that amount (to give just a little wiggle room). + +To make a Pedigree where all children are centered under parents simply +make the width large enough, however, the symbols may get very small. The second is \code{align}, a vector of 2 alignment parameters \code{a} and \code{b}. For each set of siblings at a set of locations \code{x} and with parents at -\code{p=c(p1,p2)} the alignment penalty is \deqn{(1/k^a)\sum{i=1}{k} [(x_i - -(p1+p2)/2)]^2} sum(x- mean(p))^2/(k^a) where k is the number of siblings in -the set. +\code{p=c(p1,p2)} the alignment penalty is +\deqn{(1/k^a)\sum{i=1}{k} [(x_i - (p1+p2)/2)]^2} +\deqn{\sum(x- \mean(p))^2/(k^a)} + +Where k is the number of siblings in the set. + When \code{a = 1} moving a sibship with \code{k} sibs one unit to the left or right of optimal will incur the same cost as moving one with only 1 or two sibs out of place. -If \code{a=0} then large sibships are harder to move than small ones, + +If \code{a = 0} then large sibships are harder to move than small ones, with the default value \code{a = 1.5} they are slightly easier to move than small ones. The rationale for the default is as long as the parents are somewhere between the first and last siblings the result looks fairly -good, so we are more flexible with the spacing of a large family. By -tethering all the sibs to a single spot they are kept close to each other. +good, so we are more flexible with the spacing of a large family. +By tethering all the sibs to a single spot they are kept close to each other. The alignment penalty for spouses is \eqn{b(x_1 - x_2)^2}{b *(x1-x2)^2}, -which tends to keep them together. The size of \code{b} controls the relative +which tends to keep them together. The size of \code{b} controls the relative importance of sib-parent and spouse-spouse closeness. } \section{Side Effects}{ @@ -152,3 +160,4 @@ pedAll <- Pedigree(sampleped) \seealso{ \code{\link[=Pedigree]{Pedigree()}} } +\keyword{Pedigree-plot} diff --git a/man/plot_fromdf.Rd b/man/plot_fromdf.Rd index 5b3059cd..bed4a4d4 100644 --- a/man/plot_fromdf.Rd +++ b/man/plot_fromdf.Rd @@ -46,9 +46,9 @@ Only used for \code{segments} and \code{arc}. \item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} -\item{boxw}{Width of the legend boxes} +\item{boxw}{Width of the polygons elements} -\item{boxh}{Height of the legend boxes} +\item{boxh}{Height of the polygons elements} \item{add_to_existing}{If \code{TRUE}, the plot will be added to the current plot.} @@ -57,13 +57,19 @@ plot.} an invisible ggplot object and a plot on the current plotting device } \description{ -This function is used to create a plot from a data.frame. If ggplot_gen is -set to TRUE, the plot will be generated with ggplot2 and will be returned -invisibly. +This function is used to create a plot from a data.frame. + +If \code{ggplot_gen = TRUE}, the plot will be generated with ggplot2 and +will be returned invisibly. } \examples{ data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) lst <- ped_to_plotdf(ped1) -#plot_fromdf(lst$df, lst$usr) +#plot_fromdf(lst$df, lst$par_usr$usr, +# boxw = lst$par_usr$boxw, boxh = lst$par_usr$boxh +#) + } +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/polyfun.Rd b/man/polyfun.Rd index a7b086da..24bd4099 100644 --- a/man/polyfun.Rd +++ b/man/polyfun.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plot_fct.R \name{polyfun} \alias{polyfun} -\title{Generate a polygonal element} +\title{Polygonal element} \usage{ polyfun(nslice, coor) } @@ -16,6 +16,16 @@ containing x and y coordinates and theta} a list of x and y coordinates } \description{ -Generate a polygonal element +Create a list of x and y coordinates for a polygon +with a given number of slices and a list of coordinates +for the polygon. } -\keyword{internal} +\examples{ +polyfun(2, list( + x = c(-0.5, -0.5, 0.5, 0.5), + y = c(-0.5, 0.5, 0.5, -0.5), + theta = -c(3, 5, 7, 9) * pi / 4) +)) +} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/polygons.Rd b/man/polygons.Rd index 7a4ed743..1d006d6e 100644 --- a/man/polygons.Rd +++ b/man/polygons.Rd @@ -2,18 +2,26 @@ % Please edit documentation in R/plot_fct.R \name{polygons} \alias{polygons} -\title{Create a list of the different polygonal elements} +\title{List of polygonal elements} \usage{ polygons(nslice = 1) } \arguments{ -\item{nslice}{number of slices in each element} +\item{nslice}{number of slices in each element +If nslice > 1, the elements are created with \code{\link[=polyfun]{polyfun()}}.} } \value{ a list of polygonal elements with x, y coordinates -and theta +and theta by slice. } \description{ -Create a list of the different polygonal elements +Create a list of polygonal elements with x, y coordinates +and theta for the square, circle, diamond and triangle. +The number of slices in each element can be specified. } -\keyword{internal} +\examples{ +polygons() +polygons(4) +} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/set_plot_area.Rd b/man/set_plot_area.Rd index 4d9f0bbc..47d2e0b4 100644 --- a/man/set_plot_area.Rd +++ b/man/set_plot_area.Rd @@ -24,4 +24,5 @@ label height and leg height \description{ Set plotting area } -\keyword{internal} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/shrink.Rd b/man/shrink.Rd index 47dbfb2d..b6fd49ac 100644 --- a/man/shrink.Rd +++ b/man/shrink.Rd @@ -2,14 +2,28 @@ % Please edit documentation in R/shrink.R \name{shrink} \alias{shrink} +\alias{shrink,Pedigree-method} +\alias{shrink,Ped-method} \title{Shrink Pedigree object} \usage{ shrink(obj, ...) + +\S4method{shrink}{Pedigree}(obj, avail = NULL, affected = NULL, max_bits = 16) + +\S4method{shrink}{Ped}(obj, avail = NULL, affected = NULL, max_bits = 16) } \arguments{ -\item{obj}{A Pedigree object} +\item{obj}{A Pedigree or Ped object.} + +\item{...}{Additional arguments} -\item{...}{Other arguments to pass to the function} +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} + +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} \item{max_bits}{Optional, the bit size for which to shrink the Pedigree} } @@ -31,6 +45,9 @@ Shrink Pedigree object to specified bit size with priority placed on trimming uninformative subjects. The algorithm is useful for getting a Pedigree condensed to a minimally informative size for algorithms or testing that are limited by size of the Pedigree. + +If \strong{avail} or \strong{affected} are not specified, they are extracted with their +corresponding accessors from the Ped object. } \details{ Iteratively remove subjects from the Pedigree. The random removal of members @@ -56,5 +73,7 @@ shrink(ped1, max_bits = 12) \code{\link[=Pedigree]{Pedigree()}}, \code{\link[=bit_size]{bit_size()}} } \author{ -Original by Dan Schaid, updated by Jason Sinnwell +Original by Dan Schaid, +updated by Jason Sinnwell and Louis Le Nézet } +\keyword{shrink} diff --git a/man/subregion.Rd b/man/subregion.Rd index 05711df1..184a2fd4 100644 --- a/man/subregion.Rd +++ b/man/subregion.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plot_fct.R \name{subregion} \alias{subregion} -\title{Routine to subset a Pedigree} +\title{Subset a region of a Pedigree} \usage{ subregion(plist, subreg) } @@ -10,15 +10,16 @@ subregion(plist, subreg) \item{plist}{The alignment structure representing the Pedigree layout. See \code{\link[=align]{align()}} for details.} -\item{subreg}{4-element vector for (min x, max x, min depth, max depth), +\item{subreg}{A 4-element vector for (min x, max x, min depth, max depth), used to edit away portions of the plot coordinates returned by \code{\link[=align]{align()}}. This is useful for zooming in on a particular region of the Pedigree.} } \value{ -a Pedigree +A Pedigree structure with the specified region } \description{ -Routine to subset a Pedigree +Subset a region of a Pedigree } -\keyword{internal} +\keyword{Pedigree-plot} +\keyword{internal,} diff --git a/man/unrelated.Rd b/man/unrelated.Rd index 65e184d9..1a66ad80 100644 --- a/man/unrelated.Rd +++ b/man/unrelated.Rd @@ -2,14 +2,24 @@ % Please edit documentation in R/unrelated.R \name{unrelated} \alias{unrelated} +\alias{unrelated,Ped-method} +\alias{unrelated,Pedigree-method} \title{Get unrelated subjects} \usage{ unrelated(obj, ...) + +\S4method{unrelated}{Ped}(obj, avail = NULL) + +\S4method{unrelated}{Pedigree}(obj, ...) } \arguments{ \item{obj}{A Pedigree object} \item{...}{Other arguments to pass to the function} + +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} } \value{ A vector of the ids of subjects that are unrelated. From eaba434539538d36879d175fdaaa448ec1523b5e Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 16:51:52 +0100 Subject: [PATCH 072/111] Update code: fixed typos and improved documentation --- NAMESPACE | 1 - R/shrink.R | 2 +- R/unrelated.R | 28 ++++++------- R/useful_inds.R | 37 ++++++----------- R/utils.R | 82 ++++++++++++++++++++++++------------- devel/documentation/todo.md | 6 +-- man/anchor_to_factor.Rd | 2 +- man/check_columns.Rd | 9 ++-- man/check_num_na.Rd | 8 ++-- man/is_disconnected.Rd | 23 +++++++++-- man/is_founder.Rd | 22 ++++++++-- man/is_parent.Rd | 29 +++++++++++-- man/shrink.Rd | 2 +- man/unrelated.Rd | 26 ++++++------ man/useful_inds.Rd | 18 ++++---- man/vect_to_binary.Rd | 18 +++++--- 16 files changed, 192 insertions(+), 121 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 2e74fd24..6adf18a6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -85,7 +85,6 @@ exportMethods(plot) exportMethods(show) exportMethods(subset) exportMethods(summary) -exportMethods(useful_inds) importFrom(Matrix,bdiag) importFrom(Matrix,forceSymmetric) importFrom(Matrix,sparseMatrix) diff --git a/R/shrink.R b/R/shrink.R index 9097d548..3f33a982 100644 --- a/R/shrink.R +++ b/R/shrink.R @@ -6,7 +6,7 @@ #' Pedigree condensed to a minimally informative size for algorithms or testing #' that are limited by size of the Pedigree. #' -#' If **avail** or **affected** are not specified, they are extracted with their +#' If **avail** or **affected** are `NULL`, they are extracted with their #' corresponding accessors from the Ped object. #' #' @details diff --git a/R/unrelated.R b/R/unrelated.R index 262029e6..a481b2cd 100644 --- a/R/unrelated.R +++ b/R/unrelated.R @@ -1,10 +1,7 @@ #' @importFrom stats runif NULL -# Automatically generated from all.nw using noweb Authors: Dan Schaid, Shannon -# McDonnell Updated by Jason Sinnwell - -#' Get unrelated subjects +#' Find Unrelated subjects #' #' @description #' Determine set of maximum number of unrelated available subjects from a @@ -13,7 +10,8 @@ NULL #' @details #' Determine set of maximum number of unrelated available subjects from a #' Pedigree, given vectors id, father, and mother for a Pedigree structure, and -#' status vector of T/F for whether each subject is available (e.g. has DNA) +#' status vector of `TRUE` / `FALSE` for whether each subject is +#' available (e.g. has DNA). #' #' This is a greedy algorithm that uses the kinship matrix, sequentially #' removing rows/cols that are non-zero for subjects that have the most number @@ -23,28 +21,26 @@ NULL #' zeros for rows, a random choice is made. Hence, running this function #' multiple times can return different sets of unrelated subjects. #' -#' @inheritParams align -#' @inheritParams is_informative +#' If **avail** is `NULL`, it is extracted with its +#' corresponding accessor from the Ped object. +#' +#' @inheritParams shrink #' #' @return A vector of the ids of subjects that are unrelated. #' @examples #' data(sampleped) #' fam1 <- sampleped[sampleped$famid == 1, ] -#' -#' #' ped1 <- Pedigree(fam1) -#' -#' ## to see plot: -#' id1 <- unrelated(ped1) -#' -#' id1 +#' unrelated(ped1) #' ## some possible vectors #' ## [1] '110' '113' '133' '109' #' ## [1] '113' '118' '141' '109' #' ## [1] '113' '118' '140' '109' #' ## [1] '110' '113' '116' '109' #' ## [1] '113' '133' '141' '109' +#' +#' @author Dan Schaid and Shannon McDonnell updated by Jason Sinnwell #' @export setGeneric("unrelated", signature = "obj", function(obj, ...) standardGeneric("unrelated") @@ -115,7 +111,7 @@ setMethod("unrelated", "Ped", #' @rdname unrelated setMethod("unrelated", "Pedigree", - function(obj, ...) { - unrelated(ped(obj), ...) + function(obj, avail = NULL) { + unrelated(ped(obj), avail = avail) } ) diff --git a/R/useful_inds.R b/R/useful_inds.R index b2222a1b..7642a94f 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -1,43 +1,34 @@ -#' Compute the usefulness of individuals +#' Usefulness of individuals #' -#' @description Check for usefulness of individuals +#' @description Compute the usefulness of individuals #' #' @details Check for the informativeness of the individuals based on the #' informative parameter given, the number of children and the usefulness -#' of their parents. A `useful` column is added to the dataframe with the +#' of their parents. A `useful` slot is added to the Ped object with the #' usefulness of the individual. This boolean is hereditary. #' #' @param num_child_tot A numeric vector of the number of children of each #' individuals #' @param keep_infos Boolean to indicate if individuals with unknown status #' but available or reverse should be kept +#' @inheritParams Ped #' @inheritParams is_informative -#' @inheritParams num_child -#' @inheritParams kinship -#' @inheritParams is_parent #' #' @return #' ## When obj is a vector #' A vector of useful individuals identifiers #' -#' ## When obj is a Pedigree -#' The Pedigree object with a new column named 'useful' containing 1 for -#' useful individuals and 0 otherwise. -#' @examples -#' data(sampleped) -#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -#' ped1 <- num_child(ped1) -#' useful_inds(ped1, informative = "AvAf")$ped +#' ## When obj is a Pedigree or Ped object +#' The Pedigree or Ped object with the slot 'useful' containing `TRUE` for +#' useful individuals and `FALSE` otherwise. +#' @keywords shrink #' @export setGeneric("useful_inds", signature = "obj", function(obj, ...) standardGeneric("useful_inds") ) #' @include is_informative.R -#' @export #' @rdname useful_inds -#' @docType methods -#' @aliases useful_inds,character setMethod("useful_inds", "character", function(obj, dadid, momid, avail, affected, num_child_tot, informative = "AvAf", keep_infos = FALSE @@ -80,11 +71,13 @@ setMethod("useful_inds", "character", } ) -#' @docType methods -#' @aliases useful_inds,Pedigree -#' @export #' @rdname useful_inds #' @param reset Boolean to indicate if the `useful` column should be reset +#' @examples +#' data(sampleped) +#' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) +#' ped1 <- num_child(ped1) +#' ped(useful_inds(ped1, informative = "AvAf")) setMethod("useful_inds", "Pedigree", function(obj, informative = "AvAf", keep_infos = FALSE, reset = FALSE ) { @@ -97,11 +90,7 @@ setMethod("useful_inds", "Pedigree", function(obj, obj }) -#' @docType methods -#' @aliases useful_inds,Pedigree -#' @export #' @rdname useful_inds -#' @param reset Boolean to indicate if the `useful` column should be reset setMethod("useful_inds", "Ped", function(obj, informative = "AvAf", keep_infos = FALSE, reset = FALSE ) { diff --git a/R/utils.R b/R/utils.R index e2795792..bc55cb2f 100644 --- a/R/utils.R +++ b/R/utils.R @@ -1,7 +1,7 @@ #' @importFrom dplyr select one_of %>% NULL -#' Check for columns name usage +#' Check columns presence in a dataframe #' #' @description Check for presence / absence of columns names #' depending on their need @@ -38,8 +38,11 @@ NULL #' ColU1 = 'B', ColU2 = '1', #' ColTU1 = 'A', ColTU2 = 3, #' ColNR1 = 4, ColNR2 = 5) -#' tryCatch(check_columns(df, c('ColN1', 'ColN2'), c('ColU1', 'ColU2'), -#' c('ColTU1', 'ColTU2')), error = function(e) print(e)) +#' tryCatch( +#' check_columns(df, +#' c('ColN1', 'ColN2'), c('ColU1', 'ColU2'), +#' c('ColTU1', 'ColTU2') +#' ), error = function(e) print(e)) #' #' @keywords internal check_columns <- function( @@ -125,18 +128,18 @@ check_columns <- function( #'@importFrom stringr str_detect NULL -#' Check is numeric +#' Is numeric or NA #' #' @description Check if a variable given is numeric or NA #' -#' @details Check if the values in `var` are numeric or if they are -#' NA in the case that `na_as_num` is set to TRUE. +#' @details Check if the values in **var** are numeric or if they are +#' `NA` in the case that `na_as_num` is set to TRUE. #' #' @param var Vector of value to test #' @param na_as_num Boolean defining if the `NA` string should be #' considered as numerical values #' -#' @return A vector of boolean of the same size as `var` +#' @return A vector of boolean of the same size as **var** #' @keywords internal check_num_na <- function(var, na_as_num = TRUE) { # Should the NA value considered as numeric values @@ -150,14 +153,14 @@ check_num_na <- function(var, na_as_num = TRUE) { } -#' Check wich individuals are parents +#' Are individuals parents #' #' @description Check which individuals are parents. #' -#' @param obj A vector of each subjects identifiers +#' @param obj A vector of each subjects identifiers or a Ped object #' @inheritParams Ped #' -#' @return A vector of boolean of the same size as `id` +#' @return A vector of boolean of the same size as **obj** #' with TRUE if the individual is a parent and FALSE otherwise #' @inheritParams Ped #' @keywords internal @@ -165,6 +168,9 @@ setGeneric("is_parent", signature = "obj", function(obj, ...) standardGeneric("is_parent") ) +#' @rdname is_parent +#' @examples +#' is_parent(c("1", "2", "3", "4"), c("3", "3", NA, NA), c("4", "4", NA, NA)) setMethod("is_parent", "character_OR_integer", function(obj, dadid, momid, missid = NA_character_) { # determine subjects who are parents assume input of @@ -180,41 +186,56 @@ setMethod("is_parent", "character_OR_integer", } ) +#' @rdname is_parent +#' @examples +#' +#' data(sampleped) +#' ped <- Pedigree(sampleped) +#' is_parent(ped(ped)) setMethod("is_parent", "Ped", function(obj, missid = NA_character_) { is_parent(id(obj), dadid(obj), momid(obj), missid) } ) -#' Check wich individuals are founders +#' Are individuals founders #' #' @description Check which individuals are founders. #' -#' @inheritParams is_parent +#' @inheritParams Ped #' -#' @return A vector of boolean of the same size as `dadid` and `momid` -#' with TRUE if the individual has no parents (i.e is a founder) and FALSE -#' otherwise. +#' @return A vector of boolean of the same size as **dadid** and **momid** +#' with `TRUE` if the individual has no parents (i.e is a founder) and +#' `FALSE` otherwise. #' +#' @examples +#' is_founder(c("3", "3", NA, NA), c("4", "4", NA, NA)) #' @keywords internal is_founder <- function(momid, dadid, missid = NA_character_) { (dadid %in% missid) & (momid %in% missid) } -#' Check wich individuals are disconnected +#' Are individuals disconnected #' #' @description Check which individuals are disconnected. #' #' @details An individuals is considered disconnected if the kinship with -#' all the other individuals is 0. +#' all the other individuals is `0`. #' -#' @inheritParams is_parent +#' @inheritParams Ped #' -#' @return A vector of boolean of the same size as `id` -#' with TRUE if the individual is disconnected and FALSE otherwise +#' @return A vector of boolean of the same size as **id** +#' with `TRUE` if the individual is disconnected and +#' `FALSE` otherwise #' #' @include kinship.R #' @keywords internal +#' @examples +#' is_disconnected( +#' c("1", "2", "3", "4", "5"), +#' c("3", "3", NA, NA, NA), +#' c("4", "4", NA, NA, NA) +#' ) is_disconnected <- function(id, dadid, momid) { # check to see if any subjects are disconnected in Pedigree by checking for # kinship = 0 for all subjects excluding self @@ -287,21 +308,26 @@ rel_code_to_factor <- function(code) { code <- factor(code, codes, ordered = TRUE) code } -TRUE #' Vector variable to binary vector #' +#' @description Transform a vector to a binary vector. +#' All values that are not `0`, `1`, `TRUE`, `FALSE`, or `NA` +#' are transformed to `NA`. +#' #' @param vect A character, factor, logical or numeric vector corresponding to -#' a binary variable (i.e. 0 or 1). +#' a binary variable (i.e. `0` or `1`). #' The following values are recognized: #' - character() or factor() : "TRUE", "FALSE", "0", "1", "NA" will be -#' respectively transformed to 1, 0, 0, 1, NA. +#' respectively transformed to `1`, `0`, `0`, `1`, `NA`. #' Spaces and case are ignored. #' All other values will be transformed to NA. -#' - numeric() : 0 and 1 are kept, all other values are transformed to NA. -#' - logical() : TRUE and FALSE are tansformed to 1 and 0. -#' -#' @return numeric binary vector of the same size as `vect` with 0 and 1 +#' - numeric() : `0` and `1` are kept, all other values are transformed to NA. +#' - logical() : `TRUE` and `FALSE` are tansformed to `1` and `0`. +#' @param logical Boolean defining if the output should be a logical vector +#' instead of a numeric vector (i.e. `0` and `1` becomes `FALSE` and `TRUE). +#' @return numeric binary vector of the same size as **vect** +#' with `0` and `1` #' @examples #' vect_to_binary( #' c(0, 1, 2, 3.6, "TRUE", "FALSE", "0", "1", "NA", "B", TRUE, FALSE, NA) @@ -336,7 +362,7 @@ vect_to_binary <- function(vect, logical = FALSE) { #' - character() or factor() : "0", "1", "2", "left", "right", "either" #' - numeric() : 1 = "left", 2 = "right", 0 = "either" #' -#' @return an ordered factor vector containing the transformed variable +#' @return An ordered factor vector containing the transformed variable #' "either" < "left" < "right" #' @examples #' anchor_to_factor(c(1, 2, 0, "left", "right", "either")) diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index 0b3bdd2d..3cd5256b 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -39,9 +39,9 @@ - [x] plot_fct.R - [x] plot_fromdf.R - [x] shrink.R -- [ ] unrelated.R -- [ ] useful_inds.R -- [ ] utils.R +- [x] unrelated.R +- [x] useful_inds.R +- [x] utils.R ## For all class diff --git a/man/anchor_to_factor.Rd b/man/anchor_to_factor.Rd index 7d7c33ae..b20ea140 100644 --- a/man/anchor_to_factor.Rd +++ b/man/anchor_to_factor.Rd @@ -15,7 +15,7 @@ the anchor of the individuals. The following values are recognized: }} } \value{ -an ordered factor vector containing the transformed variable +An ordered factor vector containing the transformed variable "either" < "left" < "right" } \description{ diff --git a/man/check_columns.Rd b/man/check_columns.Rd index 89250e3d..0791d4df 100644 --- a/man/check_columns.Rd +++ b/man/check_columns.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/utils.R \name{check_columns} \alias{check_columns} -\title{Check for columns name usage} +\title{Check columns presence in a dataframe} \usage{ check_columns( df, @@ -65,8 +65,11 @@ df <- data.frame(ColN1 = c(1, 2), ColN2 = 4, ColU1 = 'B', ColU2 = '1', ColTU1 = 'A', ColTU2 = 3, ColNR1 = 4, ColNR2 = 5) -tryCatch(check_columns(df, c('ColN1', 'ColN2'), c('ColU1', 'ColU2'), - c('ColTU1', 'ColTU2')), error = function(e) print(e)) +tryCatch( + check_columns(df, + c('ColN1', 'ColN2'), c('ColU1', 'ColU2'), + c('ColTU1', 'ColTU2') +), error = function(e) print(e)) } \keyword{internal} diff --git a/man/check_num_na.Rd b/man/check_num_na.Rd index 3e0627cd..0ee6d4c3 100644 --- a/man/check_num_na.Rd +++ b/man/check_num_na.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/utils.R \name{check_num_na} \alias{check_num_na} -\title{Check is numeric} +\title{Is numeric or NA} \usage{ check_num_na(var, na_as_num = TRUE) } @@ -13,13 +13,13 @@ check_num_na(var, na_as_num = TRUE) considered as numerical values} } \value{ -A vector of boolean of the same size as \code{var} +A vector of boolean of the same size as \strong{var} } \description{ Check if a variable given is numeric or NA } \details{ -Check if the values in \code{var} are numeric or if they are -NA in the case that \code{na_as_num} is set to TRUE. +Check if the values in \strong{var} are numeric or if they are +\code{NA} in the case that \code{na_as_num} is set to TRUE. } \keyword{internal} diff --git a/man/is_disconnected.Rd b/man/is_disconnected.Rd index 3c1d749b..15d8f298 100644 --- a/man/is_disconnected.Rd +++ b/man/is_disconnected.Rd @@ -2,19 +2,34 @@ % Please edit documentation in R/utils.R \name{is_disconnected} \alias{is_disconnected} -\title{Check wich individuals are disconnected} +\title{Are individuals disconnected} \usage{ is_disconnected(id, dadid, momid) } +\arguments{ +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} +} \value{ -A vector of boolean of the same size as \code{id} -with TRUE if the individual is disconnected and FALSE otherwise +A vector of boolean of the same size as \strong{id} +with \code{TRUE} if the individual is disconnected and +\code{FALSE} otherwise } \description{ Check which individuals are disconnected. } \details{ An individuals is considered disconnected if the kinship with -all the other individuals is 0. +all the other individuals is \code{0}. +} +\examples{ +is_disconnected( + c("1", "2", "3", "4", "5"), + c("3", "3", NA, NA, NA), + c("4", "4", NA, NA, NA) +) } \keyword{internal} diff --git a/man/is_founder.Rd b/man/is_founder.Rd index 7ef06a95..c5c5b154 100644 --- a/man/is_founder.Rd +++ b/man/is_founder.Rd @@ -2,16 +2,30 @@ % Please edit documentation in R/utils.R \name{is_founder} \alias{is_founder} -\title{Check wich individuals are founders} +\title{Are individuals founders} \usage{ is_founder(momid, dadid, missid = NA_character_) } +\arguments{ +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} +} \value{ -A vector of boolean of the same size as \code{dadid} and \code{momid} -with TRUE if the individual has no parents (i.e is a founder) and FALSE -otherwise. +A vector of boolean of the same size as \strong{dadid} and \strong{momid} +with \code{TRUE} if the individual has no parents (i.e is a founder) and +\code{FALSE} otherwise. } \description{ Check which individuals are founders. } +\examples{ +is_founder(c("3", "3", NA, NA), c("4", "4", NA, NA)) +} \keyword{internal} diff --git a/man/is_parent.Rd b/man/is_parent.Rd index 12a9dfef..70f81ed0 100644 --- a/man/is_parent.Rd +++ b/man/is_parent.Rd @@ -2,18 +2,41 @@ % Please edit documentation in R/utils.R \name{is_parent} \alias{is_parent} -\title{Check wich individuals are parents} +\alias{is_parent,character_OR_integer-method} +\alias{is_parent,Ped-method} +\title{Are individuals parents} \usage{ is_parent(obj, ...) + +\S4method{is_parent}{character_OR_integer}(obj, dadid, momid, missid = NA_character_) + +\S4method{is_parent}{Ped}(obj, missid = NA_character_) } \arguments{ -\item{obj}{A vector of each subjects identifiers} +\item{obj}{A vector of each subjects identifiers or a Ped object} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} } \value{ -A vector of boolean of the same size as \code{id} +A vector of boolean of the same size as \strong{obj} with TRUE if the individual is a parent and FALSE otherwise } \description{ Check which individuals are parents. } +\examples{ +is_parent(c("1", "2", "3", "4"), c("3", "3", NA, NA), c("4", "4", NA, NA)) + +data(sampleped) +ped <- Pedigree(sampleped) +is_parent(ped(ped)) +} \keyword{internal} diff --git a/man/shrink.Rd b/man/shrink.Rd index b6fd49ac..07fe7e48 100644 --- a/man/shrink.Rd +++ b/man/shrink.Rd @@ -46,7 +46,7 @@ trimming uninformative subjects. The algorithm is useful for getting a Pedigree condensed to a minimally informative size for algorithms or testing that are limited by size of the Pedigree. -If \strong{avail} or \strong{affected} are not specified, they are extracted with their +If \strong{avail} or \strong{affected} are \code{NULL}, they are extracted with their corresponding accessors from the Ped object. } \details{ diff --git a/man/unrelated.Rd b/man/unrelated.Rd index 1a66ad80..46412942 100644 --- a/man/unrelated.Rd +++ b/man/unrelated.Rd @@ -4,18 +4,18 @@ \alias{unrelated} \alias{unrelated,Ped-method} \alias{unrelated,Pedigree-method} -\title{Get unrelated subjects} +\title{Find Unrelated subjects} \usage{ unrelated(obj, ...) \S4method{unrelated}{Ped}(obj, avail = NULL) -\S4method{unrelated}{Pedigree}(obj, ...) +\S4method{unrelated}{Pedigree}(obj, avail = NULL) } \arguments{ -\item{obj}{A Pedigree object} +\item{obj}{A Pedigree or Ped object.} -\item{...}{Other arguments to pass to the function} +\item{...}{Additional arguments} \item{avail}{A logical vector with the availability status of the individuals @@ -31,7 +31,8 @@ Pedigree. \details{ Determine set of maximum number of unrelated available subjects from a Pedigree, given vectors id, father, and mother for a Pedigree structure, and -status vector of T/F for whether each subject is available (e.g. has DNA) +status vector of \code{TRUE} / \code{FALSE} for whether each subject is +available (e.g. has DNA). This is a greedy algorithm that uses the kinship matrix, sequentially removing rows/cols that are non-zero for subjects that have the most number @@ -40,22 +41,23 @@ that has the most number of zeros, and then remove any cols and their corresponding rows that are non-zero. To account for ties of the count of zeros for rows, a random choice is made. Hence, running this function multiple times can return different sets of unrelated subjects. + +If \strong{avail} is \code{NULL}, it is extracted with its +corresponding accessor from the Ped object. } \examples{ data(sampleped) fam1 <- sampleped[sampleped$famid == 1, ] - - ped1 <- Pedigree(fam1) - -## to see plot: -id1 <- unrelated(ped1) - -id1 +unrelated(ped1) ## some possible vectors ## [1] '110' '113' '133' '109' ## [1] '113' '118' '141' '109' ## [1] '113' '118' '140' '109' ## [1] '110' '113' '116' '109' ## [1] '113' '133' '141' '109' + +} +\author{ +Dan Schaid and Shannon McDonnell updated by Jason Sinnwell } diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index a37ef364..b625355a 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -1,14 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/useful_inds.R -\docType{methods} \name{useful_inds} \alias{useful_inds} \alias{useful_inds,character-method} -\alias{useful_inds,character} \alias{useful_inds,Pedigree-method} -\alias{useful_inds,Pedigree} \alias{useful_inds,Ped-method} -\title{Compute the usefulness of individuals} +\title{Usefulness of individuals} \usage{ useful_inds(obj, ...) @@ -72,24 +69,25 @@ but available or reverse should be kept} A vector of useful individuals identifiers } -\subsection{When obj is a Pedigree}{ +\subsection{When obj is a Pedigree or Ped object}{ -The Pedigree object with a new column named 'useful' containing 1 for -useful individuals and 0 otherwise. +The Pedigree or Ped object with the slot 'useful' containing \code{TRUE} for +useful individuals and \code{FALSE} otherwise. } } \description{ -Check for usefulness of individuals +Compute the usefulness of individuals } \details{ Check for the informativeness of the individuals based on the informative parameter given, the number of children and the usefulness -of their parents. A \code{useful} column is added to the dataframe with the +of their parents. A \code{useful} slot is added to the Ped object with the usefulness of the individual. This boolean is hereditary. } \examples{ data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) ped1 <- num_child(ped1) -useful_inds(ped1, informative = "AvAf")$ped +ped(useful_inds(ped1, informative = "AvAf")) } +\keyword{shrink} diff --git a/man/vect_to_binary.Rd b/man/vect_to_binary.Rd index 45d0e5a1..16aaf7f0 100644 --- a/man/vect_to_binary.Rd +++ b/man/vect_to_binary.Rd @@ -8,22 +8,28 @@ vect_to_binary(vect, logical = FALSE) } \arguments{ \item{vect}{A character, factor, logical or numeric vector corresponding to -a binary variable (i.e. 0 or 1). +a binary variable (i.e. \code{0} or \code{1}). The following values are recognized: \itemize{ \item character() or factor() : "TRUE", "FALSE", "0", "1", "NA" will be -respectively transformed to 1, 0, 0, 1, NA. +respectively transformed to \code{1}, \code{0}, \code{0}, \code{1}, \code{NA}. Spaces and case are ignored. All other values will be transformed to NA. -\item numeric() : 0 and 1 are kept, all other values are transformed to NA. -\item logical() : TRUE and FALSE are tansformed to 1 and 0. +\item numeric() : \code{0} and \code{1} are kept, all other values are transformed to NA. +\item logical() : \code{TRUE} and \code{FALSE} are tansformed to \code{1} and \code{0}. }} + +\item{logical}{Boolean defining if the output should be a logical vector +instead of a numeric vector (i.e. \code{0} and \code{1} becomes \code{FALSE} and `TRUE).} } \value{ -numeric binary vector of the same size as \code{vect} with 0 and 1 +numeric binary vector of the same size as \strong{vect} +with \code{0} and \code{1} } \description{ -Vector variable to binary vector +Transform a vector to a binary vector. +All values that are not \code{0}, \code{1}, \code{TRUE}, \code{FALSE}, or \code{NA} +are transformed to \code{NA}. } \examples{ vect_to_binary( From 319acea91544113557a098aa932a02a330051132 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 19:11:18 +0100 Subject: [PATCH 073/111] Fix Hints for list with only one component --- R/AllConstructor.R | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 6b877aa9..d0aa1cbc 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -342,12 +342,22 @@ setMethod("Hints", setMethod("Hints", signature(horder = "list", spouse = "missing_OR_NULL"), function(horder, spouse) { - if (any(!c("horder", "spouse") %in% names(horder))) { - stop("hints is a list,", - "but doesn't contains either horder or spouse slot" + if (all(!c("horder", "spouse") %in% names(horder))) { + stop("hints is a list, ", + "but doesn't contains horder or spouse slot" ) } - Hints(horder$horder, horder$spouse) + if ("horder" %in% names(horder)) { + horder <- horder$horder + } else { + horder <- NULL + } + if ("spouse" %in% names(horder)) { + spouse <- horder$spouse + } else { + spouse <- NULL + } + Hints(horder, spouse) } ) From e4c9250307bf84d24fa273ed0fbba290061311eb Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 19:11:55 +0100 Subject: [PATCH 074/111] Fix bug with quadruplet, triplet completion --- R/auto_hint.R | 11 ++++++----- vignettes/kinship_details.Rmd | 28 ++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/R/auto_hint.R b/R/auto_hint.R index ee602e49..dc47b31f 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -203,8 +203,7 @@ duporder <- function(idlist, plist, lev, obj) { #' Get twin relationships #' #' @details This routine function determine the twin relationships -#' in a Pedigree. It complete the missing twin relationships for -#' triplets, quads, etc. It also determine the order of the twins +#' in a Pedigree. It determine the order of the twins #' in the Pedigree. #' It is used by `auto_hint()`. #' @@ -228,10 +227,11 @@ get_twin_rel <- function(obj) { twinord <- setNames(rep(1, n), id(ped(obj))) twinrel <- NULL - if (!is.null(relation) && any(relation[, 3] < 4)) { + if (!is.null(relation) && any(relation$code < 4)) { ## Select only siblings relationships - temp <- (relation[, 3] < 4) - twinlist <- unique(c(relation[temp, seq_len(2)])) # list of twin id's + temp <- (relation$code < 4) + ## list of twin id's + twinlist <- unique(unlist(c(relation[temp, seq_len(2)]))) twinrel <- relation[temp, , drop = FALSE] for (i in 2:length(twinlist)) { # Now, for any pair of twins on a line of twinrel, give both @@ -246,6 +246,7 @@ get_twin_rel <- function(obj) { twinord[twinrel[, 2]], twinord[twinrel[, 1]] + 1 ) + twinrel[, 1] <- twinset[twinrel[, 1]] } } list(twinset = twinset, twinrel = twinrel, twinord = twinord) diff --git a/vignettes/kinship_details.Rmd b/vignettes/kinship_details.Rmd index 4f141461..26fea1a1 100644 --- a/vignettes/kinship_details.Rmd +++ b/vignettes/kinship_details.Rmd @@ -105,7 +105,7 @@ a for loop containing operations on single rows/columns. At one point below we use a vectorized version. It looks like the snippet below -```{r, eval=FALSE} +```{r, kinship_algo, eval=FALSE} for (g in 1:max(depth)) { indx <- which(depth == g) kmat[indx, ] <- (kmat[mother[indx], ] + kmat[father[indx], ]) / 2 @@ -179,6 +179,12 @@ If all of the subject ids are unique, across all families, the final matrix is labeled with the subject id, otherwise it is labeled with family/subject. +```{r, kinship} +data(sampleped) +ped <- Pedigree(sampleped) +kinship(ped) +``` + ## MakeKinship The older $makekinship$ function, @@ -204,7 +210,7 @@ Consider the following rather difficult example: | id1|id2| |----|---| | 1 | 2 | -| 1 | 3 | +| 2 | 3 | | 5 | 6 | | 3 | 7 | | 10 | 9 | @@ -224,6 +230,24 @@ Finally, remove the rows that are identical. The result is a set of all pairs of observations in the matrix that correspond to monozygotic pairs. +```{r, kinship} +df <- data.frame( + id = c(1, 2, 3, 4, 5, 6, 7, 8), + dadid = c(4, 4, 4, NA, 4, 4, 4, NA), + momid = c(8, 8, 8, NA, 8, 8, 8, NA), + sex = c(1, 1, 1, 1, 2, 2, 1, 2) +) +rel <- data.frame( + id1 = c(1, 3, 6, 7), + id2 = c(2, 2, 5, 3), + code = c(1, 1, 1, 1) +) +ped <- Pedigree(df, rel) +plot(ped) +twins <- c(1, 2, 3, 7, 5, 6) +kinship(ped)[twins, twins] +``` + Session information =================== From 00eb3e04380eb0f506c4c49f435f6761cb2f7820 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 19:12:09 +0100 Subject: [PATCH 075/111] Make vignette works --- vignettes/alignment_details.Rmd | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/vignettes/alignment_details.Rmd b/vignettes/alignment_details.Rmd index 8b3774a4..32a14326 100644 --- a/vignettes/alignment_details.Rmd +++ b/vignettes/alignment_details.Rmd @@ -147,10 +147,13 @@ test1 <- data.frame(id = 1:11, dadid = c(0, 0, 1, 1, 1, 0, 0, 6, 6, 6, 9), momid = c(0, 0, 2, 2, 2, 0, 0, 7, 7, 7, 4) ) -ped1 <- Pedigree(test1) +ped1 <- Pedigree(test1, missid = "0") -temp2 <- Pedigree(test1, hints = list( - horder = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) +temp2 <- Pedigree(test1, missid = "0", hints = list( + horder = setNames( + c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), + 1:11 + ) )) par(mfrow = c(1, 2)) @@ -232,9 +235,9 @@ test2 <- data.frame(id = c(1:13, 21:41), 1, 2, 1, 1, 2 ) ) -ped2 <- Pedigree(test2) -ped2a <- Pedigree(test2, hints = list( - horder = seq_along(test2$id) +ped2 <- Pedigree(test2, missid = "0") +ped2a <- Pedigree(test2, missid = "0", hints = list( + horder = setNames(seq_along(test2$id), test2$id) )) par(mfrow = c(1, 2)) plot(ped2a, title = "Before auto_hint") @@ -312,8 +315,8 @@ test3 <- data.frame(id = 1:14, momid = c(0, 7, 1, 1, 1, 0, 0, 12, 0, 1, 7, 0, 7, 12), affected = c(0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0) ) -ped3 <- Pedigree(test3, hints = list( - horder = 1:14 +ped3 <- Pedigree(test3, missid = "0", hints = list( + horder = setNames(1:14, 1:14) )) test4 <- data.frame(id = 1:17, @@ -328,8 +331,8 @@ test4 <- data.frame(id = 1:17, ) ) -ped4 <- Pedigree(test4, hints = list( - horder = 1:17 +ped4 <- Pedigree(test4, missid = "0", hints = list( + horder = setNames(1:17, 1:17) )) par(mfrow = c(1, 2)) From 6b71567b2bd79d7c7b72a730135df499647b619e Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 19:37:49 +0100 Subject: [PATCH 076/111] Fix ped_to_legdf errors --- R/ped_to_legdf.R | 16 ++++++++-------- R/plot.R | 2 +- tests/testthat/test-ped_to_legdf.R | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index aaae9c26..7f888a31 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -60,9 +60,9 @@ setMethod("ped_to_legdf", "Pedigree", function(obj, adjy = numeric() ) sex_equiv <- c("Male", "Female", "Terminated", "Unknown") - all_lab <- list(sex_equiv, border(ped)$labels) - all_aff <- lapply(unique(fill(ped)$order), function(x) { - fill(ped)$labels[fill(ped)$order == x] + all_lab <- list(sex_equiv, border(obj)$labels) + all_aff <- lapply(unique(fill(obj)$order), function(x) { + fill(obj)$labels[fill(obj)$order == x] }) all_lab <- c(all_lab, all_aff) @@ -86,7 +86,7 @@ setMethod("ped_to_legdf", "Pedigree", function(obj, posy <- cumsum(posy) - boxh posy <- posy[seq_along(posy) %% 2 == 0] - all_aff <- fill(ped) + all_aff <- fill(obj) n_aff <- length(unique(all_aff$order)) lab_title <- c("Sex", "Border", unique(all_aff$column_values)) @@ -99,7 +99,7 @@ setMethod("ped_to_legdf", "Pedigree", function(obj, plot_df <- rbind.fill(plot_df, titles) ## Get ped_df - ped_df <- as.data.frame(ped(ped)) + ped_df <- as.data.frame(ped(obj)) # Sex poly1 <- polygons(1) all_sex <- unique(as.numeric(ped_df$sex)) @@ -123,15 +123,15 @@ setMethod("ped_to_legdf", "Pedigree", function(obj, plot_df <- rbind.fill(plot_df, sex, sex_label) # Border - border_mods <- unique(ped_df[, unique(border(ped)$column_mods)]) + border_mods <- unique(ped_df[, unique(border(obj)$column_mods)]) border <- data.frame( x0 = posx[3], y0 = posy[seq_along(border_mods)], type = rep("square_1_1", length(border_mods)), - border = border(ped)$border[match(border_mods, border(ped)$mods)], + border = border(obj)$border[match(border_mods, border(obj)$mods)], fill = "white", id = "border" ) - lab <- border(ped)$labels[match(border_mods, border(ped)$mods)] + lab <- border(obj)$labels[match(border_mods, border(obj)$mods)] lab[is.na(lab)] <- "NA" border_label <- data.frame( x0 = posx[4] + adjx, diff --git a/R/plot.R b/R/plot.R index 14122f9e..1a058b3b 100644 --- a/R/plot.R +++ b/R/plot.R @@ -138,7 +138,7 @@ setMethod("plot", c(x = "Pedigree", y = "missing"), c(leg_loc[3], leg_loc[4]) ) clip(leg_loc[1] - 1, leg_loc[2] + 1, leg_loc[3] - 1, leg_loc[4] + 1) - plot_fromdf(leg$leg_df, add_to_existing = TRUE, + plot_fromdf(leg$df, add_to_existing = TRUE, boxw = lst$par_usr$boxw * leg_symbolsize, boxh = lst$par_usr$boxh * leg_symbolsize ) diff --git a/tests/testthat/test-ped_to_legdf.R b/tests/testthat/test-ped_to_legdf.R index eb031971..59e9d1e1 100644 --- a/tests/testthat/test-ped_to_legdf.R +++ b/tests/testthat/test-ped_to_legdf.R @@ -28,8 +28,8 @@ test_that("Pedigree legend works", { vdiffr::expect_doppelganger("Legend alone", function() { - plot_fromdf(lst$leg_df, - usr = c(-1, max(lst$leg_df$x0) + 1, -1, max(lst$leg_df$y0) + 1), + plot_fromdf(lst$df, + usr = c(-1, max(lst$df$x0) + 1, -1, max(lst$df$y0) + 1), add_to_existing = FALSE ) } From fa657cb400ed211f61403977f152e36c0ed5e09a Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 21:17:30 +0100 Subject: [PATCH 077/111] Add status getter --- R/AllAccessors.R | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index a098e0e3..78ae7738 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -464,6 +464,23 @@ setMethod("useful<-", x } ) +##### Status Accessors ##### +#' Status getter of Ped object +#' +#' @param x A Ped object. +#' +#' @return A boolean vector with the saying if the individual +#' is dead or not. +#' +#' @rdname Ped +#' @aliases status,Ped-method +#' @export +setGeneric("status", function(x) { + standardGeneric("status") +}) +setMethod("status", signature(x = "Ped"), function(x) { + x@status +}) #### S4 Rel Accessors #### #' Code accessor of Rel object From e43fbecb83a11ad2c7235b4aaedf184852802011 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 21:17:56 +0100 Subject: [PATCH 078/111] Add possibility to keep=False for Pedigree, rel and hints --- R/AllGeneric.R | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 906f33d5..7bbc2cd8 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -251,13 +251,19 @@ setMethod("as.data.frame", "Rel", function(x) { #' @aliases subset,Rel-method #' @importFrom S4Vectors subset #' @export -setMethod("subset", "Rel", function(x, idlist) { +setMethod("subset", "Rel", function(x, idlist, keep = TRUE) { if (is.factor(idlist)) { idlist <- as.character(idlist) } if (! is.character(idlist)) { stop("idlist must be a character") } + + if (! keep) { + id_all <- c(id1(x), id2(x)) + idlist <- setdiff(id_all, idlist) + } + rel_df <- as.data.frame(x) id1 <- rel_df$id1 %in% idlist @@ -294,7 +300,7 @@ setMethod("as.list", "Hints", function(x) { #' @rdname extract-methods #' @aliases subset_hints,Hints-method #' @keywords internal -setMethod("subset", "Hints", function(x, idlist) { +setMethod("subset", "Hints", function(x, idlist, keep = TRUE) { horder <- horder(x) spouse <- spouse(x) @@ -306,10 +312,17 @@ setMethod("subset", "Hints", function(x, idlist) { } if (length(horder) > 0) { + if (! keep) { + idlist <- setdiff(names(horder), idlist) + } horder <- horder[names(horder) %in% idlist] } if (nrow(spouse) > 0) { + if (! keep) { + id_all <- c(spouse$idl, spouse$idr) + idlist <- setdiff(id_all, idlist) + } spouse <- spouse[spouse$idl %in% idlist & spouse$idr %in% idlist, ] } new_hints <- Hints(horder = horder, spouse = spouse) @@ -399,8 +412,8 @@ setMethod("as.list", "Pedigree", function(x) { #' @return A Pedigree object subsetted. #' @rdname extract-methods setMethod("subset", "Pedigree", - function(x, i, del_parents = FALSE) { - new_ped <- subset(ped(x), i, del_parents = del_parents) + function(x, i, del_parents = FALSE, keep = TRUE) { + new_ped <- subset(ped(x), i, del_parents = del_parents, keep = keep) all_id <- id(new_ped) new_rel <- subset(rel(x), all_id) new_hints <- subset(hints(x), all_id) From 5b1b28de14b1e5520ea0ab6d836278355a589005 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 21:18:17 +0100 Subject: [PATCH 079/111] Set to NA in norm_rel --- R/norm_data.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/R/norm_data.R b/R/norm_data.R index dd69d715..ebd5cd0f 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -340,6 +340,10 @@ norm_rel <- function(rel_df, na_strings = c("NA", ""), missid = NA_character_) { rel_df$id1 <- upd_famid_id(rel_df$id1, rel_df$famid, missid) rel_df$id2 <- upd_famid_id(rel_df$id2, rel_df$famid, missid) + rel_df <- mutate_at(rel_df, c("id1", "id2", "famid"), + ~replace(., . %in% c(na_strings, missid), NA_character_) + ) + err$sameIdErr[rel_df$id1 == rel_df$id2] <- "SameId" ## Unite all id errors in one column From 5f0b7d2c504ccf9bc76ba34b86e972b6cdaf4f82 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 21:19:01 +0100 Subject: [PATCH 080/111] Correct plot bug --- R/plot.R | 4 ++-- tests/testthat/_snaps/ped_to_legdf.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/plot.R b/R/plot.R index 1a058b3b..df33105d 100644 --- a/R/plot.R +++ b/R/plot.R @@ -131,10 +131,10 @@ setMethod("plot", c(x = "Pedigree", y = "missing"), wh_fr[3] + 0.1, wh_fr[3] + 0.4 ) } - leg$leg_df$x0 <- scales::rescale(leg$leg_df$x0, + leg$df$x0 <- scales::rescale(leg$df$x0, c(leg_loc[1], leg_loc[2]) ) - leg$leg_df$y0 <- scales::rescale(leg$leg_df$y0, + leg$df$y0 <- scales::rescale(leg$df$y0, c(leg_loc[3], leg_loc[4]) ) clip(leg_loc[1] - 1, leg_loc[2] + 1, leg_loc[3] - 1, leg_loc[4] + 1) diff --git a/tests/testthat/_snaps/ped_to_legdf.md b/tests/testthat/_snaps/ped_to_legdf.md index 9c774d98..4dce50d6 100644 --- a/tests/testthat/_snaps/ped_to_legdf.md +++ b/tests/testthat/_snaps/ped_to_legdf.md @@ -3,7 +3,7 @@ Code lst Output - $leg_df + $df id x0 y0 x1 y1 type fill border angle 1 titles 0.20000 0.0 NA NA text black NA 2 titles 4.46750 0.0 NA NA text black NA From 7eacfd8a25e986a5b80eed2a6802863c51953856 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 21:19:33 +0100 Subject: [PATCH 081/111] Make vignette works --- vignettes/pedigree.Rmd | 54 +++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 6bf556e7..2f56b5cc 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -267,7 +267,7 @@ df2 <- sampleped[sampleped$famid == 2, ] names(df2) df2$status <- c(1, 1, rep(0, 12)) ped2 <- Pedigree(df2) -summary(ped2$ped$status) +summary(status(ped(ped2))) plot(ped2) ``` @@ -280,7 +280,7 @@ As space permits, more lines and characters per line can be made using the a {/em \n} character to indicate a new line. ```{r, labels} -ped2$ped$Names <- c( +mcols(ped2)$Names <- c( "John\nDalton", "Linda", "Jack", "Rachel", "Joe", "Deb", "Lucy", "Ken", "Barb", "Mike", "Matt", "Mindy", "Mark", "Marie\nCurie" @@ -354,14 +354,15 @@ inbred. ```{r, inbreeding} indid <- 195:202 -dadid <- c(0, 0, 0, 196, 196, 0, 197, 199) -momid <- c(0, 0, 0, 195, 195, 0, 198, 200) +dadid <- c(NA, NA, NA, 196, 196, NA, 197, 199) +momid <- c(NA, NA, NA, 195, 195, NA, 198, 200) sex <- c(2, 1, 1, 2, 1, 2, 1, 2) ped3 <- data.frame( - indId = indid, fatherId = dadid, - motherId = momid, gender = sex + id = indid, dadid = dadid, + momid = momid, sex = sex ) -ped4df <- rbind.data.frame(ped2$ped[-c(1, 2), 2:5], ped3) + +ped4df <- rbind.data.frame(df2[-c(1, 2), 2:5], ped3) ped4 <- Pedigree(ped4df) plot(ped4) ``` @@ -376,10 +377,10 @@ between the individuals $212$ and $211$ we get the following plot. ```{r, spouse} ## create twin relationships rel_df <- data.frame( - indId1 = c(210, 212, 211), - indId2 = c(211, 213, 212), + id1 = c(210, 212, 211), + id2 = c(211, 213, 212), code = c(1, 3, 4), - family = c(2, 2, 2) + famid = c(2, 2, 2) ) ped2 <- Pedigree(df2, rel_df) plot(ped2) @@ -403,10 +404,10 @@ in the figure below. ```{r, plotped1} df1 <- sampleped[sampleped$famid == 1, ] relate1 <- data.frame( - indId1 = 113, - indId2 = 114, + id1 = 113, + id2 = 114, code = 4, - family = 1 + famid = 1 ) ped1 <- Pedigree(df1, relate1) plot(ped1) @@ -438,7 +439,7 @@ be used to construct a new Pedigree object. This is possible with the $as.data.frame()$ method, as shown below. ```{r, ped2df, eval = FALSE} -dfped2 <- as.data.frame(ped2) +dfped2 <- as.data.frame(ped(ped2)) dfped2 ``` @@ -454,24 +455,23 @@ identify which subjects to remove. We show how a subject ```{r, subset} ped2_rm210 <- ped2[-10] -ped2_rm210$rel -ped2$rel +rel(ped2_rm210) +rel(ped2) ``` -The steps above only work for subsetting by the index of the -Pedigree object vectors, not by the ~id~ of the subjects themselves. -We provide *trim()*, which trims subjects from a Pedigree by -their $id$. Below is an example of removing subject 110, as done above, +The steps above also works by the ~id~ of the subjects themselves. +We provide *subset()*, which trims subjects from a Pedigree by +their $id$ or other argument. Below is an example of removing subject 110, as done above, then we further trim the Pedigree by a vector of subject ids. We check the trimming by looking at the $id$ vector and the $relation$ matrix. -```{r, trim} -ped2_trim210 <- trim(ped2, "2_210") -ped2_trim210$ped$id -ped2_trim210$rel -ped2_trim_more <- trim(ped2_trim210, c("2_212", "2_214")) -ped2_trim_more$ped$id -ped2_trim_more$rel +```{r, subset_more} +ped2_trim210 <- subset(ped2, "2_210", keep = FALSE) +id(ped(ped2_trim210)) +rel(ped2_trim210) +ped2_trim_more <- subset(ped2_trim210, c("2_212", "2_214"), keep = FALSE) +id(ped(ped2_trim_more)) +rel(ped2_trim_more) ``` Shrinking From 56a640808f9cda5e890bad1a532024e18a517b3b Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 8 Nov 2023 21:20:26 +0100 Subject: [PATCH 082/111] All tests pass --- tests/testthat/_snaps/norm_data.md | 13 ++ tests/testthat/_snaps/plot.md | 258 ++++++++++++++--------------- tests/testthat/test-norm_data.R | 15 ++ 3 files changed, 157 insertions(+), 129 deletions(-) diff --git a/tests/testthat/_snaps/norm_data.md b/tests/testthat/_snaps/norm_data.md index 86eb804c..b446de48 100644 --- a/tests/testthat/_snaps/norm_data.md +++ b/tests/testthat/_snaps/norm_data.md @@ -64,3 +64,16 @@ 8 9 0 Spouse 9 B indId1length0_CodeNotRecognise +--- + + Code + norm_rel(rel_df, missid = "0") + Output + id1 id2 code famid error + 1 1 2 MZ twin + 2 3 2 DZ twin + 3 3 1 DZ twin + 4 3 4 MZ twin + 5 7 Other CodeNotRecognise + 6 spo Use 9 CodeNotRecognise + diff --git a/tests/testthat/_snaps/plot.md b/tests/testthat/_snaps/plot.md index 1d47eb7b..60a40fac 100644 --- a/tests/testthat/_snaps/plot.md +++ b/tests/testthat/_snaps/plot.md @@ -15,16 +15,16 @@ 8 polygon 2.000000e+00 2.000000 NA NA 9 polygon 2.707107e+00 3.000000 NA NA 10 polygon 3.000000e+00 2.000000 NA NA - 11 aff_mark 9.939365e-01 1.013154 NA NA - 12 aff_mark -6.063453e-03 2.013154 NA NA - 13 aff_mark 7.010433e-01 3.013154 NA NA - 14 aff_mark 1.201043e+00 4.013154 NA NA - 15 aff_mark 1.993937e+00 1.013154 NA NA - 16 aff_mark 9.939365e-01 2.013154 NA NA - 17 aff_mark 1.701043e+00 3.013154 NA NA - 18 aff_mark 1.993937e+00 2.013154 NA NA - 19 aff_mark 2.701043e+00 3.013154 NA NA - 20 aff_mark 2.993937e+00 2.013154 NA NA + 11 aff_mark 9.751432e-01 1.054658 NA NA + 12 aff_mark -2.485673e-02 2.054658 NA NA + 13 aff_mark 6.822500e-01 3.054658 NA NA + 14 aff_mark 1.182250e+00 4.054658 NA NA + 15 aff_mark 1.975143e+00 1.054658 NA NA + 16 aff_mark 9.751433e-01 2.054658 NA NA + 17 aff_mark 1.682250e+00 3.054658 NA NA + 18 aff_mark 1.975143e+00 2.054658 NA NA + 19 aff_mark 2.682250e+00 3.054658 NA NA + 20 aff_mark 2.975143e+00 2.054658 NA NA 21 polygon 1.000000e+00 1.000000 NA NA 22 polygon 1.619369e-08 2.000000 NA NA 23 polygon 7.071068e-01 3.000000 NA NA @@ -35,58 +35,58 @@ 28 polygon 2.000000e+00 2.000000 NA NA 29 polygon 2.707107e+00 3.000000 NA NA 30 polygon 3.000000e+00 2.000000 NA NA - 31 aff_mark 1.006063e+00 1.013154 NA NA - 32 aff_mark 6.063485e-03 2.013154 NA NA - 33 aff_mark 7.131702e-01 3.013154 NA NA - 34 aff_mark 1.213170e+00 4.013154 NA NA - 35 aff_mark 2.006063e+00 1.013154 NA NA - 36 aff_mark 1.006063e+00 2.013154 NA NA - 37 aff_mark 1.713170e+00 3.013154 NA NA - 38 aff_mark 2.006063e+00 2.013154 NA NA - 39 aff_mark 2.713170e+00 3.013154 NA NA - 40 aff_mark 3.006063e+00 2.013154 NA NA - 41 dead 9.854476e-01 1.028940 1.014552e+00 0.9973691 - 42 dead -1.455231e-02 2.028940 1.455234e-02 1.9973691 - 43 dead 1.985448e+00 1.028940 2.014552e+00 0.9973691 - 44 dead 9.854477e-01 2.028940 1.014552e+00 1.9973691 - 45 id 1.000000e+00 1.052769 NA NA - 46 id 1.619369e-08 2.052769 NA NA - 47 id 7.071068e-01 3.052769 NA NA - 48 id 1.207107e+00 4.052769 NA NA - 49 id 2.000000e+00 1.052769 NA NA - 50 id 1.000000e+00 2.052769 NA NA - 51 id 1.707107e+00 3.052769 NA NA - 52 id 2.000000e+00 2.052769 NA NA - 53 id 2.707107e+00 3.052769 NA NA - 54 id 3.000000e+00 2.052769 NA NA - 55 line_spouses 1.012127e+00 1.013154 1.987873e+00 1.0131545 - 56 line_spouses 1.212695e-02 2.013154 9.878731e-01 2.0131545 - 57 line_spouses 7.192337e-01 3.013154 1.694980e+00 3.0131545 - 58 line_spouses 2.012127e+00 2.013154 2.987873e+00 2.0131545 - 59 line_spouses2 7.192337e-01 3.015785 1.694980e+00 3.0157854 - 60 line_children_vertical 1.619369e-08 2.000000 1.619369e-08 1.9605366 - 61 line_children_vertical 3.000000e+00 2.000000 3.000000e+00 1.9605366 - 62 line_children_horizontal 1.619369e-08 1.960537 3.000000e+00 1.9605366 - 63 line_parent_mid 1.500000e+00 1.960537 1.500000e+00 1.6763220 - 64 line_parent_mid 1.500000e+00 1.676322 1.500000e+00 1.2973691 - 65 line_parent_mid 1.500000e+00 1.297369 1.500000e+00 1.0131545 - 66 line_children_vertical 7.071068e-01 3.000000 7.071068e-01 2.9605366 - 67 line_children_horizontal 7.071068e-01 2.960537 7.071068e-01 2.9605366 - 68 line_parent_mid 7.071068e-01 2.960537 7.071068e-01 2.6763220 - 69 line_parent_mid 7.071068e-01 2.676322 5.000000e-01 2.2973691 - 70 line_parent_mid 5.000000e-01 2.297369 5.000000e-01 2.0131545 - 71 line_children_vertical 1.707107e+00 3.000000 2.207107e+00 2.9605366 - 72 line_children_vertical 2.707107e+00 3.000000 2.207107e+00 2.9605366 - 73 label_children_twin3 2.207107e+00 2.980268 NA NA - 74 line_children_horizontal 2.207107e+00 2.960537 2.207107e+00 2.9605366 - 75 line_parent_mid 2.207107e+00 2.960537 2.207107e+00 2.6763220 - 76 line_parent_mid 2.207107e+00 2.676322 2.500000e+00 2.2973691 - 77 line_parent_mid 2.500000e+00 2.297369 2.500000e+00 2.0131545 - 78 line_children_vertical 1.207107e+00 4.000000 1.207107e+00 3.9605366 - 79 line_children_horizontal 1.207107e+00 3.960537 1.207107e+00 3.9605366 - 80 line_parent_mid 1.207107e+00 3.960537 1.207107e+00 3.6763220 - 81 line_parent_mid 1.207107e+00 3.676322 1.207107e+00 3.2973691 - 82 line_parent_mid 1.207107e+00 3.297369 1.207107e+00 3.0131545 + 31 aff_mark 1.024857e+00 1.054658 NA NA + 32 aff_mark 2.485676e-02 2.054658 NA NA + 33 aff_mark 7.319635e-01 3.054658 NA NA + 34 aff_mark 1.231963e+00 4.054658 NA NA + 35 aff_mark 2.024857e+00 1.054658 NA NA + 36 aff_mark 1.024857e+00 2.054658 NA NA + 37 aff_mark 1.731964e+00 3.054658 NA NA + 38 aff_mark 2.024857e+00 2.054658 NA NA + 39 aff_mark 2.731964e+00 3.054658 NA NA + 40 aff_mark 3.024857e+00 2.054658 NA NA + 41 dead 9.403438e-01 1.120249 1.059656e+00 0.9890683 + 42 dead -5.965618e-02 2.120249 5.965621e-02 1.9890683 + 43 dead 1.940344e+00 1.120249 2.059656e+00 0.9890683 + 44 dead 9.403438e-01 2.120249 1.059656e+00 1.9890683 + 45 id 1.000000e+00 1.164290 NA NA + 46 id 1.619369e-08 2.164290 NA NA + 47 id 7.071068e-01 3.164290 NA NA + 48 id 1.207107e+00 4.164290 NA NA + 49 id 2.000000e+00 1.164290 NA NA + 50 id 1.000000e+00 2.164290 NA NA + 51 id 1.707107e+00 3.164290 NA NA + 52 id 2.000000e+00 2.164290 NA NA + 53 id 2.707107e+00 3.164290 NA NA + 54 id 3.000000e+00 2.164290 NA NA + 55 line_spouses 1.049713e+00 1.054658 1.950286e+00 1.0546585 + 56 line_spouses 4.971351e-02 2.054658 9.502865e-01 2.0546585 + 57 line_spouses 7.568203e-01 3.054658 1.657393e+00 3.0546585 + 58 line_spouses 2.049714e+00 2.054658 2.950287e+00 2.0546585 + 59 line_spouses2 7.568203e-01 3.065590 1.657393e+00 3.0655902 + 60 line_children_vertical 1.619369e-08 2.000000 1.619369e-08 1.8360245 + 61 line_children_vertical 3.000000e+00 2.000000 3.000000e+00 1.8360245 + 62 line_children_horizontal 1.619369e-08 1.836025 3.000000e+00 1.8360245 + 63 line_parent_mid 1.500000e+00 1.836025 1.500000e+00 1.6016147 + 64 line_parent_mid 1.500000e+00 1.601615 1.500000e+00 1.2890683 + 65 line_parent_mid 1.500000e+00 1.289068 1.500000e+00 1.0546585 + 66 line_children_vertical 7.071068e-01 3.000000 7.071068e-01 2.8360245 + 67 line_children_horizontal 7.071068e-01 2.836025 7.071068e-01 2.8360245 + 68 line_parent_mid 7.071068e-01 2.836025 7.071068e-01 2.6016147 + 69 line_parent_mid 7.071068e-01 2.601615 5.000000e-01 2.2890683 + 70 line_parent_mid 5.000000e-01 2.289068 5.000000e-01 2.0546585 + 71 line_children_vertical 1.707107e+00 3.000000 2.207107e+00 2.8360245 + 72 line_children_vertical 2.707107e+00 3.000000 2.207107e+00 2.8360245 + 73 label_children_twin3 2.207107e+00 2.918012 NA NA + 74 line_children_horizontal 2.207107e+00 2.836025 2.207107e+00 2.8360245 + 75 line_parent_mid 2.207107e+00 2.836025 2.207107e+00 2.6016147 + 76 line_parent_mid 2.207107e+00 2.601615 2.500000e+00 2.2890683 + 77 line_parent_mid 2.500000e+00 2.289068 2.500000e+00 2.0546585 + 78 line_children_vertical 1.207107e+00 4.000000 1.207107e+00 3.8360245 + 79 line_children_horizontal 1.207107e+00 3.836025 1.207107e+00 3.8360245 + 80 line_parent_mid 1.207107e+00 3.836025 1.207107e+00 3.6016147 + 81 line_parent_mid 1.207107e+00 3.601615 1.207107e+00 3.2890683 + 82 line_parent_mid 1.207107e+00 3.289068 1.207107e+00 3.0546585 type fill border angle density cex label tips adjx adjy 1 square_2_1 red black NA NA NA NA NA 2 square_2_1 white green NA NA NA NA NA @@ -98,16 +98,16 @@ 8 square_2_1 white green NA NA NA NA NA 9 square_2_1 white green NA NA NA NA NA 10 circle_2_1 red black NA NA NA NA NA - 11 text black NA NA 0.5 1 NA NA - 12 text black NA NA 0.5 0 NA NA - 13 text black NA NA 0.5 0 NA NA - 14 text black NA NA 0.5 0 NA NA - 15 text black NA NA 0.5 0 NA NA - 16 text black NA NA 0.5 1 NA NA - 17 text black NA NA 0.5 1 NA NA - 18 text black NA NA 0.5 0 NA NA - 19 text black NA NA 0.5 0 NA NA - 20 text black NA NA 0.5 1 NA NA + 11 text black NA NA 1 1 NA NA + 12 text black NA NA 1 0 NA NA + 13 text black NA NA 1 0 NA NA + 14 text black NA NA 1 0 NA NA + 15 text black NA NA 1 0 NA NA + 16 text black NA NA 1 1 NA NA + 17 text black NA NA 1 1 NA NA + 18 text black NA NA 1 0 NA NA + 19 text black NA NA 1 0 NA NA + 20 text black NA NA 1 1 NA NA 21 square_2_2 white black NA NA NA NA NA 22 square_2_2 white green NA NA NA NA NA 23 circle_2_2 #c300ff black NA NA NA NA NA @@ -118,62 +118,62 @@ 28 square_2_2 #c300ff green NA NA NA NA NA 29 square_2_2 white green NA NA NA NA NA 30 circle_2_2 white black NA NA NA NA NA - 31 text black NA NA 0.5 0 NA NA - 32 text black NA NA 0.5 0 NA NA - 33 text black NA NA 0.5 1 NA NA - 34 text black NA NA 0.5 0 NA NA - 35 text black NA NA 0.5 NA NA - 36 text black NA NA 0.5 1 NA NA - 37 text black NA NA 0.5 0 NA NA - 38 text black NA NA 0.5 1 NA NA - 39 text black NA NA 0.5 0 NA NA - 40 text black NA NA 0.5 0 NA NA - 41 segments black NA NA 0.5 NA NA - 42 segments black NA NA 0.5 NA NA - 43 segments black NA NA 0.5 NA NA - 44 segments black NA NA 0.5 NA NA - 45 text black NA NA 0.5 1_1 NA NA - 46 text black NA NA 0.5 1_3 NA NA - 47 text black NA NA 0.5 1_7 NA NA - 48 text black NA NA 0.5 1_10 NA NA - 49 text black NA NA 0.5 1_2 NA NA - 50 text black NA NA 0.5 1_5 NA NA - 51 text black NA NA 0.5 1_8 NA NA - 52 text black NA NA 0.5 1_6 NA NA - 53 text black NA NA 0.5 1_9 NA NA - 54 text black NA NA 0.5 1_4 NA NA - 55 segments black NA NA 0.5 NA NA - 56 segments black NA NA 0.5 NA NA - 57 segments black NA NA 0.5 NA NA - 58 segments black NA NA 0.5 NA NA - 59 segments black NA NA 0.5 NA NA - 60 segments black NA NA 0.5 NA NA - 61 segments black NA NA 0.5 NA NA - 62 segments black NA NA 0.5 NA NA - 63 segments black NA NA 0.5 NA NA - 64 segments black NA NA 0.5 NA NA - 65 segments black NA NA 0.5 NA NA - 66 segments black NA NA 0.5 NA NA - 67 segments black NA NA 0.5 NA NA - 68 segments black NA NA 0.5 NA NA - 69 segments black NA NA 0.5 NA NA - 70 segments black NA NA 0.5 NA NA - 71 segments black NA NA 0.5 NA NA - 72 segments black NA NA 0.5 NA NA - 73 text black NA NA 0.5 ? NA NA - 74 segments black NA NA 0.5 NA NA - 75 segments black NA NA 0.5 NA NA - 76 segments black NA NA 0.5 NA NA - 77 segments black NA NA 0.5 NA NA - 78 segments black NA NA 0.5 NA NA - 79 segments black NA NA 0.5 NA NA - 80 segments black NA NA 0.5 NA NA - 81 segments black NA NA 0.5 NA NA - 82 segments black NA NA 0.5 NA NA + 31 text black NA NA 1 0 NA NA + 32 text black NA NA 1 0 NA NA + 33 text black NA NA 1 1 NA NA + 34 text black NA NA 1 0 NA NA + 35 text black NA NA 1 NA NA + 36 text black NA NA 1 1 NA NA + 37 text black NA NA 1 0 NA NA + 38 text black NA NA 1 1 NA NA + 39 text black NA NA 1 0 NA NA + 40 text black NA NA 1 0 NA NA + 41 segments black NA NA 1 NA NA + 42 segments black NA NA 1 NA NA + 43 segments black NA NA 1 NA NA + 44 segments black NA NA 1 NA NA + 45 text black NA NA 1 1_1 NA NA + 46 text black NA NA 1 1_3 NA NA + 47 text black NA NA 1 1_7 NA NA + 48 text black NA NA 1 1_10 NA NA + 49 text black NA NA 1 1_2 NA NA + 50 text black NA NA 1 1_5 NA NA + 51 text black NA NA 1 1_8 NA NA + 52 text black NA NA 1 1_6 NA NA + 53 text black NA NA 1 1_9 NA NA + 54 text black NA NA 1 1_4 NA NA + 55 segments black NA NA 1 NA NA + 56 segments black NA NA 1 NA NA + 57 segments black NA NA 1 NA NA + 58 segments black NA NA 1 NA NA + 59 segments black NA NA 1 NA NA + 60 segments black NA NA 1 NA NA + 61 segments black NA NA 1 NA NA + 62 segments black NA NA 1 NA NA + 63 segments black NA NA 1 NA NA + 64 segments black NA NA 1 NA NA + 65 segments black NA NA 1 NA NA + 66 segments black NA NA 1 NA NA + 67 segments black NA NA 1 NA NA + 68 segments black NA NA 1 NA NA + 69 segments black NA NA 1 NA NA + 70 segments black NA NA 1 NA NA + 71 segments black NA NA 1 NA NA + 72 segments black NA NA 1 NA NA + 73 text black NA NA 1 ? NA NA + 74 segments black NA NA 1 NA NA + 75 segments black NA NA 1 NA NA + 76 segments black NA NA 1 NA NA + 77 segments black NA NA 1 NA NA + 78 segments black NA NA 1 NA NA + 79 segments black NA NA 1 NA NA + 80 segments black NA NA 1 NA NA + 81 segments black NA NA 1 NA NA + 82 segments black NA NA 1 NA NA $par_usr $par_usr$usr - [1] -0.01212692 3.01212695 4.11605893 1.00000000 + [1] -0.04971348 3.04971351 4.28881699 1.00000000 $par_usr$old_par $par_usr$old_par$xpd @@ -181,16 +181,16 @@ $par_usr$boxw - [1] 0.02425388 + [1] 0.09942699 $par_usr$boxh - [1] 0.02630893 + [1] 0.109317 $par_usr$labh - [1] 0.02205037 + [1] 0.04581105 $par_usr$legh - [1] 0.0394634 + [1] 0.1639755 diff --git a/tests/testthat/test-norm_data.R b/tests/testthat/test-norm_data.R index 0df330d5..2d7b2970 100644 --- a/tests/testthat/test-norm_data.R +++ b/tests/testthat/test-norm_data.R @@ -46,4 +46,19 @@ test_that("Norm rel", { expect_equal(dim(rel_df), c(9, 5)) expect_snapshot(rel_df) expect_equal(sum(is.na(rel_df$error)), 6) + + rel_df <- c( + 1, 2, 1, + 1, 3, 2, + 2, 3, 3, + 1, 2, 4, + 3, 4, "MZ twin", + 6, 7, "Other", + 8, "8", "spo Use", + 9, "0", "4" + ) + rel_df <- matrix(rel_df, ncol = 4, byrow = TRUE) + dimnames(rel_df) <- list(NULL, c("id1", "id2", "code", "family")) + rel_df <- data.frame(rel_df) + expect_snapshot(norm_rel(rel_df, missid = "0")) }) From c62e5bf7e24ba80547af1a3985d2325c35efb22b Mon Sep 17 00:00:00 2001 From: Louis Date: Sat, 11 Nov 2023 11:58:02 +0100 Subject: [PATCH 083/111] Ped class documentation --- NAMESPACE | 15 - R/AllAccessors.R | 575 +++++++++++++++++++++--------------- R/AllClass.R | 26 +- R/AllConstructor.R | 49 ++- R/AllGeneric.R | 73 ++--- devel/documentation/todo.md | 2 +- man/Ped-class.Rd | 335 +++++++++++++++++++++ man/Ped-constructor.Rd | 65 ---- man/Ped.Rd | 204 ------------- man/Pedigree-class.Rd | 11 +- man/Pedigree.Rd | 3 - man/Rel-class.Rd | 135 +++++++++ man/Rel.Rd | 120 +------- man/extract-methods.Rd | 40 +-- man/famid-set.Rd | 20 -- man/famid.Rd | 20 -- man/get_twin_rel.Rd | 3 +- man/show-Ped-method.Rd | 18 -- man/summary-Ped-method.Rd | 17 -- 19 files changed, 879 insertions(+), 852 deletions(-) create mode 100644 man/Ped-class.Rd delete mode 100644 man/Ped-constructor.Rd delete mode 100644 man/Ped.Rd create mode 100644 man/Rel-class.Rd delete mode 100644 man/famid-set.Rd delete mode 100644 man/famid.Rd delete mode 100644 man/show-Ped-method.Rd delete mode 100644 man/summary-Ped-method.Rd diff --git a/NAMESPACE b/NAMESPACE index 6adf18a6..ea6f14b8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,12 +1,10 @@ # Generated by roxygen2: do not edit by hand -export("famid<-") export(Hints) export(Ped) export(Pedigree) export(Rel) export(Scales) -export(affected) export(align) export(alignped1) export(alignped2) @@ -14,14 +12,10 @@ export(alignped3) export(alignped4) export(anchor_to_factor) export(auto_hint) -export(avail) export(best_hint) export(bit_size) export(border) -export(code) -export(dadid) export(descendants) -export(famid) export(family_check) export(fill) export(find_avail_affected) @@ -35,18 +29,12 @@ export(generate_fill) export(hints) export(horder) export(ibd_matrix) -export(id) -export(id1) -export(id2) export(is_informative) export(is_valid_scales) -export(isinf) -export(kin) export(kindepth) export(kinship) export(make_famid) export(min_dist_inf) -export(momid) export(norm_ped) export(norm_rel) export(num_child) @@ -57,13 +45,11 @@ export(plot_fromdf) export(rel) export(rel_code_to_factor) export(scales) -export(sex) export(sex_to_factor) export(shrink) export(spouse) export(unrelated) export(upd_famid_id) -export(useful) export(useful_inds) export(vect_to_binary) exportClasses(Hints) @@ -71,7 +57,6 @@ exportClasses(Ped) exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) -exportMethods("mcols<-") exportMethods(Hints) exportMethods(Pedigree) exportMethods(Rel) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 78ae7738..29e7aaea 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -5,139 +5,40 @@ NULL #### S4 Ped Accessors #### -##### Mcols Accessors ##### -#' @section Setters: -#' Metadata setters of Ped object from a list -#' -#' Add the metadata into the `elementMetadata` slot of -#' a Ped object. -#' -#' @param x A Ped object. See [Ped()] for more information. -#' @param value A list or a data.frame with the metadata. -#' The length of each element in `value` need to match the -#' length of the Ped object. -#' -#' @return A Ped object with the metadata set. -#' -#' @rdname Ped -#' @aliases mcols<-,Ped,list -#' @docType methods -setMethod("mcols<-", - signature(x = "Ped", value = "list"), - function(x, value) { - mcols(x) <- as(value, "DataFrame") - x - } -) - -#' @export -#' @rdname Ped -#' @aliases mcols<-,Ped,data.frame -#' @docType methods -setMethod("mcols<-", - signature(x = "Ped", value = "data.frame"), - function(x, value) { - mcols(x) <- as(value, "DataFrame") - x - } -) - -##### Famid Accessors ##### -#' Famid getter -#' -#' @description Extract the family identifiers out -#' of a Ped, Rel or Pedigree object. -#' If use with a Pedigree object the famid slot of -#' its own Ped object will be given. -#' -#' @param x A Ped, Rel or Pedigree object. -#' -#' @return A character vector of the family identifiers. -#' @export -setGeneric("famid", function(x) { - standardGeneric("famid") -}) - -#' @rdname Ped -setMethod("famid", signature(x = "Ped"), function(x) { - x@famid -}) -#' @rdname Rel -setMethod("famid", signature(x = "Rel"), function(x) { - x@famid -}) -#' @rdname Pedigree -setMethod("famid", signature(x = "Pedigree"), function(x) { - famid(ped(x)) -}) -#' Famid setter -#' -#' @param x A Ped or Rel object. -#' @param value A character or integer vector that should be use -#' as the new family id -#' -#' @return An updated Ped, Rel object. -#' @export -setGeneric("famid<-", function(x, value) { - standardGeneric("famid<-") -}) -#' @rdname Ped -setMethod("famid<-", - signature(x = "Ped", value = "character_OR_integer"), - function(x, value) { - if (! is.character(value) && ! is.integer(value)) { - stop("famid must be a character or integer vector") - } - if (length(value) != length(x)) { - stop( - "The length of the new values for famid should be: ", - "equal to the length of the Ped object" - ) - } - x@famid <- as.character(value) - validObject(x) - x - } -) -#' @rdname Rel -setMethod("famid<-", - signature(x = "Rel", value = "character_OR_integer"), - function(x, value) { - if (! is.character(value) && ! is.integer(value)) { - stop("famid must be a character or integer vector") - } - if (length(value) != length(x)) { - stop( - "The length of the new values for famid should be: ", - "equal to the length of the Ped object" - ) - } - x@famid <- as.character(value) - validObject(x) - x - } -) +#' @section Accessors: +#' For all the following accessors, the `x` parameters is a Ped object. +#' Each getters return a vector of the same length as `x` with the values +#' of the corresponding slot. For each getter, you have a setter with the +#' same name, to be use as `slot(x) <- value`. +#' The `value` parameter is a vector of the same length as `x`, except +#' for the `mcols()` accessors where `value` is a list or a data.frame with +#' each elements with the same length as `x`. ##### Id Accessors ##### -#' Id getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A character vector with the id of each individual. -#' -#' @rdname Ped -#' @aliases id,Ped-method -#' @export + +#' @rdname Ped-class +#' @usage NULL setGeneric("id", function(x) { standardGeneric("id") }) + +#' @section Accessors: +#' - `id(x)` : Individuals identifiers +#' @rdname Ped-class +#' @usage NULL setMethod("id", signature(x = "Ped"), function(x) { x@id }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("id<-", function(x, value) { standardGeneric("id<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("id<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -157,24 +58,28 @@ setMethod("id<-", ) ##### Dadid Accessors ##### -#' Dadid getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A character vector with the dadid of each individual. -#' -#' @rdname Ped -#' @aliases dadid,Ped-method -#' @export +#' @rdname Ped-class +#' @usage NULL setGeneric("dadid", function(x) { standardGeneric("dadid") }) + +#' @section Accessors: +#' - `dadid(x)` : Individuals' father identifiers +#' @rdname Ped-class +#' @usage NULL setMethod("dadid", signature(x = "Ped"), function(x) { x@dadid }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("dadid<-", function(x, value) { standardGeneric("dadid<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("dadid<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -194,24 +99,29 @@ setMethod("dadid<-", ) ##### Momid Accessors ##### -#' Momid getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A character vector with the momid of each individual. -#' -#' @rdname Ped -#' @aliases momid,Ped-method -#' @export + +#' @rdname Ped-class +#' @usage NULL setGeneric("momid", function(x) { standardGeneric("momid") }) + +#' @section Accessors: +#' - `momid(x)` : Individuals' mother identifiers +#' @rdname Ped-class +#' @usage NULL setMethod("momid", signature(x = "Ped"), function(x) { x@momid }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("momid<-", function(x, value) { standardGeneric("momid<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("momid<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -230,25 +140,72 @@ setMethod("momid<-", } ) +##### Famid Accessors ##### + +#' @rdname Ped-class +#' @usage NULL +setGeneric("famid", function(x) { + standardGeneric("famid") +}) + +#' @section Accessors: +#' - `famid(x)` : Individuals' family identifiers +#' @rdname Ped-class +#' @usage NULL +setMethod("famid", signature(x = "Ped"), function(x) { + x@famid +}) + +#' @rdname Ped-class +#' @usage NULL +setGeneric("famid<-", function(x, value) { + standardGeneric("famid<-") +}) + +#' @rdname Ped-class +#' @usage NULL +setMethod("famid<-", + signature(x = "Ped", value = "character_OR_integer"), + function(x, value) { + if (! is.character(value) && ! is.integer(value)) { + stop("famid must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for famid should be: ", + "equal to the length of the Ped object" + ) + } + x@famid <- as.character(value) + validObject(x) + x + } +) + ##### Sex Accessors ##### -#' Sex getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A character vector with the sex of each individual. -#' -#' @rdname Ped -#' @aliases sex,Ped-method -#' @export + +#' @rdname Ped-class +#' @usage NULL setGeneric("sex", function(x) { standardGeneric("sex") }) + +#' @section Accessors: +#' - `sex(x)` : Individuals' gender +#' @rdname Ped-class +#' @usage NULL setMethod("sex", signature(x = "Ped"), function(x) { x@sex }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("sex<-", function(x, value) { standardGeneric("sex<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("sex<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -272,24 +229,29 @@ setMethod("sex<-", ) ##### Affected Accessors ##### -#' Affected getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A numeric vector with the affected of each individual. -#' -#' @rdname Ped -#' @aliases affected,Ped-method -#' @export + +#' @rdname Ped-class +#' @usage NULL setGeneric("affected", function(x) { standardGeneric("affected") }) + +#' @section Accessors: +#' - `affected(x)` : Individuals' affection status +#' @rdname Ped-class +#' @usage NULL setMethod("affected", signature(x = "Ped"), function(x) { x@affected }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("affected<-", function(x, value) { standardGeneric("affected<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("affected<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -310,24 +272,29 @@ setMethod("affected<-", ) ##### Avail Accessors ##### -#' Avail getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A numeric vector with the avail of each individual. -#' -#' @rdname Ped -#' @aliases avail,Ped-method -#' @export + +#' @rdname Ped-class +#' @usage NULL setGeneric("avail", function(x) { standardGeneric("avail") }) + +#' @section Accessors: +#' - `avail(x)` : Individuals' availability status +#' @rdname Ped-class +#' @usage NULL setMethod("avail", signature(x = "Ped"), function(x) { x@avail }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("avail<-", function(x, value) { standardGeneric("avail<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("avail<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -347,66 +314,73 @@ setMethod("avail<-", } ) -##### Kin Accessors ##### -#' Kin getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A numeric vector with the minimum kinship distance -#' value of each individual towards the informative -#' individuals. -#' -#' @rdname Ped -#' @aliases kin,Ped-method -#' @export -setGeneric("kin", function(x) { - standardGeneric("kin") +##### Status Accessors ##### + +#' @rdname Ped-class +#' @usage NULL +setGeneric("status", function(x) { + standardGeneric("status") }) -setMethod("kin", signature(x = "Ped"), function(x) { - x@kin + +#' @section Accessors: +#' - `status(x)` : Individuals' death status +#' @rdname Ped-class +#' @usage NULL +setMethod("status", signature(x = "Ped"), function(x) { + x@status }) -setGeneric("kin<-", function(x, value) { - standardGeneric("kin<-") + +#' @rdname Ped-class +#' @usage NULL +setGeneric("status<-", function(x, value) { + standardGeneric("status<-") }) -setMethod("kin<-", - signature(x = "Ped", value = "numeric"), + +#' @rdname Ped-class +#' @usage NULL +setMethod("status<-", + signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { if (length(value) != length(x)) { if (length(value) == 1) { value <- rep(value, length(x)) } else { stop( - "The length of the new values for kin should be: ", + "The length of the new values for avail should be: ", "equal to the length of the Ped object" ) } } - x@kin <- value + x@status <- vect_to_binary(value, logical = TRUE) validObject(x) x } ) ##### Isinf Accessors ##### -#' isinf getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A numeric vector with the saying if the individual -#' is informative or not. -#' -#' @rdname Ped -#' @aliases isinf,Ped-method -#' @export + +#' @rdname Ped-class +#' @usage NULL setGeneric("isinf", function(x) { standardGeneric("isinf") }) + +#' @section Accessors: +#' - `isinf(x)` : Individuals' informativeness status +#' @rdname Ped-class +#' @usage NULL setMethod("isinf", signature(x = "Ped"), function(x) { x@isinf }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("isinf<-", function(x, value) { standardGeneric("isinf<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("isinf<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -426,26 +400,74 @@ setMethod("isinf<-", } ) +##### Kin Accessors ##### + +#' @rdname Ped-class +#' @usage NULL +setGeneric("kin", function(x) { + standardGeneric("kin") +}) + +#' @section Accessors: +#' - `kin(x)` : Individuals' kinship distance to the +#' informative individuals +#' @rdname Ped-class +#' @usage NULL +setMethod("kin", signature(x = "Ped"), function(x) { + x@kin +}) + +#' @rdname Ped-class +#' @usage NULL +setGeneric("kin<-", function(x, value) { + standardGeneric("kin<-") +}) + +#' @rdname Ped-class +#' @usage NULL +setMethod("kin<-", + signature(x = "Ped", value = "numeric"), + function(x, value) { + if (length(value) != length(x)) { + if (length(value) == 1) { + value <- rep(value, length(x)) + } else { + stop( + "The length of the new values for kin should be: ", + "equal to the length of the Ped object" + ) + } + } + x@kin <- value + validObject(x) + x + } +) + ##### Useful Accessors ##### -#' useful getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A numeric vector with the saying if the individual -#' is informative or not. -#' -#' @rdname Ped -#' @aliases useful,Ped-method -#' @export + +#' @rdname Ped-class +#' @usage NULL setGeneric("useful", function(x) { standardGeneric("useful") }) + +#' @section Accessors: +#' - `useful(x)` : Individuals' usefullness status +#' @rdname Ped-class +#' @usage NULL setMethod("useful", signature(x = "Ped"), function(x) { x@useful }) + +#' @rdname Ped-class +#' @usage NULL setGeneric("useful<-", function(x, value) { standardGeneric("useful<-") }) + +#' @rdname Ped-class +#' @usage NULL setMethod("useful<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -464,68 +486,129 @@ setMethod("useful<-", x } ) -##### Status Accessors ##### -#' Status getter of Ped object -#' -#' @param x A Ped object. -#' -#' @return A boolean vector with the saying if the individual -#' is dead or not. -#' -#' @rdname Ped -#' @aliases status,Ped-method -#' @export -setGeneric("status", function(x) { - standardGeneric("status") -}) -setMethod("status", signature(x = "Ped"), function(x) { - x@status -}) + +##### Mcols Accessors ##### + +#' @section Accessors: +#' - `mcols(x)` : Individuals' metadata +#' @rdname Ped-class +#' @usage NULL +setMethod("mcols<-", + signature(x = "Ped", value = "list"), + function(x, value) { + mcols(x) <- as(value, "DataFrame") + x + } +) + +#' @rdname Ped-class +#' @usage NULL +setMethod("mcols<-", + signature(x = "Ped", value = "data.frame"), + function(x, value) { + mcols(x) <- as(value, "DataFrame") + x + } +) #### S4 Rel Accessors #### -#' Code accessor of Rel object -#' -#' @param x A Rel object. -#' -#' @return A character vector with the code of each relationship. -#' -#' @rdname Rel -#' @aliases code,Rel-method -#' @export + +#' @section Accessors: +#' For all the following accessors, the `x` parameters is a Rel object. +#' Each getters return a vector of the same length as `x` with the values +#' of the corresponding slot. + +##### Code Accessors ##### +#' @rdname Rel-class +#' @usage NULL setGeneric("code", function(x) { standardGeneric("code") }) + +#' @section Accessors: +#' - `code(x)` : Relationships' code +#' @rdname Rel-class +#' @usage NULL setMethod("code", signature(x = "Rel"), function(x) { x@code }) -#' Id1 accessor of Rel object -#' @param x A Rel object. -#' @return A character vector with the id1 of each relationship. -#' @rdname Rel -#' @aliases id1,Rel-method -#' @export +##### Id1 Accessors ##### +#' @rdname Rel-class +#' @usage NULL setGeneric("id1", function(x) { standardGeneric("id1") }) + +#' @section Accessors: +#' - `id1(x)` : Relationships' first individuals' identifier +#' @rdname Rel-class +#' @usage NULL setMethod("id1", signature(x = "Rel"), function(x) { x@id1 }) -#' Id2 accessor of Rel object -#' @param x A Rel object. -#' @return A character vector with the id2 of each relationship. -#' @rdname Rel -#' @aliases id2,Rel-method -#' @export +##### Id2 Accessors ##### + +#' @rdname Rel-class +#' @usage NULL setGeneric("id2", function(x) { standardGeneric("id2") }) + +#' @section Accessors: +#' - `id2(x)` : Relationships' second individuals' identifier +#' @rdname Rel-class +#' @usage NULL setMethod("id2", signature(x = "Rel"), function(x) { x@id2 }) +#' @section Accessors: +#' - `famid(x)` : Relationships' individuals' family identifier +#' @rdname Rel-class +#' @usage NULL +setMethod("famid", signature(x = "Rel"), function(x) { + x@famid +}) + +#' @section Accessors: +#' - `famid(x) <- value` : Set the relationships' individuals' family +#' identifier +#' - `value` : A character or integer vector of the same length as x +#' with the family identifiers +#' @rdname Rel-class +#' @usage NULL +setMethod("famid<-", + signature(x = "Rel", value = "character_OR_integer"), + function(x, value) { + if (! is.character(value) && ! is.integer(value)) { + stop("famid must be a character or integer vector") + } + if (length(value) != length(x)) { + stop( + "The length of the new values for famid should be: ", + "equal to the length of the Ped object" + ) + } + x@famid <- as.character(value) + validObject(x) + x + } +) + #### S4 Pedigree Accessors #### + +#' @section Accessors: +#' - `famid(x)` : Get the family identifiers of a Pedigree object. This +#' function is a wrapper around `famid(ped(x))`. +#' +#' @rdname Pedigree-class +#' @usage NULL +setMethod("famid", signature(x = "Pedigree"), function(x) { + famid(ped(x)) +}) + ##### S4 ped Accessors ##### #' @title Pedigree ped accessors #' @param object A Pedigree object. diff --git a/R/AllClass.R b/R/AllClass.R index f70b8029..b5f8c131 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -88,21 +88,16 @@ setValidity("Scales", is_valid_scales) #### Ped Class #### -#' Ped S4 class. +#' Ped object +#' +#' S4 class to represent the identity informations of the individuals +#' in a pedigree. #' -#' @description A Ped object is a list of identity informations -#' of the individuals in the pedigree. -#' It is used to create a Pedigree object. #' The minimal needed informations are `id`, `dadid`, `momid` and `sex`. -#' If a `famid` is provided, the individuals `id` will be aggregated -#' to the `famid` character to ensure the uniqueness of the `id`. #' The other slots are used to store recognized informations. #' Additional columns can be added to the Ped object and will be #' stored in the `elementMetadata` slot of the Ped object. -#' @section Constructor: -#' `Ped(obj, ...)`: -#' This constructor creates a Ped instance out of the vectors or the data.frame -#' provided. See [Ped()] for more informations. +#' #' @slot id A character vector with the id of the individuals. #' @slot dadid A character vector with the id of the father of the individuals. #' @slot momid A character vector with the id of the mother of the individuals. @@ -133,12 +128,11 @@ setValidity("Scales", is_valid_scales) #' of the individuals. #' @slot num_child_ind A numeric vector with the number of children #' of the individuals. +#' @slot elementMetadata A DataFrame with the additional metadata columns +#' of the Ped object. #' -#' @return A Ped object. #' @seealso [Pedigree()] -#' @docType class #' @name Ped-class -#' @rdname Ped #' @export setClass("Ped", contains = "Vector", @@ -177,6 +171,9 @@ setMethod("parallel_slot_names", "Ped", setValidity("Ped", is_valid_ped) #### Rel Class #### + +#' Rel object +#' #' S4 class to represent the special relationships in a Pedigree. #' #' A Rel object is a list of special relationships @@ -192,11 +189,8 @@ setValidity("Ped", is_valid_ped) #' relationship. (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). #' @slot famid A character vector with the famid of the individuals. #' -#' @return A Rel object. #' @seealso [Pedigree()] -#' @docType class #' @name Rel-class -#' @rdname Rel #' @export setClass("Rel", contains = "Vector", diff --git a/R/AllConstructor.R b/R/AllConstructor.R index d0aa1cbc..f2c1c8d0 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -30,11 +30,13 @@ na_to_length <- function(x, temp, value) { #### S4 Ped constructor #### -#' Constructor for the Ped class +#' @description +#' +#' ## Constructor : #' -#' @description Constructor for the Ped class #' You either need to provide a vector of the same size for each slot #' or a `data.frame` with the corresponding columns. +#' #' The metadata will correspond to the columns that do not correspond #' to the Ped slots. #' @@ -71,18 +73,17 @@ na_to_length <- function(x, temp, value) { #' to `NA_character_`. #' @inheritParams check_columns #' @return A Ped object. -#' @seealso [Pedigree()] -#' @rdname Ped-constructor +#' @rdname Ped-class #' @export #' @include utils.R +#' @usage NULL setGeneric("Ped", signature = "obj", function(obj, ...) { standardGeneric("Ped") }) -#' @docType methods -#' @aliases Ped,data.frame -#' @rdname Ped +#' @rdname Ped-class #' @examples +#' #' data(sampleped) #' Ped(sampleped) setMethod("Ped", "data.frame", @@ -122,10 +123,9 @@ setMethod("Ped", "data.frame", } ) -#' @docType methods -#' @aliases Ped,character_OR_integer -#' @rdname Ped +#' @rdname Ped-class #' @examples +#' #' Ped( #' obj = c("1", "2", "3", "4", "5", "6"), #' dadid = c("4", "4", "6", "0", "0", "0"), @@ -173,11 +173,11 @@ setMethod("Ped", "character_OR_integer", } ) -#' @docType methods -#' @aliases Ped,missing -#' @rdname Ped +#' @rdname Ped-class #' @examples +#' #' Ped() +#' @usage NULL setMethod("Ped", "missing", function(obj) { new("Ped") @@ -185,9 +185,10 @@ setMethod("Ped", "missing", ) #### S4 Rel constructor #### -#' Constructor for the Rel class +#' @description +#' +#' ## Constructor : #' -#' @description Constructor for the Rel class. #' You either need to provide a vector of the same size for each slot #' or a `data.frame` with the corresponding columns. #' @@ -206,17 +207,16 @@ setMethod("Ped", "missing", #' of without space between the words. The case is not important. #' - numeric() : 1 = "MZ twin", 2 = "DZ twin", 3 = "UZ twin", 4 = "Spouse" #' @inheritParams Ped +#' #' @return A Rel object. -#' @seealso [Pedigree()] -#' @rdname Rel +#' @rdname Rel-class #' @export +#' @usage NULL setGeneric("Rel", signature = "obj", function(obj, ...) { standardGeneric("Rel") }) -#' @docType methods -#' @aliases Rel,data.frame -#' @rdname Rel +#' @rdname Rel-class #' @export #' @examples #' rel_df <- data.frame( @@ -240,9 +240,7 @@ setMethod("Rel", "data.frame", } ) -#' @docType methods -#' @aliases Rel,character -#' @rdname Rel +#' @rdname Rel-class #' @export #' @examples #' Rel( @@ -274,11 +272,10 @@ setMethod("Rel", "character_OR_integer", } ) -#' @docType methods -#' @aliases Rel,missing -#' @rdname Rel +#' @rdname Rel-class #' @examples #' Rel() +#' @usage NULL setMethod("Rel", "missing", function(obj) { new("Rel") diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 7bbc2cd8..fb921661 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -1,16 +1,12 @@ #### S4 Ped generics #### -#' Summary function of Ped object -#' -#' @description Compute the summary of a Ped object -#' -#' @param object A Ped object. -#' -#' @return A character vector with the summary of the object. -#' +#' @section Generics: +#' - `summary(x)`: Compute the summary of a Ped object #' @export #' @importFrom S4Vectors classNameForDisplay #' @importFrom S4Vectors summary +#' @rdname Ped-class +#' @usage NULL setMethod("summary", "Ped", function(object) { object_class <- classNameForDisplay(object) @@ -25,18 +21,14 @@ setMethod("summary", "Ped", } ) -#' Show function of Ped object -#' -#' @description Convert the Ped object to a data.frame +#' @section Generics: +#' - `show(x)`: Convert the Ped object to a data.frame #' and print it with its summary. -#' -#' @param object A Ped object. -#' -#' @return The Ped object with the individuals informations. -#' #' @export #' @importFrom S4Vectors cbind_mcols_for_display #' @importFrom S4Vectors makeClassinfoRowForCompactPrinting +#' @rdname Ped-class +#' @usage NULL setMethod("show", "Ped", function(object) { cat(summary(object), ":\n", sep = "") @@ -53,15 +45,13 @@ setMethod("show", "Ped", } ) -#' @title Ped object to list -#' @description Convert a Ped object to a list -#' @param from A Ped object. -#' @return A list with the individuals informations. -#' The metadata are put at the end. -#' @rdname extract-methods -#' @aliases as.list,Ped-method +#' @section Generics: +#' - `as.list(x)`: Convert a Ped object to a list with +#' the metadata columns at the end. +#' @rdname Ped-class #' @importFrom S4Vectors as.list #' @export +#' @usage NULL setMethod("as.list", "Ped", function(x) { to <- list() for (slot in slotNames(x)) { @@ -75,13 +65,10 @@ setMethod("as.list", "Ped", function(x) { c(to, as.list(mcols(x))) }) -#' @title Ped object to data.frame -#' @description Convert a Ped object to a data.frame -#' @param from A Ped object. -#' @return A data.frame with the individuals informations. -#' The metadata are put at the end. -#' @rdname extract-methods -#' @aliases as.data.frame,Ped-method +#' @section Generics: +#' - `as.data.frame(x)`: Convert a Ped object to a data.frame with +#' the metadata columns at the end. +#' @rdname Ped-class #' @importFrom S4Vectors as.data.frame #' @export setMethod("as.data.frame", "Ped", function(x) { @@ -94,24 +81,18 @@ setMethod("as.data.frame", "Ped", function(x) { ped_df }) -#' Subset a Ped object -#' -#' @description Subset a Ped object based on the individuals -#' identifiers given. -#' -#' @param x A Ped object. -#' @param i A vector of individuals identifiers to keep. -#' @param del_parents A logical value indicating if the parents -#' of the individuals should be deleted. -#' @param keep A logical value indicating if the individuals -#' should be kept or deleted. -#' -#' @return A Ped object subsetted. -#' -#' @rdname extract-methods -#' @aliases subset,Ped-method +#' @section Generics: +#' - `subset(x, i, del_parents = FALSE, keep = TRUE)`: Subset a Ped object +#' based on the individuals identifiers given. +#' - `i` : A vector of individuals identifiers to keep. +#' - `del_parents` : A logical value indicating if the parents +#' of the individuals should be deleted. +#' - `keep` : A logical value indicating if the individuals +#' should be kept or deleted. +#' @rdname Ped-class #' @importFrom S4Vectors subset #' @export +#' @usage NULL setMethod("subset", "Ped", function(x, i, del_parents = FALSE, keep = TRUE) { if (is.factor(i)) { i <- as.character(i) diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index 3cd5256b..b68e9f6f 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -46,9 +46,9 @@ ## For all class - [ ] Ped object + - [ ] Class - [ ] Constructor - [ ] Getters - [ ] Setters - - [ ] Coercion - [ ] General methods - [ ] See also \ No newline at end of file diff --git a/man/Ped-class.Rd b/man/Ped-class.Rd new file mode 100644 index 00000000..67e8338b --- /dev/null +++ b/man/Ped-class.Rd @@ -0,0 +1,335 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, +% R/AllAccessors.R, R/AllGeneric.R +\docType{class} +\name{Ped-class} +\alias{Ped-class} +\alias{Ped} +\alias{Ped,data.frame-method} +\alias{Ped,character_OR_integer-method} +\alias{Ped,missing-method} +\alias{id} +\alias{id,Ped-method} +\alias{id<-} +\alias{id<-,Ped,character_OR_integer-method} +\alias{dadid} +\alias{dadid,Ped-method} +\alias{dadid<-} +\alias{dadid<-,Ped,character_OR_integer-method} +\alias{momid} +\alias{momid,Ped-method} +\alias{momid<-} +\alias{momid<-,Ped,character_OR_integer-method} +\alias{famid} +\alias{famid,Ped-method} +\alias{famid<-} +\alias{famid<-,Ped,character_OR_integer-method} +\alias{sex} +\alias{sex,Ped-method} +\alias{sex<-} +\alias{sex<-,Ped,character_OR_integer-method} +\alias{affected} +\alias{affected,Ped-method} +\alias{affected<-} +\alias{affected<-,Ped,numeric_OR_logical-method} +\alias{avail} +\alias{avail,Ped-method} +\alias{avail<-} +\alias{avail<-,Ped,numeric_OR_logical-method} +\alias{status} +\alias{status,Ped-method} +\alias{status<-} +\alias{status<-,Ped,numeric_OR_logical-method} +\alias{isinf} +\alias{isinf,Ped-method} +\alias{isinf<-} +\alias{isinf<-,Ped,numeric_OR_logical-method} +\alias{kin} +\alias{kin,Ped-method} +\alias{kin<-} +\alias{kin<-,Ped,numeric-method} +\alias{useful} +\alias{useful,Ped-method} +\alias{useful<-} +\alias{useful<-,Ped,numeric_OR_logical-method} +\alias{mcols<-,Ped,list-method} +\alias{mcols<-,Ped,data.frame-method} +\alias{summary,Ped-method} +\alias{show,Ped-method} +\alias{as.list,Ped-method} +\alias{as.data.frame,Ped-method} +\alias{subset,Ped-method} +\title{Ped object} +\usage{ +\S4method{Ped}{data.frame}(obj, cols_used_init = FALSE, cols_used_del = FALSE) + +\S4method{Ped}{character_OR_integer}( + obj, + sex, + dadid, + momid, + famid = NA, + steril = NA, + status = NA, + avail = NA, + affected = NA, + missid = NA_character_ +) + +\S4method{as.data.frame}{Ped}(x) +} +\arguments{ +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} + +\item{cols_used_init}{Boolean defining if the columns that will be used +should be initialised to NA.} + +\item{cols_used_del}{Boolean defining if the columns that will be used +should be deleted.} + +\item{sex}{A character, factor or numeric vector corresponding to +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: +\itemize{ +\item character() or factor() : "f", "m", "woman", "man", "male", "female", +"unknown", "terminated" +\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" +}} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{famid}{A character vector with the family identifiers of the +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} + +\item{steril}{A logical vector with the sterilisation status of the +individuals +(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} + +\item{status}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} + +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} + +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} +} +\value{ +A Ped object. +} +\description{ +S4 class to represent the identity informations of the individuals +in a pedigree. + +\subsection{Constructor :}{ + +You either need to provide a vector of the same size for each slot +or a \code{data.frame} with the corresponding columns. + +The metadata will correspond to the columns that do not correspond +to the Ped slots. +} +} +\details{ +The minimal needed informations are \code{id}, \code{dadid}, \code{momid} and \code{sex}. +The other slots are used to store recognized informations. +Additional columns can be added to the Ped object and will be +stored in the \code{elementMetadata} slot of the Ped object. +} +\section{Slots}{ + +\describe{ +\item{\code{id}}{A character vector with the id of the individuals.} + +\item{\code{dadid}}{A character vector with the id of the father of the individuals.} + +\item{\code{momid}}{A character vector with the id of the mother of the individuals.} + +\item{\code{sex}}{An ordered factor vector for the sex of the individuals +(i.e. \code{male} < \code{female} < \code{unknown} < \code{terminated}).} + +\item{\code{famid}}{A character vector with the family identifiers of the +individuals (optional).} + +\item{\code{steril}}{A logical vector with the sterilisation status of the +individuals +(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} + +\item{\code{status}}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} + +\item{\code{avail}}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} + +\item{\code{affected}}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = not affected, \code{TRUE} = affected, \code{NA} = unknown).} + +\item{\code{useful}}{A logical vector with the usefulness status of the +individuals +(i.e. \code{FALSE} = not useful, \code{TRUE} = useful).} + +\item{\code{kin}}{A numeric vector with minimal kinship value between the +individuals and the useful individuals.} + +\item{\code{num_child_tot}}{A numeric vector with the total number of children +of the individuals.} + +\item{\code{num_child_dir}}{A numeric vector with the number of children +of the individuals.} + +\item{\code{num_child_ind}}{A numeric vector with the number of children +of the individuals.} + +\item{\code{elementMetadata}}{A DataFrame with the additional metadata columns +of the Ped object.} +}} + +\section{Accessors}{ + +For all the following accessors, the \code{x} parameters is a Ped object. +Each getters return a vector of the same length as \code{x} with the values +of the corresponding slot. For each getter, you have a setter with the +same name, to be use as \code{slot(x) <- value}. +The \code{value} parameter is a vector of the same length as \code{x}, except +for the \code{mcols()} accessors where \code{value} is a list or a data.frame with +each elements with the same length as \code{x}. + + +\itemize{ +\item \code{id(x)} : Individuals identifiers +} + + +\itemize{ +\item \code{dadid(x)} : Individuals' father identifiers +} + + +\itemize{ +\item \code{momid(x)} : Individuals' mother identifiers +} + + +\itemize{ +\item \code{famid(x)} : Individuals' family identifiers +} + + +\itemize{ +\item \code{sex(x)} : Individuals' gender +} + + +\itemize{ +\item \code{affected(x)} : Individuals' affection status +} + + +\itemize{ +\item \code{avail(x)} : Individuals' availability status +} + + +\itemize{ +\item \code{status(x)} : Individuals' death status +} + + +\itemize{ +\item \code{isinf(x)} : Individuals' informativeness status +} + + +\itemize{ +\item \code{kin(x)} : Individuals' kinship distance to the +informative individuals +} + + +\itemize{ +\item \code{useful(x)} : Individuals' usefullness status +} + + +\itemize{ +\item \code{mcols(x)} : Individuals' metadata +} +} + +\section{Generics}{ + +\itemize{ +\item \code{summary(x)}: Compute the summary of a Ped object +} + + +\itemize{ +\item \code{show(x)}: Convert the Ped object to a data.frame +and print it with its summary. +} + + +\itemize{ +\item \code{as.list(x)}: Convert a Ped object to a list with +the metadata columns at the end. +} + + +\itemize{ +\item \code{as.data.frame(x)}: Convert a Ped object to a data.frame with +the metadata columns at the end. +} + + +\itemize{ +\item \code{subset(x, i, del_parents = FALSE, keep = TRUE)}: Subset a Ped object +based on the individuals identifiers given. +\itemize{ +\item \code{i} : A vector of individuals identifiers to keep. +\item \code{del_parents} : A logical value indicating if the parents +of the individuals should be deleted. +\item \code{keep} : A logical value indicating if the individuals +should be kept or deleted. +} +} +} + +\examples{ + +data(sampleped) +Ped(sampleped) + +Ped( + obj = c("1", "2", "3", "4", "5", "6"), + dadid = c("4", "4", "6", "0", "0", "0"), + momid = c("5", "5", "5", "0", "0", "0"), + sex = c(1, 2, 3, 1, 2, 1), + missid = "0" +) + +Ped() +summary(ped) +show(ped) +as.list(ped) +subset(ped, c("1", "2")) +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Ped-constructor.Rd b/man/Ped-constructor.Rd deleted file mode 100644 index a5958591..00000000 --- a/man/Ped-constructor.Rd +++ /dev/null @@ -1,65 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllConstructor.R -\name{Ped} -\alias{Ped} -\title{Constructor for the Ped class} -\usage{ -Ped(obj, ...) -} -\arguments{ -\item{obj}{A character vector with the id of the individuals or a -\code{data.frame} with all the informations in corresponding columns.} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{A vector containing for each subject, the identifiers of the -biologicals mothers.} - -\item{famid}{A character vector with the family identifiers of the -individuals. If provide, will be aggregated to the individuals -identifiers separated by an underscore.} - -\item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. This will be transformed to an ordered factor -with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated -The following values are recognized: -\itemize{ -\item character() or factor() : "f", "m", "woman", "man", "male", "female", -"unknown", "terminated" -\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" -}} - -\item{steril}{A logical vector with the sterilisation status of the -individuals -(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} - -\item{status}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} - -\item{avail}{A logical vector with the availability status of the -individuals -(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} - -\item{affected}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown).} - -\item{missid}{A character vector with the missing values identifiers. -All the id, dadid and momid corresponding to those values will be set -to \code{NA_character_}.} -} -\value{ -A Ped object. -} -\description{ -Constructor for the Ped class -You either need to provide a vector of the same size for each slot -or a \code{data.frame} with the corresponding columns. -The metadata will correspond to the columns that do not correspond -to the Ped slots. -} -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/Ped.Rd b/man/Ped.Rd deleted file mode 100644 index 1d192f4d..00000000 --- a/man/Ped.Rd +++ /dev/null @@ -1,204 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R, R/AllConstructor.R, -% R/AllAccessors.R -\docType{class} -\name{Ped-class} -\alias{Ped-class} -\alias{Ped,data.frame-method} -\alias{Ped,data.frame} -\alias{Ped,character_OR_integer-method} -\alias{Ped,character_OR_integer} -\alias{Ped,missing-method} -\alias{Ped,missing} -\alias{mcols<-,Ped,list-method} -\alias{mcols<-,Ped,list} -\alias{mcols<-,Ped,data.frame-method} -\alias{mcols<-,Ped,data.frame} -\alias{famid,Ped-method} -\alias{famid<-,Ped,character_OR_integer-method} -\alias{id} -\alias{id,Ped-method} -\alias{dadid} -\alias{dadid,Ped-method} -\alias{momid} -\alias{momid,Ped-method} -\alias{sex} -\alias{sex,Ped-method} -\alias{affected} -\alias{affected,Ped-method} -\alias{avail} -\alias{avail,Ped-method} -\alias{kin} -\alias{kin,Ped-method} -\alias{isinf} -\alias{isinf,Ped-method} -\alias{useful} -\alias{useful,Ped-method} -\title{Ped S4 class.} -\usage{ -\S4method{Ped}{data.frame}(obj, cols_used_init = FALSE, cols_used_del = FALSE) - -\S4method{Ped}{character_OR_integer}( - obj, - sex, - dadid, - momid, - famid = NA, - steril = NA, - status = NA, - avail = NA, - affected = NA, - missid = NA_character_ -) - -\S4method{Ped}{missing}(obj) - -\S4method{mcols}{Ped,list}(x) <- value - -\S4method{mcols}{Ped,data.frame}(x) <- value - -\S4method{famid}{Ped}(x) - -\S4method{famid}{Ped,character_OR_integer}(x) <- value - -id(x) - -dadid(x) - -momid(x) - -sex(x) - -affected(x) - -avail(x) - -kin(x) - -isinf(x) - -useful(x) -} -\arguments{ -\item{x}{A Ped object.} - -\item{value}{A list or a data.frame with the metadata. -The length of each element in \code{value} need to match the -length of the Ped object.} -} -\value{ -A Ped object. - -A Ped object with the metadata set. - -A character vector with the id of each individual. - -A character vector with the dadid of each individual. - -A character vector with the momid of each individual. - -A character vector with the sex of each individual. - -A numeric vector with the affected of each individual. - -A numeric vector with the avail of each individual. - -A numeric vector with the minimum kinship distance -value of each individual towards the informative -individuals. - -A numeric vector with the saying if the individual -is informative or not. - -A numeric vector with the saying if the individual -is informative or not. -} -\description{ -A Ped object is a list of identity informations -of the individuals in the pedigree. -It is used to create a Pedigree object. -The minimal needed informations are \code{id}, \code{dadid}, \code{momid} and \code{sex}. -If a \code{famid} is provided, the individuals \code{id} will be aggregated -to the \code{famid} character to ensure the uniqueness of the \code{id}. -The other slots are used to store recognized informations. -Additional columns can be added to the Ped object and will be -stored in the \code{elementMetadata} slot of the Ped object. -} -\section{Slots}{ - -\describe{ -\item{\code{id}}{A character vector with the id of the individuals.} - -\item{\code{dadid}}{A character vector with the id of the father of the individuals.} - -\item{\code{momid}}{A character vector with the id of the mother of the individuals.} - -\item{\code{sex}}{An ordered factor vector for the sex of the individuals -(i.e. \code{male} < \code{female} < \code{unknown} < \code{terminated}).} - -\item{\code{famid}}{A character vector with the family identifiers of the -individuals (optional).} - -\item{\code{steril}}{A logical vector with the sterilisation status of the -individuals -(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} - -\item{\code{status}}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} - -\item{\code{avail}}{A logical vector with the availability status of the -individuals -(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} - -\item{\code{affected}}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = not affected, \code{TRUE} = affected, \code{NA} = unknown).} - -\item{\code{useful}}{A logical vector with the usefulness status of the -individuals -(i.e. \code{FALSE} = not useful, \code{TRUE} = useful).} - -\item{\code{kin}}{A numeric vector with minimal kinship value between the -individuals and the useful individuals.} - -\item{\code{num_child_tot}}{A numeric vector with the total number of children -of the individuals.} - -\item{\code{num_child_dir}}{A numeric vector with the number of children -of the individuals.} - -\item{\code{num_child_ind}}{A numeric vector with the number of children -of the individuals.} -}} - -\section{Constructor}{ - -\code{Ped(obj, ...)}: -This constructor creates a Ped instance out of the vectors or the data.frame -provided. See \code{\link[=Ped]{Ped()}} for more informations. -} - -\section{Setters}{ - -Metadata setters of Ped object from a list - -Add the metadata into the \code{elementMetadata} slot of -a Ped object. -} - -\examples{ -data(sampleped) -Ped(sampleped) -Ped( - obj = c("1", "2", "3", "4", "5", "6"), - dadid = c("4", "4", "6", "0", "0", "0"), - momid = c("5", "5", "5", "0", "0", "0"), - sex = c(1, 2, 3, 1, 2, 1), - missid = "0" -) -Ped() -} -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/Pedigree-class.Rd b/man/Pedigree-class.Rd index 47c24e76..90244688 100644 --- a/man/Pedigree-class.Rd +++ b/man/Pedigree-class.Rd @@ -1,8 +1,9 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R +% Please edit documentation in R/AllClass.R, R/AllAccessors.R \docType{class} \name{Pedigree-class} \alias{Pedigree-class} +\alias{famid,Pedigree-method} \title{S4 class to represent a pedigree.} \value{ A Pedigree object. @@ -34,6 +35,14 @@ colors used in the plot. See \code{\link[=Scales]{Scales()}} for more informatio individuals in the plot. See \code{\link[=Hints]{Hints()}} for more informations.} }} +\section{Accessors}{ + +\itemize{ +\item \code{famid(x)} : Get the family identifiers of a Pedigree object. This +function is a wrapper around \code{famid(ped(x))}. +} +} + \seealso{ \code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}}, \code{\link[=Hints]{Hints()}} } diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd index 80386960..297cce35 100644 --- a/man/Pedigree.Rd +++ b/man/Pedigree.Rd @@ -9,7 +9,6 @@ \alias{Pedigree,data.frame} \alias{Pedigree,missing-method} \alias{Pedigree,missing} -\alias{famid,Pedigree-method} \alias{horder} \alias{horder,Pedigree-method} \title{Create a Pedigree object} @@ -52,8 +51,6 @@ Pedigree(obj, ...) \S4method{Pedigree}{missing}(obj) -\S4method{famid}{Pedigree}(x) - horder(object) } \arguments{ diff --git a/man/Rel-class.Rd b/man/Rel-class.Rd new file mode 100644 index 00000000..3b36d86a --- /dev/null +++ b/man/Rel-class.Rd @@ -0,0 +1,135 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, +% R/AllAccessors.R +\docType{class} +\name{Rel-class} +\alias{Rel-class} +\alias{Rel} +\alias{Rel,data.frame-method} +\alias{Rel,character_OR_integer-method} +\alias{Rel,missing-method} +\alias{code} +\alias{code,Rel-method} +\alias{id1} +\alias{id1,Rel-method} +\alias{id2} +\alias{id2,Rel-method} +\alias{famid,Rel-method} +\alias{famid<-,Rel,character_OR_integer-method} +\title{Rel object} +\usage{ +\S4method{Rel}{data.frame}(obj) + +\S4method{Rel}{character_OR_integer}(obj, id2, code, famid = NA_character_) +} +\arguments{ +\item{obj}{A character vector with the id of the first individuals of each +pairs or a \code{data.frame} with all the informations in corresponding columns.} + +\item{id2}{A character vector with the id of the second individuals of each +pairs} + +\item{code}{A character, factor or numeric vector corresponding to +the relation code of the individuals: +\itemize{ +\item MZ twin = Monozygotic twin +\item DZ twin = Dizygotic twin +\item UZ twin = twin of unknown zygosity +\item Spouse = Spouse +The following values are recognized: +\item character() or factor() : "MZ twin", "DZ twin", "UZ twin", "Spouse" with +of without space between the words. The case is not important. +\item numeric() : 1 = "MZ twin", 2 = "DZ twin", 3 = "UZ twin", 4 = "Spouse" +}} + +\item{famid}{A character vector with the family identifiers of the +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} +} +\value{ +A Rel object. +} +\description{ +S4 class to represent the special relationships in a Pedigree. + +\subsection{Constructor :}{ + +You either need to provide a vector of the same size for each slot +or a \code{data.frame} with the corresponding columns. +} +} +\details{ +A Rel object is a list of special relationships +between individuals in the pedigree. +It is used to create a Pedigree object. +The minimal needed informations are \code{id1}, \code{id2} and \code{code}. +If a \code{famid} is provided, the individuals \code{id} will be aggregated +to the \code{famid} character to ensure the uniqueness of the \code{id}. +} +\section{Slots}{ + +\describe{ +\item{\code{id1}}{A character vector with the id of the first individual.} + +\item{\code{id2}}{A character vector with the id of the second individual.} + +\item{\code{code}}{An ordered factor vector with the code of the special +relationship. (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} + +\item{\code{famid}}{A character vector with the famid of the individuals.} +}} + +\section{Accessors}{ + +For all the following accessors, the \code{x} parameters is a Rel object. +Each getters return a vector of the same length as \code{x} with the values +of the corresponding slot. + + +\itemize{ +\item \code{code(x)} : Relationships' code +} + + +\itemize{ +\item \code{id1(x)} : Relationships' first individuals' identifier +} + + +\itemize{ +\item \code{id2(x)} : Relationships' second individuals' identifier +} + + +\itemize{ +\item \code{famid(x)} : Relationships' individuals' family identifier +} + + +\itemize{ +\item \code{famid(x) <- value} : Set the relationships' individuals' family +identifier +\itemize{ +\item \code{value} : A character or integer vector of the same length as x +with the family identifiers +} +} +} + +\examples{ +rel_df <- data.frame( + id1 = c("1", "2", "3"), + id2 = c("2", "3", "4"), + code = c(1, 2, 3) +) +Rel(rel_df) +Rel( + obj = c("1", "2", "3"), + id2 = c("2", "3", "4"), + code = c(1, 2, 3) +) +Rel() +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} +} diff --git a/man/Rel.Rd b/man/Rel.Rd index 2adb7976..263ae6b7 100644 --- a/man/Rel.Rd +++ b/man/Rel.Rd @@ -1,48 +1,12 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R, R/AllConstructor.R, -% R/AllAccessors.R, R/AllGeneric.R -\docType{class} -\name{Rel-class} -\alias{Rel-class} -\alias{Rel} -\alias{Rel,data.frame-method} -\alias{Rel,data.frame} -\alias{Rel,character_OR_integer-method} -\alias{Rel,character} -\alias{Rel,missing-method} -\alias{Rel,missing} -\alias{famid,Rel-method} -\alias{famid<-,Rel,character_OR_integer-method} -\alias{code} -\alias{code,Rel-method} -\alias{id1} -\alias{id1,Rel-method} -\alias{id2} -\alias{id2,Rel-method} +% Please edit documentation in R/AllGeneric.R +\name{summary,Rel-method} \alias{summary,Rel-method} \alias{show,Rel-method} \alias{as.list,Rel-method} \alias{as.data.frame,Rel-method} -\title{S4 class to represent the special relationships in a Pedigree.} +\title{Summary function of Rel object} \usage{ -Rel(obj, ...) - -\S4method{Rel}{data.frame}(obj) - -\S4method{Rel}{character_OR_integer}(obj, id2, code, famid = NA_character_) - -\S4method{Rel}{missing}(obj) - -\S4method{famid}{Rel}(x) - -\S4method{famid}{Rel,character_OR_integer}(x) <- value - -code(x) - -id1(x) - -id2(x) - \S4method{summary}{Rel}(object) \S4method{show}{Rel}(object) @@ -52,46 +16,11 @@ id2(x) \S4method{as.data.frame}{Rel}(x) } \arguments{ -\item{obj}{A character vector with the id of the first individuals of each -pairs or a \code{data.frame} with all the informations in corresponding columns.} - -\item{id2}{A character vector with the id of the second individuals of each -pairs} - -\item{code}{A character, factor or numeric vector corresponding to -the relation code of the individuals: -\itemize{ -\item MZ twin = Monozygotic twin -\item DZ twin = Dizygotic twin -\item UZ twin = twin of unknown zygosity -\item Spouse = Spouse -The following values are recognized: -\item character() or factor() : "MZ twin", "DZ twin", "UZ twin", "Spouse" with -of without space between the words. The case is not important. -\item numeric() : 1 = "MZ twin", 2 = "DZ twin", 3 = "UZ twin", 4 = "Spouse" -}} - -\item{famid}{A character vector with the family identifiers of the -individuals. If provide, will be aggregated to the individuals -identifiers separated by an underscore.} - -\item{x}{A Rel object.} - \item{object}{A Rel object.} \item{from}{A Rel object.} } \value{ -A Rel object. - -A Rel object. - -A character vector with the code of each relationship. - -A character vector with the id1 of each relationship. - -A character vector with the id2 of each relationship. - A character vector with the summary of the object. The Rel object with the relationship informations. @@ -101,17 +30,6 @@ A list with the relationship informations. A data.frame with the relationship informations. } \description{ -A Rel object is a list of special relationships -between individuals in the pedigree. -It is used to create a Pedigree object. -The minimal needed informations are \code{id1}, \code{id2} and \code{code}. -If a \code{famid} is provided, the individuals \code{id} will be aggregated -to the \code{famid} character to ensure the uniqueness of the \code{id}. - -Constructor for the Rel class. -You either need to provide a vector of the same size for each slot -or a \code{data.frame} with the corresponding columns. - Compute the summary of a Rel object Convert the Rel object to a data.frame @@ -121,35 +39,3 @@ Convert a Rel object to a list Convert a Rel object to a data.frame } -\section{Slots}{ - -\describe{ -\item{\code{id1}}{A character vector with the id of the first individual.} - -\item{\code{id2}}{A character vector with the id of the second individual.} - -\item{\code{code}}{An ordered factor vector with the code of the special -relationship. (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} - -\item{\code{famid}}{A character vector with the famid of the individuals.} -}} - -\examples{ -rel_df <- data.frame( - id1 = c("1", "2", "3"), - id2 = c("2", "3", "4"), - code = c(1, 2, 3) -) -Rel(rel_df) -Rel( - obj = c("1", "2", "3"), - id2 = c("2", "3", "4"), - code = c(1, 2, 3) -) -Rel() -} -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} - -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd index ba05e12b..c2907d8a 100644 --- a/man/extract-methods.Rd +++ b/man/extract-methods.Rd @@ -16,9 +16,6 @@ \alias{hints,Pedigree-method} \alias{spouse} \alias{spouse,Pedigree-method} -\alias{as.list,Ped-method} -\alias{as.data.frame,Ped-method} -\alias{subset,Ped-method} \alias{subset,Rel-method} \alias{subset,Hints-method} \alias{subset_hints,Hints-method} @@ -44,15 +41,9 @@ hints(object) spouse(object) -\S4method{as.list}{Ped}(x) +\S4method{subset}{Rel}(x, idlist, keep = TRUE) -\S4method{as.data.frame}{Ped}(x) - -\S4method{subset}{Ped}(x, i, del_parents = FALSE, keep = TRUE) - -\S4method{subset}{Rel}(x, idlist) - -\S4method{subset}{Hints}(x, idlist) +\S4method{subset}{Hints}(x, idlist, keep = TRUE) \S4method{show}{Pedigree}(object) @@ -60,7 +51,7 @@ spouse(object) \S4method{as.list}{Pedigree}(x) -\S4method{subset}{Pedigree}(x, i, del_parents = FALSE) +\S4method{subset}{Pedigree}(x, i, del_parents = FALSE, keep = TRUE) } \arguments{ \item{object}{A Pedigree object.} @@ -69,16 +60,10 @@ spouse(object) \item{x}{A Pedigree object.} -\item{i}{A vector of individuals id or a vector of index.} - -\item{del_parents}{A logical value indicating if the parents -of the individuals should be deleted.} - -\item{keep}{A logical value indicating if the individuals -should be kept or deleted.} - \item{idlist}{A vector of identifiers to subset} +\item{i}{A vector of individuals id or a vector of index.} + \item{from}{A Pedigree object.} \item{j}{A vector of columns names.} @@ -104,14 +89,6 @@ The slot \code{hints} present in the Pedigree object. The slot \code{spouse} present in the \code{Hints} slot of a Pedigree object. -A list with the individuals informations. -The metadata are put at the end. - -A data.frame with the individuals informations. -The metadata are put at the end. - -A Ped object subsetted. - A Rel object subsetted. A list of Hints object subsetted @@ -137,13 +114,6 @@ Pedigree hints accessors Pedigree spouse accessors -Convert a Ped object to a list - -Convert a Ped object to a data.frame - -Subset a Ped object based on the individuals -identifiers given. - Subset a Rel object based on the individuals identifiers given. diff --git a/man/famid-set.Rd b/man/famid-set.Rd deleted file mode 100644 index 46ffb8fa..00000000 --- a/man/famid-set.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllAccessors.R -\name{famid<-} -\alias{famid<-} -\title{Famid setter} -\usage{ -famid(x) <- value -} -\arguments{ -\item{x}{A Ped or Rel object.} - -\item{value}{A character or integer vector that should be use -as the new family id} -} -\value{ -An updated Ped, Rel object. -} -\description{ -Famid setter -} diff --git a/man/famid.Rd b/man/famid.Rd deleted file mode 100644 index 72fc5d27..00000000 --- a/man/famid.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllAccessors.R -\name{famid} -\alias{famid} -\title{Famid getter} -\usage{ -famid(x) -} -\arguments{ -\item{x}{A Ped, Rel or Pedigree object.} -} -\value{ -A character vector of the family identifiers. -} -\description{ -Extract the family identifiers out -of a Ped, Rel or Pedigree object. -If use with a Pedigree object the famid slot of -its own Ped object will be given. -} diff --git a/man/get_twin_rel.Rd b/man/get_twin_rel.Rd index 8657c796..73373c90 100644 --- a/man/get_twin_rel.Rd +++ b/man/get_twin_rel.Rd @@ -22,8 +22,7 @@ Get twin relationships } \details{ This routine function determine the twin relationships -in a Pedigree. It complete the missing twin relationships for -triplets, quads, etc. It also determine the order of the twins +in a Pedigree. It determine the order of the twins in the Pedigree. It is used by \code{auto_hint()}. } diff --git a/man/show-Ped-method.Rd b/man/show-Ped-method.Rd deleted file mode 100644 index 8eefdc56..00000000 --- a/man/show-Ped-method.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllGeneric.R -\name{show,Ped-method} -\alias{show,Ped-method} -\title{Show function of Ped object} -\usage{ -\S4method{show}{Ped}(object) -} -\arguments{ -\item{object}{A Ped object.} -} -\value{ -The Ped object with the individuals informations. -} -\description{ -Convert the Ped object to a data.frame -and print it with its summary. -} diff --git a/man/summary-Ped-method.Rd b/man/summary-Ped-method.Rd deleted file mode 100644 index 505952c6..00000000 --- a/man/summary-Ped-method.Rd +++ /dev/null @@ -1,17 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllGeneric.R -\name{summary,Ped-method} -\alias{summary,Ped-method} -\title{Summary function of Ped object} -\usage{ -\S4method{summary}{Ped}(object) -} -\arguments{ -\item{object}{A Ped object.} -} -\value{ -A character vector with the summary of the object. -} -\description{ -Compute the summary of a Ped object -} From 7c88803b6902df1e8486b8f3a92c9a58ce5943d1 Mon Sep 17 00:00:00 2001 From: Louis LENEZET Date: Sat, 11 Nov 2023 18:47:03 +0100 Subject: [PATCH 084/111] Update documentation --- NAMESPACE | 12 +- R/AllAccessors.R | 292 +++++++++++++++++------- R/AllClass.R | 186 ++++++++------- R/AllConstructor.R | 109 ++++----- R/AllGeneric.R | 202 ++++++++--------- man/Hints-class.Rd | 134 ++++++++++- man/Hints.Rd | 100 -------- man/Ped-class.Rd | 4 - man/Pedigree-class.Rd | 415 +++++++++++++++++++++++++++++++++- man/Pedigree.Rd | 222 ------------------ man/Rel-class.Rd | 47 +++- man/Rel.Rd | 41 ---- man/Scale-class.Rd | 50 ---- man/Scales-class.Rd | 162 +++++++++++++ man/Scales.Rd | 93 -------- man/extract-methods.Rd | 131 ----------- man/length-Pedigree-method.Rd | 18 -- 17 files changed, 1184 insertions(+), 1034 deletions(-) delete mode 100644 man/Hints.Rd delete mode 100644 man/Pedigree.Rd delete mode 100644 man/Rel.Rd delete mode 100644 man/Scale-class.Rd create mode 100644 man/Scales-class.Rd delete mode 100644 man/Scales.Rd delete mode 100644 man/extract-methods.Rd delete mode 100644 man/length-Pedigree-method.Rd diff --git a/NAMESPACE b/NAMESPACE index ea6f14b8..e3a2cc94 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -14,10 +14,8 @@ export(anchor_to_factor) export(auto_hint) export(best_hint) export(bit_size) -export(border) export(descendants) export(family_check) -export(fill) export(find_avail_affected) export(find_avail_noninform) export(find_unavailable) @@ -26,8 +24,6 @@ export(generate_aff_inds) export(generate_border) export(generate_colors) export(generate_fill) -export(hints) -export(horder) export(ibd_matrix) export(is_informative) export(is_valid_scales) @@ -38,16 +34,12 @@ export(min_dist_inf) export(norm_ped) export(norm_rel) export(num_child) -export(ped) export(ped_to_legdf) export(ped_to_plotdf) export(plot_fromdf) -export(rel) export(rel_code_to_factor) -export(scales) export(sex_to_factor) export(shrink) -export(spouse) export(unrelated) export(upd_famid_id) export(useful_inds) @@ -57,6 +49,7 @@ exportClasses(Ped) exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) +exportMethods("[") exportMethods(Hints) exportMethods(Pedigree) exportMethods(Rel) @@ -65,7 +58,6 @@ exportMethods(as.data.frame) exportMethods(as.list) exportMethods(auto_hint) exportMethods(length) -exportMethods(mcols) exportMethods(plot) exportMethods(show) exportMethods(subset) @@ -73,6 +65,7 @@ exportMethods(summary) importFrom(Matrix,bdiag) importFrom(Matrix,forceSymmetric) importFrom(Matrix,sparseMatrix) +importFrom(S4Vectors,'mcols') importFrom(S4Vectors,'mcols<-') importFrom(S4Vectors,as.data.frame) importFrom(S4Vectors,as.list) @@ -133,4 +126,3 @@ importFrom(tidyr,pivot_longer) importFrom(tidyr,unite) importFrom(utils,setTxtProgressBar) importFrom(utils,txtProgressBar) -importMethodsFrom(S4Vectors,as.list) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 29e7aaea..ebf196b5 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -599,6 +599,11 @@ setMethod("famid<-", #### S4 Pedigree Accessors #### +#' @section Accessors: +#' For all the following accessors, the `x` parameters is a Pedigree object. +#' Each getters return a vector of the same length as `x` with the values +#' of the corresponding slot. + #' @section Accessors: #' - `famid(x)` : Get the family identifiers of a Pedigree object. This #' function is a wrapper around `famid(ped(x))`. @@ -610,18 +615,17 @@ setMethod("famid", signature(x = "Pedigree"), function(x) { }) ##### S4 ped Accessors ##### -#' @title Pedigree ped accessors -#' @param object A Pedigree object. -#' @param slot A slot in the Ped object of the Pedigree. -#' @return The slot `ped` present in the Pedigree object. -#' or one of its slot. -#' @rdname extract-methods -#' @aliases ped,Pedigree-method -#' @export + +#' @rdname Pedigree-class +#' @usage NULL setGeneric("ped", function(object, slot) { standardGeneric("ped") }) +#' @section Accessors: +#' - `ped(x, slot)` : Get the value of a specific slot of the Ped object +#' @rdname Pedigree-class +#' @usage NULL setMethod( "ped", signature(object = "Pedigree", slot = "ANY"), @@ -630,6 +634,10 @@ setMethod( } ) +#' @section Accessors: +#' - `ped(x)` : Get the Ped object +#' @rdname Pedigree-class +#' @usage NULL setMethod( "ped", signature(object = "Pedigree", slot = "missing"), @@ -638,10 +646,17 @@ setMethod( } ) +#' @rdname Pedigree-class +#' @usage NULL setGeneric("ped<-", function(object, slot, value) { standardGeneric("ped<-") }) +#' @section Accessors: +#' - `ped(x, slot) <- value` : Set the value of a specific slot of the Ped object +#' Wrapper of `slot(ped(x)) <- value` +#' @rdname Pedigree-class +#' @usage NULL setMethod( "ped<-", signature(object = "Pedigree", slot = "ANY", value = "ANY"), @@ -667,6 +682,10 @@ setMethod( } ) +#' @section Accessors: +#' - `ped(x) <- value` : Set the Ped object +#' @rdname Pedigree-class +#' @usage NULL setMethod( "ped<-", signature(object = "Pedigree", slot = "missing", value = "Ped"), @@ -678,12 +697,13 @@ setMethod( ) ##### S4 mcols Accessors ##### -#' @title Pedigree metadata accessors -#' @param object A Pedigree object. -#' @return The metadata present in the Pedigree object. -#' @rdname extract-methods -#' @aliases mcols,Pedigree-method -#' @export + +#' @section Accessors: +#' - `mcols(x)` : Get the metadata of a Pedigree object. +#' This function is a wrapper around `mcols(ped(x))`. +#' @rdname Pedigree-class +#' @usage NULL +#' @importFrom S4Vectors 'mcols' setMethod( "mcols", signature(x = "Pedigree"), @@ -692,6 +712,11 @@ setMethod( } ) +#' @section Accessors: +#' - `mcols(x) <- value` : Set the metadata of a Pedigree object. +#' This function is a wrapper around `mcols(ped(x)) <- value`. +#' @rdname Pedigree-class +#' @usage NULL #' @importFrom S4Vectors 'mcols<-' setMethod( "mcols<-", @@ -704,16 +729,16 @@ setMethod( ##### S4 rel Accessors ##### -#' @description Pedigree rel accessors -#' @param object A Pedigree object. -#' @return The slot `rel` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases rel,Pedigree-method -#' @export +#' @rdname Pedigree-class +#' @usage NULL setGeneric("rel", function(object, slot) { standardGeneric("rel") }) +#' @section Accessors: +#' - `rel(x, slot)` : Get the value of a specific slot of the Rel object +#' @rdname Pedigree-class +#' @usage NULL setMethod( "rel", signature(object = "Pedigree", slot = "ANY"), @@ -722,6 +747,10 @@ setMethod( } ) +#' @section Accessors: +#' - `rel(x)` : Get the Rel object +#' @rdname Pedigree-class +#' @usage NULL setMethod( "rel", signature(object = "Pedigree", slot = "missing"), @@ -730,10 +759,17 @@ setMethod( } ) +#' @rdname Pedigree-class +#' @usage NULL setGeneric("rel<-", function(object, slot, value) { standardGeneric("rel<-") }) +#' @section Accessors: +#' - `rel(x, slot) <- value` : Set the value of a specific slot of the Rel object +#' Wrapper of `slot(rel(x)) <- value` +#' @rdname Pedigree-class +#' @usage NULL setMethod( "rel<-", signature(object = "Pedigree", slot = "ANY", value = "ANY"), @@ -754,6 +790,10 @@ setMethod( } ) +#' @section Accessors: +#' - `rel(x) <- value` : Set the Rel object +#' @rdname Pedigree-class +#' @usage NULL setMethod( "rel<-", signature(object = "Pedigree", slot = "missing", value = "Rel"), @@ -765,24 +805,31 @@ setMethod( ) ##### S4 scales Accessors #### -#' @description Pedigree scales accessors -#' @param object A Pedigree object. -#' @return The slot `scales` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases scales,Pedigree-method -#' @export + +#' @rdname Pedigree-class +#' @usage NULL setGeneric("scales", function(object) { standardGeneric("scales") }) +#' @section Accessors: +#' - `scales(x)` : Get the Scales object +#' @rdname Pedigree-class +#' @usage NULL setMethod("scales", signature(object = "Pedigree"), function(object) { object@scales }) +#' @rdname Pedigree-class +#' @usage NULL setGeneric("scales<-", function(object, value) { standardGeneric("scales<-") }) +#' @section Accessors: +#' - `scales(x) <- value` : Set the Scales object +#' @rdname Pedigree-class +#' @usage NULL setMethod( "scales<-", signature(object = "Pedigree", value = "Scales"), function(object, value) { @@ -790,17 +837,19 @@ setMethod( object } ) + #### S4 fill Accessors #### -#' @description Pedigree fill accessors -#' @param object A Pedigree object. -#' @return The slot `fill` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases fill,Pedigree-method -#' @export + +#' @rdname Scales-class +#' @usage NULL setGeneric("fill", function(object) { standardGeneric("fill") }) +#' @section Accessors: +#' - `fill(x)` : Get the fill data.frame +#' @rdname Scales-class +#' @usage NULL setMethod("fill", signature(object = "Scales"), function(object) { @@ -808,6 +857,11 @@ setMethod("fill", } ) +#' @section Accessors: +#' - `fill(x)` : Get the fill data.frame from the Scales object. +#' Wrapper of `fill(scales(x))` +#' @rdname Pedigree-class +#' @usage NULL setMethod("fill", signature(object = "Pedigree"), function(object) { @@ -815,10 +869,16 @@ setMethod("fill", } ) +#' @rdname Scales-class +#' @usage NULL setGeneric("fill<-", function(object, value) { standardGeneric("fill<-") }) +#' @section Accessors: +#' - `fill(x) <- value` : Set the fill data.frame +#' @rdname Scales-class +#' @usage NULL setMethod( "fill<-", signature(object = "Scales", value = "data.frame"), @@ -829,6 +889,11 @@ setMethod( } ) +#' @section Accessors: +#' - `fill(x) <- value` : Set the fill data.frame from the Scales object. +#' Wrapper of `fill(scales(x)) <- value` +#' @rdname Pedigree-class +#' @usage NULL setMethod( "fill<-", signature(object = "Pedigree", value = "data.frame"), @@ -840,16 +905,17 @@ setMethod( ) #### S4 border Accessors #### -#' @description Pedigree border accessors -#' @param object A Pedigree object. -#' @return The slot `border` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases border,Pedigree-method -#' @export + +#' @rdname Scales-class +#' @usage NULL setGeneric("border", function(object) { standardGeneric("border") }) +#' @section Accessors: +#' - `border(x)` : Get the border data.frame +#' @rdname Scales-class +#' @usage NULL setMethod("border", signature(object = "Scales"), function(object) { @@ -857,6 +923,11 @@ setMethod("border", } ) +#' @section Accessors: +#' - `border(x)` : Get the border data.frame from the Scales object. +#' Wrapper of `border(scales(x))` +#' @rdname Pedigree-class +#' @usage NULL setMethod("border", signature(object = "Pedigree"), function(object) { @@ -864,10 +935,16 @@ setMethod("border", } ) +#' @rdname Scales-class +#' @usage NULL setGeneric("border<-", function(object, value) { standardGeneric("border<-") }) +#' @section Accessors: +#' - `border(x) <- value` : Set the border data.frame +#' @rdname Scales-class +#' @usage NULL setMethod( "border<-", signature(object = "Scales", value = "data.frame"), @@ -878,6 +955,11 @@ setMethod( } ) +#' @section Accessors: +#' - `border(x) <- value` : Set the border data.frame from the Scales object. +#' Wrapper of `border(scales(x)) <- value` +#' @rdname Pedigree-class +#' @usage NULL setMethod( "border<-", signature(object = "Pedigree", value = "data.frame"), @@ -889,23 +971,31 @@ setMethod( ) #### S4 hints Accessors #### -#' @description Pedigree hints accessors -#' @param object A Pedigree object. -#' @return The slot `hints` present in the Pedigree object. -#' @rdname extract-methods -#' @aliases hints,Pedigree-method -#' @export + +#' @rdname Pedigree-class +#' @usage NULL setGeneric("hints", function(object) { standardGeneric("hints") }) +#' @section Accessors: +#' - `hints(x)` : Get the Hints object +#' @rdname Pedigree-class +#' @usage NULL setMethod("hints", signature(object = "Pedigree"), function(object) { object@hints }) + +#' @rdname Pedigree-class +#' @usage NULL setGeneric("hints<-", function(object, value) { standardGeneric("hints<-") }) +#' @section Accessors: +#' - `hints(x) <- value` : Set the Hints object +#' @rdname Pedigree-class +#' @usage NULL setMethod("hints<-", signature(object = "Pedigree", value = "Hints"), function( object, value ) { @@ -915,100 +1005,132 @@ setMethod("hints<-", signature(object = "Pedigree", value = "Hints"), function( }) #### S4 horder Accessors #### -#' @title Pedigree horder accessors -#' @description Pedigree horder accessors -#' @param object A Pedigree object. -#' @return The slot `horder` present in the `Hints` slot of -#' a Pedigree object. -#' @rdname Pedigree -#' @aliases horder,Pedigree-method -#' @export + +#' @rdname Hints-class +#' @usage NULL setGeneric("horder", function(object) { standardGeneric("horder") }) -setMethod("horder", "Pedigree", function(object) { - horder(hints(object)) -}) - +#' @section Accessors: +#' - `horder(x)` : Get the horder vector +#' @rdname Hints-class +#' @usage NULL setMethod("horder", "Hints", function(object) { object@horder }) +#' @section Accessors: +#' - `horder(x)` : Get the horder vector from the Hints object. +#' Wrapper of `horder(hints(x))` +#' @rdname Pedigree-class +#' @usage NULL +setMethod("horder", "Pedigree", function(object) { + horder(hints(object)) +}) + +#' @rdname Hints-class +#' @usage NULL setGeneric("horder<-", function(object, value) { standardGeneric("horder<-") }) +#' @section Accessors: +#' - `horder(x) <- value` : Set the horder vector +#' @rdname Hints-class +#' @usage NULL setMethod( "horder<-", - signature(object = "Pedigree", value = "ANY"), + signature(object = "Hints", value = "ANY"), function(object, value) { - if (length(value) != length(object)) { - stop( - "The length of the new value should be: ", - "equal to the length of the pedigree" - ) + if (length(value) > 0 && is.null(names(value))) { + stop("horder must be named") } - horder(hints(object)) <- value + object@horder <- value validObject(object) object } ) +#' @section Accessors: +#' - `horder(x) <- value` : Set the horder vector from the Hints object. +#' Wrapper of `horder(hints(x)) <- value` +#' @rdname Hints-class +#' @usage NULL setMethod( "horder<-", - signature(object = "Hints", value = "ANY"), + signature(object = "Pedigree", value = "ANY"), function(object, value) { - if (length(value) > 0 && is.null(names(value))) { - stop("horder must be named") + if (length(value) != length(object)) { + stop( + "The length of the new value should be: ", + "equal to the length of the pedigree" + ) } - object@horder <- value + horder(hints(object)) <- value validObject(object) object } ) + #### S4 spouse Accessors #### -#' @description Pedigree spouse accessors -#' @param object A Pedigree object. -#' @return The slot `spouse` present in the `Hints` slot of -#' a Pedigree object. -#' @rdname extract-methods -#' @aliases spouse,Pedigree-method -#' @export + +#' @rdname Hints-class +#' @usage NULL setGeneric("spouse", function(object) { standardGeneric("spouse") }) -setMethod("spouse", signature(object = "Pedigree"), function(object) { - spouse(hints(object)) -}) - +#' @section Accessors: +#' - `spouse(x)` : Get the spouse data.frame +#' @rdname Hints-class +#' @usage NULL setMethod("spouse", signature(object = "Hints"), function(object) { object@spouse }) +#' @section Accessors: +#' - `spouse(x)` : Get the spouse data.frame from the Hints object. +#' Wrapper of `spouse(hints(x))`. +#' @rdname Pedigree-class +#' @usage NULL +setMethod("spouse", signature(object = "Pedigree"), function(object) { + spouse(hints(object)) +}) + +#' @rdname Pedigree-class +#' @usage NULL setGeneric("spouse<-", function(object, value) { standardGeneric("spouse<-") }) +#' @section Accessors: +#' - `spouse(x) <- value` : Set the spouse data.frame +#' @rdname Hints-class +#' @usage NULL setMethod( "spouse<-", - signature(object = "Pedigree", value = "data.frame"), + signature(object = "Hints", value = "data.frame"), function(object, value) { - spouse(hints(object)) <- value + df <- check_columns(value, c("idl", "idr", "anchor")) + df$anchor <- anchor_to_factor(df$anchor) + object@spouse <- df validObject(object) object } ) +#' @section Accessors: +#' - `spouse(x) <- value` : Set the spouse data.frame from the Hints object. +#' Wrapper of `spouse(hints(x)) <- value`. +#' @rdname Pedigree-class +#' @usage NULL setMethod( "spouse<-", - signature(object = "Hints", value = "data.frame"), + signature(object = "Pedigree", value = "data.frame"), function(object, value) { - df <- check_columns(value, c("idl", "idr", "anchor")) - df$anchor <- anchor_to_factor(df$anchor) - object@spouse <- df + spouse(hints(object)) <- value validObject(object) object } -) \ No newline at end of file +) diff --git a/R/AllClass.R b/R/AllClass.R index b5f8c131..e0557cb6 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -7,85 +7,6 @@ setClassUnion("character_OR_integer", c("character", "integer")) setClassUnion("numeric_OR_logical", c("numeric", "logical")) setClassUnion("missing_OR_NULL", c("missing", "NULL")) -#### Hints Class #### - -#' S4 class to represent a hints object. -#' -#' A hints object is a list of two elements used -#' to order the individuals in the pedigree plot. -#' -#' @slot horder A numeric named vector with one element per subject in the -#' Pedigree. It determines the relative horizontal order of subjects within -#' a sibship, as well as the relative order of processing for the founder -#' couples. (For this latter, the female founders are ordered as though they -#' were sisters). -#' @slot spouse A data.frame with one row per hinted marriage, usually -#' only a few marriages in a Pedigree will need an added hint, for -#' instance reverse the plot order of a husband/wife pair. -#' Each row contains the identifiers of the left spouse, the right hand spouse, -#' and the anchor (i.e : `1` = left, `2` = right, `0` = either). -#' -#' @return A Hints object. -#' @seealso [Pedigree()] -#' @docType class -#' @name Hints-class -#' @rdname Hints-class -#' @export -setClass("Hints", - representation( - horder = "numeric", - spouse = "data.frame" - ) -) - -setValidity("Hints", is_valid_hints) - -#### Scale Class #### - -#' S4 class to represent the scales of a Pedigree. -#' -#' A scales object is a list of two data.frame used -#' to represent the affection (filling) and the availability -#' (border) status of the individuals in the pedigree plot. -#' -#' @slot fill A data.frame with the informations for the affection status. -#' The columns needed are: -#' - 'order': the order of the affection to be used -#' - 'column_values': name of the column containing the raw values in the -#' Ped object -#' - 'column_mods': name of the column containing the mods of the transformed -#' values in the Ped object -#' - 'mods': all the different mods -#' - 'labels': the corresponding labels of each mods -#' - 'affected': a logical value indicating if the mod correspond to an affected -#' individuals -#' - 'fill': the color to use for this mods -#' - 'density': the density of the shading -#' - 'angle': the angle of the shading -#' @slot border A data.frame with the informations for the availability status. -#' The columns needed are: -#' - 'column_values': name of the column containing the raw values in the -#' Ped object -#' - 'column_mods': name of the column containing the mods of the transformed -#' values in the Ped object -#' - 'mods': all the different mods -#' - 'labels': the corresponding labels of each mods -#' - 'border': the color to use for this mods -#' @return A Scale object. -#' @seealso [Pedigree()] -#' @docType class -#' @name Scale-class -#' @rdname Scale-class -#' @export -setClass("Scales", - representation( - fill = "data.frame", - border = "data.frame" - ) -) - -setValidity("Scales", is_valid_scales) - #### Ped Class #### #' Ped object @@ -180,13 +101,16 @@ setValidity("Ped", is_valid_ped) #' between individuals in the pedigree. #' It is used to create a Pedigree object. #' The minimal needed informations are `id1`, `id2` and `code`. +#' #' If a `famid` is provided, the individuals `id` will be aggregated #' to the `famid` character to ensure the uniqueness of the `id`. #' #' @slot id1 A character vector with the id of the first individual. #' @slot id2 A character vector with the id of the second individual. #' @slot code An ordered factor vector with the code of the special -#' relationship. (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). +#' relationship. +#' +#' (i.e. `MZ twin` < `DZ twin` < `UZ twin` < `Spouse`). #' @slot famid A character vector with the famid of the individuals. #' #' @seealso [Pedigree()] @@ -213,17 +137,92 @@ setMethod("parallel_slot_names", "Rel", setValidity("Rel", is_valid_rel) +#### Hints Class #### + +#' Hints object +#' +#' The hints are used to specify the order of the individuals in the pedigree +#' and to specify the order of the spouses. +#' +#' @slot horder A numeric named vector with one element per subject in the +#' Pedigree. It determines the relative horizontal order of subjects within +#' a sibship, as well as the relative order of processing for the founder +#' couples. (For this latter, the female founders are ordered as though they +#' were sisters). +#' @slot spouse A data.frame with one row per hinted marriage, usually +#' only a few marriages in a Pedigree will need an added hint, for +#' instance reverse the plot order of a husband/wife pair. +#' Each row contains the identifiers of the left spouse, the right hand spouse, +#' and the anchor (i.e : `1` = left, `2` = right, `0` = either). +#' +#' @seealso [Pedigree()] +#' @rdname Hints-class +#' @export +setClass("Hints", + representation( + horder = "numeric", + spouse = "data.frame" + ) +) + +setValidity("Hints", is_valid_hints) + +#### Scale Class #### + +#' Scales object +#' +#' A Scales object is a list of two data.frame. +#' The first one is used to represent the affection status of the individuals +#' and therefore the filling of the individuals in the pedigree plot. +#' The second one is used to represent the availability status of the +#' individuals and therefore the border color of the individuals in the +#' pedigree plot. +#' +#' @slot fill A data.frame with the informations for the affection status. +#' The columns needed are: +#' - 'order': the order of the affection to be used +#' - 'column_values': name of the column containing the raw values in the +#' Ped object +#' - 'column_mods': name of the column containing the mods of the transformed +#' values in the Ped object +#' - 'mods': all the different mods +#' - 'labels': the corresponding labels of each mods +#' - 'affected': a logical value indicating if the mod correspond to an affected +#' individuals +#' - 'fill': the color to use for this mods +#' - 'density': the density of the shading +#' - 'angle': the angle of the shading +#' @slot border A data.frame with the informations for the availability status. +#' The columns needed are: +#' - 'column_values': name of the column containing the raw values in the +#' Ped object +#' - 'column_mods': name of the column containing the mods of the transformed +#' values in the Ped object +#' - 'mods': all the different mods +#' - 'labels': the corresponding labels of each mods +#' - 'border': the color to use for this mods +#' +#' @seealso [Pedigree()] +#' @docType class +#' @rdname Scales-class +#' @export +setClass("Scales", + representation( + fill = "data.frame", + border = "data.frame" + ) +) + +setValidity("Scales", is_valid_scales) + #### Pedigree Class #### -#' S4 class to represent a pedigree. +#' Pedigree object #' #' A pedigree is a ensemble of individuals linked to each other into #' a family tree. -#' -#' They are created from a data.frame containing the individuals informations -#' and a relation ship data.frame for the special links between individuals. -#' A list of scales can be provided to create a legend. -#' To create a Pedigree object, use the function -#' [Pedigree()]. +#' A Pedigree object store the informations of the individuals and the +#' special relationships between them. It also permit to store the +#' informations needed to plot the pedigree (i.e. scales and hints). #' #' @slot ped A Ped object for the identity informations. See [Ped()] for #' more informations. @@ -234,20 +233,17 @@ setValidity("Rel", is_valid_rel) #' @slot hints A Hints object for the ordering of the #' individuals in the plot. See [Hints()] for more informations. #' -#' @return A Pedigree object. #' @seealso [Pedigree()], [Ped()], [Rel()], [Scales()], [Hints()] -#' @docType class -#' @name Pedigree-class #' @rdname Pedigree-class #' @include AllValidity.R #' @export setClass("Pedigree", representation( - ped = "Ped", # identity data - rel = "Rel", # special relationships - scales = "Scales", # scales for the plot - hints = "Hints" # hints for the plot + ped = "Ped", # identity data + rel = "Rel", # special relationships + scales = "Scales", # scales for the plot + hints = "Hints" # hints for the plot ) ) -setValidity("Pedigree", is_valid_pedigree) \ No newline at end of file +setValidity("Pedigree", is_valid_pedigree) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index f2c1c8d0..50a49b27 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -185,6 +185,7 @@ setMethod("Ped", "missing", ) #### S4 Rel constructor #### + #' @description #' #' ## Constructor : @@ -273,8 +274,6 @@ setMethod("Rel", "character_OR_integer", ) #' @rdname Rel-class -#' @examples -#' Rel() #' @usage NULL setMethod("Rel", "missing", function(obj) { @@ -283,13 +282,13 @@ setMethod("Rel", "missing", ) #### S4 Hints constructor #### -#' Create a Hints object + +#' @description #' -#' @description Create a Hints object. -#' The hints are used to specify the order of the individuals in the pedigree -#' and to specify the order of the spouses. -#' You can specify the horder and the spouse in the call to the constructor -#' independently or together. +#' ## Constructor : +#' +#' You either need to provide **horder** or **spouse** in +#' the dedicated parameters (together or separately), or inside a list. #' #' @param horder A named numeric vector with one element per subject in the #' Pedigree. It determines the relative horizontal order of subjects within a @@ -307,14 +306,14 @@ setMethod("Rel", "missing", #' #' @return A Hints object. #' @seealso [Pedigree()] -#' @rdname Hints +#' @rdname Hints-class #' @export setGeneric("Hints", function(horder, spouse) { standardGeneric("Hints") }) -#' @docType methods -#' @rdname Hints +#' @rdname Hints-class +#' @usage NULL setMethod("Hints", signature(horder = "Hints", spouse = "missing_OR_NULL"), function(horder, spouse) { @@ -322,11 +321,10 @@ setMethod("Hints", } ) -#' @docType methods -#' @rdname Hints +#' @rdname Hints-class #' @export -#' @aliases Hints,list,missing_OR_NULL #' @examples +#' #' Hints( #' list( #' horder = c("1" = 1, "2" = 2, "3" = 3), @@ -358,11 +356,10 @@ setMethod("Hints", } ) -#' @docType methods -#' @rdname Hints +#' @rdname Hints-class #' @export -#' @aliases Hints,numeric,data.frame #' @examples +#' #' Hints( #' horder = c("1" = 1, "2" = 2, "3" = 3), #' spouse = data.frame( @@ -388,11 +385,10 @@ setMethod("Hints", } ) -#' @docType methods -#' @rdname Hints +#' @rdname Hints-class #' @export -#' @aliases Hints,numeric,missing_OR_NULL #' @examples +#' #' Hints( #' horder = c("1" = 1, "2" = 2, "3" = 3) #' ) @@ -411,11 +407,10 @@ setMethod("Hints", } ) -#' @docType methods -#' @rdname Hints +#' @rdname Hints-class #' @export -#' @aliases Hints,missing_OR_NULL,data.frame #' @examples +#' #' Hints( #' spouse = data.frame( #' idl = c("1", "2"), @@ -435,12 +430,9 @@ setMethod("Hints", } ) -#' @docType methods -#' @rdname Hints +#' @rdname Hints-class #' @export -#' @aliases Hints,missing_OR_NULL,missing_OR_NULL -#' @examples -#' Hints() +#' @usage NULL setMethod("Hints", signature(horder = "missing_OR_NULL", spouse = "missing_OR_NULL"), function(horder, spouse) { @@ -452,14 +444,14 @@ setMethod("Hints", ) #### S4 Scales constructor #### -#' Create a Scales object + +#' @description +#' +#' ## Constructor : #' -#' @description Create a Scales object from two data.frame. -#' The first one is used to represent the affection status of the individuals -#' and therefore the filling of the individuals in the pedigree plot. -#' The second one is used to represent the availability status of the -#' individuals and therefore the border color of the individuals in the -#' pedigree plot. +#' You need to provide both **fill** and **border** in the dedicated parameters. +#' However this is usually done using the [generate_colors()] function with a +#' Pedigree object. #' #' @param fill A data.frame with the informations for the affection status. #' The columns needed are: @@ -486,18 +478,17 @@ setMethod("Hints", #' - 'border': the color to use for this mods #' #' @return A Scales object. -#' @seealso [Pedigree()] -#' @rdname Scales +#' @seealso [Pedigree()], [generate_colors()] +#' @rdname Scales-class #' @export setGeneric("Scales", function(fill, border) { standardGeneric("Scales") }) -#' @docType methods -#' @rdname Scales +#' @rdname Scales-class #' @export -#' @aliases Scales,data.frame,data.frame #' @examples +#' #' Scales( #' fill = data.frame( #' order = 1, @@ -536,12 +527,9 @@ setMethod("Scales", } ) -#' @docType methods -#' @rdname Scales +#' @rdname Scales-class #' @export -#' @aliases Scales,missing,missing -#' @examples -#' Scales() +#' @usage NULL setMethod("Scales", signature(fill = "missing", border = "missing"), function(fill, border) { @@ -566,10 +554,14 @@ setMethod("Scales", new("Scales", fill = fill, border = border) } ) + #### S4 Pedigree constructor #### -#' Create a Pedigree object + +#' @description +#' +#' ## Constructor : #' -#' @description Main constructor of the package. +#' Main constructor of the package. #' This constructor help to create a `Pedigree` object from #' different `data.frame` or a set of vectors. #' @@ -600,6 +592,7 @@ setMethod("Scales", #' - `fatherId` / `dadid` #' - `motherId` / `momid` #' - `gender` / `sex` +#' #' The `family` / `famid` column can also be used to specify the family of the #' individuals and will be merge to the `indId` / `id` field separated by an #' underscore. @@ -626,6 +619,7 @@ setMethod("Scales", #' #' The value relation code recognized by the function are the one defined #' by the [rel_code_to_factor()] function. +#' #' @param hints A Hints object or a named list containing `horder` and #' `spouse`. #' @param cols_ren_ped A named list with the columns to rename for the @@ -641,19 +635,17 @@ setMethod("Scales", #' @param ... Other arguments to pass to the function `generate_colors`. #' @inheritParams Ped #' @inheritParams is_informative +#' #' @return A Pedigree object. #' @export -#' @rdname Pedigree -#' @aliases Pedigree +#' @rdname Pedigree-class #' @seealso [Pedigree()], [Ped()], [Rel()], [Scales()] setGeneric("Pedigree", signature = "obj", function(obj, ...) standardGeneric("Pedigree") ) #' @export -#' @rdname Pedigree -#' @aliases Pedigree,character -#' @docType methods +#' @rdname Pedigree-class #' @param affected A logical vector with the affection status of the #' individuals #' (i.e. `FALSE` = unaffected, `TRUE` = affected, `NA` = unknown). @@ -665,6 +657,7 @@ setGeneric("Pedigree", signature = "obj", #' If `affected` is a data.frame, it will be overwritten by the column #' names of the data.frame. #' @examples +#' #' Pedigree( #' obj = c("1", "2", "3", "4", "5", "6"), #' dadid = c("4", "4", "6", "0", "0", "0"), @@ -762,10 +755,9 @@ setMethod("Pedigree", "character_OR_integer", function(obj, dadid, momid, }) #' @export -#' @rdname Pedigree -#' @aliases Pedigree,data.frame -#' @docType methods +#' @rdname Pedigree-class #' @examples +#' #' data(sampleped) #' Pedigree(sampleped) setMethod("Pedigree", "data.frame", function( @@ -899,11 +891,8 @@ setMethod("Pedigree", "data.frame", function( ) #' @export -#' @rdname Pedigree -#' @aliases Pedigree,missing -#' @docType methods -#' @examples -#' Pedigree() +#' @rdname Pedigree-class +#' @usage NULL setMethod("Pedigree", "missing", function(obj) { ped <- new("Pedigree", ped = Ped(), rel = Rel(), diff --git a/R/AllGeneric.R b/R/AllGeneric.R index fb921661..04861cda 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -121,18 +121,14 @@ setMethod("subset", "Ped", function(x, i, del_parents = FALSE, keep = TRUE) { }) #### S4 Rel generics #### -#' Summary function of Rel object -#' -#' @description Compute the summary of a Rel object -#' -#' @param object A Rel object. -#' -#' @return A character vector with the summary of the object. -#' + +#' @section Generics: +#' - `summary(x)`: Compute the summary of a Rel object #' @export #' @importFrom S4Vectors classNameForDisplay #' @importFrom S4Vectors summary -#' @rdname Rel +#' @rdname Rel-class +#' @usage NULL setMethod("summary", "Rel", function(object) { object_class <- classNameForDisplay(object) @@ -152,19 +148,14 @@ setMethod("summary", "Rel", } ) -#' Show function of Rel object -#' -#' @description Convert the Rel object to a data.frame +#' @section Generics: +#' - `show(x)`: Convert the Rel object to a data.frame #' and print it with its summary. -#' -#' @param object A Rel object. -#' -#' @return The Rel object with the relationship informations. -#' #' @export #' @importFrom S4Vectors cbind_mcols_for_display #' @importFrom S4Vectors makeClassinfoRowForCompactPrinting -#' @rdname Rel +#' @rdname Rel-class +#' @usage NULL setMethod("show", signature(object = "Rel"), function(object) { cat(summary(object), ":\n", sep = "") @@ -181,14 +172,12 @@ setMethod("show", signature(object = "Rel"), } ) -#' @title Rel object to list -#' @description Convert a Rel object to a list -#' @param from A Rel object. -#' @return A list with the relationship informations. -#' @rdname Rel -#' @aliases as.list,Rel-method -#' @importMethodsFrom S4Vectors as.list +#' @section Generics: +#' - `as.list(x)`: Convert a Rel object to a list +#' @rdname Rel-class +#' @importFrom S4Vectors as.list #' @export +#' @usage NULL setMethod("as.list", "Rel", function(x) { to <- list() for (slot in slotNames(x)) { @@ -202,14 +191,12 @@ setMethod("as.list", "Rel", function(x) { c(to, as.list(mcols(x))) }) -#' @title Rel to data.frame -#' @description Convert a Rel object to a data.frame -#' @param from A Rel object. -#' @return A data.frame with the relationship informations. -#' @rdname Rel -#' @aliases as.data.frame,Rel-method +#' @section Generics: +#' - `as.data.frame(x)`: Convert a Rel object to a data.frame +#' @rdname Rel-class #' @importFrom S4Vectors as.data.frame #' @export +#' @usage NULL setMethod("as.data.frame", "Rel", function(x) { lst <- as.list(x) if (length(unique(lapply(lst, length))) != 1) { @@ -218,20 +205,16 @@ setMethod("as.data.frame", "Rel", function(x) { data.frame(lst) }) -#' Subset a Rel object -#' -#' @description Subset a Rel object based on the individuals -#' identifiers given. -#' -#' @param x A Rel object. -#' @param idlist A vector of individuals identifiers to keep. -#' -#' @return A Rel object subsetted. -#' -#' @rdname extract-methods -#' @aliases subset,Rel-method +#' @section Generics: +#' - `subset(x, i, keep = TRUE)`: Subset a Rel object +#' based on the individuals identifiers given. +#' - `i` : A vector of individuals identifiers to keep. +#' - `keep` : A logical value indicating if the individuals +#' should be kept or deleted. +#' @rdname Rel-class #' @importFrom S4Vectors subset #' @export +#' @usage NULL setMethod("subset", "Rel", function(x, idlist, keep = TRUE) { if (is.factor(idlist)) { idlist <- as.character(idlist) @@ -256,31 +239,27 @@ setMethod("subset", "Rel", function(x, idlist, keep = TRUE) { }) #### S4 Hints generics #### -#' Set Hints object to list -#' -#' @description Convert a Hints object to a list -#' -#' @param from A Hints object. -#' -#' @return A list with the hints informations. -#' -#' @rdname Hints -#' @aliases as.list,Hints-method -#' @importMethodsFrom S4Vectors as.list + +#' @section Generics: +#' - `as.list(x)`: Convert a Hints object to a list +#' @rdname Hint-class +#' @importFrom S4Vectors as.list #' @export +#' @usage NULL setMethod("as.list", "Hints", function(x) { list(horder = x@horder, spouse = x@spouse) }) -#' Hints subscripting -#' @description Subset the Hints object based on the identifiers -#' given -#' @param x A Hints object -#' @param idlist A vector of identifiers to subset -#' @return A list of Hints object subsetted -#' @rdname extract-methods -#' @aliases subset_hints,Hints-method -#' @keywords internal +#' @section Generics: +#' - `subset(x, i, keep = TRUE)`: Subset a Hints object +#' based on the individuals identifiers given. +#' - `i` : A vector of individuals identifiers to keep. +#' - `keep` : A logical value indicating if the individuals +#' should be kept or deleted. +#' @rdname Hints-class +#' @importFrom S4Vectors subset +#' @export +#' @usage NULL setMethod("subset", "Hints", function(x, idlist, keep = TRUE) { horder <- horder(x) spouse <- spouse(x) @@ -312,70 +291,61 @@ setMethod("subset", "Hints", function(x, idlist, keep = TRUE) { }) #### S4 Scales generics #### -#' Set Scales object to list -#' -#' @description Convert a Scales object to a list -#' -#' @param from A Scales object. -#' -#' @return A list with the hints informations. -#' -#' @rdname Scales -#' @aliases as.list,Scales-method -#' @importMethodsFrom S4Vectors as.list + +#' @section Generics: +#' - `as.list(x)`: Convert a Scales object to a list +#' @rdname Scales-class +#' @importFrom S4Vectors as.list #' @export +#' @usage NULL setMethod("as.list", "Scales", function(x) { list(fill = x@fill, border = x@border) }) #### S4 Pedigree generics #### -#' Compute the length of a Pedigree object -#' @param x A Pedigree object. -#' @return The number of individuals in the Pedigree object. -#' @docType methods -#' @aliases length,Pedigree-method +#' @section Generics: +#' - `length(x)`: Get the length of a Pedigree object. +#' Wrapper of `length(ped(x))`. +#' @rdname Pedigree-class #' @export +#' @usage NULL setMethod("length", c(x = "Pedigree"), function(x) { length(ped(x)) } ) -#' @title Pedigree methods -#' @description Pedigree show method -#' @param object A Pedigree object. -#' @return A character vector with the informations about the object. -#' @rdname extract-methods -#' @aliases show,Pedigree-method + +#' @section Generics: +#' - `show(x)`: Print the information of the Ped and Rel +#' object inside the Pedigree object. +#' @export +#' @rdname Pedigree-class +#' @usage NULL setMethod("show", signature(object = "Pedigree"), function(object) { cat("Pedigree object with: \n") print(ped(object)) print(rel(object)) }) -#' @description Pedigree summary method. -#' @param object A Pedigree object. -#' @return A character vector with the summary of the object. -#' @rdname extract-methods -#' @aliases summary,Pedigree-method +#' @section Generics: +#' - `summary(x)`: Compute the summary of the Ped and Rel object +#' inside the Pedigree object. +#' @export +#' @rdname Pedigree-class +#' @usage NULL setMethod("summary", signature(object = "Pedigree"), function(object) { cat("Pedigree object with \n") print(summary(ped(object))) print(summary(rel(object))) }) -#' Convert a Pedigree object to a list -#' -#' @description Convert a Pedigree object to a list -#' -#' @param from A Pedigree object. -#' -#' @return A list with the individuals informations. -#' -#' @rdname extract-methods -#' @aliases as.list,Pedigree-method -#' @importMethodsFrom S4Vectors as.list +#' @section Generics: +#' - `as.list(x)`: Convert a Pedigree object to a list +#' @rdname Pedigree-class +#' @importFrom S4Vectors as.list #' @export +#' @usage NULL setMethod("as.list", "Pedigree", function(x) { list( ped = as.list(ped(x)), @@ -385,13 +355,18 @@ setMethod("as.list", "Pedigree", function(x) { ) }) -#' @description Extract parts of a Pedigree object -#' @param x A Pedigree object. -#' @param i A vector of individuals id or a vector of index. -#' @param j A vector of columns names. -#' @param drop A logical value indicating if the dimensions should be dropped. -#' @return A Pedigree object subsetted. -#' @rdname extract-methods +#' @section Generics: +#' - `subset(x, i, keep = TRUE)`: Subset a Pedigree object +#' based on the individuals identifiers given. +#' - `i` : A vector of individuals identifiers to keep. +#' - `del_parents` : A logical value indicating if the parents +#' of the individuals should be deleted. +#' - `keep` : A logical value indicating if the individuals +#' should be kept or deleted. +#' @rdname Pedigree-class +#' @importFrom S4Vectors subset +#' @export +#' @usage NULL setMethod("subset", "Pedigree", function(x, i, del_parents = FALSE, keep = TRUE) { new_ped <- subset(ped(x), i, del_parents = del_parents, keep = keep) @@ -408,8 +383,15 @@ setMethod("subset", "Pedigree", } ) +#' @section Generics: +#' - `x[i, del_parents, keep]`: Subset a Pedigree object +#' based on the individuals identifiers given. +#' @rdname Pedigree-class +#' @importFrom S4Vectors subset +#' @export +#' @usage NULL setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), - function(x, i, j, drop = TRUE) { - subset(x, i) + function(x, i, j, del_parents = FALSE, keep = TRUE, drop = TRUE) { + subset(x, i, del_parents, keep) } ) \ No newline at end of file diff --git a/man/Hints-class.Rd b/man/Hints-class.Rd index 1ea3468a..23e8b414 100644 --- a/man/Hints-class.Rd +++ b/man/Hints-class.Rd @@ -1,15 +1,65 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, +% R/AllAccessors.R, R/AllGeneric.R \docType{class} \name{Hints-class} \alias{Hints-class} -\title{S4 class to represent a hints object.} +\alias{Hints} +\alias{Hints,Hints,missing_OR_NULL-method} +\alias{Hints,list,missing_OR_NULL-method} +\alias{Hints,numeric,data.frame-method} +\alias{Hints,numeric,missing_OR_NULL-method} +\alias{Hints,missing_OR_NULL,data.frame-method} +\alias{Hints,missing_OR_NULL,missing_OR_NULL-method} +\alias{horder} +\alias{horder,Hints-method} +\alias{horder<-} +\alias{horder<-,Hints-method} +\alias{horder<-,Pedigree-method} +\alias{spouse} +\alias{spouse,Hints-method} +\alias{spouse<-,Hints,data.frame-method} +\alias{subset,Hints-method} +\title{Hints object} +\usage{ +Hints(horder, spouse) + +\S4method{Hints}{list,missing_OR_NULL}(horder, spouse) + +\S4method{Hints}{numeric,data.frame}(horder, spouse) + +\S4method{Hints}{numeric,missing_OR_NULL}(horder, spouse) + +\S4method{Hints}{missing_OR_NULL,data.frame}(horder, spouse) +} +\arguments{ +\item{horder}{A named numeric vector with one element per subject in the +Pedigree. It determines the relative horizontal order of subjects within a +sibship, as well as the relative order of processing for the founder couples. +(For this latter, the female founders are ordered as though +they were sisters). +The names of the vector should be the individual identifiers.} + +\item{spouse}{A data.frame with one row per hinted marriage, usually only +a few marriages in a pedigree will need an added hint, for instance reverse +the plot order of a husband/wife pair. +Each row contains the id of the left spouse (i.e. \code{idl}), the id of the +right hand spouse (i.e. \code{idr}), and the anchor (i.e : \code{anchor} : +\code{1} = left, \code{2} = right, \code{0} = either). +Children will preferentially appear under the parents of the anchored spouse.} +} \value{ A Hints object. } \description{ -A hints object is a list of two elements used -to order the individuals in the pedigree plot. +The hints are used to specify the order of the individuals in the pedigree +and to specify the order of the spouses. + +\subsection{Constructor :}{ + +You either need to provide \strong{horder} or \strong{spouse} in +the dedicated parameters (together or separately), or inside a list. +} } \section{Slots}{ @@ -27,6 +77,82 @@ Each row contains the identifiers of the left spouse, the right hand spouse, and the anchor (i.e : \code{1} = left, \code{2} = right, \code{0} = either).} }} +\section{Accessors}{ + +\itemize{ +\item \code{horder(x)} : Get the horder vector +} + + +\itemize{ +\item \code{horder(x) <- value} : Set the horder vector +} + + +\itemize{ +\item \code{horder(x) <- value} : Set the horder vector from the Hints object. +Wrapper of \code{horder(hints(x)) <- value} +} + + +\itemize{ +\item \code{spouse(x)} : Get the spouse data.frame +} + + +\itemize{ +\item \code{spouse(x) <- value} : Set the spouse data.frame +} +} + +\section{Generics}{ + +\itemize{ +\item \code{subset(x, i, keep = TRUE)}: Subset a Hints object +based on the individuals identifiers given. +\itemize{ +\item \code{i} : A vector of individuals identifiers to keep. +\item \code{keep} : A logical value indicating if the individuals +should be kept or deleted. +} +} +} + +\examples{ + +Hints( + list( + horder = c("1" = 1, "2" = 2, "3" = 3), + spouse = data.frame( + idl = c("1", "2"), + idr = c("2", "3"), + anchor = c(1, 2) + ) +) + +Hints( + horder = c("1" = 1, "2" = 2, "3" = 3), + spouse = data.frame( + idl = c("1", "2"), + idr = c("2", "3"), + anchor = c(1, 2) + ) +) + +Hints( + horder = c("1" = 1, "2" = 2, "3" = 3) +) + +Hints( + spouse = data.frame( + idl = c("1", "2"), + idr = c("2", "3"), + anchor = c(1, 2) + ) +) +} \seealso{ +\code{\link[=Pedigree]{Pedigree()}} + \code{\link[=Pedigree]{Pedigree()}} } diff --git a/man/Hints.Rd b/man/Hints.Rd deleted file mode 100644 index 24967f50..00000000 --- a/man/Hints.Rd +++ /dev/null @@ -1,100 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllConstructor.R, R/AllGeneric.R -\docType{methods} -\name{Hints} -\alias{Hints} -\alias{Hints,Hints,missing_OR_NULL-method} -\alias{Hints,list,missing_OR_NULL-method} -\alias{Hints,list,missing_OR_NULL} -\alias{Hints,numeric,data.frame-method} -\alias{Hints,numeric,data.frame} -\alias{Hints,numeric,missing_OR_NULL-method} -\alias{Hints,numeric,missing_OR_NULL} -\alias{Hints,missing_OR_NULL,data.frame-method} -\alias{Hints,missing_OR_NULL,data.frame} -\alias{Hints,missing_OR_NULL,missing_OR_NULL-method} -\alias{Hints,missing_OR_NULL,missing_OR_NULL} -\alias{as.list,Hints-method} -\title{Create a Hints object} -\usage{ -Hints(horder, spouse) - -\S4method{Hints}{Hints,missing_OR_NULL}(horder, spouse) - -\S4method{Hints}{list,missing_OR_NULL}(horder, spouse) - -\S4method{Hints}{numeric,data.frame}(horder, spouse) - -\S4method{Hints}{numeric,missing_OR_NULL}(horder, spouse) - -\S4method{Hints}{missing_OR_NULL,data.frame}(horder, spouse) - -\S4method{Hints}{missing_OR_NULL,missing_OR_NULL}(horder, spouse) - -\S4method{as.list}{Hints}(x) -} -\arguments{ -\item{horder}{A named numeric vector with one element per subject in the -Pedigree. It determines the relative horizontal order of subjects within a -sibship, as well as the relative order of processing for the founder couples. -(For this latter, the female founders are ordered as though -they were sisters). -The names of the vector should be the individual identifiers.} - -\item{spouse}{A data.frame with one row per hinted marriage, usually only -a few marriages in a pedigree will need an added hint, for instance reverse -the plot order of a husband/wife pair. -Each row contains the id of the left spouse (i.e. \code{idl}), the id of the -right hand spouse (i.e. \code{idr}), and the anchor (i.e : \code{anchor} : -\code{1} = left, \code{2} = right, \code{0} = either). -Children will preferentially appear under the parents of the anchored spouse.} - -\item{from}{A Hints object.} -} -\value{ -A Hints object. - -A list with the hints informations. -} -\description{ -Create a Hints object. -The hints are used to specify the order of the individuals in the pedigree -and to specify the order of the spouses. -You can specify the horder and the spouse in the call to the constructor -independently or together. - -Convert a Hints object to a list -} -\examples{ -Hints( - list( - horder = c("1" = 1, "2" = 2, "3" = 3), - spouse = data.frame( - idl = c("1", "2"), - idr = c("2", "3"), - anchor = c(1, 2) - ) -) -Hints( - horder = c("1" = 1, "2" = 2, "3" = 3), - spouse = data.frame( - idl = c("1", "2"), - idr = c("2", "3"), - anchor = c(1, 2) - ) -) -Hints( - horder = c("1" = 1, "2" = 2, "3" = 3) -) -Hints( - spouse = data.frame( - idl = c("1", "2"), - idr = c("2", "3"), - anchor = c(1, 2) - ) -) -Hints() -} -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/Ped-class.Rd b/man/Ped-class.Rd index 67e8338b..f1b9656c 100644 --- a/man/Ped-class.Rd +++ b/man/Ped-class.Rd @@ -325,10 +325,6 @@ Ped( ) Ped() -summary(ped) -show(ped) -as.list(ped) -subset(ped, c("1", "2")) } \seealso{ \code{\link[=Pedigree]{Pedigree()}} diff --git a/man/Pedigree-class.Rd b/man/Pedigree-class.Rd index 90244688..2b86e88f 100644 --- a/man/Pedigree-class.Rd +++ b/man/Pedigree-class.Rd @@ -1,23 +1,233 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R, R/AllAccessors.R +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, +% R/AllAccessors.R, R/AllGeneric.R \docType{class} \name{Pedigree-class} \alias{Pedigree-class} +\alias{Pedigree} +\alias{Pedigree,character_OR_integer-method} +\alias{Pedigree,data.frame-method} +\alias{Pedigree,missing-method} \alias{famid,Pedigree-method} -\title{S4 class to represent a pedigree.} +\alias{ped} +\alias{ped,Pedigree,ANY-method} +\alias{ped,Pedigree,missing-method} +\alias{ped<-} +\alias{ped<-,Pedigree,ANY,ANY-method} +\alias{ped<-,Pedigree,missing,Ped-method} +\alias{mcols,Pedigree-method} +\alias{mcols<-,Pedigree,ANY-method} +\alias{rel} +\alias{rel,Pedigree,ANY-method} +\alias{rel,Pedigree,missing-method} +\alias{rel<-} +\alias{rel<-,Pedigree,ANY,ANY-method} +\alias{rel<-,Pedigree,missing,Rel-method} +\alias{scales} +\alias{scales,Pedigree-method} +\alias{scales<-} +\alias{scales<-,Pedigree,Scales-method} +\alias{fill,Pedigree-method} +\alias{fill<-,Pedigree,data.frame-method} +\alias{border,Pedigree-method} +\alias{border<-,Pedigree,data.frame-method} +\alias{hints} +\alias{hints,Pedigree-method} +\alias{hints<-} +\alias{hints<-,Pedigree,Hints-method} +\alias{horder,Pedigree-method} +\alias{spouse,Pedigree-method} +\alias{spouse<-} +\alias{spouse<-,Pedigree,data.frame-method} +\alias{length,Pedigree-method} +\alias{show,Pedigree-method} +\alias{summary,Pedigree-method} +\alias{as.list,Pedigree-method} +\alias{subset,Pedigree-method} +\alias{[,Pedigree,ANY,missing,ANY-method} +\title{Pedigree object} +\usage{ +Pedigree(obj, ...) + +\S4method{Pedigree}{character_OR_integer}( + obj, + dadid, + momid, + sex, + famid = NA, + avail = NULL, + affected = NULL, + status = NULL, + steril = NULL, + rel_df = NULL, + missid = NA_character_, + col_aff = "affection", + normalize = TRUE, + ... +) + +\S4method{Pedigree}{data.frame}( + obj = data.frame(indId = character(), fatherId = character(), motherId = character(), + gender = numeric(), family = character(), available = numeric(), vitalStatus = + numeric(), affection = numeric(), sterilisation = numeric()), + rel_df = data.frame(id1 = character(), id2 = character(), code = numeric(), famid = + character()), + cols_ren_ped = list(indId = "id", fatherId = "dadid", motherId = "momid", family = + "famid", gender = "sex", sterilisation = "steril", affection = "affected", available + = "avail", vitalStatus = "status"), + cols_ren_rel = list(id1 = "indId1", id2 = "indId2", famid = "family"), + hints = list(horder = NULL, spouse = NULL), + normalize = TRUE, + missid = NA_character_, + col_aff = "affection", + ... +) +} +\arguments{ +\item{obj}{A vector of the individuals identifiers or a data.frame +with the individuals informations. See \code{\link[=Ped]{Ped()}} for more informations.} + +\item{...}{Other arguments to pass to the function \code{generate_colors}.} + +\item{dadid}{A vector containing for each subject, the identifiers of the +biologicals fathers.} + +\item{momid}{A vector containing for each subject, the identifiers of the +biologicals mothers.} + +\item{sex}{A character, factor or numeric vector corresponding to +the gender of the individuals. This will be transformed to an ordered factor +with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated +The following values are recognized: +\itemize{ +\item character() or factor() : "f", "m", "woman", "man", "male", "female", +"unknown", "terminated" +\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" +}} + +\item{famid}{A character vector with the family identifiers of the +individuals. If provide, will be aggregated to the individuals +identifiers separated by an underscore.} + +\item{avail}{A logical vector with the availability status of the +individuals +(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} + +\item{affected}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown). +Can also be a data.frame with the same length as \code{obj}. If it is a +matrix, it will be converted to a data.frame and the columns will be +named after the \code{col_aff} argument.} + +\item{status}{A logical vector with the affection status of the +individuals +(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} + +\item{steril}{A logical vector with the sterilisation status of the +individuals +(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} + +\item{rel_df}{A data.frame with the special relationships between +individuals. See \code{\link[=Rel]{Rel()}} for more informations. +The minimum columns required are \code{id1}, \code{id2} and \code{code}. +The \code{famid} column can also be used to specify the family +of the individuals. +If a matrix is given, the columns needs to be ordered as +\code{id1}, \code{id2}, \code{code} and \code{famid}. +The code values are: +\itemize{ +\item \code{1} = Monozygotic twin +\item \code{2} = Dizygotic twin +\item \code{3} = twin of unknown zygosity +\item \code{4} = Spouse +} + +The value relation code recognized by the function are the one defined +by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} + +\item{missid}{A character vector with the missing values identifiers. +All the id, dadid and momid corresponding to those values will be set +to \code{NA_character_}.} + +\item{col_aff}{A character vector with the name of the column to be used +for the affection status. +If \code{affected} is a data.frame, it will be overwritten by the column +names of the data.frame.} + +\item{normalize}{A logical to know if the data should be normalised.} + +\item{cols_ren_ped}{A named list with the columns to rename for the +pedigree dataframe. This is useful if you want to use a dataframe with +different column names. The names of the list should be the new column +names and the values should be the old column names. The default values +are to be used with \code{normalize = TRUE}.} + +\item{cols_ren_rel}{A named list with the columns to rename for the +relationship matrix. This is useful if you want to use a dataframe with +different column names. The names of the list should be the new column +names and the values should be the old column names.} + +\item{hints}{A Hints object or a named list containing \code{horder} and +\code{spouse}.} +} \value{ A Pedigree object. } \description{ A pedigree is a ensemble of individuals linked to each other into a family tree. +A Pedigree object store the informations of the individuals and the +special relationships between them. It also permit to store the +informations needed to plot the pedigree (i.e. scales and hints). + +\subsection{Constructor :}{ + +Main constructor of the package. +This constructor help to create a \code{Pedigree} object from +different \code{data.frame} or a set of vectors. + +If any errors are found in the data, the function will return +the data.frame with the errors of the Ped object and the +Rel object. + +If the normalization is set to \code{TRUE}, then the data will be +standardized using the function \code{norm_ped()} and \code{norm_rel()}. + +If a data.frame is given, the columns names needed will depend if +the normalization is selected or not. If the normalization is selected, +the columns names needed are as follow and if not the columns names +needed are in parenthesis: +\itemize{ +\item \code{indID}: the individual identifier (\code{id}) +\item \code{fatherId}: the identifier of the biological father (\code{dadid}) +\item \code{motherId}: the identifier of the biological mother (\code{momid}) +\item \code{gender}: the sex of the individual (\code{sex}) +\item \code{family}: the family identifier of the individual (\code{famid}) +\item \code{sterilisation}: the sterilisation status of the individual (\code{steril}) +\item \code{available}: the availability status of the individual (\code{avail}) +\item \code{vitalStatus}: the death status of the individual (\code{status}) +\item \code{affection}: the affection status of the individual (\code{affected}) +\item \code{...}: other columns that will be stored in the \code{elementMetadata} slot +} + +The minimum columns required are : +\itemize{ +\item \code{indID} / \code{id} +\item \code{fatherId} / \code{dadid} +\item \code{motherId} / \code{momid} +\item \code{gender} / \code{sex} +} + +The \code{family} / \code{famid} column can also be used to specify the family of the +individuals and will be merge to the \code{indId} / \code{id} field separated by an +underscore. +The columns \code{sterilisation}, \code{available}, \code{vitalStatus}, \code{affection} +will be transformed with the \code{\link[=vect_to_binary]{vect_to_binary()}} function when the +normalisation is selected. +If you do not use the normalisation, the columns will be checked to +be \code{0} or \code{1}. } -\details{ -They are created from a data.frame containing the individuals informations -and a relation ship data.frame for the special links between individuals. -A list of scales can be provided to create a legend. -To create a Pedigree object, use the function -\code{\link[=Pedigree]{Pedigree()}}. } \section{Slots}{ @@ -37,12 +247,201 @@ individuals in the plot. See \code{\link[=Hints]{Hints()}} for more informations \section{Accessors}{ +For all the following accessors, the \code{x} parameters is a Pedigree object. +Each getters return a vector of the same length as \code{x} with the values +of the corresponding slot. + + \itemize{ \item \code{famid(x)} : Get the family identifiers of a Pedigree object. This function is a wrapper around \code{famid(ped(x))}. } + + +\itemize{ +\item \code{ped(x, slot)} : Get the value of a specific slot of the Ped object +} + + +\itemize{ +\item \code{ped(x)} : Get the Ped object +} + + +\itemize{ +\item \code{ped(x, slot) <- value} : Set the value of a specific slot of the Ped object +Wrapper of \code{slot(ped(x)) <- value} +} + + +\itemize{ +\item \code{ped(x) <- value} : Set the Ped object +} + + +\itemize{ +\item \code{mcols(x)} : Get the metadata of a Pedigree object. +This function is a wrapper around \code{mcols(ped(x))}. +} + + +\itemize{ +\item \code{mcols(x) <- value} : Set the metadata of a Pedigree object. +This function is a wrapper around \code{mcols(ped(x)) <- value}. +} + + +\itemize{ +\item \code{rel(x, slot)} : Get the value of a specific slot of the Rel object +} + + +\itemize{ +\item \code{rel(x)} : Get the Rel object +} + + +\itemize{ +\item \code{rel(x, slot) <- value} : Set the value of a specific slot of the Rel object +Wrapper of \code{slot(rel(x)) <- value} +} + + +\itemize{ +\item \code{rel(x) <- value} : Set the Rel object } + +\itemize{ +\item \code{scales(x)} : Get the Scales object +} + + +\itemize{ +\item \code{scales(x) <- value} : Set the Scales object +} + + +\itemize{ +\item \code{fill(x)} : Get the fill data.frame from the Scales object. +Wrapper of \code{fill(scales(x))} +} + + +\itemize{ +\item \code{fill(x) <- value} : Set the fill data.frame from the Scales object. +Wrapper of \code{fill(scales(x)) <- value} +} + + +\itemize{ +\item \code{border(x)} : Get the border data.frame from the Scales object. +Wrapper of \code{border(scales(x))} +} + + +\itemize{ +\item \code{border(x) <- value} : Set the border data.frame from the Scales object. +Wrapper of \code{border(scales(x)) <- value} +} + + +\itemize{ +\item \code{hints(x)} : Get the Hints object +} + + +\itemize{ +\item \code{hints(x) <- value} : Set the Hints object +} + + +\itemize{ +\item \code{horder(x)} : Get the horder vector from the Hints object. +Wrapper of \code{horder(hints(x))} +} + + +\itemize{ +\item \code{spouse(x)} : Get the spouse data.frame from the Hints object. +Wrapper of \code{spouse(hints(x))}. +} + + +\itemize{ +\item \code{spouse(x) <- value} : Set the spouse data.frame from the Hints object. +Wrapper of \code{spouse(hints(x)) <- value}. +} +} + +\section{Generics}{ + +\itemize{ +\item \code{length(x)}: Get the length of a Pedigree object. +Wrapper of \code{length(ped(x))}. +} + + +\itemize{ +\item \code{show(x)}: Print the information of the Ped and Rel +object inside the Pedigree object. +} + + +\itemize{ +\item \code{summary(x)}: Compute the summary of the Ped and Rel object +inside the Pedigree object. +} + + +\itemize{ +\item \code{as.list(x)}: Convert a Pedigree object to a list +} + + +\itemize{ +\item \code{subset(x, i, keep = TRUE)}: Subset a Pedigree object +based on the individuals identifiers given. +\itemize{ +\item \code{i} : A vector of individuals identifiers to keep. +\item \code{del_parents} : A logical value indicating if the parents +of the individuals should be deleted. +\item \code{keep} : A logical value indicating if the individuals +should be kept or deleted. +} +} + + +\itemize{ +\item \code{x[i, del_parents, keep]}: Subset a Pedigree object +based on the individuals identifiers given. +} +} + +\examples{ + +Pedigree( + obj = c("1", "2", "3", "4", "5", "6"), + dadid = c("4", "4", "6", "0", "0", "0"), + momid = c("5", "5", "5", "0", "0", "0"), + sex = c(1, 2, 3, 1, 2, 1), + avail = c(0, 1, 0, 1, 0, 1), + affected = matrix(c( + 0, 1, 0, 1, 0, 1, + 1, 1, 1, 1, 1, 1 + ), ncol = 2), + col_aff = c("aff1", "aff2"), + missid = "0", + rel_df = matrix(c( + "1", "2", 2 + ), ncol = 3, byrow = TRUE), +) + +data(sampleped) +Pedigree(sampleped) +} \seealso{ \code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}}, \code{\link[=Hints]{Hints()}} + +\code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}} } diff --git a/man/Pedigree.Rd b/man/Pedigree.Rd deleted file mode 100644 index 297cce35..00000000 --- a/man/Pedigree.Rd +++ /dev/null @@ -1,222 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllConstructor.R, R/AllAccessors.R -\docType{methods} -\name{Pedigree} -\alias{Pedigree} -\alias{Pedigree,character_OR_integer-method} -\alias{Pedigree,character} -\alias{Pedigree,data.frame-method} -\alias{Pedigree,data.frame} -\alias{Pedigree,missing-method} -\alias{Pedigree,missing} -\alias{horder} -\alias{horder,Pedigree-method} -\title{Create a Pedigree object} -\usage{ -Pedigree(obj, ...) - -\S4method{Pedigree}{character_OR_integer}( - obj, - dadid, - momid, - sex, - famid = NA, - avail = NULL, - affected = NULL, - status = NULL, - steril = NULL, - rel_df = NULL, - missid = NA_character_, - col_aff = "affection", - normalize = TRUE, - ... -) - -\S4method{Pedigree}{data.frame}( - obj = data.frame(indId = character(), fatherId = character(), motherId = character(), - gender = numeric(), family = character(), available = numeric(), vitalStatus = - numeric(), affection = numeric(), sterilisation = numeric()), - rel_df = data.frame(id1 = character(), id2 = character(), code = numeric(), famid = - character()), - cols_ren_ped = list(indId = "id", fatherId = "dadid", motherId = "momid", family = - "famid", gender = "sex", sterilisation = "steril", affection = "affected", available - = "avail", vitalStatus = "status"), - cols_ren_rel = list(id1 = "indId1", id2 = "indId2", famid = "family"), - hints = list(horder = NULL, spouse = NULL), - normalize = TRUE, - missid = NA_character_, - col_aff = "affection", - ... -) - -\S4method{Pedigree}{missing}(obj) - -horder(object) -} -\arguments{ -\item{obj}{A vector of the individuals identifiers or a data.frame -with the individuals informations. See \code{\link[=Ped]{Ped()}} for more informations.} - -\item{...}{Other arguments to pass to the function \code{generate_colors}.} - -\item{dadid}{A vector containing for each subject, the identifiers of the -biologicals fathers.} - -\item{momid}{A vector containing for each subject, the identifiers of the -biologicals mothers.} - -\item{sex}{A character, factor or numeric vector corresponding to -the gender of the individuals. This will be transformed to an ordered factor -with the following levels: \code{male} < \code{female} < \code{unknown} < `terminated -The following values are recognized: -\itemize{ -\item character() or factor() : "f", "m", "woman", "man", "male", "female", -"unknown", "terminated" -\item numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" -}} - -\item{famid}{A character vector with the family identifiers of the -individuals. If provide, will be aggregated to the individuals -identifiers separated by an underscore.} - -\item{avail}{A logical vector with the availability status of the -individuals -(i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} - -\item{affected}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = unaffected, \code{TRUE} = affected, \code{NA} = unknown). -Can also be a data.frame with the same length as \code{obj}. If it is a -matrix, it will be converted to a data.frame and the columns will be -named after the \code{col_aff} argument.} - -\item{status}{A logical vector with the affection status of the -individuals -(i.e. \code{FALSE} = alive, \code{TRUE} = dead, \code{NA} = unknown).} - -\item{steril}{A logical vector with the sterilisation status of the -individuals -(i.e. \code{FALSE} = not sterilised, \code{TRUE} = sterilised, \code{NA} = unknown).} - -\item{rel_df}{A data.frame with the special relationships between -individuals. See \code{\link[=Rel]{Rel()}} for more informations. -The minimum columns required are \code{id1}, \code{id2} and \code{code}. -The \code{famid} column can also be used to specify the family -of the individuals. -If a matrix is given, the columns needs to be ordered as -\code{id1}, \code{id2}, \code{code} and \code{famid}. -The code values are: -\itemize{ -\item \code{1} = Monozygotic twin -\item \code{2} = Dizygotic twin -\item \code{3} = twin of unknown zygosity -\item \code{4} = Spouse -} - -The value relation code recognized by the function are the one defined -by the \code{\link[=rel_code_to_factor]{rel_code_to_factor()}} function.} - -\item{missid}{A character vector with the missing values identifiers. -All the id, dadid and momid corresponding to those values will be set -to \code{NA_character_}.} - -\item{col_aff}{A character vector with the name of the column to be used -for the affection status. -If \code{affected} is a data.frame, it will be overwritten by the column -names of the data.frame.} - -\item{normalize}{A logical to know if the data should be normalised.} - -\item{cols_ren_ped}{A named list with the columns to rename for the -pedigree dataframe. This is useful if you want to use a dataframe with -different column names. The names of the list should be the new column -names and the values should be the old column names. The default values -are to be used with \code{normalize = TRUE}.} - -\item{cols_ren_rel}{A named list with the columns to rename for the -relationship matrix. This is useful if you want to use a dataframe with -different column names. The names of the list should be the new column -names and the values should be the old column names.} - -\item{hints}{A Hints object or a named list containing \code{horder} and -\code{spouse}.} - -\item{object}{A Pedigree object.} -} -\value{ -A Pedigree object. - -The slot \code{horder} present in the \code{Hints} slot of -a Pedigree object. -} -\description{ -Main constructor of the package. -This constructor help to create a \code{Pedigree} object from -different \code{data.frame} or a set of vectors. - -If any errors are found in the data, the function will return -the data.frame with the errors of the Ped object and the -Rel object. - -If the normalization is set to \code{TRUE}, then the data will be -standardized using the function \code{norm_ped()} and \code{norm_rel()}. - -If a data.frame is given, the columns names needed will depend if -the normalization is selected or not. If the normalization is selected, -the columns names needed are as follow and if not the columns names -needed are in parenthesis: -\itemize{ -\item \code{indID}: the individual identifier (\code{id}) -\item \code{fatherId}: the identifier of the biological father (\code{dadid}) -\item \code{motherId}: the identifier of the biological mother (\code{momid}) -\item \code{gender}: the sex of the individual (\code{sex}) -\item \code{family}: the family identifier of the individual (\code{famid}) -\item \code{sterilisation}: the sterilisation status of the individual (\code{steril}) -\item \code{available}: the availability status of the individual (\code{avail}) -\item \code{vitalStatus}: the death status of the individual (\code{status}) -\item \code{affection}: the affection status of the individual (\code{affected}) -\item \code{...}: other columns that will be stored in the \code{elementMetadata} slot -} - -The minimum columns required are : -\itemize{ -\item \code{indID} / \code{id} -\item \code{fatherId} / \code{dadid} -\item \code{motherId} / \code{momid} -\item \code{gender} / \code{sex} -The \code{family} / \code{famid} column can also be used to specify the family of the -individuals and will be merge to the \code{indId} / \code{id} field separated by an -underscore. -The columns \code{sterilisation}, \code{available}, \code{vitalStatus}, \code{affection} -will be transformed with the \code{\link[=vect_to_binary]{vect_to_binary()}} function when the -normalisation is selected. -If you do not use the normalisation, the columns will be checked to -be \code{0} or \code{1}. -} - -Pedigree horder accessors -} -\examples{ -Pedigree( - obj = c("1", "2", "3", "4", "5", "6"), - dadid = c("4", "4", "6", "0", "0", "0"), - momid = c("5", "5", "5", "0", "0", "0"), - sex = c(1, 2, 3, 1, 2, 1), - avail = c(0, 1, 0, 1, 0, 1), - affected = matrix(c( - 0, 1, 0, 1, 0, 1, - 1, 1, 1, 1, 1, 1 - ), ncol = 2), - col_aff = c("aff1", "aff2"), - missid = "0", - rel_df = matrix(c( - "1", "2", 2 - ), ncol = 3, byrow = TRUE), -) -data(sampleped) -Pedigree(sampleped) -Pedigree() -} -\seealso{ -\code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}} -} diff --git a/man/Rel-class.Rd b/man/Rel-class.Rd index 3b36d86a..1da228a6 100644 --- a/man/Rel-class.Rd +++ b/man/Rel-class.Rd @@ -1,6 +1,6 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/AllClass.R, R/AllConstructor.R, -% R/AllAccessors.R +% R/AllAccessors.R, R/AllGeneric.R \docType{class} \name{Rel-class} \alias{Rel-class} @@ -16,6 +16,11 @@ \alias{id2,Rel-method} \alias{famid,Rel-method} \alias{famid<-,Rel,character_OR_integer-method} +\alias{summary,Rel-method} +\alias{show,Rel-method} +\alias{as.list,Rel-method} +\alias{as.data.frame,Rel-method} +\alias{subset,Rel-method} \title{Rel object} \usage{ \S4method{Rel}{data.frame}(obj) @@ -63,6 +68,7 @@ A Rel object is a list of special relationships between individuals in the pedigree. It is used to create a Pedigree object. The minimal needed informations are \code{id1}, \code{id2} and \code{code}. + If a \code{famid} is provided, the individuals \code{id} will be aggregated to the \code{famid} character to ensure the uniqueness of the \code{id}. } @@ -74,7 +80,9 @@ to the \code{famid} character to ensure the uniqueness of the \code{id}. \item{\code{id2}}{A character vector with the id of the second individual.} \item{\code{code}}{An ordered factor vector with the code of the special -relationship. (i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} +relationship. + +(i.e. \verb{MZ twin} < \verb{DZ twin} < \verb{UZ twin} < \code{Spouse}).} \item{\code{famid}}{A character vector with the famid of the individuals.} }} @@ -116,6 +124,40 @@ with the family identifiers } } +\section{Generics}{ + +\itemize{ +\item \code{summary(x)}: Compute the summary of a Rel object +} + + +\itemize{ +\item \code{show(x)}: Convert the Rel object to a data.frame +and print it with its summary. +} + + +\itemize{ +\item \code{as.list(x)}: Convert a Rel object to a list +} + + +\itemize{ +\item \code{as.data.frame(x)}: Convert a Rel object to a data.frame +} + + +\itemize{ +\item \code{subset(x, i, keep = TRUE)}: Subset a Rel object +based on the individuals identifiers given. +\itemize{ +\item \code{i} : A vector of individuals identifiers to keep. +\item \code{keep} : A logical value indicating if the individuals +should be kept or deleted. +} +} +} + \examples{ rel_df <- data.frame( id1 = c("1", "2", "3"), @@ -128,7 +170,6 @@ Rel( id2 = c("2", "3", "4"), code = c(1, 2, 3) ) -Rel() } \seealso{ \code{\link[=Pedigree]{Pedigree()}} diff --git a/man/Rel.Rd b/man/Rel.Rd deleted file mode 100644 index 263ae6b7..00000000 --- a/man/Rel.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllGeneric.R -\name{summary,Rel-method} -\alias{summary,Rel-method} -\alias{show,Rel-method} -\alias{as.list,Rel-method} -\alias{as.data.frame,Rel-method} -\title{Summary function of Rel object} -\usage{ -\S4method{summary}{Rel}(object) - -\S4method{show}{Rel}(object) - -\S4method{as.list}{Rel}(x) - -\S4method{as.data.frame}{Rel}(x) -} -\arguments{ -\item{object}{A Rel object.} - -\item{from}{A Rel object.} -} -\value{ -A character vector with the summary of the object. - -The Rel object with the relationship informations. - -A list with the relationship informations. - -A data.frame with the relationship informations. -} -\description{ -Compute the summary of a Rel object - -Convert the Rel object to a data.frame -and print it with its summary. - -Convert a Rel object to a list - -Convert a Rel object to a data.frame -} diff --git a/man/Scale-class.Rd b/man/Scale-class.Rd deleted file mode 100644 index 0e58be49..00000000 --- a/man/Scale-class.Rd +++ /dev/null @@ -1,50 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllClass.R -\docType{class} -\name{Scale-class} -\alias{Scale-class} -\title{S4 class to represent the scales of a Pedigree.} -\value{ -A Scale object. -} -\description{ -A scales object is a list of two data.frame used -to represent the affection (filling) and the availability -(border) status of the individuals in the pedigree plot. -} -\section{Slots}{ - -\describe{ -\item{\code{fill}}{A data.frame with the informations for the affection status. -The columns needed are: -\itemize{ -\item 'order': the order of the affection to be used -\item 'column_values': name of the column containing the raw values in the -Ped object -\item 'column_mods': name of the column containing the mods of the transformed -values in the Ped object -\item 'mods': all the different mods -\item 'labels': the corresponding labels of each mods -\item 'affected': a logical value indicating if the mod correspond to an affected -individuals -\item 'fill': the color to use for this mods -\item 'density': the density of the shading -\item 'angle': the angle of the shading -}} - -\item{\code{border}}{A data.frame with the informations for the availability status. -The columns needed are: -\itemize{ -\item 'column_values': name of the column containing the raw values in the -Ped object -\item 'column_mods': name of the column containing the mods of the transformed -values in the Ped object -\item 'mods': all the different mods -\item 'labels': the corresponding labels of each mods -\item 'border': the color to use for this mods -}} -}} - -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/Scales-class.Rd b/man/Scales-class.Rd new file mode 100644 index 00000000..ce74c453 --- /dev/null +++ b/man/Scales-class.Rd @@ -0,0 +1,162 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllClass.R, R/AllConstructor.R, +% R/AllAccessors.R, R/AllGeneric.R +\docType{class} +\name{Scales-class} +\alias{Scales-class} +\alias{Scales} +\alias{Scales,data.frame,data.frame-method} +\alias{Scales,missing,missing-method} +\alias{fill} +\alias{fill,Scales-method} +\alias{fill<-} +\alias{fill<-,Scales,data.frame-method} +\alias{border} +\alias{border,Scales-method} +\alias{border<-} +\alias{border<-,Scales,data.frame-method} +\alias{as.list,Scales-method} +\title{Scales object} +\usage{ +Scales(fill, border) + +\S4method{Scales}{data.frame,data.frame}(fill, border) +} +\arguments{ +\item{fill}{A data.frame with the informations for the affection status. +The columns needed are: +\itemize{ +\item 'order': the order of the affection to be used +\item 'column_values': name of the column containing the raw values in the +Ped object +\item 'column_mods': name of the column containing the mods of the transformed +values in the Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'affected': a logical value indicating if the mod correspond to an affected +individuals +\item 'fill': the color to use for this mods +\item 'density': the density of the shading +\item 'angle': the angle of the shading +}} + +\item{border}{A data.frame with the informations for the availability status. +The columns needed are: +\itemize{ +\item 'column_values': name of the column containing the raw values in the +Ped object +\item 'column_mods': name of the column containing the mods of the transformed +values in the Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'border': the color to use for this mods +}} +} +\value{ +A Scales object. +} +\description{ +A Scales object is a list of two data.frame. +The first one is used to represent the affection status of the individuals +and therefore the filling of the individuals in the pedigree plot. +The second one is used to represent the availability status of the +individuals and therefore the border color of the individuals in the +pedigree plot. + +\subsection{Constructor :}{ + +You need to provide both \strong{fill} and \strong{border} in the dedicated parameters. +However this is usually done using the \code{\link[=generate_colors]{generate_colors()}} function with a +Pedigree object. +} +} +\section{Slots}{ + +\describe{ +\item{\code{fill}}{A data.frame with the informations for the affection status. +The columns needed are: +\itemize{ +\item 'order': the order of the affection to be used +\item 'column_values': name of the column containing the raw values in the +Ped object +\item 'column_mods': name of the column containing the mods of the transformed +values in the Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'affected': a logical value indicating if the mod correspond to an affected +individuals +\item 'fill': the color to use for this mods +\item 'density': the density of the shading +\item 'angle': the angle of the shading +}} + +\item{\code{border}}{A data.frame with the informations for the availability status. +The columns needed are: +\itemize{ +\item 'column_values': name of the column containing the raw values in the +Ped object +\item 'column_mods': name of the column containing the mods of the transformed +values in the Ped object +\item 'mods': all the different mods +\item 'labels': the corresponding labels of each mods +\item 'border': the color to use for this mods +}} +}} + +\section{Accessors}{ + +\itemize{ +\item \code{fill(x)} : Get the fill data.frame +} + + +\itemize{ +\item \code{fill(x) <- value} : Set the fill data.frame +} + + +\itemize{ +\item \code{border(x)} : Get the border data.frame +} + + +\itemize{ +\item \code{border(x) <- value} : Set the border data.frame +} +} + +\section{Generics}{ + +\itemize{ +\item \code{as.list(x)}: Convert a Scales object to a list +} +} + +\examples{ + +Scales( + fill = data.frame( + order = 1, + column_values = "affected", + column_mods = "affected_mods", + mods = c(0, 1), + labels = c("unaffected", "affected"), + affected = c(FALSE, TRUE), + fill = c("white", "red"), + density = c(NA, 20), + angle = c(NA, 45) + ), + border = data.frame( + column_values = "avail", + column_mods = "avail_mods", + mods = c(0, 1), + labels = c("not available", "available"), + border = c("black", "blue") + ) +) +} +\seealso{ +\code{\link[=Pedigree]{Pedigree()}} + +\code{\link[=Pedigree]{Pedigree()}}, \code{\link[=generate_colors]{generate_colors()}} +} diff --git a/man/Scales.Rd b/man/Scales.Rd deleted file mode 100644 index 5b544147..00000000 --- a/man/Scales.Rd +++ /dev/null @@ -1,93 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllConstructor.R, R/AllGeneric.R -\docType{methods} -\name{Scales} -\alias{Scales} -\alias{Scales,data.frame,data.frame-method} -\alias{Scales,data.frame,data.frame} -\alias{Scales,missing,missing-method} -\alias{Scales,missing,missing} -\alias{as.list,Scales-method} -\title{Create a Scales object} -\usage{ -Scales(fill, border) - -\S4method{Scales}{data.frame,data.frame}(fill, border) - -\S4method{Scales}{missing,missing}(fill, border) - -\S4method{as.list}{Scales}(x) -} -\arguments{ -\item{fill}{A data.frame with the informations for the affection status. -The columns needed are: -\itemize{ -\item 'order': the order of the affection to be used -\item 'column_values': name of the column containing the raw values in the -Ped object -\item 'column_mods': name of the column containing the mods of the transformed -values in the Ped object -\item 'mods': all the different mods -\item 'labels': the corresponding labels of each mods -\item 'affected': a logical value indicating if the mod correspond to an affected -individuals -\item 'fill': the color to use for this mods -\item 'density': the density of the shading -\item 'angle': the angle of the shading -}} - -\item{border}{A data.frame with the informations for the availability status. -The columns needed are: -\itemize{ -\item 'column_values': name of the column containing the raw values in the -Ped object -\item 'column_mods': name of the column containing the mods of the transformed -values in the Ped object -\item 'mods': all the different mods -\item 'labels': the corresponding labels of each mods -\item 'border': the color to use for this mods -}} - -\item{from}{A Scales object.} -} -\value{ -A Scales object. - -A list with the hints informations. -} -\description{ -Create a Scales object from two data.frame. -The first one is used to represent the affection status of the individuals -and therefore the filling of the individuals in the pedigree plot. -The second one is used to represent the availability status of the -individuals and therefore the border color of the individuals in the -pedigree plot. - -Convert a Scales object to a list -} -\examples{ -Scales( - fill = data.frame( - order = 1, - column_values = "affected", - column_mods = "affected_mods", - mods = c(0, 1), - labels = c("unaffected", "affected"), - affected = c(FALSE, TRUE), - fill = c("white", "red"), - density = c(NA, 20), - angle = c(NA, 45) - ), - border = data.frame( - column_values = "avail", - column_mods = "avail_mods", - mods = c(0, 1), - labels = c("not available", "available"), - border = c("black", "blue") - ) -) -Scales() -} -\seealso{ -\code{\link[=Pedigree]{Pedigree()}} -} diff --git a/man/extract-methods.Rd b/man/extract-methods.Rd deleted file mode 100644 index c2907d8a..00000000 --- a/man/extract-methods.Rd +++ /dev/null @@ -1,131 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllAccessors.R, R/AllGeneric.R -\name{ped} -\alias{ped} -\alias{ped,Pedigree-method} -\alias{mcols,Pedigree-method} -\alias{rel} -\alias{rel,Pedigree-method} -\alias{scales} -\alias{scales,Pedigree-method} -\alias{fill} -\alias{fill,Pedigree-method} -\alias{border} -\alias{border,Pedigree-method} -\alias{hints} -\alias{hints,Pedigree-method} -\alias{spouse} -\alias{spouse,Pedigree-method} -\alias{subset,Rel-method} -\alias{subset,Hints-method} -\alias{subset_hints,Hints-method} -\alias{show,Pedigree-method} -\alias{summary,Pedigree-method} -\alias{as.list,Pedigree-method} -\alias{subset,Pedigree-method} -\title{Pedigree ped accessors} -\usage{ -ped(object, slot) - -\S4method{mcols}{Pedigree}(x) - -rel(object, slot) - -scales(object) - -fill(object) - -border(object) - -hints(object) - -spouse(object) - -\S4method{subset}{Rel}(x, idlist, keep = TRUE) - -\S4method{subset}{Hints}(x, idlist, keep = TRUE) - -\S4method{show}{Pedigree}(object) - -\S4method{summary}{Pedigree}(object) - -\S4method{as.list}{Pedigree}(x) - -\S4method{subset}{Pedigree}(x, i, del_parents = FALSE, keep = TRUE) -} -\arguments{ -\item{object}{A Pedigree object.} - -\item{slot}{A slot in the Ped object of the Pedigree.} - -\item{x}{A Pedigree object.} - -\item{idlist}{A vector of identifiers to subset} - -\item{i}{A vector of individuals id or a vector of index.} - -\item{from}{A Pedigree object.} - -\item{j}{A vector of columns names.} - -\item{drop}{A logical value indicating if the dimensions should be dropped.} -} -\value{ -The slot \code{ped} present in the Pedigree object. -or one of its slot. - -The metadata present in the Pedigree object. - -The slot \code{rel} present in the Pedigree object. - -The slot \code{scales} present in the Pedigree object. - -The slot \code{fill} present in the Pedigree object. - -The slot \code{border} present in the Pedigree object. - -The slot \code{hints} present in the Pedigree object. - -The slot \code{spouse} present in the \code{Hints} slot of -a Pedigree object. - -A Rel object subsetted. - -A list of Hints object subsetted - -A character vector with the informations about the object. - -A character vector with the summary of the object. - -A list with the individuals informations. - -A Pedigree object subsetted. -} -\description{ -Pedigree rel accessors - -Pedigree scales accessors - -Pedigree fill accessors - -Pedigree border accessors - -Pedigree hints accessors - -Pedigree spouse accessors - -Subset a Rel object based on the individuals -identifiers given. - -Subset the Hints object based on the identifiers -given - -Pedigree show method - -Pedigree summary method. - -Convert a Pedigree object to a list - -Extract parts of a Pedigree object -} -\keyword{internal} diff --git a/man/length-Pedigree-method.Rd b/man/length-Pedigree-method.Rd deleted file mode 100644 index e0b3fb2e..00000000 --- a/man/length-Pedigree-method.Rd +++ /dev/null @@ -1,18 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/AllGeneric.R -\docType{methods} -\name{length,Pedigree-method} -\alias{length,Pedigree-method} -\title{Compute the length of a Pedigree object} -\usage{ -\S4method{length}{Pedigree}(x) -} -\arguments{ -\item{x}{A Pedigree object.} -} -\value{ -The number of individuals in the Pedigree object. -} -\description{ -Compute the length of a Pedigree object -} From a7e9cb58edddc29de503af7d68fe7d379a017280 Mon Sep 17 00:00:00 2001 From: Louis LENEZET Date: Sun, 12 Nov 2023 11:02:18 +0100 Subject: [PATCH 085/111] Change chaseup function to ancestors --- R/align.R | 4 ++-- R/kindepth.R | 28 +++++----------------------- 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/R/align.R b/R/align.R index dc042a3e..5e70a457 100644 --- a/R/align.R +++ b/R/align.R @@ -1,4 +1,4 @@ -#' Get ancestors indexes of a subject +#' Ancestors indexes of a subject #' #' @description Given the index of one or multiple individual(s), this #' function iterate through the mom and dad indexes to @@ -28,7 +28,7 @@ ancestors <- function(idx, momx, dadx) { } alist <- newlist } - alist[alist != idx] + alist[!alist %in% idx] } diff --git a/R/kindepth.R b/R/kindepth.R index 1a45bad3..b20bdbd6 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -1,24 +1,4 @@ #' Chase up the ancestors of a subject -#' -#' @param x a vector of subject ids -#' @param midx a vector of mother ids -#' @param didx a vector of father ids -#' @return a vector of all ancestors subjects connected to x -#' @keywords internal, kindepth -#' @examples -#' chaseup(1, c(3,0,0), c(2,0,0)) -#' chaseup(1, c(3,4,0,0,0), c(2,5,0,0,0)) -chaseup <- function(x, midx, didx) { - new <- c(midx[x], didx[x]) # mother and father - new <- new[new > 0] - while (length(new) > 1) { - x <- unique(c(x, new)) - new <- c(midx[new], didx[new]) - new <- new[new > 0] - } - x -} - #' Individual's depth in a pedigree #' #' @description @@ -178,12 +158,13 @@ setMethod("kindepth", "character_OR_integer", function(obj, dadid, momid, good <- dads[who] bad <- moms[who] } - abad <- chaseup(bad, midx, didx) + abad <- c(bad, ancestors(bad, midx, didx)) if (length(abad) == 1 && sum(c(dads, moms) == bad) == 1) { # simple case, a solitary marry-in depth[bad] <- depth[good] } else { - agood <- chaseup(good, midx, didx) # ancestors of the 'good' side + ## ancestors of the 'good' side + agood <- c(good, ancestors(good, midx, didx)) ## For spouse chasing, I need to exclude the given pair tdad <- dads[-who] tmom <- moms[-who] @@ -193,7 +174,8 @@ setMethod("kindepth", "character_OR_integer", function(obj, dadid, momid, tdad[!is.na(match(tmom, agood))] ) temp <- unique(c(agood, spouse)) - temp <- unique(chaseup(temp, midx, didx)) # parents + ## parents + temp <- unique(c(temp, ancestors(temp, midx, didx))) kids <- (!is.na(match(midx, temp)) | !is.na(match(didx, temp))) temp <- unique(c(temp, (seq_len(n))[ kids & depth <= depth[good] From 868a7ebd9b43d357420334ece3b381ea63c7d438 Mon Sep 17 00:00:00 2001 From: Louis LENEZET Date: Sun, 12 Nov 2023 11:27:59 +0100 Subject: [PATCH 086/111] Update documentation --- R/bit_size.R | 2 +- devel/documentation/todo.md | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/R/bit_size.R b/R/bit_size.R index bd1b1d44..14b279f5 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -1,4 +1,4 @@ -#' Compute bit size of a Pedigree +#' Bit size of a Pedigree #' #' Utility function used in the `shrink()` function #' to calculate the bit size of a Pedigree. diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index b68e9f6f..8f740807 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -51,4 +51,8 @@ - [ ] Getters - [ ] Setters - [ ] General methods - - [ ] See also \ No newline at end of file + - [ ] See also + +## Other + +- [ ] Take out addition of ind in ancestors compute Kindepth. From 41a38c646a022d0a90fef4703481e9c9bd579d86 Mon Sep 17 00:00:00 2001 From: Louis LENEZET Date: Sun, 12 Nov 2023 11:40:44 +0100 Subject: [PATCH 087/111] Update documentation --- R/AllAccessors.R | 2 +- R/AllConstructor.R | 5 ++--- R/AllGeneric.R | 2 +- man/Hints-class.Rd | 15 ++++++--------- man/Pedigree-class.Rd | 9 ++++++++- man/Scales-class.Rd | 2 +- man/ancestors.Rd | 2 +- man/bit_size.Rd | 2 +- man/chaseup.Rd | 27 --------------------------- man/kindepth.Rd | 3 ++- 10 files changed, 23 insertions(+), 46 deletions(-) delete mode 100644 man/chaseup.Rd diff --git a/R/AllAccessors.R b/R/AllAccessors.R index ebf196b5..e71b9802 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -1055,7 +1055,7 @@ setMethod( #' @section Accessors: #' - `horder(x) <- value` : Set the horder vector from the Hints object. #' Wrapper of `horder(hints(x)) <- value` -#' @rdname Hints-class +#' @rdname Pedigree-class #' @usage NULL setMethod( "horder<-", diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 50a49b27..f5008d75 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -305,7 +305,6 @@ setMethod("Rel", "missing", #' Children will preferentially appear under the parents of the anchored spouse. #' #' @return A Hints object. -#' @seealso [Pedigree()] #' @rdname Hints-class #' @export setGeneric("Hints", function(horder, spouse) { @@ -478,7 +477,7 @@ setMethod("Hints", #' - 'border': the color to use for this mods #' #' @return A Scales object. -#' @seealso [Pedigree()], [generate_colors()] +#' @seealso [generate_colors()] #' @rdname Scales-class #' @export setGeneric("Scales", function(fill, border) { @@ -639,7 +638,7 @@ setMethod("Scales", #' @return A Pedigree object. #' @export #' @rdname Pedigree-class -#' @seealso [Pedigree()], [Ped()], [Rel()], [Scales()] +#' @seealso [Ped()], [Rel()], [Scales()] setGeneric("Pedigree", signature = "obj", function(obj, ...) standardGeneric("Pedigree") ) diff --git a/R/AllGeneric.R b/R/AllGeneric.R index 04861cda..b5cf5f0f 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -242,7 +242,7 @@ setMethod("subset", "Rel", function(x, idlist, keep = TRUE) { #' @section Generics: #' - `as.list(x)`: Convert a Hints object to a list -#' @rdname Hint-class +#' @rdname Hints-class #' @importFrom S4Vectors as.list #' @export #' @usage NULL diff --git a/man/Hints-class.Rd b/man/Hints-class.Rd index 23e8b414..4a35cab9 100644 --- a/man/Hints-class.Rd +++ b/man/Hints-class.Rd @@ -15,10 +15,10 @@ \alias{horder,Hints-method} \alias{horder<-} \alias{horder<-,Hints-method} -\alias{horder<-,Pedigree-method} \alias{spouse} \alias{spouse,Hints-method} \alias{spouse<-,Hints,data.frame-method} +\alias{as.list,Hints-method} \alias{subset,Hints-method} \title{Hints object} \usage{ @@ -89,12 +89,6 @@ and the anchor (i.e : \code{1} = left, \code{2} = right, \code{0} = either).} } -\itemize{ -\item \code{horder(x) <- value} : Set the horder vector from the Hints object. -Wrapper of \code{horder(hints(x)) <- value} -} - - \itemize{ \item \code{spouse(x)} : Get the spouse data.frame } @@ -107,6 +101,11 @@ Wrapper of \code{horder(hints(x)) <- value} \section{Generics}{ +\itemize{ +\item \code{as.list(x)}: Convert a Hints object to a list +} + + \itemize{ \item \code{subset(x, i, keep = TRUE)}: Subset a Hints object based on the individuals identifiers given. @@ -152,7 +151,5 @@ Hints( ) } \seealso{ -\code{\link[=Pedigree]{Pedigree()}} - \code{\link[=Pedigree]{Pedigree()}} } diff --git a/man/Pedigree-class.Rd b/man/Pedigree-class.Rd index 2b86e88f..9368d4a3 100644 --- a/man/Pedigree-class.Rd +++ b/man/Pedigree-class.Rd @@ -36,6 +36,7 @@ \alias{hints<-} \alias{hints<-,Pedigree,Hints-method} \alias{horder,Pedigree-method} +\alias{horder<-,Pedigree-method} \alias{spouse,Pedigree-method} \alias{spouse<-} \alias{spouse<-,Pedigree,data.frame-method} @@ -362,6 +363,12 @@ Wrapper of \code{horder(hints(x))} } +\itemize{ +\item \code{horder(x) <- value} : Set the horder vector from the Hints object. +Wrapper of \code{horder(hints(x)) <- value} +} + + \itemize{ \item \code{spouse(x)} : Get the spouse data.frame from the Hints object. Wrapper of \code{spouse(hints(x))}. @@ -443,5 +450,5 @@ Pedigree(sampleped) \seealso{ \code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}}, \code{\link[=Hints]{Hints()}} -\code{\link[=Pedigree]{Pedigree()}}, \code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}} +\code{\link[=Ped]{Ped()}}, \code{\link[=Rel]{Rel()}}, \code{\link[=Scales]{Scales()}} } diff --git a/man/Scales-class.Rd b/man/Scales-class.Rd index ce74c453..13cc3d70 100644 --- a/man/Scales-class.Rd +++ b/man/Scales-class.Rd @@ -158,5 +158,5 @@ Scales( \seealso{ \code{\link[=Pedigree]{Pedigree()}} -\code{\link[=Pedigree]{Pedigree()}}, \code{\link[=generate_colors]{generate_colors()}} +\code{\link[=generate_colors]{generate_colors()}} } diff --git a/man/ancestors.Rd b/man/ancestors.Rd index 56a4017a..5635f530 100644 --- a/man/ancestors.Rd +++ b/man/ancestors.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/align.R \name{ancestors} \alias{ancestors} -\title{Get ancestors indexes of a subject} +\title{Ancestors indexes of a subject} \usage{ ancestors(idx, momx, dadx) } diff --git a/man/bit_size.Rd b/man/bit_size.Rd index 86a5cc71..44276d84 100644 --- a/man/bit_size.Rd +++ b/man/bit_size.Rd @@ -5,7 +5,7 @@ \alias{bit_size,character_OR_integer-method} \alias{bit_size,Pedigree-method} \alias{bit_size,Ped-method} -\title{Compute bit size of a Pedigree} +\title{Bit size of a Pedigree} \usage{ bit_size(obj, ...) diff --git a/man/chaseup.Rd b/man/chaseup.Rd deleted file mode 100644 index e329d93d..00000000 --- a/man/chaseup.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/kindepth.R -\name{chaseup} -\alias{chaseup} -\title{Chase up the ancestors of a subject} -\usage{ -chaseup(x, midx, didx) -} -\arguments{ -\item{x}{a vector of subject ids} - -\item{midx}{a vector of mother ids} - -\item{didx}{a vector of father ids} -} -\value{ -a vector of all ancestors subjects connected to x -} -\description{ -Chase up the ancestors of a subject -} -\examples{ -chaseup(1, c(3,0,0), c(2,0,0)) -chaseup(1, c(3,4,0,0,0), c(2,5,0,0,0)) -} -\keyword{internal,} -\keyword{kindepth} diff --git a/man/kindepth.Rd b/man/kindepth.Rd index e65a8cba..92c750f8 100755 --- a/man/kindepth.Rd +++ b/man/kindepth.Rd @@ -5,7 +5,8 @@ \alias{kindepth,character_OR_integer-method} \alias{kindepth,Pedigree-method} \alias{kindepth,Ped-method} -\title{Individual's depth in a pedigree} +\title{Chase up the ancestors of a subject +Individual's depth in a pedigree} \usage{ kindepth(obj, ...) From fbf8cdd0413f55c54d008c0b462e2f9798d088f4 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Mon, 13 Nov 2023 17:14:07 +0100 Subject: [PATCH 088/111] Add tests, comment --- R/align.R | 2 +- R/kindepth.R | 6 +++++- tests/testthat/test-align.R | 13 +++++++++---- tests/testthat/test-kindepth.R | 27 ++++++++++++++++++++++++--- 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/R/align.R b/R/align.R index 5e70a457..e9bcec12 100644 --- a/R/align.R +++ b/R/align.R @@ -154,7 +154,7 @@ setMethod("align", "Pedigree", ## Doc: Setup-align n <- length(obj) - level <- 1 + kindepth(obj, align = TRUE) + level <- 1 + kindepth(obj, align_parents = TRUE) ## relative order of siblings within a family horder <- horder(hints) diff --git a/R/kindepth.R b/R/kindepth.R index b20bdbd6..e93c51a5 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -145,12 +145,15 @@ setMethod("kindepth", "character_OR_integer", function(obj, dadid, momid, npair <- length(dads) done <- rep(FALSE, npair) # couples that are taken care of while (TRUE) { + ## Select parents pairs to fix pairs.to.fix <- which((depth[dads] != depth[moms]) & !done) if (length(pairs.to.fix) == 0) { break } + ## Get max depth of all pairs temp <- pmax(depth[dads], depth[moms])[pairs.to.fix] - who <- min(pairs.to.fix[temp == min(temp)]) # the chosen couple + ## Select the couple to fix + who <- min(pairs.to.fix[temp == min(temp)]) good <- moms[who] bad <- dads[who] @@ -158,6 +161,7 @@ setMethod("kindepth", "character_OR_integer", function(obj, dadid, momid, good <- dads[who] bad <- moms[who] } + ## All id linked to bad abad <- c(bad, ancestors(bad, midx, didx)) if (length(abad) == 1 && sum(c(dads, moms) == bad) == 1) { # simple case, a solitary marry-in diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 1d8f8c2f..9d7f12af 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -82,9 +82,14 @@ test_that("besthint works", { expect_error(best_hint(pedi)) #this fixes up marriages and such ped1 <- Pedigree(sampleped[-1]) - newhint1 <- best_hint(ped1) + hints(ped1) <- best_hint(ped1) + + vdiffr::expect_doppelganger("Best hint", + function() plot(ped1) + ) + plist <- align(ped1, packed = TRUE, - align = TRUE, width = 8, hints = newhint1 + align = TRUE, width = 8 ) expect_snapshot(plist) }) @@ -126,8 +131,8 @@ test_that("Double wife", { sex = c(1, 2, 1, 2, 1, 2, 1) ) pedi <- Pedigree(df, missid = "0") - id(ped(pedi)) - expect_equal(sum(kindepth(pedi)), 4) + expect_equal(kindepth(pedi, align_parents = TRUE), c(0, 0, 1, 1, 2, 1, 2)) + expect_equal(kindepth(pedi), c(0, 0, 0, 1, 2, 0, 1)) vdiffr::expect_doppelganger("double_wife", function() plot(pedi) ) diff --git a/tests/testthat/test-kindepth.R b/tests/testthat/test-kindepth.R index 1a6c18f3..e2beaadd 100644 --- a/tests/testthat/test-kindepth.R +++ b/tests/testthat/test-kindepth.R @@ -5,11 +5,11 @@ test_that("Kindepth works", { ped <- Pedigree(datped2) expect_equal( - kindepth(ped, align = TRUE), + kindepth(ped, align_parents = TRUE), c(0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2) ) expect_equal( - kindepth(ped, align = FALSE), + kindepth(ped, align_parents = FALSE), c(0, 0, 0, 1, 1, 1, 1, 1, 0, 2, 2, 2, 2, 2) ) @@ -19,5 +19,26 @@ test_that("Kindepth works", { "motherId" = "motherid", "gender" = "sex", "family" = "famid" ), missid = "0") expect_equal(sum(kindepth(ped)), 33147) - expect_equal(sum(kindepth(ped, align = TRUE)), 39087) + expect_equal(sum(kindepth(ped, align_parents = TRUE)), 39091) + + df <- data.frame( + id = 1:7, + dadid = c(0, 0, 0, 1, 3, 0, 3), + momid = c(0, 0, 0, 2, 4, 0, 6), + sex = c(1, 2, 1, 2, 1, 2, 1) + ) + pedi <- Pedigree(df, missid = "0") + expect_equal(kindepth(pedi, align_parents = TRUE), c(0, 0, 1, 1, 2, 1, 2)) + expect_equal(kindepth(pedi), c(0, 0, 0, 1, 2, 0, 1)) + + + df <- data.frame( + id = 1:9, + dadid = c(0, 0, 0, 1, 1, 1, 3, 7, 5), + momid = c(0, 0, 0, 2, 2, 2, 2, 6, 8), + sex = c(1, 2, 1, 2, 1, 2, 1, 2, 1) + ) + pedi <- Pedigree(df, missid = "0") + kindepth(pedi, align_parents = TRUE) + plot(pedi) }) From b58aad371f46cf03ca89de77bb2128e2f2dc7c15 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 14 Nov 2023 14:50:14 +0100 Subject: [PATCH 089/111] Update Kindepth Bug correction --- R/kindepth.R | 50 +- tests/testthat/_snaps/align.md | 141 ++-- tests/testthat/_snaps/align/best-hint.svg | 293 +++++++++ tests/testthat/_snaps/align/double-wife.svg | 54 -- .../testthat/_snaps/align/sampleped-norel.svg | 536 ++++++++-------- .../_snaps/align/sampleped-withrel.svg | 560 ++++++++-------- .../_snaps/kindepth/double-marriage.svg | 81 +++ .../_snaps/kindepth/niece-uncle-spouse.svg | 59 ++ .../_snaps/ped_to_legdf/plot-with-legend.svg | 603 +++++++++--------- tests/testthat/_snaps/plot/ped1.svg | 410 ++++++------ tests/testthat/_snaps/plot/ped1reorder.svg | 408 ++++++------ tests/testthat/test-align.R | 62 +- tests/testthat/test-kindepth.R | 33 +- 13 files changed, 1842 insertions(+), 1448 deletions(-) create mode 100644 tests/testthat/_snaps/align/best-hint.svg delete mode 100644 tests/testthat/_snaps/align/double-wife.svg create mode 100644 tests/testthat/_snaps/kindepth/double-marriage.svg create mode 100644 tests/testthat/_snaps/kindepth/niece-uncle-spouse.svg diff --git a/R/kindepth.R b/R/kindepth.R index e93c51a5..a7a7d883 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -146,51 +146,73 @@ setMethod("kindepth", "character_OR_integer", function(obj, dadid, momid, done <- rep(FALSE, npair) # couples that are taken care of while (TRUE) { ## Select parents pairs to fix - pairs.to.fix <- which((depth[dads] != depth[moms]) & !done) - if (length(pairs.to.fix) == 0) { + pairs_to_fix <- which((depth[dads] != depth[moms]) & !done) + + if (length(pairs_to_fix) == 0) { break } - ## Get max depth of all pairs - temp <- pmax(depth[dads], depth[moms])[pairs.to.fix] + ## Get max depth of all pairs to fix + temp <- pmax(depth[dads], depth[moms])[pairs_to_fix] + ## Select the couple to fix - who <- min(pairs.to.fix[temp == min(temp)]) + ## that have the minimal depth + who <- min(pairs_to_fix[temp == min(temp)]) + ## Good is the individuals with the higher depth good <- moms[who] bad <- dads[who] if (depth[dads[who]] > depth[moms[who]]) { good <- dads[who] bad <- moms[who] } + + ## Move depth of all bad individuals ## All id linked to bad abad <- c(bad, ancestors(bad, midx, didx)) + if (length(abad) == 1 && sum(c(dads, moms) == bad) == 1) { - # simple case, a solitary marry-in + ## Simple case, a solitary marry-in + ## Only one in ancestry and is dad or mom of only one depth[bad] <- depth[good] } else { - ## ancestors of the 'good' side + ## Ancestors of the 'good' side agood <- c(good, ancestors(good, midx, didx)) + + ## If individual already in agood not bad + abad1 <- abad[!abad %in% agood] + ## For spouse chasing, I need to exclude the given pair tdad <- dads[-who] tmom <- moms[-who] - while (1) { - ## spouses of any on agood list + ## Get all individuals affiliated to agood + while (TRUE) { + ## Add spouse spouse <- c(tmom[!is.na(match(tdad, agood))], tdad[!is.na(match(tmom, agood))] ) temp <- unique(c(agood, spouse)) - ## parents + + ## Add ancestors temp <- unique(c(temp, ancestors(temp, midx, didx))) + + ## Add kids kids <- (!is.na(match(midx, temp)) | !is.na(match(didx, temp))) temp <- unique(c(temp, (seq_len(n))[ kids & depth <= depth[good] ])) + if (length(temp) == length(agood)) { + ## If no addition to good ancestors break break } else { + ## Else do other iteration agood <- temp } } + ## Update agood but only if not in abad1 + agood <- agood[!agood %in% abad1] + ## Change all depth if (all(match(abad, agood, nomatch = 0) == 0)) { ## shift it down depth[abad] <- depth[abad] + (depth[good] - depth[bad]) @@ -213,10 +235,12 @@ setMethod("kindepth", "character_OR_integer", function(obj, dadid, momid, done[who] <- TRUE ## This snunk into version 1.9.6, which was part of ## bug: done[dads == bad | moms == bad] <- TRUE - - } ## while(TRUE) + } if (all(depth > 0)) { - stop("You found a bug in kindepth's alignment code!") + stop( + "You found a bug in kindepth's alignment code!", + "Depth found:", depth + ) } depth } diff --git a/tests/testthat/_snaps/align.md b/tests/testthat/_snaps/align.md index 2bf3b1ff..00527de5 100644 --- a/tests/testthat/_snaps/align.md +++ b/tests/testthat/_snaps/align.md @@ -4,60 +4,60 @@ plist Output $n - [1] 8 19 22 8 + [1] 4 17 21 14 $nid [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] - [1,] 5 6 7 8 35 36 42 43 0 0 0 0 0 0 - [2,] 1 2 15 17 16 18 19 20 3 4 37 38 44 45 - [3,] 9 29 30 31 32 33 34 9 10 11 12 18 14 15 - [4,] 21 22 23 24 25 26 27 28 0 0 0 0 0 0 - [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] - [1,] 0 0 0 0 0 0 0 0 - [2,] 46 47 48 50 49 0 0 0 - [3,] 39 40 41 51 52 53 54 55 - [4,] 0 0 0 0 0 0 0 0 + [1,] 35 36 42 43 0 0 0 0 0 0 0 0 0 0 + [2,] 1 2 3 4 37 38 44 45 46 47 48 50 49 5 + [3,] 9 10 11 12 14 39 40 41 51 52 53 54 55 14 + [4,] 21 22 23 24 27 28 25 26 29 30 31 32 33 34 + [,15] [,16] [,17] [,18] [,19] [,20] [,21] + [1,] 0 0 0 0 0 0 0 + [2,] 6 7 8 0 0 0 0 + [3,] 15 12 18 17 16 19 20 + [4,] 0 0 0 0 0 0 0 $pos - [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] - [1,] 3.750000e+00 4.750000 6.500000 7.500000 11.75536 12.75536 17.71 18.71 - [2,] 9.470274e-16 1.000000 2.000000 3.000000 4.00000 5.00000 6.00 7.00 - [3,] 1.000000e-02 1.010000 2.010000 3.010000 4.01000 5.01000 6.01 7.01 - [4,] 6.009999e+00 7.009999 8.009999 9.009999 10.01000 11.01000 12.01 13.01 - [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] - [1,] 0.00000 0.00000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 - [2,] 10.50072 11.50072 13.01 14.01 15.01 16.01 17.01 18.01 19.01 20.01 21.01 - [3,] 8.01000 9.01000 10.01 11.01 12.01 13.01 14.01 15.01 16.01 17.01 18.01 - [4,] 0.00000 0.00000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 - [,20] [,21] [,22] - [1,] 0.00 0.00 0.00 - [2,] 0.00 0.00 0.00 - [3,] 19.01 20.01 21.01 - [4,] 0.00 0.00 0.00 + [,1] [,2] [,3] [,4] [,5] [,6] [,7] + [1,] 3.803847e+00 4.803847 9.576274 10.576274 0.000000 0.000000 0.000000 + [2,] -6.622646e-13 1.000000 2.803847 3.803847 4.803847 5.803847 6.876275 + [3,] 8.609109e-17 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 + [4,] -1.645370e-15 1.000000 2.000000 3.000000 11.010000 12.010000 13.010000 + [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] + [1,] 0.000000 0.000000 0.000000 0.00000 0.00000 0.00000 0.00 0.00 0.00 + [2,] 7.876275 8.876275 9.876275 10.87627 11.87627 12.87627 16.25 17.25 19.01 + [3,] 7.000000 8.000000 9.000000 10.00000 11.00000 12.00000 13.00 14.00 15.00 + [4,] 14.010000 15.010000 16.010000 17.01000 18.01000 19.01000 20.01 0.00 0.00 + [,17] [,18] [,19] [,20] [,21] + [1,] 0.00 0 0 0 0 + [2,] 20.01 0 0 0 0 + [3,] 16.00 17 18 19 20 + [4,] 0.00 0 0 0 0 $fam [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - [2,] 0 0 1 0 1 1 1 3 5 0 0 5 0 7 - [3,] 1 4 7 7 7 7 7 0 9 9 9 0 9 0 - [4,] 8 8 8 8 11 11 13 13 0 0 0 0 0 0 - [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] - [1,] 0 0 0 0 0 0 0 0 - [2,] 7 7 7 0 7 0 0 0 - [3,] 11 11 11 13 13 18 18 18 - [4,] 0 0 0 0 0 0 0 0 + [2,] 0 0 1 0 0 1 0 3 3 3 3 0 3 0 + [3,] 1 3 3 3 3 5 5 5 7 7 12 12 12 0 + [4,] 1 1 1 1 14 14 16 16 18 20 20 20 20 20 + [,15] [,16] [,17] [,18] [,19] [,20] [,21] + [1,] 0 0 0 0 0 0 0 + [2,] 0 0 0 0 0 0 0 + [3,] 14 0 14 0 14 14 16 + [4,] 0 0 0 0 0 0 0 $spouse [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] - [1,] 1 0 1 0 1 0 1 0 0 0 0 0 0 0 - [2,] 1 0 0 1 0 0 1 0 1 0 1 0 1 0 - [3,] 0 0 0 0 0 0 0 1 0 0 1 0 1 0 + [1,] 1 0 1 0 0 0 0 0 0 0 0 0 0 0 + [2,] 1 0 1 0 1 0 1 0 0 0 0 1 0 1 + [3,] 1 0 0 0 0 0 0 0 0 0 0 0 0 1 [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] - [1,] 0 0 0 0 0 0 0 0 - [2,] 0 0 0 1 0 0 0 0 - [3,] 0 0 0 0 0 0 0 0 - [4,] 0 0 0 0 0 0 0 0 + [,15] [,16] [,17] [,18] [,19] [,20] [,21] + [1,] 0 0 0 0 0 0 0 + [2,] 0 1 0 0 0 0 0 + [3,] 0 1 0 1 0 1 0 + [4,] 0 0 0 0 0 0 0 # besthint works @@ -66,59 +66,54 @@ plist Output $n - [1] 8 19 21 8 + [1] 4 17 21 14 $nid [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] - [1,] 7 8 5 6 35 36 42 43 0 0 0 0 0 0 - [2,] 20 19 15 17 16 18 1 2 3 4 37 38 44 45 - [3,] 30 31 32 33 34 29 9 10 11 12 18 14 15 39 - [4,] 21 22 23 24 25 26 27 28 0 0 0 0 0 0 + [1,] 35 36 42 43 0 0 0 0 0 0 0 0 0 0 + [2,] 7 8 5 6 3 4 37 38 1 2 44 45 46 47 + [3,] 20 19 17 16 15 18 12 15 14 11 10 39 40 41 + [4,] 30 31 32 33 34 29 25 26 27 28 21 22 23 24 [,15] [,16] [,17] [,18] [,19] [,20] [,21] [1,] 0 0 0 0 0 0 0 - [2,] 46 47 48 50 49 0 0 - [3,] 40 41 51 52 53 54 55 + [2,] 48 50 49 0 0 0 0 + [3,] 10 9 51 52 53 54 55 [4,] 0 0 0 0 0 0 0 $pos - [,1] [,2] [,3] [,4] [,5] [,6] [,7] - [1,] 1.827438e-01 1.182744 3.182744 4.182744 10.751665 11.751665 16.709999 - [2,] 6.827438e-01 1.682744 2.682744 3.682744 4.682744 5.682744 6.682744 - [3,] 7.566676e-14 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 - [4,] 4.999999e+00 5.999999 6.999999 7.999999 9.000000 10.000000 11.000000 - [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] - [1,] 17.709999 0.00000 0.00000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 - [2,] 7.682744 9.49333 10.49333 12.01 13.01 14.01 15.01 16.01 17.01 18.01 19.01 - [3,] 7.000000 8.00000 9.00000 10.00 11.00 12.00 13.00 14.00 15.00 16.00 17.00 - [4,] 12.000000 0.00000 0.00000 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 - [,19] [,20] [,21] - [1,] 0.00 0.00 0.00 - [2,] 20.01 0.00 0.00 - [3,] 18.01 19.01 20.01 - [4,] 0.00 0.00 0.00 + [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] + [1,] 9.010000e+00 10.01 16.71 17.71 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + [2,] 1.855743e-15 1.00 2.76 3.76 8.01 9.01 10.01 11.01 12.01 13.01 14.01 + [3,] 1.000000e-02 1.01 2.01 3.01 4.01 5.01 6.01 7.01 8.01 9.01 10.01 + [4,] 2.880160e-14 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00 13.01 + [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] + [1,] 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + [2,] 15.01 16.01 17.01 18.01 19.01 20.01 0.00 0.00 0.00 0.00 + [3,] 11.01 12.01 13.01 14.01 15.01 16.01 17.01 18.01 19.01 20.01 + [4,] 14.01 15.01 16.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 $fam [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - [2,] 1 3 3 0 3 3 0 0 5 0 0 5 0 7 - [3,] 1 1 1 1 1 4 7 9 9 9 0 9 0 11 - [4,] 7 7 7 7 10 10 12 12 0 0 0 0 0 0 + [2,] 0 0 0 0 1 0 0 1 0 0 0 3 3 3 + [3,] 1 3 0 3 3 3 5 0 5 5 5 7 7 7 + [4,] 1 1 1 1 1 3 6 6 8 8 15 15 15 15 [,15] [,16] [,17] [,18] [,19] [,20] [,21] [1,] 0 0 0 0 0 0 0 - [2,] 7 7 7 0 7 0 0 - [3,] 11 11 13 13 18 18 18 + [2,] 3 0 3 0 0 0 0 + [3,] 0 9 11 11 16 16 16 [4,] 0 0 0 0 0 0 0 $spouse [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] - [1,] 1 0 1 0 1 0 1 0 0 0 0 0 0 0 - [2,] 1 0 0 1 0 0 1 0 1 0 1 0 1 0 - [3,] 0 0 0 0 0 0 1 0 0 1 0 1 0 0 + [1,] 1 0 1 0 0 0 0 0 0 0 0 0 0 0 + [2,] 1 0 1 0 1 0 1 0 1 0 1 0 0 0 + [3,] 1 0 1 0 0 1 0 1 0 0 0 0 0 0 [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [,15] [,16] [,17] [,18] [,19] [,20] [,21] [1,] 0 0 0 0 0 0 0 - [2,] 0 0 0 1 0 0 0 - [3,] 0 0 0 0 0 0 0 + [2,] 0 1 0 0 0 0 0 + [3,] 1 0 0 0 0 0 0 [4,] 0 0 0 0 0 0 0 diff --git a/tests/testthat/_snaps/align/best-hint.svg b/tests/testthat/_snaps/align/best-hint.svg new file mode 100644 index 00000000..92cca9a1 --- /dev/null +++ b/tests/testthat/_snaps/align/best-hint.svg @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +0 +0 +0 +1 +1 +1 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +135 +107 +120 +130 +136 +108 +119 +131 +201 +105 +117 +132 +202 +106 +116 +133 +103 +115 +134 +104 +118 +129 +137 +112 +125 +138 +115 +126 +101 +114 +127 +102 +111 +128 +203 +110 +121 +204 +139 +122 +205 +140 +123 +206 +141 +124 +207 +110 +209 +109 +208 +210 +211 +212 +213 +214 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/align/double-wife.svg b/tests/testthat/_snaps/align/double-wife.svg deleted file mode 100644 index 96a6b28c..00000000 --- a/tests/testthat/_snaps/align/double-wife.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - -1 -4 -5 -2 -3 -7 -6 - - - - - - - - - - - - - - - - - - - - diff --git a/tests/testthat/_snaps/align/sampleped-norel.svg b/tests/testthat/_snaps/align/sampleped-norel.svg index 6bec8384..721fc7c3 100644 --- a/tests/testthat/_snaps/align/sampleped-norel.svg +++ b/tests/testthat/_snaps/align/sampleped-norel.svg @@ -18,280 +18,276 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + 0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -1 -0 -0 -1 -1 -1 -1 -0 -0 -1 -1 -1 -0 -1 -1 -1 -1 -1 -0 -0 -1 -1 -0 -1 -0 -0 -0 +0 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +1 0 -0 -0 -0 -1 -105 +1 +1 +1 +1 +0 +135 101 -109 -121 -106 -102 -129 -122 -107 -115 -130 -123 -108 -117 -131 -124 -135 -116 -132 -125 -136 -118 -133 -126 -201 -119 -134 -127 -202 -120 -109 -128 -103 -110 -104 -111 -137 -112 -138 -118 -203 -114 -204 -115 -205 -139 -206 -140 -207 -141 -209 -210 -208 -211 -212 -213 -214 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +109 +121 +136 +102 +110 +122 +201 +103 +111 +123 +202 +104 +112 +124 +137 +114 +127 +138 +139 +128 +203 +140 +125 +204 +141 +126 +205 +210 +129 +206 +211 +130 +207 +212 +131 +209 +213 +132 +208 +214 +133 +105 +114 +134 +106 +115 +107 +112 +108 +118 +117 +116 +119 +120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/align/sampleped-withrel.svg b/tests/testthat/_snaps/align/sampleped-withrel.svg index 26f56878..3e650bfe 100644 --- a/tests/testthat/_snaps/align/sampleped-withrel.svg +++ b/tests/testthat/_snaps/align/sampleped-withrel.svg @@ -18,292 +18,288 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - -0 + + + + + + + +0 0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -1 -0 -1 -0 -0 -1 -1 -0 -1 -0 -1 -1 -1 -0 -0 -1 -1 -1 -1 -1 -0 -0 -1 -1 -0 -1 -1 -0 -0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 0 -0 -0 -0 -0 -0 -1 -105 -101 +0 +1 +1 +1 +1 +1 +0 +135 +101 209 -121 -106 -102 -109 -122 -107 -115 -129 -123 -108 -117 -130 -124 -135 -116 -131 -125 -136 -118 -132 -126 -201 -119 -133 -127 -202 -120 -134 -128 -103 -109 -104 -110 -137 -112 -138 -118 -203 -111 -204 -113 -205 -114 -206 -115 -207 -139 -209 -140 -208 -141 -210 -211 -212 -213 -214 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +121 +136 +102 +109 +122 +201 +103 +110 +123 +202 +104 +112 +124 +137 +111 +127 +138 +114 +128 +203 +113 +125 +204 +139 +126 +205 +140 +129 +206 +141 +130 +207 +210 +131 +209 +211 +132 +208 +212 +133 +105 +213 +134 +106 +214 +107 +114 +108 +115 +112 +118 +117 +116 +119 +120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/kindepth/double-marriage.svg b/tests/testthat/_snaps/kindepth/double-marriage.svg new file mode 100644 index 00000000..b065e98f --- /dev/null +++ b/tests/testthat/_snaps/kindepth/double-marriage.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +1 +3 +7 +11 +2 +4 +9 +12 +5 +8 +6 +10 +9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/kindepth/niece-uncle-spouse.svg b/tests/testthat/_snaps/kindepth/niece-uncle-spouse.svg new file mode 100644 index 00000000..3241c57d --- /dev/null +++ b/tests/testthat/_snaps/kindepth/niece-uncle-spouse.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + +1 +3 +5 +7 +2 +4 +6 +5 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg b/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg index 78421991..7469a019 100644 --- a/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg +++ b/tests/testthat/_snaps/ped_to_legdf/plot-with-legend.svg @@ -18,317 +18,312 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1_105 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1_135 1_101 -1_109 -1_121 -1_106 -1_102 -1_129 -1_122 -1_107 -1_115 -1_130 -1_123 -1_108 -1_117 -1_131 -1_124 -1_135 -1_116 -1_132 -1_125 -1_136 -1_118 -1_133 -1_126 -1_119 -1_134 -1_127 -1_120 -1_109 -1_128 -1_103 -1_110 -1_104 -1_111 -1_137 -1_112 -1_138 -1_118 -1_114 -1_115 -1_139 -1_140 -1_141 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +1_109 +1_121 +1_136 +1_102 +1_110 +1_122 +1_103 +1_111 +1_123 +1_104 +1_112 +1_124 +1_137 +1_114 +1_127 +1_138 +1_139 +1_128 +1_105 +1_140 +1_125 +1_106 +1_141 +1_126 +1_107 +1_114 +1_129 +1_108 +1_115 +1_130 +1_112 +1_131 +1_118 +1_132 +1_117 +1_133 +1_116 +1_134 +1_119 +1_120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sex -Border -affection -avail -val_num -Male -Female -Non Available -Available -Healthy <= to 0.5 -Affected > to 0.5 -NA -Healthy are FALSE -Affected are TRUE -Healthy <= to 115 : [101,106] -Healthy <= to 115 : (106,110] -Healthy <= to 115 : (110,115] -Affected > to 115 : [116,124] -Affected > to 115 : (124,133] -Affected > to 115 : (133,141] + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sex +Border +affection +avail +val_num +Male +Female +Non Available +Available +Healthy <= to 0.5 +Affected > to 0.5 +NA +Healthy are FALSE +Affected are TRUE +Healthy <= to 115 : [101,106] +Healthy <= to 115 : (106,110] +Healthy <= to 115 : (110,115] +Affected > to 115 : [116,124] +Affected > to 115 : (124,133] +Affected > to 115 : (133,141] diff --git a/tests/testthat/_snaps/plot/ped1.svg b/tests/testthat/_snaps/plot/ped1.svg index 7de422a4..ac09ae64 100644 --- a/tests/testthat/_snaps/plot/ped1.svg +++ b/tests/testthat/_snaps/plot/ped1.svg @@ -18,215 +18,211 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -1 -1 -1 -0 -1 -1 -1 -1 -0 -1 -0 -0 -1_105 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +1 +1 +1 +0 +1_135 1_101 -1_109 -1_121 -1_106 -1_102 -1_129 -1_122 -1_107 -1_115 -1_130 -1_123 -1_108 -1_117 -1_131 -1_124 -1_135 -1_116 -1_132 -1_125 -1_136 -1_118 -1_133 -1_126 -1_119 -1_134 -1_127 -1_120 -1_109 -1_128 -1_103 -1_110 -1_104 -1_111 -1_137 -1_112 -1_138 -1_118 -1_114 -1_115 -1_139 -1_140 -1_141 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +1_109 +1_121 +1_136 +1_102 +1_110 +1_122 +1_103 +1_111 +1_123 +1_104 +1_112 +1_124 +1_137 +1_114 +1_127 +1_138 +1_139 +1_128 +1_105 +1_140 +1_125 +1_106 +1_141 +1_126 +1_107 +1_114 +1_129 +1_108 +1_115 +1_130 +1_112 +1_131 +1_118 +1_132 +1_117 +1_133 +1_116 +1_134 +1_119 +1_120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/_snaps/plot/ped1reorder.svg b/tests/testthat/_snaps/plot/ped1reorder.svg index 478328ff..9fdc07f8 100644 --- a/tests/testthat/_snaps/plot/ped1reorder.svg +++ b/tests/testthat/_snaps/plot/ped1reorder.svg @@ -18,211 +18,215 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 -0 -0 -0 -1 -0 -1 -0 -1 -1 -1 -0 -1 -1 -0 -1 -1 -0 -0 -1 -0 -1 -0 -1 -1 -1 -1 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1_135 -1_137 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +1 +1 +0 +1_135 +1_137 1_139 -1_125 -1_136 -1_138 -1_140 -1_126 -1_105 -1_103 -1_141 -1_127 -1_106 -1_104 -1_111 -1_128 -1_107 -1_101 -1_112 -1_121 -1_108 -1_102 -1_118 -1_122 -1_115 -1_114 -1_123 -1_117 -1_115 -1_124 -1_116 -1_110 -1_118 -1_109 -1_119 -1_129 -1_120 -1_130 -1_131 -1_132 -1_133 -1_134 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +1_121 +1_136 +1_138 +1_140 +1_122 +1_103 +1_141 +1_123 +1_104 +1_111 +1_124 +1_101 +1_112 +1_127 +1_102 +1_110 +1_128 +1_105 +1_109 +1_125 +1_106 +1_114 +1_126 +1_107 +1_109 +1_129 +1_108 +1_114 +1_130 +1_115 +1_131 +1_112 +1_132 +1_118 +1_133 +1_117 +1_134 +1_116 +1_119 +1_120 + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 9d7f12af..0853e00a 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -3,10 +3,9 @@ test_that("align works", { pedi <- Pedigree(sampleped) ped1 <- pedi[famid(pedi) == "1"] plist1 <- align(ped1) - expect_equal(plist1$n, c(6, 12, 17, 8)) + expect_equal(plist1$n, c(2, 10, 16, 14)) ped2 <- pedi[famid(pedi) == 2] - withr::local_options(width = 180) plist2 <- align(ped2) expect_equal(plist2$n, c(2, 7, 5)) @@ -38,14 +37,18 @@ test_that("test auto_hint works", { newhint <- auto_hint(pedi) expect_equal(horder(newhint), setNames(c( - 1, 2, 3, 4, 1, 2, 3, 4, 1, 1, 3, 2, 5, 4, 5, - 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, - 8, 9, 10, 11, 6, 7, 11, 12, 12, 13, 14, 8, 9, 13, 14, - 15, 16, 17, 18, 19, 15, 16, 17, 18, 19 + 1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 3, 2, 1, 4, 1, + 3, 9, 2, 4, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 2, 3, 10, 11, 11, 12, 13, 4, + 5, 12, 13, 14, 15, 16, 17, 18, 14, 15, 16, 17, 18 ), id(ped(pedi))) ) - expect_equal(unlist(spouse(newhint)), - c("idl" = "109", "idr" = "110", "anchor" = "2") + expect_equal(as.data.frame(spouse(newhint)), + data.frame( + idl = c("112", "114", "109"), + idr = c("118", "115", "110"), + anchor = anchor_to_factor(c("right", "right", "left")) + ) ) }) @@ -63,10 +66,10 @@ test_that("test alignment with inbreeding and relationship matrix", { plist_sr <- align(ped_norel) expect_equal(plist$nid[1, ], - c(5, 6, 7, 8, 35, 36, 42, 43, rep(0, 16)) + c(35, 36, 42, 43, rep(0, 19)) ) expect_equal(plist_sr$nid[1, ], - c(5, 6, 7, 8, 35, 36, 42, 43, rep(0, 14)) + c(35, 36, 42, 43, rep(0, 17)) ) vdiffr::expect_doppelganger("sampleped_withrel", function() plot(ped_withrel) @@ -105,35 +108,20 @@ test_that("Alignement with spouse", { ) ped1 <- Pedigree(df1, relate1) hints <- auto_hint(ped1) - expect_equal(spouse(hints), data.frame( - idl = "1_109", idr = "1_110", - anchor = anchor_to_factor("right") - )) + expect_equal(spouse(hints), + data.frame( + idl = c("1_112", "1_114", "1_109"), + idr = c("1_118", "1_115", "1_110"), + anchor = anchor_to_factor(c("right", "right", "left")) + ) + ) expect_equal(horder(hints), setNames(c( - 1, 2, 3, 4, 1, 2, 3, 4, 1, 1, - 2, 3, 5, 4, 5, 6, 7, 8, 9, 10, - 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, - 8, 9, 10, 11, 6, 7, 11, 12, 12, - 13, 14 + 1, 2, 3, 4, 5, 6, 7, 8, 1, 1, + 2, 3, 1, 4, 1, 3, 9, 2, 4, 10, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 2, 3, 10, 11, 11, + 12, 13 ), id(ped(ped1))) ) }) - -test_that("Double wife", { - ## reported on github in 2023 - ## version 1.9.6 failed to plot subject 3 second marriage and kids - ## fix in 9/2023 to revert to some version 1.8.5 version of kindepth - df <- data.frame( - id = 1:7, - dadid = c(0, 0, 0, 1, 3, 0, 3), - momid = c(0, 0, 0, 2, 4, 0, 6), - sex = c(1, 2, 1, 2, 1, 2, 1) - ) - pedi <- Pedigree(df, missid = "0") - expect_equal(kindepth(pedi, align_parents = TRUE), c(0, 0, 1, 1, 2, 1, 2)) - expect_equal(kindepth(pedi), c(0, 0, 0, 1, 2, 0, 1)) - vdiffr::expect_doppelganger("double_wife", - function() plot(pedi) - ) -}) diff --git a/tests/testthat/test-kindepth.R b/tests/testthat/test-kindepth.R index e2beaadd..d65884fa 100644 --- a/tests/testthat/test-kindepth.R +++ b/tests/testthat/test-kindepth.R @@ -31,14 +31,35 @@ test_that("Kindepth works", { expect_equal(kindepth(pedi, align_parents = TRUE), c(0, 0, 1, 1, 2, 1, 2)) expect_equal(kindepth(pedi), c(0, 0, 0, 1, 2, 0, 1)) + ## Uncle / Niece spouse + df <- data.frame( + id = 1:7, + dadid = c(0, 0, 0, 1, 1, 3, 5), + momid = c(0, 0, 0, 2, 2, 4, 6), + sex = c(1, 2, 1, 2, 1, 2, 1) + ) + pedi <- Pedigree(df, missid = "0") + expect_equal(kindepth(pedi, align_parents = TRUE), c(0, 0, 1, 1, 1, 2, 3)) + vdiffr::expect_doppelganger("Niece Uncle spouse", + function() plot(pedi) + ) + ## Double marriage + ## reported on github in 2023 + ## version 1.9.6 failed to plot subject 3 second marriage and kids + ## fix in 9/2023 to revert to some version 1.8.5 version of kindepth df <- data.frame( - id = 1:9, - dadid = c(0, 0, 0, 1, 1, 1, 3, 7, 5), - momid = c(0, 0, 0, 2, 2, 2, 2, 6, 8), - sex = c(1, 2, 1, 2, 1, 2, 1, 2, 1) + id = 1:12, + dadid = c(0, 0, 1, 0, 0, 0, 3, 3, 5, 5, 7, 10), + momid = c(0, 0, 2, 0, 0, 0, 4, 4, 6, 6, 9, 8), + sex = c(1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2) ) pedi <- Pedigree(df, missid = "0") - kindepth(pedi, align_parents = TRUE) - plot(pedi) + expect_equal( + kindepth(pedi, align_parents = TRUE), + c(0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3) + ) + vdiffr::expect_doppelganger("Double marriage", + function() plot(pedi) + ) }) From b51b890e79b3fc7eb57199082c17b064e04b672f Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 14 Nov 2023 15:02:57 +0100 Subject: [PATCH 090/111] Bug correction for fix_parents with famid --- R/fix_parents.R | 1 + tests/testthat/_snaps/fix_parents.md | 4 ++++ tests/testthat/test-fix_parents.R | 14 ++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/R/fix_parents.R b/R/fix_parents.R index c7f4a85f..0e0a4bd6 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -165,6 +165,7 @@ setMethod("fix_parents", "character", function( if (is.null(famid)) { data.frame(id = id, momid = momid, dadid = dadid, sex = sex) } else { + famid <- make_famid(id, dadid, momid) data.frame( id = id, momid = momid, dadid = dadid, sex = sex, famid = famid diff --git a/tests/testthat/_snaps/fix_parents.md b/tests/testthat/_snaps/fix_parents.md index 52a445cd..1f426749 100644 --- a/tests/testthat/_snaps/fix_parents.md +++ b/tests/testthat/_snaps/fix_parents.md @@ -10,3 +10,7 @@ invalid class "Ped" object: dadid values '2_209' should be in '2_201', '2_202', '2_203', '2_204', '2_205'... +# fix_parents works with famid + + invalid class "Ped" object: dadid values '2_209' should be in '1_101', '1_102', '1_103', '1_104', '1_105'... + diff --git a/tests/testthat/test-fix_parents.R b/tests/testthat/test-fix_parents.R index 72a433dd..6a271d53 100644 --- a/tests/testthat/test-fix_parents.R +++ b/tests/testthat/test-fix_parents.R @@ -41,3 +41,17 @@ test_that("fix_parents works with sex errors", { expect_contains(fixped2$id, "209") expect_no_error(Pedigree(fixped2)) }) + +test_that("fix_parents works with famid", { + data("sampleped") + datped <- sampleped[-which(sampleped$id %in% 209), ] + + ## this gets an error + expect_snapshot_error(Pedigree(datped)) + fixped <- fix_parents(datped) + + expect_contains(fixped$id, "2_209") + expect_equal(fixped$sex[fixped$id == "2_209"], 1) + expect_equal(fixped$famid[fixped$id == "2_209"], "2") + expect_no_error(Pedigree(fixped)) +}) From fd212e6a43075e18bc2eb41c135cc4255d1b91c5 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 14 Nov 2023 17:04:52 +0100 Subject: [PATCH 091/111] Update documentation --- NAMESPACE | 107 +++++++++++++++++++++++++-- R/AllAccessors.R | 107 ++++++++++++++++++++++++++- R/AllConstructor.R | 8 ++- R/AllGeneric.R | 7 +- R/AllValidity.R | 108 +++++++++++++++++++++------- R/align.R | 1 + R/alignped1.R | 1 - R/alignped2.R | 1 - R/alignped3.R | 1 - R/alignped4.R | 1 - R/auto_hint.R | 1 + R/best_hint.R | 1 + R/bit_size.R | 1 + R/descendants.R | 3 +- R/family_check.R | 4 ++ R/find_avail_affected.R | 3 + R/find_avail_noninform.R | 3 + R/find_unavailable.R | 3 + R/fix_parents.R | 3 + R/generate_colors.R | 6 ++ R/ibd_matrix.R | 3 +- R/is_informative.R | 10 +-- R/kindepth.R | 7 +- R/kinship.R | 6 ++ R/make_famid.R | 12 +++- R/min_dist_inf.R | 8 ++- R/num_child.R | 5 ++ R/ped_to_legdf.R | 2 + R/ped_to_plotdf.R | 3 + R/plot_fct.R | 71 ++++++++++-------- R/shrink.R | 3 + R/unrelated.R | 4 ++ R/useful_inds.R | 5 ++ R/utils.R | 4 ++ man/Ped-class.Rd | 4 -- man/Pedigree-class.Rd | 11 +-- man/align.Rd | 2 - man/auto_hint.Rd | 2 - man/best_hint.Rd | 2 - man/bit_size.Rd | 2 - man/descendants.Rd | 4 +- man/draw_arc.Rd | 13 ++-- man/draw_polygon.Rd | 17 ++--- man/draw_segment.Rd | 15 ++-- man/draw_text.Rd | 15 ++-- man/family_check.Rd | 2 - man/find_avail_affected.Rd | 2 - man/find_avail_noninform.Rd | 2 - man/find_unavailable.Rd | 2 - man/fix_parents.Rd | 2 - man/generate_colors.Rd | 4 +- man/ibd_matrix.Rd | 2 +- man/is_informative.Rd | 9 +-- man/is_parent.Rd | 3 +- man/is_valid_hints.Rd | 17 +++-- man/is_valid_ped.Rd | 2 +- man/is_valid_pedigree.Rd | 29 ++++++++ man/is_valid_rel.Rd | 28 ++++++++ man/is_valid_scales.Rd | 23 +++++- man/kindepth.Rd | 9 ++- man/kinship.Rd | 4 +- man/make_famid.Rd | 7 +- man/min_dist_inf.Rd | 5 +- man/num_child.Rd | 4 +- man/ped_to_legdf.Rd | 4 +- man/ped_to_plotdf.Rd | 7 +- man/plot-Pedigree-missing-method.Rd | 6 +- man/plot_fromdf.Rd | 2 +- man/polyfun.Rd | 2 +- man/polygons.Rd | 2 +- man/set_plot_area.Rd | 12 ++-- man/shrink.Rd | 2 - man/unrelated.Rd | 3 +- man/upd_famid_id.Rd | 5 +- man/useful_inds.Rd | 3 +- vignettes/kinship_details.Rmd | 2 +- vignettes/pedigree.Rmd | 23 +++--- vignettes/pedigree_constructor.Rmd | 9 +-- 78 files changed, 621 insertions(+), 217 deletions(-) create mode 100644 man/is_valid_pedigree.Rd create mode 100644 man/is_valid_rel.Rd diff --git a/NAMESPACE b/NAMESPACE index e3a2cc94..ce6a0677 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,21 +1,43 @@ # Generated by roxygen2: do not edit by hand +export("affected<-") +export("avail<-") +export("border<-") +export("dadid<-") +export("famid<-") +export("fill<-") +export("hints<-") +export("horder<-") +export("id<-") +export("isinf<-") +export("kin<-") +export("momid<-") +export("ped<-") +export("rel<-") +export("scales<-") +export("sex<-") +export("spouse<-") +export("status<-") +export("useful<-") export(Hints) export(Ped) export(Pedigree) export(Rel) export(Scales) +export(affected) export(align) -export(alignped1) -export(alignped2) -export(alignped3) -export(alignped4) export(anchor_to_factor) export(auto_hint) +export(avail) export(best_hint) export(bit_size) +export(border) +export(code) +export(dadid) export(descendants) +export(famid) export(family_check) +export(fill) export(find_avail_affected) export(find_avail_noninform) export(find_unavailable) @@ -24,24 +46,39 @@ export(generate_aff_inds) export(generate_border) export(generate_colors) export(generate_fill) +export(hints) +export(horder) export(ibd_matrix) +export(id) +export(id1) +export(id2) export(is_informative) export(is_valid_scales) +export(isinf) +export(kin) export(kindepth) export(kinship) export(make_famid) export(min_dist_inf) +export(momid) export(norm_ped) export(norm_rel) export(num_child) +export(ped) export(ped_to_legdf) export(ped_to_plotdf) export(plot_fromdf) +export(rel) export(rel_code_to_factor) +export(scales) +export(sex) export(sex_to_factor) export(shrink) +export(spouse) +export(status) export(unrelated) export(upd_famid_id) +export(useful) export(useful_inds) export(vect_to_binary) exportClasses(Hints) @@ -50,18 +87,79 @@ exportClasses(Pedigree) exportClasses(Rel) exportClasses(Scales) exportMethods("[") +exportMethods("affected<-") +exportMethods("avail<-") +exportMethods("border<-") +exportMethods("dadid<-") +exportMethods("famid<-") +exportMethods("fill<-") +exportMethods("hints<-") +exportMethods("horder<-") +exportMethods("id<-") +exportMethods("isinf<-") +exportMethods("kin<-") +exportMethods("mcols<-") +exportMethods("momid<-") +exportMethods("ped<-") +exportMethods("rel<-") +exportMethods("scales<-") +exportMethods("sex<-") +exportMethods("spouse<-") +exportMethods("status<-") +exportMethods("useful<-") exportMethods(Hints) +exportMethods(Ped) exportMethods(Pedigree) exportMethods(Rel) exportMethods(Scales) +exportMethods(affected) exportMethods(as.data.frame) exportMethods(as.list) exportMethods(auto_hint) +exportMethods(avail) +exportMethods(border) +exportMethods(code) +exportMethods(dadid) +exportMethods(famid) +exportMethods(family_check) +exportMethods(fill) +exportMethods(find_avail_affected) +exportMethods(find_avail_noninform) +exportMethods(find_unavailable) +exportMethods(fix_parents) +exportMethods(generate_colors) +exportMethods(hints) +exportMethods(horder) +exportMethods(id) +exportMethods(id1) +exportMethods(id2) +exportMethods(is_informative) +exportMethods(is_parent) +exportMethods(isinf) +exportMethods(kin) +exportMethods(kinship) exportMethods(length) +exportMethods(mcols) +exportMethods(min_dist_inf) +exportMethods(momid) +exportMethods(num_child) +exportMethods(ped) +exportMethods(ped_to_legdf) +exportMethods(ped_to_plotdf) exportMethods(plot) +exportMethods(rel) +exportMethods(scales) +exportMethods(sex) exportMethods(show) +exportMethods(shrink) +exportMethods(spouse) +exportMethods(status) exportMethods(subset) exportMethods(summary) +exportMethods(unrelated) +exportMethods(upd_famid_id) +exportMethods(useful) +exportMethods(useful_inds) importFrom(Matrix,bdiag) importFrom(Matrix,forceSymmetric) importFrom(Matrix,sparseMatrix) @@ -113,6 +211,7 @@ importFrom(graphics,strheight) importFrom(graphics,strwidth) importFrom(graphics,text) importFrom(methods,as) +importFrom(methods,show) importFrom(plyr,rbind.fill) importFrom(plyr,revalue) importFrom(quadprog,solve.QP) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index e71b9802..8663601e 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -19,6 +19,7 @@ NULL #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("id", function(x) { standardGeneric("id") }) @@ -27,18 +28,21 @@ setGeneric("id", function(x) { #' - `id(x)` : Individuals identifiers #' @rdname Ped-class #' @usage NULL +#' @export setMethod("id", signature(x = "Ped"), function(x) { x@id }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("id<-", function(x, value) { standardGeneric("id<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("id<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -60,6 +64,7 @@ setMethod("id<-", ##### Dadid Accessors ##### #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("dadid", function(x) { standardGeneric("dadid") }) @@ -68,18 +73,21 @@ setGeneric("dadid", function(x) { #' - `dadid(x)` : Individuals' father identifiers #' @rdname Ped-class #' @usage NULL +#' @export setMethod("dadid", signature(x = "Ped"), function(x) { x@dadid }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("dadid<-", function(x, value) { standardGeneric("dadid<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("dadid<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -102,6 +110,7 @@ setMethod("dadid<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("momid", function(x) { standardGeneric("momid") }) @@ -110,18 +119,21 @@ setGeneric("momid", function(x) { #' - `momid(x)` : Individuals' mother identifiers #' @rdname Ped-class #' @usage NULL +#' @export setMethod("momid", signature(x = "Ped"), function(x) { x@momid }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("momid<-", function(x, value) { standardGeneric("momid<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("momid<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -144,6 +156,7 @@ setMethod("momid<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("famid", function(x) { standardGeneric("famid") }) @@ -152,18 +165,21 @@ setGeneric("famid", function(x) { #' - `famid(x)` : Individuals' family identifiers #' @rdname Ped-class #' @usage NULL +#' @export setMethod("famid", signature(x = "Ped"), function(x) { x@famid }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("famid<-", function(x, value) { standardGeneric("famid<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("famid<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -186,6 +202,7 @@ setMethod("famid<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("sex", function(x) { standardGeneric("sex") }) @@ -194,18 +211,21 @@ setGeneric("sex", function(x) { #' - `sex(x)` : Individuals' gender #' @rdname Ped-class #' @usage NULL +#' @export setMethod("sex", signature(x = "Ped"), function(x) { x@sex }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("sex<-", function(x, value) { standardGeneric("sex<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("sex<-", signature(x = "Ped", value = "character_OR_integer"), function(x, value) { @@ -232,6 +252,7 @@ setMethod("sex<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("affected", function(x) { standardGeneric("affected") }) @@ -240,18 +261,21 @@ setGeneric("affected", function(x) { #' - `affected(x)` : Individuals' affection status #' @rdname Ped-class #' @usage NULL +#' @export setMethod("affected", signature(x = "Ped"), function(x) { x@affected }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("affected<-", function(x, value) { standardGeneric("affected<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("affected<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -275,6 +299,7 @@ setMethod("affected<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("avail", function(x) { standardGeneric("avail") }) @@ -283,18 +308,21 @@ setGeneric("avail", function(x) { #' - `avail(x)` : Individuals' availability status #' @rdname Ped-class #' @usage NULL +#' @export setMethod("avail", signature(x = "Ped"), function(x) { x@avail }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("avail<-", function(x, value) { standardGeneric("avail<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("avail<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -318,6 +346,7 @@ setMethod("avail<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("status", function(x) { standardGeneric("status") }) @@ -326,18 +355,21 @@ setGeneric("status", function(x) { #' - `status(x)` : Individuals' death status #' @rdname Ped-class #' @usage NULL +#' @export setMethod("status", signature(x = "Ped"), function(x) { x@status }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("status<-", function(x, value) { standardGeneric("status<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("status<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -361,6 +393,7 @@ setMethod("status<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("isinf", function(x) { standardGeneric("isinf") }) @@ -369,18 +402,21 @@ setGeneric("isinf", function(x) { #' - `isinf(x)` : Individuals' informativeness status #' @rdname Ped-class #' @usage NULL +#' @export setMethod("isinf", signature(x = "Ped"), function(x) { x@isinf }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("isinf<-", function(x, value) { standardGeneric("isinf<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("isinf<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -404,6 +440,7 @@ setMethod("isinf<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("kin", function(x) { standardGeneric("kin") }) @@ -413,18 +450,21 @@ setGeneric("kin", function(x) { #' informative individuals #' @rdname Ped-class #' @usage NULL +#' @export setMethod("kin", signature(x = "Ped"), function(x) { x@kin }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("kin<-", function(x, value) { standardGeneric("kin<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("kin<-", signature(x = "Ped", value = "numeric"), function(x, value) { @@ -448,6 +488,7 @@ setMethod("kin<-", #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("useful", function(x) { standardGeneric("useful") }) @@ -456,18 +497,21 @@ setGeneric("useful", function(x) { #' - `useful(x)` : Individuals' usefullness status #' @rdname Ped-class #' @usage NULL +#' @export setMethod("useful", signature(x = "Ped"), function(x) { x@useful }) #' @rdname Ped-class #' @usage NULL +#' @export setGeneric("useful<-", function(x, value) { standardGeneric("useful<-") }) #' @rdname Ped-class #' @usage NULL +#' @export setMethod("useful<-", signature(x = "Ped", value = "numeric_OR_logical"), function(x, value) { @@ -493,6 +537,7 @@ setMethod("useful<-", #' - `mcols(x)` : Individuals' metadata #' @rdname Ped-class #' @usage NULL +#' @export setMethod("mcols<-", signature(x = "Ped", value = "list"), function(x, value) { @@ -503,6 +548,7 @@ setMethod("mcols<-", #' @rdname Ped-class #' @usage NULL +#' @export setMethod("mcols<-", signature(x = "Ped", value = "data.frame"), function(x, value) { @@ -521,6 +567,7 @@ setMethod("mcols<-", ##### Code Accessors ##### #' @rdname Rel-class #' @usage NULL +#' @export setGeneric("code", function(x) { standardGeneric("code") }) @@ -529,6 +576,7 @@ setGeneric("code", function(x) { #' - `code(x)` : Relationships' code #' @rdname Rel-class #' @usage NULL +#' @export setMethod("code", signature(x = "Rel"), function(x) { x@code }) @@ -536,6 +584,7 @@ setMethod("code", signature(x = "Rel"), function(x) { ##### Id1 Accessors ##### #' @rdname Rel-class #' @usage NULL +#' @export setGeneric("id1", function(x) { standardGeneric("id1") }) @@ -544,6 +593,7 @@ setGeneric("id1", function(x) { #' - `id1(x)` : Relationships' first individuals' identifier #' @rdname Rel-class #' @usage NULL +#' @export setMethod("id1", signature(x = "Rel"), function(x) { x@id1 }) @@ -552,6 +602,7 @@ setMethod("id1", signature(x = "Rel"), function(x) { #' @rdname Rel-class #' @usage NULL +#' @export setGeneric("id2", function(x) { standardGeneric("id2") }) @@ -560,6 +611,7 @@ setGeneric("id2", function(x) { #' - `id2(x)` : Relationships' second individuals' identifier #' @rdname Rel-class #' @usage NULL +#' @export setMethod("id2", signature(x = "Rel"), function(x) { x@id2 }) @@ -568,6 +620,7 @@ setMethod("id2", signature(x = "Rel"), function(x) { #' - `famid(x)` : Relationships' individuals' family identifier #' @rdname Rel-class #' @usage NULL +#' @export setMethod("famid", signature(x = "Rel"), function(x) { x@famid }) @@ -579,6 +632,7 @@ setMethod("famid", signature(x = "Rel"), function(x) { #' with the family identifiers #' @rdname Rel-class #' @usage NULL +#' @export setMethod("famid<-", signature(x = "Rel", value = "character_OR_integer"), function(x, value) { @@ -610,6 +664,7 @@ setMethod("famid<-", #' #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("famid", signature(x = "Pedigree"), function(x) { famid(ped(x)) }) @@ -618,6 +673,7 @@ setMethod("famid", signature(x = "Pedigree"), function(x) { #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("ped", function(object, slot) { standardGeneric("ped") }) @@ -626,6 +682,7 @@ setGeneric("ped", function(object, slot) { #' - `ped(x, slot)` : Get the value of a specific slot of the Ped object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "ped", signature(object = "Pedigree", slot = "ANY"), @@ -638,6 +695,7 @@ setMethod( #' - `ped(x)` : Get the Ped object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "ped", signature(object = "Pedigree", slot = "missing"), @@ -648,15 +706,18 @@ setMethod( #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("ped<-", function(object, slot, value) { standardGeneric("ped<-") }) #' @section Accessors: -#' - `ped(x, slot) <- value` : Set the value of a specific slot of the Ped object +#' - `ped(x, slot) <- value` : Set the value of a specific slot of +#' the Ped object #' Wrapper of `slot(ped(x)) <- value` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "ped<-", signature(object = "Pedigree", slot = "ANY", value = "ANY"), @@ -686,6 +747,7 @@ setMethod( #' - `ped(x) <- value` : Set the Ped object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "ped<-", signature(object = "Pedigree", slot = "missing", value = "Ped"), @@ -704,6 +766,7 @@ setMethod( #' @rdname Pedigree-class #' @usage NULL #' @importFrom S4Vectors 'mcols' +#' @export setMethod( "mcols", signature(x = "Pedigree"), @@ -718,6 +781,7 @@ setMethod( #' @rdname Pedigree-class #' @usage NULL #' @importFrom S4Vectors 'mcols<-' +#' @export setMethod( "mcols<-", signature(x = "Pedigree", value = "ANY"), @@ -731,6 +795,7 @@ setMethod( #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("rel", function(object, slot) { standardGeneric("rel") }) @@ -739,6 +804,7 @@ setGeneric("rel", function(object, slot) { #' - `rel(x, slot)` : Get the value of a specific slot of the Rel object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "rel", signature(object = "Pedigree", slot = "ANY"), @@ -751,6 +817,7 @@ setMethod( #' - `rel(x)` : Get the Rel object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "rel", signature(object = "Pedigree", slot = "missing"), @@ -761,15 +828,18 @@ setMethod( #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("rel<-", function(object, slot, value) { standardGeneric("rel<-") }) #' @section Accessors: -#' - `rel(x, slot) <- value` : Set the value of a specific slot of the Rel object +#' - `rel(x, slot) <- value` : Set the value of a specific slot of the +#' Rel object #' Wrapper of `slot(rel(x)) <- value` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "rel<-", signature(object = "Pedigree", slot = "ANY", value = "ANY"), @@ -794,6 +864,7 @@ setMethod( #' - `rel(x) <- value` : Set the Rel object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "rel<-", signature(object = "Pedigree", slot = "missing", value = "Rel"), @@ -808,6 +879,7 @@ setMethod( #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("scales", function(object) { standardGeneric("scales") }) @@ -816,12 +888,14 @@ setGeneric("scales", function(object) { #' - `scales(x)` : Get the Scales object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("scales", signature(object = "Pedigree"), function(object) { object@scales }) #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("scales<-", function(object, value) { standardGeneric("scales<-") }) @@ -830,6 +904,7 @@ setGeneric("scales<-", function(object, value) { #' - `scales(x) <- value` : Set the Scales object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "scales<-", signature(object = "Pedigree", value = "Scales"), function(object, value) { @@ -842,6 +917,7 @@ setMethod( #' @rdname Scales-class #' @usage NULL +#' @export setGeneric("fill", function(object) { standardGeneric("fill") }) @@ -850,6 +926,7 @@ setGeneric("fill", function(object) { #' - `fill(x)` : Get the fill data.frame #' @rdname Scales-class #' @usage NULL +#' @export setMethod("fill", signature(object = "Scales"), function(object) { @@ -862,6 +939,7 @@ setMethod("fill", #' Wrapper of `fill(scales(x))` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("fill", signature(object = "Pedigree"), function(object) { @@ -871,6 +949,7 @@ setMethod("fill", #' @rdname Scales-class #' @usage NULL +#' @export setGeneric("fill<-", function(object, value) { standardGeneric("fill<-") }) @@ -879,6 +958,7 @@ setGeneric("fill<-", function(object, value) { #' - `fill(x) <- value` : Set the fill data.frame #' @rdname Scales-class #' @usage NULL +#' @export setMethod( "fill<-", signature(object = "Scales", value = "data.frame"), @@ -894,6 +974,7 @@ setMethod( #' Wrapper of `fill(scales(x)) <- value` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "fill<-", signature(object = "Pedigree", value = "data.frame"), @@ -908,6 +989,7 @@ setMethod( #' @rdname Scales-class #' @usage NULL +#' @export setGeneric("border", function(object) { standardGeneric("border") }) @@ -916,6 +998,7 @@ setGeneric("border", function(object) { #' - `border(x)` : Get the border data.frame #' @rdname Scales-class #' @usage NULL +#' @export setMethod("border", signature(object = "Scales"), function(object) { @@ -928,6 +1011,7 @@ setMethod("border", #' Wrapper of `border(scales(x))` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("border", signature(object = "Pedigree"), function(object) { @@ -937,6 +1021,7 @@ setMethod("border", #' @rdname Scales-class #' @usage NULL +#' @export setGeneric("border<-", function(object, value) { standardGeneric("border<-") }) @@ -945,6 +1030,7 @@ setGeneric("border<-", function(object, value) { #' - `border(x) <- value` : Set the border data.frame #' @rdname Scales-class #' @usage NULL +#' @export setMethod( "border<-", signature(object = "Scales", value = "data.frame"), @@ -960,6 +1046,7 @@ setMethod( #' Wrapper of `border(scales(x)) <- value` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "border<-", signature(object = "Pedigree", value = "data.frame"), @@ -974,6 +1061,7 @@ setMethod( #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("hints", function(object) { standardGeneric("hints") }) @@ -982,12 +1070,14 @@ setGeneric("hints", function(object) { #' - `hints(x)` : Get the Hints object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("hints", signature(object = "Pedigree"), function(object) { object@hints }) #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("hints<-", function(object, value) { standardGeneric("hints<-") }) @@ -996,6 +1086,7 @@ setGeneric("hints<-", function(object, value) { #' - `hints(x) <- value` : Set the Hints object #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("hints<-", signature(object = "Pedigree", value = "Hints"), function( object, value ) { @@ -1008,6 +1099,7 @@ setMethod("hints<-", signature(object = "Pedigree", value = "Hints"), function( #' @rdname Hints-class #' @usage NULL +#' @export setGeneric("horder", function(object) { standardGeneric("horder") }) @@ -1016,6 +1108,7 @@ setGeneric("horder", function(object) { #' - `horder(x)` : Get the horder vector #' @rdname Hints-class #' @usage NULL +#' @export setMethod("horder", "Hints", function(object) { object@horder }) @@ -1025,12 +1118,14 @@ setMethod("horder", "Hints", function(object) { #' Wrapper of `horder(hints(x))` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("horder", "Pedigree", function(object) { horder(hints(object)) }) #' @rdname Hints-class #' @usage NULL +#' @export setGeneric("horder<-", function(object, value) { standardGeneric("horder<-") }) @@ -1039,6 +1134,7 @@ setGeneric("horder<-", function(object, value) { #' - `horder(x) <- value` : Set the horder vector #' @rdname Hints-class #' @usage NULL +#' @export setMethod( "horder<-", signature(object = "Hints", value = "ANY"), @@ -1057,6 +1153,7 @@ setMethod( #' Wrapper of `horder(hints(x)) <- value` #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "horder<-", signature(object = "Pedigree", value = "ANY"), @@ -1077,6 +1174,7 @@ setMethod( #' @rdname Hints-class #' @usage NULL +#' @export setGeneric("spouse", function(object) { standardGeneric("spouse") }) @@ -1085,6 +1183,7 @@ setGeneric("spouse", function(object) { #' - `spouse(x)` : Get the spouse data.frame #' @rdname Hints-class #' @usage NULL +#' @export setMethod("spouse", signature(object = "Hints"), function(object) { object@spouse }) @@ -1094,12 +1193,14 @@ setMethod("spouse", signature(object = "Hints"), function(object) { #' Wrapper of `spouse(hints(x))`. #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod("spouse", signature(object = "Pedigree"), function(object) { spouse(hints(object)) }) #' @rdname Pedigree-class #' @usage NULL +#' @export setGeneric("spouse<-", function(object, value) { standardGeneric("spouse<-") }) @@ -1108,6 +1209,7 @@ setGeneric("spouse<-", function(object, value) { #' - `spouse(x) <- value` : Set the spouse data.frame #' @rdname Hints-class #' @usage NULL +#' @export setMethod( "spouse<-", signature(object = "Hints", value = "data.frame"), @@ -1125,6 +1227,7 @@ setMethod( #' Wrapper of `spouse(hints(x)) <- value`. #' @rdname Pedigree-class #' @usage NULL +#' @export setMethod( "spouse<-", signature(object = "Pedigree", value = "data.frame"), diff --git a/R/AllConstructor.R b/R/AllConstructor.R index f5008d75..ce60d557 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -86,6 +86,7 @@ setGeneric("Ped", signature = "obj", function(obj, ...) { #' #' data(sampleped) #' Ped(sampleped) +#' @export setMethod("Ped", "data.frame", function(obj, cols_used_init = FALSE, cols_used_del = FALSE) { col_need <- c("id", "sex", "dadid", "momid") @@ -133,6 +134,7 @@ setMethod("Ped", "data.frame", #' sex = c(1, 2, 3, 1, 2, 1), #' missid = "0" #' ) +#' @export setMethod("Ped", "character_OR_integer", function( obj, sex, dadid, momid, famid = NA, @@ -174,10 +176,8 @@ setMethod("Ped", "character_OR_integer", ) #' @rdname Ped-class -#' @examples -#' -#' Ped() #' @usage NULL +#' @export setMethod("Ped", "missing", function(obj) { new("Ped") @@ -313,6 +313,7 @@ setGeneric("Hints", function(horder, spouse) { #' @rdname Hints-class #' @usage NULL +#' @export setMethod("Hints", signature(horder = "Hints", spouse = "missing_OR_NULL"), function(horder, spouse) { @@ -568,6 +569,7 @@ setMethod("Scales", #' the data.frame with the errors of the Ped object and the #' Rel object. #' +#' @details #' If the normalization is set to `TRUE`, then the data will be #' standardized using the function `norm_ped()` and `norm_rel()`. #' diff --git a/R/AllGeneric.R b/R/AllGeneric.R index b5cf5f0f..1d8c3bd1 100644 --- a/R/AllGeneric.R +++ b/R/AllGeneric.R @@ -26,6 +26,7 @@ setMethod("summary", "Ped", #' and print it with its summary. #' @export #' @importFrom S4Vectors cbind_mcols_for_display +#' @importFrom methods show #' @importFrom S4Vectors makeClassinfoRowForCompactPrinting #' @rdname Ped-class #' @usage NULL @@ -49,6 +50,7 @@ setMethod("show", "Ped", #' - `as.list(x)`: Convert a Ped object to a list with #' the metadata columns at the end. #' @rdname Ped-class +#' @importFrom methods slotNames #' @importFrom S4Vectors as.list #' @export #' @usage NULL @@ -71,6 +73,7 @@ setMethod("as.list", "Ped", function(x) { #' @rdname Ped-class #' @importFrom S4Vectors as.data.frame #' @export +#' @usage NULL setMethod("as.data.frame", "Ped", function(x) { lst <- as.list(x) if (length(unique(lapply(lst, length))) != 1) { @@ -154,6 +157,7 @@ setMethod("summary", "Rel", #' @export #' @importFrom S4Vectors cbind_mcols_for_display #' @importFrom S4Vectors makeClassinfoRowForCompactPrinting +#' @importFrom methods show #' @rdname Rel-class #' @usage NULL setMethod("show", signature(object = "Rel"), @@ -320,6 +324,7 @@ setMethod("length", c(x = "Pedigree"), #' - `show(x)`: Print the information of the Ped and Rel #' object inside the Pedigree object. #' @export +#' @importFrom methods show #' @rdname Pedigree-class #' @usage NULL setMethod("show", signature(object = "Pedigree"), function(object) { @@ -394,4 +399,4 @@ setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), function(x, i, j, del_parents = FALSE, keep = TRUE, drop = TRUE) { subset(x, i, del_parents, keep) } -) \ No newline at end of file +) diff --git a/R/AllValidity.R b/R/AllValidity.R index 25d4c251..ce6b27fe 100644 --- a/R/AllValidity.R +++ b/R/AllValidity.R @@ -89,11 +89,16 @@ check_values <- function(val, ref, name = NULL, present = TRUE) { } } -#' Check if the Hints are valid +#' Check if a Hints object is valid #' -#' Check if horder and spouse slots are valid (i.e. horder is numeric and -#' spouse is a matrix with 3 columns). -#' Check if the spouse matrix is valid (i.e. only numeric values). +#' Check if horder and spouse slots are valid: +#' - horder is named numeric vector +#' - spouse is a data.frame +#' - Has the three `idr`, `idl`, `anchor` columns +#' - `idr` and `idl` are different and doesn't contains `NA` +#' - `idr` and `idl` couple are unique +#' - `anchor` column only have `right`, `left`, `either` values +#' - all ids in spouse needs to be in the names of the horder vector #' @param object A Hints object. #' #' @return A character vector with the errors or `TRUE` if no errors. @@ -169,13 +174,28 @@ is_valid_hints <- function(object) { } } - return(errors) + if (length(errors) == 0) { + TRUE + } else { + errors + } } -#' Check if the Scales are valid +#' Check if a Scales object is valid #' -#' Check if the fill and border slots are valid (i.e. they have the right -#' columns). +#' Check if the fill and border slots are valid: +#' - fill slot is a data.frame with "order", "column_values", +#' "column_mods", "mods", "labels", "affected", "fill", +#' "density", "angle" columns. +#' - "affected" is logical. +#' - "density", "angle", "order", "mods" are numeric. +#' - "column_values", "column_mods", "labels", "fill" are +#' character. +#' - border slot is a data.frame with "column_values", +#' "column_mods", "mods", "labels", "border" columns. +#' - "column_values", "column_mods", "labels", "border" are +#' character. +#' - "mods" is numeric. #' #' @param object A Scales object. #' @@ -200,7 +220,7 @@ is_valid_scales <- function(object) { #### Check that the fill columns have the right values #### ## Check for logical columns col_log <- c("affected") - err_log <- col_log[!unlist(lapply(object@fill[col_log], is, "logical"))] + err_log <- col_log[!unlist(lapply(object@fill[col_log], is.logical))] if (length(err_log) > 0) { errors <- c(errors, paste("Fill slot ", paste(err_log, collapse = ", "), @@ -210,7 +230,7 @@ is_valid_scales <- function(object) { ## Check for numeric columns col_num <- c("density", "angle", "order", "mods") - err_num <- col_num[!unlist(lapply(object@fill[col_num], is, "numeric"))] + err_num <- col_num[!unlist(lapply(object@fill[col_num], is.numeric))] if (length(err_num) > 0) { errors <- c(errors, paste("Fill slot ", paste(err_num, collapse = ", "), @@ -223,7 +243,7 @@ is_valid_scales <- function(object) { "column_values", "column_mods", "labels", "fill" ) err_char <- col_char[!unlist(lapply( - object@fill[col_char], is, "character" + object@fill[col_char], is.character ))] if (length(err_char) > 0) { errors <- c(errors, paste("Fill slot ", @@ -236,7 +256,7 @@ is_valid_scales <- function(object) { ## Check for character columns col_char <- c("column_values", "column_mods", "labels", "border") err_char <- col_char[!unlist(lapply( - object@border[col_char], is, "character" + object@border[col_char], is.character ))] if (length(err_char) > 0) { errors <- c(errors, paste("Border slot ", @@ -248,7 +268,7 @@ is_valid_scales <- function(object) { ## Check for numeric columns col_num <- c("mods") err_num <- col_num[!unlist(lapply( - object@border[col_num], is, "numeric" + object@border[col_num], is.numeric ))] if (length(err_num) > 0) { errors <- c(errors, paste("Border slot ", @@ -262,11 +282,9 @@ is_valid_scales <- function(object) { } else { errors } - - return(errors) } -#' Check if the Ped is valid +#' Check if a Ped object is valid #' #' Multiple checks are done here #' @@ -350,6 +368,22 @@ is_valid_ped <- function(object) { return(errors) } +#' Check if a Rel object is valid +#' +#' Multiple checks are done here +#' +#' 1. Check that the "id1", "id2", "code", "famid" slots exist +#' 2. Check that the "code" slots have the right values +#' (i.e. "MZ twin", "DZ twin", "UZ twin", "Spouse") +#' 3. Check that all "id1" are different to "id2" +#' 4. Check that all "id1" are smaller than "id2" +#' 5. Check that no duplicate relation are present +#' +#' @param object A Ped object. +#' +#' @return A character vector with the errors or `TRUE` if no errors. +#' +#' @keywords internal is_valid_rel <- function(object) { errors <- c() @@ -398,14 +432,29 @@ is_valid_rel <- function(object) { } else { errors } - return(errors) } +#' Check if a Pedigree object is valid +#' +#' Multiple checks are done here +#' +#' 1. Check that the all Rel id are in the Ped object +#' 2. Check that twins have same parents +#' 3. Check that MZ twins have same sex +#' 4. Check that all columns used in scales are in the Ped object +#' 5. Check that all fill & border modalities are in the Ped object column +#' 6. Check that all id used in Hints object are in the Ped object +#' 7. Check that all spouse in Hints object are male / female +#' +#' @param object A Ped object. +#' +#' @return A character vector with the errors or `TRUE` if no errors. +#' +#' @keywords internal is_valid_pedigree <- function(object) { errors <- c() - #### Check that the famid id and individual id present in the rel slot #### - #### are present in the ped slot #### + #### Check Rel Id in Ped Id #### errors <- c(errors, check_values( object@rel@famid, c(object@ped@famid, NA), "Rel famid" )) @@ -481,16 +530,27 @@ is_valid_pedigree <- function(object) { "Length for horder component should be equal to Pedigree length" ) } + idh <- names(horder(object)) + idh_abs <- idh[!idh %in% id(ped(object))] + if (length(idh_abs) > 0) { + errors <- c(errors, + paste( + "Hints horder id", + paste(idh_abs, sep = ","), + "not present in the Ped object" + ) + ) + } idl <- spouse(object)$idl idr <- spouse(object)$idr ## Check for presence of spouses in Ped object - idabs <- c(idl, idr)[!c(idl, idr) %in% id(ped(object))] - if (length(idabs) > 0) { + ids_abs <- c(idl, idr)[!c(idl, idr) %in% id(ped(object))] + if (length(ids_abs) > 0) { errors <- c(errors, paste( "Hints spouse(s)", - paste(idabs, sep = ","), + paste(ids_abs, sep = ","), "not present in the Ped object" )) } @@ -507,11 +567,11 @@ is_valid_pedigree <- function(object) { "not female, male" )) } + + #### Errors #### if (length(errors) == 0) { TRUE } else { errors } - - return(errors) } \ No newline at end of file diff --git a/R/align.R b/R/align.R index e9bcec12..eb2e4ac6 100644 --- a/R/align.R +++ b/R/align.R @@ -114,6 +114,7 @@ ancestors <- function(idx, momx, dadx) { #' @include alignped3.R #' @include alignped4.R #' @rdname align +#' @usage NULL setGeneric("align", signature = "obj", function(obj, ...) standardGeneric("align") ) diff --git a/R/alignped1.R b/R/alignped1.R index bf290da2..fe50703d 100644 --- a/R/alignped1.R +++ b/R/alignped1.R @@ -85,7 +85,6 @@ #' #' @seealso [align()] #' @keywords internal, alignment -#' @export alignped1 <- function(idx, dadx, momx, level, horder, packed, spouselist) { # Set a few constants maxlev <- max(level) diff --git a/R/alignped2.R b/R/alignped2.R index acc2628e..afb45533 100644 --- a/R/alignped2.R +++ b/R/alignped2.R @@ -44,7 +44,6 @@ #' #' @seealso [align()] #' @keywords internal, alignment -#' @export alignped2 <- function(idx, dadx, momx, level, horder, packed, spouselist) { idx <- idx[order(horder[idx])] # Use the hints to order the sibs rval <- alignped1(idx[1], dadx, momx, level, horder, packed, spouselist) diff --git a/R/alignped3.R b/R/alignped3.R index 3db9df3d..738907a5 100644 --- a/R/alignped3.R +++ b/R/alignped3.R @@ -52,7 +52,6 @@ #' #' @seealso [align()] #' @keywords internal, alignment -#' @export alignped3 <- function(alt1, alt2, packed, space = 1) { maxcol <- max(alt1$n + alt2$n) maxlev <- length(alt1$n) diff --git a/R/alignped4.R b/R/alignped4.R index 8873a229..5b6e1166 100644 --- a/R/alignped4.R +++ b/R/alignped4.R @@ -78,7 +78,6 @@ NULL #' #' @seealso [align()] #' @keywords internal, alignment -#' @export alignped4 <- function(rval, spouse, level, width, align) { ## Doc: alignped4 -part1, spacing across page if (is.logical(align)) diff --git a/R/auto_hint.R b/R/auto_hint.R index dc47b31f..cd144066 100644 --- a/R/auto_hint.R +++ b/R/auto_hint.R @@ -290,6 +290,7 @@ get_twin_rel <- function(obj) { #' auto_hint(ped) #' @export #' @keywords internal, alignment, auto_hint +#' @usage NULL setGeneric("auto_hint", signature = "obj", function(obj, ...) standardGeneric("auto_hint") ) diff --git a/R/best_hint.R b/R/best_hint.R index e33b26e2..15368c8c 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -83,6 +83,7 @@ permute <- function(x) { #' @include auto_hint.R #' @include align.R #' @keywords alignment, auto_hint +#' @usage NULL setGeneric( "best_hint", signature = "obj", function(obj, ...) { diff --git a/R/bit_size.R b/R/bit_size.R index 14b279f5..c30a70b8 100644 --- a/R/bit_size.R +++ b/R/bit_size.R @@ -32,6 +32,7 @@ #' bit_size(ped) #' @export #' @keywords internal, shrink +#' @usage NULL setGeneric("bit_size", signature = "obj", function(obj, ...) standardGeneric("bit_size") ) diff --git a/R/descendants.R b/R/descendants.R index e1f7ab63..24a4fe57 100644 --- a/R/descendants.R +++ b/R/descendants.R @@ -1,4 +1,4 @@ -#' Find all descendants of list of individuals +#' Descendants of individuals #' #' @description #' Find all the descendants of a particular list of individuals @@ -20,6 +20,7 @@ #' @include AllClass.R #' @export #' @keywords internal +#' @usage NULL setGeneric("descendants", function(idlist, obj, ...) standardGeneric("descendants") ) diff --git a/R/family_check.R b/R/family_check.R index 7cc54108..91afe72e 100644 --- a/R/family_check.R +++ b/R/family_check.R @@ -56,11 +56,13 @@ #' @include AllClass.R #' @keywords internal #' @export +#' @usage NULL setGeneric("family_check", signature = "obj", function(obj, ...) standardGeneric("family_check") ) #' @rdname family_check +#' @export setMethod("family_check", "character_OR_integer", function(obj, dadid, momid, famid, newfam) { id <- obj @@ -105,6 +107,7 @@ setMethod("family_check", "character_OR_integer", ) #' @rdname family_check +#' @export setMethod("family_check", "Pedigree", function(obj) { family_check(ped(obj)) @@ -112,6 +115,7 @@ setMethod("family_check", "Pedigree", ) #' @rdname family_check +#' @export setMethod("family_check", "Ped", function(obj) { family_check(id(obj), dadid(obj), momid(obj), famid(obj)) diff --git a/R/find_avail_affected.R b/R/find_avail_affected.R index 6870498f..abe0d5ee 100644 --- a/R/find_avail_affected.R +++ b/R/find_avail_affected.R @@ -33,11 +33,13 @@ #' @include find_unavailable.R #' @keywords internal, shrink #' @export +#' @usage NULL setGeneric("find_avail_affected", signature = "obj", function(obj, ...) standardGeneric("find_avail_affected") ) #' @rdname find_avail_affected +#' @export setMethod("find_avail_affected", "Ped", function(obj, avail = NULL, affected = NULL, affstatus = NA) { if (is.null(avail)) { @@ -103,6 +105,7 @@ setMethod("find_avail_affected", "Ped", ) #' @rdname find_avail_affected +#' @export setMethod("find_avail_affected", "Pedigree", function(obj, ...) { find_avail_affected(ped(obj), ...) diff --git a/R/find_avail_noninform.R b/R/find_avail_noninform.R index 6a2f675c..e09a2930 100644 --- a/R/find_avail_noninform.R +++ b/R/find_avail_noninform.R @@ -24,11 +24,13 @@ #' @seealso [shrink()] #' @keywords internal, shrink #' @export +#' @usage NULL setGeneric("find_avail_noninform", signature = "obj", function(obj, ...) standardGeneric("find_avail_noninform") ) #' @rdname find_avail_noninform +#' @export setMethod("find_avail_noninform", "Ped", function(obj, avail = NULL, affected = NULL) { if (is.null(avail)) { @@ -61,6 +63,7 @@ setMethod("find_avail_noninform", "Ped", ) #' @rdname find_avail_noninform +#' @export setMethod("find_avail_noninform", "Pedigree", function(obj, ...) { find_avail_noninform(ped(obj), ...) diff --git a/R/find_unavailable.R b/R/find_unavailable.R index 30565cf5..0eac25e9 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -40,11 +40,13 @@ #' @keywords internal, shrink #' @include utils.R #' @export +#' @usage NULL setGeneric("find_unavailable", signature = "obj", function(obj, ...) standardGeneric("find_unavailable") ) #' @rdname find_unavailable +#' @export setMethod("find_unavailable", "Pedigree", function(obj, ...) { find_unavailable(ped(obj), ...) @@ -52,6 +54,7 @@ setMethod("find_unavailable", "Pedigree", ) #' @rdname find_unavailable +#' @export setMethod("find_unavailable", "Ped", function(obj, avail = NULL) { if (is.null(avail)) { diff --git a/R/fix_parents.R b/R/fix_parents.R index 0e0a4bd6..d2bf0050 100644 --- a/R/fix_parents.R +++ b/R/fix_parents.R @@ -53,11 +53,13 @@ NULL #' #' @author Jason Sinnwell #' @export +#' @usage NULL setGeneric("fix_parents", signature = "obj", function(obj, ...) standardGeneric("fix_parents") ) #' @rdname fix_parents +#' @export setMethod("fix_parents", "character", function( obj, dadid, momid, sex, famid = NULL, missid = NA_character_ ) { @@ -179,6 +181,7 @@ setMethod("fix_parents", "character", function( #' @param filter Filtering column containing `0` or `1` for the #' rows to kept before proceeding. #' @rdname fix_parents +#' @export setMethod("fix_parents", "data.frame", function( obj, delete = FALSE, filter = NULL, missid = NA_character_ ) { diff --git a/R/generate_colors.R b/R/generate_colors.R index e0fc4a27..2c8d529b 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -238,17 +238,20 @@ generate_border <- function(values, colors_avail = c("green", "black")) { #' #' @keywords generate_scales #' @export +#' @usage NULL setGeneric("generate_colors", signature = "obj", function(obj, ...) standardGeneric("generate_colors") ) #' @rdname generate_colors #' @examples +#' #' generate_colors( #' c("A", "B", "A", "B", NA, "A", "B", "A", "B", NA), #' c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), #' mods_aff = "A", #' ) +#' @export setMethod("generate_colors", "character", function( obj, avail, @@ -277,11 +280,13 @@ setMethod("generate_colors", "character", #' @rdname generate_colors #' @examples +#' #' generate_colors( #' c(10, 0, 5, 7, NA, 6, 2, 1, 3, NA), #' c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), #' threshold = 3, keep_full_scale = TRUE #' ) +#' @export setMethod("generate_colors", "numeric", function( obj, avail, threshold = 0.5, sup_thres_aff = TRUE, @@ -322,6 +327,7 @@ setMethod("generate_colors", "numeric", #' scales(ped) #' @rdname generate_colors #' @include AllClass.R +#' @export setMethod("generate_colors", "Pedigree", function(obj, col_aff = "affected", add_to_scale = TRUE, diff --git a/R/ibd_matrix.R b/R/ibd_matrix.R index 53082951..7166ae47 100644 --- a/R/ibd_matrix.R +++ b/R/ibd_matrix.R @@ -2,7 +2,7 @@ #' @importFrom Matrix sparseMatrix NULL -#' Create an IBD matrix +#' IBD matrix #' #' @description #' Transform identity by descent (IBD) matrix data from the form produced by @@ -135,4 +135,3 @@ ibd_matrix <- function(id1, id2, ibd, idmap, diagonal) { dimnames = list(dimid, dimid) ) } -TRUE diff --git a/R/is_informative.R b/R/is_informative.R index 7b0a20d3..aa7e31f6 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -30,19 +30,18 @@ #' A vector of individuals informative identifiers. #' #' ## When obj is a Pedigree -#' A list containing the Pedigree object and the vector of individuals -#' identifiers. -#' The Pedigree object will have a new column named 'id_inf' containing 1 for -#' informative individuals and 0 otherwise. +#' The Pedigree object with its `isinf` slot updated. #' #' @export #' @docType methods +#' @usage NULL setGeneric("is_informative", signature = "obj", function(obj, ...) standardGeneric("is_informative") ) #' @rdname is_informative #' @examples +#' #' is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) #' is_informative(c("A", "B", "C", "D", "E"), informative = c(1, 2)) #' is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) @@ -52,6 +51,7 @@ setGeneric("is_informative", signature = "obj", #' affected = c(0, 1, 0, 1, 1), informative = "AvOrAf") #' is_informative(c("A", "B", "C", "D", "E"), #' informative = c(TRUE, FALSE, TRUE, FALSE, TRUE)) +#' @export setMethod("is_informative", "character_OR_integer", function( obj, avail, affected, informative = "AvAf" ) { @@ -105,10 +105,12 @@ setMethod("is_informative", "character_OR_integer", function( #' @rdname is_informative #' @param reset If `TRUE`, the `isinf` slot is reset #' @examples +#' #' data("sampleped") #' ped <- Pedigree(sampleped) #' ped <- is_informative(ped, col_aff = "affection_mods") #' isinf(ped(ped)) +#' @export setMethod("is_informative", "Pedigree", function( obj, col_aff = NULL, informative = "AvAf", reset = FALSE ) { diff --git a/R/kindepth.R b/R/kindepth.R index a7a7d883..636d7334 100644 --- a/R/kindepth.R +++ b/R/kindepth.R @@ -1,4 +1,3 @@ -#' Chase up the ancestors of a subject #' Individual's depth in a pedigree #' #' @description @@ -17,12 +16,12 @@ #' @param align_parents If `align_parents = TRUE`, go one step further #' and try to make both parents of each child have the same depth. #' (This is not always possible). -#' It helps the drawing program by lining up pedigrees that 'join in the middle' -#' via a marriage. +#' It helps the drawing program by lining up pedigrees that +#' 'join in the middle' via a marriage. #' #' @return An integer vector containing the depth for each subject #' -#' @author Terry Therneau +#' @author Terry Therneau, updated by Louis Le Nézet #' @seealso [align()] #' @include AllClass.R #' @export diff --git a/R/kinship.R b/R/kinship.R index 563282cb..4a710b9f 100644 --- a/R/kinship.R +++ b/R/kinship.R @@ -57,11 +57,13 @@ NULL #' @include AllClass.R #' @include utils.R #' @export +#' @usage NULL setGeneric("kinship", signature = "obj", function(obj, ...) standardGeneric("kinship") ) #' @rdname kinship +#' @export setMethod("kinship", "Ped", function(obj, chrtype = "autosome"){ kinship( @@ -73,12 +75,14 @@ setMethod("kinship", "Ped", #' @rdname kinship #' @examples +#' #' kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), #' c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1)) #' kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), #' c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1), #' chrtype = "x" #' ) +#' @export setMethod("kinship", "character", function(obj, dadid, momid, sex, chrtype = "autosome") { id <- obj @@ -143,9 +147,11 @@ setMethod("kinship", "character", #' @include kindepth.R #' @rdname kinship #' @examples +#' #' data(sampleped) #' ped <- Pedigree(sampleped) #' kinship(ped) +#' @export setMethod("kinship", "Pedigree", function(obj, chrtype = "autosome") { famlist <- unique(famid(obj)) diff --git a/R/make_famid.R b/R/make_famid.R index 3b604ec8..384d1588 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -1,4 +1,4 @@ -#' Update family id +#' Compute family id #' #' @description #' Construct a family identifier from pedigree information @@ -17,15 +17,18 @@ #' #' ## When used with a Pedigree object #' An updated Pedigree object with the family id added +#' and with all ids updated #' #' @seealso [kinship()] #' @export +#' @usage NULL setGeneric("make_famid", signature = "obj", function(obj, ...) standardGeneric("make_famid") ) #' @rdname make_famid #' @examples +#' #' make_famid( #' c("A", "B", "C", "D", "E", "F"), #' c("C", "D", "0", "0", "0", "0"), @@ -92,6 +95,7 @@ setMethod("make_famid", "character", #' @rdname make_famid #' @examples +#' #' data(sampleped) #' ped1 <- Pedigree(sampleped[,-1]) #' make_famid(ped1) @@ -135,14 +139,17 @@ setMethod("make_famid", "Pedigree", #' updated #' #' @export +#' @usage NULL setGeneric("upd_famid_id", function(obj, famid, ...) standardGeneric("upd_famid_id") ) #' @rdname upd_famid_id #' @examples +#' #' upd_famid_id(c("1", "2", "B_3"), c("A", "B", "A")) #' upd_famid_id(c("1", "B_2", "C_3", "4"), c("A", NA, "A", NA)) +#' @export setMethod("upd_famid_id", "character", function(obj, famid, missid = NA_character_) { if (length(obj) != length(famid)) { @@ -167,6 +174,7 @@ setMethod("upd_famid_id", "character", ) #' @rdname upd_famid_id +#' @export setMethod("upd_famid_id", signature(obj = "Ped", famid = "character_OR_integer"), function(obj, famid) { @@ -214,6 +222,7 @@ setMethod("upd_famid_id", #' @rdname upd_famid_id #' @examples +#' #' data(sampleped) #' ped1 <- Pedigree(sampleped[,-1]) #' id(ped(ped1)) @@ -239,6 +248,7 @@ setMethod("upd_famid_id", #' @rdname upd_famid_id #' @examples +#' #' data(sampleped) #' ped1 <- Pedigree(sampleped[,-1]) #' make_famid(ped1) diff --git a/R/min_dist_inf.R b/R/min_dist_inf.R index 1cc4236b..be8f36db 100644 --- a/R/min_dist_inf.R +++ b/R/min_dist_inf.R @@ -37,14 +37,15 @@ NULL #' @seealso [kinship()] #' @include is_informative.R #' @include kinship.R -#' @docType methods #' @export +#' @usage NULL setGeneric("min_dist_inf", signature = "obj", function(obj, ...) standardGeneric("min_dist_inf") ) #' @rdname min_dist_inf #' @examples +#' #' min_dist_inf( #' c("A", "B", "C", "D", "E"), #' c("C", "D", "0", "0", "0"), @@ -54,6 +55,7 @@ setGeneric("min_dist_inf", signature = "obj", #' affected = c(0, 1, 0, 1, 1), #' informative = "AvAf" #' ) +#' @export setMethod("min_dist_inf", "character", function(obj, dadid, momid, sex, id_inf ) { @@ -75,11 +77,12 @@ setMethod("min_dist_inf", "character", function(obj, }) #' @rdname min_dist_inf -#' @param reset If TRUE, the `kin` and if `isinf` columns is reset #' @examples +#' #' data(sampleped) #' ped <- Pedigree(sampleped) #' kin(ped(min_dist_inf(ped, col_aff = "affection_mods"))) +#' @export setMethod("min_dist_inf", "Pedigree", function(obj, col_aff = NULL, informative = "AvAf", reset = FALSE, ... ) { @@ -99,6 +102,7 @@ setMethod("min_dist_inf", "Pedigree", function(obj, #' @rdname min_dist_inf #' @param reset If TRUE, the `kin` and if `isinf` columns is reset +#' @export setMethod("min_dist_inf", "Ped", function( obj, informative = "AvAf", reset = FALSE ) { diff --git a/R/num_child.R b/R/num_child.R index 502b70a3..ad60b575 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -27,12 +27,14 @@ NULL #' Pedigree `ped` slot. #' @include AllClass.R #' @export +#' @usage NULL setGeneric("num_child", signature = "obj", function(obj, ...) standardGeneric("num_child") ) #' @rdname num_child #' @examples +#' #' num_child( #' obj = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), #' dadid = c("3", "3", "6", "8", "0", "0", "0", "0", "0", "0"), @@ -43,6 +45,7 @@ setGeneric("num_child", signature = "obj", #' code = "Spouse" #' ) #' ) +#' @export setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, rel_df = NULL, missid = NA_character_ ) { @@ -150,10 +153,12 @@ setMethod("num_child", "character_OR_integer", function(obj, dadid, momid, #' @param reset If TRUE, the `num_child_tot`, `num_child_ind` and #' the `num_child_dir` columns are reset. #' @examples +#' #' data(sampleped) #' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' ped1 <- num_child(ped1, reset = TRUE) #' summary(ped(ped1)) +#' @export setMethod("num_child", "Pedigree", function(obj, reset = FALSE) { df <- num_child(id(ped(obj)), dadid(ped(obj)), momid(ped(obj)), rel_df = as.data.frame(rel(obj)) diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index 7f888a31..b681e74f 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -38,6 +38,7 @@ #' plot_fromdf(leg_df$df, usr = c(-1,15,0,7)) #' @keywords internal, Pedigree-plot #' @export +#' @usage NULL setGeneric( "ped_to_legdf", signature = "obj", function(obj, ...) { @@ -46,6 +47,7 @@ setGeneric( ) #' @rdname ped_to_legdf +#' @export setMethod("ped_to_legdf", "Pedigree", function(obj, boxh = 1, boxw = 1, cex = 1, adjx = 0, adjy = 0 diff --git a/R/ped_to_plotdf.R b/R/ped_to_plotdf.R index 5f1cffd1..6da6e4ed 100644 --- a/R/ped_to_plotdf.R +++ b/R/ped_to_plotdf.R @@ -41,6 +41,7 @@ NULL #' @return A list containing the data frame and the user coordinates. #' #' @examples +#' #' data(sampleped) #' ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) #' plot_df <- ped_to_plotdf(ped1) @@ -54,6 +55,7 @@ NULL #' [ped_to_legdf()] #' @keywords internal, Pedigree-plot #' @export +#' @usage NULL setGeneric( "ped_to_plotdf", signature = "obj", function(obj, ...) { @@ -62,6 +64,7 @@ setGeneric( ) #' @rdname ped_to_plotdf +#' @export setMethod("ped_to_plotdf", "Pedigree", function( obj, packed = TRUE, width = 6, align = c(1.5, 2), subreg = NULL, cex = 1, symbolsize = cex, pconnect = 0.5, branch = 0.6, diff --git a/R/plot_fct.R b/R/plot_fct.R index 04284535..0cd17001 100644 --- a/R/plot_fct.R +++ b/R/plot_fct.R @@ -104,7 +104,7 @@ circfun <- function(nslice, n = 50) { #' with a given number of slices and a list of coordinates #' for the polygon. #' -#' @param nslice number of slices in the polygon +#' @param nslice Number of slices in the polygon #' @param coor Element form which to generate the polygon #' containing x and y coordinates and theta #' @@ -164,7 +164,7 @@ polyfun <- function(nslice, coor) { #' and theta for the square, circle, diamond and triangle. #' The number of slices in each element can be specified. #' -#' @param nslice number of slices in each element +#' @param nslice Number of slices in each element #' If nslice > 1, the elements are created with [polyfun()]. #' #' @return a list of polygonal elements with x, y coordinates @@ -221,19 +221,20 @@ polygons <- function(nslice = 1) { #'@importFrom ggplot2 geom_polygon aes annotate NULL -#' Draw segments for a Pedigree +#' Draw segments #' #' @param x0 x coordinate of the first point #' @param y0 y coordinate of the first point #' @param x1 x coordinate of the second point #' @param y1 y coordinate of the second point #' @param p ggplot object -#' @param ggplot_gen logical, if TRUE add the segments to the ggplot object -#' @param col line color -#' @param lwd line width -#' @param lty line type +#' @param ggplot_gen If TRUE add the segments to the ggplot object +#' @param col Line color +#' @param lwd Line width +#' @param lty Line type #' -#' @return Plot the segments or add it to a ggplot object +#' @return Plot the segments to the current device +#' or add it to a ggplot object #' @keywords internal, Pedigree-plot draw_segment <- function( x0, y0, x1, y1, @@ -249,42 +250,50 @@ draw_segment <- function( p } -#' Draw a polygon for a Pedigree +#' Draw a polygon #' #' @param x x coordinates #' @param y y coordinates -#' @param fill fill color -#' @param border border color -#' @param density density of shading -#' @param angle angle of shading +#' @param fill Fill color +#' @param border Border color +#' @param density Density of shading +#' @param angle Angle of shading #' @inheritParams draw_segment #' -#' @return Plot the polygon or add it to a ggplot object +#' @return Plot the polygon to the current device +#' or add it to a ggplot object #' @keywords internal, Pedigree-plot draw_polygon <- function( x, y, p, ggplot_gen = FALSE, fill = "grey", border = NULL, density = NULL, angle = 45 ) { - polygon(x, y, col = fill, border = border, density = density, angle = angle) + polygon( + x, y, col = fill, border = border, + density = density, angle = angle + ) if (ggplot_gen) { - p <- p + geom_polygon(aes(x = x, y = y), fill = fill, color = border) + p <- p + + geom_polygon( + aes(x = x, y = y), fill = fill, color = border + ) # To add pattern stripes use ggpattern::geom_polygon_pattern # pattern_density = density[i], pattern_angle = angle[i])) } p } -#' Draw texts for a Pedigree +#' Draw texts #' -#' @param label text to be displayed -#' @param cex character expansion of the text -#' @param col text color +#' @param label Text to be displayed +#' @param cex Character expansion of the text +#' @param col Text color #' @param adjx x adjustment #' @param adjy y adjustment #' @inheritParams draw_segment #' @inheritParams draw_polygon #' -#' @return Plot the text or add it to a ggplot object +#' @return Plot the text to the current device +#' or add it to a ggplot object #' @keywords internal, Pedigree-plot draw_text <- function(x, y, label, p, ggplot_gen = FALSE, cex = 1, col = NULL, adjx = 0, adjy = 0 @@ -292,17 +301,19 @@ draw_text <- function(x, y, label, p, ggplot_gen = FALSE, text(x, y, label, cex = cex, col = col, adj = c(adjx, adjy)) if (ggplot_gen) { p <- p + annotate( - "text", x = x, y = y, label = label, size = cex / 0.3, color = col + "text", x = x, y = y, label = label, + size = cex / 0.3, color = col ) } p } -#' Draw arcs for multiple instances of a subject +#' Draw arcs #' #' @inheritParams draw_segment #' -#' @return Plot the arcs or add it to a ggplot object +#' @return Plot the arcs to the current device +#' or add it to a ggplot object #' @keywords internal, Pedigree-plot draw_arc <- function(x0, y0, x1, y1, p, ggplot_gen = FALSE, lwd = 1, col = "black" @@ -318,14 +329,14 @@ draw_arc <- function(x0, y0, x1, y1, p, ggplot_gen = FALSE, lwd = 1, #' Set plotting area #' -#' @param cex character expansion of the text -#' @param maxlev maximum level -#' @param xrange range of x values -#' @param symbolsize size of the symbols -#' @param ... other arguments passed to [par()] +#' @param cex Character expansion of the text +#' @param maxlev Maximum level +#' @param xrange Range of x values +#' @param symbolsize Size of the symbols +#' @param ... Other arguments passed to [par()] #' @inheritParams is_parent #' -#' @return a list of user coordinates, old par, box width, box height, +#' @return List of user coordinates, old par, box width, box height, #' label height and leg height #' #' @keywords internal, Pedigree-plot diff --git a/R/shrink.R b/R/shrink.R index 3f33a982..d556474e 100644 --- a/R/shrink.R +++ b/R/shrink.R @@ -48,11 +48,13 @@ #' @keywords shrink #' @seealso [Pedigree()], [bit_size()] #' @export +#' @usage NULL setGeneric("shrink", signature = "obj", function(obj, ...) standardGeneric("shrink") ) #' @rdname shrink +#' @export setMethod("shrink", "Pedigree", function(obj, avail = NULL, affected = NULL, max_bits = 16) { lst_trim <- shrink(ped(obj), @@ -69,6 +71,7 @@ setMethod("shrink", "Pedigree", ) #' @rdname shrink +#' @export setMethod("shrink", "Ped", function(obj, avail = NULL, affected = NULL, max_bits = 16) { if (is.null(avail)) { diff --git a/R/unrelated.R b/R/unrelated.R index a481b2cd..e631bf57 100644 --- a/R/unrelated.R +++ b/R/unrelated.R @@ -29,6 +29,7 @@ NULL #' @return A vector of the ids of subjects that are unrelated. #' @examples +#' #' data(sampleped) #' fam1 <- sampleped[sampleped$famid == 1, ] #' ped1 <- Pedigree(fam1) @@ -42,11 +43,13 @@ NULL #' #' @author Dan Schaid and Shannon McDonnell updated by Jason Sinnwell #' @export +#' @usage NULL setGeneric("unrelated", signature = "obj", function(obj, ...) standardGeneric("unrelated") ) #' @rdname unrelated +#' @export setMethod("unrelated", "Ped", function(obj, avail = NULL) { if (is.null(avail)) { @@ -110,6 +113,7 @@ setMethod("unrelated", "Ped", ) #' @rdname unrelated +#' @export setMethod("unrelated", "Pedigree", function(obj, avail = NULL) { unrelated(ped(obj), avail = avail) diff --git a/R/useful_inds.R b/R/useful_inds.R index 7642a94f..c3c28e0a 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -23,12 +23,14 @@ #' useful individuals and `FALSE` otherwise. #' @keywords shrink #' @export +#' @usage NULL setGeneric("useful_inds", signature = "obj", function(obj, ...) standardGeneric("useful_inds") ) #' @include is_informative.R #' @rdname useful_inds +#' @export setMethod("useful_inds", "character", function(obj, dadid, momid, avail, affected, num_child_tot, informative = "AvAf", keep_infos = FALSE @@ -74,10 +76,12 @@ setMethod("useful_inds", "character", #' @rdname useful_inds #' @param reset Boolean to indicate if the `useful` column should be reset #' @examples +#' #' data(sampleped) #' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) #' ped1 <- num_child(ped1) #' ped(useful_inds(ped1, informative = "AvAf")) +#' @export setMethod("useful_inds", "Pedigree", function(obj, informative = "AvAf", keep_infos = FALSE, reset = FALSE ) { @@ -91,6 +95,7 @@ setMethod("useful_inds", "Pedigree", function(obj, }) #' @rdname useful_inds +#' @export setMethod("useful_inds", "Ped", function(obj, informative = "AvAf", keep_infos = FALSE, reset = FALSE ) { diff --git a/R/utils.R b/R/utils.R index bc55cb2f..b34bd878 100644 --- a/R/utils.R +++ b/R/utils.R @@ -164,13 +164,16 @@ check_num_na <- function(var, na_as_num = TRUE) { #' with TRUE if the individual is a parent and FALSE otherwise #' @inheritParams Ped #' @keywords internal +#' @usage NULL setGeneric("is_parent", signature = "obj", function(obj, ...) standardGeneric("is_parent") ) #' @rdname is_parent #' @examples +#' #' is_parent(c("1", "2", "3", "4"), c("3", "3", NA, NA), c("4", "4", NA, NA)) +#' @export setMethod("is_parent", "character_OR_integer", function(obj, dadid, momid, missid = NA_character_) { # determine subjects who are parents assume input of @@ -192,6 +195,7 @@ setMethod("is_parent", "character_OR_integer", #' data(sampleped) #' ped <- Pedigree(sampleped) #' is_parent(ped(ped)) +#' @export setMethod("is_parent", "Ped", function(obj, missid = NA_character_) { is_parent(id(obj), dadid(obj), momid(obj), missid) diff --git a/man/Ped-class.Rd b/man/Ped-class.Rd index f1b9656c..a1340352 100644 --- a/man/Ped-class.Rd +++ b/man/Ped-class.Rd @@ -75,8 +75,6 @@ affected = NA, missid = NA_character_ ) - -\S4method{as.data.frame}{Ped}(x) } \arguments{ \item{obj}{A character vector with the id of the individuals or a @@ -323,8 +321,6 @@ Ped( sex = c(1, 2, 3, 1, 2, 1), missid = "0" ) - -Ped() } \seealso{ \code{\link[=Pedigree]{Pedigree()}} diff --git a/man/Pedigree-class.Rd b/man/Pedigree-class.Rd index 9368d4a3..9e83b60d 100644 --- a/man/Pedigree-class.Rd +++ b/man/Pedigree-class.Rd @@ -191,7 +191,9 @@ different \code{data.frame} or a set of vectors. If any errors are found in the data, the function will return the data.frame with the errors of the Ped object and the Rel object. - +} +} +\details{ If the normalization is set to \code{TRUE}, then the data will be standardized using the function \code{norm_ped()} and \code{norm_rel()}. @@ -229,7 +231,6 @@ normalisation is selected. If you do not use the normalisation, the columns will be checked to be \code{0} or \code{1}. } -} \section{Slots}{ \describe{ @@ -270,7 +271,8 @@ function is a wrapper around \code{famid(ped(x))}. \itemize{ -\item \code{ped(x, slot) <- value} : Set the value of a specific slot of the Ped object +\item \code{ped(x, slot) <- value} : Set the value of a specific slot of +the Ped object Wrapper of \code{slot(ped(x)) <- value} } @@ -303,7 +305,8 @@ This function is a wrapper around \code{mcols(ped(x)) <- value}. \itemize{ -\item \code{rel(x, slot) <- value} : Set the value of a specific slot of the Rel object +\item \code{rel(x, slot) <- value} : Set the value of a specific slot of the +Rel object Wrapper of \code{slot(rel(x)) <- value} } diff --git a/man/align.Rd b/man/align.Rd index 623a94f3..c4c81594 100644 --- a/man/align.Rd +++ b/man/align.Rd @@ -6,8 +6,6 @@ \alias{align,Pedigree-method} \title{Align a Pedigree object} \usage{ -align(obj, ...) - \S4method{align}{Pedigree}( obj, packed = TRUE, diff --git a/man/auto_hint.Rd b/man/auto_hint.Rd index b3801349..3d6e7ecf 100644 --- a/man/auto_hint.Rd +++ b/man/auto_hint.Rd @@ -5,8 +5,6 @@ \alias{auto_hint,Pedigree-method} \title{Initial hint for a Pedigree alignment} \usage{ -auto_hint(obj, ...) - \S4method{auto_hint}{Pedigree}(obj, hints = NULL, packed = TRUE, align = FALSE, reset = FALSE) } \arguments{ diff --git a/man/best_hint.Rd b/man/best_hint.Rd index 6038213f..920039b5 100644 --- a/man/best_hint.Rd +++ b/man/best_hint.Rd @@ -5,8 +5,6 @@ \alias{best_hint,Pedigree-method} \title{Best hint for a Pedigree alignment} \usage{ -best_hint(obj, ...) - \S4method{best_hint}{Pedigree}(obj, wt = c(1000, 10, 1), tolerance = 0) } \arguments{ diff --git a/man/bit_size.Rd b/man/bit_size.Rd index 44276d84..4c2d1da1 100644 --- a/man/bit_size.Rd +++ b/man/bit_size.Rd @@ -7,8 +7,6 @@ \alias{bit_size,Ped-method} \title{Bit size of a Pedigree} \usage{ -bit_size(obj, ...) - \S4method{bit_size}{character_OR_integer}(obj, momid, missid = NA_character_) \S4method{bit_size}{Pedigree}(obj) diff --git a/man/descendants.Rd b/man/descendants.Rd index 8ae61323..420cbb35 100644 --- a/man/descendants.Rd +++ b/man/descendants.Rd @@ -5,10 +5,8 @@ \alias{descendants,character_OR_integer,character_OR_integer-method} \alias{descendants,character_OR_integer,Pedigree-method} \alias{descendants,character_OR_integer,Ped-method} -\title{Find all descendants of list of individuals} +\title{Descendants of individuals} \usage{ -descendants(idlist, obj, ...) - \S4method{descendants}{character_OR_integer,character_OR_integer}(idlist, obj, dadid, momid) \S4method{descendants}{character_OR_integer,Pedigree}(idlist, obj) diff --git a/man/draw_arc.Rd b/man/draw_arc.Rd index 340b73fd..328d8f0c 100644 --- a/man/draw_arc.Rd +++ b/man/draw_arc.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plot_fct.R \name{draw_arc} \alias{draw_arc} -\title{Draw arcs for multiple instances of a subject} +\title{Draw arcs} \usage{ draw_arc(x0, y0, x1, y1, p, ggplot_gen = FALSE, lwd = 1, col = "black") } @@ -17,17 +17,18 @@ draw_arc(x0, y0, x1, y1, p, ggplot_gen = FALSE, lwd = 1, col = "black") \item{p}{ggplot object} -\item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} +\item{ggplot_gen}{If TRUE add the segments to the ggplot object} -\item{lwd}{line width} +\item{lwd}{Line width} -\item{col}{line color} +\item{col}{Line color} } \value{ -Plot the arcs or add it to a ggplot object +Plot the arcs to the current device +or add it to a ggplot object } \description{ -Draw arcs for multiple instances of a subject +Draw arcs } \keyword{Pedigree-plot} \keyword{internal,} diff --git a/man/draw_polygon.Rd b/man/draw_polygon.Rd index 92c076e9..7135bc60 100644 --- a/man/draw_polygon.Rd +++ b/man/draw_polygon.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plot_fct.R \name{draw_polygon} \alias{draw_polygon} -\title{Draw a polygon for a Pedigree} +\title{Draw a polygon} \usage{ draw_polygon( x, @@ -22,21 +22,22 @@ draw_polygon( \item{p}{ggplot object} -\item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} +\item{ggplot_gen}{If TRUE add the segments to the ggplot object} -\item{fill}{fill color} +\item{fill}{Fill color} -\item{border}{border color} +\item{border}{Border color} -\item{density}{density of shading} +\item{density}{Density of shading} -\item{angle}{angle of shading} +\item{angle}{Angle of shading} } \value{ -Plot the polygon or add it to a ggplot object +Plot the polygon to the current device +or add it to a ggplot object } \description{ -Draw a polygon for a Pedigree +Draw a polygon } \keyword{Pedigree-plot} \keyword{internal,} diff --git a/man/draw_segment.Rd b/man/draw_segment.Rd index e3d46eb3..804b836a 100644 --- a/man/draw_segment.Rd +++ b/man/draw_segment.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plot_fct.R \name{draw_segment} \alias{draw_segment} -\title{Draw segments for a Pedigree} +\title{Draw segments} \usage{ draw_segment( x0, @@ -27,19 +27,20 @@ draw_segment( \item{p}{ggplot object} -\item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} +\item{ggplot_gen}{If TRUE add the segments to the ggplot object} -\item{col}{line color} +\item{col}{Line color} -\item{lwd}{line width} +\item{lwd}{Line width} -\item{lty}{line type} +\item{lty}{Line type} } \value{ -Plot the segments or add it to a ggplot object +Plot the segments to the current device +or add it to a ggplot object } \description{ -Draw segments for a Pedigree +Draw segments } \keyword{Pedigree-plot} \keyword{internal,} diff --git a/man/draw_text.Rd b/man/draw_text.Rd index a1cb1ec2..4aedd8b3 100644 --- a/man/draw_text.Rd +++ b/man/draw_text.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/plot_fct.R \name{draw_text} \alias{draw_text} -\title{Draw texts for a Pedigree} +\title{Draw texts} \usage{ draw_text( x, @@ -21,25 +21,26 @@ draw_text( \item{y}{y coordinates} -\item{label}{text to be displayed} +\item{label}{Text to be displayed} \item{p}{ggplot object} -\item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} +\item{ggplot_gen}{If TRUE add the segments to the ggplot object} -\item{cex}{character expansion of the text} +\item{cex}{Character expansion of the text} -\item{col}{text color} +\item{col}{Text color} \item{adjx}{x adjustment} \item{adjy}{y adjustment} } \value{ -Plot the text or add it to a ggplot object +Plot the text to the current device +or add it to a ggplot object } \description{ -Draw texts for a Pedigree +Draw texts } \keyword{Pedigree-plot} \keyword{internal,} diff --git a/man/family_check.Rd b/man/family_check.Rd index 4eb61167..100aaf5d 100644 --- a/man/family_check.Rd +++ b/man/family_check.Rd @@ -7,8 +7,6 @@ \alias{family_check,Ped-method} \title{Check family} \usage{ -family_check(obj, ...) - \S4method{family_check}{character_OR_integer}(obj, dadid, momid, famid, newfam) \S4method{family_check}{Pedigree}(obj) diff --git a/man/find_avail_affected.Rd b/man/find_avail_affected.Rd index 364b8302..0a564ce1 100644 --- a/man/find_avail_affected.Rd +++ b/man/find_avail_affected.Rd @@ -6,8 +6,6 @@ \alias{find_avail_affected,Pedigree-method} \title{Find single affected and available individual from a Pedigree} \usage{ -find_avail_affected(obj, ...) - \S4method{find_avail_affected}{Ped}(obj, avail = NULL, affected = NULL, affstatus = NA) \S4method{find_avail_affected}{Pedigree}(obj, ...) diff --git a/man/find_avail_noninform.Rd b/man/find_avail_noninform.Rd index 89345831..5ddae37f 100644 --- a/man/find_avail_noninform.Rd +++ b/man/find_avail_noninform.Rd @@ -6,8 +6,6 @@ \alias{find_avail_noninform,Pedigree-method} \title{Find uninformative but available subject} \usage{ -find_avail_noninform(obj, ...) - \S4method{find_avail_noninform}{Ped}(obj, avail = NULL, affected = NULL) \S4method{find_avail_noninform}{Pedigree}(obj, ...) diff --git a/man/find_unavailable.Rd b/man/find_unavailable.Rd index ed2ba27f..ab660c9e 100644 --- a/man/find_unavailable.Rd +++ b/man/find_unavailable.Rd @@ -6,8 +6,6 @@ \alias{find_unavailable,Ped-method} \title{Find unavailable subjects in a Pedigree} \usage{ -find_unavailable(obj, ...) - \S4method{find_unavailable}{Pedigree}(obj, ...) \S4method{find_unavailable}{Ped}(obj, avail = NULL) diff --git a/man/fix_parents.Rd b/man/fix_parents.Rd index 90e92215..7d26e8c7 100644 --- a/man/fix_parents.Rd +++ b/man/fix_parents.Rd @@ -6,8 +6,6 @@ \alias{fix_parents,data.frame-method} \title{Fix parents relationship and gender} \usage{ -fix_parents(obj, ...) - \S4method{fix_parents}{character}(obj, dadid, momid, sex, famid = NULL, missid = NA_character_) \S4method{fix_parents}{data.frame}(obj, delete = FALSE, filter = NULL, missid = NA_character_) diff --git a/man/generate_colors.Rd b/man/generate_colors.Rd index ad129515..d3e9ded9 100644 --- a/man/generate_colors.Rd +++ b/man/generate_colors.Rd @@ -7,8 +7,6 @@ \alias{generate_colors,Pedigree-method} \title{Process the filling and border colors based on affection and availability} \usage{ -generate_colors(obj, ...) - \S4method{generate_colors}{character}( obj, avail, @@ -129,11 +127,13 @@ The colors will be set using the \code{\link[=generate_fill]{generate_fill()}} a \code{\link[=generate_border]{generate_border()}} functions respectively for the filling and the border. } \examples{ + generate_colors( c("A", "B", "A", "B", NA, "A", "B", "A", "B", NA), c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), mods_aff = "A", ) + generate_colors( c(10, 0, 5, 7, NA, 6, 2, 1, 3, NA), c(1, 0, 1, 0, NA, 1, 0, 1, 0, NA), diff --git a/man/ibd_matrix.Rd b/man/ibd_matrix.Rd index 0e116c3b..55049902 100644 --- a/man/ibd_matrix.Rd +++ b/man/ibd_matrix.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/ibd_matrix.R \name{ibd_matrix} \alias{ibd_matrix} -\title{Create an IBD matrix} +\title{IBD matrix} \usage{ ibd_matrix(id1, id2, ibd, idmap, diagonal) } diff --git a/man/is_informative.Rd b/man/is_informative.Rd index 1b912cbf..89fbf295 100644 --- a/man/is_informative.Rd +++ b/man/is_informative.Rd @@ -7,8 +7,6 @@ \alias{is_informative,Pedigree-method} \title{Find informative individuals} \usage{ -is_informative(obj, ...) - \S4method{is_informative}{character_OR_integer}(obj, avail, affected, informative = "AvAf") \S4method{is_informative}{Pedigree}(obj, col_aff = NULL, informative = "AvAf", reset = FALSE) @@ -53,10 +51,7 @@ A vector of individuals informative identifiers. \subsection{When obj is a Pedigree}{ -A list containing the Pedigree object and the vector of individuals -identifiers. -The Pedigree object will have a new column named 'id_inf' containing 1 for -informative individuals and 0 otherwise. +The Pedigree object with its \code{isinf} slot updated. } } \description{ @@ -73,6 +68,7 @@ corresponding informative individuals based on the avail and affected columns. } \examples{ + is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) is_informative(c("A", "B", "C", "D", "E"), informative = c(1, 2)) is_informative(c("A", "B", "C", "D", "E"), informative = c("A", "B")) @@ -82,6 +78,7 @@ is_informative(c("A", "B", "C", "D", "E"), avail = c(1, 0, 0, 1, 1), affected = c(0, 1, 0, 1, 1), informative = "AvOrAf") is_informative(c("A", "B", "C", "D", "E"), informative = c(TRUE, FALSE, TRUE, FALSE, TRUE)) + data("sampleped") ped <- Pedigree(sampleped) ped <- is_informative(ped, col_aff = "affection_mods") diff --git a/man/is_parent.Rd b/man/is_parent.Rd index 70f81ed0..8a277438 100644 --- a/man/is_parent.Rd +++ b/man/is_parent.Rd @@ -6,8 +6,6 @@ \alias{is_parent,Ped-method} \title{Are individuals parents} \usage{ -is_parent(obj, ...) - \S4method{is_parent}{character_OR_integer}(obj, dadid, momid, missid = NA_character_) \S4method{is_parent}{Ped}(obj, missid = NA_character_) @@ -33,6 +31,7 @@ with TRUE if the individual is a parent and FALSE otherwise Check which individuals are parents. } \examples{ + is_parent(c("1", "2", "3", "4"), c("3", "3", NA, NA), c("4", "4", NA, NA)) data(sampleped) diff --git a/man/is_valid_hints.Rd b/man/is_valid_hints.Rd index 6ccde2d4..734fe26a 100644 --- a/man/is_valid_hints.Rd +++ b/man/is_valid_hints.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/AllValidity.R \name{is_valid_hints} \alias{is_valid_hints} -\title{Check if the Hints are valid} +\title{Check if a Hints object is valid} \usage{ is_valid_hints(object) } @@ -13,8 +13,17 @@ is_valid_hints(object) A character vector with the errors or \code{TRUE} if no errors. } \description{ -Check if horder and spouse slots are valid (i.e. horder is numeric and -spouse is a matrix with 3 columns). -Check if the spouse matrix is valid (i.e. only numeric values). +Check if horder and spouse slots are valid: +\itemize{ +\item horder is named numeric vector +\item spouse is a data.frame +\itemize{ +\item Has the three \code{idr}, \code{idl}, \code{anchor} columns +\item \code{idr} and \code{idl} are different and doesn't contains \code{NA} +\item \code{idr} and \code{idl} couple are unique +\item \code{anchor} column only have \code{right}, \code{left}, \code{either} values +} +\item all ids in spouse needs to be in the names of the horder vector +} } \keyword{internal} diff --git a/man/is_valid_ped.Rd b/man/is_valid_ped.Rd index ba8ff212..058d93a0 100644 --- a/man/is_valid_ped.Rd +++ b/man/is_valid_ped.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/AllValidity.R \name{is_valid_ped} \alias{is_valid_ped} -\title{Check if the Ped is valid} +\title{Check if a Ped object is valid} \usage{ is_valid_ped(object) } diff --git a/man/is_valid_pedigree.Rd b/man/is_valid_pedigree.Rd new file mode 100644 index 00000000..9868edba --- /dev/null +++ b/man/is_valid_pedigree.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllValidity.R +\name{is_valid_pedigree} +\alias{is_valid_pedigree} +\title{Check if a Pedigree object is valid} +\usage{ +is_valid_pedigree(object) +} +\arguments{ +\item{object}{A Ped object.} +} +\value{ +A character vector with the errors or \code{TRUE} if no errors. +} +\description{ +Multiple checks are done here +} +\details{ +\enumerate{ +\item Check that the all Rel id are in the Ped object +\item Check that twins have same parents +\item Check that MZ twins have same sex +\item Check that all columns used in scales are in the Ped object +\item Check that all fill & border modalities are in the Ped object column +\item Check that all id used in Hints object are in the Ped object +\item Check that all spouse in Hints object are male / female +} +} +\keyword{internal} diff --git a/man/is_valid_rel.Rd b/man/is_valid_rel.Rd new file mode 100644 index 00000000..eb639956 --- /dev/null +++ b/man/is_valid_rel.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/AllValidity.R +\name{is_valid_rel} +\alias{is_valid_rel} +\title{Check if a Rel object is valid} +\usage{ +is_valid_rel(object) +} +\arguments{ +\item{object}{A Ped object.} +} +\value{ +A character vector with the errors or \code{TRUE} if no errors. +} +\description{ +Multiple checks are done here +} +\details{ +\enumerate{ +\item Check that the "id1", "id2", "code", "famid" slots exist +\item Check that the "code" slots have the right values +(i.e. "MZ twin", "DZ twin", "UZ twin", "Spouse") +\item Check that all "id1" are different to "id2" +\item Check that all "id1" are smaller than "id2" +\item Check that no duplicate relation are present +} +} +\keyword{internal} diff --git a/man/is_valid_scales.Rd b/man/is_valid_scales.Rd index 7b0a06e8..49dc2830 100644 --- a/man/is_valid_scales.Rd +++ b/man/is_valid_scales.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/AllValidity.R \name{is_valid_scales} \alias{is_valid_scales} -\title{Check if the Scales are valid} +\title{Check if a Scales object is valid} \usage{ is_valid_scales(object) } @@ -13,7 +13,24 @@ is_valid_scales(object) A character vector with the errors or \code{TRUE} if no errors. } \description{ -Check if the fill and border slots are valid (i.e. they have the right -columns). +Check if the fill and border slots are valid: +\itemize{ +\item fill slot is a data.frame with "order", "column_values", +"column_mods", "mods", "labels", "affected", "fill", +"density", "angle" columns. +\itemize{ +\item "affected" is logical. +\item "density", "angle", "order", "mods" are numeric. +\item "column_values", "column_mods", "labels", "fill" are +character. +} +\item border slot is a data.frame with "column_values", +"column_mods", "mods", "labels", "border" columns. +\itemize{ +\item "column_values", "column_mods", "labels", "border" are +character. +\item "mods" is numeric. +} +} } \keyword{internal} diff --git a/man/kindepth.Rd b/man/kindepth.Rd index 92c750f8..65c65d41 100755 --- a/man/kindepth.Rd +++ b/man/kindepth.Rd @@ -5,8 +5,7 @@ \alias{kindepth,character_OR_integer-method} \alias{kindepth,Pedigree-method} \alias{kindepth,Ped-method} -\title{Chase up the ancestors of a subject -Individual's depth in a pedigree} +\title{Individual's depth in a pedigree} \usage{ kindepth(obj, ...) @@ -31,8 +30,8 @@ biologicals mothers.} \item{align_parents}{If \code{align_parents = TRUE}, go one step further and try to make both parents of each child have the same depth. (This is not always possible). -It helps the drawing program by lining up pedigrees that 'join in the middle' -via a marriage.} +It helps the drawing program by lining up pedigrees that +'join in the middle' via a marriage.} } \value{ An integer vector containing the depth for each subject @@ -62,5 +61,5 @@ kindepth(ped1) \code{\link[=align]{align()}} } \author{ -Terry Therneau +Terry Therneau, updated by Louis Le Nézet } diff --git a/man/kinship.Rd b/man/kinship.Rd index 9a1d7a77..9b506c6c 100755 --- a/man/kinship.Rd +++ b/man/kinship.Rd @@ -7,8 +7,6 @@ \alias{kinship,Pedigree-method} \title{Kinship matrix} \usage{ -kinship(obj, ...) - \S4method{kinship}{Ped}(obj, chrtype = "autosome") \S4method{kinship}{character}(obj, dadid, momid, sex, chrtype = "autosome") @@ -91,12 +89,14 @@ Genetic Analysis, Springer-Verlag, New York, 1997. } \examples{ + kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1)) kinship(c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1), chrtype = "x" ) + data(sampleped) ped <- Pedigree(sampleped) kinship(ped) diff --git a/man/make_famid.Rd b/man/make_famid.Rd index f39dab04..afb122d0 100644 --- a/man/make_famid.Rd +++ b/man/make_famid.Rd @@ -4,10 +4,8 @@ \alias{make_famid} \alias{make_famid,character-method} \alias{make_famid,Pedigree-method} -\title{Update family id} +\title{Compute family id} \usage{ -make_famid(obj, ...) - \S4method{make_famid}{character}(obj, dadid, momid) \S4method{make_famid}{Pedigree}(obj) @@ -32,6 +30,7 @@ An integer vector giving family groupings \subsection{When used with a Pedigree object}{ An updated Pedigree object with the family id added +and with all ids updated } } \description{ @@ -44,11 +43,13 @@ tree 1, otherwise the tree numbers represent the disconnected subfamilies. Singleton subjects give a zero for family number. } \examples{ + make_famid( c("A", "B", "C", "D", "E", "F"), c("C", "D", "0", "0", "0", "0"), c("E", "E", "0", "0", "0", "0") ) + data(sampleped) ped1 <- Pedigree(sampleped[,-1]) make_famid(ped1) diff --git a/man/min_dist_inf.Rd b/man/min_dist_inf.Rd index eb7c36fe..0e50ad3e 100644 --- a/man/min_dist_inf.Rd +++ b/man/min_dist_inf.Rd @@ -1,6 +1,5 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/min_dist_inf.R -\docType{methods} \name{min_dist_inf} \alias{min_dist_inf} \alias{min_dist_inf,character-method} @@ -8,8 +7,6 @@ \alias{min_dist_inf,Ped-method} \title{Minimum distance to the informative individuals} \usage{ -min_dist_inf(obj, ...) - \S4method{min_dist_inf}{character}(obj, dadid, momid, sex, id_inf) \S4method{min_dist_inf}{Pedigree}(obj, col_aff = NULL, informative = "AvAf", reset = FALSE, ...) @@ -89,6 +86,7 @@ is 0.5 and the minimum distance is 1. Each time the kinship degree is divided by 2, the minimum distance is increased by 1. } \examples{ + min_dist_inf( c("A", "B", "C", "D", "E"), c("C", "D", "0", "0", "0"), @@ -98,6 +96,7 @@ min_dist_inf( affected = c(0, 1, 0, 1, 1), informative = "AvAf" ) + data(sampleped) ped <- Pedigree(sampleped) kin(ped(min_dist_inf(ped, col_aff = "affection_mods"))) diff --git a/man/num_child.Rd b/man/num_child.Rd index bbacdd80..5c35c02c 100644 --- a/man/num_child.Rd +++ b/man/num_child.Rd @@ -6,8 +6,6 @@ \alias{num_child,Pedigree-method} \title{Number of childs} \usage{ -num_child(obj, ...) - \S4method{num_child}{character_OR_integer}(obj, dadid, momid, rel_df = NULL, missid = NA_character_) \S4method{num_child}{Pedigree}(obj, reset = FALSE) @@ -74,6 +72,7 @@ If a relation ship dataframe is given, then even if no children is present between 2 spouses, the indirect childs will still be added. } \examples{ + num_child( obj = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), dadid = c("3", "3", "6", "8", "0", "0", "0", "0", "0", "0"), @@ -84,6 +83,7 @@ num_child( code = "Spouse" ) ) + data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) ped1 <- num_child(ped1, reset = TRUE) diff --git a/man/ped_to_legdf.Rd b/man/ped_to_legdf.Rd index ae651665..cabe23a8 100644 --- a/man/ped_to_legdf.Rd +++ b/man/ped_to_legdf.Rd @@ -5,8 +5,6 @@ \alias{ped_to_legdf,Pedigree-method} \title{Create plotting legend data frame from a Pedigree} \usage{ -ped_to_legdf(obj, ...) - \S4method{ped_to_legdf}{Pedigree}(obj, boxh = 1, boxw = 1, cex = 1, adjx = 0, adjy = 0) } \arguments{ @@ -16,7 +14,7 @@ ped_to_legdf(obj, ...) \item{boxw}{Width of the polygons elements} -\item{cex}{character expansion of the text} +\item{cex}{Character expansion of the text} \item{adjx}{default=0. Controls the horizontal text adjustment of the labels in the legend.} diff --git a/man/ped_to_plotdf.Rd b/man/ped_to_plotdf.Rd index a5602650..fff3dedb 100644 --- a/man/ped_to_plotdf.Rd +++ b/man/ped_to_plotdf.Rd @@ -5,8 +5,6 @@ \alias{ped_to_plotdf,Pedigree-method} \title{Create plotting data frame from a Pedigree} \usage{ -ped_to_plotdf(obj, ...) - \S4method{ped_to_plotdf}{Pedigree}( obj, packed = TRUE, @@ -47,9 +45,9 @@ used to edit away portions of the plot coordinates returned by \code{\link[=align]{align()}}. This is useful for zooming in on a particular region of the Pedigree.} -\item{cex}{character expansion of the text} +\item{cex}{Character expansion of the text} -\item{symbolsize}{size of the symbols} +\item{symbolsize}{Size of the symbols} \item{pconnect}{When connecting parent to children the program will try to make the connecting line as close to vertical as possible, subject to it @@ -92,6 +90,7 @@ The data frame contains the following columns: All those columns are used by \code{\link[=plot_fromdf]{plot_fromdf()}} to plot the graph. } \examples{ + data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == 1,]) plot_df <- ped_to_plotdf(ped1) diff --git a/man/plot-Pedigree-missing-method.Rd b/man/plot-Pedigree-missing-method.Rd index 22027c53..7a454542 100644 --- a/man/plot-Pedigree-missing-method.Rd +++ b/man/plot-Pedigree-missing-method.Rd @@ -40,11 +40,11 @@ value of the affection column for each filling scale.} \item{label}{If not \code{NULL}, add a label to each box corresponding to the value of the column given.} -\item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} +\item{ggplot_gen}{If TRUE add the segments to the ggplot object} -\item{cex}{character expansion of the text} +\item{cex}{Character expansion of the text} -\item{symbolsize}{size of the symbols} +\item{symbolsize}{Size of the symbols} \item{branch}{defines how much angle is used to connect various levels of nuclear families.} diff --git a/man/plot_fromdf.Rd b/man/plot_fromdf.Rd index bed4a4d4..e576cce5 100644 --- a/man/plot_fromdf.Rd +++ b/man/plot_fromdf.Rd @@ -44,7 +44,7 @@ Only used for \code{segments} and \code{arc}. \item{title}{The title of the plot.} -\item{ggplot_gen}{logical, if TRUE add the segments to the ggplot object} +\item{ggplot_gen}{If TRUE add the segments to the ggplot object} \item{boxw}{Width of the polygons elements} diff --git a/man/polyfun.Rd b/man/polyfun.Rd index 24bd4099..ff32ce0b 100644 --- a/man/polyfun.Rd +++ b/man/polyfun.Rd @@ -7,7 +7,7 @@ polyfun(nslice, coor) } \arguments{ -\item{nslice}{number of slices in the polygon} +\item{nslice}{Number of slices in the polygon} \item{coor}{Element form which to generate the polygon containing x and y coordinates and theta} diff --git a/man/polygons.Rd b/man/polygons.Rd index 1d006d6e..b27daa7e 100644 --- a/man/polygons.Rd +++ b/man/polygons.Rd @@ -7,7 +7,7 @@ polygons(nslice = 1) } \arguments{ -\item{nslice}{number of slices in each element +\item{nslice}{Number of slices in each element If nslice > 1, the elements are created with \code{\link[=polyfun]{polyfun()}}.} } \value{ diff --git a/man/set_plot_area.Rd b/man/set_plot_area.Rd index 47d2e0b4..fa906187 100644 --- a/man/set_plot_area.Rd +++ b/man/set_plot_area.Rd @@ -7,18 +7,18 @@ set_plot_area(cex, id, maxlev, xrange, symbolsize, ...) } \arguments{ -\item{cex}{character expansion of the text} +\item{cex}{Character expansion of the text} -\item{maxlev}{maximum level} +\item{maxlev}{Maximum level} -\item{xrange}{range of x values} +\item{xrange}{Range of x values} -\item{symbolsize}{size of the symbols} +\item{symbolsize}{Size of the symbols} -\item{...}{other arguments passed to \code{\link[=par]{par()}}} +\item{...}{Other arguments passed to \code{\link[=par]{par()}}} } \value{ -a list of user coordinates, old par, box width, box height, +List of user coordinates, old par, box width, box height, label height and leg height } \description{ diff --git a/man/shrink.Rd b/man/shrink.Rd index 07fe7e48..415b55ea 100644 --- a/man/shrink.Rd +++ b/man/shrink.Rd @@ -6,8 +6,6 @@ \alias{shrink,Ped-method} \title{Shrink Pedigree object} \usage{ -shrink(obj, ...) - \S4method{shrink}{Pedigree}(obj, avail = NULL, affected = NULL, max_bits = 16) \S4method{shrink}{Ped}(obj, avail = NULL, affected = NULL, max_bits = 16) diff --git a/man/unrelated.Rd b/man/unrelated.Rd index 46412942..2f62824d 100644 --- a/man/unrelated.Rd +++ b/man/unrelated.Rd @@ -6,8 +6,6 @@ \alias{unrelated,Pedigree-method} \title{Find Unrelated subjects} \usage{ -unrelated(obj, ...) - \S4method{unrelated}{Ped}(obj, avail = NULL) \S4method{unrelated}{Pedigree}(obj, avail = NULL) @@ -46,6 +44,7 @@ If \strong{avail} is \code{NULL}, it is extracted with its corresponding accessor from the Ped object. } \examples{ + data(sampleped) fam1 <- sampleped[sampleped$famid == 1, ] ped1 <- Pedigree(fam1) diff --git a/man/upd_famid_id.Rd b/man/upd_famid_id.Rd index b8c28322..9d05c33b 100644 --- a/man/upd_famid_id.Rd +++ b/man/upd_famid_id.Rd @@ -11,8 +11,6 @@ \alias{upd_famid_id,Pedigree,missing-method} \title{Update family prefix in individuals id} \usage{ -upd_famid_id(obj, famid, ...) - \S4method{upd_famid_id}{character,ANY}(obj, famid, missid = NA_character_) \S4method{upd_famid_id}{Ped,character_OR_integer}(obj, famid) @@ -53,13 +51,16 @@ If famid is \emph{missing}, then the \code{famid()} function will be called on t object. } \examples{ + upd_famid_id(c("1", "2", "B_3"), c("A", "B", "A")) upd_famid_id(c("1", "B_2", "C_3", "4"), c("A", NA, "A", NA)) + data(sampleped) ped1 <- Pedigree(sampleped[,-1]) id(ped(ped1)) new_fam <- make_famid(id(ped(ped1)), dadid(ped(ped1)), momid(ped(ped1))) id(ped(upd_famid_id(ped1, new_fam))) + data(sampleped) ped1 <- Pedigree(sampleped[,-1]) make_famid(ped1) diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index b625355a..a9000f69 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -7,8 +7,6 @@ \alias{useful_inds,Ped-method} \title{Usefulness of individuals} \usage{ -useful_inds(obj, ...) - \S4method{useful_inds}{character}( obj, dadid, @@ -85,6 +83,7 @@ of their parents. A \code{useful} slot is added to the Ped object with the usefulness of the individual. This boolean is hereditary. } \examples{ + data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) ped1 <- num_child(ped1) diff --git a/vignettes/kinship_details.Rmd b/vignettes/kinship_details.Rmd index 26fea1a1..2470dfa1 100644 --- a/vignettes/kinship_details.Rmd +++ b/vignettes/kinship_details.Rmd @@ -230,7 +230,7 @@ Finally, remove the rows that are identical. The result is a set of all pairs of observations in the matrix that correspond to monozygotic pairs. -```{r, kinship} +```{r, kinship twins} df <- data.frame( id = c(1, 2, 3, 4, 5, 6, 7, 8), dadid = c(4, 4, 4, NA, 4, 4, 4, NA), diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 2f56b5cc..7091c33f 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -39,10 +39,14 @@ various criteria, and kinship for the X chromosome. Suplementary vignettes are available to explain: -- The [Pedigree() constructor]("pedigree_constructor.html") used to create a Pedigree object `vignette("Pedigree() constructor", package = "Pedixplorer")` -- The [alignment algorithm]("alignment_details.html") used create the Pedigree structure `vignette("Pedigree alignment details", package = "Pedixplorer")` -- The [kinship() algorithm]("kinship_details.html") `vignette("Pedigree kinship() details", package = "Pedixplorer")` -- The [plotting algorithm]("pedigree_plot_details.html") used to plot the Pedigree `vignette("Pedigree plotting details", package = "Pedixplorer")` +- The [Pedigree() constructor]("pedigree_constructor.html") used to create a +Pedigree object `vignette("Pedigree() constructor", package = "Pedixplorer")` +- The [alignment algorithm]("alignment_details.html") used create the Pedigree +structure `vignette("Pedigree alignment details", package = "Pedixplorer")` +- The [kinship() algorithm]("kinship_details.html") +`vignette("Pedigree kinship() details", package = "Pedixplorer")` +- The [plotting algorithm]("pedigree_plot_details.html") used to plot the +Pedigree `vignette("Pedigree plotting details", package = "Pedixplorer")` @@ -70,11 +74,11 @@ The Pedigree S4 object The Pedigree object is a list of dataframes that describe the family structure. It contains the following components: -- ped: a dataframe with the Pedigree information -- rel: a dataframe with the relationship information -- scales: a list of 2 dataframe with the filling and borders +- ped: a Ped object with the Pedigree information +- rel: a Rel object with the relationship information +- scales: a Scales object of 2 dataframe with the filling and borders informations for the plot -- hints: a list of 2 elements indicating the horder and the spouse to +- hints: a Hints objects with 2 slots indicating the horder and the spouse to organise the Pedigree structure Basic Usage @@ -119,7 +123,8 @@ The summary method prints a more detailed summary of the Pedigree. Finally the plot method displays the Pedigree. ```{r, ped1} -ped1 <- ped[ped(ped, "famid") == "1", ] +print(famid(ped)) +ped1 <- ped[famid(ped) == "1"] print(ped1) summary(ped1) plot(ped1) diff --git a/vignettes/pedigree_constructor.Rmd b/vignettes/pedigree_constructor.Rmd index 231601e2..56e148d1 100644 --- a/vignettes/pedigree_constructor.Rmd +++ b/vignettes/pedigree_constructor.Rmd @@ -181,15 +181,10 @@ With this new S4 object comes multiple methods to ease the use of it: - print() - show() - as.data.frame() +- as.list() - setAs() -- [ -- [<- -- [[ -- [[<- -- $ -- $<- +- `[` - shrink() -- trim() - generate_colors() - is_informative() - kindepth() From 6cbb8476942b388ad467171769410afca5c75c4c Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 14 Nov 2023 17:10:39 +0100 Subject: [PATCH 092/111] Export missing Rel() --- R/AllConstructor.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index ce60d557..1f37c5f2 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -275,6 +275,7 @@ setMethod("Rel", "character_OR_integer", #' @rdname Rel-class #' @usage NULL +#' @export setMethod("Rel", "missing", function(obj) { new("Rel") From 20e423b318a9a5cd14f753c6c3aa38401e097793 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 14 Nov 2023 17:17:55 +0100 Subject: [PATCH 093/111] Update documentation --- NAMESPACE | 1 + R/AllClass.R | 4 ++++ R/AllConstructor.R | 3 +++ R/ped_to_legdf.R | 1 + R/plot_fct.R | 2 +- man/Ped-class.Rd | 6 ++++++ man/Rel-class.Rd | 2 ++ man/na_to_length.Rd | 1 + man/ped_to_legdf.Rd | 2 ++ man/set_plot_area.Rd | 2 ++ 10 files changed, 23 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index ce6a0677..64fc2b4c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -212,6 +212,7 @@ importFrom(graphics,strwidth) importFrom(graphics,text) importFrom(methods,as) importFrom(methods,show) +importFrom(methods,slotNames) importFrom(plyr,rbind.fill) importFrom(plyr,revalue) importFrom(quadprog,solve.QP) diff --git a/R/AllClass.R b/R/AllClass.R index e0557cb6..c79d2569 100644 --- a/R/AllClass.R +++ b/R/AllClass.R @@ -41,6 +41,9 @@ setClassUnion("missing_OR_NULL", c("missing", "NULL")) #' @slot useful A logical vector with the usefulness status of the #' individuals #' (i.e. `FALSE` = not useful, `TRUE` = useful). +#' @slot isinf A logical vector indicating if the individual is informative +#' or not +#' (i.e. `FALSE` = not informative, `TRUE` = informative). #' @slot kin A numeric vector with minimal kinship value between the #' individuals and the useful individuals. #' @slot num_child_tot A numeric vector with the total number of children @@ -51,6 +54,7 @@ setClassUnion("missing_OR_NULL", c("missing", "NULL")) #' of the individuals. #' @slot elementMetadata A DataFrame with the additional metadata columns #' of the Ped object. +#' @slot metadata Meta informations about the pedigree. #' #' @seealso [Pedigree()] #' @name Ped-class diff --git a/R/AllConstructor.R b/R/AllConstructor.R index 1f37c5f2..1ac9d578 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -13,6 +13,7 @@ #' @return A vector with the same length as temp. #' @keywords internal #' @examples +#' #' na_to_length(NA, rep(0, 4), "NewValue") #' na_to_length(c(1, 2, 3, NA), rep(0, 4), "NewValue") na_to_length <- function(x, temp, value) { @@ -220,6 +221,7 @@ setGeneric("Rel", signature = "obj", function(obj, ...) { #' @rdname Rel-class #' @export #' @examples +#' #' rel_df <- data.frame( #' id1 = c("1", "2", "3"), #' id2 = c("2", "3", "4"), @@ -244,6 +246,7 @@ setMethod("Rel", "data.frame", #' @rdname Rel-class #' @export #' @examples +#' #' Rel( #' obj = c("1", "2", "3"), #' id2 = c("2", "3", "4"), diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index b681e74f..563d4f0a 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -19,6 +19,7 @@ #' #' All those columns are used by [plot_fromdf()] to plot the graph. #' +#' @param obj A Pedigree object #' @param ... Additional arguments #' @inheritParams set_plot_area #' @inheritParams plot_fromdf diff --git a/R/plot_fct.R b/R/plot_fct.R index 0cd17001..afc7102d 100644 --- a/R/plot_fct.R +++ b/R/plot_fct.R @@ -329,12 +329,12 @@ draw_arc <- function(x0, y0, x1, y1, p, ggplot_gen = FALSE, lwd = 1, #' Set plotting area #' +#' @param id A character vector with the identifiers of each individuals #' @param cex Character expansion of the text #' @param maxlev Maximum level #' @param xrange Range of x values #' @param symbolsize Size of the symbols #' @param ... Other arguments passed to [par()] -#' @inheritParams is_parent #' #' @return List of user coordinates, old par, box width, box height, #' label height and leg height diff --git a/man/Ped-class.Rd b/man/Ped-class.Rd index a1340352..1d2a91be 100644 --- a/man/Ped-class.Rd +++ b/man/Ped-class.Rd @@ -183,6 +183,10 @@ individuals individuals (i.e. \code{FALSE} = not useful, \code{TRUE} = useful).} +\item{\code{isinf}}{A logical vector indicating if the individual is informative +or not +(i.e. \code{FALSE} = not informative, \code{TRUE} = informative).} + \item{\code{kin}}{A numeric vector with minimal kinship value between the individuals and the useful individuals.} @@ -197,6 +201,8 @@ of the individuals.} \item{\code{elementMetadata}}{A DataFrame with the additional metadata columns of the Ped object.} + +\item{\code{metadata}}{Meta informations about the pedigree.} }} \section{Accessors}{ diff --git a/man/Rel-class.Rd b/man/Rel-class.Rd index 1da228a6..dea6d06a 100644 --- a/man/Rel-class.Rd +++ b/man/Rel-class.Rd @@ -159,12 +159,14 @@ should be kept or deleted. } \examples{ + rel_df <- data.frame( id1 = c("1", "2", "3"), id2 = c("2", "3", "4"), code = c(1, 2, 3) ) Rel(rel_df) + Rel( obj = c("1", "2", "3"), id2 = c("2", "3", "4"), diff --git a/man/na_to_length.Rd b/man/na_to_length.Rd index eb98884a..e7fb8cbf 100644 --- a/man/na_to_length.Rd +++ b/man/na_to_length.Rd @@ -24,6 +24,7 @@ If not check that the size of the vector is equal to the template. } \examples{ + na_to_length(NA, rep(0, 4), "NewValue") na_to_length(c(1, 2, 3, NA), rep(0, 4), "NewValue") } diff --git a/man/ped_to_legdf.Rd b/man/ped_to_legdf.Rd index cabe23a8..8b4c4a0f 100644 --- a/man/ped_to_legdf.Rd +++ b/man/ped_to_legdf.Rd @@ -8,6 +8,8 @@ \S4method{ped_to_legdf}{Pedigree}(obj, boxh = 1, boxw = 1, cex = 1, adjx = 0, adjy = 0) } \arguments{ +\item{obj}{A Pedigree object} + \item{...}{Additional arguments} \item{boxh}{Height of the polygons elements} diff --git a/man/set_plot_area.Rd b/man/set_plot_area.Rd index fa906187..7cfc1cd7 100644 --- a/man/set_plot_area.Rd +++ b/man/set_plot_area.Rd @@ -9,6 +9,8 @@ set_plot_area(cex, id, maxlev, xrange, symbolsize, ...) \arguments{ \item{cex}{Character expansion of the text} +\item{id}{A character vector with the identifiers of each individuals} + \item{maxlev}{Maximum level} \item{xrange}{Range of x values} From ac927553a5e98f555a91acb7d93a0a5c2d3d6c17 Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 14 Nov 2023 22:33:03 +0100 Subject: [PATCH 094/111] Update documentation --- DESCRIPTION | 3 ++- NAMESPACE | 11 +++++++++++ Pedixplorer_0.99.2.tar.gz | Bin 0 -> 1610898 bytes R/AllConstructor.R | 36 +++++++++------------------------- R/align.R | 10 +++++++--- R/find_avail_affected.R | 4 ++-- R/find_avail_noninform.R | 4 ++-- R/find_unavailable.R | 16 +++++++-------- R/generate_colors.R | 7 +++++-- R/is_informative.R | 5 +---- R/kinship.R | 1 - R/make_famid.R | 2 +- R/min_dist_inf.R | 4 +--- R/num_child.R | 1 - R/ped_to_legdf.R | 4 +--- R/plot_fct.R | 6 +++++- R/shrink.R | 1 - R/utils.R | 2 ++ devel/documentation/todo.md | 26 ++++++++++++------------ devel/old/pedigreeClass.R | 3 ++- man/Hints-class.Rd | 12 +----------- man/Pedigree-class.Rd | 13 ++++++++---- man/align.Rd | 6 ++---- man/auto_hint.Rd | 4 +--- man/best_hint.Rd | 2 -- man/circfun.Rd | 1 + man/find_avail_affected.Rd | 2 +- man/find_avail_noninform.Rd | 2 +- man/find_unavailable.Rd | 6 +++--- man/generate_colors.Rd | 9 +++------ man/is_informative.Rd | 6 +----- man/kinship.Rd | 2 -- man/make_famid.Rd | 5 ++--- man/min_dist_inf.Rd | 8 ++------ man/num_child.Rd | 2 -- man/ped_to_legdf.Rd | 2 -- man/polyfun.Rd | 2 +- man/shrink.Rd | 2 -- man/unrelated.Rd | 2 -- man/useful_inds.Rd | 2 -- vignettes/kinship_details.Rmd | 1 + 41 files changed, 101 insertions(+), 136 deletions(-) create mode 100644 Pedixplorer_0.99.2.tar.gz diff --git a/DESCRIPTION b/DESCRIPTION index 00da1016..d3c494cf 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -45,7 +45,8 @@ Suggests: rmarkdown, BiocStyle, knitr, - withr + withr, + magick Config/testthat/edition: 3 biocViews: Software, DataRepresentation, Genetics, Alignment BugReports: https://github.com/LouisLeLezet/Pedixplorer/issues diff --git a/NAMESPACE b/NAMESPACE index 64fc2b4c..1dfa4a48 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -26,12 +26,14 @@ export(Rel) export(Scales) export(affected) export(align) +export(ancestors) export(anchor_to_factor) export(auto_hint) export(avail) export(best_hint) export(bit_size) export(border) +export(circfun) export(code) export(dadid) export(descendants) @@ -52,6 +54,8 @@ export(ibd_matrix) export(id) export(id1) export(id2) +export(is_disconnected) +export(is_founder) export(is_informative) export(is_valid_scales) export(isinf) @@ -68,6 +72,8 @@ export(ped) export(ped_to_legdf) export(ped_to_plotdf) export(plot_fromdf) +export(polyfun) +export(polygons) export(rel) export(rel_code_to_factor) export(scales) @@ -210,9 +216,14 @@ importFrom(graphics,segments) importFrom(graphics,strheight) importFrom(graphics,strwidth) importFrom(graphics,text) +importFrom(methods,'slot<-') importFrom(methods,as) +importFrom(methods,callNextMethod) +importFrom(methods,is) +importFrom(methods,new) importFrom(methods,show) importFrom(methods,slotNames) +importFrom(methods,validObject) importFrom(plyr,rbind.fill) importFrom(plyr,revalue) importFrom(quadprog,solve.QP) diff --git a/Pedixplorer_0.99.2.tar.gz b/Pedixplorer_0.99.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..1f2a89fcf86c0ee5696f0c20329a343d5c180413 GIT binary patch literal 1610898 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%0DO=t}_VQBKPlC87` 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 d6ZuJ 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
WdAV9 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%0AE-sCnRVfE=xXV*7myFbN_hXw*Tmep*Fw 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 n%Lr-Y6 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

~b48avdh;7Wb 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�j!#3$pgRb% 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≥#Chh6Ff2+^(Ucc69(xeG=TV&n)bp0LwHZK(I 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

*`wATz9&duHLkY0?o=CfOyLS4-$Ky2K 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%0AcIZZcONjIyyRoBO^XhQJ9~7 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

+s?r+k%WOv9FJ^TyVb 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

WdAV9 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%0AE-sCnRVfE=xXV*7myFbN_hXw*Tmep*Fw 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 n%Lr-Y6 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

~b48avdh;7Wb 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�j!#3$pgRb% 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≥#Chh6Ff2+^(Ucc69(xeG=TV&n)bp0LwHZK(I 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

*`wATz9&duHLkY0?o=CfOyLS4-$Ky2K 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%0AcIZZcONjIyyRoBO^XhQJ9~7 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

+s?r+k%WOv9FJ^TyVb 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 Date: Wed, 15 Nov 2023 16:00:14 +0100 Subject: [PATCH 098/111] Delete devel folder --- .gitignore | 3 +- devel/.lintr | 2 - devel/documentation/DiagramFunction.drawio | 847 ---- devel/documentation/S4_class.md | 26 - devel/documentation/arguments.md | 253 -- devel/documentation/check.Renviron | 42 - devel/documentation/contribute.R | 46 - devel/documentation/contribution.md | 95 - devel/documentation/get_all_function.R | 60 - devel/documentation/todo.md | 58 - devel/documentation/txt2image.md | 23 - devel/idea/app/RunApp.R | 45 - devel/idea/app/data_col_sel.R | 61 - devel/idea/app/data_download.R | 60 - devel/idea/app/data_import.R | 259 -- devel/idea/app/data_management.R | 117 - devel/idea/app/plot_download.R | 145 - devel/idea/app/plot_ped.R | 113 - devel/idea/app/server.R | 484 --- devel/idea/app/test.R | 78 - devel/idea/app/ui.R | 139 - devel/idea/app/utils.R | 13 - devel/idea/debugging.R | 10 - devel/idea/fscore.pedigree.R | 96 - devel/idea/legendPlot.R | 128 - devel/idea/pedigree.legend.R | 176 - devel/idea/pedigree2Class.R | 0 devel/idea/utils.R | 113 - devel/noweb/MAINTAIN.steps | 86 - devel/noweb/Makefile | 73 - devel/noweb/align.txt | 752 ---- devel/noweb/align2.txt | 514 --- devel/noweb/all.nw | 4425 -------------------- devel/noweb/checks.txt | 311 -- devel/noweb/cleanup | 3 - devel/noweb/configure | 3 - devel/noweb/kinship.txt | 537 --- devel/noweb/noweb.R | 180 - devel/noweb/noweb.sty | 25 - devel/noweb/pedigree.shrink.txt | 869 ---- devel/noweb/pedigree.txt | 570 --- devel/noweb/plot.txt | 751 ---- devel/old/pedigreeAccessors.R | 294 -- devel/old/pedigreeClass.R | 285 -- devel/old/pedigreeValidity.R | 219 - 45 files changed, 2 insertions(+), 13387 deletions(-) delete mode 100644 devel/.lintr delete mode 100644 devel/documentation/DiagramFunction.drawio delete mode 100644 devel/documentation/S4_class.md delete mode 100644 devel/documentation/arguments.md delete mode 100644 devel/documentation/check.Renviron delete mode 100644 devel/documentation/contribute.R delete mode 100644 devel/documentation/contribution.md delete mode 100644 devel/documentation/get_all_function.R delete mode 100644 devel/documentation/todo.md delete mode 100644 devel/documentation/txt2image.md delete mode 100644 devel/idea/app/RunApp.R delete mode 100644 devel/idea/app/data_col_sel.R delete mode 100644 devel/idea/app/data_download.R delete mode 100644 devel/idea/app/data_import.R delete mode 100644 devel/idea/app/data_management.R delete mode 100644 devel/idea/app/plot_download.R delete mode 100644 devel/idea/app/plot_ped.R delete mode 100644 devel/idea/app/server.R delete mode 100644 devel/idea/app/test.R delete mode 100644 devel/idea/app/ui.R delete mode 100644 devel/idea/app/utils.R delete mode 100644 devel/idea/debugging.R delete mode 100644 devel/idea/fscore.pedigree.R delete mode 100644 devel/idea/legendPlot.R delete mode 100644 devel/idea/pedigree.legend.R delete mode 100644 devel/idea/pedigree2Class.R delete mode 100644 devel/idea/utils.R delete mode 100644 devel/noweb/MAINTAIN.steps delete mode 100644 devel/noweb/Makefile delete mode 100644 devel/noweb/align.txt delete mode 100644 devel/noweb/align2.txt delete mode 100644 devel/noweb/all.nw delete mode 100644 devel/noweb/checks.txt delete mode 100644 devel/noweb/cleanup delete mode 100644 devel/noweb/configure delete mode 100644 devel/noweb/kinship.txt delete mode 100644 devel/noweb/noweb.R delete mode 100644 devel/noweb/noweb.sty delete mode 100644 devel/noweb/pedigree.shrink.txt delete mode 100644 devel/noweb/pedigree.txt delete mode 100644 devel/noweb/plot.txt delete mode 100644 devel/old/pedigreeAccessors.R delete mode 100644 devel/old/pedigreeClass.R delete mode 100644 devel/old/pedigreeValidity.R diff --git a/.gitignore b/.gitignore index 7a232118..53568a67 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ *.so *.Rprofile *.lintr -Pedixplorer* \ No newline at end of file +Pedixplorer* +devel \ No newline at end of file diff --git a/devel/.lintr b/devel/.lintr deleted file mode 100644 index c4df2400..00000000 --- a/devel/.lintr +++ /dev/null @@ -1,2 +0,0 @@ -linters: linters_with_defaults(indentation_linter = indentation_linter(indent = 4L)) # see vignette("lintr") -encoding: "UTF-8" diff --git a/devel/documentation/DiagramFunction.drawio b/devel/documentation/DiagramFunction.drawio deleted file mode 100644 index 9a301d80..00000000 --- a/devel/documentation/DiagramFunction.drawio +++ /dev/null @@ -1,847 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/devel/documentation/S4_class.md b/devel/documentation/S4_class.md deleted file mode 100644 index 615a8394..00000000 --- a/devel/documentation/S4_class.md +++ /dev/null @@ -1,26 +0,0 @@ -# The Pedigree S4 class - -The different slots: - -- ped -- derived -- rel -- meta -- scales -- hints - -What to expose: -- meta -- input - -What to not expose: -- id -- derived -- scales - -Accessors: -- mcols -- fill_colors -- col_id -- col_derived -- col_input diff --git a/devel/documentation/arguments.md b/devel/documentation/arguments.md deleted file mode 100644 index c918a1cd..00000000 --- a/devel/documentation/arguments.md +++ /dev/null @@ -1,253 +0,0 @@ -# List of all arguments to inherit - -```R -## Arguments in kinship -#' @param obj A pedigree object or a vector of the individuals identifiers -#' @param ... Additional arguments passed to methods -#' + dadid, momid, sex - -## Arguments of sex_to_factor -#' @param sex A character, factor or numeric vector corresponding to -#' the gender of the individuals. The following values are recognized: -#' - character() or factor() : "f", "m", "woman", "man", "male", "female", -#' "unknown", "terminated" -#' - numeric() : 1 = "male", 2 = "female", 3 = "unknown", 4 = "terminated" - -## Arguments of is_parent -#' @param id A vector of each subjects identifiers -#' @param dadid A vector containing for each subject, the identifiers of the -#' biologicals fathers. -#' @param momid vector containing for each subject, the identifiers of the -#' biologicals mothers. -#' @param missid The missing identifier value. Founders are the individuals with -#' no father and no mother in the pedigree (i.e. `dadid` and `momid` equal to the -#' value of this variable). The default for `missid` is `"NA_character_"`. - -## Argument of is_informative -#' @param avail A numeric vector of availability status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : unavailable -#' - `1` : available -#' - `NA` : availability not known -#' @param informative Informative individuals selection can take 5 values: -#' 'AvAf' (available and affected), -#' 'AvOrAf' (available or affected), -#' 'Av' (available only), -#' 'Af' (affected only), -#' 'All' (all individuals) -#' or a numeric/character vector of individuals id -#' or a boolean -#' @param affected A numeric vector of affection status of each individual -#' (e.g., genotyped). The values are: -#' - `0` : unaffected -#' - `1` : affected -#' - `NA` : affection status not known -#' @param col_aff A string with the column name to use for the affected status. - -## Arguments of useful_inds -#' @param num_child_tot A numeric vector of the number of children of each -#' individuals -#' @param keep_infos Boolean to indicate if individuals with unknown status -#' but available or reverse should be kept - -## Arguments in find_avail_affected -#' @param affstatus Affection status to search for. - -## Arguments of pedigree -#' @param rel_df -#' @param ped_df - -## Arguments of bit_size -#' @param obj A pedigree object or a vector of fathers ids - -## Arguments of shrink -#' @param max_bits Optional, the bit size for which to shrink the pedigree - -## Argument of kindepth -#' @param align_parents If `align_parents=T`, go one step further and try to -#' make both parents of each child have the same depth. -#' (This is not always possible). -#' It helps the drawing program by lining up pedigrees that 'join in the middle' -#' via a marriage. - -## Arguments of family_check -#' @param famid A vector of family identifiers -#' @param newfam The result of a call to `make_famid()`. If this has already -#' been computed by the user, adding it as an argument shortens the running -#' time somewhat. - -## Arguments of alignped1 -#' @param idx Indexes of the subjects -#' @param dadx Indexes of the fathers -#' @param momx Indexes of the mothers -#' @param level Vector of the level of each subject -#' @param horder Vector of the horizontal horder of each subject -#' @param spouselist Matrix of the spouses with one row per hinted marriage, -#' usually only a few marriages in a pedigree will need an added hint, for -#' instance reverse the plot order of a husband/wife pair. -#' Each row contains the index of the left spouse, the right hand spouse -#' and the anchor (i.e : `1` = left, `2` = right, `0` = either). - -## Arguments of alignped3 -#' @param x1 Alignement of the first tree -#' @param x2 Alignement of the second tree -#' @param space Space between two subjects - -## Arguments of alignped4 -#' @param rval A list with components `n`, `nid`, `pos`, and `fam`. -#' @param spouse A boolean matrix with one row per level representing if -#' the subject is a spouse or not. - -## Arguments of align -#' @param ped A pedigree object -#' @param packed Should the pedigree be compressed, i.e., allow diagonal -#' lines connecting parents to children in order to have a smaller overall -#' width for the plot. -#' @param width for a packed output, the minimum width of the plot, in -#' inches. -#' @param align for a packed pedigree, align children under parents `TRUE`, to -#' the extent possible given the page width, or align to to the left margin -#' `FALSE`. This argument can be a two element vector, giving the alignment -#' parameters, or a logical value. If `TRUE`, the default is `c(1.5, 2)`, or -#' numeric the routine `alignped4()` will be called. -#' @param hints Plotting hints for the pedigree. -#' This is a list with components `horder` and `spouse`, the second one is -#' optional. -#' - **horder** is a numeric vector with one element per subject in the -#' pedigree. It determines the relative horizonal order of subjects within a sibship, as -#' well as the relative order of processing for the founder couples. (For this -#' latter, the female founders are ordered as though they were sisters). -#' - **spouse** is a matrix with one row per hinted marriage, usually only -#' a few marriages in a pedigree will need an added hint, for instance reverse -#' the plot order of a husband/wife pair. Each row contains the index of the -#' left spouse, the right hand spouse, and the anchor -#' (i.e : `1` = left, `2` = right, `0` = either). -#' Children will preferentially appear under the parents of the anchored spouse. - -## Arguments of shift() -#' @param id The id of the subject to be shifted -#' @param sibs The ids of the siblings -#' @param goleft If `TRUE`, shift to the left, otherwise to the right -#' @param hint The current hint vector -#' @param twinrel The twin relationship matrix -#' @param twinset The twinset vector - -## Arguments of findspouse() -#' @param idpos The position of the subject -#' @param plist The alignment structure representing the pedigree layout. -#' For the differents matrices present in the list, each row represents a -#' level of the pedigree and each column a potential subject. -#' It contains the following components: -#' - n Vector of the number of subjects per level -#' - nid Matrix of the subjects indexes -#' - pos Matrix of the subjects positions -#' - fam Matrix of the siblings family identifiers -#' - spouse Matrix of the left spouses `1` = spouse, `0` = not spouse, -#' `2` = inbred spouse. -#' @param lev The generation level of the subject - -## Arguments of duporder() -#' @param idlist List of individuals identifiers to be considered - -## Arguments of auto_hint() -#' @param reset If `TRUE`, then even if `ped` object has hints, reset -#' them to the initial values - -## Arguments of best_hint() -#' @param wt A vector of three weights for the three error measures -#' - The number of duplicate individuals in the plot -#' - The sum of the absolute values of the differences in the -#' positions of duplicate individuals -#' - The sum of the absolute values of the differences between -#' the center of the children and the parents -#' Default is `c(1000, 10, 1)`. -#' @param tolerance The maximum stress level to accept. Default is `0` - -## Arguments of ped_to_plotdf -#' @param branch defines how much angle is used to connect various levels of -#' nuclear families. -#' @param mark if TRUE, add a mark to each box corresponding to the value of -#' the affection column for each filling scale. -#' @param label if not NULL, add a label to each box corresponding to the -#' value of the column given. -#' @param pconnect when connecting parent to children the program will try to -#' make the connecting line as close to vertical as possible, subject to it -#' lying inside the endpoints of the line that connects the children by at -#' least `pconnect` people. Setting this option to a large number will -#' force the line to connect at the midpoint of the children. - -## Arguments of set_plot_area -#' @param cex character expansion of the text -#' @param maxlev maximum level -#' @param xrange range of x values -#' @param symbolsize size of the symbols -#' @param ... other arguments passed to [par()] - -## Arguments of plot_fromdf -#' @param df -#' @param usr The user coordinates of the plot. -#' @param title The title of the plot. -#' @param add_to_existing A logical to know if the plot should be added to an -#' existing plot. -#' @param boxh Height of the legend boxes -#' @param boxw Width of the legend boxes - -## Arguments of plot -#' @param fam_to_plot default=1. If the pedigree contains multiple families, -#' this parameter can be used to select which family to plot. -#' @param legend default=FALSE. If TRUE, a legend will be added to the plot. -#' @param leg_cex default=0.8. Controls the size of the legend text. -#' @param leg_symbolsize default=0.5. Controls the size of the legend symbols. -#' @param leg_loc default=NULL. If NULL, the legend will be placed in the -#' upper right corner of the plot. Otherwise, a 4-element vector of the form -#' (x0, x1, y0, y1) can be used to specify the location of the legend. -#' @param ... Extra options that feed into the plot function. -``` - -# List of returned values -n -nid -pos -spouselist - -# Roxygen S4 methods writing - -```{r} -#' My function -#' -#' @param obj An object either a character vector or a pedigree -#' @param ... Arguments to be passed to methods -#' -#' @docType methods -#' @export -setGeneric("myfunction", signature = "obj", - function(obj, ...) standardGeneric("myfunction") -) - -#' @docType methods -#' @aliases myfunction,character -#' @rdname myfunction -#' @param dadid A character vector -#' @param momid A character vector -#' @param missid Character defining the missing ids -#' @usage ## S4 method for signature 'character' -#' @usage myfunction(dadid, momid, missid = "NA_character_") -#' @return A character vector with the parents ids -setMethod("myfunction", "character", function(dadid, momid, missid = "NA_character_") { - paste(dadid, momid, sep = missid) -}) - -#' @docType methods -#' @aliases myfunction,Pedigree -#' @param ped A pedigree object -#' @param missid Character defining the missing ids -#' @usage ## S4 method for signature 'Pedigree' -#' @usage myfunction(dadid, momid, missid = "NA_character_") -#' @return A pedigree with the parents ids -setMethod("myfunction", "Pedigree", - function(ped, missid = "NA_character_") { - ped$par <- myfunction(ped$dadid, ped$momid, missid) - ped - } -) -``` diff --git a/devel/documentation/check.Renviron b/devel/documentation/check.Renviron deleted file mode 100644 index e7bb90df..00000000 --- a/devel/documentation/check.Renviron +++ /dev/null @@ -1,42 +0,0 @@ -# https://www.rdocumentation.org/packages/base/versions/3.5.1/topics/Startup -# https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Checking-and-building-packages -# https://cran.r-project.org/doc/manuals/r-devel/R-ints.html#Tools - -_R_CHECK_FORCE_SUGGESTS_=TRUE -_R_CHECK_RD_LINE_WIDTHS_=TRUE -_R_CHECK_EXECUTABLES_=FALSE -_R_CHECK_EXECUTABLES_EXCLUSIONS_=FALSE -_R_CHECK_FF_DUP_=TRUE -_R_CHECK_VC_DIR_=TRUE -_R_CHECK_PKG_SIZES_=TRUE -_R_CHECK_PKG_SIZES_THRESHOLD_=5 -_R_CHECK_REPLACING_IMPORTS_=TRUE -_R_CHECK_TIMINGS_="0" -_R_CHECK_INSTALL_DEPENDS_=TRUE -_R_CHECK_SUGGESTS_ONLY_=TRUE -_R_CHECK_NO_RECOMMENDED_=TRUE -_R_CHECK_CODE_ASSIGN_TO_GLOBALENV_=TRUE -_R_CHECK_CODE_ATTACH_=TRUE -_R_CHECK_CODE_DATA_INTO_GLOBALENV_=TRUE -_R_CHECK_DOT_FIRSTLIB_=TRUE -_R_CHECK_DEPRECATED_DEFUNCT_=TRUE -_R_CHECK_TOPLEVELFILES_=TRUE -_R_CHECK_LIMIT_CORES_=TRUE -_R_CHECK_CODE_USAGE_VIA_NAMESPACES_=TRUE -_R_CHECK_S3_METHODS_NOT_REGISTERED_=TRUE -_R_CHECK_OVERWRITE_REGISTERED_S3_METHODS_=TRUE -_R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_=TRUE -_R_CHECK_TESTS_NLINES_=20 -_R_CHECK_NATIVE_ROUTINE_REGISTRATION_=TRUE -_R_CHECK_NO_STOP_ON_TEST_ERROR_=TRUE -_R_CHECK_PRAGMAS_=TRUE -_R_CHECK_COMPILATION_FLAGS_=TRUE -_R_CHECK_R_DEPENDS_="warn" -_R_CHECK_SERIALIZATION_=TRUE -_R_CHECK_R_ON_PATH_=TRUE -_R_CHECK_PACKAGES_USED_IN_TESTS_USE_SUBDIRS_=TRUE -_R_CHECK_SHLIB_OPENMP_FLAGS_=TRUE -_R_CHECK_CONNECTIONS_LEFT_OPEN_=TRUE -_R_CHECK_FUTURE_FILE_TIMESTAMPS_=TRUE -_R_CHECK_LENGTH_1_CONDITION_ =package:_R_CHECK_PACKAGE_NAME_ -_R_CHECK_LENGTH_1_LOGIC2_=package:_R_CHECK_PACKAGE_NAME_ \ No newline at end of file diff --git a/devel/documentation/contribute.R b/devel/documentation/contribute.R deleted file mode 100644 index 258301cb..00000000 --- a/devel/documentation/contribute.R +++ /dev/null @@ -1,46 +0,0 @@ -setwd("R/") -BiocManager::install(version = "devel") -BiocManager::valid() -library(devtools) - -load_all() - -library(lintr) -library(formatR) - -#formatR::tidy_dir(".", width.cutoff = 80, recursive = TRUE, overwrite = TRUE, -# wrap = FALSE, indent = 4, arrow = TRUE) - -# Linting -lintr::use_lintr(type = "tidyverse") -usethis::use_github_action("lint") -lintr::lint_package() - -# Must pass -check() -devtools::build_vignettes() -build() # Generate less than 5Mb -BiocCheck::BiocCheckGitClone() -BiocCheck::BiocCheck('new-package'=TRUE) - -check(vignettes = FALSE) # Should take less than 10 min - -# Vignettes + Man < 3Gb -# Each file < 5Mb - - -readCitationFile("inst/CITATION") - -#### commands to build the package using devtools -devtools::check_man() -devtools::test() -devtools::check() -withr::with_libpaths(c("../testinstalls/", .libPaths()), devtools::install(build_vignettes = TRUE, dependencies = FALSE)) -devtools::build("../Pedixplorer/") -## < restart R > -library(Pedixplorer, lib.loc = "../testinstalls/") - -#### to upload to CRAN -## Update DESCRIPTION, README.md, NEWS.md, and cran-comments.md -devtools::revdep_check() -devtools::release() diff --git a/devel/documentation/contribution.md b/devel/documentation/contribution.md deleted file mode 100644 index fc7b6dd3..00000000 --- a/devel/documentation/contribution.md +++ /dev/null @@ -1,95 +0,0 @@ -# To contribute to this package - -## Organisation - -R package organisation is quite straigth forward: - -- All R functions are stored in the `R` folder. -- All documentation are stored in the `man` folder. -- Data samples are stored in the `data` folder. -- The `tests` folder contains the unnitest runned during compilation -- Some `vignettes` are also available in their own folder to explain more the -codes. - -## R functions convention - -### Documentation - -Each function are preceded by ROxygen comment to render the documentation of -each function. -To transfer those ROxygen comment to Rd files in the `man` folder, run: - -```R -devtools::document() -``` - -### Writing - -One good guidelines that could be followed is the one from the -[**TidyVerse**](https://style.tidyverse.org/). -It explains how to name files, functions, variable, for analyses and packages. -It also add information on how to nicely write the code: space, indentations, -... - -All those guidelines can be automatically detected and applied to a package -with [**styler**](https://styler.r-lib.org/) package. - -### Testing - -One objective would be to add tests for each functions and for each conditions. -For that we use the package [**test_that**](https://testthat.r-lib.org/). -For a given function a linked test file can be created in the `test/testthat/` -folder with - -```R -use_test("function_name") -``` - -When the test is added inside the file it will be ran during compilation or -can be done with: - -```R -devtools::test() -``` - -To see the coverage of the generated code you can use: - -```R -library(covr) - -# If run with no arguments implicitly calls `package_coverage()` -report() -``` - -## To build the backage - -### Needs - -To build the package you need to have installed: - -- `R` and `R.exe` in your path -- [MiKTeX](https://miktex.org/download) to build the pdf -- [Font ts1-zi4r](https://tex.stackexchange.com/questions/125274/error-font-ts1-zi4r-at-540-not-found) -- [Qpdf](https://github.com/qpdf/qpdf) - -If you have `R.exe` in your path you can run: - -```powershell -set R_CHECK_ENVIRON=./documentation/check.Renviron -R.exe CMD build . -R.exe CMD check Pedixplorer_0.99.2.tar.gz -``` - -## Submit to BioConductor - -```R -BiocManager::install("BiocCheck") -BiocCheck::BiocCheckGitClone() -BiocCheck::BiocCheck("Pedixplorer"=TRUE) -``` - -## To check up - -```R -readCitationFile("inst/CITATION") -``` diff --git a/devel/documentation/get_all_function.R b/devel/documentation/get_all_function.R deleted file mode 100644 index 8bba1afe..00000000 --- a/devel/documentation/get_all_function.R +++ /dev/null @@ -1,60 +0,0 @@ -## How to get all function in a package -load_all() -allf <- getNamespaceExports("kinship2") -allff <- allf[!str_detect(allf, ".__")] - -allS4 <- allf[str_detect(allf, ".__T__")] -allS4 <- allS4[str_detect(allS4, ":kinship2")] -allS4 <- str_remove_all(allS4, ":kinship2") -allS4 <- str_remove_all(allS4, ".__T__") - -allff <- allff[!allff %in% allS4] -allArg <- lapply(allff, function(x){names(formals(x))}) -names(allArg) <- allff - -idl <- c("descendants") -allS4 <- allS4[!allS4 %in% idl] - - -library(Rdpack) -allS4Arg <- lapply(allS4, function(x){names(S4formals(x, "character"))}) -names(allS4Arg) <- allS4 - -othArg <- lapply(idl, function(x){names(S4formals(x, c("character", "character")))}) -names(othArg) <- idl - - -allArg <- c(allArg, allS4Arg, othArg) -allArg - -Arg <- unique(unlist(allArg)) - -df <- lapply(names(allArg), function(x) { - ifelse(Arg %in% allArg[[x]], 1, 0) -}) %>% as.data.frame() -colnames(df) <- names(allArg) -rownames(df) <- Arg -dim(df) - -heatmap(as.matrix(df[!rowSums(df) == 1, ]), - distfun = function(x) { - dist(x, method = "binary") - }, - hclustfun = function(x) { - hclust(x, method = "ward.D2") - } -) - -mat <- df[, df[rownames(df) == "momid", ] == 1] -mat <- as.matrix(mat[rowSums(mat) > 0, ]) -heatmap(mat, - distfun = function(x) { - dist(x, method = "binary") - }, - hclustfun = function(x) { - hclust(x, method = "ward.D2") - } -) - -OnlyArg <- df[rowSums(df) == 1, ] -OnlyArg[colSums(OnlyArg) > 0] diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md deleted file mode 100644 index 22c6e4bd..00000000 --- a/devel/documentation/todo.md +++ /dev/null @@ -1,58 +0,0 @@ -# List of what need to be done for package - -## Documentations of functions - -- [x] AllClass.R -- [x] AllConstructor.R -- [x] AllAccessors.R -- [x] AllGeneric.R -- [x] AllValidity.R -- [x] Pedixplorer-package.R -- [x] align.R -- [x] alignped1.R -- [x] alignped2.R -- [x] alignped3.R -- [x] alignped4.R -- [x] auto_hint.R -- [x] best_hint.R -- [x] bit_size.R -- [x] data.R -- [x] descendants.R -- [x] family_check.R -- [x] find_avail_affected.R -- [x] find_avail_noninform.R -- [x] find_unavailable.R -- [x] fix_parents.R -- [x] generate_aff_inds.R -- [x] generate_colors.R -- [x] ibd_matrix.R -- [x] is_informative.R -- [x] kindepth.R -- [x] kinship.R -- [x] make_famid.R -- [x] min_dist_inf.R -- [x] norm_data.R -- [x] num_child.R -- [x] ped_to_legdf.R -- [x] ped_to_plotdf.R -- [x] plot.R -- [x] plot_fct.R -- [x] plot_fromdf.R -- [x] shrink.R -- [x] unrelated.R -- [x] useful_inds.R -- [x] utils.R - -## For all class - -- [x] General - - [x] Class - - [x] Constructor - - [x] Getters - - [x] Setters - - [x] General methods - - [x] See also - -## Other - -- [x] Take out addition of ind in ancestors compute Kindepth. diff --git a/devel/documentation/txt2image.md b/devel/documentation/txt2image.md deleted file mode 100644 index fda0555d..00000000 --- a/devel/documentation/txt2image.md +++ /dev/null @@ -1,23 +0,0 @@ -# Install desktop app - -Got to `https://github.com/jgraph/drawio-desktop/releases/` and download the latest version for your OS. - -To install it on wsl - -```bash -sudo apt install /mnt/c/Users/llenezet/Dowlnoads/drawio-amd64-21.6.8.deb -``` - -To use drawio - -```bash -drawio --version -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --output inst/figures/kinship2_diagram.png -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --layers 0 --output inst/figures/plotting.png -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --layers 1 --output inst/figures/shrinking.png -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --layers 2 --output inst/figures/infos.png -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --layers 3 --output inst/figures/pedigreeobj.png -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --layers 4 --output inst/figures/alignment.png -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --layers 5 --output inst/figures/checkingcol.png -drawio documentation/DiagramFunction.drawio --export --format png --page-index 0 --layers 6 --output inst/figures/legend.png -``` diff --git a/devel/idea/app/RunApp.R b/devel/idea/app/RunApp.R deleted file mode 100644 index 14dfa4f8..00000000 --- a/devel/idea/app/RunApp.R +++ /dev/null @@ -1,45 +0,0 @@ -##Pedigree App## -# This is the setup part of the Pedigree Shiny web application. You can run the -# application executing this script -print("Bal: RunApp") -## Charging the needed libraries -------------------------- -packages <- c("shiny", "ggplot2", "kinship2", "stringr", "plyr", "plotly", "DT", - "shinyjs", "shinyWidgets", "tidyr", "readxl", "cowplot", "gridExtra", - "gridGraphics", "shinycssloaders", "LIM") -packageCheck <- lapply(packages, FUN = function(x) { - if (!require(x, character.only = TRUE)) { - install.packages(x, dependencies = TRUE) - library(x, character.only = TRUE) - } -}) -## Setting the working directory -------------------------- -#Check for directory to use if wrong please change -#the working directory to PedigreeApp folder -this_file_dir <- function() { - cmd_args <- commandArgs(trailingOnly = FALSE) - needle <- "--file=" - match <- grep(needle, cmd_args) - if (length(match) > 0) { - # Rscript - path_script <- normalizePath(sub(needle, "", cmd_args[match])) - } else { - # 'source' via R console - path_script <- normalizePath(sys.frames()[[1]]$ofile) - } - return(sub("\\\\RunApp.R", "", path_script)) -} - -is_rstudio <- Sys.getenv("RSTUDIO") == "1" -if (is_rstudio) { - message("Running from Rstudio detected") - dir_script <- dirname(rstudioapi::getActiveDocumentContext()$path) - launch_browser <- getOption("shiny.launch.browser", interactive()) -} else { - message("Running from R detected") - dir_script <- this_file_dir() - launch_browser <- TRUE -} -message(paste("The following directory will be used:", dir_script)) -## Launching app with correct directory ----------------- -runApp(dir_script, launch.browser = launch_browser) -TRUE diff --git a/devel/idea/app/data_col_sel.R b/devel/idea/app/data_col_sel.R deleted file mode 100644 index cea0b2d8..00000000 --- a/devel/idea/app/data_col_sel.R +++ /dev/null @@ -1,61 +0,0 @@ -usethis::use_package("shiny") -library(shiny) -data_col_sel_ui <- function(id) { - ns <- shiny::NS(id) - shiny::tagList(div(id = ns("Div"), class = "div-global", - style = "margin-top:1.5em", - shiny::uiOutput(ns("all_cols_sel"))), ) -} - -data_col_sel_server <- function(id, df, cols_used, title, null = FALSE) { - stopifnot(shiny::is.reactive(df)) - ns <- shiny::NS(id) - shiny::moduleServer(id, function(input, output, session) { - print("Bal: data_col_sel_server") - cols_list <- shiny::reactive({ - all_cols <- colnames(df()) - setNames(c("NA", all_cols), c("", all_cols)) - }) - - v <- list() - all_sel <- shiny::reactive({ - for (col in cols_used) { - v[[col]] <- div(id = ns("Div"), class = "div-null", - style = "margin-top:-1.5em", - shiny::selectInput(ns(paste0("select_", col)), - label = shiny::h5(paste(title, col)), - choices = cols_list())) - } - v - }) - - output$all_cols_sel <- shiny::renderUI({ - all_sel() - }) - - r <- list() - col_select_list <- shiny::reactive({ - for (col in cols_used) { - input_select_cols <- input[[paste0("select_", col)]] - r[[col]] <- input_select_cols - } - r - }) - return(col_select_list) - }) -} - -data_col_sel_demo <- function() { - ui <- shiny::fluidPage(data_col_sel_ui("datafile"), - shiny::tableOutput("selected_cols")) - server <- function(input, output, session) { - col_sel <- data_col_sel_server("datafile", - shiny::reactive({mtcars}), - c("test", "id"), "Select column") - output$selected_cols <- shiny::renderTable({ - as.data.frame(col_sel()) - }) - } - shiny::shinyApp(ui, server) -} -TRUE diff --git a/devel/idea/app/data_download.R b/devel/idea/app/data_download.R deleted file mode 100644 index d1092e3a..00000000 --- a/devel/idea/app/data_download.R +++ /dev/null @@ -1,60 +0,0 @@ -usethis::use_package("shiny") - -data_download_ui <- function(id) { - ns <- shiny::NS(id) - shiny::tagList( - shiny::uiOutput(ns("data_text")), - shiny::uiOutput(ns("btn_dwld"))) -} - -data_download_server <- function(id, df, filename, - label = NULL, helper = TRUE) { - stopifnot(shiny::is.reactive(df)) - ns <- shiny::NS(id) - shiny::moduleServer(id, function(input, output, session) { - output$data_dwld <- shiny::downloadHandler(filename = function() { - paste(filename, ".csv", sep = "") - }, content = function(file) { - write.csv2(df(), file) - }) - shiny::observeEvent(df(), { - if (nrow(df()) == 0) { - output$data_text <- shiny::renderUI({ - shiny::HTML(paste(label, "doesn't have any rows")) - }) - output$btn_dwld <- shiny::renderUI({ - NULL - }) - } else { - if (helper) { - output$data_text <- shiny::renderUI({ - shiny::HTML(paste(label, "with", nrow(df()), - "rows", "
", - "(Data can only be export to Download folder)")) - }) - } else { - output$data_text <- shiny::renderUI({ - NULL - }) - } - - output$btn_dwld <- shiny::renderUI({ - shiny::downloadButton(ns("data_dwld"), label = label) - }) - - } - }) - }) -} - -data_download_demo <- function() { - ui <- shiny::fluidPage(data_download_ui("datafile")) - server <- function(input, output, session) { - data_download_server("datafile", shiny::reactive({mtcars}), - "mtcars_data_file", "mtcars") - } - shiny::shinyApp(ui, server) -} - -data_download_demo() -TRUE diff --git a/devel/idea/app/data_import.R b/devel/idea/app/data_import.R deleted file mode 100644 index d441d719..00000000 --- a/devel/idea/app/data_import.R +++ /dev/null @@ -1,259 +0,0 @@ -# This module was created during the St Jude Bio-Hackathon of May 2023 -# by the team 13. -# author: Max Qiu (maxqiu@unl.edu) -# author: Louis Le Nézet (louislenezet@gmail.com) - -#### Library needed #### ---------- -usethis::use_package("shiny") -usethis::use_package("readxl") -usethis::use_package("shinyWidgets") - -#### Function needed to work #### ---------- -#' Read data -#' -#' @description Read dataframe based on the extension of the file -#' -#' @details This function detect the extension of the file and proceed to use -#' the according function to read it with the parameters given by the user. -#' @param file The file path -#' @param sep A string defining the separator to use for the file -#' @param quote A string defining the quote to use -#' @param header A boolean defining if the dataframe contain a header or not -#' @param df_name A string defining the name of the dataframe / sheet to use -#' @param stringsAsFactors A boolean defining if all the strings should be -#' interpreted ad factor -#' @param to_char A boolean defining if all the dataset should be read as -#' character. -#' @returns A dataframe. -#' @examples -#' \\dontrun{ -#' read_data('path/to/my/file.txt', sep=',', header=FALSE) -#' } -#' @keywords data -#' @export -read_data <- function(file, sep = ";", quote = "'", header = TRUE, df_name = NA, - stringsAsFactors = FALSE, to_char = TRUE) { - print("Bal: read_data") - shiny::req(file) - if (!is.null(file)) { - ext <- tools::file_ext(file) - shiny::validate(shiny::need(ext %in% - c("csv", "txt", "xls", "xlsx", "rda", "tab"), - "Please upload a (csv, txt, xls, xlsx, rda, tab) file")) - if (to_char) { - col_classes <- "character" - col_types <- "text" - } else { - col_classes <- NA - col_types <- NULL - } - if (ext %in% c("csv", "txt")) { - df <- utils::read.csv(file, sep = sep, quote = quote, - header = header, colClasses = col_classes) - } else if (ext %in% c("tab")) { - df <- utils::read.table(file, quote = quote, header = header, - sep = sep, fill = TRUE, colClasses = col_classes) - } else if (ext %in% c("xls", "xlsx")) { - sheets_present <- readxl::excel_sheets(file) - if (is.null(df_name)) { - message("Needs the name of the sheet to use 'df_name'") - df <- NULL - } else { - if (df_name %in% sheets_present) { - df <- as.data.frame(readxl::read_excel(file, sheet = df_name, - col_names = header, col_types = col_types)) - } else { - message("Error: Sheet selected isn't in file") - df <- NULL - } - } - } else if (ext %in% c("rda")) { - shiny::req(df_name) - all_data <- base::load(file) - if (is.na(df_name)) { - message("Needs the name of the dataframe to use 'df_name'") - df <- NULL - } else { - if (df_name %in% all_data) { - df <- get(df_name) - } else { - message("Error: dataframe selected isn't in file") - df <- NULL - } - } - } - as.data.frame(unclass(df), stringsAsFactors = stringsAsFactors) - } else { - message("Error: data selected is null") - NULL - } -} - -#' Get dataframe name -#' -#' @description Extract the name of the different dataframe present in a file -#' -#' @details This function detect the extension of the file and extract if -#' necessary the different dataframe / sheet names available. -#' @param file The file path -#' @returns A vector of all the dataframe name present. -#' @examples -#' \\dontrun{ -#' get_dataframe('path/to/my/file.txt') -#' } -#' @keywords dataframe -#' @export -get_dataframe <- function(file) { - print("Bal: get_dataframe") - shiny::req(file) - ext <- tools::file_ext(file) - if (ext %in% c("xls", "xlsx")) { - sheets_present <- readxl::excel_sheets(file) - if (!is.null(sheets_present)) { - sheets_present - } else { - message("No sheets find in file") - NULL - } - } else if (ext == "rda") { - base::load(file) - } else { - message("File not an xls, xlsx nor rda") - NULL - } -} - -#### UI function of the module #### ---------- -#' Data import ui -#' -#' @description R Shiny module UI to import data files -#' -#' @details This module allow to import multiple type of data. -#' The file type currently supported are csv, txt, xls, xslx, rda. -#' The UI ask the user for the file localisation, the separator, -#' the needs to format to character, the quote format, the presence -#' of heading, the conversion of string to factor, and the dataframe -#' selection if multiple dataframe are present in one file (xlsx, rda). -#' -#' @param id A string. -#' @param label A string use to prompt the user -#' @returns A Shiny UI. -#' @examples -#' \\dontrun{ -#' data_import_demo() -#' } -#' @keywords data -#' @export -data_import_ui <- function(id) { - ns <- shiny::NS(id) - shiny::tagList( - shiny::uiOutput(ns("file")), - shiny::actionButton(ns("options"), - "Options", style = "simple", size = "sm", color = "warning"), - shiny::selectInput(ns("sep"), - "Separator", c(Comma = ",", `Semi-colon` = ";", - Tabulation = "\t", Space = " "), - selected = "\t"), - shiny::uiOutput(ns("dfSelection"))) -} - -#### Server function of the module #### ---------- -#' Data import server -#' -#' @description R Shiny module server to import data files -#' -#' @details This module allow to import multiple type of data. -#' The file type currently supported are csv, txt, xls, xslx, rda. -#' The server dynamically create a selection input if multiple -#' dataframe are present in the file selected. -#' -#' @param id A string. -#' @returns A Shiny server. -#' @examples -#' \\dontrun{ -#' data_import_demo() -#' } -#' @keywords data -#' @export -data_import_server <- function(id, label = "Select data file", - max_request_size = 30) { - options(shiny.maxRequestSize = max_request_size * 1024^2) - shiny::moduleServer(id, function(input, output, session) { - print("Bal: data_import_server") - ## File rendering selection ------------------------ - output$file <- shiny::renderUI({ - shiny::fileInput(ns("file"), label) - }) - - # The selected file, if any - user_file <- shiny::reactive({ - # If no file is selected, don't do anything - shiny::validate(shiny::need(input$file, message = FALSE)) - input$file - }) - - ## Options rendering selection -------------------- - opt <- shiny::reactiveValues(heading = TRUE, to_char = FALSE, - stringsAsFactors = FALSE, quote = "\"") - shiny::observeEvent(input$options, { - # display a modal dialog with a header, textinput and action buttons - shiny::showModal(shiny::modalDialog( - shiny::tags$h2("Select your options"), - shiny::checkboxInput(ns("heading"), "Has heading", - value = opt$heading), - shiny::checkboxInput(ns("to_char"), "Load all data as strings", - value = opt$to_char), - shiny::checkboxInput(ns("stringsAsFactors"), - "Strings as factors", value = opt$stringsAsFactors), - shinyWidgets::pickerInput(ns("quote"), "Quote", c( - "None" = "", - "Double quote" = "\"", - "Single quote" = "'", - "Both" = "\"'" - ), selected = opt$quote, multiple = FALSE), - footer = shiny::tagList( - shiny::actionButton(ns("close"), "Close"), - ) - )) - }) - - # Store the information if the user clicks close - shiny::observeEvent(input$close, { - shiny::removeModal() - opt$heading <- input$heading - opt$to_char <- input$to_char - opt$stringsAsFactors <- input$stringsAsFactors - opt$quote <- input$quote - }) - - ## Data selection ------------------------ - df <- shiny::reactive({ - file <- user_file()$datapath - read_data(file, input$sep, opt$quote, opt$heading, - input$dfSelected, opt$stringsAsFactors, opt$to_char) - }) - - # We can run observers in here if we want to - shiny::observe({ - msg <- sprintf("File %s was uploaded", user_file()$name) - message(msg, "\n") - }) - - ns <- shiny::NS(id) - - output$dfSelection <- shiny::renderUI({ - file <- user_file()$datapath - df_name <- get_dataframe(file) - if (!is.null(df_name)) { - shiny::selectInput(ns("dfSelected"), label = label, - choices = df_name, selected = df_name[1]) - } else { - NULL - } - }) - - # Return the reactive that yields the data frame - return(df) - }) -} -TRUE diff --git a/devel/idea/app/data_management.R b/devel/idea/app/data_management.R deleted file mode 100644 index e135f644..00000000 --- a/devel/idea/app/data_management.R +++ /dev/null @@ -1,117 +0,0 @@ -usethis::use_package("dplyr") -## Choose family to plot the name used will be the most numerous race -get_families_table <- function(df, var) { - if (is.null(df[[var]]) || is.null(df$family)) { - return(NULL) - } - df <- as.table(table(var = df[[var]], Famille = df$family)) - - families_table <- t(apply(df, 2, function(x) { - c(rownames(df)[which.max(x)], sum(x)) - })) - colnames(families_table) <- c("Major mod", "Nb Ind") - - families_table <- as.data.frame(families_table) - families_table$FamilyNum <- rownames(families_table) - families_table <- families_table[c(3, 1, 2)] - if ("0" %in% families_table$FamilyNum) { - families_table$"Major mod"[families_table$FamilyNum == "0"] <- - "Connected to none" - } - return(families_table) -} - - -select_from_inf <- function(df, inf_inds, kin_max) { - if (nrow(df) > 2) { - print("Bal: select_from_inf") - - col_used <- c("to_use") - df <- check_columns(df, cols_used = col_used, others_cols = TRUE) - - df_kin <- min_dist_inf(df, inf_inds) - df_kin$to_use <- df_kin$kin <= kin_max & !is.na(df_kin$kin) - - df_kin_trim <- fix_parents.data.frame(df = df_kin, - delete = FALSE, filter = "to_use") - df_kin_trim <- fix_parents.data.frame(df = df_kin_trim, delete = TRUE) - if (nrow(df_kin_trim) > 2) { - df_kin_trim$family <- with(df_kin_trim, make_famid(id, momid, dadid)) - } else { - message("Not Enough individuals") - NULL - } - df_kin_trim - } else { - message("Not Enough individuals") - NULL - } -} - -create_legend <- function(lgd_list, nbColMany = 2, size = 1) { - legend <- list() - it1 <- 1 - for (it1 in seq_along(lgd_list)) { - i <- names(lgd_list)[[it1]] - print(lgd_list[[i]]) - legend_labels <- names(lgd_list[[i]]) - nbMod <- length(lgd_list[[i]]) - if (i == "Availability") { - fillColor <- rep("white", length(lgd_list[[i]])) - borderColor <- lgd_list[[i]] - } else { - fillColor <- lgd_list[[i]] - borderColor <- rep("black", length(lgd_list[[i]])) - } - - data <- data.frame(X = rep(1, nbMod), Y = 1:nbMod, - Aff = as.character(1:nbMod)) - if (nbMod > 5) { - nbcol <- nbColMany - } else { - nbcol <- 1 - } - - grob <- ggplot(data, aes(X, Y)) + - geom_point(aes(fill = Aff), shape = 21, size = 10, stroke = 1.5) + - scale_fill_manual( - values = setNames(fillColor, 1:nbMod), name = i, - labels = setNames(legend_labels, 1:nbMod), - drop = FALSE, guide = TRUE) + - guides(fill = guide_legend(override.aes = list(col = borderColor, - fill = fillColor, size = size * 10), ncol = nbcol)) + - theme( - legend.margin = margin(0, 0, 0, 0, "in"), - legend.title = element_text(size = 20 * size), - legend.text = element_text(size = 18 * size), - legend.justification = "top", - plot.background = element_rect(fill = "red"), - ) - - legend[[LETTERS[it1]]] <- ggpubr::get_legend(grob) - } - return(legend) -} - -get_title <- function(family_sel, subfamily_sel, family_var, mod, inf_selected, - kin_max, trim_ped, keep_infos, nb_rows, short_title = FALSE) { - if (subfamily_sel == "0") { - "Subfamily containing individuals not linked to any" - } else { - if (short_title) { - trim_text <- ifelse(trim_ped, ifelse(keep_infos, "11", "10"), "00") - title <- paste0(c("Ped", family_var, mod, "-K", kin_max, - "-T", trim_text, "-I", inf_selected, "_SF", subfamily_sel), - collapse = "") - title <- stringr::str_replace(title, "/", "-") - stringr::str_replace(title, " ", "-") - } else { - trim_text <- ifelse(trim_ped, "trimmed", "") - paste0(c("Pedigree", trim_text, "of", family_var, mod, "family N°", - family_sel, "sub-family N°", subfamily_sel, - "( N=", nb_rows, ") from", - inf_selected, "individuals"), collapse = " ") - } - } -} -TRUE diff --git a/devel/idea/app/plot_download.R b/devel/idea/app/plot_download.R deleted file mode 100644 index 5f26585c..00000000 --- a/devel/idea/app/plot_download.R +++ /dev/null @@ -1,145 +0,0 @@ -# This module was created during the St Jude Bio-Hackathon of May 2023 by the team 13. -# author: Max Qiu (ytqiuhaowen@gmail.com) -# author: Louis Le Nézet (louislenezet@gmail.com) - -#### Library needed #### ---------- -usethis::use_package("ggplot2") -usethis::use_package("shiny") -usethis::use_package("htmlwidgets") -usethis::use_package("R3port") - -#### UI function of the module #### ---------- -#' Export plot ui module -#' -#' @description R Shiny module UI to export plot -#' -#' @details This module allow to export multiple type of plot. -#' The file type currently supported are png, pdf and html. -#' The UI ask the user for the file type to export to, the -#' width and the height of the plot to generate. -#' When the plot is generated with plotly, set is_plotly to TRUE -#' and export it to html. -#' -#' @param id A string. -#' @returns A Shiny UI. -#' @export -plot_download_ui <- function(id) { - ns <- shiny::NS(id) - shiny::tagList(shiny::uiOutput(ns("btn_dwld"))) -} - -#### Server function of the module #### ---------- -#' Export plot server module -#' -#' @description R Shiny module server to export plot -#' -#' @details This module allow to export multiple type of plot. -#' The file type currently supported are png, pdf and html. -#' The UI ask the user for the file type to export to, the -#' width and the height of the plot to generate. -#' When the plot is generated with plotly, set is_plotly to TRUE -#' and export it to html. -#' -#' @param id A string. -#' @param my_plot Reactive object containing the plot. -#' @returns A Shiny UI. -#' @export -plot_download_server <- function(id, my_plot, filename = "saveplot", - label = "Download", width = 500, height = 500, ext = "png") { - stopifnot(shiny::is.reactive(my_plot)) - shiny::moduleServer(id, function(input, output, session) { - ns <- shiny::NS(id) - - ## Options rendering selection -------------------- - opt <- shiny::reactiveValues(width = width, height = height, ext = ext) - - output$btn_dwld <- shiny::renderUI({ - shiny::actionButton(ns("download"), label = label, icon("download"), - style = "simple", size = "sm") - }) - - shiny::observeEvent(input$download, { - # display a modal dialog with a header, textinput and action buttons - shiny::showModal(shiny::modalDialog( - shiny::tags$h2("Select your options"), - shiny::numericInput(ns("width"), "Figure width (px)", - value = opt$width, min = 0, max = 20000), - shiny::numericInput(ns("height"), "Figure height (px)", - value = opt$height, min = 0, max = 20000), - shiny::radioButtons(ns("ext"), label = "Select the file type", - choices = list("png", "pdf", "html"), selected = opt$ext), - footer = shiny::tagList( - shiny::downloadButton(ns("plot_dwld"), label = label), - shiny::actionButton(ns("close"), "Close", icon("close")), - ) - )) - }) - - # Store the information if the user clicks close - shiny::observeEvent(input$close, { - shiny::removeModal() - opt$width <- input$width - opt$height <- input$height - opt$ext <- input$ext - }) - - - output$plot_dwld <- shiny::downloadHandler(filename = function() { - paste(filename, input$ext, sep = ".") - }, content = function(file) { - if (input$ext == "html") { - plot_html <- my_plot() - if ("ggplot" %in% class(plot_html)) { - plot_html <- ggplotly(plot_html) - } - if ("htmlwidget" %in% class(plot_html)) { - htmlwidgets::saveWidget(file = file, plot_html) - } else { - showNotification(paste("Only ggplot and plotly widgets", - "are supported to export as html", - session = session)) - } - } else { - if ("ggplot" %in% class(my_plot())) { - ggplot2::ggsave(filename = file, plot = my_plot(), - device = input$ext, - width = input$width, height = input$height) - } else if ("htmlwidgets" %in% class(my_plot())) { - showNotification("htmlwidgets should be exported as html", - session = session) - } else { - if (input$ext == "png") { - png(filename = file, width = input$width, - height = input$height) - } else if (input$ext == "pdf") { - pdf(file = file, width = input$width / 96, - height = input$height / 96) - } else { - showNotification(paste("Other type of plot should be", - "exported as pdf or png", session = session)) - } - if ("grob" %in% class(my_plot())) { - gridExtra::grid.arrange(my_plot()) - } else { - plot(my_plot()) - } - dev.off() - } - } - }) - }) -} - -plot_download_demo <- function() { - ui <- shiny::fluidPage(plotOutput("plt"), plot_download_ui("dwld"), ) - server <- function(input, output, session) { - plot_download_server("dwld", shiny::reactive({ - hist(mtcars$mpg) - })) - output$plt <- shiny::renderPlot({ - hist(mtcars$mpg) - }) - } - shiny::shinyApp(ui, server) -} -TRUE diff --git a/devel/idea/app/plot_ped.R b/devel/idea/app/plot_ped.R deleted file mode 100644 index 5001ec9a..00000000 --- a/devel/idea/app/plot_ped.R +++ /dev/null @@ -1,113 +0,0 @@ -# This module was created during the St Jude Bio-Hackathon of May 2023 by the team 13. -# Author: Louis Le Nézet (louislenezet@gmail.com) - -# Documentation -#' R Shiny module to generate pedigree graph -#' -#' @param id A string. -#' @param df A dataframe containing the information about the individual to plot -#' @returns A Shiny module. -#' @examples -#' Pedigree_demo() -#### Library needed #### ---------- -usethis::use_package("dplyr") -usethis::use_package("shiny") - -#### Function to plot pedigree #### ---------- -ped_plot <- function(df, cex_plot = 1, mar = rep(0.5, 4), psize = par("pin"), - tips_names = NA, to_plotly = FALSE, mark = df$affected, fill = df$fill, - border = df$border, label = NA, title = NULL) { - ped_plot <- plot.pedigree( - df, symbolsize = 1, cex = cex_plot, - mark = mark, label = label, - mar = mar, psize = psize, - tips_names = tips_names, - fill = fill, border = border, - ggplot_gen = to_plotly, title = title - ) # General Pedigree - print("Bal: ped_plot, Plot Done") - if (to_plotly) { - ggp <- ped_plot$ggplot + ggplot2::scale_y_reverse() + - ggplot2::theme( - panel.grid.major = ggplot2::element_blank(), - panel.grid.minor = ggplot2::element_blank(), - axis.title.x = ggplot2::element_blank(), - axis.text.x = ggplot2::element_blank(), - axis.ticks.x = ggplot2::element_blank(), - axis.ticks.y = ggplot2::element_blank(), - axis.title.y = ggplot2::element_blank(), - axis.text.y = ggplot2::element_blank() - ) - ## To make it interactive - print("Bal: ped_plot, Converting to plotly") - plotly::ggplotly( - ggp + - ggplot2::theme(legend.position = "none"), - tooltip = "text") - } else { - ped_plot$plot - } -} - - -#### UI function of the module #### ---------- -plot_ped_ui <- function(id) { - ns <- NS(id) - tagList( - uiOutput(ns("plot")), - checkboxInput(ns("interactive"), - label = "Make the pedigree interactive", value = FALSE)) -} - -#### Server function of the module #### ---------- -plot_ped_server <- function(id, ped, title) { - stopifnot(shiny::is.reactive(ped)) - moduleServer(id, function(input, output, session) { - print("Bal: plot_ped_server") - ns <- NS(id) - plot_ped <- reactive({ - ped_plot(ped(), to_plotly = input$interactive, title = title) - }) - output$plot <- renderUI({ - if (input$interactive) { - print("Bal: plot_ped_server, interactive") - output$ped_plotly <- plotly::renderPlotly({ - if (!"plotly" %in% class(plot_ped())) { - return(NULL) - } - plot_ped() - }) - plotly::plotlyOutput(ns("ped_plotly")) - } else { - print("Bal: plot_ped_server, not interactive") - output$ped_plot <- renderPlot({ - if (!"grob" %in% class(plot_ped())) { - return(NULL) - } - gridExtra::grid.arrange(plot_ped()) - }) - plotOutput(ns("ped_plot")) - } - }) - return(plot_ped) - }) -} - -#### Demo function of the module #### ---------- -plot_ped_demo <- function() { - data(sampleped) - colnames(sampleped) <- c("family", "id", "dadid", "momid", - "sex", "affected", "avail") - df <- sampleped[sampleped$family == 1, ] - df <- generate_aff_inds(df, "affected", threshold = 0, sup_thres_aff = TRUE) - df <- generate_colors(df, "affected")$df - ui <- fluidPage(plot_ped_ui("ped"), plot_download_ui("saveped")) - server <- function(input, output, session) { - plot_ped <- plot_ped_server("ped", reactive({ - df - })) - plot_download_server("saveped", plot_ped) - } - shinyApp(ui, server) -} -TRUE diff --git a/devel/idea/app/server.R b/devel/idea/app/server.R deleted file mode 100644 index 3b53c035..00000000 --- a/devel/idea/app/server.R +++ /dev/null @@ -1,484 +0,0 @@ -usethis::use_package("shiny") -usethis::use_package("shinyjs") -usethis::use_package("shinyWidgets") -usethis::use_package("dplyr") -usethis::use_package("DT") -usethis::use_package("gridExtra") - -shiny::shinyServer(function(input, output, session) { - ## Ped data import ------------------------- - ped_df <- data_import_server(id = "data_ped_import", - label = "Select pedigree file :") - cols_needed_ped1 <- data_col_sel_server("data_ped_col_sel1", ped_df, - c("indId", "fatherId", "motherId", "gender"), - "Select columns :", null = TRUE) - cols_needed_ped2 <- data_col_sel_server("data_ped_col_sel2", ped_df, - c("family", "steril", "available", "status"), - "Select columns :", null = TRUE) - ## Rel data import ------------------------- - rel_df <- data_import_server(id = "data_rel_import", - label = "Select relationship file :") - cols_needed_rel <- data_col_sel_server("data_rel_col_sel", rel_df, - c("id1", "id2", "code"), - "Select columns :", null = TRUE) - - ## Data normalisation ---------------------- - ped_df_norm <- shiny::reactive({ - print("Bal: data management") - cols_ren <- c(cols_needed_ped1()[cols_needed_ped1() != "NA"], - cols_needed_ped2()[cols_needed_ped2() != "NA"]) - cols_needed_ped <- c("indId", "fatherId", "motherId", "gender") - if (any(!cols_needed_ped %in% names(cols_ren)) | - any(!cols_ren %in% colnames(ped_df()))) { - NULL - } else { - if (any(duplicated(as.vector(unlist(cols_ren))))){ - showNotification("You have selected twice the same column !") - NULL - } else { - df_rename <- data.table::copy(ped_df()) - data.table::setnames(df_rename, - old = as.vector(unlist(cols_ren)), - new = names(cols_ren)) - ped_df_norm <- print_console(norm_ped(df_rename), session) - if (length(ped_df_norm[!is.na(ped_df_norm$error), ]) > 0) { - showNotification(paste( - nrow(ped_df_norm[!is.na(ped_df_norm$error), ]), - "errors as occured.", - "All individuals with errors wil be discarded")) - } - ped_df_norm - } - } - }) - rel_df_norm <- shiny::reactive({ - print("Bal: rel management") - cols_ren <- cols_needed_rel()[cols_needed_rel() != "NA"] - cols_needed_rel <- c("id1", "id2", "code") - if (any(!cols_needed_rel %in% names(cols_ren))) { - NULL - } else { - rel_rename <- rel_df() - data.table::setnames(rel_rename, - old = as.vector(unlist(cols_ren)), - new = names(cols_ren)) - rel_df_norm <- print_console(norm_rel(rel_rename), session) - if (length(rel_df_norm[!is.na(rel_df_norm$error)]) > 0) { - showNotification(paste( - nrow(rel_df_norm[!is.na(rel_df_norm$error), ]), - "errors as occured.", - "All individuals with errors wil be discarded")) - } - rel_df_norm - } - }) - - ## Errors download ------------------------- - shiny::observeEvent(ped_df_norm(), { - data_download_server("ped_errors", - shiny::reactive({ped_df_norm()[!is.na(ped_df_norm()$error), ]}), - "Pedigree data errors") - }) - shiny::observeEvent(rel_df_norm(), { - data_download_server("rel_errors", - shiny::reactive({rel_df_norm()[!is.na(rel_df_norm()$error), ]}), - "Relationship data errors") - }) - - ## Families selection and information ------ - # Families table - families_table <- reactive({ - print("Bal: families_table") - ped_df <- ped_df_norm()[is.na(ped_df_norm()$error)] - if (!is.null(ped_df) & !is.null(input$families_var_sel)) { - get_families_table(ped_df, input$families_var_sel) - } else { - NULL - } - }) - # Family selection variable - output$families_var_selector <- renderUI({ - print("Bal: families_var") - dfn <- ped_df_norm()[is.na(ped_df_norm()$error)] - if (!is.null(dfn)) { - col_no <- c("id", "dadid", "momid") - col_all <- colnames(dfn) - col_av <- setdiff(col_all, col_no) - col_sel <- c() - for (col in col_av) { - if (any(!is.na(dfn[[col]]))) { - col_sel <- c(col_sel, col) - } - } - selectInput("families_var_sel", - label = h5("Select Variable to use as families indicator"), - choices = as.list(setNames(col_sel, col_sel)), - selected = col_sel[1] - ) - } else { - NULL - } - }) - - # Families table rendering - output$families_table <- DT::renderDataTable({ - families_table() - }, options = list(paging = FALSE, scrollX = TRUE, - scrollY = "200px", scrollCollapse = TRUE), - rownames = FALSE) - # Family selection - output$family_selector <- renderUI({ - print("Bal: family_sel") - if (!is.null(families_table())) { - fam_nb <- as.numeric(families_table()$FamilyNum) - if (max(fam_nb) > 0) { - numericInput("family_sel", - label = h5(strong("Select family to use")), - value = 1, min = min(fam_nb), max = max(fam_nb)) - } else { - textOutput("No family present (only unconnected individuals)") - } - } else { - NULL - } - }) - - # Select family df - ped_df_fam <- reactive({ - shiny::req(input$family_sel) - shiny::req(ped_df_norm()) - print("Bal: ped_df_fam") - df <- ped_df_norm()[is.na(ped_df_norm()$error)] - if (!is.null(df) & !is.null(input$family_sel) & input$family_sel > 0) { - df[df$family == input$family_sel, ] - } else { - NULL - } - }) - - # Family information - output$family_info_table <- renderTable({ - shiny::req(ped_df_aff()) - print("Bal: family_info_table") - df <- ped_df_aff()$df - if (!is.null(df)) { - base::table(df$avail, df$mods_aff, - useNA = "ifany", - dnn = c("Availability", input$health_var_sel)) %>% - as.data.frame() %>% - tidyr::spread(Availability, Freq) - } else { - NULL - } - }) - output$family_infos_title <- renderText({ - print("Bal: family_infos_title") - if (!is.null(families_table())) { - paste("Health & Availability data representation for family", - input$family_sel) - } else { - NULL - } - }) - - ## Health selection ------------------------ - output$health_var_selector <- renderUI({ - if (!is.null(ped_df_fam())) { - cols_all <- colnames(ped_df_fam()) - selectInput("health_var_sel", - label = h5("Select Variable to use as health indicator"), - choices = as.list(setNames(cols_all, cols_all))) - } else { - NULL - } - }) - output$health_full_scale_box <- renderUI({ - if (!is.null(input$health_var_sel)) { - checkboxInput("health_full_scale", label = "Full scale color", - value = FALSE) - } else { - NULL - } - }) - output$health_threshold_box <- renderUI({ - if (!is.null(input$health_var_sel)) { - if (is.numeric(ped_df_fam()[[input$health_var_sel]])) { - checkboxInput("health_threshold_sup", - label = "Affected are strickly superior to threshold", - value = TRUE) - } else { - NULL - } - } else { - NULL - } - }) - output$health_aff_selector <- renderUI({ - shiny::req(input$health_var_sel) - if (!is.null(input$health_var_sel)) { - health_df <- ped_df_fam() - health_df <- health_df[, input$health_var_sel] - if (length(health_df) != 0) { - if (is.numeric(health_df)) { - min_h <- min(health_df, na.rm = TRUE) - max_h <- max(health_df, na.rm = TRUE) - if (any(is.na(c(min_h, max_h))) | - any(is.infinite(c(min_h, max_h)))) { - h5(paste("No value found for", input$health_var_sel)) - } else { - sliderInput("health_threshold_val", - label = h5(paste("Threshold of", - input$health_var_sel, - "to determine affected individuals")), - sep = "'", - min = min_h, - max = max_h, - value = (max_h + min_h) / 2) - } - } else { - health_var_lev <- levels(as.factor(health_df)) - if (length(health_var_lev) == 0) { - h5(paste("No value found for", input$health_var_sel)) - } - var_to_use <- as.list(setNames(health_var_lev, - health_var_lev)) - shinyWidgets::pickerInput("health_aff_mods", - label = "Selection of affected modalities", - choices = var_to_use, - options = list(`actions-box` = TRUE), - multiple = TRUE, selected = health_var_lev) - } - } else { - NULL - } - } else { - NULL - } - }) - - ## Health affected generation -------------- - ped_df_aff <- shiny::reactive({ - shiny::req(ped_df_fam()) - print("Bal: ped_df_aff") - if (!is.null(ped_df_fam())) { - tryCatch({ - ped_df_aff <- print_console(generate_aff_inds(ped_df_fam(), - col_aff = input$health_var_sel, - mods_aff = input$health_aff_mods, - threshold = input$health_threshold_val, - sup_thres_aff = input$health_threshold_sup), - session) - generate_colors(ped_df_aff, "affected", - keep_full_scale = input$health_full_scale) - }, - error = function(e) { - NULL - }) - } else { - NULL - } - }) - ## Informative individuals selection ------- - #Informative individuals custom selection - output$inf_var_selector <- renderUI({ - if (!is.null(ped_df_aff())) { - selectInput("inf_selected", - label = h5(strong("Select informative individuals")), - choices = list( - "All individuals" = "All", - "Available or Affected" = "AvOrAf", - "Available only" = "Av", - "Affected only" = "Af", - "Available and Affected" = "AvAf", - "Custom" = "Cust"), - selected = "All") - } else { - NULL - } - }) - output$inf_custvar_selector <- renderUI({ - shiny::req(input$inf_selected == "Cust") - df <- ped_df_aff()$df - if (input$inf_selected == "Cust" & !is.null(df)) { - col_present <- colnames(df) - selectInput("inf_custvar_sel", - label = "Select Variable to use to select informative individuals", - choices = as.list(setNames(col_present, col_present))) - } else { - NULL - } - }) - output$inf_custvar_textinput <- renderUI({ - shiny::req(input$inf_selected == "Cust") - if (input$inf_selected == "Cust") { - textAreaInput("inf_custvar_val", label = h5("Custom selection"), - placeholder = "Please enter individuals values separate by a comma") - } else { - NULL - } - }) - #Informative individuals selection - inf_inds_selected <- reactive({ - shiny::req(ped_df_aff()) - print("Bal: inf_inds_selected") - shiny::req(input$inf_selected) - if (input$inf_selected != "Cust") { - return(input$inf_selected) - } - print("Bal: inf_inds_selected custom") - shiny::req(input$inf_custvar_val) - shiny::req(input$inf_custvar_sel) - if (!identical(input$inf_custvar_val, "")) { - inf_custvar_sel <- input$inf_custvar_sel - inf_custvar_val <- unlist(strsplit(input$inf_custvar_val, ",")) - - df <- ped_df_aff()$df - index <- which(df[, inf_custvar_sel] %in% inf_custvar_val) - if (any(is.na(index))) { - showNotification(paste("Values", inf_custvar_val[is.na(index)], - "not present in", inf_custvar_sel)) - NULL - } else { - df$id[index[!is.na(index)]] - } - } else { - showNotification("Custom option selected but no individual id given") - NULL - } - }) - inf_inds_sel_txt <- function() { - isolate({ - if (input$inf_selected == "Cust") { - paste(input$InfCustVariable, "(id ", - paste(inf_inds_selected(), collapse = ","), - ")") - } else { - inf_inds_selected() - } - }) - } - ped_df_inf <- reactive({ - shiny::req(inf_inds_selected()) - shiny::req(input$trim_ped) - shiny::req(input$keep_infos) - shiny::req(ped_df_aff()) - print("Bal: ped_df_inf") - df <- ped_df_aff()$df - inf_inds <- inf_inds_selected() - - if (!is.null(df) & !any(is.na(inf_inds))) { - tryCatch({ - df_from_inf <- select_from_inf(df, - inf_inds = inf_inds, kin_max = input$kin_max) - df_from_inf <- num_child(df_from_inf, - relation = rel_df_norm()$norm) - if (input$trim_ped) { - df_from_inf$useful <- useful_inds(df_from_inf, inf_inds, - input$keep_infos) - df_from_inf <- fix_parents.data.frame(df_from_inf, - delete = FALSE, filter = "useful") - df_from_inf <- fix_parents.data.frame(df = df_from_inf, - delete = TRUE) - } - df_from_inf - }, - error = function(e) { - message(paste("Error in ped_df_inf", e)) - NULL - }) - } else { - NULL - } - }) - ## Subfamily selection --------------------- - subfamilies_table <- reactive({ - print("Bal: subfamilies_table") - shiny::req(ped_df_inf()) - ped_df <- ped_df_inf() - if (!is.null(ped_df) & !is.null(input$families_var_sel)) { - get_families_table(ped_df, input$families_var_sel) - } else { - NULL - } - }) - output$subfamilies_table <- DT::renderDataTable({ - subfamilies_table() - }, options = list(paging = FALSE, scrollX = TRUE, - scrollY = "200px", scrollCollapse = TRUE), - rownames = FALSE) - output$subfamily_selector <- renderUI({ - print("Bal: subfamily_sel") - if (!is.null(subfamilies_table())) { - fam_nb <- as.numeric(subfamilies_table()$FamilyNum) - if (max(fam_nb) > 0) { - numericInput("subfamily_sel", - label = h5(strong("Select subfamily to use")), - value = 1, min = min(fam_nb), max = max(fam_nb)) - } else { - textOutput("No family present (only unconnected individuals)") - } - } else { - NULL - } - }) - - ## Final ped_df --------------------------- - ped_df_final <- reactive({ - print("Bal: ped_df_final") - shiny::req(ped_df_inf()) - shiny::req(input$subfamily_sel) - ped_df <- ped_df_inf() - if (!is.null(ped_df) & !is.null(input$subfamily_sel)) { - ped_df <- ped_df[ped_df$family == input$subfamily_sel, ] - } - ped_df - }) - - ped_gens <- reactive({ - ped <- with(ped_df_final(), pedigree(id, dadid, momid, sex, affected)) - align(ped)$n - }) - - ## Plotting ------------------------------- - plotped_obj <- plot_ped_server( - "plot_ped", ped_df_final, get_title_app(short = FALSE)) - - output$legend_plot <- renderPlot({ - shiny::req(ped_df_aff()) - cols <- ped_df_aff()$scales - legend <- create_legend(cols, size = 0.8) - gridExtra::grid.arrange(legend$A, legend$B, ncol = 2) - }, height = 150) - - ## Download pedigree----------------------- - get_title_app <- function(short = FALSE) { - df <- families_table() - get_title( - input$family_sel, input$subfamily_sel, - input$families_var_sel, - df[df$FamilyNum == input$family_sel, "Major mod"], - inf_inds_sel_txt(), input$kin_max, - input$trim_ped, input$keep_infos, - nrow(ped_df_final()), - short_title = short) - } - data_download_server("plot_data_dwnl", ped_df_final, - filename = get_title_app(short = TRUE), label = "Subfamily data", - helper = FALSE) - - shiny::observeEvent(ped_gens(), { - plot_download_server( - "plot_ped_dwnl", plotped_obj, - filename = get_title_app(short = TRUE), label = "Subfamily plot", - width = max(c(ped_gens() * 80, 500)), - height = max(c(length(ped_gens()) * 150, 500))) - }) - - ## End ------------------------------------ - if (!interactive()) { - session$onSessionEnded(function() { - shiny::stopApp() - q("no") - }) - } -}) diff --git a/devel/idea/app/test.R b/devel/idea/app/test.R deleted file mode 100644 index 866e70e7..00000000 --- a/devel/idea/app/test.R +++ /dev/null @@ -1,78 +0,0 @@ -setwd("R/") -library(devtools) -load_all() -library(shiny) -library(dplyr) -library(ggplot2) -source("app/data_management.R") -source("app/data_import.R") -source("app/data_col_sel.R") -source("app/data_download.R") -source("app/plot_ped.R") -source("app/plot_download.R") -source("app/utils.R") -source("class/pedigree.R") -source("class/validity.R") -source("class/Pedigree_class.R") - - -df <- read.csv("C:/Users/llenezet/Documents/EnCours/pedigreecreation/PedigreeApp/data/TestPedigree2.csv", sep = ";") -summary(df) - -ped_df <- df -object <- pedigree(ped_df) -class(object) -object$ped -object[["ped"]] -object[["ped"]][1, "id"] <- 9 - -object$ped[1, "id"] <- "12" - -summary(object) -df <- norm_ped(df) - -data(sampleped) -df <- sampleped -df$avail -df[, c("indId", "fatherId", "motherId", - "gender", "available")] <- df[, c("id", "father", "mother", - "sex", "avail")] -df$available -df <- norm_ped(df)[[1]] -df$avail -summary(df) -df$aff <- df$avail -df[1:4, "gender"] <- NA -df[10:13, "avail"] <- NA -fam_df <- generate_aff_inds(df, "gender", threshold = 1.5, sup_thres_aff = TRUE) - -fam_df - -ped <- with(fam_df, pedigree(id, dadid, momid, sex, fam_df[affected])) -ped$affected -legendPlot(ped, affected.label = "gender") -ncol(ped$affected) -ped$affected - -data(minnbreast) -df <- minnbreast -df[, c("indId", "fatherId", "motherId", - "gender")] <- df[, c("id", "fatherid", "motherid", - "sex")] -df$bcp <- as.numeric(df$bcpc) -df <- check_ped(df) -df <- generate_aff_inds(df$norm, - col_aff = "cancer", threshold = 0, sup_thres_aff = TRUE) -df <- generate_colors(df, "affected")$df -df <- select_from_inf(df, c(1, 2), 3) -df <- df[df$family == 1, ] - -summary(df) -summary(df$affected) -ped <- pedigree(df$id, df$dadid, df$momid, df$sex, as.matrix(df[c("affected", "bcpc")])) -nb_ind_gen <- align(ped)$n -a <- plot(ped, ggplot_gen=T) -a$ggplot -plot_ped <- ped_plot(df, cex_plot = 0.5, mar = c(0.5, 0.5, 0.5, 0.5), - psize = c(2, length(nb_ind_gen)), - to_plotly = TRUE, title = "Test it is") \ No newline at end of file diff --git a/devel/idea/app/ui.R b/devel/idea/app/ui.R deleted file mode 100644 index 09c0a5b5..00000000 --- a/devel/idea/app/ui.R +++ /dev/null @@ -1,139 +0,0 @@ -usethis::use_package("shiny") -usethis::use_package("bootstrap") - -# Define UI for application that draws a histogram -shiny::shinyUI(shiny::fluidPage( - ## Configuration ------------------------------- - shinyjs::useShinyjs(), - tags$head( - tags$style(HTML("hr {border-top: 1px solid #000000;} - .navigationBar{background-color:#0001;height:300px} - #console{max-height: 500px;overflow-y:auto;} - #legendToPlot{max-height:150px};")), - tags$script( - 'Shiny.addCustomMessageHandler("scrollCallback", - function(color) { - var objDiv = document.getElementById("console"); - objDiv.scrollTop = objDiv.scrollHeight; - } - ); - var dimension = [0, 0]; - $(document).on("shiny:connected", function(e) { - dimension[0] = window.innerWidth; - dimension[1] = window.innerHeight; - Shiny.onInputChange("dimension", dimension); - }); - $(window).resize(function(e) { - dimension[0] = window.innerWidth; - dimension[1] = window.innerHeight; - Shiny.onInputChange("dimension", dimension); - }); - ' - ) - ), - ## Application title -------------------------- - fluidRow( - column(12, align = "center", - titlePanel("Pedigree creation") - ) - ), - ## Navigation bar ----------------------------- - fluidRow(title = "Navigation", class = "navigationBar", - ## ___Data and Family selection ------------- - column(2, - data_import_ui(id = "data_ped_import")), - column(6, - column(6, data_col_sel_ui(id = "data_ped_col_sel1")), - column(6, data_col_sel_ui(id = "data_ped_col_sel2")) - ), - column(2, - data_import_ui(id = "data_rel_import")), - column(2, - data_col_sel_ui(id = "data_rel_col_sel")) - ), - hr(), - ## Errors download ---------------------------- - fluidRow(title = "Errors download", - align = "center", - h3("Download errors"), - column(6, - h5(strong("Pedigree data errors")), - data_download_ui(id = "ped_errors")), - column(6, align = "center", - h5(strong("Relationship data errors")), - data_download_ui(id = "rel_errors")) - ), - hr(), - ## Family and Health selection --------------------------- - fluidRow(title = "Family and Health selection", - column(4, align = "center", - h3("Family selection"), - uiOutput("families_var_selector"), - fluidRow( - DT::dataTableOutput("families_table", width = '500px') - ), - uiOutput("family_selector")), - column(4, align = "center", - h3("Health selection"), - uiOutput("health_var_selector"), - uiOutput("health_full_scale_box"), - uiOutput("health_threshold_box"), - uiOutput("health_aff_selector")), - column(4, align = "center", - h3("Family information"), - textOutput("family_infos_title"), - tableOutput("family_info_table")) - ), - hr(), - ## Informative individuals selection ---------------------- - fluidRow( - column(4, align = "center", - h3("Informative individuals"), - column(6, - uiOutput("inf_var_selector"), - ), - column(6, - uiOutput("inf_custvar_selector"), - uiOutput("inf_custvar_textinput") - ) - ), - ## Filtering options ------------------------ - column(4, align = "center", - h3("Filtering options"), - column(6, - numericInput("kin_max", - label = h5(strong("Max kinship")), - value = 3, - min = 1) - ), - column(6, align = "left", - checkboxInput("trim_ped", - label = "Trim non informative parents", - value = TRUE), - checkboxInput("keep_infos", - label = "When trimmed, keep individuals with infos", - value = TRUE) - ) - ), - ## Subfamily selection ------------------------- - column(4, align = "center", - h3("Subfamily selection"), - fluidRow(DT::dataTableOutput("subfamilies_table", width = '500px')), - uiOutput("subfamily_selector") - ) - ), - hr(), - ## Plotting pedigree ---------------------------- - fluidRow( - plot_ped_ui("plot_ped"), - plotOutput("legend_plot", height = "50px"), - data_download_ui("plot_data_dwnl"), - plot_download_ui("plot_ped_dwnl") - ), - - ## Console ------------------------------------------------ - fluidRow( - pre(id = "console") - ) - -)) diff --git a/devel/idea/app/utils.R b/devel/idea/app/utils.R deleted file mode 100644 index 26598675..00000000 --- a/devel/idea/app/utils.R +++ /dev/null @@ -1,13 +0,0 @@ -print_console <- function(expr, session) { - withCallingHandlers(results <- expr, - message = function(m) { - shinyjs::html("console", m$message, TRUE) - }, error = function(e) { - shinyjs::html("console", e$message, TRUE) - }, warning = function(w) { - shinyjs::html("console", w$message, TRUE) - }) - session$sendCustomMessage(type = "scrollCallback", 1) - results -} -TRUE diff --git a/devel/idea/debugging.R b/devel/idea/debugging.R deleted file mode 100644 index 16d8eb17..00000000 --- a/devel/idea/debugging.R +++ /dev/null @@ -1,10 +0,0 @@ -load_all() -ped <- Pedigree(data.frame( - id = character(), - dadid = character(), - momid = character(), - sex = numeric(), - family = character(), - avail = numeric(), - affection = numeric() -)) diff --git a/devel/idea/fscore.pedigree.R b/devel/idea/fscore.pedigree.R deleted file mode 100644 index 38f74ce4..00000000 --- a/devel/idea/fscore.pedigree.R +++ /dev/null @@ -1,96 +0,0 @@ -# TODO add documentation - -#' Founder score -#' -#' @description -#' Attempt at a founder score -#' -#' @param ped -#' -#' @return -#' -#' @examples -#' @keywords -#' @export -fscore.pedigree <- function(ped) { - n <- length(ped$depth) - nid <- 1:n - dad <- match(ped$dadid, ped$id, nomatch = 0) - mom <- match(ped$momid, ped$id, nomatch = 0) - sex <- 1 * (ped$sex == "female") - level <- ped$depth + 1 - - - pfun1 <- function(id, dad, mom, sex) { - # This function returns a list of all founders above a given id - if (dad[id] == 0 && mom[id] == 0) { - # I am a founder - if (sex[id] == 1) { - return(id) - } else { - return(NULL) - } - } else { - return(c(Recall(dad[id], dad, mom, sex), - Recall(mom[id], dad, mom, sex))) - } - } - - # Now, find all marriages (This code is essentially the same as that in - # align.pedigree) Mothers are row 1, fathers row 2, each column a spouse - # pair Either having children, having a hint, or a spousal relationship - # gets you on the list (that is, any of the things that would cause this - # marriage to part of the plotted pedigree). Start with a hashlist: - # fatherid * max(id) + mother - hash <- (dad * n + mom)[mom > 0 & dad > 0] - sorder <- ped$hints[, 2] - temp1 <- abs(sorder) - temp1 <- ifelse(ped$sex == "male", (1:n) * n + temp1, 1:n + n * temp1) - hash <- c(hash, temp1[sorder != 0]) # those with a spouse hint - if (!is.null(ped$relation) && any(ped$relation[, 3] == 4)) { - who <- (ped$relation[, 3] == 4) # add spouses from relationship list - indx <- ped$relation[who, 1] # id of the first spouse - temp1 <- ifelse(ped$sex[indx] == "male", - n * indx + ped$relation[who, 2], - indx + n * ped$relation[who, 2]) - hash <- c(temp1, hash) # being first is important -- it controls plot - # order per the documentation - } - - hash <- unique(hash) # eliminate duplicates - hash <- hash - 1 # change to range of 0 to n-1 (for %%) - spouselist <- rbind(1 + hash %% n, floor(hash / n)) # uncompress it - temp <- matrix(mom[spouselist] + dad[spouselist], nrow = 2) - spouselist <- spouselist[, colSums(temp) > 0] # toss founders off list - - # Create the founder sets for each spouse pair It will be a list of npair - # elements, each of which is a list containing 2 vectors - npair <- ncol(spouselist) - flist <- vector("list", npair) - for (i in 1:npair) { - flist[[i]] <- list(f1 = pfun1(spouselist[1, i], dad, mom, sex), - f2 = pfun1(spouselist[2, i], dad, mom, sex)) - } - - pfun2 <- function(flist, ord) { - # This function computes the badness score for the founders of each - # parental pair, along with a report of which of the 4 terms is the - # 'worst'. - tfun <- function(x, ord) { - t1 <- ord[x[[1]]] - t2 <- ord[x[[2]]] - c(sum(t2 < max(t1)), sum(t1 > min(t2)), - sum(t1 < max(t2)), sum(t2 > min(t1))) - } - temp <- matrix(unlist(lapply(flist, tfun, ord = ord)), nrow = 4) - tempMin <- apply(temp, 2, min) - tempWhich <- apply(temp == matrix(rep(tempMin, each = 4), nrow = 4), - 2, function(x) min(c(which(x)))) - cbind(tempMin, tempWhich) - } - - temp <- pfun2(flist, 1:n) - browser() - npair -} -TRUE diff --git a/devel/idea/legendPlot.R b/devel/idea/legendPlot.R deleted file mode 100644 index b11c08d8..00000000 --- a/devel/idea/legendPlot.R +++ /dev/null @@ -1,128 +0,0 @@ -#' Legend Pedigree Plot -#' -#' @description -#' Pedigree plot with ready-made legend along the bottom of the page to -#' represent colors and affection statuses -#' -#' @param x Pedigree data frame with ped (pedigree id), id (id of individual), -#' father (id of father), mother (id of mother), sex, affected (affection -#' status), and avail (DNA availability). -#' @param id Optional, a character string to replace the correspinding id for -#' persons in the pedigree -#' @param affected A variable indicating affection status. A multi-column -#' matrix can be used to give the status with respect to multiple traits. -#' Logical, factor, and integer types are converted to 0/1 representing -#' unaffected and affected, respectively. NAs are considered missing. -#' @param affected.label Set labels for affection statuses -#' @param col Colors for the plot symbol for each individual -#' @param col.label Named vector, with elements matching the unique color -#' codes, the names are the labels used in the legend. -#' @param symbolsize Size of symbols (circle/square/triangle). Default is 1.0 -#' @param cex Character expansion size for labels and ids. Default is 1.0 -#' @param ... Character expansion size for labels and ids. Default is 1.0 -#' -#' @return A pedigree plot with a legend -#' -#' @examples -#' -#' data(sampleped) -#' pedAll <- with(sampleped, pedigree(id, father, mother, sex, -#' affected = cbind(affected, avail), famid = ped -#' )) -#' ped1 <- pedAll["1"] -#' legendPlot(ped1, affected.label = c("cancer", "available")) -#' -#' @author Jason Sinnwell, code contributed by Sara Achenbach -#' @seealso \code{\link{pedigree}}, \code{\link{plot.pedigree}} -#' @export -legendPlot <- function(x, id = x$id, affected = x$affected, - affected.label = NULL, col = 1, col.label = NULL, - symbolsize = .75, cex = .5, ...) { - ## Need to deal with real char strings. Set stringsAsFactors back at end - - ## check colors - if (any(col %in% 0 | is.na(col))) { - warning("missing or zero-value colors exist, will show blank symbol") - } - - ## Pedigree plot with dynamic legend of all affecteds on the bottom - if (length(id) != nrow(as.data.frame(x))) { - warning("id not equal to number in pedigree; id set to ped$id\n") - id <- x$id - } - ucols <- sort(unique(col)) ## col[!duplicated(col)] - if (length(ucols) > 1) { - if (!is.null(col.label) && length(col.label) < length(unique(col))) { - warning("col.label not equal to unique number of colors; ignoring colors") - col <- 1 - col.label <- NULL - legend.col <- 1 - } - } - ## if colors are strings, match by names, otherwise, match by index - ## not sure if colors are hex codes... - if (is.numeric(ucols)) { - colorLabels <- col.label[ucols] - } else { - colorLabels <- col.label[match(ucols, names(col.label))] - } - if (!is.null(affected)) { - if (is.null(affected.label)) { - affected.label <- colnames(affected) - } - if (length(affected.label) != ncol(affected)) { - stop("affected.label not equal to the number of affected statuses.\n") - } - } - - ## Legend Configuration, a nuclear family with a sibship of - ## all colors/affection statuses. Parents will be plotted over - if (!(ncol(affected) < 2 & length(col.label) < 2)) { - legdf <- rbind.data.frame( - c(1, 0, 0, 1, ""), # father, required - c(2, 0, 0, 2, "") - ) # mother, required, - legend.col <- c(1, 1) - for (j in 1:length(affected.label)) { - legdf <- rbind.data.frame(legdf, c(2 + j, 1, 2, 2, affected.label[j])) - legend.col <- c(legend.col, ucols[1]) - } - - legaff <- rbind(rep(0, ncol(affected)), rep(0, ncol(affected)), diag(1, length(affected.label))) - if (length(colorLabels) > 1) { ## color labels if more than 1 color - for (k in 1:length(colorLabels)) { - legdf <- rbind.data.frame(legdf, c(2 + j + k, 1, 2, 2, colorLabels[k])) - legend.col <- c(legend.col, ucols[k]) - legaff <- rbind(legaff, rep(0, length(affected.label))) - } - } - names(legdf) <- c("id", "dadid", "momid", "sex", "idlabel") - legped <- with(legdf, pedigree(as.numeric(id), as.numeric(dadid), as.numeric(momid), - as.numeric(sex), - affected = legaff - )) - - ## plot the legend nuclear family on the bottom - par(mar = c(0, 2, 2, 2), oma = c(0, 1, 0, 1)) - plot(legped, - id = legdf$idlabel, avail = legend.col, - density = rep(-1, ncol(legaff)), angle = rep(90, ncol(legaff)), - symbolsize = symbolsize, cex = cex, packed = TRUE, mar = c(0, 2, 2, 2), ... - ) - # fig=c(0,1,0,1/15),new=FALSE,keep_par=TRUE, ...) - - ## DELETE PARENTS FROM LEGEND KEY (or write over) - polygon(y = c(-1, -1, 1.999, 1.999), x = c(-1, 8, 8, -1), col = "white", border = NA) - ## End Legend Configuration - - ## BREAKING UP AREA TO ADD TRAITS - par(new = TRUE) # mar=c(4.5,1,1,1)) - } - - ## PLOTTING THE ACTUAL PEDIGREE FOR THIS FAMILY - plot(x, - density = c(-1, -1, -1, -1), angle = c(90, 90, 90, 90), - id = id, symbolsize = symbolsize, cex = cex, packed = FALSE, - keep_par = TRUE, fig = c(0, 1, 1 / 50, 1), new = TRUE, mar = c(3.5, 1, 1.5, 1), ... - ) -} diff --git a/devel/idea/pedigree.legend.R b/devel/idea/pedigree.legend.R deleted file mode 100644 index c4e18ef8..00000000 --- a/devel/idea/pedigree.legend.R +++ /dev/null @@ -1,176 +0,0 @@ -#' Plot a legend for a pedigree -#' -#' @description -#' Circular legend for a pedigree as a key to the affection statuses. -#' -#' @param ped Pedigree data frame with ped (pedigree id), id (id of -#' individual), father (id of father), mother (id of mother), sex, affected -#' (affection status), and avail (DNA availability). -#' @param labels names for the affected indicators -#' @param edges Number of edges for each polygon. Higher numbers give better -#' resolution for the circle -#' @param radius radius (inches) of the circle -#' @param location similar to how the location of a base-R legend is given, -#' used only if new=TRUE. A character string indicating which of the four -#' corners to plot the legend, given by 'bottomright', 'bottomleft', 'topleft', -#' or 'topright' or a vector of coordinates (numerical vector in the form x, y). -#' @param new Logical. If TRUE, plot the legend on the current plot. Otherwise, -#' plot on a separate plot. -#' @param density Density of lines shaded in sections of the circle. These -#' match the density settings for the plot.pedigree function. -#' @param angle The angle at which lines are shaded in sections of the circle. -#' These match the angles for the plot.pedigree function. -#' @param ... optional parameters for the plot function that apply to text -#' -#' @return Plot the pedigree legend to the current plot -#' @examples -#' -#' data(sampleped) -#' fam1 <- sampleped[sampleped$ped == 1, ] -#' ped1 <- with(fam1, pedigree( -#' id, father, mother, sex, -#' affected = cbind(avail, affected) -#' )) -#' plot(ped1) -#' pedigree.legend(ped1, location = 'bottomright', radius = 0.8) -#' pedigree.legend(ped1, location = 'topleft', radius = 0.6, cex = 1.2) -#' pedigree.legend(ped1, new = FALSE) -#' -#' @author Jason Sinnwell -#' @seealso \\code{\\link{pedigree}}, \\code{\\link{plot.pedigree}} -#' @export -pedigree.legend <- function(ped, labels = dimnames(ped$affected)[[2]], - edges = 200, radius = NULL, location = "bottomright", new = TRUE, - density = c(-1, 35, 65, 20), angle = c(90, 65, 40, 0), ...) { - naff <- max(ncol(ped$affected), 1) - - x <- rep(1, naff) - - # Defaults for plotting on separate page: start at the top, always - # counter-clockwise, black/white - initAngle <- 90 - twopi <- 2 * pi - col <- 1 - - defaultLabels <- paste("affected-", 1:naff, sep = "") - if (is.null(labels)) - labels <- defaultLabels - - ## assign labels to those w/ zero-length label - whichNoLab <- which(nchar(labels) < 1) - if (length(whichNoLab)) { - labels[whichNoLab] <- paste("affected-", whichNoLab, sep = "") - } - - - x <- c(0, cumsum(x)/sum(x)) - dx <- diff(x) - nx <- length(dx) - ## settings for plotting on a new page - if (!new) { - plot.new() - - pin <- par("pin") - # radius, xylim, center, line-lengths set to defaults of pie() - radius <- 1 - xlim <- ylim <- c(-1, 1) - center <- c(0, 0) - llen <- 0.05 - - if (pin[1L] > pin[2L]) { - xlim <- (pin[1L] / pin[2L]) * xlim - } else { - ylim <- (pin[2L] / pin[1L]) * ylim - } - - plot.window(xlim, ylim, "", asp = 1) - } else { - ## Settings to add to pedigree plot y-axis is flipped, so adjust angle - ## and rotation - initAngle <- -1 * initAngle - twopi <- -1 * twopi - - ## track usr xy limits. With asp=1, it re-scales to have aspect ratio - ## 1:1 - usr.orig <- par("usr") - plot.window(xlim = usr.orig[1:2], ylim = usr.orig[3:4], "", asp = 1) - usr.asp1 <- par("usr") - - ## also decide on good center/radius if not given - if (is.null(radius)) { - radius <- 0.5 - } - - ## set line lengths - llen <- radius * 0.15 - - ## get center of pie chart for coded - pctusr <- 0.1 * abs(diff(usr.asp1[3:4])) - - if (is.character(location)) { - center <- switch(location, - bottomright = c(max(usr.asp1[1:2]) - pctusr, - max(usr.asp1[3:4]) - pctusr), - topright = c(max(usr.asp1[1:2]) - pctusr, - min(usr.asp1[3:4]) + pctusr), - bottomleft = c(min(usr.asp1[1:2]) + pctusr, - max(usr.asp1[3:4]) - pctusr), - topleft = c(min(usr.asp1[1:2]) + pctusr, - min(usr.asp1[3:4]) + pctusr)) - } else if (is.numeric(location) && length(location) == 2) { - center <- c(location[1], location[2]) - } else { - stop(paste("Invalid location format:", - "either string or numerical vetor of 2")) - } - - } - - col <- rep(col, length.out = nx) - border <- rep(1, length.out = nx) - lty <- rep(1, length.out = nx) - angle <- rep(angle, length.out = nx) - density <- rep(density, length.out = nx) - - t2xy <- function(t) { - t2p <- twopi * t + initAngle * pi / 180 - list(x = radius * cos(t2p), y = radius * sin(t2p)) - } - for (i in 1L:nx) { - n <- max(2, floor(edges * dx[i])) - plgn <- t2xy(seq.int(x[i], x[i + 1], length.out = n)) - plgn$x <- plgn$x + center[1] - plgn$y <- plgn$y + center[2] - - polygon(c(plgn$x, center[1]), c(plgn$y, center[2]), - density = density[i], angle = angle[i], - border = border[i], col = col[i], lty = lty[i]) - - plgn <- t2xy(mean(x[i + 0:1])) - if (new) { - ## not centered at 0,0, so added center to x,y - plgn$x <- plgn$x + center[1] - plgn$y <- center[2] + ifelse(new, plgn$y, -1 * plgn$y) - } - - lab <- as.character(labels[i]) - if (!is.na(lab) && nzchar(lab)) { - ## put lines - lines( - x = c(plgn$x, plgn$x + ifelse(plgn$x < center[1], - -1 * llen, llen)), - y = c(plgn$y, plgn$y + ifelse(plgn$y < center[2], - -1 * llen, llen))) - - ## put text just beyond line-length away from pie - text( - x = plgn$x + ifelse(plgn$x < center[1], - -1.2 * llen, 1.2 * llen), - y = plgn$y + ifelse(plgn$y < center[2], - -1.2 * llen, 1.2 * llen), labels[i], - xpd = TRUE, adj = ifelse(plgn$x < center[1], 1, 0), ...) - } - } - invisible(NULL) -} -TRUE diff --git a/devel/idea/pedigree2Class.R b/devel/idea/pedigree2Class.R deleted file mode 100644 index e69de29b..00000000 diff --git a/devel/idea/utils.R b/devel/idea/utils.R deleted file mode 100644 index e7c48763..00000000 --- a/devel/idea/utils.R +++ /dev/null @@ -1,113 +0,0 @@ -#' Variable to factor -#' -#' @description Transform a variable into a factor -#' -#' @details Transform a numeric or string variable into a factor. -#' In the case of a numerical variable the threshold is used to separate -#' the variable using the `cut` function. -#' -#' @param var The variable to be transformed -#' @param threshold The threshold to be used to separate the variable -#' -#' @return a factor vector containing the transformed variable -#' -#' @examples -#' var <- runif(10) -#' var_to_factor(var, threshold = 0.5) -#' -#' @export -var_to_factor <- function(var, threshold = NULL) { - if (!is.numeric(var)) { - var_fact <- addNA(droplevels(as.factor(var)), ifany = TRUE) - } else { - if (is.null(threshold)) { - stop("No threshold given") - } - labels <- NULL - if (length(threshold) == 1) { - labels <- c(paste("Inf to", threshold), paste("Sup to", threshold)) - } - var_fact <- cut( - var, c(min(var, na.rm = TRUE), - threshold, max(var, na.rm = TRUE) - ), label = labels, include.lowest = TRUE - ) - var_fact <- addNA(var_fact, ifany = TRUE) - } - var_fact -} - -#' Data frame to contingency table -#' -#' @description Summarise two variables in a contingency table -#' -#' @details Proccess two variable from a dataframe in a contingency -#' table depending on the variables selected and the thresholds in case the -#' variable is numerical. To do so the variables are transformed to factors. -#' -#' @param df Dataframe containing the family informations -#' @param var1,var2 First and second column variable to select -#' @param threshold1,threshold2 Thresholds to apply to `var1` and `var2` -#' -#' @examples -#' var1 <- runif(10) -#' var2 <- runif(10) -#' df <- data.frame(var1, var2) -#' df_cont_table(df, 'var1', 0.5, 'var2', c(0.25, 0.5, 0.75)) -#' df_cont_table(df, 'var1', 0.5) -#' -#' @export -df_cont_table <- function( - df, var1, threshold1 = NULL, var2 = NULL, threshold2 = NULL -) { - if (!var1 %in% colnames(df)) { - stop(paste0(var1, " is not present in the dataframe", collapse = " ")) - } - if (!var2 %in% colnames(df) && !is.null(var2)) { - stop(paste0(var2, " is not present in the dataframe", collapse = " ")) - } - var1_fact <- var_to_factor(df[[var1]], threshold = threshold1) - if (is.null(var2)) { - cont_table <- as.data.frame(table(var1_fact)) - colnames(cont_table) <- c(var1, "Freq") - } else { - var2_fact <- var_to_factor(df[[var2]], threshold = threshold2) - cont_table <- as.data.frame(table(var1_fact, var2_fact)) - colnames(cont_table) <- c(var1, var2, "Freq") - } - cont_table -} - - -test_that("var_to_factor works", { - var <- c(1, NA, 4, 1.2, -3) - expect_error(var_to_factor(var)) - expect_snapshot(var_to_factor(var, threshold = 1)) - expect_snapshot(var_to_factor(var, threshold = c(0, 1))) - expect_snapshot(var_to_factor(c("A", "B", "A", "C"))) -}) - -test_that("df_cont_table", { - set.seed(10) - var1 <- runif(10) - var2 <- runif(10) - df <- data.frame(var1, var2) - expect_snapshot(df_cont_table(df, "var1", 0.5, "var2", c(0.25, 0.5, 0.75))) - expect_snapshot(df_cont_table(df, "var1", 0.5)) - expect_error(df_cont_table(df, "var3")) - expect_error(df_cont_table(df, "var1", 0.5, "var3")) -}) - -#' @importFrom gridGraphics grid.echo -#' @importFrom grid grid.grab -NULL - -#' Register the plot -#' -#' Use the grid.echo() and grid.grab() functions to register the plot. -#' -#' @export -grab_grob <- function() { - grid.echo() - grid.grab() -} \ No newline at end of file diff --git a/devel/noweb/MAINTAIN.steps b/devel/noweb/MAINTAIN.steps deleted file mode 100644 index 30b2a309..00000000 --- a/devel/noweb/MAINTAIN.steps +++ /dev/null @@ -1,86 +0,0 @@ - -Beth and Jason, - I've put together a new release of the pedigree software. - -1. It's managed using the 'mercurial' source code control system. This -is a test of this package to see what we think of it. Since it is not -installed globally, the easiest thing is to add - alias hg='/people/biostat2/therneau/util/mercurial-1.5/hg' -to your .bash_profile. You might also want to copy and edit -~therneau/.hgrc to set default name and editor. The latter is what is -pulled up automatically for your commit messages. - - Now find a location you like, and type -hg clone /people/biostat/genet/gplus/genet/rpack/kinship kinship - -This creates a local copy for yourself. You can change files, test -them, whatever -- similar to svn or cvs - hg add filename - hg commit - hg help - etc - -You have a complete local repository, and all the commands act on that. -At any time you can do - hg pull -to pull in changes found in Jason's central copy and - hg push -to make your changes visible there. But you can do local unpublished -changes as long as you like. - -2. The code was created using noweb. Again, it's not locally installed. -The shell script ~therneau/bin/noweb needs to be somewhere that you can -find it. I'm not sure an alias will work since it is run out of -Makefiles. - Nearly everything is in the inst/noweb subdirectory. - "make all.pdf" to get the human readable documentation (50+ pages) - "make fun" to populate the R/ directory with functions -The .Rnw files are what you edit, they are the true source. Emacs -understands them. A small number of files are "stand alone" in the R/ -directory -- they are what is left after a "make clean". - - I have an R version of noweb 2/3 written, and it will be incorportated -into Sweave sometime in the future (personal correspondence). That will -remove the need for the stand alone package. - -3. The code uses the quadprog package to sovle the tree alignment -problem. I have a local copy in ~therneau/Rlib, but this should be -added to our global R library. - -4. How to execute: You two can decide whether to make this available as -a library. - - When debugging: I make some changes in .Rnw, run 'make fun' there. -Then in the tests directory I have a file 'setup.s' which sources in all -the .R files. - -5. Changes - a. The pedigree command now can create a single object with multiple -families. See tests/ped71.r Documentation needs to be updated. The -makekinship function accepts pedigreeList objects. - b. The plot.pedigree function tries to make boxes be 2.5 characters -wide. Hence they scale with cex along with the text. The symbolsize -argument multiplies this. - c. The autohint function has gotton smarter - I hope. (I can say with -certainty that it is different.) Pedigrees do not have hints attached -to them unless you add them, see tests/ped3.r We need to try out a -several pedigrees and see how it works. - d. I think I have the textsize/boxsize/margins issues cleaned up so -that small pedigrees won't get chopped off. - e. A subset arguement to plot.pedigree does not yet work correctly. - f. The affected matrix can have as many columns as you want. - -6. I was moving examples in the 'testped' directory over to 'tests' one -by one. - - -7. For Jason with the master copy to pull from another checked out -copy (Martha's), issue this command: - - hg pull /people/biostat7/m056948/consult/pacgene/pedigrees/kinship2 - - hg merge - - hg commit - - diff --git a/devel/noweb/Makefile b/devel/noweb/Makefile deleted file mode 100644 index 980df518..00000000 --- a/devel/noweb/Makefile +++ /dev/null @@ -1,73 +0,0 @@ -PARTS = pedigree.Rnw \ - kinship.Rnw \ - align.Rnw \ - align2.Rnw \ - plot.Rnw \ - pedigree.shrink.Rnw \ - checks.Rnw - -SFUN = align.pedigree.R\ - alignped1.R \ - alignped2.R \ - alignped3.R \ - alignped4.R \ - autohint.R \ - check.hint.R \ - familycheck.R \ - kinship.R \ - kindepth.R \ - makekinship.R \ - pedigree.R \ - plot.pedigree.R \ - pedigree.legend.R \ - print.pedigree.R \ - as.data.frame.pedigree.R \ - ped2df.R \ - pedigree.shrink.R \ - bit_size.R \ - pedigree.trim.R \ - findUnavailable.R \ - findAvailNonInform.R \ - findAvailAffected.R \ - print.pedigree.shrink.R \ - pedigree.shrink.minor.R \ - plot.pedigree.shrink.R \ - printBanner.R \ - pedigree.unrelated.R - - -RDIR = ../R - -all.pdf: all.tex noweb.sty - pdflatex all - - -all.nw: $(PARTS) - cat $(PARTS) > all.nw - echo "\\end{document}" >> all.nw - -all.tex: all.nw - echo "library(noweb); noweave('all.nw')" | R --slave - -RFUN = $(SFUN:%=$(RDIR)/%) - -lfun: $(SFUN) -fun: all.nw $(RFUN) - -$(SFUN): all.nw -$(RFUN): all.nw - -%.R: - echo "# Automatically generated from all.nw using noweb" > $@ - echo "source('noweb.R'); print(notangle(nwread('all.nw'), target='$(*F)'), file='zz')" | R --vanilla --slave - cat zz >> $@ - rm zz -# notangle -R$(*F) all.nw >> $@ - -clean: - -rm all.nw all.log all.aux all.toc all.tex - -rm $(RFUN) - -noweb.sty: - echo 'library(noweb); data(noweb); cat(noweb.sty, sep="\n", file="noweb.sty")' | R --slave - diff --git a/devel/noweb/align.txt b/devel/noweb/align.txt deleted file mode 100644 index d5c36201..00000000 --- a/devel/noweb/align.txt +++ /dev/null @@ -1,752 +0,0 @@ -\section{Pedigree alignment} -An \emph{aligned} pedigree is an object that contains a pedigree along -with a set of information that allows for pretty plotting. -This inormation consists of two parts: -a set of vertical and horizontal plotting coordinates along with the -identifier of the subject to be plotted at each position, -and a list of connections to be made between parent/child, spouse/spouse, -and twin/twin. -Creating this aligment turned out to be one of the more difficult parts -of the project, and is the area where significant further work could be -done. -All the routines in this section completely ignore the [[id]] component -of a pedigree; everyone is indexed solely by their row number in the object. - -\subsection{Hints} - -The first part of the work has to do with a [[hints]] list for each -pedigree. It consists of 3 parts: -\begin{itemize} - \item The left to right order in which founders should be processed. - \item The order in which siblings should be listed within a family. - \item For selected spouse pairs, who is on the left/right, and which of the - two should be the anchor, i.e., determine where the marriage is plotted. - \end{itemize} -The default starting values for all of these are simple: founders are -processed in the order in which they appear in the data set, -children appear in the order they are found in the data set, -husbands are to the left of their wives, and a marriage is plotted -at the leftmost spouse. -A simple example where we want to bend these rules is when two families -marry, and the pedigrees for both extend above the wedded pair. -In the joint pedigree the -pair should appear as the right-most child in the left hand family, and -as the left-most child in the right hand family. -With respect to founders, assume that a family has three lineages with -a marriage between 1 and 2, and another between 2 and 3. In the joint -pedigree the sets should be 1, 2, 3 from left to right. - -The hints consist of a list with two components. -The first is a vector of numbers of the same length as the pedigree, -used to order the female founders and to order siblings within -family. For subjects not part of either of these the value can be -arbitrary. -The second is a 3 column matrix of spouse pairs, each row indicates the -left-hand member of the pair, the right-hand member, and which of the two -is the anchor, i.e., directly connected to thier parent. -Double and triple marriages can start to get interesting. - -The [[autohint]] routine is used to create an initial hints list. -It is a part of the general intention to make the routine do -``pretty good'' drawings automatically. -The basic algorithm is trial and error. -\begin{itemize} - \item Start with the simplest possible hints (user input is accepted) - \item Call align.pedigree to see how this works out - \item Fix any spouses that are not next to each other but could be. - \item Any fix on the top level mixes up everything below, so we do the - fixes one level at a time. -\end{itemize} -The routine makes no attempt to reorder founders. It just isn't smart enough%' -to figure that out. - -The first thing to be done is to check on twins. They are a nuisance, since -twins need to move together. The [[ped$relation]] object has a factor in it, -so first turn that into numeric. -We create 3 vectors: [[twinrel]] is a matrix containing pairs of twins and -their relation, it is a subset of the incoming [[relation]] matrix. -The [[twinset]] vector identifies twins, it is 0 for anyone who is not a -part of a multiple-birth set, and a unique id for each member of a set. -We use the minimum row number of the members of the set as the id. -[[twinord]] is a starting order vector for the set; it mostly makes sure -that there are no ties (who knows what a user may have used for starting -values.) - -A recent addition (JPS, 5/2013) is to carry forward packaged and align to -kindepth and align.pedigree. - -<>= -autohint <- function(ped, hints, packed=TRUE, align=FALSE) { - if (!is.null(ped$hints)) return(ped$hints) #nothing to do - n <- length(ped$id) - depth <- kindepth(ped, align=TRUE) - - if (is.null(ped$relation)) relation <- NULL - else relation <- cbind(as.matrix(ped$relation[,1:2]), - as.numeric(ped$relation[,3])) - if (!is.null(relation) && any(relation[,3] <4)) { - temp <- (relation[,3] < 4) - twinlist <- unique(c(relation[temp,1:2])) #list of twin id's - twinrel <- relation[temp,,drop=F] - - twinset <- rep(0,n) - twinord <- rep(1,n) - for (i in 2:length(twinlist)) { - # Now, for any pair of twins on a line of twinrel, give both - # of them the minimum of the two ids - # For a set of triplets, it might take two iterations for the - # smallest of the 3 numbers to "march" across the threesome. - # For quads, up to 3 iterations, for quints, up to 4, .... - newid <- pmin(twinrel[,1], twinrel[,2]) - twinset[twinrel[,1]] <- newid - twinset[twinrel[,2]] <- newid - twinord[twinrel[,2]] <- pmax(twinord[twinrel[,2]], - twinord[twinrel[,1]]+1) - } - } - else { - twinset <- rep(0,n) - twinrel <- NULL - } - <> - <> - <> - list(order=horder, spouse=sptemp) - } -@ - -Next is an internal function that rearranges someone to be -the leftmost or rightmost of his/her siblings. The only -real complication is twins -- if one of them moves the other has to move too. -And we need to keep the monozygotics together within a band of triplets. -Algorithm: if the person to be moved is part of a twinset, -first move all the twins to the left end (or right -as the case may be), then move all the monozygotes to the -left, then move the subject himself to the left. -<>= -shift <- function(id, sibs, goleft, hint, twinrel, twinset) { - if (twinset[id]> 0) { - shift.amt <- 1 + diff(range(hint[sibs])) # enough to avoid overlap - twins <- sibs[twinset[sibs]==twinset[id]] - if (goleft) - hint[twins] <- hint[twins] - shift.amt - else hint[twins] <- hint[twins] + shift.amt - - mono <- any(twinrel[c(match(id, twinrel[,1], nomatch=0), - match(id, twinrel[,2], nomatch=0)),3]==1) - if (mono) { - # - # ok, we have to worry about keeping the monozygotics - # together within the set of twins. - # first, decide who they are, by finding those monozygotic - # with me, then those monozygotic with the results of that - # iteration, then .... If I were the leftmost, this could - # take (#twins -1) iterations to get us all - # - monoset <- id - rel2 <- twinrel[twinrel[,3]==1, 1:2, drop=F] - for (i in 2:length(twins)) { - newid1 <- rel2[match(monoset, rel2[,1], nomatch=0),2] - newid2 <- rel2[match(monoset, rel2[,2], nomatch=0),1] - monoset <- unique(c(monoset, newid1, newid2)) - } - if (goleft) - hint[monoset]<- hint[monoset] - shift.amt - else hint[monoset]<- hint[monoset] + shift.amt - } - } - - #finally, move the subject himself - if (goleft) hint[id] <- min(hint[sibs]) -1 - else hint[id] <- max(hint[sibs]) +1 - - hint[sibs] <- rank(hint[sibs]) # aesthetics -- no negative hints - hint - } -@ - -Now, get an ordering of the pedigree to use as the starting point. -The numbers start at 1 on each level. -We don't need the final ``prettify" step, hence align=F. -If there is a hints structure entered, we retain it's non-zero entries, -otherwise people are put into the order of the data set. -We allow the hints input to be only an order vector -Twins are -then further reordered. -<>= -if (!missing(hints)) { - if (is.vector(hints)) hints <- list(order=hints) - if (is.matrix(hints)) hints <- list(spouse=hints) - if (is.null(hints$order)) horder <- integer(n) - else horder <- hints$order - } -else horder <- integer(n) - -for (i in unique(depth)) { - who <- (depth==i & horder==0) - if (any(who)) horder[who] <- 1:sum(who) #screwy input - overwrite it - } - -if (any(twinset>0)) { - # First, make any set of twins a cluster: 6.01, 6.02, ... - # By using fractions, I don't have to worry about other sib's values - for (i in unique(twinset)) { - if (i==0) next - who <- (twinset==i) - horder[who] <- mean(horder[who]) + twinord[who]/100 - } - - # Then reset to integers - for (i in unique(ped$depth)) { - who <- (ped$depth==i) - horder[who] <- rank(horder[who]) #there should be no ties - } - } - -if (!missing(hints)) sptemp <- hints$spouse -else sptemp <- NULL -plist <- align.pedigree(ped, packed=packed, align=align, - hints=list(order=horder, spouse=sptemp)) -@ -The result coming back from align.pedigree is a set of vectors and -matrices: -\begin{description} - \item[n] vector, number of entries per level - \item[nid] matrix, one row per level, numeric id of the subject plotted - here - \item[spouse] integer matrix, one row per level, subject directly to my - right is my spouse (1), a double marriage (2), or neither (0). - \item[fam] matrix, link upward to my parents, or 0 if no link. -\end{description} - -\begin{figure} - \myfig{autohint1} - \caption{A simple pedigree before (left) and after (right) the - autohint computations.} - \label{fig:auto1} -\end{figure} - -Now, walk down through the levels one by one. -A candidate subject is one who appears twice on the level, once -under his/her parents and once somewhere else as a spouse. -Move this person and spouse the the ends of their sibships and -add a marriage hint. -Figure \ref{fig:auto1} shows a simple case. The input data set has -the subjects ordered from 1--11, the left panel is the result without -hints which processes subjects in the order encountered. -The return values from [[align.pedigree]] have subject 9 shown twice. -The first is when he is recognized as the spouse of subject 4, the second -as the child of 6--7. - -The basic logic is -\begin{enumerate} - \item Find a subject listed multiple times on a line (assume it is a male). - This means that he has multiple connections, usually one to his parents and - the other to a spouse tied to her parents. (If the - spouse were a marry-in she would have been placed alongside and there - would be no duplication.) - \item Say subject x is listed at locations 2, 8, and 12. We look at one - pairing at a time, either 2-8 or 8-12. Consider the first one. - \begin{itemize} - \item If position 2 is associated with siblings, rearrange them to - put subject 2 on the right. If it is associated with a spouse at - this location, put that spouse on the right of her siblings. - \item Repeat the work for position 8, but moving targets to the left. - \item At either position, if it is associated with a spouse then - add a marriage. If both ends of the marriage are anchored, i.e., - connected to a family, then either end may be listed as the anchor - in the output; follow the suggestion of the duporder routine. If - only one is, it is usually better to anchor it there, so that the - marriage is processed by[[align.pedigree]] when that family is. - (At least I think so.) - \end{itemize} -\end{enumerate} -This logic works 9 times out of 10, at least for human pedigrees. -We'll look at more complex cases below when looking at the [[duporder]] %' -(order the duplicates) -function, which returns a matrix with columns 1 and 2 being a pair -of duplicates, and 3 a direction. -Note that in the following code [[idlist]] refers to the row numbers of -each subject in the pedigree, not to their label [[ped$id]]. -<>= -<> -<> -maxlev <- nrow(plist$nid) -for (lev in 1:maxlev) { - idlist <- plist$nid[lev,1:plist$n[lev]] #subjects on this level - dpairs <- duporder(idlist, plist, lev, ped) #duplicates to be dealt with - if (nrow(dpairs)==0) next; - for (i in 1:nrow(dpairs)) { - anchor <- spouse <- rep(0,2) - for (j in 1:2) { - direction <- c(FALSE, TRUE)[j] - mypos <- dpairs[i,j] - if (plist$fam[lev, mypos] >0) { - # Am connected to parents at this location - anchor[j] <- 1 #familial anchor - sibs <- idlist[findsibs(mypos, plist, lev)] - if (length(sibs) >1) - horder <- shift(idlist[mypos], sibs, direction, - horder, twinrel, twinset) - } - else { - #spouse at this location connected to parents ? - spouse[j] <- findspouse(mypos, plist, lev, ped) - if (plist$fam[lev,spouse[j]] >0) { # Yes they are - anchor[j] <- 2 #spousal anchor - sibs <- idlist[findsibs(spouse[j], plist, lev)] - if (length(sibs) > 1) - horder <- shift(idlist[spouse[j]], sibs, direction, - horder, twinrel, twinset) - } - } - } -@ - -At this point the most common situation will be what is shown in -figure \ref{fig:auto1}. The variable [[anchor]] is (2,1) showing that the -left hand copy of subject 9 is connected to an anchored spouse and the -right hand copy is himself anchored. The proper addition to the -spouselist is [[(4, 9, dpairs)]], where the last is the hint from the -dpairs routine as to which of the parents is the one to follow further when -drawing the entire pedigree. (When drawing a pedigree and there is a -child who can be reached from multiple founders, we only want to find -the child once.) - -The double marry-in found in figure \ref{fig:auto2}, subject 11, leads -to value of (2,2) for the [[anchor]] variable. The proper addition to -the [[sptemp]] matrix in this case will be two rows, (5, 11, 1) indicating -that 5 should be plotted left of 11 for the 5-11 marriage, with the first -partner as the anchor, and a second row (11, 9, 2). -This will cause the common spouse to be plotted in the middle. - -Multiple marriages can lead to unanchored subjects. -In the left hand portion of figure \ref{fig:auto3} we have two -double marriages, one on the left and one on the right with -anchor values of (0,2) and (2,0), respectively. -We add two marriages to the return list to ensure that both print -in the correct left-right order; the 14-4 one is correct by default -but it's easier to output a line than check sex orders. %' - -\begin{figure} - \myfig{autohint3} - \caption{Pedigrees with multiple marriages} - \label{fig:auto3} - \end{figure} - -The left panel of figure \ref{fig:auto3} shows a case where -subject 11 marries into the pedigree but also has a second spouse. -The [[anchor]] variable for -this case will be (2, 0); the first instance of 11 has a spouse tied -into the tree above, the second instance has no upward connections. -In the top row, subject 6 has values of (0, 0) since neither -connection has an upward parent. -In the right hand panel subject 2 has an anchor variable of (0,1). - -<>= - # add the marriage(s) - id1 <- idlist[dpairs[i,1]] # i,1 and i,2 point to the same person - id2 <- idlist[spouse[1]] - id3 <- idlist[spouse[2]] - - temp <- switch(paste(anchor, collapse=''), - "21" = c(id2, id1, dpairs[i,3]), #the most common case - "22" = rbind(c(id2, id1, 1), c(id1, id3, 2)), - "02" = c(id2, id1, 0), - "20" = c(id2, id1, 0), - "00" = rbind(c(id1, id3, 0), c(id2, id1, 0)), - "01" = c(id2, id1, 2), - "10" = c(id1, id2, 1), - NULL) - - if (is.null(temp)) { - warning("Unexpected result in autohint, please contact developer") - return(list(order=1:n)) #punt - } - else sptemp <- rbind(sptemp, temp) - } - # - # Recompute, since this shifts things on levels below - # - plist <- align.pedigree(ped, packed=packed, align=align, - hints=list(order=horder, spouse=sptemp)) - } -@ - -For the case shown in figure \ref{fig:align1} the [[duporder]] function -will return a single row array with values (2, 6, 1), the first two -being the positions of the duplicated subject. -The anchor will be 2 since that is the copy connected to parents -The direction is TRUE, since the spouse is to the left of the anchor point. -The id is 9, sibs are 8, 9, 10, and the shift function will create position -hints of 2,1,3, which will cause them to be listed in the order 9, 8, 10. - -The value of spouse is 3 (third position in the row), subjects 3,4, and 5 -are reordered, and finally the line (4,9,1) is added to the sptemp -matrix. -In this particular case the final element could be a 1 or a 2, since both -are connected to their parents. - -\begin{figure} - \myfig{autohint2} - \caption{A more complex pedigree.} - \label{fig:align2} -\end{figure} - -Figure \ref{fig:align2} shows a more complex case with several arcs. -In the upper left is a double marry-in. -The [[anchor]] variable in the above code -will be (2,2) since both copies have an anchored spouse. -The left and right sets of sibs are reordered (even though the left -one does not need it), and two lines are added to the sptemp matrix: -(5,11,1) and (11,9,2). - -On the upper right is a pair of overlapping arcs. -In the final tree we want to put sibling 28 to the right of 29 since -that will allow one node to join, but if we process the subjects in -lexical order the code will first shift 28 to the right and then later -shift over 29. -The duporder function tries to order the duplicates into a matrix -so that the closest ones are processed last. The definition of close -is based first on whether the families touch, and second on the -actual distance. -The third column of the matrix hints at whether the marriage should -be plotted at the left (1) or right (2) position of the pair. The -goal for this is to spread apart families of cousins; in the -example to not have the children of 28/31 plotted under the 21/22 -grandparents, and those for 29/32 under the 25/26 grandparents. -The logic for this column is very ad hoc: put children near the edges. -<>= -duporder <- function(idlist, plist, lev, ped) { - temp <- table(idlist) - if (all(temp==1)) return (matrix(0L, nrow=0, ncol=3)) - - # make an intial list of all pairs's positions - # if someone appears 4 times they get 3 rows - npair <- sum(temp-1) - dmat <- matrix(0L, nrow=npair, ncol=3) - dmat[,3] <- 2; dmat[1:(npair/2),3] <- 1 - i <- 0 - for (id in unique(idlist[duplicated(idlist)])) { - j <- which(idlist==id) - for (k in 2:length(j)) { - i <- i+1 - dmat[i,1:2] <- j[k + -1:0] - } - } - if (nrow(dmat)==1) return(dmat) #no need to sort it - - # families touch? - famtouch <- logical(npair) - for (i in 1:npair) { - if (plist$fam[lev,dmat[i,1]] >0) - sib1 <- max(findsibs(dmat[i,1], plist, lev)) - else { - spouse <- findspouse(dmat[i,1], plist, lev, ped) - ##If spouse is marry-in then move on without looking for sibs - if (plist$fam[lev,spouse]==0) {famtouch[i] <- F; next} - sib1 <- max(findsibs(spouse, plist, lev)) - } - - if (plist$fam[lev, dmat[i,2]] >0) - sib2 <- min(findsibs(dmat[i,2], plist, lev)) - else { - spouse <- findspouse(dmat[i,2], plist, lev, ped) - ##If spouse is marry-in then move on without looking for sibs - if (plist$fam[lev,spouse]==0) {famtouch[i] <- F; next} - sib2 <- min(findsibs(spouse, plist, lev)) - } - famtouch[i] <- (sib2-sib1 ==1) - } - dmat[order(famtouch, dmat[,1]- dmat[,2]),, drop=FALSE ] - } -@ - -Finally, here are two helper routines. -Finding my spouse can be interesting -- suppose we have a listing with -Shirley, Fred, Carl, me on the line with the first three marked as -spouse=TRUE -- it means that she has been married to all 3 of us. -First we find the string from rpos to lpos that is a marriage block; -99\% of the time this will be of length 2 of course. Then find -the person in that block who is opposite sex, and check that they -are connected. -The routine is called with a left-right position in the alignment -arrays and returns a position. -<>= -findspouse <- function(mypos, plist, lev, ped) { - lpos <- mypos - while (lpos >1 && plist$spouse[lev, lpos-1]) lpos <- lpos-1 - rpos <- mypos - while(plist$spouse[lev, rpos]) rpos <- rpos +1 - if (rpos==lpos) stop("autohint bug 3") - - opposite <-ped$sex[plist$nid[lev,lpos:rpos]] != ped$sex[plist$nid[lev,mypos]] - if (!any(opposite)) stop("autohint bug 4") # no spouse - spouse <- min((lpos:rpos)[opposite]) #can happen with a triple marriage - spouse - } -@ - -The findsibs function starts with a position and returns a position as well. -<>= -findsibs <- function(mypos, plist, lev) { - family <- plist$fam[lev, mypos] - if (family==0) stop("autohint bug 6") - which(plist$fam[lev,] == family) - } -@ - - -\subsection{Align.pedigree} -\label{sect:alignped} -The top level routine for alignment has 5 arguments -\begin{description} - \item[ped] a pedigree or pedigreeList object. In the case of - the latter we loop over each family separately. - \item[packed] do we allow branches of the tree to overlap? - If FALSE the drawing is much easier, but final drawing can - take up a huge amount of space. - \item[width] the minimum width for a packed pedigree. This - affects only small pedigrees, since the minimum possible - width for a pedigree is the largest number of individiuals in - one of the generations. - \item[align] should the final step of alignment be done? This - tries to center children under parents, to the degree possible. - \item a hints object. This is normally blank and autohint - is invoked. -\end{description} -The result coming back from align.pedigree is a set of vectors and -matrices: -\begin{description} - \item[n] vector, number of entries per level - \item[nid] matrix, one row per level, numeric id of the subject plotted - here - \item[pos] the horizontal position for plotting - \item[spouse] integer matrix, one row per level, subject directly to my - right is my spouse (1), a double marriage (2), or neither (0). - \item[fam] matrix, link upward to my parents, or 0 if no link. -\end{description} -<>= -align.pedigree <- function(ped, packed=TRUE, width=10, - align=TRUE, hints=ped$hints) { - if (class(ped)== 'pedigreeList') { - nped <- length(unique(ped$famid)) - alignment <- vector('list', nped) - for (i in 1:nped) { - temp <- align.pedigree(ped[i], packed, width, align) - alignment[[i]] <- temp$alignment - } - ped$alignment <- alignment - class(ped) <- 'pedigreeListAligned' - return(ped) - } - - if (is.null(hints)) { - hints <- try({autohint(ped)}, silent=TRUE) - ## sometimes appears dim(ped) is empty (ped is NULL), so try fix here: (JPS 6/6/17 - if(class(hints)=="try-error") hints <- list(order=seq_len(max(1, dim(ped)))) ## 1:dim(ped)) - } else { - hints <- check.hint(hints, ped$sex) - } - - <> - <> - <> - } -@ - - -Start with some setup. -Throughout this routine the row number is used as a subject -id (ignoring the actual id label). -\begin{itemize} - \item Check that everyone has either two - parents or none (a singleton will just confuse us). - \item Verify that the hints are correct. - \item The relation data frame, if present, has a factor in it. Turn - that into numeric. -\item Create the [[spouselist]] array. This has 4 columns - \begin{enumerate} - \item Husband index (4= 4th person in the pedigree structure) - \item Wife index - \item Plot order: 1= husband left, 2=wife left - \item Anchor: 1=left member, 2=right member, 0= not yet determined - \end{enumerate} - As the routine proceeds a spousal pair can be encountered - multiple times; we take them out of this list when the ``connected'' - member is added to the pedigree so that no marriage gets added - twice. -\item To detect duplicates on the spouselist we need to create a - unique (but temporary) spouse-pair id using a simple hash. -\end{itemize} - -When importing data from autohint, that routine's spouse matrix %' -has column 1 = -subject plotted on the left, 2 = subject plotted on the right. -The [[spouselist]] array has column 1=husband, 2=wife. -Hence the clumsy looking ifelse below. The autohint format is more -congenial to users, who might modify the output, the spouselist format -easier for the code. - - -<>= -n <- length(ped$id) -dad <- ped$findex; mom <- ped$mindex #save typing -if (any(dad==0 & mom>0) || any(dad>0 & mom==0)) - stop("Everyone must have 0 parents or 2 parents, not just one") -level <- 1 + kindepth(ped, align=TRUE) - -horder <- hints$order # relative order of siblings within a family - -if (is.null(ped$relation)) relation <- NULL -else relation <- cbind(as.matrix(ped$relation[,1:2]), - as.numeric(ped$relation[,3])) - -if (!is.null(hints$spouse)) { # start with the hints list - tsex <- ped$sex[hints$spouse[,1]] #sex of the left member - spouselist <- cbind(0,0, 1+ (tsex!='male'), - hints$spouse[,3]) - spouselist[,1] <- ifelse(tsex=='male', hints$spouse[,1], hints$spouse[,2]) - spouselist[,2] <- ifelse(tsex=='male', hints$spouse[,2], hints$spouse[,1]) - } -else spouselist <- matrix(0L, nrow=0, ncol=4) - -if (!is.null(relation) && any(relation[,3]==4)) { - # Add spouses from the relationship matrix - trel <- relation[relation[,3]==4,,drop=F] - tsex <- ped$sex[trel[,1]] - trel[tsex!='male',1:2] <- trel[tsex!='male',2:1] - spouselist <- rbind(spouselist, cbind(trel[,1], - trel[,2], - 0,0)) - } -if (any(dad>0 & mom>0) ) { - # add parents - who <- which(dad>0 & mom>0) - spouselist <- rbind(spouselist, cbind(dad[who], mom[who], 0, 0)) - } - -hash <- spouselist[,1]*n + spouselist[,2] -spouselist <- spouselist[!duplicated(hash),, drop=F] -@ - -The [[alignped]] routine does the alignment using 3 co-routines: -\begin{description} - \item[alignped1] called with a single subject, returns the subtree - founded on this subject, as though it were the only tree - \item[alignped2] called with a set of sibs, calls alignped1 and - alignped3 multiple times to create a joint pedigree - \item[alignped3] given two side by side plotting structures, merge them - into a single one -\end{description} - -Call [[alignped1]] sequentially with each founder pair and merge the -results. -A founder pair is a married pair, neither of which has a father. - -<>= -noparents <- (dad[spouselist[,1]]==0 & dad[spouselist[,2]]==0) - ##Take duplicated mothers and fathers, then founder mothers -dupmom <- spouselist[noparents,2][duplicated(spouselist[noparents,2])] #Founding mothers with multiple marriages -dupdad <- spouselist[noparents,1][duplicated(spouselist[noparents,1])] #Founding fathers with multiple marriages -foundmom <- spouselist[noparents&!(spouselist[,1] %in% c(dupmom,dupdad)),2] # founding mothers -founders <- unique(c(dupmom, dupdad, foundmom)) -founders <- founders[order(horder[founders])] #use the hints to order them -rval <- alignped1(founders[1], dad, mom, level, horder, - packed=packed, spouselist=spouselist) - -if (length(founders)>1) { - spouselist <- rval$spouselist - for (i in 2:length(founders)) { - rval2 <- alignped1(founders[i], dad, mom, - level, horder, packed, spouselist) - spouselist <- rval2$spouselist - rval <- alignped3(rval, rval2, packed) - } - } -@ - -Now finish up. -There are 4 tasks to doS -\begin{enumerate} - \item For convenience the lower level routines kept the spouse - and nid arrays as a single object -- unpack them - \item In the spouse array a 1 in position i indicates that subject - i and i+1 are joined as a marriage. If these two have a common - ancestor change this to a 2, which indicates that a double line - should be used in the plot. - \item Add twins data to the output. - \item Do final alignment -\end{enumerate} - -<>= -# -# Unhash out the spouse and nid arrays -# -nid <- matrix(as.integer(floor(rval$nid)), nrow=nrow(rval$nid)) -spouse <- 1L*(rval$nid != nid) -maxdepth <- nrow(nid) - -# For each spouse pair, find out if it should be connected with -# a double line. This is the case if they have a common ancestor -ancestor <- function(me, momid, dadid) { - alist <- me - repeat { - newlist <- c(alist, momid[alist], dadid[alist]) - newlist <- sort(unique(newlist[newlist>0])) - if (length(newlist)==length(alist)) break - alist <- newlist - } - alist[alist!=me] - } -for (i in (1:length(spouse))[spouse>0]) { - a1 <- ancestor(nid[i], mom, dad) - a2 <- ancestor(nid[i+maxdepth],mom, dad) #matrices are in column order - if (any(duplicated(c(a1, a2)))) spouse[i] <- 2 - } -@ - -The twins array is of the same shape as the spouse and nid arrays: -one row per level giving data for the subjects plotted on that row. -In this case they are -\begin{itemize} - \item 0= nothing - \item 1= the sib to my right is a monzygotic twin, - \item 2= the sib to my right is a dizygote, - \item 3= the sib to my right is a twin, unknown zyogosity. -\end{itemize} -<>= -if (!is.null(relation) && any(relation[,3] < 4)) { - twins <- 0* nid - who <- (relation[,3] <4) - ltwin <- relation[who,1] - rtwin <- relation[who,2] - ttype <- relation[who,3] - - # find where each of them is plotted (any twin only appears - # once with a family id, i.e., under their parents) - ntemp <- ifelse(rval$fam>0, nid,0) # matix of connected-to-parent ids - ltemp <- (1:length(ntemp))[match(ltwin, ntemp, nomatch=0)] - rtemp <- (1:length(ntemp))[match(rtwin, ntemp, nomatch=0)] - twins[pmin(ltemp, rtemp)] <- ttype - } -else twins <- NULL -@ - -At this point the pedigree has been arranged, with the positions -in each row going from 1 to (number of subjects in the row). -(For a packed pedigree, which is the usual case). -Having everything pushed to the left margin isn't very -pretty, now we fix that. -Note that alignped4 wants a T/F spouse matrix: it doesn't care - about your degree of relationship to the spouse. -<>= -if ((is.numeric(align) || align) && max(level) >1) - pos <- alignped4(rval, spouse>0, level, width, align) -else pos <- rval$pos - -if (is.null(twins)) - list(n=rval$n, nid=nid, pos=pos, fam=rval$fam, spouse=spouse) -else list(n=rval$n, nid=nid, pos=pos, fam=rval$fam, spouse=spouse, - twins=twins) -@ diff --git a/devel/noweb/align2.txt b/devel/noweb/align2.txt deleted file mode 100644 index 62840578..00000000 --- a/devel/noweb/align2.txt +++ /dev/null @@ -1,514 +0,0 @@ -\subsection{alignped1} -This is the first of the three co-routines. -It is called with a single subject, and returns the subtree founded -on said subject, as though it were the only tree. -We only go down the pedigree, not up. -Input arguments are -\begin{description} - \item[nid] the numeric id of the subject in question - \item[dad] points to the row of the father, 0=no father in pedigree - \item[mom] points to the row of the mother - \item[level] the plotting depth of each subject - \item[horder] orders the kids within a sibship - \item[packed] if true, everything is slid to the left - \item[spouselist] a matrix of spouses - \begin{itemize} - \item col 1= pedigree index of the husband - \item col 2= pedigree index of the wife - \item col 3= 1:plot husband to the left, 2= wife to the left - \item col 4= 1:left member is rooted here, 2=right member, 0=either - \end{itemize} -\end{description} - -The return argument is a set of matrices as described in -section \ref{sect:alignped}, along with the spouselist matrix. -The latter has marriages removed as they are processed. - -In this routine the [[nid]] array consists of the final nid array + 1/2 of the -final spouse array. -The basic algorithm is simple. -\begin{enumerate} - \item Find all of the spouses for which [[x]] is the anchor subject. If - there are none then return the trivial tree consisting of [[x]] alone. - \item For each marriage in the set, call [[alignped2]] on the children - and add this to the result. -\end{enumerate} -Note that the [[spouselist]] matrix will only contain spouse pairs that -are not yet processed. -The logic for anchoring is slightly tricky. First, if row 4 of -the spouselist matrix is 0, we anchor at the first opportunity, i.e. now.. -Also note that if spouselist[,3]==spouselist[,4] it is -the husband who is the anchor (just write out the possibilities). - -<>= -alignped1 <- function(x, dad, mom, level, horder, packed, spouselist){ - # Set a few constants - maxlev <- max(level) - lev <- level[x] - n <- integer(maxlev) - - if (length(spouselist)==0) spouse <- NULL - else { - if (any(spouselist[,1]==x)){ - sex <- 1 # I'm male - sprows <- (spouselist[,1]==x & (spouselist[,4] ==spouselist[,3] | - spouselist[,4] ==0)) - spouse <- spouselist[sprows, 2] #ids of the spouses - } - else { - sex <- 2 - sprows <- (spouselist[,2]==x & (spouselist[,4]!=spouselist[,3] | - spouselist[,4] ==0)) - spouse <- spouselist[sprows, 1] - } - } - # Marriages that cross levels are plotted at the higher level (lower - # on the paper). - if (length(spouse)) { - keep <- level[spouse] <= lev - spouse <- spouse[keep] - sprows <- (which(sprows))[keep] - } - nspouse <- length(spouse) # Almost always 0, 1 or 2 -@ -Create the set of 3 return structures, which will be matrices with -(1+nspouse) columns. -If there are children then other routines will widen the result. -<>= - nid <- fam <- matrix(0L, maxlev, nspouse+1) - pos <- matrix(0.0, maxlev, nspouse +1) - n[lev] <- nspouse +1 - pos[lev,] <- 0:nspouse - if (nspouse ==0) { - # Easy case: the "tree rooted at x" is only x itself - nid[lev,1] <- x - return(list(nid=nid, pos=pos, fam=fam, n=n, spouselist=spouselist)) - } -@ -Now we have a list of spouses that should be dealt with and -the the correponding columns of the spouselist matrix. -Create the two complimentary lists lspouse and rspouse to denote -those plotted on the left and on the right. -For someone with lots of spouses we try to split them evenly. -If the number of spouses is odd, then men should have more on the -right than on the left, women more on the right. -Any hints in the spouselist matrix override. -We put the undecided marriages closest to [[x]], -then add predetermined ones to the left and -right. -The majority of marriages will be undetermined singletons, for which -nleft will be 1 for female (put my husband to the left) and 0 for male. -In one bug found by plotting canine data, lspouse could initially be empty but -length(rspouse)> 1. This caused nleft>length(indx). A fix was to not let -indx to be indexed beyond its length, fix by JPS 5/2013. - -<>= - lspouse <- spouse[spouselist[sprows,3] == 3-sex] # 1-2 or 2-1 - rspouse <- spouse[spouselist[sprows,3] == sex] # 1-1 or 2-2 - if (any(spouselist[sprows,3] ==0)) { - #Not yet decided spouses - indx <- which(spouselist[sprows,3] ==0) - nleft <- floor((length(sprows) + (sex==2))/2) #total number to left - nleft <- nleft - length(lspouse) #number of undecideds to the left - if (nleft >0) { - # JPS fixed 5/2013, don't index when nleft > length(indx) - lspouse <- c(lspouse, spouse[indx[seq_len(min(nleft,length(indx)))]]) - indx <- indx[-(seq_len(min(nleft,length(indx))))] - } - if (length(indx)) rspouse <- c(spouse[indx], rspouse) - } - - nid[lev,] <- c(lspouse, x, rspouse) - nid[lev, 1:nspouse] <- nid[lev, 1:nspouse] + .5 #marriages - - spouselist <- spouselist[-sprows,, drop=FALSE] -@ - -The spouses are in the pedigree, now look below. -For each spouse get the list of children. -If there are any we call alignped2 to generate their tree and -then mark the connection to their parent. -If multiple marriages have children we need to join the -trees. -<>= - nokids <- TRUE #haven't found any kids yet - spouse <- c(lspouse, rspouse) #reorder - for (i in 1:nspouse) { - ispouse <- spouse[i] - children <- which((dad==x & mom==ispouse) | (dad==ispouse & mom==x)) - if (length(children) > 0) { - rval1 <- alignped2(children, dad, mom, level, horder, - packed, spouselist) - spouselist <- rval1$spouselist - # set the parentage for any kids - # a nuisance: it's possible to have a child appear twice, when - # via inbreeding two children marry --- makes the "indx" line - # below more complicated - temp <- floor(rval1$nid[lev+1,]) # cut off the .5's for matching - indx <- (1:length(temp))[match(temp,children, nomatch=0) >0] - rval1$fam[lev+1,indx] <- i #set the kids parentage - if (!packed) { - # line the kids up below the parents - # The advantage at this point: we know that there is - # nothing to the right that has to be cared for - kidmean <- mean(rval1$pos[lev+1, indx]) - parmean <- mean(pos[lev, i + 0:1]) - if (kidmean > parmean) { - # kids to the right of parents: move the parents - indx <- i:(nspouse+1) - pos[lev, indx] <- pos[lev, indx] + (kidmean - parmean) - } - else { - # move the kids and their spouses and all below - shift <- parmean - kidmean - for (j in (lev+1):maxlev) { - jn <- rval1$n[j] - if (jn>0) - rval1$pos[j, 1:jn] <- rval1$pos[j, 1:jn] +shift - } - } - } - if (nokids) { - rval <- rval1 - nokids <- FALSE - } - else { - rval <- alignped3(rval, rval1, packed) - } - } - } -@ - -To finish up we need to splice together the tree made up -from all the kids, which only has data from lev+1 down, -with the data here. -There are 3 cases. The first and easiest is when no -children were found. -The second, and most common, is when the tree below is -wider than the tree here, in which case we add the -data from this level onto theirs. -The third is when below is narrower, for instance an -only child. -<>= - if (nokids) { - return(list(nid=nid, pos=pos, fam=fam, n=n, spouselist=spouselist)) - } - - if (ncol(rval$nid) >= 1+nspouse) { - # The rval list has room for me! - rval$n[lev] <- n[lev] - indx <- 1:(nspouse+1) - rval$nid[lev, indx] <- nid[lev,] - rval$pos[lev, indx] <- pos[lev,] - } - else { - #my structure has room for them - indx <- 1:ncol(rval$nid) - rows <- (lev+1):maxlev - n[rows] <- rval$n[rows] - nid[rows,indx] <- rval$nid[rows,] - pos[rows,indx] <- rval$pos[rows,] - fam[rows,indx] <- rval$fam[rows,] - rval <- list(nid=nid, pos=pos, fam=fam, n=n) - } - rval$spouselist <- spouselist - rval - } -@ - -\subsection{alignped2} -This routine takes a collection of siblings, grows the tree for -each, and appends them side by side into a single tree. -The input arguments are the same as those to -[[alignped1]] with the exception that [[x]] will be a vector. -This routine does nothing to the spouselist matrix, but needs -to pass it down the tree and back since one of the routines -called by [[alignped2]] might change the matrix. - -The code below has one non-obvious special case. Suppose -that two sibs marry. -When the first sib is processed by [[alignped1]] then both -partners (and any children) will be added to the rval -structure below. -When the second sib is processed they -will come back as a 1 element tree (the marriage will no longer -be on the spouselist), which should \emph{not} be added -onto rval. -The rule thus is to not add any 1 element tree whose -value (which must be x[i]) is already in the rval structure for this level. -(Where did Curtis O. \emph{find} these families?) - -<>= -alignped2 <- function(x, dad, mom, level, horder, packed, - spouselist) { - x <- x[order(horder[x])] # Use the hints to order the sibs - rval <- alignped1(x[1], dad, mom, level, horder, packed, - spouselist) - spouselist <- rval$spouselist - - if (length(x) >1) { - mylev <- level[x[1]] - for (i in 2:length(x)) { - rval2 <- alignped1(x[i], dad, mom, level, - horder, packed, spouselist) - spouselist <- rval2$spouselist - - # Deal with the unusual special case: - if ((rval2$n[mylev] > 1) || - (is.na(match(x[i], floor(rval$nid[mylev,]))))) - rval <- alignped3(rval, rval2, packed) - } - rval$spouselist <- spouselist - } - rval - } -@ - - -\subsection{alignped3} -The third co-routine merges two pedigree trees which are side by -side into a single object. -The primary special case is when the rightmost person in the left -tree is the same as the leftmost person in the right tree; we -needn't plot two copies of the same person side by side. -(When initializing the output structures don't worry about this - there -is no harm if they are a column bigger than finally needed.) -Beyond that the work is simple bookkeeping. - -<>= -alignped3 <- function(x1, x2, packed, space=1) { - maxcol <- max(x1$n + x2$n) - maxlev <- length(x1$n) - n1 <- max(x1$n) # These are always >1 - n <- x1$n + x2$n - - nid <- matrix(0, maxlev, maxcol) - nid[,1:n1] <- x1$nid - - pos <- matrix(0.0, maxlev, maxcol) - pos[,1:n1] <- x1$pos - - fam <- matrix(0, maxlev, maxcol) - fam[,1:n1] <- x1$fam - fam2 <- x2$fam - if (!packed) { - <> - } - <> - - if (max(n) < maxcol) { - maxcol <- max(n) - nid <- nid[,1:maxcol] - pos <- pos[,1:maxcol] - fam <- fam[,1:maxcol] - } - - list(n=n, nid=nid, pos=pos, fam=fam) - } -@ - -For the unpacked case, which is the traditional way to draw a pedigree -when we can assume the paper is infinitely wide, all parents are centered -over their children. -In this case we think if the two trees to be merged as solid blocks. -On input they both have a left margin of 0. -Compute how far over we have to slide the right tree. -<>= -slide <- 0 -for (i in 1:maxlev) { - n1 <- x1$n[i] - n2 <- x2$n[i] - if (n1 >0 & n2 >0) { - if (nid[i,n1] == x2$nid[i,1]) - temp <- pos[i, n1] - x2$pos[i,1] - else temp <- space + pos[i, n1] - x2$pos[i,1] - if (temp > slide) slide <- temp - } - } -@ - -Now merge the two trees. -Start at the top level and work down. -\begin{enumerate} - \item If n2=0, there is nothing to do - \item Decide if there is a subject overlap, and if so - \begin{itemize} - \item Set the proper parent id. - Only one of the two copies will be attached and the other - will have fam=0, so max(fam, fam2) preserves the correct one. - \item If not packed, set the position. Choose the one connected - to a parent, or midway for a double marriage. - \end{itemize} - \item If packed=TRUE determine the amount of slide for this row. It - will be [[space]] over from the last element in the left pedigree, - less overlap. - \item Move everything over - \item Fix all the children of this level, right hand pedigree, to - point to the correct parental position. -\end{enumerate} - -<>= -for (i in 1:maxlev) { - n1 <- x1$n[i] - n2 <- x2$n[i] - if (n2 >0) { # If anything needs to be done for this row... - if (n1>0 && (nid[i,n1] == floor(x2$nid[i,1]))) { - #two subjects overlap - overlap <- 1 - fam[i,n1] <- max(fam[i,n1], fam2[i,1]) - nid[i,n1] <- max(nid[i,n1], x2$nid[i,1]) #preserve a ".5" - if (!packed) { - if(fam2[i,1]>0) - if (fam[i,n1]>0) - pos[i,n1] <- (x2$pos[i,1] + pos[i,n1] + slide)/2 - else pos[i,n1] <- x2$pos[i,1]+ slide - } - n[i] <- n[i] -1 - } - else overlap <- 0 - - if (packed) slide <- if (n1==0) 0 else pos[i,n1] + space - overlap - - zz <- seq(from=overlap+1, length=n2-overlap) - nid[i, n1 + zz- overlap] <- x2$nid[i, zz] - fam[i, n1 + zz -overlap] <- fam2[i,zz] - pos[i, n1 + zz -overlap] <- x2$pos[i,zz] + slide - - if (i>= -alignped4 <- function(rval, spouse, level, width, align) { - if (is.logical(align)) align <- c(1.5, 2) #defaults - maxlev <- nrow(rval$nid) - width <- max(width, rval$n+.01) # width must be > the longest row - - n <- sum(rval$n) # total number of subjects - myid <- matrix(0, maxlev, ncol(rval$nid)) #number the plotting points - for (i in 1:maxlev) { - myid[i, rval$nid[i,]>0] <- cumsum(c(0, rval$n))[i] + 1:rval$n[i] - } - - # There will be one penalty for each spouse and one for each child - npenal <- sum(spouse[rval$nid>0]) + sum(rval$fam >0) - pmat <- matrix(0., nrow=npenal+1, ncol=n) - - indx <- 0 - # Penalties to keep spouses close - for (lev in 1:maxlev) { - if (any(spouse[lev,])) { - who <- which(spouse[lev,]) - indx <- max(indx) + 1:length(who) - pmat[cbind(indx, myid[lev,who])] <- sqrt(align[2]) - pmat[cbind(indx, myid[lev,who+1])] <- -sqrt(align[2]) - } - } - - # Penalties to keep kids close to parents - for (lev in (1:maxlev)[-1]) { # no parents at the top level - families <- unique(rval$fam[lev,]) - families <- families[families !=0] #0 is the 'no parent' marker - for (i in families) { #might be none - who <- which(rval$fam[lev,] == i) - k <- length(who) - indx <- max(indx) +1:k #one penalty per child - penalty <- sqrt(k^(-align[1])) - pmat[cbind(indx, myid[lev,who])] <- -penalty - pmat[cbind(indx, myid[lev-1, rval$fam[lev,who]])] <- penalty/2 - pmat[cbind(indx, myid[lev-1, rval$fam[lev,who]+1])] <- penalty/2 - } - } - maxrow <- min(which(rval$n==max(rval$n))) - pmat[nrow(pmat), myid[maxrow,1]] <- 1e-5 -@ - -Next come the constraints. If there are $k$ subjects on a line there will -be $k+1$ constraints for that line. The first point must be $\ge 0$, each -subesquent one must be at least 1 unit to the right, and the final point -must be $\le$ the max width. -<>= - ncon <- n + maxlev # number of constraints - cmat <- matrix(0., nrow=ncon, ncol=n) - coff <- 0 # cumulative constraint lines so var - dvec <- rep(1., ncon) - for (lev in 1:maxlev) { - nn <- rval$n[lev] - if (nn>1) { - for (i in 1:(nn-1)) - cmat[coff +i, myid[lev,i + 0:1]] <- c(-1,1) - } - - cmat[coff+nn, myid[lev,1]] <- 1 #first element >=0 - dvec[coff+nn] <- 0 - cmat[coff+nn+1, myid[lev,nn]] <- -1 #last element <= width-1 - dvec[coff+nn+1] <- 1-width - coff <- coff + nn+ 1 - } - - if (exists('solve.QP')) { - pp <- t(pmat) %*% pmat + 1e-8 * diag(ncol(pmat)) - fit <- solve.QP(pp, rep(0., n), t(cmat), dvec) - } - else stop("Need the quadprog package") - - newpos <- rval$pos - #fit <- lsei(pmat, rep(0, nrow(pmat)), G=cmat, H=dvec) - #newpos[myid>0] <- fit$X[myid] - newpos[myid>0] <- fit$solution[myid] - newpos - } -@ diff --git a/devel/noweb/all.nw b/devel/noweb/all.nw deleted file mode 100644 index b740aa57..00000000 --- a/devel/noweb/all.nw +++ /dev/null @@ -1,4425 +0,0 @@ -\documentclass{article} -\usepackage{noweb} -\usepackage{amsmath} -\usepackage{fancyvrb} -\addtolength{\textwidth}{1in} -\addtolength{\oddsidemargin}{-.5in} -\setlength{\evensidemargin}{\oddsidemargin} - -\newcommand{\myfig}[1]{\resizebox{\textwidth}{!} - {\includegraphics{figure/#1.pdf}}} -\newcommand{\code}[1]{\texttt{#1}} -\title{The \emph{pedigree} functions in R} -\author{Terry Therneau and Elizabeth Atkinson} - -\begin{document} -\maketitle -\tableofcontents -\section{Introduction} -The pedigree routines came out of a simple need -- to quickly draw a -pedigree structure on the screen, within R, that was ``good enough'' to -help with debugging the actual routines of interest, which were those for -fitting mixed effecs Cox models to large family data. As such the routine -had compactness and automation as primary goals; complete annotation -(monozygous twins, multiple types of affected status) and most certainly -elegance were not on the list. Other software could do that much -better. - -It therefore came as a major surprise when these routines proved useful -to others. Through their constant feedback, application to more -complex pedigrees, and ongoing requests for one more feature, the routine has -become what it is today. This routine is still not -suitable for really large pedigrees, nor for heavily inbred ones such as in -animal studies, and will likely not evolve in that way. The authors' fondest%' -hope is that others will pick up the project. - -\section{Pedigree} -The pedigree function is the first step, creating an object of class -\emph{pedigree}. -It accepts the following input -\begin{description} - \item[id] A numeric or character vector of subject identifiers. - \item[dadid] The identifier of the father. - \item[momid] The identifier of the mother. - \item[sex] The gender of the individual. This can be a numeric variable - with codes of 1=male, 2=female, 3=unknown, 4=terminated, or NA=unknown. - A character or factor variable can also be supplied containing - the above; the string may be truncated and of arbitrary case. A sex - value of 0=male 1=female is also accepted. - \item[status] Optional, a numeric variable with 0 = censored and 1 = dead. - \item[relationship] Optional, a matrix or data frame with three columns. - The first two contain the identifier values of the subject pairs, and - the third the code for their relationship: - 1 = Monozygotic twin, 2= Dizygotic twin, 3= Twin of unknown zygosity, - 4 = Spouse. - \item[famid] Optional, a numeric or character vector of family identifiers. -\end{description} - -The [[famid]] variable is placed last as it was a later addition to the -code; thus prior invocations of the function that use positional -arguments won't be affected. %' -If present, this allows a set of pedigrees to be generated, one per -family. The resultant structure will be an object of class -[[pedigreeList]]. - -Note that a factor variable is not listed as one of the choices for the -subject identifier. This is on purpose. Factors -were designed to accomodate character strings whose values came from a limited -class -- things like race or gender, and are not appropriate for a subject -identifier. All of their special properties as compared to a character -variable turn out to be backwards for this case, in particular a memory -of the original level set when subscripting is done. -However, due to the awful decision early on in S to automatically turn every -character into a factor --- unless you stood at the door with a club to -head the package off --- most users have become ingrained to the idea of -using them for every character variable. -(I encourage you to set the global option stringsAsFactors=FALSE to turn -off autoconversion -- it will measurably improve your R experience). -Therefore, to avoid unnecessary hassle for our users -the code will accept a factor as input for the id variables, but -the final structure does not retain it. -Gender and relation do become factors. Status follows the pattern of the -survival routines and remains an integer. - -We will describe the code in a set of blocks. -<>= -pedigree <- function(id, dadid, momid, sex, affected, status, relation, - famid, missid) { - <> - <> - <> - <> - if (missing(famid)) class(temp) <- 'pedigree' - else class(temp) <- 'pedigreeList' - temp - } -<> -@ - -\subsection{Data checks} -The code starts out with some checks on the input data. -Is it all the same length, are the codes legal, etc. -<>= -n <- length(id) -if (length(momid) != n) stop("Mismatched lengths, id and momid") -if (length(dadid) != n) stop("Mismatched lengths, id and momid") -if (length(sex ) != n) stop("Mismatched lengths, id and sex") - -# Don't allow missing id values -if (any(is.na(id))) stop("Missing value for the id variable") -if (!is.numeric(id)) { - id <- as.character(id) - if (length(grep('^ *$', id)) > 0) - stop("A blank or empty string is not allowed as the id variable") - } - -# Allow for character/numeric/factor in the sex variable -if(is.factor(sex)) - sex <- as.character(sex) -codes <- c("male","female", "unknown", "terminated") -if(is.character(sex)) sex<- charmatch(casefold(sex, upper = FALSE), codes, - nomatch = 3) - -# assume either 0/1/2/4 = female/male/unknown/term, or 1/2/3/4 -# if only 1/2 assume no unknowns -if(min(sex) == 0) - sex <- sex + 1 -sex <- ifelse(sex < 1 | sex > 4, 3, sex) -if(all(sex > 2)) - stop("Invalid values for 'sex'") - else if(mean(sex == 3) > 0.25) - warning("More than 25% of the gender values are 'unknown'") -sex <- factor(sex, 1:4, labels = codes) -@ - -Create the variables descibing a missing father and/or mother, -which is what we expect both for people at the top of the -pedigree and for marry-ins, \emph{before} adding in the family -id information. -It's easier to do it first. -If there are multiple families in the pedigree, make a working set of -identifiers that are of the form `family/subject'. -Family identifiers can be factor, character, or numeric. -<>= -if (missing(missid)) { - if (is.numeric(id)) missid <- 0 - else missid <- "" -} - -nofather <- (is.na(dadid) | dadid==missid) -nomother <- (is.na(momid) | momid==missid) - -if (!missing(famid)) { - if (any(is.na(famid))) stop("The family id cannot contain missing values") - if (is.factor(famid) || is.character(famid)) { - if (length(grep('^ *$', famid)) > 0) - stop("The family id cannot be a blank or empty string") - } - #Make a temporary new id from the family and subject pair - oldid <-id - id <- paste(as.character(famid), as.character(id), sep='/') - dadid <- paste(as.character(famid), as.character(dadid), sep='/') - momid <- paste(as.character(famid), as.character(momid), sep='/') - } - -if (any(duplicated(id))) { - duplist <- id[duplicated(id)] - msg.n <- min(length(duplist), 6) - stop(paste("Duplicate subject id:", duplist[1:msg.n])) - } -@ - -Next check that any mother or father identifiers are found in the identifier -list, and are of the right sex. -Subjects who don't have a mother or father are founders. For those people %' -both of the parents should be missing. - -<>= -findex <- match(dadid, id, nomatch = 0) -if(any(sex[findex] != "male")) { - who <- unique((id[findex])[sex[findex] != "male"]) - msg.n <- 1:min(5, length(who)) #Don't list a zillion - stop(paste("Id not male, but is a father:", - paste(who[msg.n], collapse= " "))) - } - -if (any(findex==0 & !nofather)) { - who <- dadid[which(findex==0 & !nofather)] - msg.n <- 1:min(5, length(who)) #Don't list a zillion - stop(paste("Value of 'dadid' not found in the id list", - paste(who[msg.n], collapse= " "))) - } - -mindex <- match(momid, id, nomatch = 0) -if(any(sex[mindex] != "female")) { - who <- unique((id[mindex])[sex[mindex] != "female"]) - msg.n <- 1:min(5, length(who)) - stop(paste("Id not female, but is a mother:", - paste(who[msg.n], collapse = " "))) - } - -if (any(mindex==0 & !nomother)) { - who <- momid[which(mindex==0 & !nomother)] - msg.n <- 1:min(5, length(who)) #Don't list a zillion - stop(paste("Value of 'momid' not found in the id list", - paste(who[msg.n], collapse= " "))) - } - -if (any(mindex==0 & findex!=0) || any(mindex!=0 & findex==0)) { - who <- id[which((mindex==0 & findex!=0) |(mindex!=0 & findex==0))] - msg.n <- 1:min(5, length(who)) #Don't list a zillion - stop(paste("Subjects must have both a father and mother, or have neither", - paste(who[msg.n], collapse= " "))) -} - -if (!missing(famid)) { - if (any(famid[mindex] != famid[mindex>0])) { - who <- (id[mindex>0])[famid[mindex] != famid[mindex>0]] - msg.n <- 1:min(5, length(who)) - stop(paste("Mother's family != subject's family", - paste(who[msg.n], collapse=" "))) - } - if (any(famid[findex] != famid[findex>0])) { - who <- (id[findex>0])[famid[findex] != famid[findex>0]] - msg.n <- 1:min(5, length(who)) - stop(paste("Father's family != subject's family", - paste(who[msg.n], collapse=" "))) - } - } -@ - -\subsection{Creation} -Now, paste the parts together into a basic pedigree. -The fields for father and mother are not the identifiers of -the parents, but their row number in the structure. -<>= -if (missing(famid)) - temp <- list(id = id, findex=findex, mindex=mindex, sex=sex) -else temp<- list(famid=famid, id=oldid, findex=findex, mindex=mindex, - sex=sex) -@ - -The last part is to check out the optional features, -affected status, survival status, and relationships. - -Update by Jason Sinnwell, 5/2011: Allow missing values (NA) in the -affected status matrix. - -Update by Jason Sinnwell 7/2011: Change relation:id1 and id2 to indx1 and indx2 -because they are the index of the id vector. Both $pedigree.trim$ -and $[.pedigree$ now work with these column names. - -<>= -if (!missing(affected)) { - if (is.matrix(affected)){ - if (nrow(affected) != n) stop("Wrong number of rows in affected") - if (is.logical(affected)) affected <- 1* affected - } - else { - if (length(affected) != n) - stop("Wrong length for affected") - - if (is.logical(affected)) affected <- as.numeric(affected) - if (is.factor(affected)) affected <- as.numeric(affected) -1 - } - if(max(affected, na.rm=TRUE) > min(affected, na.rm=TRUE)) - affected <- affected - min(affected, na.rm=TRUE) - if (!all(affected==0 | affected==1 | is.na(affected))) - stop("Invalid code for affected status") - temp$affected <- affected - } - -if(!missing(status)) { - if(length(status) != n) - stop("Wrong length for affected") - if (is.logical(status)) status <- as.integer(status) - if(any(status != 0 & status != 1)) - stop("Invalid status code") - temp$status <- status - } - -if (!missing(relation)) { - if (!missing(famid)) { - if (is.matrix(relation)) { - if (ncol(relation) != 4) - stop("Relation matrix must have 3 columns + famid") - id1 <- relation[,1] - id2 <- relation[,2] - code <- relation[,3] - famid <- relation[,4] - } - else if (is.data.frame(relation)) { - id1 <- relation$id1 - id2 <- relation$id2 - code <- relation$code - famid <- relation$famid - if (is.null(id1) || is.null(id2) || is.null(code) ||is.null(famid)) - stop("Relation data must have id1, id2, family id and code") - } - else stop("Relation argument must be a matrix or a dataframe") - } - else { - if (is.matrix(relation)) { - if (ncol(relation) != 3) - stop("Relation matrix must have 3 columns") - id1 <- relation[,1] - id2 <- relation[,2] - code <- relation[,3] - } - else if (is.data.frame(relation)) { - id1 <- relation$id1 - id2 <- relation$id2 - code <- relation$code - if (is.null(id1) || is.null(id2) || is.null(code)) - stop("Relation data frame must have id1, id2, and code") - } - else stop("Relation argument must be a matrix or a list") - } - - if (!is.numeric(code)) - code <- match(code, c("MZ twin", "DZ twin", "UZ twin", "spouse")) - else code <- factor(code, levels=1:4, - labels=c("MZ twin", "DZ twin", "UZ twin", "spouse")) - if (any(is.na(code))) - stop("Invalid relationship code") - - # Is everyone in this relationship in the pedigree? - if (!missing(famid)) { - temp1 <- match(paste(as.character(famid), as.character(id1), sep='/'), - id, nomatch=0) - temp2 <- match(paste(as.character(famid), as.character(id2), sep='/'), - id, nomatch=0) - } - else { - temp1 <- match(id1, id, nomatch=0) - temp2 <- match(id2, id, nomatch=0) - } - - if (any(temp1==0 | temp2==0)) - stop("Subjects in relationships that are not in the pedigree") - if (any(temp1==temp2)) { - who <- temp1[temp1==temp2] - stop(paste("Subject", id[who], "is their own spouse or twin")) - } - - # Check, are the twins really twins? - ncode <- as.numeric(code) - if (any(ncode<3)) { - twins <- (ncode<3) - if (any(momid[temp1[twins]] != momid[temp2[twins]])) - stop("Twins found with different mothers") - if (any(dadid[temp1[twins]] != dadid[temp2[twins]])) - stop("Twins found with different fathers") - } - # Check, are the monozygote twins the same gender? - if (any(code=="MZ twin")) { - mztwins <- (code=="MZ twin") - if (any(sex[temp1[mztwins]] != sex[temp2[mztwins]])) - stop("MZ Twins with different genders") - } - - ##Use id index as indx1 and indx2 - if (!missing(famid)) { - temp$relation <- data.frame(famid=famid, indx1=temp1, indx2=temp2, code=code) - - } - else temp$relation <- data.frame(indx1=temp1, indx2=temp2, code=code) - } -@ - -The final structure will be in the order of the original data, and all the -components except [[relation]] will have the -same number of rows as the original data. - - -\subsection{Subscripting} - -Subscripting of a pedigree list extracts one or more families from the -list. We treat character subscripts in the same way that dimnames on -a matrix are used. Factors are a problem though: assume that we -have a vector x with names ``joe'', ``charlie'', ``fred'', then -[[x['joe']]] is the first element of the vector, but -[[temp <- factor('joe', 'charlie', 'fred'); z <- temp[1]; x[z] ]] will -be the second element! -R is implicitly using as.numeric on factors when they are a subscript; -this caught an early version of the code when an element of a data -frame was used to index the pedigree: characters are turned into factors -when bundled into a data frame. - -Note: -\begin{enumerate} - \item What should we do if the family id is a numeric: when the user - says [4] do they mean the fourth family in the list or family '4'? - The user is responsible to say ['4'] in this case. - \item In a normal vector invalid subscripts give an NA, e.g. (1:3)[6], but - since there is no such object as an ``NA pedigree'', we emit an error - for this. - \item The [[drop]] argument has no meaning for pedigrees, but must to be - a defined argument of any subscript method; we simply ignore it. - \item Updating the father/mother is a minor nuisance; - since they must are integer indices to rows they must be - recreated after selection. Ditto for the relationship matrix. -\end{enumerate} -<>= -"[.pedigreeList" <- function(x, ..., drop=F) { - if (length(list(...)) != 1) stop ("Only 1 subscript allowed") - ufam <- unique(x$famid) - if (is.factor(..1) || is.character(..1)) indx <- ufam[match(..1, ufam)] - else indx <- ufam[..1] - - if (any(is.na(indx))) - stop(paste("Familiy", (..1[is.na(indx)])[1], "not found")) - - keep <- which(x$famid %in% indx) #which rows to keep - for (i in c('id', 'famid', 'sex')) - x[[i]] <- (x[[i]])[keep] - - kept.rows <- (1:length(x$findex))[keep] - x$findex <- match(x$findex[keep], kept.rows, nomatch=0) - x$mindex <- match(x$mindex[keep], kept.rows, nomatch=0) - - #optional components - if (!is.null(x$status)) x$status <- x$status[keep] - if (!is.null(x$affected)) { - if (is.matrix(x$affected)) x$affected <- x$affected[keep,,drop=FALSE] - else x$affected <- x$affected[keep] - } - if (!is.null(x$relation)) { - keep <- !is.na(match(x$relation$famid, indx)) - if (any(keep)) { - x$relation <- x$relation[keep,,drop=FALSE] - ##Update twin id indexes - x$relation$indx1 <- match(x$relation$indx1, kept.rows, nomatch=0) - x$relation$indx2 <- match(x$relation$indx2, kept.rows, nomatch=0) - ##If only one family chosen, remove famid - if (length(indx)==1) {x$relation$famid <- NULL} - } - else x$relation <- NULL # No relations matrix elements for this family - } - - if (length(indx)==1) class(x) <- 'pedigree' #only one family chosen - else class(x) <- 'pedigreeList' - x - } -@ - -For a pedigree, the subscript operator extracts a subset of individuals. -We disallow selections that retain only 1 of a subject's parents, since %' -they cause plotting trouble later. -Relations are worth keeping only if both parties in the relation were -selected. - -<>= -"[.pedigree" <- function(x, ..., drop=F) { - if (length(list(...)) != 1) stop ("Only 1 subscript allowed") - if (is.character(..1) || is.factor(..1)) i <- match(..1, x$id) - else i <- (1:length(x$id))[..1] - - if (any(is.na(i))) paste("Subject", ..1[which(is.na(i))][1], "not found") - - z <- list(id=x$id[i],findex=match(x$findex[i], i, nomatch=0), - mindex=match(x$mindex[i], i, nomatch=0), - sex=x$sex[i]) - if (!is.null(x$affected)) { - if (is.matrix(x$affected)) z$affected <- x$affected[i,, drop=F] - else z$affected <- x$affected[i] - } - if (!is.null(x$famid)) z$famid <- x$famid[i] - - - if (!is.null(x$relation)) { - indx1 <- match(x$relation$indx1, i, nomatch=0) - indx2 <- match(x$relation$indx2, i, nomatch=0) - keep <- (indx1 >0 & indx2 >0) #keep only if both id's are kept - if (any(keep)) { - z$relation <- x$relation[keep,,drop=FALSE] - z$relation$indx1 <- indx1[keep] - z$relation$indx2 <- indx2[keep] - } - } - - if (!is.null(x$hints)) { - temp <- list(order= x$hints$order[i]) - if (!is.null(x$hints$spouse)) { - indx1 <- match(x$hints$spouse[,1], i, nomatch=0) - indx2 <- match(x$hints$spouse[,2], i, nomatch=0) - keep <- (indx1 >0 & indx2 >0) #keep only if both id's are kept - if (any(keep)) - temp$spouse <- cbind(indx1[keep], indx2[keep], - x$hints$spouse[keep,3]) - } - z$hints <- temp - } - - if (any(z$findex==0 & z$mindex>0) | any(z$findex>0 & z$mindex==0)) - stop("A subpedigree cannot choose only one parent of a subject") - class(z) <- 'pedigree' - z - } -@ - -\subsection{As Data.Frame} - -Convert the pedigree to a data.frame so it is easy to view when removing or -trimming individuals with their various indicators. -The relation and hints elements of the pedigree object are not easy to -put in a data.frame with one entry per subject. These items are one entry -per subject, so are put in the returned data.frame: id, findex, mindex, -sex, affected, status. The findex and mindex are converted to the actual id -of the parents rather than the index. - -Can be used with as.data.frame(ped) or data.frame(ped). Specify in Namespace -file that it is an S3 method. - - - -<>= - -as.data.frame.pedigree <- function(x, ...) { - - dadid <- momid <- rep(0, length(x$id)) - dadid[x$findex>0] <- x$id[x$findex] - momid[x$mindex>0] <- x$id[x$mindex] - df <- data.frame(id=x$id, dadid=dadid, momid=momid, sex=x$sex) - - if(!is.null(x$affected)) - df$affected = x$affected - - if(!is.null(x$status)) - df$status = x$status - return(df) -} -@ - - -This function is useful for checking the pedigree object with the -$findex$ and $mindex$ vector instead of them replaced with the ids of -the parents. This is not currently included in the package. - -<>= - -ped2df <- function(ped) { - df <- data.frame(id=ped$id, findex=ped$findex, mindex=ped$mindex, sex=ped$sex) - if(!is.null(ped$affected)) - df$affected = ped$affected - - if(!is.null(ped$status)) - df$status = ped$status - - return(df) - -} - -@ - - - -\subsection{Printing} -It usually doesn't make sense to print a pedigree, since the id is just %' -a repeat of the input data and the family connections are pointers. -Thus we create a simple summary. - -<>= -print.pedigree <- function(x, ...) { - cat("Pedigree object with", length(x$id), "subjects") - if (!is.null(x$famid)) cat(", family id=", x$famid[1], "\n") - else cat("\n") - cat("Bit size=", bit_size(x)$bit_size, "\n") - } - -print.pedigreeList <- function(x, ...) { - cat("Pedigree list with", length(x$id), "total subjects in", - length(unique(x$famid)), "families\n") - } -@ -\section{Kinship matrices} -The kinship matrix is foundational for random effects models with family -data. -For $n$ subjects it is an $n \times n$ matrix whose $ij$ element contains -the expected fraction of alleles that would be identical by descent -if we sampled one from subject $i$ and another from subject $j$. -Note that the diagonal elements of the matrix will be 0.5 not 1: when we -randomly sample twice from the same subject (with replacement) -we will get two copies of the gene inherited from the father 1/4 of the -time, the maternal copy twice (1/4) or one of each 1/2 the time. -The formal definition is $K(i,i) = 1/4 + 1/4 + 1/2 K(m,f)$ where -$m$ and $f$ are the father and mother of subject $i$. - -The algorithm used is found in K Lange, -\emph{Mathematical and Statistical Methods for Genetic Analysis}, -Springer 1997, page 71--72. - -The key idea of the recursive algorithm for $K(i,j)$ is to condition on -the gene selection for the first index $i$. -Let $m(i)$ and $f(i)$ be the indices of the mother and father of subject $i$ -and $g$ be the allele randomly sampled from subject $i$, -which may of either maternal or paternal origin. - -% updated to haveby JPS, 4/15/13 - -\begin{align} - K(i,j) &= P(\mbox{$g$ maternal}) * K(m(i), j) + - P(\mbox{$g$ paternal}) * K(f(i), j) \label{recur0} \\ - &= 1/2 K(m(i), j) + 1/2 K(f(i), j) \label{recur1} \\ - K(i,i) &= 1/2(1 + K(m(i), f(i))) \label{self} -\end{align} - -The key step in equation \eqref{recur0} is if $g$ has a maternal origin, then -it is a random selection from the two maternal genes, and it's IBD state with -respect to subject $j$ is that of a random selection from m(i) to a random -selection from $j$. This is precisely the definition of $K(m(i), j)$. -The recursion does not work for $K(i,i)$ in equation \eqref{self} since once -we select a maternal gene the second choice from ``$j$'' cannot use a -different maternal gene. - - -For the recurrence algorithm to work properly we need to compute the -values of $K$ for any parent before the calculations for their children. -Pedigree founders (those with no parents) are assumed to be unassociated, -so for these subjects we have -\begin{align*} - K(i,i) &= 1/2 - K(i,j) &=0 \; i\ne j -\end{align*} - -The final formula slightly different for the $X$ chromosome. -Equation \ref{recur0} still holds, but for males the probability -that a selected $X$ chromosome is maternal is 1, so when $i$ a male -the recurrence formula becomes $K(i,j) = K(m(i),j)$. -For females it is unchanged. -All males will have $K(i,i) = 1$ for the $X$ chromosome. - -In order to have already-defined terms on the right hand side of the -recurrence formula for each element, subjects need to be processed -in the following order -\begin{enumerate} - \item Generation 0 (founders) - \item $K(i,j)$ where $i$ is from generation 1 and $j$ from generation 0. - \item $K(i,j)$ with $i$ and $j$ from generation 1 - \item $K(i,j)$ with $i$ from generation 2 and $j$ from generation 0 or 1 - \item $K(i,j)$ with $i$ and $j$ from generation 2. - \item \ldots -\end{enumerate} -The kindepth routine assigns a plotting depth to each subject in such -a way that parents are always above children. -For each depth we need to do the compuations of formula \eqref{recur} -twice. The first time it will get the relationship between each subject -and prior generations correct, the second will correctly compute the -values between subjects on the same level. -The computations within any stage of the above list can be vectorized, -but not those between stages. - -Let [[indx]] be the index of the -rows for the generation currently being processed, say generation $g$. -We add correct computations to the matrix one row at a time; -all of the calculations depend only on the prior rows with the -exception of the [i,i] element. -This approach leads to -a for loop containing operations on single rows/columns. - -At one point below we use a vectorized version. It looks like the snippet below -<>= -for (g in 1:max(depth)) { - indx <- which(depth==g) - kmat[indx,] <- (kmat[mother[indx],] + kmat[father[indx], ])/2 - kmat[,indx] <- (kmat[,mother[indx]] + kmat[,father[indx],])/2 - for (j in indx) kmat[j,j] <- (1 + kmat[mother[j], father[j]])/2 -} -@ -The first line computes all the values for a horizontal stripe of the -matrix. It will be correct for columns in generations $>= -kinship <- function(id, ...) { - UseMethod('kinship') - } - -kinship.default <- function(id, dadid, momid, sex, chrtype="autosome", ...) { - chrtype <- match.arg(casefold(chrtype), c("autosome", "x")) - if (any(duplicated(id))) stop("All id values must be unique") - n <- length(id) - pdepth <- kindepth(id, dadid, momid) - if (chrtype == "autosome") { - if (n==1) - return(matrix(.5,1,1, dimnames=list(id, id))) - - kmat <- diag(c(rep(.5, n), 0)) #founders - - mrow <- match(momid, id, nomatch=n+1) #row number of the mother - drow <- match(dadid, id, nomatch=n+1) #row number of the dad - ## When all unrelateds, pdepth all=0. - ## Put c(1,) to make guard from iter 1:0 - for (depth in 1:max(c(1,pdepth))) { - for (j in (1:n)[pdepth==depth]) { - kmat[,j] <-kmat[j,] <- (kmat[mrow[j],] + kmat[drow[j],]) /2 - kmat[j,j] <- (1 + kmat[mrow[j], drow[j]]) /2 - } - } - } - else if (chrtype == "x") { - if (missing(sex) || length(sex) !=n) - stop("invalid sex vector") - #1 = female, 2=male - if (n==1) - return(matrix(ifelse(sex>2,sex/2,NA), 1,1, dimnames=list(id, id))) - - # kmat <- diag(c((3-sex)/2, 0)) #founders - kmat <- diag(ifelse(sex>2, NA, c((3-sex)/2, 0))) - mrow <- match(momid, id, nomatch=n+1) #row number of the mother - drow <- match(dadid, id, nomatch=n+1) #row number of the dad - - for (depth in 1:max(c(1,pdepth))) { - for (j in (1:n)[pdepth==depth]) { - if (sex[j] ==1) { - kmat[,j] <- kmat[j,] <- kmat[mrow[j],] - kmat[j,j]<- 1 - } - else if(sex[j] == 2) { - kmat[,j] <-kmat[j,] <- (kmat[mrow[j],] + kmat[drow[j],]) /2 - kmat[j,j] <- (1 + kmat[mrow[j], drow[j]]) /2 - } - else { - kmat[,j] <-kmat[j,] <- NA - kmat[j,j] <- NA - } - } - } - } - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id, id) - kmat -} -@ - -The method for a pedigree object is an almost trivial modification. Since the -mother and father are already indexed into the id list it has -two lines that are different, those that create mrow and drow. -The other change is that now we potentially have information available -on monozygotic twins. If there are any such, then when the second -twin of a pair is added to the matrix, we need to ensure that the -pair's kinship coefficient is set to the self-self value. -This can be done after each level is complete, but before children -for that level are computed. -If there are monozygotic triples, quadruplets, etc. this computation gets -more involved. - -The total number of monozygotic twins is always small, so it is efficient to -fix up all the monzygotic twins at each generation. -A variable [[havemz]] is set to TRUE if there are any, and an index array -[[mzindex]] is created for matrix subscripting. - -<>= -kinship.pedigree <- function(id, chrtype="autosome", ...) { - chrtype <- match.arg(casefold(chrtype), c("autosome", "x")) - if (any(duplicated(id$id))) stop("All id values must be unique") - n <- length(id$id) - pdepth <- kindepth(id) - - # Are there any MZ twins to worry about? - havemz <- FALSE - if (!is.null(id$relation) && any(id$relation$code=="MZ twin")) { - havemz <- TRUE - <> - } - - if (chrtype == "autosome") { - if (n==1) - return(matrix(.5,1,1, dimnames=list(id$id, id$id))) - - kmat <- diag(c(rep(.5, n), 0)) #founders - mrow <- ifelse(id$mindex ==0, n+1, id$mindex) - drow <- ifelse(id$findex ==0, n+1, id$findex) - - for (depth in 1:max(pdepth)) { - indx <- which(pdepth == depth) - kmat[indx,] <- (kmat[mrow[indx],] + kmat[drow[indx],]) /2 - kmat[,indx] <- (kmat[,mrow[indx]] + kmat[,drow[indx]]) /2 - for (j in indx) kmat[j,j] <- (1 + kmat[mrow[j], drow[j]])/2 - if (havemz) kmat[mzindex] <- (diag(kmat))[mzindex[,1]] - } - } - else if (chrtype == "x") { - sex <- as.numeric(id$sex) # 1 = female, 2=male - if (n==1) - return(matrix(sex/2, 1,1, dimnames=list(id$id, id$id))) - - kmat <- diag(c((3-sex)/2, 0)) #1 for males, 1/2 for females - mrow <- ifelse(id$mindex ==0, n+1, id$mindex) - drow <- ifelse(id$findex ==0, n+1, id$findex) - - for (depth in 1:max(pdepth)) { - for (j in (1:n)[pdepth==depth]) { - if (sex[j] ==1) { - kmat[,j] <- kmat[j,] <- kmat[mrow[j],] - kmat[j,j]<- 1 - } - else if(sex[j]==2) { - kmat[,j] <-kmat[j,] <- (kmat[mrow[j],] + kmat[drow[j],]) /2 - kmat[j,j] <- (1 + kmat[drow[j],mrow[j]]) /2 - } else { - kmat[,j] <-kmat[j,] <- NA - kmat[j,j] <- NA - } - if (havemz) kmat[mzindex] <- (diag(kmat))[mzindex[,1]] - } - } - } - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id$id, id$id) - kmat -} -@ - -For the Minnesota Family Cancer Study there are 461 families and 29114 -subjects. The raw kinship matrix would be 29114 by 29114 which is over -5 terabytes of memory, something that clearly won't work within S. %' -The solution is to store the overall matrix as a sparse Matrix object. -Each family forms a single block. For this study we have -[[n <- table(minnbreast$famid); sum(n*(n+1)/2)]] or 1.07 million entries; -assuming that only the lower half of each matrix is stored. -The actual size is actually smaller than this, since each family's -matrix will have zeros in it --- founders for instance are not related --- -and those zeros are also not stored. - -The result of each per-family call to kinship will be a symmetric matrix. -We first turn each of these into a dsCMatrix object, a sparse symmetric -form. -The [[bdiag]] function is then used to paste all of these individual -sparse matrices into a single large matrix. - -Why don't we use [[(i in famlist)]] below? A numeric subscript of [[[9]]] %' -selects the ninth family, not the family labeled as 9, so a numeric -family id would not act as we wished. -If all of the subject ids are unique, across all families, the final -matrix is labeled with the subject id, otherwise it is labeled with -family/subject. -<>= -kinship.pedigreeList <- function(id, chrtype="autosome", ...) { - famlist <- unique(id$famid) - nfam <- length(famlist) - matlist <- vector("list", nfam) - idlist <- vector("list", nfam) #the possibly reorderd list of id values - - for (i in 1:length(famlist)) { - tped <- id[i] #pedigree for this family - temp <- try(kinship(tped, chrtype=chrtype, ...), silent=TRUE) - if (class(temp)=="try-error") - stop(paste("In family", famlist[i], ":", temp)) - else matlist[[i]] <- as(forceSymmetric(temp), "dsCMatrix") - idlist[[i]] <- tped$id - } - - result <- bdiag(matlist) - if (any(duplicated(id$id))) - temp <-paste(rep(famlist, sapply(idlist, length)), - unlist(idlist), sep='/') - else temp <- unlist(idlist) - - dimnames(result) <- list(temp, temp) - result -} -@ - -The older [[makekinship]] function, -from before the creation of pedigreeList objects, -accepts the raw identifier data, along with a special family code -for unrelated subjects, as produced by the [[make_famid]] function. -All the unrelated subjects are put at the front of the kinship matrix -in this case rather than within the family. -Because unrelateds get put into a fake family, we cannot create a -rational family/subject identifier; the id must be unique across -families. -We include a copy of the routine for backwards compatability, but -do not anticipate any new usage of it. -Like most routines, this starts out with a collection of error checks. -<>= -makekinship <- function(famid, id, father.id, mother.id, unrelated=0) { - n <- length(famid) - if (length(id) != n) stop("Mismatched lengths: famid and id") - if (length(mother.id) != n) stop("Mismatched lengths: famid and mother.id") - if (length(father.id) != n) stop("Mismatched lengths: famid and father.id") - if (any(is.na(famid))) stop("One or more subjects with missing family id") - if (any(is.na(id))) stop("One or more subjects with a missing id") - if (is.numeric(famid)) { - if (any(famid <0)) stop("Invalid family id, must be >0") - } - - if (any(duplicated(id))) stop("Subject ids must be unique") - - famlist <- sort(unique(famid)) #same order as the counts table - idlist <- id # will be overwritten, but this makes it the - # correct data type and length - counts <- table(famid) - cumcount <- cumsum(counts) - if (any(famid==unrelated)) { - # Assume that those with famid of 0 are unrelated uniques - # (usually the marry-ins) - temp <- match(unrelated, names(counts)) - nzero <- counts[temp] - counts <- counts[-temp] - famlist <- famlist[famlist != unrelated] - idlist[1:nzero] <- id[famid== unrelated] - cumcount <- cumsum(counts) + nzero - } - else nzero <- 0 - - mlist <- vector('list', length(counts)) - for (i in 1:length(counts)) { - who <- (famid == famlist[i]) - if (sum(who) ==1) mlist[[i]] <- Matrix(0.5) # family of size 1 - else { - mlist[[i]] <- kinship(id[who], mother.id[who], father.id[who]) - } - idlist[seq(to=cumcount[i], length=counts[i])] <- id[who] - } - - if (nzero>0) mlist <- c(list(Diagonal(nzero)), mlist) - kmat <- forceSymmetric(bdiag(mlist)) - dimnames(kmat) <- list(idlist, idlist) - kmat -} -@ - -Return now to the question of monzygotic sets. -Consider the following rather difficult example: -\begin{verbatim} - 1 2 - 1 3 - 5 6 - 3 7 - 10 9 -\end{verbatim} -Subjects 1, 2, 3, and 7 form a monozygotic quadruple, 5/6 and 9/10 are -monzygotic pairs. -First create a vector \code{mzgrp} which contains for each subject the -lowest index of a monozygotic twin for that subject. -For non-twins it can have any value. -For this example that vector is set to 1 for subjects 1, 2, 3, and 7, -to 5 for 5 and 6, and to 9 for 9 and 10. -Creating this requires a short while loop. -Once this is in hand we can identify the sets. -<>= -temp <- which(id$relation$code=="MZ twin") -## drop=FALSE added in case only one MZ twin set -mzmat <- as.matrix(id$relation[,c("indx1", "indx2")])[temp,,drop=FALSE] -mzgrp <- 1:max(mzmat) #everyone starts in their own group -# The loop below will take k-1 iterations for a set labeled as -# (k-1):k, ..., 4:3, 3:2, 2:1; this is the worst case. -while(1) { - if (all(mzgrp[mzmat[,1]] == mzgrp[mzmat[,2]])) break - for (i in 1:nrow(mzmat)) - mzgrp[mzmat[i,1]] <- mzgrp[mzmat[i,2]] <- min(mzgrp[mzmat[i,]]) - } -@ -Now make a matrix that has a row for every possible pair. -Finally, remove the rows that are identical. -The result is a set of all pairs of observations in the matrix that -correspond to monozygotic pairs. -<>= -mzindex <- cbind(unlist(tapply(mzmat, mzgrp[mzmat], function(x) { - z <- unique(x) - rep(z, length(z))})), - unlist(tapply(mzmat, mzgrp[mzmat], function(x) { - z <- unique(x) - rep(z, each=length(z))}))) -mzindex <- mzindex[mzindex[,1] != mzindex[,2],] -@ - -\section{Older routines} -For testing purposes we have a version of the kinship function prior to -addition of the chrtype argument. - - -<>= -oldkinship <- function(id, ...) { - UseMethod('oldkinship') - } - -oldkinship.default <- function(id, dadid, momid, ...) { - n <- length(id) - if (n==1) - return(matrix(.5,1,1, dimnames=list(id, id))) - if (any(duplicated(id))) stop("All id values must be unique") - kmat <- diag(n+1) /2 - kmat[n+1,n+1] <- 0 - - pdepth <- kindepth(id, dadid, momid) - mrow <- match(momid, id, nomatch=n+1) #row number of the mother - drow <- match(dadid, id, nomatch=n+1) #row number of the dad - - for (depth in 1:max(pdepth)) { - indx <- (1:n)[pdepth==depth] - for (i in indx) { - mom <- mrow[i] - dad <- drow[i] - kmat[i,] <- kmat[,i] <- (kmat[mom,] + kmat[dad,])/2 - kmat[i,i] <- (1+ kmat[mom,dad])/2 - } - } - - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id, id) - kmat - } - -oldkinship.pedigree <- function(id, ...) { - n <- length(id$id) - if (n==1) - return(matrix(.5,1,1, dimnames=list(id$id, id$id))) - if (any(duplicated(id$id))) stop("All id values must be unique") - kmat <- diag(n+1) /2 - kmat[n+1,n+1] <- 0 - - pdepth <- kindepth(id) - mrow <- ifelse(id$mindex ==0, n+1, id$mindex) - drow <- ifelse(id$findex ==0, n+1, id$findex) - - # Are there any MZ twins to worry about? - if (!is.null(id$relation) && any(id$relation$code=="MZ twin")) { - havemz <- TRUE - temp <- which(id$relation$code=="MZ twin") - ## drop=FALSE added in case only one MZ twin set - mzmat <- as.matrix(id$relation[,c("indx1", "indx2")])[temp,,drop=FALSE] - - # any triples, quads, etc? - if (any(table(mzmat) > 1)) { #yes there are - # each group id will be min(member id) - mzgrp <- 1:max(mzmat) #each person a group - indx <- sort(unique(as.vector(mzmat))) - # The loop below will take k-1 iterations for a set labeled as - # 1:2, 2:3, ...(k-1):k; this is the worst case. - while(1) { - z1 <- mzgrp[mzmat[,1]] - z2 <- mzgrp[mzmat[,2]] - if (all(z1 == z2)) break - mzgrp[indx] <- tapply(c(z1, z1, z2, z2), c(mzmat,mzmat), min) - } - # Now mzgrp = min person id for each person in a set - matlist <- tapply(mzmat, mzgrp[mzmat], function(x) { - x <- sort(unique(x)) - temp <- cbind(rep(x, each=length(x)), rep(x, length(x))) - temp[temp[,1] != temp[,2],] - }) - } - else { #no triples, easier case - matlist <- tapply(mzmat, row(mzmat), function(x) - matrix(x[c(1,2,2,1)],2), simplify=FALSE) - } - } - else havemz <- FALSE - - for (depth in 1:max(pdepth)) { - indx <- (1:n)[pdepth==depth] - for (i in indx) { - mom <- mrow[i] - dad <- drow[i] - kmat[i,] <- kmat[,i] <- (kmat[mom,] + kmat[dad,])/2 - kmat[i,i] <- (1+ kmat[mom,dad])/2 - } - if (havemz) { - for (i in 1:length(matlist)) { - temp <- matlist[[i]] - kmat[temp] <- kmat[temp[1], temp[1]] - } - } - } - - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id$id, id$id) - kmat -} - -oldkinship.pedigreeList <- function(id, ...) { - famlist <- unique(id$famid) - nfam <- length(famlist) - matlist <- vector("list", nfam) - idlist <- vector("list", nfam) #the possibly reorderd list of id values - - for (i in 1:length(famlist)) { - tped <- id[i] #pedigree for this family - temp <- try(oldkinship(tped, ...), silent=TRUE) - if (class(temp)=="try-error") - stop(paste("In family", famlist[i], ":", temp)) - else matlist[[i]] <- as(forceSymmetric(temp), "dsCMatrix") - idlist[[i]] <- tped$id - } - - result <- bdiag(matlist) - if (any(duplicated(id$id))) - temp <-paste(rep(famlist, sapply(idlist, length)), - unlist(idlist), sep='/') - else temp <- unlist(idlist) - - dimnames(result) <- list(temp, temp) - result -} -@ -\section{Pedigree alignment} -An \emph{aligned} pedigree is an object that contains a pedigree along -with a set of information that allows for pretty plotting. -This information consists of two parts: -a set of vertical and horizontal plotting coordinates along with the -identifier of the subject to be plotted at each position, -and a list of connections to be made between parent/child, spouse/spouse, -and twin/twin. -Creating this aligment turned out to be one of the more difficult parts -of the project, and is the area where significant further work could be -done. -All the routines in this section completely ignore the [[id]] component -of a pedigree; everyone is indexed solely by their row number in the object. - -\subsection{Hints} - -The first part of the work has to do with a [[hints]] list for each -pedigree. It consists of 3 parts: -\begin{itemize} - \item The left to right order in which founders should be processed. - \item The order in which siblings should be listed within a family. - \item For selected spouse pairs, who is on the left/right, and which of the - two should be the anchor, i.e., determine where the marriage is plotted. - \end{itemize} -The default starting values for all of these are simple: founders are -processed in the order in which they appear in the data set, -children appear in the order they are found in the data set, -husbands are to the left of their wives, and a marriage is plotted -at the leftmost spouse. -A simple example where we want to bend these rules is when two families -marry, and the pedigrees for both extend above the wedded pair. -In the joint pedigree the -pair should appear as the right-most child in the left hand family, and -as the left-most child in the right hand family. -With respect to founders, assume that a family has three lineages with -a marriage between 1 and 2, and another between 2 and 3. In the joint -pedigree the sets should be 1, 2, 3 from left to right. - -The hints consist of a list with two components. -The first is a vector of numbers of the same length as the pedigree, -used to order the female founders and to order siblings within -family. For subjects not part of either of these the value can be -arbitrary. -The second is a 3 column matrix of spouse pairs, each row indicates the -left-hand member of the pair, the right-hand member, and which of the two -is the anchor, i.e., directly connected to thier parent. -Double and triple marriages can start to get interesting. - - -The [[autohint]] routine is used to create an initial hints list. -It is a part of the general intention to make the routine do -``pretty good'' drawings automatically. -The basic algorithm is trial and error. -\begin{itemize} - \item Start with the simplest possible hints (user input is accepted) - \item Call align.pedigree to see how this works out - \item Fix any spouses that are not next to each other but could be. - \item Any fix on the top level mixes up everything below, so we do the - fixes one level at a time. -\end{itemize} -The routine makes no attempt to reorder founders. It just isn't smart enough%' -to figure that out. - -The first thing to be done is to check on twins. They are a nuisance, since -twins need to move together. The [[ped$relation]] object has a factor in it, -so first turn that into numeric. -We create 3 vectors: [[twinrel]] is a matrix containing pairs of twins and -their relation, it is a subset of the incoming [[relation]] matrix. -The [[twinset]] vector identifies twins, it is 0 for anyone who is not a -part of a multiple-birth set, and a unique id for each member of a set. -We use the minimum row number of the members of the set as the id. -[[twinord]] is a starting order vector for the set; it mostly makes sure -that there are no ties (who knows what a user may have used for starting -values.) - -A recent addition (JPS, 5/2013) is to carry forward packaged and align to -kindepth and align.pedigree. - -<>= -autohint <- function(ped, hints, packed=TRUE, align=FALSE) { - if (!is.null(ped$hints)) return(ped$hints) #nothing to do - n <- length(ped$id) - depth <- kindepth(ped, align=TRUE) - - if (is.null(ped$relation)) relation <- NULL - else relation <- cbind(as.matrix(ped$relation[,1:2]), - as.numeric(ped$relation[,3])) - if (!is.null(relation) && any(relation[,3] <4)) { - temp <- (relation[,3] < 4) - twinlist <- unique(c(relation[temp,1:2])) #list of twin id's - twinrel <- relation[temp,,drop=F] - - twinset <- rep(0,n) - twinord <- rep(1,n) - for (i in 2:length(twinlist)) { - # Now, for any pair of twins on a line of twinrel, give both - # of them the minimum of the two ids - # For a set of triplets, it might take two iterations for the - # smallest of the 3 numbers to "march" across the threesome. - # For quads, up to 3 iterations, for quints, up to 4, .... - newid <- pmin(twinrel[,1], twinrel[,2]) - twinset[twinrel[,1]] <- newid - twinset[twinrel[,2]] <- newid - twinord[twinrel[,2]] <- pmax(twinord[twinrel[,2]], - twinord[twinrel[,1]]+1) - } - } - else { - twinset <- rep(0,n) - twinrel <- NULL - } - <> - <> - <> - list(order=horder, spouse=sptemp) - } -@ - -Next is an internal function that rearranges someone to be -the leftmost or rightmost of his/her siblings. The only -real complication is twins -- if one of them moves the other has to move too. -And we need to keep the monozygotics together within a band of triplets. -Algorithm: if the person to be moved is part of a twinset, -first move all the twins to the left end (or right -as the case may be), then move all the monozygotes to the -left, then move the subject himself to the left. -<>= -shift <- function(id, sibs, goleft, hint, twinrel, twinset) { - if (twinset[id]> 0) { - shift.amt <- 1 + diff(range(hint[sibs])) # enough to avoid overlap - twins <- sibs[twinset[sibs]==twinset[id]] - if (goleft) - hint[twins] <- hint[twins] - shift.amt - else hint[twins] <- hint[twins] + shift.amt - - mono <- any(twinrel[c(match(id, twinrel[,1], nomatch=0), - match(id, twinrel[,2], nomatch=0)),3]==1) - if (mono) { - # - # ok, we have to worry about keeping the monozygotics - # together within the set of twins. - # first, decide who they are, by finding those monozygotic - # with me, then those monozygotic with the results of that - # iteration, then .... If I were the leftmost, this could - # take (#twins -1) iterations to get us all - # - monoset <- id - rel2 <- twinrel[twinrel[,3]==1, 1:2, drop=F] - for (i in 2:length(twins)) { - newid1 <- rel2[match(monoset, rel2[,1], nomatch=0),2] - newid2 <- rel2[match(monoset, rel2[,2], nomatch=0),1] - monoset <- unique(c(monoset, newid1, newid2)) - } - if (goleft) - hint[monoset]<- hint[monoset] - shift.amt - else hint[monoset]<- hint[monoset] + shift.amt - } - } - - #finally, move the subject himself - if (goleft) hint[id] <- min(hint[sibs]) -1 - else hint[id] <- max(hint[sibs]) +1 - - hint[sibs] <- rank(hint[sibs]) # aesthetics -- no negative hints - hint - } -@ - -Now, get an ordering of the pedigree to use as the starting point. -The numbers start at 1 on each level. -We don't need the final ``prettify" step, hence align=F. -If there is a hints structure entered, we retain it's non-zero entries, -otherwise people are put into the order of the data set. -We allow the hints input to be only an order vector -Twins are -then further reordered. -<>= -if (!missing(hints)) { - if (is.vector(hints)) hints <- list(order=hints) - if (is.matrix(hints)) hints <- list(spouse=hints) - if (is.null(hints$order)) horder <- integer(n) - else horder <- hints$order - } -else horder <- integer(n) - -for (i in unique(depth)) { - who <- (depth==i & horder==0) - if (any(who)) horder[who] <- 1:sum(who) #screwy input - overwrite it - } - -if (any(twinset>0)) { - # First, make any set of twins a cluster: 6.01, 6.02, ... - # By using fractions, I don't have to worry about other sib's values - for (i in unique(twinset)) { - if (i==0) next - who <- (twinset==i) - horder[who] <- mean(horder[who]) + twinord[who]/100 - } - - # Then reset to integers - for (i in unique(ped$depth)) { - who <- (ped$depth==i) - horder[who] <- rank(horder[who]) #there should be no ties - } - } - -if (!missing(hints)) sptemp <- hints$spouse -else sptemp <- NULL -plist <- align.pedigree(ped, packed=packed, align=align, - hints=list(order=horder, spouse=sptemp)) -@ -The result coming back from align.pedigree is a set of vectors and -matrices: -\begin{description} - \item[n] vector, number of entries per level - \item[nid] matrix, one row per level, numeric id of the subject plotted - here - \item[spouse] integer matrix, one row per level, subject directly to my - right is my spouse (1), a double marriage (2), or neither (0). - \item[fam] matrix, link upward to my parents, or 0 if no link. -\end{description} - -\begin{figure} - \myfig{autohint1} - \caption{A simple pedigree before (left) and after (right) the - autohint computations.} - \label{fig:auto1} -\end{figure} - -Now, walk down through the levels one by one. -A candidate subject is one who appears twice on the level, once -under his/her parents and once somewhere else as a spouse. -Move this person and spouse the the ends of their sibships and -add a marriage hint. -Figure \ref{fig:auto1} shows a simple case. The input data set has -the subjects ordered from 1--11, the left panel is the result without -hints which processes subjects in the order encountered. -The return values from [[align.pedigree]] have subject 9 shown twice. -The first is when he is recognized as the spouse of subject 4, the second -as the child of 6--7. - -The basic logic is -\begin{enumerate} - \item Find a subject listed multiple times on a line (assume it is a male). - This means that he has multiple connections, usually one to his parents and - the other to a spouse tied to her parents. (If the - spouse were a marry-in she would have been placed alongside and there - would be no duplication.) - \item Say subject x is listed at locations 2, 8, and 12. We look at one - pairing at a time, either 2-8 or 8-12. Consider the first one. - \begin{itemize} - \item If position 2 is associated with siblings, rearrange them to - put subject 2 on the right. If it is associated with a spouse at - this location, put that spouse on the right of her siblings. - \item Repeat the work for position 8, but moving targets to the left. - \item At either position, if it is associated with a spouse then - add a marriage. If both ends of the marriage are anchored, i.e., - connected to a family, then either end may be listed as the anchor - in the output; follow the suggestion of the duporder routine. If - only one is, it is usually better to anchor it there, so that the - marriage is processed by[[align.pedigree]] when that family is. - (At least I think so.) - \end{itemize} -\end{enumerate} -This logic works 9 times out of 10, at least for human pedigrees. -We'll look at more complex cases below when looking at the [[duporder]] %' -(order the duplicates) -function, which returns a matrix with columns 1 and 2 being a pair -of duplicates, and 3 a direction. -Note that in the following code [[idlist]] refers to the row numbers of -each subject in the pedigree, not to their label [[ped$id]]. -<>= -<> -<> -maxlev <- nrow(plist$nid) -for (lev in 1:maxlev) { - idlist <- plist$nid[lev,1:plist$n[lev]] #subjects on this level - dpairs <- duporder(idlist, plist, lev, ped) #duplicates to be dealt with - if (nrow(dpairs)==0) next; - for (i in 1:nrow(dpairs)) { - anchor <- spouse <- rep(0,2) - for (j in 1:2) { - direction <- c(FALSE, TRUE)[j] - mypos <- dpairs[i,j] - if (plist$fam[lev, mypos] >0) { - # Am connected to parents at this location - anchor[j] <- 1 #familial anchor - sibs <- idlist[findsibs(mypos, plist, lev)] - if (length(sibs) >1) - horder <- shift(idlist[mypos], sibs, direction, - horder, twinrel, twinset) - } - else { - #spouse at this location connected to parents ? - spouse[j] <- findspouse(mypos, plist, lev, ped) - if (plist$fam[lev,spouse[j]] >0) { # Yes they are - anchor[j] <- 2 #spousal anchor - sibs <- idlist[findsibs(spouse[j], plist, lev)] - if (length(sibs) > 1) - horder <- shift(idlist[spouse[j]], sibs, direction, - horder, twinrel, twinset) - } - } - } -@ - -At this point the most common situation will be what is shown in -figure \ref{fig:auto1}. The variable [[anchor]] is (2,1) showing that the -left hand copy of subject 9 is connected to an anchored spouse and the -right hand copy is himself anchored. The proper addition to the -spouselist is [[(4, 9, dpairs)]], where the last is the hint from the -dpairs routine as to which of the parents is the one to follow further when -drawing the entire pedigree. (When drawing a pedigree and there is a -child who can be reached from multiple founders, we only want to find -the child once.) - -The double marry-in found in figure \ref{fig:auto2}, subject 11, leads -to value of (2,2) for the [[anchor]] variable. The proper addition to -the [[sptemp]] matrix in this case will be two rows, (5, 11, 1) indicating -that 5 should be plotted left of 11 for the 5-11 marriage, with the first -partner as the anchor, and a second row (11, 9, 2). -This will cause the common spouse to be plotted in the middle. - -Multiple marriages can lead to unanchored subjects. -In the left hand portion of figure \ref{fig:auto3} we have two -double marriages, one on the left and one on the right with -anchor values of (0,2) and (2,0), respectively. -We add two marriages to the return list to ensure that both print -in the correct left-right order; the 14-4 one is correct by default -but it's easier to output a line than check sex orders. %' - -\begin{figure} - \myfig{autohint3} - \caption{Pedigrees with multiple marriages} - \label{fig:auto3} - \end{figure} - -The left panel of figure \ref{fig:auto3} shows a case where -subject 11 marries into the pedigree but also has a second spouse. -The [[anchor]] variable for -this case will be (2, 0); the first instance of 11 has a spouse tied -into the tree above, the second instance has no upward connections. -In the top row, subject 6 has values of (0, 0) since neither -connection has an upward parent. -In the right hand panel subject 2 has an anchor variable of (0,1). - -<>= - # add the marriage(s) - id1 <- idlist[dpairs[i,1]] # i,1 and i,2 point to the same person - id2 <- idlist[spouse[1]] - id3 <- idlist[spouse[2]] - - temp <- switch(paste(anchor, collapse=''), - "21" = c(id2, id1, dpairs[i,3]), #the most common case - "22" = rbind(c(id2, id1, 1), c(id1, id3, 2)), - "02" = c(id2, id1, 0), - "20" = c(id2, id1, 0), - "00" = rbind(c(id1, id3, 0), c(id2, id1, 0)), - "01" = c(id2, id1, 2), - "10" = c(id1, id2, 1), - NULL) - - if (is.null(temp)) { - warning("Unexpected result in autohint, please contact developer") - return(list(order=1:n)) #punt - } - else sptemp <- rbind(sptemp, temp) - } - # - # Recompute, since this shifts things on levels below - # - plist <- align.pedigree(ped, packed=packed, align=align, - hints=list(order=horder, spouse=sptemp)) - } -@ - -For the case shown in figure \ref{fig:align1} the [[duporder]] function -will return a single row array with values (2, 6, 1), the first two -being the positions of the duplicated subject. -The anchor will be 2 since that is the copy connected to parents -The direction is TRUE, since the spouse is to the left of the anchor point. -The id is 9, sibs are 8, 9, 10, and the shift function will create position -hints of 2,1,3, which will cause them to be listed in the order 9, 8, 10. - -The value of spouse is 3 (third position in the row), subjects 3,4, and 5 -are reordered, and finally the line (4,9,1) is added to the sptemp -matrix. -In this particular case the final element could be a 1 or a 2, since both -are connected to their parents. - -\begin{figure} - \myfig{autohint2} - \caption{A more complex pedigree.} - \label{fig:align2} -\end{figure} - -Figure \ref{fig:align2} shows a more complex case with several arcs. -In the upper left is a double marry-in. -The [[anchor]] variable in the above code -will be (2,2) since both copies have an anchored spouse. -The left and right sets of sibs are reordered (even though the left -one does not need it), and two lines are added to the sptemp matrix: -(5,11,1) and (11,9,2). - -On the upper right is a pair of overlapping arcs. -In the final tree we want to put sibling 28 to the right of 29 since -that will allow one node to join, but if we process the subjects in -lexical order the code will first shift 28 to the right and then later -shift over 29. -The duporder function tries to order the duplicates into a matrix -so that the closest ones are processed last. The definition of close -is based first on whether the families touch, and second on the -actual distance. -The third column of the matrix hints at whether the marriage should -be plotted at the left (1) or right (2) position of the pair. The -goal for this is to spread apart families of cousins; in the -example to not have the children of 28/31 plotted under the 21/22 -grandparents, and those for 29/32 under the 25/26 grandparents. -The logic for this column is very ad hoc: put children near the edges. -<>= -duporder <- function(idlist, plist, lev, ped) { - temp <- table(idlist) - if (all(temp==1)) return (matrix(0L, nrow=0, ncol=3)) - - # make an intial list of all pairs's positions - # if someone appears 4 times they get 3 rows - npair <- sum(temp-1) - dmat <- matrix(0L, nrow=npair, ncol=3) - dmat[,3] <- 2; dmat[1:(npair/2),3] <- 1 - i <- 0 - for (id in unique(idlist[duplicated(idlist)])) { - j <- which(idlist==id) - for (k in 2:length(j)) { - i <- i+1 - dmat[i,1:2] <- j[k + -1:0] - } - } - if (nrow(dmat)==1) return(dmat) #no need to sort it - - # families touch? - famtouch <- logical(npair) - for (i in 1:npair) { - if (plist$fam[lev,dmat[i,1]] >0) - sib1 <- max(findsibs(dmat[i,1], plist, lev)) - else { - spouse <- findspouse(dmat[i,1], plist, lev, ped) - ##If spouse is marry-in then move on without looking for sibs - if (plist$fam[lev,spouse]==0) {famtouch[i] <- F; next} - sib1 <- max(findsibs(spouse, plist, lev)) - } - - if (plist$fam[lev, dmat[i,2]] >0) - sib2 <- min(findsibs(dmat[i,2], plist, lev)) - else { - spouse <- findspouse(dmat[i,2], plist, lev, ped) - ##If spouse is marry-in then move on without looking for sibs - if (plist$fam[lev,spouse]==0) {famtouch[i] <- F; next} - sib2 <- min(findsibs(spouse, plist, lev)) - } - famtouch[i] <- (sib2-sib1 ==1) - } - dmat[order(famtouch, dmat[,1]- dmat[,2]),, drop=FALSE ] - } -@ - -Finally, here are two helper routines. -Finding my spouse can be interesting -- suppose we have a listing with -Shirley, Fred, Carl, me on the line with the first three marked as -spouse=TRUE -- it means that she has been married to all 3 of us. -First we find the string from rpos to lpos that is a marriage block; -99\% of the time this will be of length 2 of course. Then find -the person in that block who is opposite sex, and check that they -are connected. -The routine is called with a left-right position in the alignment -arrays and returns a position. -<>= -findspouse <- function(mypos, plist, lev, ped) { - lpos <- mypos - while (lpos >1 && plist$spouse[lev, lpos-1]) lpos <- lpos-1 - rpos <- mypos - while(plist$spouse[lev, rpos]) rpos <- rpos +1 - if (rpos==lpos) stop("autohint bug 3") - - opposite <-ped$sex[plist$nid[lev,lpos:rpos]] != ped$sex[plist$nid[lev,mypos]] - if (!any(opposite)) stop("autohint bug 4") # no spouse - spouse <- min((lpos:rpos)[opposite]) #can happen with a triple marriage - spouse - } -@ - -The findsibs function starts with a position and returns a position as well. -<>= -findsibs <- function(mypos, plist, lev) { - family <- plist$fam[lev, mypos] - if (family==0) stop("autohint bug 6") - which(plist$fam[lev,] == family) - } -@ - - -\subsection{Align.pedigree} -\label{sect:alignped} -The top level routine for alignment has 5 arguments -\begin{description} - \item[ped] a pedigree or pedigreeList object. In the case of - the latter we loop over each family separately. - \item[packed] do we allow branches of the tree to overlap? - If FALSE the drawing is much easier, but final drawing can - take up a huge amount of space. - \item[width] the minimum width for a packed pedigree. This - affects only small pedigrees, since the minimum possible - width for a pedigree is the largest number of individiuals in - one of the generations. - \item[align] should the final step of alignment be done? This - tries to center children under parents, to the degree possible. - \item a hints object. This is normally blank and autohint - is invoked. -\end{description} -The result coming back from align.pedigree is a set of vectors and -matrices: -\begin{description} - \item[n] vector, number of entries per level - \item[nid] matrix, one row per level, numeric id of the subject plotted - here - \item[pos] the horizontal position for plotting - \item[spouse] integer matrix, one row per level, subject directly to my - right is my spouse (1), a double marriage (2), or neither (0). - \item[fam] matrix, link upward to my parents, or 0 if no link. -\end{description} -<>= -align.pedigree <- function(ped, packed=TRUE, width=10, - align=TRUE, hints=ped$hints) { - if (class(ped)== 'pedigreeList') { - nped <- length(unique(ped$famid)) - alignment <- vector('list', nped) - for (i in 1:nped) { - temp <- align.pedigree(ped[i], packed, width, align) - alignment[[i]] <- temp$alignment - } - ped$alignment <- alignment - class(ped) <- 'pedigreeListAligned' - return(ped) - } - - if (is.null(hints)) { - hints <- try({autohint(ped)}, silent=TRUE) - if(class(hints)=="try-error") hints <- list(order=1:dim(ped)) - } else { - hints <- check.hint(hints, ped$sex) - } - - <> - <> - <> - } -@ - - -Start with some setup. -Throughout this routine the row number is used as a subject -id (ignoring the actual id label). -\begin{itemize} - \item Check that everyone has either two - parents or none (a singleton will just confuse us). - \item Verify that the hints are correct. - \item The relation data frame, if present, has a factor in it. Turn - that into numeric. -\item Create the [[spouselist]] array. This has 4 columns - \begin{enumerate} - \item Husband index (4= 4th person in the pedigree structure) - \item Wife index - \item Plot order: 1= husband left, 2=wife left - \item Anchor: 1=left member, 2=right member, 0= not yet determined - \end{enumerate} - As the routine proceeds a spousal pair can be encountered - multiple times; we take them out of this list when the ``connected'' - member is added to the pedigree so that no marriage gets added - twice. -\item To detect duplicates on the spouselist we need to create a - unique (but temporary) spouse-pair id using a simple hash. -\end{itemize} - -When importing data from autohint, that routine's spouse matrix %' -has column 1 = -subject plotted on the left, 2 = subject plotted on the right. -The [[spouselist]] array has column 1=husband, 2=wife. -Hence the clumsy looking ifelse below. The autohint format is more -congenial to users, who might modify the output, the spouselist format -easier for the code. - - -<>= -n <- length(ped$id) -dad <- ped$findex; mom <- ped$mindex #save typing -if (any(dad==0 & mom>0) || any(dad>0 & mom==0)) - stop("Everyone must have 0 parents or 2 parents, not just one") -level <- 1 + kindepth(ped, align=TRUE) - -horder <- hints$order # relative order of siblings within a family - -if (is.null(ped$relation)) relation <- NULL -else relation <- cbind(as.matrix(ped$relation[,1:2]), - as.numeric(ped$relation[,3])) - -if (!is.null(hints$spouse)) { # start with the hints list - tsex <- ped$sex[hints$spouse[,1]] #sex of the left member - spouselist <- cbind(0,0, 1+ (tsex!='male'), - hints$spouse[,3]) - spouselist[,1] <- ifelse(tsex=='male', hints$spouse[,1], hints$spouse[,2]) - spouselist[,2] <- ifelse(tsex=='male', hints$spouse[,2], hints$spouse[,1]) - } -else spouselist <- matrix(0L, nrow=0, ncol=4) - -if (!is.null(relation) && any(relation[,3]==4)) { - # Add spouses from the relationship matrix - trel <- relation[relation[,3]==4,,drop=F] - tsex <- ped$sex[trel[,1]] - trel[tsex!='male',1:2] <- trel[tsex!='male',2:1] - spouselist <- rbind(spouselist, cbind(trel[,1], - trel[,2], - 0,0)) - } -if (any(dad>0 & mom>0) ) { - # add parents - who <- which(dad>0 & mom>0) - spouselist <- rbind(spouselist, cbind(dad[who], mom[who], 0, 0)) - } - -hash <- spouselist[,1]*n + spouselist[,2] -spouselist <- spouselist[!duplicated(hash),, drop=F] -@ - -The [[alignped]] routine does the alignment using 3 co-routines: -\begin{description} - \item[alignped1] called with a single subject, returns the subtree - founded on this subject, as though it were the only tree - \item[alignped2] called with a set of sibs, calls alignped1 and - alignped3 multiple times to create a joint pedigree - \item[alignped3] given two side by side plotting structures, merge them - into a single one -\end{description} - -Call [[alignped1]] sequentially with each founder pair and merge the -results. -A founder pair is a married pair, neither of which has a father. - -<>= -noparents <- (dad[spouselist[,1]]==0 & dad[spouselist[,2]]==0) - ##Take duplicated mothers and fathers, then founder mothers -dupmom <- spouselist[noparents,2][duplicated(spouselist[noparents,2])] #Founding mothers with multiple marriages -dupdad <- spouselist[noparents,1][duplicated(spouselist[noparents,1])] #Founding fathers with multiple marriages -foundmom <- spouselist[noparents&!(spouselist[,1] %in% c(dupmom,dupdad)),2] # founding mothers -founders <- unique(c(dupmom, dupdad, foundmom)) -founders <- founders[order(horder[founders])] #use the hints to order them -rval <- alignped1(founders[1], dad, mom, level, horder, - packed=packed, spouselist=spouselist) - -if (length(founders)>1) { - spouselist <- rval$spouselist - for (i in 2:length(founders)) { - rval2 <- alignped1(founders[i], dad, mom, - level, horder, packed, spouselist) - spouselist <- rval2$spouselist - rval <- alignped3(rval, rval2, packed) - } - } -@ - -Now finish up. -There are 4 tasks to doS -\begin{enumerate} - \item For convenience the lower level routines kept the spouse - and nid arrays as a single object -- unpack them - \item In the spouse array a 1 in position i indicates that subject - i and i+1 are joined as a marriage. If these two have a common - ancestor change this to a 2, which indicates that a double line - should be used in the plot. - \item Add twins data to the output. - \item Do final alignment -\end{enumerate} - -<>= -# -# Unhash out the spouse and nid arrays -# -nid <- matrix(as.integer(floor(rval$nid)), nrow=nrow(rval$nid)) -spouse <- 1L*(rval$nid != nid) -maxdepth <- nrow(nid) - -# For each spouse pair, find out if it should be connected with -# a double line. This is the case if they have a common ancestor -ancestor <- function(me, momid, dadid) { - alist <- me - repeat { - newlist <- c(alist, momid[alist], dadid[alist]) - newlist <- sort(unique(newlist[newlist>0])) - if (length(newlist)==length(alist)) break - alist <- newlist - } - alist[alist!=me] - } -for (i in (1:length(spouse))[spouse>0]) { - a1 <- ancestor(nid[i], mom, dad) - a2 <- ancestor(nid[i+maxdepth],mom, dad) #matrices are in column order - if (any(duplicated(c(a1, a2)))) spouse[i] <- 2 - } -@ - -The twins array is of the same shape as the spouse and nid arrays: -one row per level giving data for the subjects plotted on that row. -In this case they are -\begin{itemize} - \item 0= nothing - \item 1= the sib to my right is a monzygotic twin, - \item 2= the sib to my right is a dizygote, - \item 3= the sib to my right is a twin, unknown zyogosity. -\end{itemize} -<>= -if (!is.null(relation) && any(relation[,3] < 4)) { - twins <- 0* nid - who <- (relation[,3] <4) - ltwin <- relation[who,1] - rtwin <- relation[who,2] - ttype <- relation[who,3] - - # find where each of them is plotted (any twin only appears - # once with a family id, i.e., under their parents) - ntemp <- ifelse(rval$fam>0, nid,0) # matix of connected-to-parent ids - ltemp <- (1:length(ntemp))[match(ltwin, ntemp, nomatch=0)] - rtemp <- (1:length(ntemp))[match(rtwin, ntemp, nomatch=0)] - twins[pmin(ltemp, rtemp)] <- ttype - } -else twins <- NULL -@ - -At this point the pedigree has been arranged, with the positions -in each row going from 1 to (number of subjects in the row). -(For a packed pedigree, which is the usual case). -Having everything pushed to the left margin isn't very -pretty, now we fix that. -Note that alignped4 wants a T/F spouse matrix: it doesn't care - about your degree of relationship to the spouse. -<>= -if ((is.numeric(align) || align) && max(level) >1) - pos <- alignped4(rval, spouse>0, level, width, align) -else pos <- rval$pos - -if (is.null(twins)) - list(n=rval$n, nid=nid, pos=pos, fam=rval$fam, spouse=spouse) -else list(n=rval$n, nid=nid, pos=pos, fam=rval$fam, spouse=spouse, - twins=twins) -@ -\subsection{alignped1} -This is the first of the three co-routines. -It is called with a single subject, and returns the subtree founded -on said subject, as though it were the only tree. -We only go down the pedigree, not up. -Input arguments are -\begin{description} - \item[nid] the numeric id of the subject in question - \item[dad] points to the row of the father, 0=no father in pedigree - \item[mom] points to the row of the mother - \item[level] the plotting depth of each subject - \item[horder] orders the kids within a sibship - \item[packed] if true, everything is slid to the left - \item[spouselist] a matrix of spouses - \begin{itemize} - \item col 1= pedigree index of the husband - \item col 2= pedigree index of the wife - \item col 3= 1:plot husband to the left, 2= wife to the left - \item col 4= 1:left member is rooted here, 2=right member, 0=either - \end{itemize} -\end{description} - -The return argument is a set of matrices as described in -section \ref{sect:alignped}, along with the spouselist matrix. -The latter has marriages removed as they are processed. - -In this routine the [[nid]] array consists of the final nid array + 1/2 of the -final spouse array. -The basic algorithm is simple. -\begin{enumerate} - \item Find all of the spouses for which [[x]] is the anchor subject. If - there are none then return the trivial tree consisting of [[x]] alone. - \item For each marriage in the set, call [[alignped2]] on the children - and add this to the result. -\end{enumerate} -Note that the [[spouselist]] matrix will only contain spouse pairs that -are not yet processed. -The logic for anchoring is slightly tricky. First, if row 4 of -the spouselist matrix is 0, we anchor at the first opportunity, i.e. now.. -Also note that if spouselist[,3]==spouselist[,4] it is -the husband who is the anchor (just write out the possibilities). - -<>= -alignped1 <- function(x, dad, mom, level, horder, packed, spouselist){ - # Set a few constants - maxlev <- max(level) - lev <- level[x] - n <- integer(maxlev) - - if (length(spouselist)==0) spouse <- NULL - else { - if (any(spouselist[,1]==x)){ - sex <- 1 # I'm male - sprows <- (spouselist[,1]==x & (spouselist[,4] ==spouselist[,3] | - spouselist[,4] ==0)) - spouse <- spouselist[sprows, 2] #ids of the spouses - } - else { - sex <- 2 - sprows <- (spouselist[,2]==x & (spouselist[,4]!=spouselist[,3] | - spouselist[,4] ==0)) - spouse <- spouselist[sprows, 1] - } - } - # Marriages that cross levels are plotted at the higher level (lower - # on the paper). - if (length(spouse)) { - keep <- level[spouse] <= lev - spouse <- spouse[keep] - sprows <- (which(sprows))[keep] - } - nspouse <- length(spouse) # Almost always 0, 1 or 2 -@ -Create the set of 3 return structures, which will be matrices with -(1+nspouse) columns. -If there are children then other routines will widen the result. -<>= - nid <- fam <- matrix(0L, maxlev, nspouse+1) - pos <- matrix(0.0, maxlev, nspouse +1) - n[lev] <- nspouse +1 - pos[lev,] <- 0:nspouse - if (nspouse ==0) { - # Easy case: the "tree rooted at x" is only x itself - nid[lev,1] <- x - return(list(nid=nid, pos=pos, fam=fam, n=n, spouselist=spouselist)) - } -@ -Now we have a list of spouses that should be dealt with and -the the correponding columns of the spouselist matrix. -Create the two complimentary lists lspouse and rspouse to denote -those plotted on the left and on the right. -For someone with lots of spouses we try to split them evenly. -If the number of spouses is odd, then men should have more on the -right than on the left, women more on the right. -Any hints in the spouselist matrix override. -We put the undecided marriages closest to [[x]], -then add predetermined ones to the left and -right. -The majority of marriages will be undetermined singletons, for which -nleft will be 1 for female (put my husband to the left) and 0 for male. -In one bug found by plotting canine data, lspouse could initially be empty but -length(rspouse)> 1. This caused nleft>length(indx). A fix was to not let -indx to be indexed beyond its length, fix by JPS 5/2013. - -<>= - lspouse <- spouse[spouselist[sprows,3] == 3-sex] # 1-2 or 2-1 - rspouse <- spouse[spouselist[sprows,3] == sex] # 1-1 or 2-2 - if (any(spouselist[sprows,3] ==0)) { - #Not yet decided spouses - indx <- which(spouselist[sprows,3] ==0) - nleft <- floor((length(sprows) + (sex==2))/2) #total number to left - nleft <- nleft - length(lspouse) #number of undecideds to the left - if (nleft >0) { - # JPS fixed 5/2013, don't index when nleft > length(indx) - lspouse <- c(lspouse, spouse[indx[seq_len(min(nleft,length(indx)))]]) - indx <- indx[-(seq_len(min(nleft,length(indx))))] - } - if (length(indx)) rspouse <- c(spouse[indx], rspouse) - } - - nid[lev,] <- c(lspouse, x, rspouse) - nid[lev, 1:nspouse] <- nid[lev, 1:nspouse] + .5 #marriages - - spouselist <- spouselist[-sprows,, drop=FALSE] -@ - -The spouses are in the pedigree, now look below. -For each spouse get the list of children. -If there are any we call alignped2 to generate their tree and -then mark the connection to their parent. -If multiple marriages have children we need to join the -trees. -<>= - nokids <- TRUE #haven't found any kids yet - spouse <- c(lspouse, rspouse) #reorder - for (i in 1:nspouse) { - ispouse <- spouse[i] - children <- which((dad==x & mom==ispouse) | (dad==ispouse & mom==x)) - if (length(children) > 0) { - rval1 <- alignped2(children, dad, mom, level, horder, - packed, spouselist) - spouselist <- rval1$spouselist - # set the parentage for any kids - # a nuisance: it's possible to have a child appear twice, when - # via inbreeding two children marry --- makes the "indx" line - # below more complicated - temp <- floor(rval1$nid[lev+1,]) # cut off the .5's for matching - indx <- (1:length(temp))[match(temp,children, nomatch=0) >0] - rval1$fam[lev+1,indx] <- i #set the kids parentage - if (!packed) { - # line the kids up below the parents - # The advantage at this point: we know that there is - # nothing to the right that has to be cared for - kidmean <- mean(rval1$pos[lev+1, indx]) - parmean <- mean(pos[lev, i + 0:1]) - if (kidmean > parmean) { - # kids to the right of parents: move the parents - indx <- i:(nspouse+1) - pos[lev, indx] <- pos[lev, indx] + (kidmean - parmean) - } - else { - # move the kids and their spouses and all below - shift <- parmean - kidmean - for (j in (lev+1):maxlev) { - jn <- rval1$n[j] - if (jn>0) - rval1$pos[j, 1:jn] <- rval1$pos[j, 1:jn] +shift - } - } - } - if (nokids) { - rval <- rval1 - nokids <- FALSE - } - else { - rval <- alignped3(rval, rval1, packed) - } - } - } -@ - -To finish up we need to splice together the tree made up -from all the kids, which only has data from lev+1 down, -with the data here. -There are 3 cases. The first and easiest is when no -children were found. -The second, and most common, is when the tree below is -wider than the tree here, in which case we add the -data from this level onto theirs. -The third is when below is narrower, for instance an -only child. -<>= - if (nokids) { - return(list(nid=nid, pos=pos, fam=fam, n=n, spouselist=spouselist)) - } - - if (ncol(rval$nid) >= 1+nspouse) { - # The rval list has room for me! - rval$n[lev] <- n[lev] - indx <- 1:(nspouse+1) - rval$nid[lev, indx] <- nid[lev,] - rval$pos[lev, indx] <- pos[lev,] - } - else { - #my structure has room for them - indx <- 1:ncol(rval$nid) - rows <- (lev+1):maxlev - n[rows] <- rval$n[rows] - nid[rows,indx] <- rval$nid[rows,] - pos[rows,indx] <- rval$pos[rows,] - fam[rows,indx] <- rval$fam[rows,] - rval <- list(nid=nid, pos=pos, fam=fam, n=n) - } - rval$spouselist <- spouselist - rval - } -@ - -\subsection{alignped2} -This routine takes a collection of siblings, grows the tree for -each, and appends them side by side into a single tree. -The input arguments are the same as those to -[[alignped1]] with the exception that [[x]] will be a vector. -This routine does nothing to the spouselist matrix, but needs -to pass it down the tree and back since one of the routines -called by [[alignped2]] might change the matrix. - -The code below has one non-obvious special case. Suppose -that two sibs marry. -When the first sib is processed by [[alignped1]] then both -partners (and any children) will be added to the rval -structure below. -When the second sib is processed they -will come back as a 1 element tree (the marriage will no longer -be on the spouselist), which should \emph{not} be added -onto rval. -The rule thus is to not add any 1 element tree whose -value (which must be x[i]) is already in the rval structure for this level. -(Where did Curtis O. \emph{find} these families?) - -<>= -alignped2 <- function(x, dad, mom, level, horder, packed, - spouselist) { - x <- x[order(horder[x])] # Use the hints to order the sibs - rval <- alignped1(x[1], dad, mom, level, horder, packed, - spouselist) - spouselist <- rval$spouselist - - if (length(x) >1) { - mylev <- level[x[1]] - for (i in 2:length(x)) { - rval2 <- alignped1(x[i], dad, mom, level, - horder, packed, spouselist) - spouselist <- rval2$spouselist - - # Deal with the unusual special case: - if ((rval2$n[mylev] > 1) || - (is.na(match(x[i], floor(rval$nid[mylev,]))))) - rval <- alignped3(rval, rval2, packed) - } - rval$spouselist <- spouselist - } - rval - } -@ - - -\subsection{alignped3} -The third co-routine merges two pedigree trees which are side by -side into a single object. -The primary special case is when the rightmost person in the left -tree is the same as the leftmost person in the right tree; we -needn't plot two copies of the same person side by side. -(When initializing the output structures don't worry about this - there -is no harm if they are a column bigger than finally needed.) -Beyond that the work is simple bookkeeping. - -<>= -alignped3 <- function(x1, x2, packed, space=1) { - maxcol <- max(x1$n + x2$n) - maxlev <- length(x1$n) - n1 <- max(x1$n) # These are always >1 - n <- x1$n + x2$n - - nid <- matrix(0, maxlev, maxcol) - nid[,1:n1] <- x1$nid - - pos <- matrix(0.0, maxlev, maxcol) - pos[,1:n1] <- x1$pos - - fam <- matrix(0, maxlev, maxcol) - fam[,1:n1] <- x1$fam - fam2 <- x2$fam - if (!packed) { - <> - } - <> - - if (max(n) < maxcol) { - maxcol <- max(n) - nid <- nid[,1:maxcol] - pos <- pos[,1:maxcol] - fam <- fam[,1:maxcol] - } - - list(n=n, nid=nid, pos=pos, fam=fam) - } -@ - -For the unpacked case, which is the traditional way to draw a pedigree -when we can assume the paper is infinitely wide, all parents are centered -over their children. -In this case we think if the two trees to be merged as solid blocks. -On input they both have a left margin of 0. -Compute how far over we have to slide the right tree. -<>= -slide <- 0 -for (i in 1:maxlev) { - n1 <- x1$n[i] - n2 <- x2$n[i] - if (n1 >0 & n2 >0) { - if (nid[i,n1] == x2$nid[i,1]) - temp <- pos[i, n1] - x2$pos[i,1] - else temp <- space + pos[i, n1] - x2$pos[i,1] - if (temp > slide) slide <- temp - } - } -@ - -Now merge the two trees. -Start at the top level and work down. -\begin{enumerate} - \item If n2=0, there is nothing to do - \item Decide if there is a subject overlap, and if so - \begin{itemize} - \item Set the proper parent id. - Only one of the two copies will be attached and the other - will have fam=0, so max(fam, fam2) preserves the correct one. - \item If not packed, set the position. Choose the one connected - to a parent, or midway for a double marriage. - \end{itemize} - \item If packed=TRUE determine the amount of slide for this row. It - will be [[space]] over from the last element in the left pedigree, - less overlap. - \item Move everything over - \item Fix all the children of this level, right hand pedigree, to - point to the correct parental position. -\end{enumerate} - -<>= -for (i in 1:maxlev) { - n1 <- x1$n[i] - n2 <- x2$n[i] - if (n2 >0) { # If anything needs to be done for this row... - if (n1>0 && (nid[i,n1] == floor(x2$nid[i,1]))) { - #two subjects overlap - overlap <- 1 - fam[i,n1] <- max(fam[i,n1], fam2[i,1]) - nid[i,n1] <- max(nid[i,n1], x2$nid[i,1]) #preserve a ".5" - if (!packed) { - if(fam2[i,1]>0) - if (fam[i,n1]>0) - pos[i,n1] <- (x2$pos[i,1] + pos[i,n1] + slide)/2 - else pos[i,n1] <- x2$pos[i,1]+ slide - } - n[i] <- n[i] -1 - } - else overlap <- 0 - - if (packed) slide <- if (n1==0) 0 else pos[i,n1] + space - overlap - - zz <- seq(from=overlap+1, length=n2-overlap) - nid[i, n1 + zz- overlap] <- x2$nid[i, zz] - fam[i, n1 + zz -overlap] <- fam2[i,zz] - pos[i, n1 + zz -overlap] <- x2$pos[i,zz] + slide - - if (i>= -alignped4 <- function(rval, spouse, level, width, align) { - if (is.logical(align)) align <- c(1.5, 2) #defaults - maxlev <- nrow(rval$nid) - width <- max(width, rval$n+.01) # width must be > the longest row - - n <- sum(rval$n) # total number of subjects - myid <- matrix(0, maxlev, ncol(rval$nid)) #number the plotting points - for (i in 1:maxlev) { - myid[i, rval$nid[i,]>0] <- cumsum(c(0, rval$n))[i] + 1:rval$n[i] - } - - # There will be one penalty for each spouse and one for each child - npenal <- sum(spouse[rval$nid>0]) + sum(rval$fam >0) - pmat <- matrix(0., nrow=npenal+1, ncol=n) - - indx <- 0 - # Penalties to keep spouses close - for (lev in 1:maxlev) { - if (any(spouse[lev,])) { - who <- which(spouse[lev,]) - indx <- max(indx) + 1:length(who) - pmat[cbind(indx, myid[lev,who])] <- sqrt(align[2]) - pmat[cbind(indx, myid[lev,who+1])] <- -sqrt(align[2]) - } - } - - # Penalties to keep kids close to parents - for (lev in (1:maxlev)[-1]) { # no parents at the top level - families <- unique(rval$fam[lev,]) - families <- families[families !=0] #0 is the 'no parent' marker - for (i in families) { #might be none - who <- which(rval$fam[lev,] == i) - k <- length(who) - indx <- max(indx) +1:k #one penalty per child - penalty <- sqrt(k^(-align[1])) - pmat[cbind(indx, myid[lev,who])] <- -penalty - pmat[cbind(indx, myid[lev-1, rval$fam[lev,who]])] <- penalty/2 - pmat[cbind(indx, myid[lev-1, rval$fam[lev,who]+1])] <- penalty/2 - } - } - maxrow <- min(which(rval$n==max(rval$n))) - pmat[nrow(pmat), myid[maxrow,1]] <- 1e-5 -@ - -Next come the constraints. If there are $k$ subjects on a line there will -be $k+1$ constraints for that line. The first point must be $\ge 0$, each -subesquent one must be at least 1 unit to the right, and the final point -must be $\le$ the max width. -<>= - ncon <- n + maxlev # number of constraints - cmat <- matrix(0., nrow=ncon, ncol=n) - coff <- 0 # cumulative constraint lines so var - dvec <- rep(1., ncon) - for (lev in 1:maxlev) { - nn <- rval$n[lev] - if (nn>1) { - for (i in 1:(nn-1)) - cmat[coff +i, myid[lev,i + 0:1]] <- c(-1,1) - } - - cmat[coff+nn, myid[lev,1]] <- 1 #first element >=0 - dvec[coff+nn] <- 0 - cmat[coff+nn+1, myid[lev,nn]] <- -1 #last element <= width-1 - dvec[coff+nn+1] <- 1-width - coff <- coff + nn+ 1 - } - - if (exists('solve.QP')) { - pp <- t(pmat) %*% pmat + 1e-8 * diag(ncol(pmat)) - fit <- solve.QP(pp, rep(0., n), t(cmat), dvec) - } - else stop("Need the quadprog package") - - newpos <- rval$pos - #fit <- lsei(pmat, rep(0, nrow(pmat)), G=cmat, H=dvec) - #newpos[myid>0] <- fit$X[myid] - newpos[myid>0] <- fit$solution[myid] - newpos - } -@ -\section{Plots} -The plotting function for pedigrees has 5 tasks -\begin{enumerate} - \item Gather information and check the data. - An important step is the call to align.pedigree. - \item Set up the plot region and size the symbols. - The program wants to plot circles and squares, - so needs to understand the geometry of the paper, pedigree size, and text - size to get the right shape and size symbols. - \item Set up the plot and add the symbols for each subject - \item Add connecting lines between spouses, and children with parents - \item Create an invisible return value containing the locations. -\end{enumerate} -Another task, not yet completely understood, is how we might break a plot -across multiple pages. - -<>= -plot.pedigree <- function(x, id = x$id, status = x$status, - affected = x$affected, - cex = 1, col = 1, - symbolsize = 1, branch = 0.6, - packed = TRUE, align = c(1.5,2), width = 8, - density=c(-1, 35,65,20), mar=c(4.1, 1, 4.1, 1), - angle=c(90,65,40,0), keep.par=FALSE, - subregion, pconnect=.5, ...) -{ - Call <- match.call() - n <- length(x$id) - <> - <> - <> - <> - <> - } -@ - -\subsection{Setup} -The dull part is first: check all of the input data for -correctness. -The [[sex]] variable is taken from the pedigree so we need not check -that. -The identifier for each subject is by default the [[id]] variable from -the pedigree, but users often want to add some extra text. -The status variable can be used to put a line through the symbol -of those who are deceased, it is an optional part of the pedigree. -<>= -if(is.null(status)) - status <- rep(0, n) -else { - if(!all(status == 0 | status == 1)) - stop("Invalid status code") - if(length(status) != n) - stop("Wrong length for status") -} -if(!missing(id)) { - if(length(id) != n) - stop("Wrong length for id") -} -@ -The ``affected status'' is a 0/1 matrix of any marker data that the -user might want to add. It may be attached to the pedigree or added -here. It can be a vector of length [[n]] or a matrix with [[n]] rows. -If it is not present, the default is to print open symbols without -shading or color, which corresponds to a code of 0, while a 1 means to -shade the symbol. - -If the argment is a matrix, then the shading and/or density value for -ith column is taken from the ith element of the angle/density arguments. - -(Update by JPS 5/2011) Update to allow missing values (NA) in the ``affected'' -indicators. Missingness of affection status will have a ``?'' in -the midpoint of the portion of the plot symbol rather than blank or shaded. -The ``?'' is in line with standards discussed in -Bennet et a. J of Gent Couns., 2008. - -For purposes within the plot method, NA values in ``affected'' are coded -to -1. - -<>= -if(is.null(affected)){ - affected <- matrix(0,nrow=n) -} -else { - if (is.matrix(affected)){ - if (nrow(affected) != n) stop("Wrong number of rows in affected") - if (is.logical(affected)) affected <- 1* affected - if (ncol(affected) > length(angle) || ncol(affected) > length(density)) - stop("More columns in the affected matrix than angle/density values") - } - else { - if (length(affected) != n) - stop("Wrong length for affected") - - if (is.logical(affected)) affected <- as.numeric(affected) - if (is.factor(affected)) affected <- as.numeric(affected) -1 - } - if(max(affected, na.rm=TRUE) > min(affected, na.rm=TRUE)) { - affected <- matrix(affected - min(affected, na.rm=TRUE),nrow=n) - ## affected[is.na(affected)] <- -1 - } else { - affected <- matrix(affected,nrow=n) - } - ## JPS 4/28/17 bug fix b/c some cases NAs are not set to -1 - affected[is.na(affected)] <- -1 - if (!all(affected==0 | affected==1 | affected == -1)) - stop("Invalid code for affected status") -} - -if (length(col) ==1) col <- rep(col, n) -else if (length(col) != n) stop("Col argument must be of length 1 or n") -@ - -\subsection{Sizing} -Now we need to set the sizes. -From align.pedigree we will get the maximum width and depth. -There is one plotted row for each row of the returned matrices. -The number of columns of the matrices is the max width of the pedigree, -so there are unused positions in shorter rows, these can be identifed -by having an nid value of 0. -Horizontal locations for each point go from 0 to xmax, subjects are at -least 1 unit apart; a large number will be exactly one unit part. -These locations will be at the top center of each plotted symbol. -<>= -<> -plist <- align.pedigree(x, packed = packed, width = width, align = align) -if (!missing(subregion)) plist <- subregion2(plist, subregion) -xrange <- range(plist$pos[plist$nid >0]) -maxlev <- nrow(plist$pos) -@ - -We would like to to make the boxes about 2.5 characters wide, which matches -most labels, but no more than 0.9 units wide or .5 units high. -We also want to vertical room for the labels. Which should have at least -1/2 of stemp2 space above and stemp2 space below. -The stemp3 variable is the height of labels: users may use multi-line ones. -Our constraints then are -\begin{itemize} - \item (box height + label height)*maxlev $\le$ height: the boxes and labels have - to fit vertically - \item (box height) * (maxlev + (maxlev-1)/2) $\le$ height: at least 1/2 a box of - space between each row of boxes - \item (box width) $\le$ stemp1 in inches - \item (box width) $\le$ 0.8 unit in user coordinates, otherwise they appear - to touch - \item User coordinates go from min(xrange)- 1/2 box width to - max(xrange) + 1/2 box width. - \item the box is square (in inches) -\end{itemize} - -The first 3 of these are easy. The fourth comes into play only for very packed -pedigrees. Assume that the box were the maximum size of .8 units, i.e., minimal -spacing between them. Then xmin -.45 to xmax + .45 covers the plot region, -the scaling between user coordinates and inches is (.8 + xmax-xmin) user = -figure region inches, and the box is .8*(figure width)/(.8 + xmax-xmin). -The transformation from user units to inches horizontally depends on the box -size, since I need to allow for 1/2 a box on the left and right. -Vertically the range from 1 to nrow spans the tops of the symbols, which -will be the figure region height less (the height of the -text for the last row + 1 box); remember that the coordinates point to the -top center of the box. -We want row 1 to plot at the top, which is done by appropriate setting -of the usr parameter. -<>= -frame() -oldpar <- par(mar=mar, xpd=TRUE) -psize <- par('pin') # plot region in inches -stemp1 <- strwidth("ABC", units='inches', cex=cex)* 2.5/3 -stemp2 <- strheight('1g', units='inches', cex=cex) -stemp3 <- max(strheight(id, units='inches', cex=cex)) - -ht1 <- psize[2]/maxlev - (stemp3 + 1.5*stemp2) -if (ht1 <=0) stop("Labels leave no room for the graph, reduce cex") -ht2 <- psize[2]/(maxlev + (maxlev-1)/2) -wd2 <- .8*psize[1]/(.8 + diff(xrange)) - -boxsize <- symbolsize* min(ht1, ht2, stemp1, wd2) # box size in inches -hscale <- (psize[1]- boxsize)/diff(xrange) #horizontal scale from user-> inch -vscale <- (psize[2]-(stemp3 + stemp2/2 + boxsize))/ max(1, maxlev-1) -boxw <- boxsize/hscale # box width in user units -boxh <- boxsize/vscale # box height in user units -labh <- stemp2/vscale # height of a text string -legh <- min(1/4, boxh *1.5) # how tall are the 'legs' up from a child -par(usr=c(xrange[1]- boxw/2, xrange[2]+ boxw/2, - maxlev+ boxh+ stemp3 + stemp2/2 , 1)) -@ - -\subsection{Drawing the tree} -Now we draw and label the boxes. Definition of the drawbox function is -deferred until later. -<>= -<> - -sex <- as.numeric(x$sex) -for (i in 1:maxlev) { - for (j in seq_len(plist$n[i])) { - k <- plist$nid[i,j] - drawbox(plist$pos[i,j], i, sex[k], affected[k,], - status[k], col[k], polylist, density, angle, - boxw, boxh) - text(plist$pos[i,j], i + boxh + labh*.7, id[k], cex=cex, - adj=c(.5,1), ...) - } -} -@ - -Now draw in the connections one by one. First those between spouses. -<>= -maxcol <- ncol(plist$nid) #all have the same size -for(i in 1:maxlev) { - tempy <- i + boxh/2 - if(any(plist$spouse[i, ]>0)) { - temp <- (1:maxcol)[plist$spouse[i, ]>0] - segments(plist$pos[i, temp] + boxw/2, rep(tempy, length(temp)), - plist$pos[i, temp + 1] - boxw/2, rep(tempy, length(temp))) - - temp <- (1:maxcol)[plist$spouse[i, ] ==2] - if (length(temp)) { #double line for double marriage - tempy <- tempy + boxh/10 - segments(plist$pos[i, temp] + boxw/2, rep(tempy, length(temp)), - plist$pos[i, temp + 1] - boxw/2, rep(tempy, length(temp))) - } - } -} -@ -Now connect the children to the parents. First there are lines up from each -child, which would be trivial except for twins, triplets, etc. Then we -draw the horizontal bar across siblings and finally the connector from -the parent. For twins, the ``vertical'' lines are angled towards a -common point, the variable is called [[target]] below. -The horizontal part is easier if we do things family by -family. The [[plist$twins]] variable is 1/2/3 for a twin on my right, -0 otherwise. - -<>= -for(i in 2:maxlev) { - zed <- unique(plist$fam[i, ]) - zed <- zed[zed > 0] #list of family ids - - for(fam in zed) { - xx <- plist$pos[i - 1, fam + 0:1] - parentx <- mean(xx) #midpoint of parents - - - # Draw the uplines - who <- (plist$fam[i,] == fam) #The kids of interest - if (is.null(plist$twins)) target <- plist$pos[i,who] - else { - twin.to.left <-(c(0, plist$twins[i,who])[1:sum(who)]) - temp <- cumsum(twin.to.left ==0) #increment if no twin to the left - # 5 sibs, middle 3 are triplets gives 1,2,2,2,3 - # twin, twin, singleton gives 1,1,2,2,3 - tcount <- table(temp) - target <- rep(tapply(plist$pos[i,who], temp, mean), tcount) - } - yy <- rep(i, sum(who)) - segments(plist$pos[i,who], yy, target, yy-legh) - - ## draw midpoint MZ twin line - if (any(plist$twins[i,who] ==1)) { - who2 <- which(plist$twins[i,who] ==1) - temp1 <- (plist$pos[i, who][who2] + target[who2])/2 - temp2 <- (plist$pos[i, who][who2+1] + target[who2])/2 - yy <- rep(i, length(who2)) - legh/2 - segments(temp1, yy, temp2, yy) - } - - # Add a question mark for those of unknown zygosity - if (any(plist$twins[i,who] ==3)) { - who2 <- which(plist$twins[i,who] ==3) - temp1 <- (plist$pos[i, who][who2] + target[who2])/2 - temp2 <- (plist$pos[i, who][who2+1] + target[who2])/2 - yy <- rep(i, length(who2)) - legh/2 - text((temp1+temp2)/2, yy, '?') - } - - # Add the horizontal line - segments(min(target), i-legh, max(target), i-legh) - - # Draw line to parents. The original rule corresponded to - # pconnect a large number, forcing the bottom of each parent-child - # line to be at the center of the bar uniting the children. - if (diff(range(target)) < 2*pconnect) x1 <- mean(range(target)) - else x1 <- pmax(min(target)+ pconnect, pmin(max(target)-pconnect, - parentx)) - y1 <- i-legh - if(branch == 0) - segments(x1, y1, parentx, (i-1) + boxh/2) - else { - y2 <- (i-1) + boxh/2 - x2 <- parentx - ydelta <- ((y2 - y1) * branch)/2 - segments(c(x1, x1, x2), c(y1, y1 + ydelta, y2 - ydelta), - c(x1, x2, x2), c(y1 + ydelta, y2 - ydelta, y2)) - } - } - } -@ - -The last set of lines are dotted arcs that connect mulitiple instances of -a subject on the same line. These instances may or may not be on the -same line. -The arrcconect function draws a quadratic arc between locations $(x_1, y_1)$ -and $(x_2, y_2$) whose height is 1/2 unit above a straight line connection. -<>= -arcconnect <- function(x, y) { - xx <- seq(x[1], x[2], length = 15) - yy <- seq(y[1], y[2], length = 15) + (seq(-7, 7))^2/98 - .5 - lines(xx, yy, lty = 2) - } - -uid <- unique(plist$nid) -## JPS 4/27/17: unique above only applies to rows -## unique added to for loop iterator -for (id in unique(uid[uid>0])) { - indx <- which(plist$nid == id) - if (length(indx) >1) { #subject is a multiple - tx <- plist$pos[indx] - ty <- ((row(plist$pos))[indx])[order(tx)] - tx <- sort(tx) - for (j in 1:(length(indx) -1)) - arcconnect(tx[j + 0:1], ty[j+ 0:1]) - } - } -@ - -\subsection{Final output} -Remind the user of subjects who did not get -plotted; these are ususally subjects who are married in but without -children. Unless the pedigree contains spousal information the -routine does not know who is the spouse. -Then restore the plot parameters. This would only not be done if someone -wants to further annotate the plot. -Last, we give a list of the plot positions for each subject. Someone -who is plotted twice will have their first position listed. -<>= -ckall <- x$id[is.na(match(x$id,x$id[plist$nid]))] -if(length(ckall>0)) cat('Did not plot the following people:',ckall,'\n') - -if(!keep.par) par(oldpar) - -tmp <- match(1:length(x$id), plist$nid) -invisible(list(plist=plist, x=plist$pos[tmp], y= row(plist$pos)[tmp], - boxw=boxw, boxh=boxh, call=Call)) -@ -\subsection{Symbols} -There are four sumbols corresponding to the four sex codes: square = male, -circle = female, diamond= unknown, and triangle = terminated. -They are shaded according to the value(s) of affected status for each -subject, where 0=unfilled and 1=filled, and filling uses the standard -arguments of the [[polygon]] function. -The nuisance is when the affected status is a matrix, in which case the -symbol will be divided up into sections, clockwise starting at the -lower left. -I asked Beth about this (original author) and there was no particular -reason to start at 6 o'clock, but it's now established as history. - -The first part of the code is to create the collection of polygons that -will make up the symbol. These are then used again and again. -The collection is kept as a list with the four elements square, circle, -diamond and triangle. -Each of these is in turn a list with ncol(affected) element, and each -of those in turn a list of x and y coordinates. -There are 3 cases: the affected matrix has -only one column, partitioning a circle for multiple columns, and -partitioning the other cases for multiple columns. - -<>= -<> -<> -if (ncol(affected)==1) { - polylist <- list( - square = list(list(x=c(-1, -1, 1,1)/2, y=c(0, 1, 1, 0))), - circle = list(list(x=.5* cos(seq(0, 2*pi, length=50)), - y=.5* sin(seq(0, 2*pi, length=50)) + .5)), - diamond = list(list(x=c(0, -.5, 0, .5), y=c(0, .5, 1, .5))), - triangle= list(list(x=c(0, -.56, .56), y=c(0, 1, 1)))) - } -else { - nc <- ncol(affected) - square <- polyfun(nc, list(x=c(-.5, -.5, .5, .5), y=c(-.5, .5, .5, -.5), - theta= -c(3,5,7,9)* pi/4)) - circle <- circfun(nc) - diamond <- polyfun(nc, list(x=c(0, -.5, 0, .5), y=c(-.5, 0, .5,0), - theta= -(1:4) *pi/2)) - triangle <- polyfun(nc, list(x=c(-.56, .0, .56), y=c(-.5, .5, -.5), - theta=c(-2, -4, -6) *pi/3)) - polylist <- list(square=square, circle=circle, diamond=diamond, - triangle=triangle) - } -@ - -The circle function is quite simple. The number of segments is arbitrary, -50 seems to be enough to make the eye happy. We draw the ray from 0 to -the edge, then a portion of the arc. The polygon function will connect -back to the center. -<>= -circfun <- function(nslice, n=50) { - nseg <- ceiling(n/nslice) #segments of arc per slice - - theta <- -pi/2 - seq(0, 2*pi, length=nslice +1) - out <- vector('list', nslice) - for (i in 1:nslice) { - theta2 <- seq(theta[i], theta[i+1], length=nseg) - out[[i]]<- list(x=c(0, cos(theta2)/2), - y=c(0, sin(theta2)/2) + .5) - } - out - } -@ - -Now for the interesting one --- dividing a polygon into ``pie slices''. -In computing this we can't use the usual $y= a + bx$ formula for a line, -because it doesn't work for vertical ones (like the sides of the square). -Instead we use the alternate formulation in terms of a dummy variable -$z$. -\begin{eqnarray*} - x &=& a + bz \\ - y &=& c + dz \\ -\end{eqnarray*} -Furthermore, we choose the constants $a$, $b$, $c$, and $d$ so that -the side of our polygon correspond to $0 \le z \le 1$. -The intersection of a particular ray at angle theta with a -particular side will satisfy -\begin{eqnarray} - theta &=& y/x = \frac{a + bz}{c+dz} \nonumber \\ - z &=& \frac{a\theta -c}{b - d\theta} \label{eq:z} \\ -\end{eqnarray} - -Equation \ref{eq:z} will lead to a division by zero if the ray from the -origin does not intersect a side, e.g., a vertical divider will be parallel -to the sides of a square symbol. The only solutions we want have -$0 \le z \le 1$ and are in the `forward' part of the ray. This latter %'` -is true if the inner product $x \cos(\theta) + y \sin(\theta) >0$. -Exactly one of the polygon sides will satisfy both conditions. - -<>= -polyfun <- function(nslice, object) { - # make the indirect segments view - zmat <- matrix(0,ncol=4, nrow=length(object$x)) - zmat[,1] <- object$x - zmat[,2] <- c(object$x[-1], object$x[1]) - object$x - zmat[,3] <- object$y - zmat[,4] <- c(object$y[-1], object$y[1]) - object$y - - # Find the cutpoint for each angle - # Yes we could vectorize the loop, but nslice is never bigger than - # about 10 (and usually <5), so why be obscure? - ns1 <- nslice+1 - theta <- -pi/2 - seq(0, 2*pi, length=ns1) - x <- y <- double(ns1) - for (i in 1:ns1) { - z <- (tan(theta[i])*zmat[,1] - zmat[,3])/ - (zmat[,4] - tan(theta[i])*zmat[,2]) - tx <- zmat[,1] + z*zmat[,2] - ty <- zmat[,3] + z*zmat[,4] - inner <- tx*cos(theta[i]) + ty*sin(theta[i]) - indx <- which(is.finite(z) & z>=0 & z<=1 & inner >0) - x[i] <- tx[indx] - y[i] <- ty[indx] - } -@ - -Now I have the $x,y$ coordinates where each radial slice (the cuts you -would make when slicing a pie) intersects the polygon. -Add the original vertices of the polygon to the list, sort by angle, and -create the output. The radial lines are labeled 1,2, \ldots, nslice +1 -(the original cut from the center to 6 o'clock is repeated at the end), %' -and the inserted vertices with a zero. -<>= - nvertex <- length(object$x) - temp <- data.frame(indx = c(1:ns1, rep(0, nvertex)), - theta= c(theta, object$theta), - x= c(x, object$x), - y= c(y, object$y)) - temp <- temp[order(-temp$theta),] - out <- vector('list', nslice) - for (i in 1:nslice) { - rows <- which(temp$indx==i):which(temp$indx==(i+1)) - out[[i]] <- list(x=c(0, temp$x[rows]), y= c(0, temp$y[rows]) +.5) - } - out - } -@ - -Finally we get to the drawbox function itself, which is fairly simple. -Updates by JPS in 5/2011 to allow missing, and to fix up shadings and borders. -For affected=0, don't fill. -For affected=1, fill with density-lines and angles. -For affected=-1 (missing), fill with ``?'' in the midpoint of the polygon, -with a size adjusted by how many columns in affected. -For all shapes drawn, make the border the color for the person. - -<>= - - drawbox<- function(x, y, sex, affected, status, col, polylist, - density, angle, boxw, boxh) { - for (i in 1:length(affected)) { - if (affected[i]==0) { - polygon(x + (polylist[[sex]])[[i]]$x *boxw, - y + (polylist[[sex]])[[i]]$y *boxh, - col=NA, border=col) - } - - if(affected[i]==1) { - ## else { - polygon(x + (polylist[[sex]])[[i]]$x * boxw, - y + (polylist[[sex]])[[i]]$y * boxh, - col=col, border=col, density=density[i], angle=angle[i]) - } - if(affected[i] == -1) { - polygon(x + (polylist[[sex]])[[i]]$x * boxw, - y + (polylist[[sex]])[[i]]$y * boxh, - col=NA, border=col) - - midx <- x + mean(range(polylist[[sex]][[i]]$x*boxw)) - midy <- y + mean(range(polylist[[sex]][[i]]$y*boxh)) - - points(midx, midy, pch="?", cex=min(1, cex*2/length(affected))) - } - - } - if (status==1) segments(x- .6*boxw, y+1.1*boxh, - x+ .6*boxw, y- .1*boxh,) - ## Do a black slash per Beth, old line was - ## x+ .6*boxw, y- .1*boxh, col=col) - } - -@ - -\subsection{Subsetting} -This section is still experimental and might change. - -Sometimes a pedigree is too large to fit comfortably on one page. -The [[subregion]] argument allows one to plot only a portion of the -pedigree based on the plot region. Along with other tools to -select portions of the pedigree based on relatedness, such as all -the descendents of a particular marriage, it gives a tool for -addressing this. This breaks our original goal of completely -automatic plots, but users keep asking for more. - -The argument is [[subregion=c(min x, max x, min depth, max depth)]], -and works by editing away portions of the [[plist]] object -returned by align.pedigree. -First decide what lines to keep. -Then take subjects away from each line, -update spouses and twins, -and fix up parentage for the line below. - -JPS 5/23/2011 note: -Found the subregion option to re-scale the y-axis very well, but -not the x-axis. - -<>= -subregion2 <- function(plist, subreg) { - if (subreg[3] <1 || subreg[4] > length(plist$n)) - stop("Invalid depth indices in subreg") - lkeep <- subreg[3]:subreg[4] - for (i in lkeep) { - if (!any(plist$pos[i,]>=subreg[1] & plist$pos[i,] <= subreg[2])) - stop(paste("No subjects retained on level", i)) - } - - nid2 <- plist$nid[lkeep,] - n2 <- plist$n[lkeep] - pos2 <- plist$pos[lkeep,] - spouse2 <- plist$spouse[lkeep,] - fam2 <- plist$fam[lkeep,] - if (!is.null(plist$twins)) twin2 <- plist$twins[lkeep,] - - for (i in 1:nrow(nid2)) { - keep <- which(pos2[i,] >=subreg[1] & pos2[i,] <= subreg[2]) - nkeep <- length(keep) - n2[i] <- nkeep - nid2[i, 1:nkeep] <- nid2[i, keep] - pos2[i, 1:nkeep] <- pos2[i, keep] - spouse2[i,1:nkeep] <- spouse2[i,keep] - fam2[i, 1:nkeep] <- fam2[i, keep] - if (!is.null(plist$twins)) twin2[i, 1:nkeep] <- twin2[i, keep] - - if (i < nrow(nid2)) { #look ahead - tfam <- match(fam2[i+1,], keep, nomatch=0) - fam2[i+1,] <- tfam - if (any(spouse2[i,tfam] ==0)) - stop("A subregion cannot separate parents") - } - } - - n <- max(n2) - out <- list(n= n2[1:n], nid=nid2[,1:n, drop=F], pos=pos2[,1:n, drop=F], - spouse= spouse2[,1:n, drop=F], fam=fam2[,1:n, drop=F]) - if (!is.null(plist$twins)) out$twins <- twin2[, 1:n, drop=F] - out - } -@ - - -\subsection{Legends} - -We define a function to draw a legend for the affected matrix. We do so -by making use of the pie() function, which will draw a circle that will look -like a woman (circle) in the pedigree who has all affected indicators ==1. -We do not show what the ``?'' means, and we do not cover what colors are -indicated by the coloring applied to subjects. - -We allow the legend to be added to the current pedigree plot by default, -and it also works to draw a legend on a separate page. The {\em new} argument -controls this option. When new=TRUE, the default, the plot is added to the -current plot (assumed a pedigree plot), and placed in one of the corners -of the plot given by {\em location}, which has options "bottomright", -"topright", "topleft", and "bottomleft", with ``bottomright'' the default. - -If new=FALSE, the pie graph is plotted from (-1,1) for both x and y, centered -at 0,0 with radius 1. With angle.init=90 and twopi = 2*pi, we control the -start to be at the top and the sections are plotted counter-clockwise, respectively, which are some of the settings from the original pie() function. - -When we adapted the pie() function to plot in different, non-(0,0) locations -on the pedigree, we had these major issues: - -1) The Y-axis actually goes from min(y) at the top and max(y) at the bottom. -2) To get the polygon in pie() to not be oblong, we made sure to use asp=1, -which re-sets the x- and/or y-axis again. Therefore, we have to manage the -placing of the pie in reference to those updated scalings using par(``usr''). -3) We have to choose a center that is not 0,0, and have to add the center -x,y coordinates to some of the default settings of pie(). - -We carry forward from the plot.pedigree the same density and angle defaults -for shading sections of each subject's symbol with polygon. - - -<>= - -pedigree.legend <- function (ped, labels = dimnames(ped$affected)[[2]], - edges = 200, radius=NULL, location="bottomright", new=TRUE, - density = c(-1, 35, 55, 25), angle = c(90, 65, 40, 0), ...) -{ - - naff <- max(ncol(ped$affected),1) - - x <- rep(1,naff) - - # Defaults for plotting on separate page: - ## start at the top, always counter-clockwise, black/white - init.angle <- 90 - twopi <- 2 * pi - col <- 1 - - default.labels <- paste("affected-", 1:naff, sep='') - if (is.null(labels)) labels <- default.labels - - ## assign labels to those w/ zero-length label - whichNoLab <- which(nchar(labels) < 1) - if(length(whichNoLab)) - labels[whichNoLab] <- paste("affected-", whichNoLab, sep='') - - - x <- c(0, cumsum(x)/sum(x)) - dx <- diff(x) - nx <- length(dx) - ## settings for plotting on a new page - if(!new) { - plot.new() - - pin <- par("pin") - # radius, xylim, center, line-lengths set to defaults of pie() - radius <- 1 - xlim <- ylim <- c(-1, 1) - center <- c(0,0) - llen <- 0.05 - - if (pin[1L] > pin[2L]) - xlim <- (pin[1L]/pin[2L]) * xlim - else ylim <- (pin[2L]/pin[1L]) * ylim - - plot.window(xlim, ylim, "", asp = 1) - - } else { - ## Settings to add to pedigree plot - ## y-axis is flipped, so adjust angle and rotation - init.angle <- -1*init.angle - twopi <- -1*twopi - - ## track usr xy limits. With asp=1, it re-scales to have aspect ratio 1:1 - usr.orig <- par("usr") - plot.window(xlim=usr.orig[1:2], ylim=usr.orig[3:4], "", asp=1) - usr.asp1 <- par("usr") - - ## also decide on good center/radius if not given - if(is.null(radius)) - radius <- .5 - - ## set line lengths - llen <- radius*.15 - - ## get center of pie chart for coded - pctusr <- .10*abs(diff(usr.asp1[3:4])) - center = switch(location, - "bottomright" = c(max(usr.asp1[1:2])-pctusr,max(usr.asp1[3:4])-pctusr), - "topright" = c(max(usr.asp1[1:2])-pctusr, min(usr.asp1[3:4]) + pctusr), - "bottomleft" =c(min(usr.asp1[1:2]) + pctusr, max(usr.asp1[3:4])-pctusr), - "topleft" = c(min(usr.asp1[1:2]) + pctusr, min(usr.asp1[3:4]) + pctusr)) - - } - - col <- rep(col, length.out = nx) - border <- rep(1, length.out = nx) - lty <- rep(1, length.out = nx) - angle <- rep(angle, length.out = nx) - density <- rep(density, length.out = nx) - - t2xy <- function(t) { - t2p <- twopi * t + init.angle * pi/180 - list(x = radius * cos(t2p), y = radius * sin(t2p)) - } - for (i in 1L:nx) { - n <- max(2, floor(edges * dx[i])) - P <- t2xy(seq.int(x[i], x[i + 1], length.out = n)) - P$x <- P$x + center[1] - P$y <- P$y + center[2] - - polygon(c(P$x, center[1]), c(P$y, center[2]), density = density[i], - angle = angle[i], border = border[i], col = col[i], - lty = lty[i]) - - P <- t2xy(mean(x[i + 0:1])) - if(new) { - ## not centered at 0,0, so added center to x,y - P$x <- P$x + center[1] - P$y <- center[2] + ifelse(new, P$y, -1*P$y) - } - - lab <- as.character(labels[i]) - if (!is.na(lab) && nzchar(lab)) { - ## put lines - lines(x=c(P$x, P$x + ifelse(P$x>= - -#$Log: pedigree.shrink.q,v $ -#Revision 1.5 2010/09/03 21:11:16 sinnwell -#add shrunk "avail" vector to result, keep status and affected in pedObj -# -#Revision 1.4 2010/09/03 19:15:03 sinnwell -#add avail arg which is not part of ped object. Re-make ped object at the end with status and affected, if given -# -#Revision 1.2 2009/11/17 23:08:18 sinnwell -#*** empty log message *** -# -#Revision 1.1 2008/07/16 20:23:07 sinnwell -#Initial revision -# -pedigree.shrink <- function(ped, avail, affected=NULL, seed=NULL, maxBits = 16){ - if(class(ped) != "pedigree") - stop("Must be a pegigree object.\n") - - ## set the seed for random selections - if(is.null(seed)) - { - seed <- sample(2^20, size=1) - } - set.seed(seed) - - if(any(is.na(avail))) - stop("NA values not allowed in avail vector.") - - if(is.null(affected)) - affected = if(is.matrix(ped$affected)) ped$affected[,1] else ped$affected - - ped$affected = affected - - - idTrimmed <- numeric() - idList <- list() - nOriginal <- length(ped$id) - - bit_sizeOriginal <- bit_size(ped)$bit_size - - ## first find unavailable subjects to remove anyone who is not - ## available and does not have an available descendant - - idTrimUnavail <- findUnavailable(ped, avail) - - - if(length(idTrimUnavail)) { - - pedTrimmed <- pedigree.trim(idTrimUnavail, ped) - avail <- avail[match(pedTrimmed$id, ped$id)] - idTrimmed <- c(idTrimmed, idTrimUnavail) - idList$unavail <- paste(idTrimUnavail, collapse=' ') - - } else { - ## no trimming, reset to original ped - pedTrimmed <- ped - } - - - ## Next trim any available terminal subjects with unknown phenotype - ## but only if both parents are available - - ## added nNew>0 check because no need to trim anymore if empty ped - - nChange <- 1 - idList$noninform = NULL - nNew <- length(pedTrimmed$id) - - while(nChange > 0 & nNew > 0){ - nOld <- length(pedTrimmed$id) - - ## findAvailNonInform finds non-informative, but after suggesting - ## their removal, checks for more unavailable subjects before returning - idTrimNonInform <- findAvailNonInform(pedTrimmed, avail) - - if(length(idTrimNonInform)) { - pedNew <- pedigree.trim(idTrimNonInform, pedTrimmed) - avail <- avail[match(pedNew$id, pedTrimmed$id)] - idTrimmed <- c(idTrimmed, idTrimNonInform) - idList$noninform = paste(c(idList$noninform, - idTrimNonInform), collapse=' ') - pedTrimmed <- pedNew - - } - nNew <- length(pedTrimmed$id) - nChange <- nOld - nNew - - } - - ## Determine number of subjects & bit_size after initial trimming - nIntermed <- length(pedTrimmed$id) - - bit_size <- bit_size(pedTrimmed)$bit_size - - ## Now sequentially shrink to fit bit_size <= maxBits - - bitVec <- c(bit_sizeOriginal,bit_size) - - isTrimmed <- TRUE - idList$affect=NULL - - while(isTrimmed & (bit_size > maxBits)) - { - - ## First, try trimming by unknown status - save <- findAvailAffected(pedTrimmed, avail, affstatus=NA) - isTrimmed <- save$isTrimmed - - ## Second, try trimming by unaffected status if no unknowns to trim - if(!isTrimmed) - { - save <- findAvailAffected(pedTrimmed, avail, affstatus=0) - isTrimmed <- save$isTrimmed - - } - - - ## Third, try trimming by affected status if no unknowns & no unaffecteds - ## to trim - if(!isTrimmed) { - save <- findAvailAffected(pedTrimmed, avail, affstatus=1) - isTrimmed <- save$isTrimmed - } - - if(isTrimmed) { - pedTrimmed <- save$ped - avail <- save$newAvail - bit_size <- save$bit_size - bitVec <- c(bitVec, bit_size) - idTrimmed <- c(idTrimmed, save$idTrimmed) - idList$affect = paste(c(idList$affect, save$idTrimmed), - collapse=' ') - } - - - } # end while (isTrimmed) & (bit_size > maxBits) - - - nFinal <- length(pedTrimmed$id) - - obj <- list(pedObj = pedTrimmed, - idTrimmed = idTrimmed, - idList = idList, - bit_size = bitVec, - avail=avail, - pedSizeOriginal = nOriginal, - pedSizeIntermed = nIntermed, - pedSizeFinal = nFinal, - seed = seed) - - - oldClass(obj) <- "pedigree.shrink" - - return(obj) -} - - -@ - - -\subsection{Sub-Functions} - - -These next functions were written to support pedigree.shrink. -In making the new kinship2 package to include pedigree.shrink, Jason Sinnwell -decided to add functionality to removed subjects from a pedigree object -given their id. Then within pedigree.shrink, any removal of subjects consists -of two steps, identifying who to remove by their ids. Then removing them with -a new pedigree.trim function. - -The problem with pedigree.trim is that if the removal of any subject causes -a marriage to be split and have parentless children, it will cause a problem. - -Therefore, when using functions like findAvalNonInform and findAvalAffected -for persons to remove, follow them up with a call findUnavailable, after -setting the removal candidate's availability to FALSE, so clear up any -removals. - -This last step was re-written by Jason Sinnwell on 6/1/2011, and his test cases -seemed to test against the results before the re-write. He expects there to -be bugs to be discovered down the road. - - -What was previously pedTrim is now split into two functions, pedigree.trim and findUnavail. - -pedigree.trim : remove subjects from pedigree object given their id. -Update for version 1.2.8 (9/27/11) Allow creation of an empty pedigree -if all IDs are removed. This allows bit_size and -pedigree.shrink to still complete with an empty pedigree. - -findUnavail: identify subjects are not available and who do not have -an available descendant. Do this iteratively by successively removing -unavailable terminal nodes. Written by Steve Iturria, PhD, modified -by Dan Schaid. - -<>= - -pedigree.trim <- function(removeID, ped){ - ## trim subjects from a pedigree who match the removeID - ## trim relation matrix as well - - if(class(ped) != "pedigree") - stop("Must be a pegigree object.\n") - - rmidx <- match(removeID, ped$id) - if(length(rmidx)>0) { - pedtrimmed <- ped[-rmidx] - return(pedtrimmed) - } else { - return(ped) - } -} - -@ - -Place the two exclude functions within the same file as findUnavailable -because that is the only place they are used. Pretty self-documenting. - -<>= - - -#$Log: pedTrim.q,v $ -#Revision 1.4 2009/11/19 15:00:31 sinnwell -#*** empty log message *** -# -#Revision 1.3 2009/11/19 14:57:05 sinnwell -#*** empty log message *** -# -#Revision 1.2 2009/11/17 23:11:09 sinnwell -#change for ped object -# -#Revision 1.1 2008/07/16 20:23:29 sinnwell -#Initial revision -# - - -findUnavailable <-function(ped, avail) { - - ## find id within pedigree anyone who is not available and - ## does not have an available descendant - - ## avail = TRUE/1 if available, FALSE/0 if not - - ## will do this iteratively by successively removing unavailable - ## terminal nodes - ## Steve Iturria, PhD, modified by Dan Schaid - - cont <- TRUE # flag for whether to keep iterating - - is.terminal <- (is.parent(ped$id, ped$findex, ped$mindex) == FALSE) - ## JPS 3/10/14 add strings check in case of char ids - pedData <- data.frame(id=ped$id, father=ped$findex, mother=ped$mindex, - sex=ped$sex, avail, is.terminal, stringsAsFactors=FALSE) - iter <- 1 - - while(cont) { - ##print(paste("Working on iter", iter)) - - num.found <- 0 - idx.to.remove <- NULL - - for(i in 1:nrow(pedData)) - { - - if(pedData$is.terminal[i]) - { - if( pedData$avail[i] == FALSE ) # if not genotyped - { - idx.to.remove <- c(idx.to.remove, i) - num.found <- num.found + 1 - - ## print(paste(" removing", num.found, "of", nrow(pedData))) - } - } - - } - - if(num.found > 0) { - - pedData <- pedData[-idx.to.remove, ] - ## re-index parents, which varies depending on if the removed indx is - ## prior to parent index - for(k in 1:nrow(pedData)){ - if(pedData$father[k] > 0) { - pedData$father[k] <- pedData$father[k] - - sum(idx.to.remove < pedData$father[k]) - } - if(pedData$mother[k]+0) { - pedData$mother[k] <- pedData$mother[k] - - sum(idx.to.remove < pedData$mother[k]) - } - } - pedData$is.terminal <- - (is.parent(pedData$id, pedData$father, pedData$mother) == FALSE) - - } - else { - cont <- FALSE - } - iter <- iter + 1 - - } - - ## A few more clean up steps - - ## remove unavailable founders - tmpPed <- excludeUnavailFounders(pedData$id, - pedData$father, pedData$mother, pedData$avail) - - ## - tmpPed <- excludeStrayMarryin(tmpPed$id, tmpPed$father, tmpPed$mother) - - - id.remove <- ped$id[is.na(match(ped$id, tmpPed$id))] - - return(id.remove) - -} - - -excludeStrayMarryin <- function(id, father, mother){ - # get rid of founders who are not parents (stray available marryins - # who are isolated after trimming their unavailable offspring) - ## JPS 3/10/14 add strings check in case of char ids - trio <- data.frame(id=id, father=father, mother=mother, stringsAsFactors=FALSE) - parent <- is.parent(id, father, mother) - founder <- is.founder(father, mother) - - exclude <- !parent & founder - trio <- trio[!exclude,,drop=FALSE] - return(trio) - -} - -excludeUnavailFounders <- function(id, father, mother, avail) - { - nOriginal <- length(id) - idOriginal <- id - zed <- father!=0 & mother !=0 - ## concat ids to represent marriages. - ## Bug if there is ":" in char subj ids - marriage <- paste(id[father[zed]], id[mother[zed]], sep=":" ) - - sibship <- tapply(marriage, marriage, length) - nm <- names(sibship) - - splitPos <- regexpr(":",nm) - dad <- substring(nm, 1, splitPos-1) - mom <- substring(nm, splitPos+1, nchar(nm)) - - ## Want to look at parents with only one child. - ## Look for parents with > 1 marriage. If any - ## marriage has > 1 child then skip this mom/dad pair. - - nmarr.dad <- table(dad) - nmarr.mom <- table(mom) - skip <- NULL - - if(any(nmarr.dad > 1)) { - ## Dads in >1 marriage - ckdad <- which(as.logical(match(dad, - names(nmarr.dad)[which(nmarr.dad > 1)],nomatch=FALSE))) - skip <- unique(c(skip, ckdad)) - } - - if(any(nmarr.mom > 1)) { - ## Moms in >1 marriage - ckmom <- which(as.logical(match(mom, - names(nmarr.mom)[which(nmarr.mom > 1)],nomatch=FALSE))) - skip <- unique(c(skip, ckmom)) - } - - if(length(skip) > 0) { - dad <- dad[-skip] - mom <- mom[-skip] - zed <- (sibship[-skip]==1) - } else { - zed <- (sibship==1) - } - - - n <- sum(zed) - idTrimmed <- NULL - if(n>0) - { - - # dad and mom are the parents of sibships of size 1 - dad <- dad[zed] - mom <- mom[zed] - for(i in 1:n){ - ## check if mom and dad are founders (where their parents = 0) - dad.founder <- (father[id==dad[i]] == 0) & (mother[id==dad[i]] == 0) - mom.founder <- (father[id==mom[i]] == 0) & (mother[id==mom[i]] == 0) - both.founder <- dad.founder & mom.founder - - ## check if mom and dad have avail - dad.avail <- avail[id==dad[i]] - mom.avail <- avail[id==mom[i]] - - ## define not.avail = T if both mom & dad not avail - not.avail <- (dad.avail==FALSE & mom.avail==FALSE) - - if(both.founder & not.avail) { - ## remove mom and dad from ped, and zero-out parent - ## ids of their child - - child <- which(father==which(id==dad[i])) - father[child] <- 0 - mother[child] <- 0 - - idTrimmed <- c(idTrimmed, dad[i], mom[i]) - - excludeParents <- (id!=dad[i]) & (id!=mom[i]) - id <- id[excludeParents] - father <- father[excludeParents] - mother <- mother[excludeParents] - - ## re-index father and mother, assume len(excludeParents)==2 - father <- father - 1*(father > which(!excludeParents)[1]) - - 1*(father > which(!excludeParents)[2]) - - mother <- mother - 1*(mother > which(!excludeParents)[1]) - - 1*(mother > which(!excludeParents)[2]) - - avail <- avail[excludeParents] - } - } - } - - nFinal <- length(id) - nTrimmed = nOriginal - nFinal - - - return(list(nTrimmed = nTrimmed, idTrimmed=idTrimmed, - id=id, father=father, mother=mother)) - } - - - -@ - - -Function to calculate pedigree bit size, which is -2 * n.NonFounder - n.Founder. It is an indicator for how much resources -the pedigree will require to be processed by linkage algorithms to calculate -the likelihood of the observed genotypes given the pedigree structure. - -The Lander-Green handles smaller pedigrees and many markers -The Elston-Stewart handles larger pedigrees and fewer markers. - -<>= - -## renamed from pedBits, part of pedigree.shrink functions - -bit_size <- function(ped) { - ## calculate bit size of a pedigree - - if(class(ped) != "pedigree") - stop("Must be a pegigree object.\n") - - father = ped$findex - mother = ped$mindex - id = ped$id - - founder <- father==0 & mother==0 - pedSize <- length(father) - nFounder <- sum(founder) - nNonFounder <- pedSize - nFounder - bit_size <- 2*nNonFounder - nFounder - return(list(bit_size=bit_size, - nFounder = nFounder, - nNonFounder = nNonFounder)) -} - -@ - - -Two functions to identify subjects to remove by other indicators0 -than availability. - -findAvailNonInform: id subjects to remove who are available, but not -informative. This function was formerly trimAvailNonInform(). - - -findAvailAffected: id subjects to remove who were not removed by -findUnavailable(), but who would be best to remove given their -affected status. Try trimming one subject by with affected matching -affstatus. If there are ties of multiple subjects that reduce bit -size equally, randomly choose one of them. This function was formerly named pedTrimOneSubj(). -On 3/10/14, Nick Larson found a bug with char ids when stringsAsFactors was TRUE; this -is now fixed with the option set specifically in the data.frames sset to FALSE. - - -<>= - -findAvailNonInform <- function(ped, avail){ - - ## trim persons who are available but not informative b/c not parent - ## by setting their availability to FALSE, then call findUnavailable() - ## JPS 3/10/14 add strings check in case of char ids - pedData <- data.frame(id=ped$id, father=ped$findex, - mother=ped$mindex, avail=avail, stringsAsFactors=FALSE ) - - checkParent <- is.parent(pedData$id, pedData$father, pedData$mother) - - for(i in 1:nrow(pedData)){ - - if(checkParent[i]==FALSE & avail[i]==TRUE & - all(ped$affected[i]==0, na.rm=TRUE)) { - - ## could use ped$affected[i,] if keep matrix - - fa <- pedData$id[pedData$father[i]] - mo <- pedData$id[pedData$mother[i]] - if(avail[pedData$id==fa] & avail[pedData$id==mo]) - { - pedData$avail[i] <- FALSE - } - } - } - - idTrim <- findUnavailable(ped, pedData$avail) - return(idTrim) -} - -@ - - - -<>= - -findAvailAffected <- function(ped, avail, affstatus) - ## Try trimming one subject by affection status indicator - ## If ties for bits removed, randomly select one of the subjects - - { - - notParent <- !is.parent(ped$id, ped$findex, ped$mindex) - - if(is.na(affstatus)) { - possiblyTrim <- ped$id[notParent & avail & is.na(ped$affected)] - } else { - possiblyTrim <- ped$id[notParent & avail & ped$affected==affstatus] - } - nTrim <- length(possiblyTrim) - - if(nTrim == 0) - { - return(list(ped=ped, - idTrimmed = NA, - isTrimmed = FALSE, - bit_size = bit_size(ped)$bit_size)) - } - - trimDat <- NULL - - for(idTrim in possiblyTrim) { - - - avail.try <- avail - avail.try[ped$id==idTrim] <- FALSE - id.rm <- findUnavailable(ped, avail.try) - newPed <- pedigree.trim(id.rm, ped) - trimDat <- rbind(trimDat, - c(id=idTrim, bit_size=bit_size(newPed)$bit_size)) - } - - bits <- trimDat[,2] - - # trim by subject with min bits. This trims fewer subject than - # using max(bits). - - idTrim <- trimDat[bits==min(bits), 1] - - ## break ties by random choice - if(length(idTrim) > 1) - { - rord <- order(runif(length(idTrim))) - idTrim <- idTrim[rord][1] - } - - - avail[ped$id==idTrim] <- FALSE - id.rm <- findUnavailable(ped, avail) - newPed <- pedigree.trim(id.rm, ped) - pedSize <- bit_size(newPed)$bit_size - avail <- avail[!(ped$id %in% id.rm)] - - return(list(ped=newPed, - newAvail = avail, - idTrimmed = idTrim, - isTrimmed = TRUE, - bit_size = pedSize)) - } - -@ - -Group other functions used in the above main functions -together as pedigree.shrink.minor.R - - -These functions get indicator vectors of who is a parent, -founder, or disconnected - -<>= - -#$Log: pedigree.shrink.minor.q,v $ -#Revision 1.5 2009/11/19 18:10:26 sinnwell -#F to FALSE -# -#Revision 1.4 2009/11/19 14:57:13 sinnwell -#*** empty log message *** -# -#Revision 1.3 2009/11/17 23:11:41 sinnwell -#*** empty log message *** -# -#Revision 1.1 2008/07/16 20:22:55 sinnwell -#Initial revision -# - - -is.parent <- function(id, findex, mindex){ - # determine subjects who are parents - # assume input of father/mother indices, not ids - - father <- mother <- rep(0, length(id)) - father[findex>0] <- id[findex] - mother[mindex>0] <- id[mindex] - - isFather <- !is.na(match(id, unique(father[father!=0]))) - isMother <- !is.na(match(id, unique(mother[mother!=0]))) - isParent <- isFather |isMother - return(isParent) -} - -is.founder <- function(mother, father){ - check <- (father==0) & (mother==0) - return(check) -} - - -is.disconnected <- function(id, findex, mindex) -{ - - # check to see if any subjects are disconnected in pedigree by checking for - # kinship = 0 for all subjects excluding self - father <- id[findex] - mother <- id[mindex] - kinMat <- kinship(id, father, mother) - diag(kinMat) <- 0 - disconnected <- apply(kinMat==0.0, 1, all) - - return(disconnected) -} - -@ - - -Print a pedigree.shrink object. Tell the original bit size and the trimmed bit size. - -<>= -#$Log: print.pedigree.shrink.q,v $ -#Revision 1.2 2009/11/19 14:35:01 sinnwell -#add ... -# -#Revision 1.1 2009/11/17 14:39:32 sinnwell -#Initial revision -# -#Revision 1.1 2008/07/16 20:23:14 sinnwell -#Initial revision -# - -print.pedigree.shrink <- function(x, ...){ - - printBanner(paste("Shrink of Pedigree ", unique(x$pedObj$ped), sep="")) - - cat("Pedigree Size:\n") - - if(length(x$idTrimmed) > 2) - { - n <- c(x$pedSizeOriginal, x$pedSizeIntermed, x$pedSizeFinal) - b <- c(x$bit_size[1], x$bit_size[2], x$bit_size[length(x$bit_size)]) - row.nms <- c("Original","Only Informative","Trimmed") - } else { - n <- c(x$pedSizeOriginal, x$pedSizeIntermed) - b <- c(x$bit_size[1], x$bit_size[2]) - row.nms <- c("Original","Trimmed") - } - - df <- data.frame(N.subj = n, Bits = b) - rownames(df) <- row.nms - print(df, quote=FALSE) - - - if(!is.null(x$idList$unavail)) - cat("\n Unavailable subjects trimmed:\n", x$idList$unavail, "\n") - - if(!is.null(x$idList$noninform)) - cat("\n Non-informative subjects trimmed:\n", x$idList$noninform, "\n") - - if(!is.null(x$idList$affect)) - cat("\n Informative subjects trimmed:\n", x$idList$affect, "\n") - - - ##cat("\n Pedigree after trimming:", x$bit_size, "\n") - - invisible() -} - -@ - -<>= -#$Log: printBanner.q,v $ -#Revision 1.4 2007/01/23 21:00:27 sinnwell -#rm ending newline \n. Users can space if desired. -# -#Revision 1.3 2005/02/04 20:57:18 sinnwell -#banner.width now based on options()$width -#char.perline based on banner.width -# -#Revision 1.2 2004/06/25 15:56:48 sinnwell -#now compatible with R, changed end when a line is done -# -#Revision 1.1 2004/02/26 21:34:55 sinnwell -#Initial revision -# - -printBanner <- function(str, banner.width=options()$width, char.perline=.75*banner.width, border = "="){ - -# char.perline was calculated taking the floor of banner.width/3 - - vec <- str - new<-NULL - onespace<-FALSE - for(i in 1:nchar(vec)){ - if (substring(vec,i,i)==' ' && onespace==FALSE){ - onespace<-TRUE - new<-paste(new,substring(vec,i,i),sep="")} - else if (substring(vec,i,i)==' ' && onespace==TRUE) - {onespace<-TRUE} - else{ - onespace<-FALSE - new<-paste(new,substring(vec,i,i),sep="")} - } - - where.blank<-NULL - indx <- 1 - - for(i in 1:nchar(new)){ - if((substring(new,i,i)==' ')){ - where.blank[indx]<-i - indx <- indx+1 - } - } - - -# Determine the position in the where.blank vector to insert the Nth character position of "new" - j<-length(where.blank)+1 - -# Add the Nth character position of the "new" string to the where.blank vector. - where.blank[j]<-nchar(new) - - begin<-1 - end<-max(where.blank[where.blank<=char.perline]) - -# If end.ok equals NA then the char.perline is less than the position of the 1st blank. - end.ok <- is.na(end) - -# Calculate a new char.perline. - if (end.ok==TRUE){ - char.perline <- floor(banner.width/2) - end<-max(where.blank[where.blank<=char.perline]) - } - - cat(paste(rep(border, banner.width), collapse = ""),"\n") - - repeat { - titleline<-substring(new,begin,end) - n <- nchar(titleline) - if(n < banner.width) - { - n.remain <- banner.width - n - n.left <- floor(n.remain/2) - n.right <- n.remain - n.left - for(i in 1:n.left) titleline <- paste(" ",titleline,sep="") - for(i in 1:n.right) titleline <- paste(titleline," ",sep="") - n <- nchar(titleline) - } - cat(titleline,"\n") - begin<-end+1 - end.old <- end - # Next line has a problem when used in R. Use print.banner.R until fixed. - # Does max with an NA argument - tmp <- where.blank[(end.old>= -#$Log: plot.pedigree.shrink.q,v $ -#Revision 1.4 2010/09/03 21:12:16 sinnwell -#use shrunk "avail" vector for the colored labels -# -#Revision 1.3 2009/11/19 14:57:18 sinnwell -#*** empty log message *** -# -#Revision 1.2 2009/11/17 23:09:51 sinnwell -#updated for ped object -# -#Revision 1.1 2008/07/16 20:23:38 sinnwell -#Initial revision -# - -plot.pedigree.shrink <- function(x, bigped=FALSE, title="", - xlegend="topright", ...){ - - ## Plot pedigrees, coloring subjects according - ## to availability, shaded by affected status used in shrink - - if (bigped == FALSE) { - tmp <- plot(x$pedObj, col = x$avail + 1,keep.par=T) - } - else { - tmp <- plot.pedigree(x$pedObj, align = FALSE, packed = FALSE, - col = x$avail + 1, cex = 0.5, symbolsize = 0.5,keep.par=T) - } - - legend(x = xlegend, legend = c("DNA Available", "UnAvailable"), - pch = c(1, 1), col = c(2, 1), bty = "n", cex=.5) - title(paste(title, "\nbits = ", x$bit_size[length(x$bit_size)]),cex.main=.9) - invisible(tmp) -} - -@ - - -/section{Pedigree Unrelated} - -Purpose: Determine set of maximum number of unrelated - available subjects from a pedigree -PI: Dan Schaid -Author(s): Dan Schaid, Shannon McDonnell -Dates: Created: 10/19/2007, Moved to kinship2: 6/2011 - -In many pedigrees there are multiple sets of subjects that could be of the -size of the maximal set of unrelated subjects in a pedigree. The set could -contain a married-in uncle and any of a set of siblings from his -sister-in-law's family. Therefore, the maximal sets include the uncle and -any of the sibship of his wife's sister. - -<>= - - -#$Log: pedigree.unrelated.q,v $ -#Revision 1.2 2010/02/11 22:36:48 sinnwell -#require kinship to be loaded before use -# -#Revision 1.1 2009/11/10 19:21:52 sinnwell -#Initial revision -# -#Revision 1.1 2009/11/03 16:42:27 sinnwell -#Initial revision -# -## Authors: Dan Schaid, Shannon McDonnell -## Updated by Jason Sinnwell - -pedigree.unrelated <- function(ped, avail) { - - # Requires: kinship function - - # Given vectors id, father, and mother for a pedigree structure, - # and avail = vector of T/F or 1/0 for whether each subject - # (corresponding to id vector) is available (e.g., - # has DNA available), determine set of maximum number - # of unrelated available subjects from a pedigree. - - # This is a greedy algorithm that uses the kinship - # matrix, sequentially removing rows/cols that - # are non-zero for subjects that have the most - # number of zero kinship coefficients (greedy - # by choosing a row of kinship matrix that has - # the most number of zeros, and then remove any - # cols and their corresponding rows that are non-zero. - # To account for ties of the count of zeros for rows, - # a random choice is made. Hence, running this function - # multiple times can return different sets of unrelated - # subjects. - - id <- ped$id - avail <- as.integer(avail) - - - kin <- kinship(ped) - - ord <- order(id) - id <- id[ord] - avail <- as.logical(avail[ord]) - kin <- kin[ord,][,ord] - - rord <- order(runif(nrow(kin))) - - id <- id[rord] - avail <- avail[rord] - kin <- kin[rord,][,rord] - - id.avail <- id[avail] - kin.avail <- kin[avail,,drop=FALSE][,avail,drop=FALSE] - - diag(kin.avail) <- 0 - - while(any(kin.avail > 0)) - { - nr <- nrow(kin.avail) - indx <- 1:nrow(kin.avail) - zero.count <- apply(kin.avail==0, 1, sum) - - mx <- max(zero.count[zero.count < nr]) - mx.zero <- indx[zero.count == mx][1] - - exclude <- indx[kin.avail[, mx.zero] > 0] - - kin.avail <- kin.avail[- exclude, , drop=FALSE][, -exclude, drop=FALSE] - - } - - choice <- sort(dimnames(kin.avail)[[1]]) - - return(choice) -} - - -@ - -\section{Checks} -Last are various helper routines and data checks. -\subsection{kindepth} -One helper function used throughout computes the depth of -each subject in the pedigree. -For each subject this is defined as the maximal number of -generations of ancestors: how far to the farthest -founder. -This can be called with a pedigree object, or with the -full argument list. In the former case we can simply -skip a step. -<>= -kindepth <- function(id, dad.id, mom.id, align=FALSE) { - if (class(id)=='pedigree' || class(id)=='pedigreeList') { - didx <- id$findex - midx <- id$mindex - n <- length(didx) - } - else { - n <- length(id) - if (missing(dad.id) || length(dad.id) !=n) - stop("Invalid father id") - if (missing(mom.id) || length(mom.id) !=n) - stop("Invalid mother id") - midx <- match(mom.id, id, nomatch=0) # row number of my mom - didx <- match(dad.id, id, nomatch=0) # row number of my dad - } - if (n==1) return (0) # special case of a single subject - parents <- which(midx==0 & didx==0) #founders - - depth <- rep(0,n) - # At each iteration below, all children of the current "parents" are - # labeled with depth 'i', and become the parents of the next iteration - for (i in 1:n) { - child <- match(midx, parents, nomatch=0) + - match(didx, parents, nomatch=0) - - if (all(child==0)) break - if (i==n) - stop("Impossible pedegree: someone is their own ancestor") - - parents <- which(child>0) #next generation of parents - depth[parents] <- i - } - if (!align) return(depth) - <> -} -@ - -The align argument is used only by the plotting routines. -It makes the plotted result prettier in the following (fairly common) -case. -Assume that subjects A and B marry, we have some ancestry information for -both, and that A's ancestors go back 3 generations, B's for only two. -If we add +1 to the depth of B and all her ancestors, then A and B -will be the same depth, and will plot on the same line. -Founders who marry in are also aligned. -However, if we have an inbred pedigree, there may not be a simple fix -of this sort. - -The algorithm is -\begin{enumerate} - \item First deal with founders. If a particular founder marries in - multiple times at multiple deaths (animal pedigrees), given that - subject the min(depth of spouses). These subjects cause trouble - for the general algorithm below: the result would depend on the - data set order. Say A has offspring at level 2 and 0. If ``2'' came - first then a later step would pull the spouse at 0 down. - \item Find any remaining mother-father pairs that are mismatched in depth. - Deal with them one at a time. - We think that aligning the top of a pedigree is more important - than aligning at the bottom, so start with a mismatch pair of minimal - depth. - \item The children's depth is max(father, mother) +1. Call the - parent closest to the children ``good'' and the other ``bad''. - \item Chase up the good side, and get a list of all subjects connected - to "good", including in-laws (spouse connections) and sibs that are - at this level or above. Call this agood (ancestors of good). - We do not follow any connections at a depth lower than the - marriage in question, to get the highest marriages right. - For the bad side, just get ancestors. - \item Avoid pedigree loops! If the agood list contains anyone in abad, - then don't try to fix the alignment, otherwise: - Push abad down, then run the pushdown algorithm to - repair any descendents --- you may have pulled down a grandparent but - not the sibs of that grandparent. -\end{enumerate} - -It may be possible to do better alignment when the pedigree has loops, -but it is definitely beyond this program's abilities. This could be -an addition to authint one day. -One particular case that we've seen was a pair of brothers that married -a pair of sisters. Pulling one brother down fixes the other at the -same time. -The code below, however, says "loop! stay away!". -<>= -chaseup <- function(x, midx, didx) { - new <- c(midx[x], didx[x]) # mother and father - new <- new[new>0] - while (length(new) >1) { - x <- unique(c(x, new)) - new <- c(midx[new], didx[new]) - new <- new[new>0] - } - x -} - -# First deal with any parents who are founders -# They all start with depth 0 -dads <- didx[midx>0 & didx>0] # the father side of all spouse pairs -moms <- midx[midx>0 & didx>0] -founder <- (midx==0 & didx==0) -if (any(founder[dads])) { - drow <- which(founder[dads]) # which pairs - id <- unique(dads[drow]) # id - depth[id] <- tapply(depth[moms[drow]], dads[drow], min) - dads <- dads[-drow] - moms <- moms[-drow] -} -if (any(founder[moms])) { - mrow <- which(founder[moms]) # which pairs - id <- unique(moms[mrow]) # id - depth[id] <- tapply(depth[dads[mrow]], moms[mrow], min) - dads <- dads[-mrow] - moms <- moms[-mrow] -} - -# Get rid of duplicate pairs, which occur for any spouse with -# multiple offspring -dups <- duplicated(dads + moms*n) -if (any(dups)) { - dads <- dads[!dups] - moms <- moms[!dups] -} - -npair<- length(dads) -done <- rep(FALSE, npair) #couples that are taken care of -while (TRUE) { - pairs.to.fix <- which((depth[dads] != depth[moms]) & !done) - if (length(pairs.to.fix) ==0) break - temp <- pmax(depth[dads], depth[moms])[pairs.to.fix] - who <- min(pairs.to.fix[temp==min(temp)]) # the chosen couple - - good <- moms[who]; bad <- dads[who] - if (depth[dads[who]] > depth[moms[who]]) { - good <- dads[who]; bad <- moms[who] - } - abad <- chaseup(bad, midx, didx) - if (length(abad) ==1 && sum(c(dads,moms)==bad)==1) { - # simple case, a solitary marry-in - depth[bad] <- depth[good] - } - else { - agood <- chaseup(good, midx, didx) #ancestors of the "good" side - # For spouse chasing, I need to exclude the given pair - tdad <- dads[-who] - tmom <- moms[-who] - while (1) { - # spouses of any on agood list - spouse <- c(tmom[!is.na(match(tdad, agood))], - tdad[!is.na(match(tmom, agood))]) - temp <- unique(c(agood, spouse)) - temp <- unique(chaseup(temp, midx, didx)) #parents - kids <- (!is.na(match(midx, temp)) | !is.na(match(didx, temp))) - temp <- unique(c(temp, (1:n)[kids & depth <= depth[good]])) - if (length(temp) == length(agood)) break - else agood <- temp - } - - if (all(match(abad, agood, nomatch=0) ==0)) { - # shift it down - depth[abad] <- depth[abad] + (depth[good] - depth[bad]) - # - # Siblings may have had children: make sure all kids are - # below their parents. It's easiest to run through the - # whole tree - for (i in 0:n) { - parents <- which(depth==i) - child <- match(midx, parents, nomatch=0) + - match(didx, parents, nomatch=0) - if (all(child==0)) break - depth[child>0] <- pmax(i+1, depth[child>0]) - } - } - } - # Once a subject has been shifted, we don't allow them to instigate - # yet another shift, possibly on another level - done[dads==bad | moms==bad] <- TRUE -} -if (all(depth>0)) stop("You found a bug in kindepth's alignment code!") -depth -@ - -\subsection{family_check} -The family_check routine checks out a family id, by trying to construct its own -and comparing the results. -The input argument "newfam" is optional: if you've already created this -vector for other reasons, then putting the arg in saves time. - - - If there are any joins, then an attribute "join" is attached. It will be - a matrix with famid as row labels, new-family-id as the columns, and - the number of subjects as entries. - -<>= -# This routine checks out a family id, by trying to construct its own -# and comparing the results -# -# The input argument "newfam" is optional: if you've already created this -# vector for other reasons, then putting the arg in saves time. -# -# Output is a dataframe with columns: -# famid: the family id, as entered into the data set -# n : number of subjects in the family -# unrelated: number of them that appear to be unrelated to anyone else -# in the entire pedigree set. This is usually marry-ins with no -# children (in the pedigree), and if so are not a problem. -# split : number of unique "new" family ids. -# if this is 0, it means that no one in this "family" is related to -# anyone else (not good) -# 1 = everythings is fine -# 2+= the family appears to be a set of disjoint trees. Are you -# missing some of the people? -# join : number of other families that had a unique famid, but are actually -# joined to this one. 0 is the hope. -# -# If there are any joins, then an attribute "join" is attached. It will be -# a matrix with famid as row labels, new-family-id as the columns, and -# the number of subjects as entries. -# -family_check <- function(famid, id, father.id, mother.id, newfam) { - if (is.numeric(famid) && any(is.na(famid))) - stop ("Family id of missing not allowed") - nfam <- length(unique(famid)) - - if (missing(newfam)) newfam <- make_famid(id, father.id, mother.id) - else if (length(newfam) != length(famid)) - stop("Invalid length for newfam") - - xtab <- table(famid, newfam) - if (any(newfam==0)) { - unrelated <- xtab[,1] - xtab <- xtab[,-1, drop=FALSE] - ## bug fix suggested by Amanda Blackford 6/2011 - } - else unrelated <- rep(0, nfam) - - splits <- apply(xtab>0, 1, sum) - joins <- apply(xtab>0, 2, sum) - - temp <- apply((xtab>0) * outer(rep(1,nfam), joins-1), 1, sum) - - out <- data.frame(famid = dimnames(xtab)[[1]], - n = as.vector(table(famid)), - unrelated = as.vector(unrelated), - split = as.vector(splits), - join = temp, - row.names=1:nfam) - if (any(joins >1)) { - tab1 <- xtab[temp>0,] #families with multiple outcomes - tab1 <- tab1[,apply(tab1>0,2,sum) >0] #only keep non-zero columns - dimnames(tab1) <- list(dimnames(tab1)[[1]], NULL) - attr(out, 'join') <- tab1 - } - - out - } - - -@ - - -\subsection{check.hint} -This routine tries to remove inconsistencies in spousal hints. -These and arise in autohint with complex pedigrees. -One can have ABA (subject A is on both the -left and the right of B), cycles, etc. -Actually, these used to arise in autohint, I don't know if it's so -after the recent rewrite. -Users can introduce problems as well if they modify the hints. - -<>= -check.hint <- function(hints, sex) { - if (is.null(hints$order)) stop("Missing order component") - if (!is.numeric(hints$order)) stop("Invalid order component") - n <- length(sex) - if (length(hints$order) != n) stop("Wrong length for order component") - - spouse <- hints$spouse - if (is.null(spouse)) hints - else { - lspouse <- spouse[,1] - rspouse <- spouse[,2] - if (any(lspouse <1 | lspouse >n | rspouse <1 | rspouse > n)) - stop("Invalid spouse value") - - temp1 <- (sex[lspouse]== 'female' & sex[rspouse]=='male') - temp2 <- (sex[rspouse]== 'female' & sex[lspouse]=='male') - if (!all(temp1 | temp2)) - stop("A marriage is not male/female") - - hash <- n*pmax(lspouse, rspouse) + pmin(lspouse, rspouse) - #Turn off this check for now - is set off if someone is married to two siblings - #if (any(duplicated(hash))) stop("Duplicate marriage") - - # Break any loops: A left of B, B left of C, C left of A. - # Not yet done - } - hints - } -@ -\end{document} diff --git a/devel/noweb/checks.txt b/devel/noweb/checks.txt deleted file mode 100644 index 4bb7e684..00000000 --- a/devel/noweb/checks.txt +++ /dev/null @@ -1,311 +0,0 @@ -\section{Checks} -Last are various helper routines and data checks. -\subsection{kindepth} -One helper function used throughout computes the depth of -each subject in the pedigree. -For each subject this is defined as the maximal number of -generations of ancestors: how far to the farthest -founder. -This can be called with a pedigree object, or with the -full argument list. In the former case we can simply -skip a step. -<>= -kindepth <- function(id, dad.id, mom.id, align=FALSE) { - if (class(id)=='pedigree' || class(id)=='pedigreeList') { - didx <- id$findex - midx <- id$mindex - n <- length(didx) - } - else { - n <- length(id) - if (missing(dad.id) || length(dad.id) !=n) - stop("Invalid father id") - if (missing(mom.id) || length(mom.id) !=n) - stop("Invalid mother id") - midx <- match(mom.id, id, nomatch=0) # row number of my mom - didx <- match(dad.id, id, nomatch=0) # row number of my dad - } - if (n==1) return (0) # special case of a single subject - parents <- which(midx==0 & didx==0) #founders - - depth <- rep(0,n) - # At each iteration below, all children of the current "parents" are - # labeled with depth 'i', and become the parents of the next iteration - for (i in 1:n) { - child <- match(midx, parents, nomatch=0) + - match(didx, parents, nomatch=0) - - if (all(child==0)) break - if (i==n) - stop("Impossible pedegree: someone is their own ancestor") - - parents <- which(child>0) #next generation of parents - depth[parents] <- i - } - if (!align) return(depth) - <> -} -@ - -The align argument is used only by the plotting routines. -It makes the plotted result prettier in the following (fairly common) -case. -Assume that subjects A and B marry, we have some ancestry information for -both, and that A's ancestors go back 3 generations, B's for only two. -If we add +1 to the depth of B and all her ancestors, then A and B -will be the same depth, and will plot on the same line. -Founders who marry in are also aligned. -However, if we have an inbred pedigree, there may not be a simple fix -of this sort. - -The algorithm is -\begin{enumerate} - \item First deal with founders. If a particular founder marries in - multiple times at multiple deaths (animal pedigrees), given that - subject the min(depth of spouses). These subjects cause trouble - for the general algorithm below: the result would depend on the - data set order. Say A has offspring at level 2 and 0. If ``2'' came - first then a later step would pull the spouse at 0 down. - \item Find any remaining mother-father pairs that are mismatched in depth. - Deal with them one at a time. - We think that aligning the top of a pedigree is more important - than aligning at the bottom, so start with a mismatch pair of minimal - depth. - \item The children's depth is max(father, mother) +1. Call the - parent closest to the children ``good'' and the other ``bad''. - \item Chase up the good side, and get a list of all subjects connected - to "good", including in-laws (spouse connections) and sibs that are - at this level or above. Call this agood (ancestors of good). - We do not follow any connections at a depth lower than the - marriage in question, to get the highest marriages right. - For the bad side, just get ancestors. - \item Avoid pedigree loops! If the agood list contains anyone in abad, - then don't try to fix the alignment, otherwise: - Push abad down, then run the pushdown algorithm to - repair any descendents --- you may have pulled down a grandparent but - not the sibs of that grandparent. -\end{enumerate} - -It may be possible to do better alignment when the pedigree has loops, -but it is definitely beyond this program's abilities. This could be -an addition to authint one day. -One particular case that we've seen was a pair of brothers that married -a pair of sisters. Pulling one brother down fixes the other at the -same time. -The code below, however, says "loop! stay away!". -<>= -chaseup <- function(x, midx, didx) { - new <- c(midx[x], didx[x]) # mother and father - new <- new[new>0] - while (length(new) >1) { - x <- unique(c(x, new)) - new <- c(midx[new], didx[new]) - new <- new[new>0] - } - x -} - -# First deal with any parents who are founders -# They all start with depth 0 -dads <- didx[midx>0 & didx>0] # the father side of all spouse pairs -moms <- midx[midx>0 & didx>0] -founder <- (midx==0 & didx==0) -if (any(founder[dads])) { - drow <- which(founder[dads]) # which pairs - id <- unique(dads[drow]) # id - depth[id] <- tapply(depth[moms[drow]], dads[drow], min) - dads <- dads[-drow] - moms <- moms[-drow] -} -if (any(founder[moms])) { - mrow <- which(founder[moms]) # which pairs - id <- unique(moms[mrow]) # id - depth[id] <- tapply(depth[dads[mrow]], moms[mrow], min) - dads <- dads[-mrow] - moms <- moms[-mrow] -} - -# Get rid of duplicate pairs, which occur for any spouse with -# multiple offspring -dups <- duplicated(dads + moms*n) -if (any(dups)) { - dads <- dads[!dups] - moms <- moms[!dups] -} - -npair<- length(dads) -done <- rep(FALSE, npair) #couples that are taken care of -while (TRUE) { - pairs.to.fix <- which((depth[dads] != depth[moms]) & !done) - if (length(pairs.to.fix) ==0) break - temp <- pmax(depth[dads], depth[moms])[pairs.to.fix] - who <- min(pairs.to.fix[temp==min(temp)]) # the chosen couple - - good <- moms[who]; bad <- dads[who] - if (depth[dads[who]] > depth[moms[who]]) { - good <- dads[who]; bad <- moms[who] - } - abad <- chaseup(bad, midx, didx) - if (length(abad) ==1 && sum(c(dads,moms)==bad)==1) { - # simple case, a solitary marry-in - depth[bad] <- depth[good] - } - else { - agood <- chaseup(good, midx, didx) #ancestors of the "good" side - # For spouse chasing, I need to exclude the given pair - tdad <- dads[-who] - tmom <- moms[-who] - while (1) { - # spouses of any on agood list - spouse <- c(tmom[!is.na(match(tdad, agood))], - tdad[!is.na(match(tmom, agood))]) - temp <- unique(c(agood, spouse)) - temp <- unique(chaseup(temp, midx, didx)) #parents - kids <- (!is.na(match(midx, temp)) | !is.na(match(didx, temp))) - temp <- unique(c(temp, (1:n)[kids & depth <= depth[good]])) - if (length(temp) == length(agood)) break - else agood <- temp - } - - if (all(match(abad, agood, nomatch=0) ==0)) { - # shift it down - depth[abad] <- depth[abad] + (depth[good] - depth[bad]) - # - # Siblings may have had children: make sure all kids are - # below their parents. It's easiest to run through the - # whole tree - for (i in 0:n) { - parents <- which(depth==i) - child <- match(midx, parents, nomatch=0) + - match(didx, parents, nomatch=0) - if (all(child==0)) break - depth[child>0] <- pmax(i+1, depth[child>0]) - } - } - } - # Once a subject has been shifted, we don't allow them to instigate - # yet another shift, possibly on another level - done[dads==bad | moms==bad] <- TRUE -} -if (all(depth>0)) stop("You found a bug in kindepth's alignment code!") -depth -@ - -\subsection{familycheck} -The familycheck routine checks out a family id, by trying to construct its own -and comparing the results. -The input argument "newfam" is optional: if you've already created this -vector for other reasons, then putting the arg in saves time. - - - If there are any joins, then an attribute "join" is attached. It will be - a matrix with famid as row labels, new-family-id as the columns, and - the number of subjects as entries. - -<>= -# This routine checks out a family id, by trying to construct its own -# and comparing the results -# -# The input argument "newfam" is optional: if you've already created this -# vector for other reasons, then putting the arg in saves time. -# -# Output is a dataframe with columns: -# famid: the family id, as entered into the data set -# n : number of subjects in the family -# unrelated: number of them that appear to be unrelated to anyone else -# in the entire pedigree set. This is usually marry-ins with no -# children (in the pedigree), and if so are not a problem. -# split : number of unique "new" family ids. -# if this is 0, it means that no one in this "family" is related to -# anyone else (not good) -# 1 = everythings is fine -# 2+= the family appears to be a set of disjoint trees. Are you -# missing some of the people? -# join : number of other families that had a unique famid, but are actually -# joined to this one. 0 is the hope. -# -# If there are any joins, then an attribute "join" is attached. It will be -# a matrix with famid as row labels, new-family-id as the columns, and -# the number of subjects as entries. -# -familycheck <- function(famid, id, father.id, mother.id, newfam) { - if (is.numeric(famid) && any(is.na(famid))) - stop ("Family id of missing not allowed") - nfam <- length(unique(famid)) - - if (missing(newfam)) newfam <- makefamid(id, father.id, mother.id) - else if (length(newfam) != length(famid)) - stop("Invalid length for newfam") - - xtab <- table(famid, newfam) - if (any(newfam==0)) { - unrelated <- xtab[,1] - xtab <- xtab[,-1, drop=FALSE] - ## bug fix suggested by Amanda Blackford 6/2011 - } - else unrelated <- rep(0, nfam) - - splits <- apply(xtab>0, 1, sum) - joins <- apply(xtab>0, 2, sum) - - temp <- apply((xtab>0) * outer(rep(1,nfam), joins-1), 1, sum) - - out <- data.frame(famid = dimnames(xtab)[[1]], - n = as.vector(table(famid)), - unrelated = as.vector(unrelated), - split = as.vector(splits), - join = temp, - row.names=1:nfam) - if (any(joins >1)) { - tab1 <- xtab[temp>0,] #families with multiple outcomes - tab1 <- tab1[,apply(tab1>0,2,sum) >0] #only keep non-zero columns - dimnames(tab1) <- list(dimnames(tab1)[[1]], NULL) - attr(out, 'join') <- tab1 - } - - out - } - - -@ - - -\subsection{check.hint} -This routine tries to remove inconsistencies in spousal hints. -These and arise in autohint with complex pedigrees. -One can have ABA (subject A is on both the -left and the right of B), cycles, etc. -Actually, these used to arise in autohint, I don't know if it's so -after the recent rewrite. -Users can introduce problems as well if they modify the hints. - -<>= -check.hint <- function(hints, sex) { - if (is.null(hints$order)) stop("Missing order component") - if (!is.numeric(hints$order)) stop("Invalid order component") - n <- length(sex) - if (length(hints$order) != n) stop("Wrong length for order component") - - spouse <- hints$spouse - if (is.null(spouse)) hints - else { - lspouse <- spouse[,1] - rspouse <- spouse[,2] - if (any(lspouse <1 | lspouse >n | rspouse <1 | rspouse > n)) - stop("Invalid spouse value") - - temp1 <- (sex[lspouse]== 'female' & sex[rspouse]=='male') - temp2 <- (sex[rspouse]== 'female' & sex[lspouse]=='male') - if (!all(temp1 | temp2)) - stop("A marriage is not male/female") - - hash <- n*pmax(lspouse, rspouse) + pmin(lspouse, rspouse) - #Turn off this check for now - is set off if someone is married to two siblings - #if (any(duplicated(hash))) stop("Duplicate marriage") - - # Break any loops: A left of B, B left of C, C left of A. - # Not yet done - } - hints - } -@ diff --git a/devel/noweb/cleanup b/devel/noweb/cleanup deleted file mode 100644 index 49927023..00000000 --- a/devel/noweb/cleanup +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -(cd noweb; make clean) -## previously in top level of kinship2, used to manage noweb file cleanup via make commands diff --git a/devel/noweb/configure b/devel/noweb/configure deleted file mode 100644 index 18f9a1d0..00000000 --- a/devel/noweb/configure +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -(cd noweb; ${R_HOME}/bin${R_ARCH_BIN}/R CMD make fun) -## previosly at top level of kinship2, used in make file to pull code from nw files to .R diff --git a/devel/noweb/kinship.txt b/devel/noweb/kinship.txt deleted file mode 100644 index f6ec584d..00000000 --- a/devel/noweb/kinship.txt +++ /dev/null @@ -1,537 +0,0 @@ -\section{Kinship matrices} -The kinship matrix is foundational for random effects models with family -data. -For $n$ subjects it is an $n \times n$ matrix whose $ij$ element contains -the expected fraction of alleles that would be identical by descent -if we sampled one from subject $i$ and another from subject $j$. -Note that the diagonal elements of the matrix will be 0.5 not 1: when we -randomly sample twice from the same subject (with replacement) -we will get two copies of the gene inherited from the father 1/4 of the -time, the maternal copy twice (1/4) or one of each 1/2 the time. -The formal definition is $K(i,i) = 1/4 + 1/4 + 1/2 K(m,f)$ where -$m$ and $f$ are the father and mother of subject $i$. - -The algorithm used is found in K Lange, -\emph{Mathematical and Statistical Methods for Genetic Analysis}, -Springer 1997, page 71--72. - -The key idea of the recursive algorithm for $K(i,j)$ is to condition on -the gene selection for the first index $i$. -Let $m(i)$ and $f(i)$ be the indices of the mother and father of subject $i$ -and $g$ be the allele randomly sampled from subject $i$, -which may of either maternal or paternal origin. - -% updated to haveby JPS, 4/15/13 - -\begin{align} - K(i,j) &= P(\mbox{$g$ maternal}) * K(m(i), j) + - P(\mbox{$g$ paternal}) * K(f(i), j) \label{recur0} \\ - &= 1/2 K(m(i), j) + 1/2 K(f(i), j) \label{recur1} \\ - K(i,i) &= 1/2(1 + K(m(i), f(i))) \label{self} -\end{align} - -The key step in equation \eqref{recur0} is if $g$ has a maternal origin, then -it is a random selection from the two maternal genes, and it's IBD state with -respect to subject $j$ is that of a random selection from m(i) to a random -selection from $j$. This is precisely the definition of $K(m(i), j)$. -The recursion does not work for $K(i,i)$ in equation \eqref{self} since once -we select a maternal gene the second choice from ``$j$'' cannot use a -different maternal gene. - - -For the recurrence algorithm to work properly we need to compute the -values of $K$ for any parent before the calculations for their children. -Pedigree founders (those with no parents) are assumed to be unassociated, -so for these subjects we have -\begin{align*} - K(i,i) &= 1/2 - K(i,j) &=0 \; i\ne j -\end{align*} - -The final formula slightly different for the $X$ chromosome. -Equation \ref{recur0} still holds, but for males the probability -that a selected $X$ chromosome is maternal is 1, so when $i$ a male -the recurrence formula becomes $K(i,j) = K(m(i),j)$. -For females it is unchanged. -All males will have $K(i,i) = 1$ for the $X$ chromosome. - -In order to have already-defined terms on the right hand side of the -recurrence formula for each element, subjects need to be processed -in the following order -\begin{enumerate} - \item Generation 0 (founders) - \item $K(i,j)$ where $i$ is from generation 1 and $j$ from generation 0. - \item $K(i,j)$ with $i$ and $j$ from generation 1 - \item $K(i,j)$ with $i$ from generation 2 and $j$ from generation 0 or 1 - \item $K(i,j)$ with $i$ and $j$ from generation 2. - \item \ldots -\end{enumerate} -The kindepth routine assigns a plotting depth to each subject in such -a way that parents are always above children. -For each depth we need to do the compuations of formula \eqref{recur} -twice. The first time it will get the relationship between each subject -and prior generations correct, the second will correctly compute the -values between subjects on the same level. -The computations within any stage of the above list can be vectorized, -but not those between stages. - -Let [[indx]] be the index of the -rows for the generation currently being processed, say generation $g$. -We add correct computations to the matrix one row at a time; -all of the calculations depend only on the prior rows with the -exception of the [i,i] element. -This approach leads to -a for loop containing operations on single rows/columns. - -At one point below we use a vectorized version. It looks like the snippet below -<>= -for (g in 1:max(depth)) { - indx <- which(depth==g) - kmat[indx,] <- (kmat[mother[indx],] + kmat[father[indx], ])/2 - kmat[,indx] <- (kmat[,mother[indx]] + kmat[,father[indx],])/2 - for (j in indx) kmat[j,j] <- (1 + kmat[mother[j], father[j]])/2 -} -@ -The first line computes all the values for a horizontal stripe of the -matrix. It will be correct for columns in generations $>= -kinship <- function(id, ...) { - UseMethod('kinship') - } - -kinship.default <- function(id, dadid, momid, sex, chrtype="autosome", ...) { - chrtype <- match.arg(casefold(chrtype), c("autosome", "x")) - if (any(duplicated(id))) stop("All id values must be unique") - n <- length(id) - pdepth <- kindepth(id, dadid, momid) - if (chrtype == "autosome") { - if (n==1) - return(matrix(.5,1,1, dimnames=list(id, id))) - - kmat <- diag(c(rep(.5, n), 0)) #founders - - mrow <- match(momid, id, nomatch=n+1) #row number of the mother - drow <- match(dadid, id, nomatch=n+1) #row number of the dad - ## When all unrelateds, pdepth all=0. - ## Put c(1,) to make guard from iter 1:0 - for (depth in 1:max(c(1,pdepth))) { - for (j in (1:n)[pdepth==depth]) { - kmat[,j] <-kmat[j,] <- (kmat[mrow[j],] + kmat[drow[j],]) /2 - kmat[j,j] <- (1 + kmat[mrow[j], drow[j]]) /2 - } - } - } - else if (chrtype == "x") { - if (missing(sex) || length(sex) !=n) - stop("invalid sex vector") - #1 = female, 2=male - if (n==1) - return(matrix(ifelse(sex>2,sex/2,NA), 1,1, dimnames=list(id, id))) - - # kmat <- diag(c((3-sex)/2, 0)) #founders - kmat <- diag(ifelse(sex>2, NA, c((3-sex)/2, 0))) - mrow <- match(momid, id, nomatch=n+1) #row number of the mother - drow <- match(dadid, id, nomatch=n+1) #row number of the dad - - for (depth in 1:max(c(1,pdepth))) { - for (j in (1:n)[pdepth==depth]) { - if (sex[j] ==1) { - kmat[,j] <- kmat[j,] <- kmat[mrow[j],] - kmat[j,j]<- 1 - } - else if(sex[j] == 2) { - kmat[,j] <-kmat[j,] <- (kmat[mrow[j],] + kmat[drow[j],]) /2 - kmat[j,j] <- (1 + kmat[mrow[j], drow[j]]) /2 - } - else { - kmat[,j] <-kmat[j,] <- NA - kmat[j,j] <- NA - } - } - } - } - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id, id) - kmat -} -@ - -The method for a pedigree object is an almost trivial modification. Since the -mother and father are already indexed into the id list it has -two lines that are different, those that create mrow and drow. -The other change is that now we potentially have information available -on monozygotic twins. If there are any such, then when the second -twin of a pair is added to the matrix, we need to ensure that the -pair's kinship coefficient is set to the self-self value. -This can be done after each level is complete, but before children -for that level are computed. -If there are monozygotic triples, quadruplets, etc. this computation gets -more involved. - -The total number of monozygotic twins is always small, so it is efficient to -fix up all the monzygotic twins at each generation. -A variable [[havemz]] is set to TRUE if there are any, and an index array -[[mzindex]] is created for matrix subscripting. - -<>= -kinship.pedigree <- function(id, chrtype="autosome", ...) { - chrtype <- match.arg(casefold(chrtype), c("autosome", "x")) - if (any(duplicated(id$id))) stop("All id values must be unique") - n <- length(id$id) - pdepth <- kindepth(id) - - # Are there any MZ twins to worry about? - havemz <- FALSE - if (!is.null(id$relation) && any(id$relation$code=="MZ twin")) { - havemz <- TRUE - <> - } - - if (chrtype == "autosome") { - if (n==1) - return(matrix(.5,1,1, dimnames=list(id$id, id$id))) - - kmat <- diag(c(rep(.5, n), 0)) #founders - mrow <- ifelse(id$mindex ==0, n+1, id$mindex) - drow <- ifelse(id$findex ==0, n+1, id$findex) - - for (depth in 1:max(pdepth)) { - indx <- which(pdepth == depth) - kmat[indx,] <- (kmat[mrow[indx],] + kmat[drow[indx],]) /2 - kmat[,indx] <- (kmat[,mrow[indx]] + kmat[,drow[indx]]) /2 - for (j in indx) kmat[j,j] <- (1 + kmat[mrow[j], drow[j]])/2 - if (havemz) kmat[mzindex] <- (diag(kmat))[mzindex[,1]] - } - } - else if (chrtype == "x") { - sex <- as.numeric(id$sex) # 1 = female, 2=male - if (n==1) - return(matrix(sex/2, 1,1, dimnames=list(id$id, id$id))) - - kmat <- diag(c((3-sex)/2, 0)) #1 for males, 1/2 for females - mrow <- ifelse(id$mindex ==0, n+1, id$mindex) - drow <- ifelse(id$findex ==0, n+1, id$findex) - - for (depth in 1:max(pdepth)) { - for (j in (1:n)[pdepth==depth]) { - if (sex[j] ==1) { - kmat[,j] <- kmat[j,] <- kmat[mrow[j],] - kmat[j,j]<- 1 - } - else if(sex[j]==2) { - kmat[,j] <-kmat[j,] <- (kmat[mrow[j],] + kmat[drow[j],]) /2 - kmat[j,j] <- (1 + kmat[drow[j],mrow[j]]) /2 - } else { - kmat[,j] <-kmat[j,] <- NA - kmat[j,j] <- NA - } - if (havemz) kmat[mzindex] <- (diag(kmat))[mzindex[,1]] - } - } - } - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id$id, id$id) - kmat -} -@ - -For the Minnesota Family Cancer Study there are 461 families and 29114 -subjects. The raw kinship matrix would be 29114 by 29114 which is over -5 terabytes of memory, something that clearly won't work within S. %' -The solution is to store the overall matrix as a sparse Matrix object. -Each family forms a single block. For this study we have -[[n <- table(minnbreast$famid); sum(n*(n+1)/2)]] or 1.07 million entries; -assuming that only the lower half of each matrix is stored. -The actual size is actually smaller than this, since each family's -matrix will have zeros in it --- founders for instance are not related --- -and those zeros are also not stored. - -The result of each per-family call to kinship will be a symmetric matrix. -We first turn each of these into a dsCMatrix object, a sparse symmetric -form. -The [[bdiag]] function is then used to paste all of these individual -sparse matrices into a single large matrix. - -Why don't we use [[(i in famlist)]] below? A numeric subscript of [[[9]]] %' -selects the ninth family, not the family labeled as 9, so a numeric -family id would not act as we wished. -If all of the subject ids are unique, across all families, the final -matrix is labeled with the subject id, otherwise it is labeled with -family/subject. -<>= -kinship.pedigreeList <- function(id, chrtype="autosome", ...) { - famlist <- unique(id$famid) - nfam <- length(famlist) - matlist <- vector("list", nfam) - idlist <- vector("list", nfam) #the possibly reorderd list of id values - - for (i in 1:length(famlist)) { - tped <- id[i] #pedigree for this family - temp <- try(kinship(tped, chrtype=chrtype, ...), silent=TRUE) - if (class(temp)=="try-error") - stop(paste("In family", famlist[i], ":", temp)) - else matlist[[i]] <- as(forceSymmetric(temp), "dsCMatrix") - idlist[[i]] <- tped$id - } - - result <- bdiag(matlist) - if (any(duplicated(id$id))) - temp <-paste(rep(famlist, sapply(idlist, length)), - unlist(idlist), sep='/') - else temp <- unlist(idlist) - - dimnames(result) <- list(temp, temp) - result -} -@ - -The older [[makekinship]] function, -from before the creation of pedigreeList objects, -accepts the raw identifier data, along with a special family code -for unrelated subjects, as produced by the [[makefamid]] function. -All the unrelated subjects are put at the front of the kinship matrix -in this case rather than within the family. -Because unrelateds get put into a fake family, we cannot create a -rational family/subject identifier; the id must be unique across -families. -We include a copy of the routine for backwards compatability, but -do not anticipate any new usage of it. -Like most routines, this starts out with a collection of error checks. -<>= -makekinship <- function(famid, id, father.id, mother.id, unrelated=0) { - n <- length(famid) - if (length(id) != n) stop("Mismatched lengths: famid and id") - if (length(mother.id) != n) stop("Mismatched lengths: famid and mother.id") - if (length(father.id) != n) stop("Mismatched lengths: famid and father.id") - if (any(is.na(famid))) stop("One or more subjects with missing family id") - if (any(is.na(id))) stop("One or more subjects with a missing id") - if (is.numeric(famid)) { - if (any(famid <0)) stop("Invalid family id, must be >0") - } - - if (any(duplicated(id))) stop("Subject ids must be unique") - - famlist <- sort(unique(famid)) #same order as the counts table - idlist <- id # will be overwritten, but this makes it the - # correct data type and length - counts <- table(famid) - cumcount <- cumsum(counts) - if (any(famid==unrelated)) { - # Assume that those with famid of 0 are unrelated uniques - # (usually the marry-ins) - temp <- match(unrelated, names(counts)) - nzero <- counts[temp] - counts <- counts[-temp] - famlist <- famlist[famlist != unrelated] - idlist[1:nzero] <- id[famid== unrelated] - cumcount <- cumsum(counts) + nzero - } - else nzero <- 0 - - mlist <- vector('list', length(counts)) - for (i in 1:length(counts)) { - who <- (famid == famlist[i]) - if (sum(who) ==1) mlist[[i]] <- Matrix(0.5) # family of size 1 - else { - mlist[[i]] <- kinship(id[who], mother.id[who], father.id[who]) - } - idlist[seq(to=cumcount[i], length=counts[i])] <- id[who] - } - - if (nzero>0) mlist <- c(list(Diagonal(nzero)), mlist) - kmat <- forceSymmetric(bdiag(mlist)) - dimnames(kmat) <- list(idlist, idlist) - kmat -} -@ - -Return now to the question of monzygotic sets. -Consider the following rather difficult example: -\begin{verbatim} - 1 2 - 1 3 - 5 6 - 3 7 - 10 9 -\end{verbatim} -Subjects 1, 2, 3, and 7 form a monozygotic quadruple, 5/6 and 9/10 are -monzygotic pairs. -First create a vector \code{mzgrp} which contains for each subject the -lowest index of a monozygotic twin for that subject. -For non-twins it can have any value. -For this example that vector is set to 1 for subjects 1, 2, 3, and 7, -to 5 for 5 and 6, and to 9 for 9 and 10. -Creating this requires a short while loop. -Once this is in hand we can identify the sets. -<>= -temp <- which(id$relation$code=="MZ twin") -## drop=FALSE added in case only one MZ twin set -mzmat <- as.matrix(id$relation[,c("indx1", "indx2")])[temp,,drop=FALSE] -mzgrp <- 1:max(mzmat) #everyone starts in their own group -# The loop below will take k-1 iterations for a set labeled as -# (k-1):k, ..., 4:3, 3:2, 2:1; this is the worst case. -while(1) { - if (all(mzgrp[mzmat[,1]] == mzgrp[mzmat[,2]])) break - for (i in 1:nrow(mzmat)) - mzgrp[mzmat[i,1]] <- mzgrp[mzmat[i,2]] <- min(mzgrp[mzmat[i,]]) - } -@ -Now make a matrix that has a row for every possible pair. -Finally, remove the rows that are identical. -The result is a set of all pairs of observations in the matrix that -correspond to monozygotic pairs. -<>= -mzindex <- cbind(unlist(tapply(mzmat, mzgrp[mzmat], function(x) { - z <- unique(x) - rep(z, length(z))})), - unlist(tapply(mzmat, mzgrp[mzmat], function(x) { - z <- unique(x) - rep(z, each=length(z))}))) -mzindex <- mzindex[mzindex[,1] != mzindex[,2],] -@ - -\section{Older routines} -For testing purposes we have a version of the kinship function prior to -addition of the chrtype argument. - - -<>= -oldkinship <- function(id, ...) { - UseMethod('oldkinship') - } - -oldkinship.default <- function(id, dadid, momid, ...) { - n <- length(id) - if (n==1) - return(matrix(.5,1,1, dimnames=list(id, id))) - if (any(duplicated(id))) stop("All id values must be unique") - kmat <- diag(n+1) /2 - kmat[n+1,n+1] <- 0 - - pdepth <- kindepth(id, dadid, momid) - mrow <- match(momid, id, nomatch=n+1) #row number of the mother - drow <- match(dadid, id, nomatch=n+1) #row number of the dad - - for (depth in 1:max(pdepth)) { - indx <- (1:n)[pdepth==depth] - for (i in indx) { - mom <- mrow[i] - dad <- drow[i] - kmat[i,] <- kmat[,i] <- (kmat[mom,] + kmat[dad,])/2 - kmat[i,i] <- (1+ kmat[mom,dad])/2 - } - } - - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id, id) - kmat - } - -oldkinship.pedigree <- function(id, ...) { - n <- length(id$id) - if (n==1) - return(matrix(.5,1,1, dimnames=list(id$id, id$id))) - if (any(duplicated(id$id))) stop("All id values must be unique") - kmat <- diag(n+1) /2 - kmat[n+1,n+1] <- 0 - - pdepth <- kindepth(id) - mrow <- ifelse(id$mindex ==0, n+1, id$mindex) - drow <- ifelse(id$findex ==0, n+1, id$findex) - - # Are there any MZ twins to worry about? - if (!is.null(id$relation) && any(id$relation$code=="MZ twin")) { - havemz <- TRUE - temp <- which(id$relation$code=="MZ twin") - ## drop=FALSE added in case only one MZ twin set - mzmat <- as.matrix(id$relation[,c("indx1", "indx2")])[temp,,drop=FALSE] - - # any triples, quads, etc? - if (any(table(mzmat) > 1)) { #yes there are - # each group id will be min(member id) - mzgrp <- 1:max(mzmat) #each person a group - indx <- sort(unique(as.vector(mzmat))) - # The loop below will take k-1 iterations for a set labeled as - # 1:2, 2:3, ...(k-1):k; this is the worst case. - while(1) { - z1 <- mzgrp[mzmat[,1]] - z2 <- mzgrp[mzmat[,2]] - if (all(z1 == z2)) break - mzgrp[indx] <- tapply(c(z1, z1, z2, z2), c(mzmat,mzmat), min) - } - # Now mzgrp = min person id for each person in a set - matlist <- tapply(mzmat, mzgrp[mzmat], function(x) { - x <- sort(unique(x)) - temp <- cbind(rep(x, each=length(x)), rep(x, length(x))) - temp[temp[,1] != temp[,2],] - }) - } - else { #no triples, easier case - matlist <- tapply(mzmat, row(mzmat), function(x) - matrix(x[c(1,2,2,1)],2), simplify=FALSE) - } - } - else havemz <- FALSE - - for (depth in 1:max(pdepth)) { - indx <- (1:n)[pdepth==depth] - for (i in indx) { - mom <- mrow[i] - dad <- drow[i] - kmat[i,] <- kmat[,i] <- (kmat[mom,] + kmat[dad,])/2 - kmat[i,i] <- (1+ kmat[mom,dad])/2 - } - if (havemz) { - for (i in 1:length(matlist)) { - temp <- matlist[[i]] - kmat[temp] <- kmat[temp[1], temp[1]] - } - } - } - - kmat <- kmat[1:n,1:n] - dimnames(kmat) <- list(id$id, id$id) - kmat -} - -oldkinship.pedigreeList <- function(id, ...) { - famlist <- unique(id$famid) - nfam <- length(famlist) - matlist <- vector("list", nfam) - idlist <- vector("list", nfam) #the possibly reorderd list of id values - - for (i in 1:length(famlist)) { - tped <- id[i] #pedigree for this family - temp <- try(oldkinship(tped, ...), silent=TRUE) - if (class(temp)=="try-error") - stop(paste("In family", famlist[i], ":", temp)) - else matlist[[i]] <- as(forceSymmetric(temp), "dsCMatrix") - idlist[[i]] <- tped$id - } - - result <- bdiag(matlist) - if (any(duplicated(id$id))) - temp <-paste(rep(famlist, sapply(idlist, length)), - unlist(idlist), sep='/') - else temp <- unlist(idlist) - - dimnames(result) <- list(temp, temp) - result -} -@ diff --git a/devel/noweb/noweb.R b/devel/noweb/noweb.R deleted file mode 100644 index 568c18ac..00000000 --- a/devel/noweb/noweb.R +++ /dev/null @@ -1,180 +0,0 @@ -nwread <- function(file) { - program <- tab.to.blank(readLines(file)) - codestart <- which(grepl("^ *<<[^>]*>>=", program)) - textstart <- which(grepl("^@$|^@ ", program)) - program <- nwkillat(program) - if (min(codestart, textstart) > 1) textstart <- c(1, textstart) - - temp <- rbind( c(codestart, textstart), - c(rep(2, length(codestart)), rep(1, length(textstart)))) - temp <- temp[,order(temp[1,])] - endline <- c(temp[1,-1] -1, length(program)) - - output <- vector("list", ncol(temp)) #number of chunks - oname <- rep("", ncol(temp)) - for (i in 1:ncol(temp)) { - if (temp[2,i]==1) { # text - blankline <- sub("^@ *","", program[temp[1,i]]) - if (blankline=="" || substring(blankline,1,1)=="%") { - # The line is blank - if (temp[1,i]==endline[i]) - text <- vector("character",0) #Nothing there! - else text <- program[(temp[1,i]+1):endline[i]] - attr(text, "blankline") <- TRUE - } - else { - text <- blankline - if (temp[1,i] < endline[i]) - text <- c(text, program[(temp[1,i]+1):endline[i]]) - attr(text, "blankline") <- FALSE - } - class(text) <- "nwtext" - output[[i]] <- text - } - - else { #code - cname <- sub(">>=.*$", "", sub("<<", "", program[temp[1,i]])) - if (temp[1,i] == endline[i]) code <- vector("character", 0) - else code <- program[(temp[1,i]+1):endline[i]] - oname[i] <- cname - output[[i]] <- nwparse(code) - } - } - - names(output) <- oname - - for (i in which(oname!= "")) { # all the code chunks - if (any(is.na(match(output[[i]]$xref, oname)))) { - indx <- which(is.na(match(output[[i]]$xref, oname))) - stop(paste("Code referenced but not found:", - paste((output[[i]]$xref)[indx], collapse=", "))) - } - } - - temp <- nwloop(output) - if (length(temp)) - stop(paste("Code structure has circular references: ", - paste(temp, collapse=" --> "))) - - class(output) <- "noweb" - output - } -nwparse <- function(lines) { - # Look for references to other code - indx <- which(grepl("<<[^>]*>>", lines)) - if (length(indx)) { - xref <- sub(">>.*$", "", sub("[ \t]*<<", "", lines[indx])) - indent <- sub("<<.*", "", lines[indx]) - out <- list(lines=lines, xref=xref, indent=indent, xindex=indx) - } - else out <- list(lines=lines, xref=NULL) - - class(out) <- "nwcode" - out - } -nwloop <- function(code) { - xref <- lapply(code, function(x) - if (class(x)=="nwcode") unique(x$xref) else NULL) - - nwchase <- function(chain) { - xtemp <- xref[[chain[1]]] #routines called by the head of the chain - if (length(xtemp) ==0) return(NULL) - - for (i in 1:length(xtemp)) { - if (!is.na(match(xtemp[i], chain))) return(c(rev(chain), xtemp[i])) - temp <- nwchase(c(xtemp[i], chain)) - if (!is.null(temp)) return(temp) - } - NULL - } - - - cnames <- names(code) - temp <- lapply(cnames[cnames!=""], nwchase) - templen <- sapply(temp,length) - if (any(templen) > 0) - temp[[min(which(templen==min(templen[templen>0])))]] - else NULL - } -nwkillat <- function(program) { - suspectlines <- which(grepl("<<[~>]>>", program)) - - # This is slower than Hades, but I expect to see only 0-3 - # lines in the suspectlines set - for (i in suspectlines) { - line <- strsplit(program[i], split='') - nl <- length(line) - state <- 0 # 0=ordirnay text, 1=inside a [[ - cstate <- integer(nl) # 1= an ampersand to be removed - for (j in 1:nl) { - if (state==0) { - if ((i+1 >= - -#'@examples -#'pedigree.shrink <- function(ped, avail, affected=NULL, seed=NULL, maxBits = 16){ -#' if(class(ped) != "pedigree") -#' stop("Must be a pegigree object.\n") -#' - ##set the seed for random selections -#' -#' if(is.null(seed)) -#' { -#' seed <- sample(2^20, size=1) -#' } -#' set.seed(seed) -#' -#' if(any(is.na(avail))) -#' stop("NA values not allowed in avail vector.") -#' -#' if(is.null(affected)) -#' affected = if(is.matrix(ped$affected)) ped$affected[,1] else ped$affected -#' -#' ped$affected = affected -#' -#' idTrimmed <- numeric() -#' idList <- list() -#' nOriginal <- length(ped$id) -#' -#' bit_sizeOriginal <- bit_size(ped)$bit_size -#' - ## first find unavailable subjects to remove anyone who is not - ## available and does not have an available descendant -#' -#' idTrimUnavail <- findUnavailable(ped, avail) -#' -#' if(length(idTrimUnavail)) { -#' -#' pedTrimmed <- pedigree.trim(idTrimUnavail, ped) -#' avail <- avail[match(pedTrimmed$id, ped$id)] -#' idTrimmed <- c(idTrimmed, idTrimUnavail) -#' idList$unavail <- paste(idTrimUnavail, collapse=' ') -#' -#' } else { - ## no trimming, reset to original ped -#' pedTrimmed <- ped -#' } -#' - ## Next trim any available terminal subjects with unknown phenotype - ## but only if both parents are available -#' - ## added nNew>0 check because no need to trim anymore if empty ped -#' -#' nChange <- 1 -#' idList$noninform = NULL -#' nNew <- length(pedTrimmed$id) -#' -#' while(nChange > 0 & nNew > 0){ -#' nOld <- length(pedTrimmed$id) -#' - ## findAvailNonInform finds non-informative, but after suggesting - ## their removal, checks for more unavailable subjects before returning -#' idTrimNonInform <- findAvailNonInform(pedTrimmed, avail) -#' -#' if(length(idTrimNonInform)) { -#' pedNew <- pedigree.trim(idTrimNonInform, pedTrimmed) -#' avail <- avail[match(pedNew$id, pedTrimmed$id)] -#' idTrimmed <- c(idTrimmed, idTrimNonInform) -#' idList$noninform = paste(c(idList$noninform, -#' idTrimNonInform), collapse=' ') -#' pedTrimmed <- pedNew -#' -#' } -#' nNew <- length(pedTrimmed$id) -#' nChange <- nOld - nNew -#' -#' } -#' - ## Determine number of subjects & bit_size after initial trimming -#' nIntermed <- length(pedTrimmed$id) -#' -#' bit_size <- bit_size(pedTrimmed)$bit_size -#' - ## Now sequentially shrink to fit bit_size <= maxBits -#' -#' bitVec <- c(bit_sizeOriginal,bit_size) -#' -#' isTrimmed <- TRUE -#' idList$affect=NULL -#' -#' while(isTrimmed & (bit_size > maxBits)) -#' { -#' - ## First, try trimming by unknown status -#' save <- findAvailAffected(pedTrimmed, avail, affstatus=NA) -#' isTrimmed <- save$isTrimmed -#' - ## Second, try trimming by unaffected status if no unknowns to trim -#' if(!isTrimmed) -#' { -#' save <- findAvailAffected(pedTrimmed, avail, affstatus=0) -#' isTrimmed <- save$isTrimmed -#' -#' } -#' -#' - ## Third, try trimming by affected status if no unknowns & no unaffecteds - ## to trim -#' if(!isTrimmed) { -#' save <- findAvailAffected(pedTrimmed, avail, affstatus=1) -#' isTrimmed <- save$isTrimmed -#' } -#' -#' if(isTrimmed) { -#' pedTrimmed <- save$ped -#' avail <- save$newAvail -#' bit_size <- save$bit_size -#' bitVec <- c(bitVec, bit_size) -#' idTrimmed <- c(idTrimmed, save$idTrimmed) -#' idList$affect = paste(c(idList$affect, save$idTrimmed), -#' collapse=' ') -#' } -#' -#' -#' } - ## end while (isTrimmed) & (bit_size > maxBits) -#' -#' nFinal <- length(pedTrimmed$id) -#' -#' obj <- list(pedObj = pedTrimmed, -#' idTrimmed = idTrimmed, -#' idList = idList, -#' bit_size = bitVec, -#' avail=avail, -#' pedSizeOriginal = nOriginal, -#' pedSizeIntermed = nIntermed, -#' pedSizeFinal = nFinal, -#' seed = seed) -#' -#' oldClass(obj) <- "pedigree.shrink" -#' -#' return(obj) -#'} -#' -#'@ - - -\subsection{Sub-Functions} - - -These next functions were written to support pedigree.shrink. -In making the new kinship2 package to include pedigree.shrink, Jason Sinnwell -decided to add functionality to removed subjects from a pedigree object -given their id. Then within pedigree.shrink, any removal of subjects consists -of two steps, identifying who to remove by their ids. Then removing them with -a new pedigree.trim function. - -The problem with pedigree.trim is that if the removal of any subject causes -a marriage to be split and have parentless children, it will cause a problem. - -Therefore, when using functions like findAvalNonInform and findAvalAffected -for persons to remove, follow them up with a call findUnavailable, after -setting the removal candidates availability to FALSE, so clear up any -removals. - -This last step was re-written by Jason Sinnwell on 6/1/2011, and his test cases -seemed to test against the results before the re-write. He expects there to -be bugs to be discovered down the road. - - -What was previously pedTrim is now split into two functions, pedigree.trim and findUnavail. - -pedigree.trim : remove subjects from pedigree object given their id. -Update for version 1.2.8 (9/27/11) Allow creation of an empty pedigree -if all IDs are removed. This allows bit_size and -pedigree.shrink to still complete with an empty pedigree. - -findUnavail: identify subjects are not available and who do not have -an available descendant. Do this iteratively by successively removing -unavailable terminal nodes. Written by Steve Iturria, PhD, modified -by Dan Schaid. - -<>= -#'@examples -#'pedigree.trim <- function(removeID, ped){ -## trim subjects from a pedigree who match the removeID -## trim relation matrix as well -#' -#'if(class(ped) != "pedigree") -#'stop("Must be a pegigree object.\n") -#' -#'rmidx <- match(removeID, ped$id) -#'if(length(rmidx)>0) { -#'pedtrimmed <- ped[-rmidx] -#'return(pedtrimmed) -#'} else { -#'return(ped) -#'} -#'} -#' -#'@ -#' -Place the two exclude functions within the same file as findUnavailable -because that is the only place they are used. Pretty self-documenting. - -<>= - -#'@examples -#'findUnavailable <-function(ped, avail) { -#' - ## find id within pedigree anyone who is not available and - ## does not have an available descendant -#' - ## avail = TRUE/1 if available, FALSE/0 if not -#' - ## will do this iteratively by successively removing unavailable - ## terminal nodes - ## Steve Iturria, PhD, modified by Dan Schaid -#' -#'cont <- TRUE # flag for whether to keep iterating -#' -#'is.terminal <- (is.parent(ped$id, ped$findex, ped$mindex) == FALSE) - ## JPS 3/10/14 add strings check in case of char ids -#'pedData <- data.frame(id=ped$id, father=ped$findex, mother=ped$mindex, -#'sex=ped$sex, avail, is.terminal, stringsAsFactors=FALSE) -#'iter <- 1 -#' -#'while(cont) { - ##print(paste("Working on iter", iter)) -#' -#'num.found <- 0 -#'idx.to.remove <- NULL -#' -#'for(i in 1:nrow(pedData)) -#'{ -#' -#' if(pedData$is.terminal[i]) -#' { -#' if( pedData$avail[i] == FALSE ) # if not genotyped -#' { -#' idx.to.remove <- c(idx.to.remove, i) -#' num.found <- num.found + 1 -#' - ## print(paste(" removing", num.found, "of", nrow(pedData))) -#' } -#' } -#' -#'} -#' -#'if(num.found > 0) { -#' -#'pedData <- pedData[-idx.to.remove, ] - ## re-index parents, which varies depending on if the removed indx is - ## prior to parent index -#'for(k in 1:nrow(pedData)){ -#'if(pedData$father[k] > 0) { -#'pedData$father[k] <- pedData$father[k] - -#'sum(idx.to.remove < pedData$father[k]) -#'} -#'if(pedData$mother[k]+0) { -#'pedData$mother[k] <- pedData$mother[k] - -#'sum(idx.to.remove < pedData$mother[k]) -#'} -#'} -#'pedData$is.terminal <- -#'(is.parent(pedData$id, pedData$father, pedData$mother) == FALSE) -#' -#'} -#'else { -#'cont <- FALSE -#'} -#'iter <- iter + 1 -#' -#'} -#' - ## A few more clean up steps -#' - ## remove unavailable founders -#'tmpPed <- excludeUnavailFounders(pedData$id, -#'pedData$father, pedData$mother, pedData$avail) -#' -#'tmpPed <- excludeStrayMarryin(tmpPed$id, tmpPed$father, tmpPed$mother) -#' -#'id.remove <- ped$id[is.na(match(ped$id, tmpPed$id))] -#' -#'return(id.remove) -#' -#'} -#' -#'excludeStrayMarryin <- function(id, father, mother){ - # get rid of founders who are not parents (stray available marryins - # who are isolated after trimming their unavailable offspring) - ## JPS 3/10/14 add strings check in case of char ids -#'trio <- data.frame(id=id, father=father, mother=mother, stringsAsFactors=FALSE) -#'parent <- is.parent(id, father, mother) -#'founder <- is.founder(father, mother) -#' -#'exclude <- !parent & founder -#'trio <- trio[!exclude,,drop=FALSE] -#'return(trio) -#' -#'} -#' -#'excludeUnavailFounders <- function(id, father, mother, avail) -#'{ -#' nOriginal <- length(id) -#' idOriginal <- id -#' zed <- father!=0 & mother !=0 - ## concat ids to represent marriages. - ## Bug if there is ":" in char subj ids -#' marriage <- paste(id[father[zed]], id[mother[zed]], sep=":" ) -#' -#' sibship <- tapply(marriage, marriage, length) -#' nm <- names(sibship) -#' -#' splitPos <- regexpr(":",nm) -#' dad <- substring(nm, 1, splitPos-1) -#' mom <- substring(nm, splitPos+1, nchar(nm)) -#' - ## Want to look at parents with only one child. - ## Look for parents with > 1 marriage. If any - ## marriage has > 1 child then skip this mom/dad pair. -#' -#' nmarr.dad <- table(dad) -#' nmarr.mom <- table(mom) -#' skip <- NULL -#' -#' if(any(nmarr.dad > 1)) { - ## Dads in >1 marriage -#' ckdad <- which(as.logical(match(dad, -#' names(nmarr.dad)[which(nmarr.dad > 1)],nomatch=FALSE))) -#' skip <- unique(c(skip, ckdad)) -#' } -#' -#' if(any(nmarr.mom > 1)) { - ## Moms in >1 marriage -#' ckmom <- which(as.logical(match(mom, -#' names(nmarr.mom)[which(nmarr.mom > 1)],nomatch=FALSE))) -#' skip <- unique(c(skip, ckmom)) -#' } -#' -#' if(length(skip) > 0) { -#' dad <- dad[-skip] -#' mom <- mom[-skip] -#' zed <- (sibship[-skip]==1) -#' } else { -#' zed <- (sibship==1) -#' } -#' -#' n <- sum(zed) -#' idTrimmed <- NULL -#' if(n>0) -#' { -#' - # dad and mom are the parents of sibships of size 1 -#' dad <- dad[zed] -#' mom <- mom[zed] -#' for(i in 1:n){ - ## check if mom and dad are founders (where their parents = 0) -#' dad.founder <- (father[id==dad[i]] == 0) & (mother[id==dad[i]] == 0) -#' mom.founder <- (father[id==mom[i]] == 0) & (mother[id==mom[i]] == 0) -#' both.founder <- dad.founder & mom.founder -#' - ## check if mom and dad have avail -#' dad.avail <- avail[id==dad[i]] -#' mom.avail <- avail[id==mom[i]] -#' - ## define not.avail = T if both mom & dad not avail -#' not.avail <- (dad.avail==FALSE & mom.avail==FALSE) -#' -#' if(both.founder & not.avail) { - ## remove mom and dad from ped, and zero-out parent - ## ids of their child -#' -#' child <- which(father==which(id==dad[i])) -#' father[child] <- 0 -#' mother[child] <- 0 -#' -#' idTrimmed <- c(idTrimmed, dad[i], mom[i]) -#' -#' excludeParents <- (id!=dad[i]) & (id!=mom[i]) -#' id <- id[excludeParents] -#' father <- father[excludeParents] -#' mother <- mother[excludeParents] -#' - ## re-index father and mother, assume len(excludeParents)==2 -#' father <- father - 1*(father > which(!excludeParents)[1]) - -#' 1*(father > which(!excludeParents)[2]) -#' -#' mother <- mother - 1*(mother > which(!excludeParents)[1]) - -#' 1*(mother > which(!excludeParents)[2]) -#' -#' avail <- avail[excludeParents] -#' } -#' } -#' } -#' -#' nFinal <- length(id) -#' nTrimmed = nOriginal - nFinal -#' -#' return(list(nTrimmed = nTrimmed, idTrimmed=idTrimmed, -#' id=id, father=father, mother=mother)) -#'} -#' -#'@ -#' -Function to calculate pedigree bit size, which is -2 * n.NonFounder - n.Founder. It is an indicator for how much resources -the pedigree will require to be processed by linkage algorithms to calculate -the likelihood of the observed genotypes given the pedigree structure. - -The Lander-Green handles smaller pedigrees and many markers -The Elston-Stewart handles larger pedigrees and fewer markers. - -<>= -#'@examples - ## renamed from pedBits, part of pedigree.shrink functions -#' -#'bit_size <- function(ped) { - ## calculate bit size of a pedigree -#' -#'if(class(ped) != "pedigree") -#'stop("Must be a pegigree object.\n") -#' -#'father = ped$findex -#'mother = ped$mindex -#'id = ped$id -#' -#'founder <- father==0 & mother==0 -#'pedSize <- length(father) -#'nFounder <- sum(founder) -#'nNonFounder <- pedSize - nFounder -#'bit_size <- 2*nNonFounder - nFounder -#'return(list(bit_size=bit_size, -#'nFounder = nFounder, -#'nNonFounder = nNonFounder)) -#'} -#' -#'@ -#' -Two functions to identify subjects to remove by other indicators0 -than availability. - -findAvailNonInform: id subjects to remove who are available, but not -informative. This function was formerly trimAvailNonInform(). - - -findAvailAffected: id subjects to remove who were not removed by -findUnavailable(), but who would be best to remove given their -affected status. Try trimming one subject by with affected matching -affstatus. If there are ties of multiple subjects that reduce bit -size equally, randomly choose one of them. This function was formerly named pedTrimOneSubj(). -On 3/10/14, Nick Larson found a bug with char ids when stringsAsFactors was TRUE; this -is now fixed with the option set specifically in the data.frames sset to FALSE. - - -<>= -#'@examples -#'findAvailNonInform <- function(ped, avail){ -#' - ## trim persons who are available but not informative b/c not parent - ## by setting their availability to FALSE, then call findUnavailable() - ## JPS 3/10/14 add strings check in case of char ids -#'pedData <- data.frame(id=ped$id, father=ped$findex, -#'mother=ped$mindex, avail=avail, stringsAsFactors=FALSE ) -#' -#'checkParent <- is.parent(pedData$id, pedData$father, pedData$mother) -#' -#'for(i in 1:nrow(pedData)){ -#' -#'if(checkParent[i]==FALSE & avail[i]==TRUE & -#'all(ped$affected[i]==0, na.rm=TRUE)) { -#' - ## could use ped$affected[i,] if keep matrix -#' -#'fa <- pedData$id[pedData$father[i]] -#'mo <- pedData$id[pedData$mother[i]] -#'if(avail[pedData$id==fa] & avail[pedData$id==mo]) -#'{ -#' pedData$avail[i] <- FALSE -#'} -#'} -#'} -#' -#'idTrim <- findUnavailable(ped, pedData$avail) -#'return(idTrim) -#'} -#' -#'@ -#' -<>= -#'@examples -#'findAvailAffected <- function(ped, avail, affstatus) - ## Try trimming one subject by affection status indicator - ## If ties for bits removed, randomly select one of the subjects -#' -#'{ -#' -#' notParent <- !is.parent(ped$id, ped$findex, ped$mindex) -#' -#' if(is.na(affstatus)) { -#' possiblyTrim <- ped$id[notParent & avail & is.na(ped$affected)] -#' } else { -#' possiblyTrim <- ped$id[notParent & avail & ped$affected==affstatus] -#' } -#' nTrim <- length(possiblyTrim) -#' -#' if(nTrim == 0) -#' { -#' return(list(ped=ped, -#' idTrimmed = NA, -#' isTrimmed = FALSE, -#' bit_size = bit_size(ped)$bit_size)) -#' } -#' -#' trimDat <- NULL -#' -#' for(idTrim in possiblyTrim) { -#' -#' avail.try <- avail -#' avail.try[ped$id==idTrim] <- FALSE -#' id.rm <- findUnavailable(ped, avail.try) -#' newPed <- pedigree.trim(id.rm, ped) -#' trimDat <- rbind(trimDat, -#' c(id=idTrim, bit_size=bit_size(newPed)$bit_size)) -#' } -#' -#' bits <- trimDat[,2] -#' - # trim by subject with min bits. This trims fewer subject than - # using max(bits). -#' -#' idTrim <- trimDat[bits==min(bits), 1] -#' - ## break ties by random choice -#' if(length(idTrim) > 1) -#' { -#' rord <- order(runif(length(idTrim))) -#' idTrim <- idTrim[rord][1] -#' } -#' -#' avail[ped$id==idTrim] <- FALSE -#' id.rm <- findUnavailable(ped, avail) -#' newPed <- pedigree.trim(id.rm, ped) -#' pedSize <- bit_size(newPed)$bit_size -#' avail <- avail[!(ped$id %in% id.rm)] -#' -#' return(list(ped=newPed, -#' newAvail = avail, -#' idTrimmed = idTrim, -#' isTrimmed = TRUE, -#' bit_size = pedSize)) -#'} -#' -#'@ -#' -Group other functions used in the above main functions -together as pedigree.shrink.minor.R - - -These functions get indicator vectors of who is a parent, -founder, or disconnected - -<>= -#'@examples -#'is.parent <- function(id, findex, mindex){ - # determine subjects who are parents - # assume input of father/mother indices, not ids -#' -#'father <- mother <- rep(0, length(id)) -#'father[findex>0] <- id[findex] -#'mother[mindex>0] <- id[mindex] -#' -#'isFather <- !is.na(match(id, unique(father[father!=0]))) -#'isMother <- !is.na(match(id, unique(mother[mother!=0]))) -#'isParent <- isFather |isMother -#'return(isParent) -#'} -#' -#'is.founder <- function(mother, father){ -#'check <- (father==0) & (mother==0) -#'return(check) -#'} -#' -#'is.disconnected <- function(id, findex, mindex) -#'{ -#' - # check to see if any subjects are disconnected in pedigree by checking for - # kinship = 0 for all subjects excluding self -#' father <- id[findex] -#' mother <- id[mindex] -#' kinMat <- kinship(id, father, mother) -#' diag(kinMat) <- 0 -#' disconnected <- apply(kinMat==0.0, 1, all) -#' -#' return(disconnected) -#'} -#' -#'@ -#' -Print a pedigree.shrink object. Tell the original bit size and the trimmed bit size. - -<>= -#'@examples -#'print.pedigree.shrink <- function(x, ...){ -#' -#'printBanner(paste("Shrink of Pedigree ", unique(x$pedObj$ped), sep="")) -#' -#'cat("Pedigree Size:\n") -#' -#'if(length(x$idTrimmed) > 2) -#'{ -#' n <- c(x$pedSizeOriginal, x$pedSizeIntermed, x$pedSizeFinal) -#' b <- c(x$bit_size[1], x$bit_size[2], x$bit_size[length(x$bit_size)]) -#' row.nms <- c("Original","Only Informative","Trimmed") -#'} else { -#' n <- c(x$pedSizeOriginal, x$pedSizeIntermed) -#' b <- c(x$bit_size[1], x$bit_size[2]) -#' row.nms <- c("Original","Trimmed") -#'} -#' -#'df <- data.frame(N.subj = n, Bits = b) -#'rownames(df) <- row.nms -#'print(df, quote=FALSE) -#' -#'if(!is.null(x$idList$unavail)) -#'cat("\n Unavailable subjects trimmed:\n", x$idList$unavail, "\n") -#' -#'if(!is.null(x$idList$noninform)) -#'cat("\n Non-informative subjects trimmed:\n", x$idList$noninform, "\n") -#' -#'if(!is.null(x$idList$affect)) -#'cat("\n Informative subjects trimmed:\n", x$idList$affect, "\n") -#' - ##cat("\n Pedigree after trimming:", x$bit_size, "\n") -#' -#'invisible() -#'} -#' -#'@ -#' -<>= -#'@examples -#'printBanner <- function(str, banner.width=options()$width, char.perline=.75*banner.width, border = "="){ -#' - # char.perline was calculated taking the floor of banner.width/3 -#' -#'vec <- str -#'new<-NULL -#'onespace<-FALSE -#'for(i in 1:nchar(vec)){ -#'if (substring(vec,i,i)==' ' && onespace==FALSE){ -#'onespace<-TRUE -#'new<-paste(new,substring(vec,i,i),sep="")} -#'else if (substring(vec,i,i)==' ' && onespace==TRUE) -#'{onespace<-TRUE} -#'else{ -#'onespace<-FALSE -#'new<-paste(new,substring(vec,i,i),sep="")} -#'} -#' -#'where.blank<-NULL -#'indx <- 1 -#' -#'for(i in 1:nchar(new)){ -#'if((substring(new,i,i)==' ')){ -#'where.blank[indx]<-i -#'indx <- indx+1 -#'} -#'} -#' - # Determine the position in the where.blank vector to insert the Nth character position of "new" -#'j<-length(where.blank)+1 -#' - # Add the Nth character position of the "new" string to the where.blank vector. -#'where.blank[j]<-nchar(new) -#' -#'begin<-1 -#'end<-max(where.blank[where.blank<=char.perline]) -#' - # If end.ok equals NA then the char.perline is less than the position of the 1st blank. -#'end.ok <- is.na(end) -#' - # Calculate a new char.perline. -#'if (end.ok==TRUE){ -#'char.perline <- floor(banner.width/2) -#'end<-max(where.blank[where.blank<=char.perline]) -#'} -#' -#'cat(paste(rep(border, banner.width), collapse = ""),"\n") -#' -#'repeat { -#'titleline<-substring(new,begin,end) -#'n <- nchar(titleline) -#'if(n < banner.width) -#'{ -#' n.remain <- banner.width - n -#' n.left <- floor(n.remain/2) -#' n.right <- n.remain - n.left -#' for(i in 1:n.left) titleline <- paste(" ",titleline,sep="") -#' for(i in 1:n.right) titleline <- paste(titleline," ",sep="") -#' n <- nchar(titleline) -#'} -#'cat(titleline,"\n") -#'begin<-end+1 -#'end.old <- end - # Next line has a problem when used in R. Use print.banner.R until fixed. - # Does max with an NA argument -#'tmp <- where.blank[(end.old>= -#'@examples -#'plot.pedigree.shrink <- function(x, bigped=FALSE, title="", -#'xlegend="topright", ...){ -#' - ## Plot pedigrees, coloring subjects according - ## to availability, shaded by affected status used in shrink -#' -#'if (bigped == FALSE) { -#'tmp <- plot(x$pedObj, col = x$avail + 1,keep.par=T) -#'} -#'else { -#'tmp <- plot.pedigree(x$pedObj, align = FALSE, packed = FALSE, -#'col = x$avail + 1, cex = 0.5, symbolsize = 0.5,keep.par=T) -#'} -#' -#'legend(x = xlegend, legend = c("DNA Available", "UnAvailable"), -#'pch = c(1, 1), col = c(2, 1), bty = "n", cex=.5) -#'title(paste(title, "\nbits = ", x$bit_size[length(x$bit_size)]),cex.main=.9) -#'invisible(tmp) -#'} -#' -#'@ -#' -/section{Pedigree Unrelated} - -Purpose: Determine set of maximum number of unrelated -available subjects from a pedigree -PI: Dan Schaid -Author(s): Dan Schaid, Shannon McDonnell -Dates: Created: 10/19/2007, Moved to kinship2: 6/2011 - -In many pedigrees there are multiple sets of subjects that could be of the -size of the maximal set of unrelated subjects in a pedigree. The set could -contain a married-in uncle and any of a set of siblings from his -sister-in-law's family. Therefore, the maximal sets include the uncle and -any of the sibship of his wife's sister. - -<>= - - ## Authors: Dan Schaid, Shannon McDonnell - ## Updated by Jason Sinnwell - -#'pedigree.unrelated <- function(ped, avail) { - - # Requires: kinship function - - # Given vectors id, father, and mother for a pedigree structure, - # and avail = vector of T/F or 1/0 for whether each subject - # (corresponding to id vector) is available (e.g., - # has DNA available), determine set of maximum number - # of unrelated available subjects from a pedigree. - - # This is a greedy algorithm that uses the kinship - # matrix, sequentially removing rows/cols that - # are non-zero for subjects that have the most - # number of zero kinship coefficients (greedy - # by choosing a row of kinship matrix that has - # the most number of zeros, and then remove any - # cols and their corresponding rows that are non-zero. - # To account for ties of the count of zeros for rows, - # a random choice is made. Hence, running this function - # multiple times can return different sets of unrelated - # subjects. -#' -#'@examples -#'id <- ped$id -avail <- as.integer(avail) -#' -#'kin <- kinship(ped) -#' -#'ord <- order(id) -#'id <- id[ord] -#'avail <- as.logical(avail[ord]) -#'kin <- kin[ord,][,ord] -#' -#'rord <- order(runif(nrow(kin))) -#' -#'id <- id[rord] -#'avail <- avail[rord] -#'kin <- kin[rord,][,rord] -#' -#'id.avail <- id[avail] -#'kin.avail <- kin[avail,,drop=FALSE][,avail,drop=FALSE] -#' -#'diag(kin.avail) <- 0 -#' -#'while(any(kin.avail > 0)) -#'{ -#' nr <- nrow(kin.avail) -#' indx <- 1:nrow(kin.avail) -#' zero.count <- apply(kin.avail==0, 1, sum) -#' -#' mx <- max(zero.count[zero.count < nr]) -#' mx.zero <- indx[zero.count == mx][1] -#' -#' exclude <- indx[kin.avail[, mx.zero] > 0] -#' -#' kin.avail <- kin.avail[- exclude, , drop=FALSE][, -exclude, drop=FALSE] -#' -#'} -#' -#'choice <- sort(dimnames(kin.avail)[[1]]) -#' -#'return(choice) -#'} -#' -#'@ diff --git a/devel/noweb/pedigree.txt b/devel/noweb/pedigree.txt deleted file mode 100644 index 046cdb6a..00000000 --- a/devel/noweb/pedigree.txt +++ /dev/null @@ -1,570 +0,0 @@ -\documentclass{article} -\usepackage{noweb} -\usepackage{amsmath} -\usepackage{fancyvrb} -\addtolength{\textwidth}{1in} -\addtolength{\oddsidemargin}{-.5in} -\setlength{\evensidemargin}{\oddsidemargin} - -\newcommand{\myfig}[1]{\resizebox{\textwidth}{!} - {\includegraphics{figure/#1.pdf}}} - \newcommand{\code}[1]{\texttt{#1}} - \title{The \emph{pedigree} functions in R} - \author{Terry Therneau and Elizabeth Atkinson} - - \begin{document} - \maketitle - \tableofcontents - \section{Introduction} - The pedigree routines came out of a simple need -- to quickly draw a - pedigree structure on the screen, within R, that was ``good enough'' to - help with debugging the actual routines of interest, which were those for - fitting mixed effecs Cox models to large family data. As such the routine - had compactness and automation as primary goals; complete annotation - (monozygous twins, multiple types of affected status) and most certainly - elegance were not on the list. Other software could do that much - better. - - It therefore came as a major surprise when these routines proved useful - to others. Through their constant feedback, application to more - complex pedigrees, and ongoing requests for one more feature, the routine has - become what it is today. This routine is still not - suitable for really large pedigrees, nor for heavily inbred ones such as in - animal studies, and will likely not evolve in that way. The authors' fondest%' - hope is that others will pick up the project. - - \section{Pedigree} - The pedigree function is the first step, creating an object of class - \emph{pedigree}. - It accepts the following input - \begin{description} - \item[id] A numeric or character vector of subject identifiers. - \item[dadid] The identifier of the father. - \item[momid] The identifier of the mother. - \item[sex] The gender of the individual. This can be a numeric variable - with codes of 1=male, 2=female, 3=unknown, 4=terminated, or NA=unknown. - A character or factor variable can also be supplied containing - the above; the string may be truncated and of arbitrary case. A sex - value of 0=male 1=female is also accepted. - \item[status] Optional, a numeric variable with 0 = censored and 1 = dead. - \item[relationship] Optional, a matrix or data frame with three columns. - The first two contain the identifier values of the subject pairs, and - the third the code for their relationship: - 1 = Monozygotic twin, 2= Dizygotic twin, 3= Twin of unknown zygosity, - 4 = Spouse. - \item[famid] Optional, a numeric or character vector of family identifiers. - \end{description} - - The [[famid]] variable is placed last as it was a later addition to the - code; thus prior invocations of the function that use positional - arguments won't be affected. %' - If present, this allows a set of pedigrees to be generated, one per - family. The resultant structure will be an object of class - [[pedigreeList]]. - - Note that a factor variable is not listed as one of the choices for the - subject identifier. This is on purpose. Factors - were designed to accomodate character strings whose values came from a limited - class -- things like race or gender, and are not appropriate for a subject - identifier. All of their special properties as compared to a character - variable turn out to be backwards for this case, in particular a memory - of the original level set when subscripting is done. - However, due to the awful decision early on in S to automatically turn every - character into a factor --- unless you stood at the door with a club to - head the package off --- most users have become ingrained to the idea of - using them for every character variable. - (I encourage you to set the global option stringsAsFactors=FALSE to turn - off autoconversion -- it will measurably improve your R experience). - Therefore, to avoid unnecessary hassle for our users - the code will accept a factor as input for the id variables, but - the final structure does not retain it. - Gender and relation do become factors. Status follows the pattern of the - survival routines and remains an integer. - - We will describe the code in a set of blocks. -#' -#' <>= -#' pedigree <- function(id, dadid, momid, sex, affected, status, relation, -#' famid, missid) { -#' <> -#' <> -#' <> -#' <> -#' if (missing(famid)) class(temp) <- 'pedigree' -#' else class(temp) <- 'pedigreeList' -#' temp -#' } -#' <> -#' @ - - \subsection{Data checks} - The code starts out with some checks on the input data. - Is it all the same length, are the codes legal, etc. - -#' <>= -#' n <- length(id) -#' if (length(momid) != n) stop("Mismatched lengths, id and momid") -#' if (length(dadid) != n) stop("Mismatched lengths, id and momid") -#' if (length(sex ) != n) stop("Mismatched lengths, id and sex") - - # Don't allow missing id values - -#' if (any(is.na(id))) stop("Missing value for the id variable") -#' if (!is.numeric(id)) { -#' id <- as.character(id) -#' if (length(grep('^ *$', id)) > 0) -#' stop("A blank or empty string is not allowed as the id variable") -#' } - - # Allow for character/numeric/factor in the sex variable -#' if(is.factor(sex)) -#' sex <- as.character(sex) -#' codes <- c("male","female", "unknown", "terminated") -#' if(is.character(sex)) sex<- charmatch(casefold(sex, upper = FALSE), codes, -#' nomatch = 3) - - # assume either 0/1/2/4 = female/male/unknown/term, or 1/2/3/4 - # if only 1/2 assume no unknowns - -#' if(min(sex) == 0) -#' sex <- sex + 1 -#' sex <- ifelse(sex < 1 | sex > 4, 3, sex) -#' if(all(sex > 2)) -#' stop("Invalid values for 'sex'") -#' else if(mean(sex == 3) > 0.25) -#' warning("More than 25% of the gender values are 'unknown'") -#' sex <- factor(sex, 1:4, labels = codes) -#' @ - - Create the variables descibing a missing father and/or mother, - which is what we expect both for people at the top of the - pedigree and for marry-ins, \emph{before} adding in the family - id information. - It's easier to do it first. - If there are multiple families in the pedigree, make a working set of - identifiers that are of the form `family/subject'. - Family identifiers can be factor, character, or numeric. - -#' <>= -#' if (missing(missid)) { -#' if (is.numeric(id)) missid <- 0 -#' else missid <- "" -#' } -#' -#' nofather <- (is.na(dadid) | dadid==missid) -#' nomother <- (is.na(momid) | momid==missid) -#' -#' if (!missing(famid)) { -#' if (any(is.na(famid))) stop("The family id cannot contain missing values") -#' if (is.factor(famid) || is.character(famid)) { -#' if (length(grep('^ *$', famid)) > 0) -#' stop("The family id cannot be a blank or empty string") -#' } -#' - #Make a temporary new id from the family and subject pair -#' oldid <-id -#' id <- paste(as.character(famid), as.character(id), sep='/') -#' dadid <- paste(as.character(famid), as.character(dadid), sep='/') -#' momid <- paste(as.character(famid), as.character(momid), sep='/') -#' } -#' -#' if (any(duplicated(id))) { -#' duplist <- id[duplicated(id)] -#' msg.n <- min(length(duplist), 6) -#' stop(paste("Duplicate subject id:", duplist[1:msg.n])) -#' } -#' @ -#' - Errors3-parents: Next check that any mother or father identifiers are found in the identifier - list, and are of the right sex. - Subjects who don't have a mother or father are founders. For those people %' - both of the parents should be missing. -#' <>= -#' findex <- match(dadid, id, nomatch = 0) -#' if(any(sex[findex] != "male")) { -#' who <- unique((id[findex])[sex[findex] != "male"]) -#' msg.n <- 1:min(5, length(who)) #Don't list a zillion -#' stop(paste("Id not male, but is a father:", -#' paste(who[msg.n], collapse= " "))) -#' } -#' -#' if (any(findex==0 & !nofather)) { -#' who <- dadid[which(findex==0 & !nofather)] -#' msg.n <- 1:min(5, length(who)) #Don't list a zillion -#' stop(paste("Value of 'dadid' not found in the id list", -#' paste(who[msg.n], collapse= " "))) -#' } -#' -#' mindex <- match(momid, id, nomatch = 0) -#' if(any(sex[mindex] != "female")) { -#' who <- unique((id[mindex])[sex[mindex] != "female"]) -#' msg.n <- 1:min(5, length(who)) -#' stop(paste("Id not female, but is a mother:", -#' paste(who[msg.n], collapse = " "))) -#' } -#' -#' if (any(mindex==0 & !nomother)) { -#' who <- momid[which(mindex==0 & !nomother)] -#' msg.n <- 1:min(5, length(who)) #Don't list a zillion -#' stop(paste("Value of 'momid' not found in the id list", -#' paste(who[msg.n], collapse= " "))) -#' } -#' -#' if (any(mindex==0 & findex!=0) || any(mindex!=0 & findex==0)) { -#' who <- id[which((mindex==0 & findex!=0) |(mindex!=0 & findex==0))] -#' msg.n <- 1:min(5, length(who)) #Don't list a zillion -#' stop(paste("Subjects must have both a father and mother, or have neither", -#' paste(who[msg.n], collapse= " "))) -#' } -#' -#' if (!missing(famid)) { -#' if (any(famid[mindex] != famid[mindex>0])) { -#' who <- (id[mindex>0])[famid[mindex] != famid[mindex>0]] -#' msg.n <- 1:min(5, length(who)) -#' stop(paste("Mother's family != subject's family", -#' paste(who[msg.n], collapse=" "))) -#' } -#' if (any(famid[findex] != famid[findex>0])) { -#' who <- (id[findex>0])[famid[findex] != famid[findex>0]] -#' msg.n <- 1:min(5, length(who)) -#' stop(paste("Father's family != subject's family", -#' paste(who[msg.n], collapse=" "))) -#' } -#' } -#' @ -#' - \subsection{Creation} - Now, paste the parts together into a basic pedigree. - The fields for father and mother are not the identifiers of - the parents, but their row number in the structure. - -#' <>= -#' if (missing(famid)) -#' temp <- list(id = id, findex=findex, mindex=mindex, sex=sex) -#' else temp<- list(famid=famid, id=oldid, findex=findex, mindex=mindex, -#' sex=sex) -#' @ -#' - -#' <>= -#' if (!missing(affected)) { -#' if (is.matrix(affected)){ -#' if (nrow(affected) != n) stop("Wrong number of rows in affected") -#' if (is.logical(affected)) affected <- 1* affected -#' } -#' else { -#' if (length(affected) != n) -#' stop("Wrong length for affected") -#' -#' if (is.logical(affected)) affected <- as.numeric(affected) -#' if (is.factor(affected)) affected <- as.numeric(affected) -1 -#' } -#' if(max(affected, na.rm=TRUE) > min(affected, na.rm=TRUE)) -#' affected <- affected - min(affected, na.rm=TRUE) -#' if (!all(affected==0 | affected==1 | is.na(affected))) -#' stop("Invalid code for affected status") -#' temp$affected <- affected -#' } -#' -#' if(!missing(status)) { -#' if(length(status) != n) -#' stop("Wrong length for affected") -#' if (is.logical(status)) status <- as.integer(status) -#' if(any(status != 0 & status != 1)) -#' stop("Invalid status code") -#' temp$status <- status -#' } -#' -#' if (!missing(relation)) { -#' if (!missing(famid)) { -#' if (is.matrix(relation)) { -#' if (ncol(relation) != 4) -#' stop("Relation matrix must have 3 columns + famid") -#' id1 <- relation[,1] -#' id2 <- relation[,2] -#' code <- relation[,3] -#' famid <- relation[,4] -#' } -#' else if (is.data.frame(relation)) { -#' id1 <- relation$id1 -#' id2 <- relation$id2 -#' code <- relation$code -#' famid <- relation$famid -#' if (is.null(id1) || is.null(id2) || is.null(code) ||is.null(famid)) -#' stop("Relation data must have id1, id2, family id and code") -#' } -#' else stop("Relation argument must be a matrix or a dataframe") -#' } -#' else { -#' if (is.matrix(relation)) { -#' if (ncol(relation) != 3) -#' stop("Relation matrix must have 3 columns") -#' id1 <- relation[,1] -#' id2 <- relation[,2] -#' code <- relation[,3] -#' } -#' else if (is.data.frame(relation)) { -#' id1 <- relation$id1 -#' id2 <- relation$id2 -#' code <- relation$code -#' if (is.null(id1) || is.null(id2) || is.null(code)) -#' stop("Relation data frame must have id1, id2, and code") -#' } -#' else stop("Relation argument must be a matrix or a list") -#' } -#' -#' if (!is.numeric(code)) -#' code <- match(code, c("MZ twin", "DZ twin", "UZ twin", "spouse")) -#' else code <- factor(code, levels=1:4, -#' labels=c("MZ twin", "DZ twin", "UZ twin", "spouse")) -#' if (any(is.na(code))) -#' stop("Invalid relationship code") -#' - # Is everyone in this relationship in the pedigree? -#' if (!missing(famid)) { -#' temp1 <- match(paste(as.character(famid), as.character(id1), sep='/'), -#' id, nomatch=0) -#' temp2 <- match(paste(as.character(famid), as.character(id2), sep='/'), -#' id, nomatch=0) -#' } -#' else { -#' temp1 <- match(id1, id, nomatch=0) -#' temp2 <- match(id2, id, nomatch=0) -#' } -#' -#' if (any(temp1==0 | temp2==0)) -#' stop("Subjects in relationships that are not in the pedigree") -#' if (any(temp1==temp2)) { -#' who <- temp1[temp1==temp2] -#' stop(paste("Subject", id[who], "is their own spouse or twin")) -#' } -#' - # Check, are the twins really twins? - -#' ncode <- as.numeric(code) -#' if (any(ncode<3)) { -#' twins <- (ncode<3) -#' if (any(momid[temp1[twins]] != momid[temp2[twins]])) -#' stop("Twins found with different mothers") -#' if (any(dadid[temp1[twins]] != dadid[temp2[twins]])) -#' stop("Twins found with different fathers") -#' } - # Check, are the monozygote twins the same gender? -#' if (any(code=="MZ twin")) { -#' mztwins <- (code=="MZ twin") -#' if (any(sex[temp1[mztwins]] != sex[temp2[mztwins]])) -#' stop("MZ Twins with different genders") -#' } -#' - ##Use id index as indx1 and indx2 -#' if (!missing(famid)) { -#' temp$relation <- data.frame(famid=famid, indx1=temp1, indx2=temp2, code=code) -#' -#' } -#' else temp$relation <- data.frame(indx1=temp1, indx2=temp2, code=code) -#' } -#' @ -#' - The final structure will be in the order of the original data, and all the - components except [[relation]] will have the - same number of rows as the original data. - - - \subsection{Subscripting} - - Subscripting of a pedigree list extracts one or more families from the - list. We treat character subscripts in the same way that dimnames on - a matrix are used. Factors are a problem though: assume that we - have a vector x with names ``joe'', ``charlie'', ``fred'', then - [[x['joe']]] is the first element of the vector, but - [[temp <- factor('joe', 'charlie', 'fred'); z <- temp[1]; x[z] ]] will - be the second element! - R is implicitly using as.numeric on factors when they are a subscript; - this caught an early version of the code when an element of a data - frame was used to index the pedigree: characters are turned into factors - when bundled into a data frame. - - Note: - \begin{enumerate} - \item What should we do if the family id is a numeric: when the user - says [4] do they mean the fourth family in the list or family '4'? - The user is responsible to say ['4'] in this case. - \item In a normal vector invalid subscripts give an NA, e.g. (1:3)[6], but - since there is no such object as an ``NA pedigree'', we emit an error - for this. - \item The [[drop]] argument has no meaning for pedigrees, but must to be - a defined argument of any subscript method; we simply ignore it. - \item Updating the father/mother is a minor nuisance; - since they must are integer indices to rows they must be - recreated after selection. Ditto for the relationship matrix. - \end{enumerate} - -#' <>= -#' "[.pedigreeList" <- function(x, ..., drop=F) { -#' if (length(list(...)) != 1) stop ("Only 1 subscript allowed") -#' ufam <- unique(x$famid) -#' if (is.factor(..1) || is.character(..1)) indx <- ufam[match(..1, ufam)] -#' else indx <- ufam[..1] -#' -#' if (any(is.na(indx))) -#' stop(paste("Familiy", (..1[is.na(indx)])[1], "not found")) -#' -#' keep <- which(x$famid %in% indx) #which rows to keep -#' for (i in c('id', 'famid', 'sex')) -#' x[[i]] <- (x[[i]])[keep] -#' -#' kept.rows <- (1:length(x$findex))[keep] -#' x$findex <- match(x$findex[keep], kept.rows, nomatch=0) -#' x$mindex <- match(x$mindex[keep], kept.rows, nomatch=0) -#' - #optional components - -#' if (!is.null(x$status)) x$status <- x$status[keep] -#' if (!is.null(x$affected)) { -#' if (is.matrix(x$affected)) x$affected <- x$affected[keep,,drop=FALSE] -#' else x$affected <- x$affected[keep] -#' } -#' if (!is.null(x$relation)) { -#' keep <- !is.na(match(x$relation$famid, indx)) -#' if (any(keep)) { -#' x$relation <- x$relation[keep,,drop=FALSE] - ##Update twin id indexes - -#' x$relation$indx1 <- match(x$relation$indx1, kept.rows, nomatch=0) -#' x$relation$indx2 <- match(x$relation$indx2, kept.rows, nomatch=0) - ##If only one family chosen, remove famid - -#' if (length(indx)==1) {x$relation$famid <- NULL} -#' } -#' else x$relation <- NULL # No relations matrix elements for this family -#' } -#' -#' if (length(indx)==1) class(x) <- 'pedigree' #only one family chosen -#' else class(x) <- 'pedigreeList' -#' x -#' } -#' @ -#' - For a pedigree, the subscript operator extracts a subset of individuals. - We disallow selections that retain only 1 of a subject's parents, since %' - they cause plotting trouble later. - Relations are worth keeping only if both parties in the relation were - selected. - -#' <>= -#' "[.pedigree" <- function(x, ..., drop=F) { -#' if (length(list(...)) != 1) stop ("Only 1 subscript allowed") -#' if (is.character(..1) || is.factor(..1)) i <- match(..1, x$id) -#' else i <- (1:length(x$id))[..1] -#' -#' if (any(is.na(i))) paste("Subject", ..1[which(is.na(i))][1], "not found") -#' -#' z <- list(id=x$id[i],findex=match(x$findex[i], i, nomatch=0), -#' mindex=match(x$mindex[i], i, nomatch=0), -#' sex=x$sex[i]) -#' if (!is.null(x$affected)) { -#' if (is.matrix(x$affected)) z$affected <- x$affected[i,, drop=F] -#' else z$affected <- x$affected[i] -#' } -#' if (!is.null(x$famid)) z$famid <- x$famid[i] -#' -#' if (!is.null(x$relation)) { -#' indx1 <- match(x$relation$indx1, i, nomatch=0) -#' indx2 <- match(x$relation$indx2, i, nomatch=0) -#' keep <- (indx1 >0 & indx2 >0) #keep only if both id's are kept -#' if (any(keep)) { -#' z$relation <- x$relation[keep,,drop=FALSE] -#' z$relation$indx1 <- indx1[keep] -#' z$relation$indx2 <- indx2[keep] -#' } -#' } -#' -#' if (!is.null(x$hints)) { -#' temp <- list(order= x$hints$order[i]) -#' if (!is.null(x$hints$spouse)) { -#' indx1 <- match(x$hints$spouse[,1], i, nomatch=0) -#' indx2 <- match(x$hints$spouse[,2], i, nomatch=0) -#' keep <- (indx1 >0 & indx2 >0) #keep only if both id's are kept -#' if (any(keep)) -#' temp$spouse <- cbind(indx1[keep], indx2[keep], -#' x$hints$spouse[keep,3]) -#' } -#' z$hints <- temp -#' } -#' -#' if (any(z$findex==0 & z$mindex>0) | any(z$findex>0 & z$mindex==0)) -#' stop("A subpedigree cannot choose only one parent of a subject") -#' class(z) <- 'pedigree' -#' z -#' } -#' @ -#' - \subsection{As Data.Frame} - - Convert the pedigree to a data.frame so it is easy to view when removing or - trimming individuals with their various indicators. - The relation and hints elements of the pedigree object are not easy to - put in a data.frame with one entry per subject. These items are one entry - per subject, so are put in the returned data.frame: id, findex, mindex, - sex, affected, status. The findex and mindex are converted to the actual id - of the parents rather than the index. - - Can be used with as.data.frame(ped) or data.frame(ped). Specify in Namespace - file that it is an S3 method. - - -#' <>= -#' -#' as.data.frame.pedigree <- function(x, ...) { -#' -#' dadid <- momid <- rep(0, length(x$id)) -#' dadid[x$findex>0] <- x$id[x$findex] -#' momid[x$mindex>0] <- x$id[x$mindex] -#' df <- data.frame(id=x$id, dadid=dadid, momid=momid, sex=x$sex) -#' -#' if(!is.null(x$affected)) -#' df$affected = x$affected -#' -#' if(!is.null(x$status)) -#' df$status = x$status -#' return(df) -#' } -#' @ -#' - This function is useful for checking the pedigree object with the - $findex$ and $mindex$ vector instead of them replaced with the ids of - the parents. This is not currently included in the package. -#' <>= -#' -#' ped2df <- function(ped) { -#' df <- data.frame(id=ped$id, findex=ped$findex, mindex=ped$mindex, sex=ped$sex) -#' if(!is.null(ped$affected)) -#' df$affected = ped$affected -#' -#' if(!is.null(ped$status)) -#' df$status = ped$status -#' -#' return(df) -#' -#' } -#' -#' @ -#' - \subsection{Printing} - It usually doesn't make sense to print a pedigree, since the id is just %' - a repeat of the input data and the family connections are pointers. - Thus we create a simple summary. - -#' <>= -#' print.pedigree <- function(x, ...) { -#' cat("Pedigree object with", length(x$id), "subjects") -#' if (!is.null(x$famid)) cat(", family id=", x$famid[1], "\n") -#' else cat("\n") -#' cat("Bit size=", bit_size(x)$bit_size, "\n") -#' } -#' -#' print.pedigreeList <- function(x, ...) { -#' cat("Pedigree list with", length(x$id), "total subjects in", -#' length(unique(x$famid)), "families\n") -#' } -#' @ diff --git a/devel/noweb/plot.txt b/devel/noweb/plot.txt deleted file mode 100644 index f4b6a5c3..00000000 --- a/devel/noweb/plot.txt +++ /dev/null @@ -1,751 +0,0 @@ -\section{Plots} -The plotting function for pedigrees has 5 tasks -\begin{enumerate} - \item Gather information and check the data. - An important step is the call to align.pedigree. - \item Set up the plot region and size the symbols. - The program wants to plot circles and squares, - so needs to understand the geometry of the paper, pedigree size, and text - size to get the right shape and size symbols. - \item Set up the plot and add the symbols for each subject - \item Add connecting lines between spouses, and children with parents - \item Create an invisible return value containing the locations. -\end{enumerate} -Another task, not yet completely understood, is how we might break a plot -across multiple pages. - -<>= -plot.pedigree <- function(x, id = x$id, status = x$status, - affected = x$affected, - cex = 1, col = 1, - symbolsize = 1, branch = 0.6, - packed = TRUE, align = c(1.5,2), width = 8, - density=c(-1, 35,65,20), mar=c(4.1, 1, 4.1, 1), - angle=c(90,65,40,0), keep.par=FALSE, - subregion, pconnect=.5, ...) -{ - Call <- match.call() - n <- length(x$id) - <> - <> - <> - <> - <> - } -@ - -\subsection{Setup} -The dull part is first: check all of the input data for -correctness. -The [[sex]] variable is taken from the pedigree so we need not check -that. -The identifier for each subject is by default the [[id]] variable from -the pedigree, but users often want to add some extra text. -The status variable can be used to put a line through the symbol -of those who are deceased, it is an optional part of the pedigree. -<>= -if(is.null(status)) - status <- rep(0, n) -else { - if(!all(status == 0 | status == 1)) - stop("Invalid status code") - if(length(status) != n) - stop("Wrong length for status") -} -if(!missing(id)) { - if(length(id) != n) - stop("Wrong length for id") -} -@ -The ``affected status'' is a 0/1 matrix of any marker data that the -user might want to add. It may be attached to the pedigree or added -here. It can be a vector of length [[n]] or a matrix with [[n]] rows. -If it is not present, the default is to print open symbols without -shading or color, which corresponds to a code of 0, while a 1 means to -shade the symbol. - -If the argment is a matrix, then the shading and/or density value for -ith column is taken from the ith element of the angle/density arguments. - -(Update by JPS 5/2011) Update to allow missing values (NA) in the ``affected'' -indicators. Missingness of affection status will have a ``?'' in -the midpoint of the portion of the plot symbol rather than blank or shaded. -The ``?'' is in line with standards discussed in -Bennet et a. J of Gent Couns., 2008. - -For purposes within the plot method, NA values in ``affected'' are coded -to -1. - -<>= -if(is.null(affected)){ - affected <- matrix(0,nrow=n) -} -else { - if (is.matrix(affected)){ - if (nrow(affected) != n) stop("Wrong number of rows in affected") - if (is.logical(affected)) affected <- 1* affected - if (ncol(affected) > length(angle) || ncol(affected) > length(density)) - stop("More columns in the affected matrix than angle/density values") - } - else { - if (length(affected) != n) - stop("Wrong length for affected") - - if (is.logical(affected)) affected <- as.numeric(affected) - if (is.factor(affected)) affected <- as.numeric(affected) -1 - } - if(max(affected, na.rm=TRUE) > min(affected, na.rm=TRUE)) { - affected <- matrix(affected - min(affected, na.rm=TRUE),nrow=n) - ## affected[is.na(affected)] <- -1 - } else { - affected <- matrix(affected,nrow=n) - } - ## JPS 4/28/17 bug fix b/c some cases NAs are not set to -1 - affected[is.na(affected)] <- -1 - if (!all(affected==0 | affected==1 | affected == -1)) - stop("Invalid code for affected status") -} - -if (length(col) ==1) col <- rep(col, n) -else if (length(col) != n) stop("Col argument must be of length 1 or n") -@ - -\subsection{Sizing} -Now we need to set the sizes. -From align.pedigree we will get the maximum width and depth. -There is one plotted row for each row of the returned matrices. -The number of columns of the matrices is the max width of the pedigree, -so there are unused positions in shorter rows, these can be identifed -by having an nid value of 0. -Horizontal locations for each point go from 0 to xmax, subjects are at -least 1 unit apart; a large number will be exactly one unit part. -These locations will be at the top center of each plotted symbol. -<>= -<> -plist <- align.pedigree(x, packed = packed, width = width, align = align) -if (!missing(subregion)) plist <- subregion2(plist, subregion) -xrange <- range(plist$pos[plist$nid >0]) -maxlev <- nrow(plist$pos) -@ - -We would like to to make the boxes about 2.5 characters wide, which matches -most labels, but no more than 0.9 units wide or .5 units high. -We also want to vertical room for the labels. Which should have at least -1/2 of stemp2 space above and stemp2 space below. -The stemp3 variable is the height of labels: users may use multi-line ones. -Our constraints then are -\begin{itemize} - \item (box height + label height)*maxlev $\le$ height: the boxes and labels have - to fit vertically - \item (box height) * (maxlev + (maxlev-1)/2) $\le$ height: at least 1/2 a box of - space between each row of boxes - \item (box width) $\le$ stemp1 in inches - \item (box width) $\le$ 0.8 unit in user coordinates, otherwise they appear - to touch - \item User coordinates go from min(xrange)- 1/2 box width to - max(xrange) + 1/2 box width. - \item the box is square (in inches) -\end{itemize} - -The first 3 of these are easy. The fourth comes into play only for very packed -pedigrees. Assume that the box were the maximum size of .8 units, i.e., minimal -spacing between them. Then xmin -.45 to xmax + .45 covers the plot region, -the scaling between user coordinates and inches is (.8 + xmax-xmin) user = -figure region inches, and the box is .8*(figure width)/(.8 + xmax-xmin). -The transformation from user units to inches horizontally depends on the box -size, since I need to allow for 1/2 a box on the left and right. -Vertically the range from 1 to nrow spans the tops of the symbols, which -will be the figure region height less (the height of the -text for the last row + 1 box); remember that the coordinates point to the -top center of the box. -We want row 1 to plot at the top, which is done by appropriate setting -of the usr parameter. -<>= -frame() -oldpar <- par(mar=mar, xpd=TRUE) -psize <- par('pin') # plot region in inches -stemp1 <- strwidth("ABC", units='inches', cex=cex)* 2.5/3 -stemp2 <- strheight('1g', units='inches', cex=cex) -stemp3 <- max(strheight(id, units='inches', cex=cex)) - -ht1 <- psize[2]/maxlev - (stemp3 + 1.5*stemp2) -if (ht1 <=0) stop("Labels leave no room for the graph, reduce cex") -ht2 <- psize[2]/(maxlev + (maxlev-1)/2) -wd2 <- .8*psize[1]/(.8 + diff(xrange)) - -boxsize <- symbolsize* min(ht1, ht2, stemp1, wd2) # box size in inches -hscale <- (psize[1]- boxsize)/diff(xrange) #horizontal scale from user-> inch -vscale <- (psize[2]-(stemp3 + stemp2/2 + boxsize))/ max(1, maxlev-1) -boxw <- boxsize/hscale # box width in user units -boxh <- boxsize/vscale # box height in user units -labh <- stemp2/vscale # height of a text string -legh <- min(1/4, boxh *1.5) # how tall are the 'legs' up from a child -par(usr=c(xrange[1]- boxw/2, xrange[2]+ boxw/2, - maxlev+ boxh+ stemp3 + stemp2/2 , 1)) -@ - -\subsection{Drawing the tree} -Now we draw and label the boxes. Definition of the drawbox function is -deferred until later. -<>= -<> - -sex <- as.numeric(x$sex) -for (i in 1:maxlev) { - for (j in seq_len(plist$n[i])) { - k <- plist$nid[i,j] - drawbox(plist$pos[i,j], i, sex[k], affected[k,], - status[k], col[k], polylist, density, angle, - boxw, boxh) - text(plist$pos[i,j], i + boxh + labh*.7, id[k], cex=cex, - adj=c(.5,1), ...) - } -} -@ - -Now draw in the connections one by one. First those between spouses. -<>= -maxcol <- ncol(plist$nid) #all have the same size -for(i in 1:maxlev) { - tempy <- i + boxh/2 - if(any(plist$spouse[i, ]>0)) { - temp <- (1:maxcol)[plist$spouse[i, ]>0] - segments(plist$pos[i, temp] + boxw/2, rep(tempy, length(temp)), - plist$pos[i, temp + 1] - boxw/2, rep(tempy, length(temp))) - - temp <- (1:maxcol)[plist$spouse[i, ] ==2] - if (length(temp)) { #double line for double marriage - tempy <- tempy + boxh/10 - segments(plist$pos[i, temp] + boxw/2, rep(tempy, length(temp)), - plist$pos[i, temp + 1] - boxw/2, rep(tempy, length(temp))) - } - } -} -@ -Now connect the children to the parents. First there are lines up from each -child, which would be trivial except for twins, triplets, etc. Then we -draw the horizontal bar across siblings and finally the connector from -the parent. For twins, the ``vertical'' lines are angled towards a -common point, the variable is called [[target]] below. -The horizontal part is easier if we do things family by -family. The [[plist$twins]] variable is 1/2/3 for a twin on my right, -0 otherwise. - -<>= -for(i in 2:maxlev) { - zed <- unique(plist$fam[i, ]) - zed <- zed[zed > 0] #list of family ids - - for(fam in zed) { - xx <- plist$pos[i - 1, fam + 0:1] - parentx <- mean(xx) #midpoint of parents - - - # Draw the uplines - who <- (plist$fam[i,] == fam) #The kids of interest - if (is.null(plist$twins)) target <- plist$pos[i,who] - else { - twin.to.left <-(c(0, plist$twins[i,who])[1:sum(who)]) - temp <- cumsum(twin.to.left ==0) #increment if no twin to the left - # 5 sibs, middle 3 are triplets gives 1,2,2,2,3 - # twin, twin, singleton gives 1,1,2,2,3 - tcount <- table(temp) - target <- rep(tapply(plist$pos[i,who], temp, mean), tcount) - } - yy <- rep(i, sum(who)) - segments(plist$pos[i,who], yy, target, yy-legh) - - ## draw midpoint MZ twin line - if (any(plist$twins[i,who] ==1)) { - who2 <- which(plist$twins[i,who] ==1) - temp1 <- (plist$pos[i, who][who2] + target[who2])/2 - temp2 <- (plist$pos[i, who][who2+1] + target[who2])/2 - yy <- rep(i, length(who2)) - legh/2 - segments(temp1, yy, temp2, yy) - } - - # Add a question mark for those of unknown zygosity - if (any(plist$twins[i,who] ==3)) { - who2 <- which(plist$twins[i,who] ==3) - temp1 <- (plist$pos[i, who][who2] + target[who2])/2 - temp2 <- (plist$pos[i, who][who2+1] + target[who2])/2 - yy <- rep(i, length(who2)) - legh/2 - text((temp1+temp2)/2, yy, '?') - } - - # Add the horizontal line - segments(min(target), i-legh, max(target), i-legh) - - # Draw line to parents. The original rule corresponded to - # pconnect a large number, forcing the bottom of each parent-child - # line to be at the center of the bar uniting the children. - if (diff(range(target)) < 2*pconnect) x1 <- mean(range(target)) - else x1 <- pmax(min(target)+ pconnect, pmin(max(target)-pconnect, - parentx)) - y1 <- i-legh - if(branch == 0) - segments(x1, y1, parentx, (i-1) + boxh/2) - else { - y2 <- (i-1) + boxh/2 - x2 <- parentx - ydelta <- ((y2 - y1) * branch)/2 - segments(c(x1, x1, x2), c(y1, y1 + ydelta, y2 - ydelta), - c(x1, x2, x2), c(y1 + ydelta, y2 - ydelta, y2)) - } - } - } -@ - -The last set of lines are dotted arcs that connect mulitiple instances of -a subject on the same line. These instances may or may not be on the -same line. -The arrcconect function draws a quadratic arc between locations $(x_1, y_1)$ -and $(x_2, y_2$) whose height is 1/2 unit above a straight line connection. -<>= -arcconnect <- function(x, y) { - xx <- seq(x[1], x[2], length = 15) - yy <- seq(y[1], y[2], length = 15) + (seq(-7, 7))^2/98 - .5 - lines(xx, yy, lty = 2) - } - -uid <- unique(plist$nid) -## JPS 4/27/17: unique above only applies to rows -## unique added to for loop iterator -for (id in unique(uid[uid>0])) { - indx <- which(plist$nid == id) - if (length(indx) >1) { #subject is a multiple - tx <- plist$pos[indx] - ty <- ((row(plist$pos))[indx])[order(tx)] - tx <- sort(tx) - for (j in 1:(length(indx) -1)) - arcconnect(tx[j + 0:1], ty[j+ 0:1]) - } - } -@ - -\subsection{Final output} -Remind the user of subjects who did not get -plotted; these are ususally subjects who are married in but without -children. Unless the pedigree contains spousal information the -routine does not know who is the spouse. -Then restore the plot parameters. This would only not be done if someone -wants to further annotate the plot. -Last, we give a list of the plot positions for each subject. Someone -who is plotted twice will have their first position listed. -<>= -ckall <- x$id[is.na(match(x$id,x$id[plist$nid]))] -if(length(ckall>0)) cat('Did not plot the following people:',ckall,'\n') - -if(!keep.par) par(oldpar) - -tmp <- match(1:length(x$id), plist$nid) -invisible(list(plist=plist, x=plist$pos[tmp], y= row(plist$pos)[tmp], - boxw=boxw, boxh=boxh, call=Call)) -@ -\subsection{Symbols} -There are four sumbols corresponding to the four sex codes: square = male, -circle = female, diamond= unknown, and triangle = terminated. -They are shaded according to the value(s) of affected status for each -subject, where 0=unfilled and 1=filled, and filling uses the standard -arguments of the [[polygon]] function. -The nuisance is when the affected status is a matrix, in which case the -symbol will be divided up into sections, clockwise starting at the -lower left. -I asked Beth about this (original author) and there was no particular -reason to start at 6 o'clock, but it's now established as history. - -The first part of the code is to create the collection of polygons that -will make up the symbol. These are then used again and again. -The collection is kept as a list with the four elements square, circle, -diamond and triangle. -Each of these is in turn a list with ncol(affected) element, and each -of those in turn a list of x and y coordinates. -There are 3 cases: the affected matrix has -only one column, partitioning a circle for multiple columns, and -partitioning the other cases for multiple columns. - -<>= -<> -<> -if (ncol(affected)==1) { - polylist <- list( - square = list(list(x=c(-1, -1, 1,1)/2, y=c(0, 1, 1, 0))), - circle = list(list(x=.5* cos(seq(0, 2*pi, length=50)), - y=.5* sin(seq(0, 2*pi, length=50)) + .5)), - diamond = list(list(x=c(0, -.5, 0, .5), y=c(0, .5, 1, .5))), - triangle= list(list(x=c(0, -.56, .56), y=c(0, 1, 1)))) - } -else { - nc <- ncol(affected) - square <- polyfun(nc, list(x=c(-.5, -.5, .5, .5), y=c(-.5, .5, .5, -.5), - theta= -c(3,5,7,9)* pi/4)) - circle <- circfun(nc) - diamond <- polyfun(nc, list(x=c(0, -.5, 0, .5), y=c(-.5, 0, .5,0), - theta= -(1:4) *pi/2)) - triangle <- polyfun(nc, list(x=c(-.56, .0, .56), y=c(-.5, .5, -.5), - theta=c(-2, -4, -6) *pi/3)) - polylist <- list(square=square, circle=circle, diamond=diamond, - triangle=triangle) - } -@ - -The circle function is quite simple. The number of segments is arbitrary, -50 seems to be enough to make the eye happy. We draw the ray from 0 to -the edge, then a portion of the arc. The polygon function will connect -back to the center. -<>= -circfun <- function(nslice, n=50) { - nseg <- ceiling(n/nslice) #segments of arc per slice - - theta <- -pi/2 - seq(0, 2*pi, length=nslice +1) - out <- vector('list', nslice) - for (i in 1:nslice) { - theta2 <- seq(theta[i], theta[i+1], length=nseg) - out[[i]]<- list(x=c(0, cos(theta2)/2), - y=c(0, sin(theta2)/2) + .5) - } - out - } -@ - -Now for the interesting one --- dividing a polygon into ``pie slices''. -In computing this we can't use the usual $y= a + bx$ formula for a line, -because it doesn't work for vertical ones (like the sides of the square). -Instead we use the alternate formulation in terms of a dummy variable -$z$. -\begin{eqnarray*} - x &=& a + bz \\ - y &=& c + dz \\ -\end{eqnarray*} -Furthermore, we choose the constants $a$, $b$, $c$, and $d$ so that -the side of our polygon correspond to $0 \le z \le 1$. -The intersection of a particular ray at angle theta with a -particular side will satisfy -\begin{eqnarray} - theta &=& y/x = \frac{a + bz}{c+dz} \nonumber \\ - z &=& \frac{a\theta -c}{b - d\theta} \label{eq:z} \\ -\end{eqnarray} - -Equation \ref{eq:z} will lead to a division by zero if the ray from the -origin does not intersect a side, e.g., a vertical divider will be parallel -to the sides of a square symbol. The only solutions we want have -$0 \le z \le 1$ and are in the `forward' part of the ray. This latter %'` -is true if the inner product $x \cos(\theta) + y \sin(\theta) >0$. -Exactly one of the polygon sides will satisfy both conditions. - -<>= -polyfun <- function(nslice, object) { - # make the indirect segments view - zmat <- matrix(0,ncol=4, nrow=length(object$x)) - zmat[,1] <- object$x - zmat[,2] <- c(object$x[-1], object$x[1]) - object$x - zmat[,3] <- object$y - zmat[,4] <- c(object$y[-1], object$y[1]) - object$y - - # Find the cutpoint for each angle - # Yes we could vectorize the loop, but nslice is never bigger than - # about 10 (and usually <5), so why be obscure? - ns1 <- nslice+1 - theta <- -pi/2 - seq(0, 2*pi, length=ns1) - x <- y <- double(ns1) - for (i in 1:ns1) { - z <- (tan(theta[i])*zmat[,1] - zmat[,3])/ - (zmat[,4] - tan(theta[i])*zmat[,2]) - tx <- zmat[,1] + z*zmat[,2] - ty <- zmat[,3] + z*zmat[,4] - inner <- tx*cos(theta[i]) + ty*sin(theta[i]) - indx <- which(is.finite(z) & z>=0 & z<=1 & inner >0) - x[i] <- tx[indx] - y[i] <- ty[indx] - } -@ - -Now I have the $x,y$ coordinates where each radial slice (the cuts you -would make when slicing a pie) intersects the polygon. -Add the original vertices of the polygon to the list, sort by angle, and -create the output. The radial lines are labeled 1,2, \ldots, nslice +1 -(the original cut from the center to 6 o'clock is repeated at the end), %' -and the inserted vertices with a zero. -<>= - nvertex <- length(object$x) - temp <- data.frame(indx = c(1:ns1, rep(0, nvertex)), - theta= c(theta, object$theta), - x= c(x, object$x), - y= c(y, object$y)) - temp <- temp[order(-temp$theta),] - out <- vector('list', nslice) - for (i in 1:nslice) { - rows <- which(temp$indx==i):which(temp$indx==(i+1)) - out[[i]] <- list(x=c(0, temp$x[rows]), y= c(0, temp$y[rows]) +.5) - } - out - } -@ - -Finally we get to the drawbox function itself, which is fairly simple. -Updates by JPS in 5/2011 to allow missing, and to fix up shadings and borders. -For affected=0, don't fill. -For affected=1, fill with density-lines and angles. -For affected=-1 (missing), fill with ``?'' in the midpoint of the polygon, -with a size adjusted by how many columns in affected. -For all shapes drawn, make the border the color for the person. - -<>= - - drawbox<- function(x, y, sex, affected, status, col, polylist, - density, angle, boxw, boxh) { - for (i in 1:length(affected)) { - if (affected[i]==0) { - polygon(x + (polylist[[sex]])[[i]]$x *boxw, - y + (polylist[[sex]])[[i]]$y *boxh, - col=NA, border=col) - } - - if(affected[i]==1) { - ## else { - polygon(x + (polylist[[sex]])[[i]]$x * boxw, - y + (polylist[[sex]])[[i]]$y * boxh, - col=col, border=col, density=density[i], angle=angle[i]) - } - if(affected[i] == -1) { - polygon(x + (polylist[[sex]])[[i]]$x * boxw, - y + (polylist[[sex]])[[i]]$y * boxh, - col=NA, border=col) - - midx <- x + mean(range(polylist[[sex]][[i]]$x*boxw)) - midy <- y + mean(range(polylist[[sex]][[i]]$y*boxh)) - - points(midx, midy, pch="?", cex=min(1, cex*2/length(affected))) - } - - } - if (status==1) segments(x- .6*boxw, y+1.1*boxh, - x+ .6*boxw, y- .1*boxh,) - ## Do a black slash per Beth, old line was - ## x+ .6*boxw, y- .1*boxh, col=col) - } - -@ - -\subsection{Subsetting} -This section is still experimental and might change. - -Sometimes a pedigree is too large to fit comfortably on one page. -The [[subregion]] argument allows one to plot only a portion of the -pedigree based on the plot region. Along with other tools to -select portions of the pedigree based on relatedness, such as all -the descendents of a particular marriage, it gives a tool for -addressing this. This breaks our original goal of completely -automatic plots, but users keep asking for more. - -The argument is [[subregion=c(min x, max x, min depth, max depth)]], -and works by editing away portions of the [[plist]] object -returned by align.pedigree. -First decide what lines to keep. -Then take subjects away from each line, -update spouses and twins, -and fix up parentage for the line below. - -JPS 5/23/2011 note: -Found the subregion option to re-scale the y-axis very well, but -not the x-axis. - -<>= -subregion2 <- function(plist, subreg) { - if (subreg[3] <1 || subreg[4] > length(plist$n)) - stop("Invalid depth indices in subreg") - lkeep <- subreg[3]:subreg[4] - for (i in lkeep) { - if (!any(plist$pos[i,]>=subreg[1] & plist$pos[i,] <= subreg[2])) - stop(paste("No subjects retained on level", i)) - } - - nid2 <- plist$nid[lkeep,] - n2 <- plist$n[lkeep] - pos2 <- plist$pos[lkeep,] - spouse2 <- plist$spouse[lkeep,] - fam2 <- plist$fam[lkeep,] - if (!is.null(plist$twins)) twin2 <- plist$twins[lkeep,] - - for (i in 1:nrow(nid2)) { - keep <- which(pos2[i,] >=subreg[1] & pos2[i,] <= subreg[2]) - nkeep <- length(keep) - n2[i] <- nkeep - nid2[i, 1:nkeep] <- nid2[i, keep] - pos2[i, 1:nkeep] <- pos2[i, keep] - spouse2[i,1:nkeep] <- spouse2[i,keep] - fam2[i, 1:nkeep] <- fam2[i, keep] - if (!is.null(plist$twins)) twin2[i, 1:nkeep] <- twin2[i, keep] - - if (i < nrow(nid2)) { #look ahead - tfam <- match(fam2[i+1,], keep, nomatch=0) - fam2[i+1,] <- tfam - if (any(spouse2[i,tfam] ==0)) - stop("A subregion cannot separate parents") - } - } - - n <- max(n2) - out <- list(n= n2[1:n], nid=nid2[,1:n, drop=F], pos=pos2[,1:n, drop=F], - spouse= spouse2[,1:n, drop=F], fam=fam2[,1:n, drop=F]) - if (!is.null(plist$twins)) out$twins <- twin2[, 1:n, drop=F] - out - } -@ - - -\subsection{Legends} - -We define a function to draw a legend for the affected matrix. We do so -by making use of the pie() function, which will draw a circle that will look -like a woman (circle) in the pedigree who has all affected indicators ==1. -We do not show what the ``?'' means, and we do not cover what colors are -indicated by the coloring applied to subjects. - -We allow the legend to be added to the current pedigree plot by default, -and it also works to draw a legend on a separate page. The {\em new} argument -controls this option. When new=TRUE, the default, the plot is added to the -current plot (assumed a pedigree plot), and placed in one of the corners -of the plot given by {\em location}, which has options "bottomright", -"topright", "topleft", and "bottomleft", with ``bottomright'' the default. - -If new=FALSE, the pie graph is plotted from (-1,1) for both x and y, centered -at 0,0 with radius 1. With angle.init=90 and twopi = 2*pi, we control the -start to be at the top and the sections are plotted counter-clockwise, respectively, which are some of the settings from the original pie() function. - -When we adapted the pie() function to plot in different, non-(0,0) locations -on the pedigree, we had these major issues: - -1) The Y-axis actually goes from min(y) at the top and max(y) at the bottom. -2) To get the polygon in pie() to not be oblong, we made sure to use asp=1, -which re-sets the x- and/or y-axis again. Therefore, we have to manage the -placing of the pie in reference to those updated scalings using par(``usr''). -3) We have to choose a center that is not 0,0, and have to add the center -x,y coordinates to some of the default settings of pie(). - -We carry forward from the plot.pedigree the same density and angle defaults -for shading sections of each subject's symbol with polygon. - - -<>= - -pedigree.legend <- function (ped, labels = dimnames(ped$affected)[[2]], - edges = 200, radius=NULL, location="bottomright", new=TRUE, - density=c(-1, 35,65,20), angle = c(90, 65, 40, 0), ...) -{ - - naff <- max(ncol(ped$affected),1) - - x <- rep(1,naff) - - # Defaults for plotting on separate page: - ## start at the top, always counter-clockwise, black/white - init.angle <- 90 - twopi <- 2 * pi - col <- 1 - - default.labels <- paste("affected-", 1:naff, sep='') - if (is.null(labels)) labels <- default.labels - - ## assign labels to those w/ zero-length label - whichNoLab <- which(nchar(labels) < 1) - if(length(whichNoLab)) - labels[whichNoLab] <- paste("affected-", whichNoLab, sep='') - - - x <- c(0, cumsum(x)/sum(x)) - dx <- diff(x) - nx <- length(dx) - ## settings for plotting on a new page - if(!new) { - plot.new() - - pin <- par("pin") - # radius, xylim, center, line-lengths set to defaults of pie() - radius <- 1 - xlim <- ylim <- c(-1, 1) - center <- c(0,0) - llen <- 0.05 - - if (pin[1L] > pin[2L]) - xlim <- (pin[1L]/pin[2L]) * xlim - else ylim <- (pin[2L]/pin[1L]) * ylim - - plot.window(xlim, ylim, "", asp = 1) - - } else { - ## Settings to add to pedigree plot - ## y-axis is flipped, so adjust angle and rotation - init.angle <- -1*init.angle - twopi <- -1*twopi - - ## track usr xy limits. With asp=1, it re-scales to have aspect ratio 1:1 - usr.orig <- par("usr") - plot.window(xlim=usr.orig[1:2], ylim=usr.orig[3:4], "", asp=1) - usr.asp1 <- par("usr") - - ## also decide on good center/radius if not given - if(is.null(radius)) - radius <- .5 - - ## set line lengths - llen <- radius*.15 - - ## get center of pie chart for coded - pctusr <- .10*abs(diff(usr.asp1[3:4])) - center = switch(location, - "bottomright" = c(max(usr.asp1[1:2])-pctusr,max(usr.asp1[3:4])-pctusr), - "topright" = c(max(usr.asp1[1:2])-pctusr, min(usr.asp1[3:4]) + pctusr), - "bottomleft" =c(min(usr.asp1[1:2]) + pctusr, max(usr.asp1[3:4])-pctusr), - "topleft" = c(min(usr.asp1[1:2]) + pctusr, min(usr.asp1[3:4]) + pctusr)) - - } - - col <- rep(col, length.out = nx) - border <- rep(1, length.out = nx) - lty <- rep(1, length.out = nx) - angle <- rep(angle, length.out = nx) - density <- rep(density, length.out = nx) - - t2xy <- function(t) { - t2p <- twopi * t + init.angle * pi/180 - list(x = radius * cos(t2p), y = radius * sin(t2p)) - } - for (i in 1L:nx) { - n <- max(2, floor(edges * dx[i])) - P <- t2xy(seq.int(x[i], x[i + 1], length.out = n)) - P$x <- P$x + center[1] - P$y <- P$y + center[2] - - polygon(c(P$x, center[1]), c(P$y, center[2]), density = density[i], - angle = angle[i], border = border[i], col = col[i], - lty = lty[i]) - - P <- t2xy(mean(x[i + 0:1])) - if(new) { - ## not centered at 0,0, so added center to x,y - P$x <- P$x + center[1] - P$y <- center[2] + ifelse(new, P$y, -1*P$y) - } - - lab <- as.character(labels[i]) - if (!is.na(lab) && nzchar(lab)) { - ## put lines - lines(x=c(P$x, P$x + ifelse(P$x 0 & indx2 > 0) # keep only if both id's are kept - if (any(keep)) { - temp$spouse <- cbind(indx1[keep], indx2[keep], - hints$spouse[keep, 3] - ) - } - } else { - temp$spouse <- NULL - } - temp -} - -#' @description Extract parts of a Pedigree object -#' @param x A Pedigree object. -#' @param i A vector of individuals id or a vector of index. -#' @param j A vector of columns names. -#' @param drop A logical value indicating if the dimensions should be dropped. -#' @rdname extract-methods -#' @return A Pedigree object subsetted. -setMethod("[", c(x = "Pedigree", i = "ANY", j = "ANY"), - function(x, i, j, drop = TRUE) { - if (is.factor(i)) { - i <- as.character(i) - } - if (is.character(i)) { - i <- which(x$ped$id %in% i) - } - ped_df <- x$ped[i, j, drop = drop] - allId <- unique(c(ped_df$id, ped_df$dadid, ped_df$momid)) - rel_df <- x$rel[x$rel$id1 %in% allId | x$rel$id2 %in% allId, ] - idx <- match(allId, ped_df$id, nomatch = 0) - sub_hints <- sub_sel_hints(x$hints, idx) - fill <- x$scales$fill[x$scales$fill$column_values %in% names(ped_df),] - border <- x$scales$border[x$scales$border$column %in% names(ped_df),] - scales <- list(fill = fill, border = border) - - new_ped <- Pedigree(ped_df, rel_df, scales, - hints = sub_hints, cols_ren_ped = NULL, normalize = FALSE - ) - validObject(new_ped) - new_ped - } -) - -#' @description Extract parts of a Pedigree object -#' @param x A Pedigree object. -#' @param i A vector of individuals id or a vector of index. -#' @param j A vector of columns names. -#' @param drop A logical value indicating if the dimensions should be dropped. -#' @return A Pedigree object subsetted. -#' @rdname extract-methods -setMethod("[", c(x = "Pedigree", i = "missing", j = "ANY"), - function(x, i, j, drop = TRUE) { - ped_df <- x$ped[, j, drop = drop] - new_ped <- Pedigree(ped_df, x$rel, x$scales, - cols_ren_ped = NULL, normalize = FALSE - ) - validObject(new_ped) - new_ped - } -) - -#' @description Extract parts of a Pedigree object -#' @param x A Pedigree object. -#' @param i A vector of individuals id or a vector of index. -#' @param j A vector of columns names. -#' @param drop A logical value indicating if the dimensions should be dropped. -#' @return A Pedigree object subsetted. -#' @rdname extract-methods -setMethod("[", c(x = "Pedigree", i = "ANY", j = "missing"), - function(x, i, j, drop = TRUE) { - if (is.factor(i)) { - i <- as.character(i) - } - if (is.character(i)) { - i <- which(x$ped$id %in% i) - } - ped_df <- x$ped[i, ] - allId <- unique(c(ped_df$id, ped_df$dadid, ped_df$momid)) - rel_df <- x$rel[x$rel$id1 %in% allId & x$rel$id2 %in% allId, ] - idx <- match(allId, ped_df$id, nomatch = 0) - sub_hints <- sub_sel_hints(hints(x), idx) - new_ped <- Pedigree(ped_df, rel_df, x$scales, - hints = sub_hints, cols_ren_ped = NULL, normalize = FALSE - ) - validObject(new_ped) - new_ped - } -) - -#' Convert a Pedigree object to a data.frame -#' @param x A Pedigree object. -#' @return A data.frame with the individuals informations. -#' @docType methods -#' @aliases as.data.frame,Pedigree-method -#' @rdname extract-methods -#' @export -setMethod("as.data.frame", c(x = "Pedigree"), - function(x) { - x$ped - } -) - -#' Convert a Pedigree object to a list -#' @param from A Pedigree object. -#' @return A list with all the slots of the Pedigree object. -#' @docType methods -#' @aliases as.list,Pedigree-method -#' @rdname extract-methods -#' @export -setAs("Pedigree", "list", - function(from) { - list( - ped = ped(from), - meta = meta(from), - deriv = deriv(from), - rel = rel(from), - scales = scales(from), - hints = hints(from) - ) - } -) - -#' Compute the length of a Pedigree object -#' @param x A Pedigree object. -#' @return The number of individuals in the Pedigree object. -#' @docType methods -#' @aliases length,Pedigree-method -#' @export -setMethod("length", c(x = "Pedigree"), - function(x) { - nrow(x$ped) - } -) \ No newline at end of file diff --git a/devel/old/pedigreeValidity.R b/devel/old/pedigreeValidity.R deleted file mode 100644 index 6ea8afba..00000000 --- a/devel/old/pedigreeValidity.R +++ /dev/null @@ -1,219 +0,0 @@ -#' Print0 to max -#' -#' Print0 the elements inside a vector until a maximum is reached. -#' -#' @param x A vector. -#' @param max The maximum number of elements to print. -#' @param ... Additional arguments passed to print0 -#' -#' @return The character vector aggregated until the maximum is reached. -#' @keywords internal -paste0max <- function(x, max = 5, ...) { - if (length(x) > max) { - paste(paste0(unique(x[seq_len(max)]), collapse = ", ", ...), "...") - } else { - paste0(unique(x), collapse = ", ", ...) - } -} - -#' Check if the fields are present in an object slot -#' -#' @param obj An object. -#' @param slot A slot of object. -#' @param fields A character vector with the fields to check. -#' -#' @return A character vector with the errors if any. -#' @keywords internal -check_slot_fd <- function(obj, slot = NULL, fields = character()) { - if (is.object(obj)) { - obj <- as(obj, "list") - } - if (is.null(slot)) { - array_names <- names(obj) - } else if (is.data.frame(obj[[slot]])) { - array_names <- colnames(obj[[slot]]) - } else if (is.list(obj[[slot]])) { - array_names <- names(obj[[slot]]) - } else { - stop( - "Slot ", slot, " is not a data.frame or a list. ", - class(obj[[slot]]), " found." - ) - } - if (length(array_names) == 0) { - paste0( - "Missing fields in ", slot, - " slot. See Pedigree documentation." - ) - } else if (any(!fields %in% array_names)) { - paste0( - "`", paste0max(fields[!fields %in% array_names]), - "`", " column(s) is not present in slot ", slot, "." - ) - } -} - -#' Check values in a slot -#' -#' Check if the all the values in a slot are in a vector of values. -#' -#' @param obj An object. -#' @param slot A slot of the object. -#' @param column A column of the slot. -#' @param values A vector of values to check. -#' @param present A logical value indicating if the values should be present -#' or not -#' -#' @return A character vector with the errors if any. -#' @keywords internal -check_values <- function(val, ref, present = TRUE) { - if (length(dim(val)) > 1) { - stop("val must be a vector") - } - - if (present) { - val_abs <- !val %in% ref - should <- " should be in " - } else { - val_abs <- val %in% ref - should <- " should not be in " - } - - if (any(val_abs)) { - paste0( - "Values ", paste0max(val[val_abs]), should, - paste0max(ref), "." - ) - } -} - -#' Pedigree validity method. -#' -#' Check if the Pedigree object is valid. -#' -#' It will check : -#' the fields of the slots -#' the values in the columns of the ped, rel and scale slot -#' @param object A Pedigree object. -#' @return A logical value or a character vector with the errors. -#' @keywords internal -is_valid <- function(object) { - missid <- "0" - errors <- c() - - #### Check that the slots have the right columns #### - ped_cols <- c("id", "dadid", "momid", "family", "sex") - deriv_cols <- c("affected", "kin", "useful", "avail", "steril", "status") - rel_cols <- c("id1", "id2", "code", "family") - fill_cols <- c( - "order", "column_values", "column_mods", "mods", - "labels", "affected", "fill", "density", "angle" - ) - border_cols <- c("column", "mods", "labels", "border") - errors <- c(errors, check_slot_fd(object, "ped", ped_cols)) - errors <- c(errors, check_slot_fd(object, "deriv", deriv_cols)) - errors <- c(errors, check_slot_fd(object, "rel", rel_cols)) - errors <- c(errors, check_slot_fd(object, "scales", c("fill", "border"))) - errors <- c(errors, check_slot_fd(object$scales, "fill", fill_cols)) - errors <- c(errors, check_slot_fd(object$scales, "border", border_cols)) - - #### Check that the ped columns have the right values #### - # Check for ped$id uniqueness - if (any(duplicated(object$ped$id))) { - errors <- c(errors, "Id in ped slot must be unique") - } - - # Control values for ped - errors <- c(errors, check_values(object$ped$id, missid, present = FALSE)) - errors <- c(errors, check_values( - object$ped$dadid, c(object$ped$id, missid) - )) - errors <- c(errors, check_values( - object$ped$momid, c(object$ped$id, missid) - )) - sex_code <- c("male", "female", "unknown", "terminated") - errors <- c(errors, check_values(object$ped$sex, sex_code)) - errors <- c(errors, check_values(object$ped$steril, c(0, 1, NA))) - errors <- c(errors, check_values(object$ped$status, c(0, 1, NA))) - errors <- c(errors, check_values(object$ped$avail, c(0, 1, NA))) - errors <- c(errors, check_values(object$ped$affected, c(0, 1, NA))) - - # Control sex for parents - id <- object$ped$id - momid <- object$ped$momid - dadid <- object$ped$dadid - sex <- object$ped$sex - is_dad <- id %in% dadid - is_mom <- id %in% momid - if (any(sex[is_dad] != "male")) { - errors <- c(errors, "Some dad are not male") - } - if (any(sex[is_mom] != "female")) { - errors <- c(errors, "Some mom are not female") - } - if (any( - (dadid %in% missid & (! momid %in% missid)) | - ((! dadid %in% missid) & momid %in% missid) - )) { - errors <- c(errors, "Individuals should have both parents or none") - } - - #### Check that the rel columns have the right values #### - codes <- c("MZ twin", "DZ twin", "UZ twin", "Spouse") - errors <- c(errors, check_values(object$rel$code, codes)) - errors <- c(errors, check_values( - object$rel$family, c(object$ped$family, NA) - )) - errors <- c(errors, check_values(object$rel$id1, object$ped$id)) - errors <- c(errors, check_values(object$rel$id2, object$ped$id)) - - # Check if twins has same parents - code <- object$rel$code - ncode <- as.numeric(code) - id1 <- object$rel$id1 - id2 <- object$rel$id2 - temp1 <- match(id1, id, nomatch = 0) - temp2 <- match(id2, id, nomatch = 0) - if (any(ncode < 3)) { - twins <- (ncode < 3) - if (any(momid[temp1[twins]] != momid[temp2[twins]])) { - errors <- c(errors, "twins found with different mothers") - } - if (any(dadid[temp1[twins]] != dadid[temp2[twins]])) { - errors <- c(errors, "twins found with different fathers") - } - } - - # Check if the monozygote twins has same gender - if (any(ncode == 1)) { - mztwins <- (ncode == 1) - if (any(sex[temp1[mztwins]] != sex[temp2[mztwins]])) { - errors <- c(errors, "MZ twins with different genders") - } - } - - # Check that the scales columns have the right values - errors <- c(errors, check_values( - object$scales$fill$column_values, colnames(mcols(object)) - )) - errors <- c(errors, check_values( - object$scales$fill$column_mods, colnames(mcols(object)) - )) - errors <- c(errors, check_values( - object$scales$border$column, colnames(mcols(object)) - )) - - # Check that all modalities are present in the scales - for (col in unique(object$scales$column)){ - errors <- c(errors, check_values( - object$ped$col, - object$scales$fill[object$scales$fill$column_mods == col, "mods"] - )) - } - - if (length(errors) == 0) { - TRUE - } else { - errors - } -} From 52df205cec05b178962e5d1d79a78c507bc5f3d6 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 19:29:33 +0100 Subject: [PATCH 099/111] Improve vignette --- DESCRIPTION | 2 +- vignettes/alignment_details.Rmd | 4 +- vignettes/kinship_details.Rmd | 8 +- vignettes/pedigree.Rmd | 486 ++++++++++++++-------------- vignettes/pedigree_object.Rmd | 13 +- vignettes/pedigree_plot_details.Rmd | 62 ++-- 6 files changed, 286 insertions(+), 289 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8e52b112..dec0f024 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 0.99.3 +Version: 0.99.4 Date: 2023-11-15 Title: Pedigree Functions Authors@R: c( diff --git a/vignettes/alignment_details.Rmd b/vignettes/alignment_details.Rmd index 32a14326..49ee0739 100644 --- a/vignettes/alignment_details.Rmd +++ b/vignettes/alignment_details.Rmd @@ -3,8 +3,8 @@ title: Pedigree alignment details author: TM Therneau date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes + BiocStyle::html_document: + toc: true toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | diff --git a/vignettes/kinship_details.Rmd b/vignettes/kinship_details.Rmd index 943427af..921242c3 100644 --- a/vignettes/kinship_details.Rmd +++ b/vignettes/kinship_details.Rmd @@ -3,8 +3,8 @@ title: Pedigree kinship() details author: TM Therneau date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes + BiocStyle::html_document: + toc: true toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | @@ -133,7 +133,7 @@ for backwards compatability with an older version of the routine. We give founders a fake parent of subject $n+1$ who is not related to anybody (even themself); it avoids some if-then-else constructions. -## Pedigree Object +## With a Pedigree object The method for a Pedigree object is an almost trivial modification. Since the mother and father are already indexed into the id list it has @@ -183,7 +183,7 @@ family/subject. library(Pedixplorer) data(sampleped) ped <- Pedigree(sampleped) -kinship(ped) +kinship(ped)[35:48, 35:48] ``` ## MakeKinship diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index b370d76d..ba0425c2 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -12,45 +12,48 @@ vignette: | %\VignetteIndexEntry{Pedixplorer Pedigree} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} +editor_options: + markdown: + wrap: 72 --- ```{r width_control, echo = FALSE} options(width = 100) ``` -Introduction -=============== +# Introduction -This document is a tutorial for the `Pedixplorer` package, with examples of -creating Pedigree objects and kinship matrices and other Pedigree utilities. +This document is a tutorial for the `Pedixplorer` package, with examples +of creating Pedigree objects and kinship matrices and other Pedigree +utilities. -The `Pedixplorer` package is an updated version of the [`Kinship2`](https://github.com/mayoverse/kinship2) package, -featuring a change in maintainer and repository from CRAN to Bioconductor -for continued development and support. +The `Pedixplorer` package is an updated version of the +[`Kinship2`](https://github.com/mayoverse/kinship2) package, featuring a +change in maintainer and repository from CRAN to Bioconductor for +continued development and support. -It contains the outines to handle family data with a Pedigree object. -The initial purpose was to create correlation structures that describe family -relationships such as kinship and identity-by-descent, which can be used to -model family data in mixed effects models, such as in the coxme function. -It also includes tools for Pedigree drawing and filtering which is focused -on producing compact layouts without intervention. -Recent additions include utilities to trim the Pedigree object with -various criteria, and kinship for the X chromosome. +It contains the routines to handle family data with a Pedigree object. +The initial purpose was to create correlation structures that describe +family relationships such as kinship and identity-by-descent, which can +be used to model family data in mixed effects models, such as in the +coxme function. It also includes tools for Pedigree drawing and +filtering which is focused on producing compact layouts without +intervention. Recent additions include utilities to trim the Pedigree +object with various criteria, and kinship for the X chromosome. -Suplementary vignettes are available to explain: +Supplementary vignettes are available to explain: -- The [Pedigree object]("pedigree_object.html") `vignette("Pedigree object", package = "Pedixplorer")` -- The [alignment algorithm]("alignment_details.html") used create the Pedigree -structure `vignette("Pedigree alignment details", package = "Pedixplorer")` -- The [kinship() algorithm]("kinship_details.html") -`vignette("Pedigree kinship() details", package = "Pedixplorer")` -- The [plotting algorithm]("pedigree_plot_details.html") used to plot the -Pedigree `vignette("Pedigree plotting details", package = "Pedixplorer")` +- The **$Pedigree$ object** `vignette("pedigree_object", package = "Pedixplorer")` +- The **alignment algorithm** used create the Pedigree structure + `vignette("alignment_details", package = "Pedixplorer")` +- The **kinship algorithm** `vignette("kinship_details", package = "Pedixplorer")` +- The **plotting algorithm** used to plot the Pedigree + `vignette("pedigree_plot_details", package = "Pedixplorer")` -Installation -=============== -The `Pedixplorer` package is available on Bioconductor and can be installed -with the following command: +# Installation + +The $Pedixplorer$ package is available on Bioconductor and can be +installed with the following command: ```{r BiocManager_install, eval = FALSE} if (!requireNamespace("BiocManager", quietly = TRUE)) { @@ -65,43 +68,41 @@ The package can then be loaded with the following command: library(Pedixplorer) ``` -The Pedigree S4 object -=================== +# The Pedigree S4 object -The Pedigree object is a list of dataframes that describe the family structure. -It contains the following components: +The $Pedigree$ object is a list of dataframes that describe the family +structure. It contains the following components: -- ped: a Ped object with the Pedigree information `help(Ped)`. -- rel: a Rel object with the relationship information `help(Rel)`. -- scales: a Scales object of 2 dataframe with the filling and borders -informations for the plot `help(Scales)`. -- hints: a Hints objects with 2 slots indicating the horder and the spouse to -organise the Pedigree structure `help(Hints)`. +- ped: a $Ped$ object with the Pedigree information `help(Ped)`. +- rel: a $Rel$ object with the relationship information `help(Rel)`. +- scales: a $Scales$ object of 2 dataframe with the filling and borders + informations for the plot `help(Scales)`. +- hints: a $Hints$ objects with 2 slots indicating the horder and the + spouse to organise the Pedigree structure `help(Hints)`. -Basic Usage -============= +# Basic Usage ## Example Data -Two datasets are provided within the Pedixplorer package: -+ minnbreast: 17 families from a breast cancer study -+ sampleped: two samplepedigrees, with 41 and 14 subjects +Two datasets are provided within the $Pedixplorer$ package: + minnbreast: +17 families from a breast cancer study + sampleped: two sample pedigrees, +with 41 and 14 subjects -This vignette uses the two pedigrees in ~sampleped~. -For more information on these datasets, see -`help(minnbreast)` and `help(sampleped)`. +This vignette uses the two pedigrees in $sampleped$. For more +information on these datasets, see `help(minnbreast)` and +`help(sampleped)`. ## Pedigree -First, we load $samplepe$ and look at some of the values -in the dataset, and create a *Pedigree* object using the -*Pedigree()* function. -This function automaticaly detect the necessary columns in the dataframe. -If necessary you can modify the columns names with *cols_ren*. -To create a Pedigree object, with multiple families, the dataframe just need -a family column in the *ped_df* dataframe. When this is the case, the famid -column will be pasted to the id of each individuals separated by an -underscore to create a unique id for each individual in the Pedigree object. +First, we load $sampleped$ and look at some of the values in the dataset, +and create a $Pedigree$ object using the `Pedigree()` function. This +function automaticaly detect the necessary columns in the dataframe. If +necessary you can modify the columns names with *cols_ren*. To create a +$Pedigree$ object, with multiple families, the dataframe just need a +family column in the *ped_df* dataframe. When this is the case, the +famid column will be pasted to the id of each individuals separated by +an underscore to create a unique id for each individual in the $Pedigree$ +object. ```{r, Pedigree_creation} data("sampleped") @@ -110,14 +111,13 @@ ped <- Pedigree(sampleped[c(3, 4, 10, 35, 36), ]) print(ped) ``` -For more information on the *Pedigree()* function, see `help(Pedigree)`. +For more information on the `Pedigree()` function, see `help(Pedigree)`. -The Pedigree object can be subset to individual pedigrees -by their family id. The Pedigree object has a print, summary and plot method, -which we show below. -The print method prints the Ped and Rel object of the Pedigree. -The summary method prints a short summary of the Pedigree. -Finally the plot method displays the Pedigree. +The $Pedigree$ object can be subset to individual pedigrees by their +family id. The $Pedigree$ object has a print, summary and plot method, +which we show below. The print method prints the $Ped$ and $Rel$ object of +the pedigree. The summary method prints a short summary of the pedigree. +Finally the plot method displays the pedigree. ```{r, ped1} ped <- Pedigree(sampleped) @@ -133,23 +133,22 @@ You can add a title and a legend to the plot with the following command: plot(ped1, title = "Pedigree 1", legend = TRUE, leg_loc = c(5, 15, 4.5, 5)) ``` -Fixing Pedigree Issues -======================= +# Fixing Pedigree Issues -To "break" the Pedigree, we can manipulate the sex value to not match the -parent value (in this example, we change $203$ from a male to a female, -even though $203$ is a father). To do this, we first subset ~datped2~, -locate the *id* column, and match it to a specific id (in this case, $203$). -Within id $203$, then locate in the *sex* column. +To "break" the pedigree, we can manipulate the sex value to not match +the parent value (in this example, we change $203$ from a male to a +female, even though $203$ is a father). To do this, we first subset +$datped2$, locate the *id* column, and match it to a specific id (in +this case, $203$). Within id $203$, then locate in the *sex* column. Assign this subset to the incorrect value of *2* (female) to change the original/correct value of *1* (male). -To further break the Pedigree, we can delete subjects who seem irrelevant to -the Pedigree (in this example, we delete $209$ because he is a married-in -father). -To do this, we subset ~datped2~ and use the *-which()* function to locate and -delete the specified subject (in this case, $209$). Reassign this code to -~datped22~ to drop the specified subject entirely. +To further break the pedigree, we can delete subjects who seem +irrelevant to the pedigree (in this example, we delete $209$ because he +is a married-in father). To do this, we subset $datped2$ and use the +*-which()* function to locate and delete the specified subject (in this +case, $209$). Reassign this code to $datped22$ to drop the specified +subject entirely. ```{r, datped2} datped2 <- sampleped[sampleped$famid == 2, ] @@ -157,11 +156,11 @@ datped2[datped2$id %in% 203, "sex"] <- 2 datped2 <- datped2[-which(datped2$id %in% 209), ] ``` -An error occurs when the *Pedigree()* function notices that id $203$ is not -coded to be male (*1*) but is a father. To correct this, we simply employ the -*fix_parents()* function to adjust the *sex* value to match either *momid* -or *dadid*. *fix_parents()* will also add back in any deleted subjects, -further fixing the Pedigree. +An error occurs when the `Pedigree()` function notices that id $203$ is +not coded to be male (*1*) but is a father. To correct this, we simply +employ the `fix_parents()` function to adjust the *sex* value to match +either *momid* or *dadid*. `fix_parents()` will also add back in any +deleted subjects, further fixing the Pedigree. ```{r, fixped2} tryout <- try({ @@ -173,47 +172,46 @@ ped2 <- Pedigree(fixped2) plot(ped2) ``` -If the fix is straightforward (changing one sex value based on either being -a mother or father), *fix_parents()* will resolve the issue. If the issue is -more complicated, say if $203$ is coded to be both a father *and* a mother, -*fix_parents()* will not know which one is correct and therefore the issue -will not be resolved. +If the fix is straightforward (changing one sex value based on either +being a mother or father), `fix_parents()` will resolve the issue. If +the issue is more complicated, say if $203$ is coded to be both a father +and a mother, `fix_parents()` will not know which one is correct and +therefore the issue will not be resolved. -Kinship -============== +# Kinship -A common use for pedigrees is to make a matrix of kinship coefficients that -can be used in mixed effect models. A kinship coefficient is the probability -that a randomly selected allele from two people at a given locus will be -identical by descent (IBD), assuming all founder alleles are independent. -For example, we each have two alleles per autosomal marker, so sampling two -alleles with replacement from our own DNA has only $p=0.50$ probability of -getting the same allele twice. +A common use for pedigrees is to make a matrix of kinship coefficients +that can be used in mixed effect models. A kinship coefficient is the +probability that a randomly selected allele from two people at a given +locus will be identical by descent (IBD), assuming all founder alleles +are independent. For example, we each have two alleles per autosomal +marker, so sampling two alleles with replacement from our own DNA has +only $p=0.50$ probability of getting the same allele twice. ## Kinship for Pedigree object -We use `kinship()` to calculate the kinship matrix for $ped2$. The -result is a special symmetrix matrix class from the -[Matrix R package](https://CRAN.R-project.org/package=Matrix/), -which is stored efficiently to avoid repeating elements. +We use `kinship()` to calculate the kinship matrix for $ped2$. The +result is a special symmetrix matrix class from the [Matrix R +package](https://CRAN.R-project.org/package=Matrix/), which is stored +efficiently to avoid repeating elements. ```{r, calc_kinship} kin2 <- kinship(ped2) kin2[1:9, 1:9] ``` -For family 2, see that the row and column names match the id in -the figure below, and see that each kinship coefficient with -themselves is $0.50$, siblings are $0.25$ (e.g. $204-205$), and Pedigree -marry-ins only share alleles IBD with their children with coefficient $0.25$ -(e.g. $203-210$). The plot can be used to verify other kinship coefficients. +For family 2, see that the row and column names match the id in the +figure below, and see that each kinship coefficient with themselves is +$0.50$, siblings are $0.25$ (e.g. $204-205$), and pedigree marry-ins +only share alleles IBD with their children with coefficient $0.25$ (e.g. +$203-210$). The plot can be used to verify other kinship coefficients. ## Kinship for Pedigree with multiple families -The kinship function also works on a *Pedigree* object with multiple families. -We show how to create the kinship matrix, then -show a snapshot of them for the two families, where the row and columns names -are the ids of the subject. +The `kinship()` function also works on a $Pedigree$ object with multiple +families. We show how to create the kinship matrix, then show a snapshot +of them for the two families, where the row and columns names are the +ids of the subject. ```{r, kin_all} ped <- Pedigree(sampleped) @@ -227,14 +225,13 @@ kin_all[42:46, 42:46] Specifying twin relationships in a Pedigree with multiple families object is complicated by the fact that the user must specify the family -id to which the ~id1~ and ~id2~ belong. -We show below the relation matrix requires the family id to be in the last -column, with the column names as done below, to make the plotting and -kinship matrices to show up with the monozygotic twins correctly. -We show how to specify monozygosity for subjects 206 and 207 in -samplePedigree 2, and subjects 125 and 126 in Pedigree 1. -We check it by looking at the kinship matrix for these pairs, -which are correctly at $0.5$. +id to which the *id1* and *id2* belong. We show below the relation +matrix requires the family id to be in the last column, with the column +names as done below, to make the plotting and kinship matrices to show +up with the monozygotic twins correctly. We show how to specify +monozygosity for subjects $206$ and $207$ in $ped2$, and subjects +$125$ and $126$ in $ped1$. We check it by looking at the kinship matrix +for these pairs, which are correctly at $0.5$. ```{r, kin_twins} reltwins <- as.data.frame(rbind(c(206, 207, 1, 2), c(125, 126, 1, 1))) @@ -246,23 +243,23 @@ kin_all[24:27, 24:27] kin_all[46:50, 46:50] ``` -Note that subject $113$ is not in Pedigree 1 because they -are a marry-in without children in the Pedigree. Subject $113$ is in their own -Pedigree of size 1 in the $kin_all$ matrix at index $41$. We later show how -to handle such marry-ins for plotting. +Note that subject $113$ is not in $ped1$ because they are a marry-in +without children in the $Pedigree$. Subject $113$ is in their own $Pedigree$ +of size 1 in the $kin_all$ matrix at index $41$. We later show how to +handle such marry-ins for plotting. -Optional Pedigree Informations -=============================== +# Optional Pedigree Informations -We use Pedigree 2 from $sampleped$ to sequentially -add optional information to the Pedigree object. +We use $ped2$ from $sampleped$ to sequentially add optional +information to the $Pedigree$ object. ## Status -The example below shows how to specify a $status$ indicator, such as -vital status. The $sampleped$ data does not include such an -indicator, so we create one to indicate that the first generation of -Pedigree 2, subjects 1 and 2, are deceased. The $status$ indicator -is used to cross out the individuals in the Pedigree plot. + +The example below shows how to specify a $status$ indicator, such as +vital status. The $sampleped$ data does not include such an\ +indicator, so we create one to indicate that the first generation of +$ped2$, subjects $1$ and $2$, are deceased. The $status$ indicator is +used to cross out the individuals in the Pedigree plot. ```{r, status} df2 <- sampleped[sampleped$famid == 2, ] @@ -275,11 +272,13 @@ plot(ped2) ## Labels -Here we show how to use the $label$ argument in the plot method to add -additional information under each subject. In the example below, we add -names to the existing plot by adding a new column to the *ped* dataframe. -As space permits, more lines and characters per line can be made using the -a {/em \n} character to indicate a new line. +Here we show how to use the $label$ argument in the plot method to add +additional information under each subject. In the example below, we add +names to the existing plot by adding a new column to the $elementMetadata$ +of the $Ped$ object of the $Pedigree$. + +As space permits, more lines and characters per line can be +made using the a {/em \n} character to indicate a new line. ```{r, labels} mcols(ped2)$Names <- c( @@ -290,17 +289,16 @@ mcols(ped2)$Names <- c( plot(ped2, label = "Names") ``` - ## Affected Indicators -We show how to specify affected status with a single indicator and -multiple indicators. First, we use the affected indicator from -$sampleped$, which contains 0/1 indicators and NA as missing, and let it -it indicate blue eyes. Next, we create a vector as an indicator for baldness. -And add it as a second filling scale for the plot with -*generate_colors(add_to_scale = TRUE)*. -The plot shapes for each subject is therefore divided into two equal parts and -shaded differently to indicate the two affected indicators. +We show how to specify affected status with a single indicator and +multiple indicators. First, we use the affected indicator from +$sampleped$, which contains $0$/$1$ indicators and $NA$ as missing, and let it +it indicate blue eyes. Next, we create a vector as an indicator for +baldness. And add it as a second filling scale for the plot with +`generate_colors(add_to_scale = TRUE)`. The plot shapes for each subject +is therefore divided into two equal parts and shaded differently to +indicate the two affected indicators. ```{r, two_affection} mcols(ped2)$bald <- as.factor(c(0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1)) @@ -310,20 +308,26 @@ plot(ped2, legend = TRUE) ## Special Relationships -Special Pedigree relationships can be specified in a matrix -as the $relation$ argument. There are 4 relationships that can -be specified by numeric codes: 1=Monozygotic twins, 2=Dizygotic twins, -3=twins of unknown zygosity, and 4=Spouse. The spouse relationship can -indicate a marry-in when a couple does not have children together. +Special pedigree relationships can be specified in a matrix as the +$relation$ argument. There are 4 relationships that can be specified by +numeric codes: + +- 1 = Monozygotic twins +- 2 = Dizygotic twins +- 3 = twins of unknown zygosity +- 4 = Spouse + +The spouse relationship can indicate a +marry-in when a couple does not have children together. ### Twins -Below, we create a matrix of relationships for monozygotic and -unknown-zygosity twins in the most recent generation of Pedigree 2. -The twin relationships are both represented with -diverging lines from a single point. The monozygotic twins have an -additional line connecting the diverging lines, while the other twins have -a question mark to indicate unknown zygosity. +Below, we create a matrix of relationships for monozygotic and +unknown-zygosity twins in the most recent generation of $ped2$. The +twin relationships are both represented with diverging lines from a +single point. The monozygotic twins have an additional line connecting +the diverging lines, while the other twins have a question mark to +indicate unknown zygosity. ```{r, twins} ## create twin relationships @@ -339,19 +343,18 @@ plot(ped2) ### Inbreeding -Another special relationship is inbreeding. Inbreeding of founders implies -the founders' parents are related (the maternal and paternal genes descended -from a single ancestral gene). -One thing we can do is add more people to the Pedigree to show this inbreeding. +Another special relationship is inbreeding. Inbreeding of founders +implies the founders' parents are related (the maternal and paternal +genes descended from a single ancestral gene). One thing we can do is +add more people to the pedigree to show this inbreeding. -To show that a pair of founders (subjects $201$ and $202$) are inbred, we -must show that their parents are siblings. -To do this, we create subjects $197$ and $198$ to be the parents of $201$ -and also create subjects $199$ and $200$ to be the parents of $202$. -To make subjects $198$ and $199$ siblings, we give *them* the same parents, -creating subjects $195$ and $196$. -This results in subjects $201$ and $202$ being first cousins, and therefore -inbred. +To show that a pair of founders (subjects $201$ and $202$) are inbred, +we must show that their parents are siblings. To do this, we create +subjects $197$ and $198$ to be the parents of $201$ and also create +subjects $199$ and $200$ to be the parents of $202$. To make subjects +$198$ and $199$ siblings, we give them the same parents, creating +subjects $195$ and $196$. This results in subjects $201$ and $202$ being +first cousins, and therefore inbred. ```{r, inbreeding} indid <- 195:202 @@ -371,9 +374,9 @@ plot(ped4) ### Marry-ins Spouse with no child can also be specified with the $rel_df$ argument by -setting the code value to "Spouse" or "4". -If we use the Pedigree 2 from earlier and add a new spouse relationship -between the individuals $212$ and $211$ we get the following plot. +setting the code value to $Spouse$ or $4$. If we use the $ped2$ from +earlier and add a new spouse relationship between the individuals $212$ +and $211$ we get the following plot. ```{r, spouse} ## create twin relationships @@ -388,20 +391,19 @@ rel(ped2) <- upd_famid_id(new_rel) plot(ped2) ``` -Pedigree Plot Details -=========================== +# Pedigree Plot Details -The plot method attempts to adhere to many standards -in Pedigree plotting, as presented by -[Bennet et al. 2008](https://pubmed.ncbi.nlm.nih.gov/18792771/). +The plot method attempts to adhere to many standards in pedigree +plotting, as presented by [Bennet et al. +2008](https://pubmed.ncbi.nlm.nih.gov/18792771/). -To show some other tricks with Pedigree plotting, we use Pedigree 1 -from ~sampleped~, which has 41 subjects in 4 generations, including a -generation with double first cousins. After the first marriage of $114$, they -remarried subject $113$ without children between them. If we do not -specify the marriage with the $relation$ argument, the plot method excludes -subject $113$ from the plot. The basic plot of Pedigree 1 is shown -in the figure below. +To show some other tricks with pedigree plotting, we use $ped1$ from +$sampleped$, which has 41 subjects in 4 generations, including a +generation with double first cousins. After the first marriage of $114$, +they remarried subject $113$ without children between them. If we do not +specify the marriage with the $relation$ argument, the plot method +excludes subject $113$ from the plot. The basic plot of $ped1$ is +shown in the figure below. ```{r, plotped1} df1 <- sampleped[sampleped$famid == 1, ] @@ -417,11 +419,12 @@ plot(ped1) ## Align by Input Order -The plot method does a decent job aligning subjects given the order of the -subjects when the Pedigree object is made, and sometimes has to make two -copies of a subject. If we change the order of the subjects when creating -the Pedigree, we can help the plot method reduce the need to duplicate -subjects, as Figure~\ref{reordPed1} no longer has subject $110$ duplicated. +The plot method does a decent job aligning subjects given the order of +the subjects when the Pedigree object is made, and sometimes has to make +two copies of a subject. If we change the order of the subjects when +creating the Pedigree, we can help the plot method reduce the need to +duplicate subjects, as Figure\~\ref{reordPed1} no longer has subject +$110$ duplicated. ```{r, ordering} df1reord <- df1[c(35:41, 1:34), ] @@ -431,8 +434,8 @@ plot(ped1reord) ## Modify the scales -You can modify the colors of each modality used for the filling as well as -for the bordering by modifying the Scales data.frame. +You can modify the colors of each modality used for the filling as well +as for the bordering by modifying the $Scales$ data.frame. To do so you can do as follow: @@ -445,16 +448,15 @@ border(ped1)$border <- c("red", "black", "orange") plot(ped1, legend = TRUE) ``` -Pedigree Utility Functions -================================= +# Pedigree Utility Functions -## Pedigree as a data.frame +## Ped as a data.frame -A main features of a Pedigree object are vectors with an element -for each subject. It is sometimes useful to extract these vectors from -the Pedigree object into a $data.frame$ with basic information that can -be used to construct a new Pedigree object. This is possible with the -$as.data.frame()$ method, as shown below. +A main features of a Pedigree object are vectors with an element for +each subject. It is sometimes useful to extract these vectors from the +Pedigree object into a $data.frame$ with basic information that can be +used to construct a new $Pedigree$ object. This is possible with the +`as.data.frame()` method, as shown below. ```{r, ped2df, eval = FALSE} dfped2 <- as.data.frame(ped(ped2)) @@ -463,13 +465,13 @@ dfped2 ## Subsetting and Trimming -Pedigrees with large size can be a bottleneck for programs that run -calculations on them. The Pedixplorer package contains some routines to -identify which subjects to remove. We show how a subject -(e.g. subject 210) can be removed from -~ped2~, and how the Pedigree object is changed by verifying that the -~relation~ dataframe no longer has the twin relationship between subjects -210 and 211, as indicated by $id1$ and ~id2~. +Pedigrees with large size can be a bottleneck for programs that run +calculations on them. The Pedixplorer package contains some routines to +identify which subjects to remove. We show how a subject (e.g. subject +210) can be removed from ~ped2~, and how the Pedigree object is changed +by verifying that the ~relation~ dataframe no longer has the twin +relationship between subjects 210 and 211, as indicated by $id1$ and +~id2~. ```{r, subset} ped2_rm210 <- ped2[-10] @@ -477,11 +479,12 @@ rel(ped2_rm210) rel(ped2) ``` -The steps above also works by the ~id~ of the subjects themselves. -We provide *subset()*, which trims subjects from a Pedigree by -their $id$ or other argument. Below is an example of removing subject 110, as done above, -then we further trim the Pedigree by a vector of subject ids. We check the -trimming by looking at the $id$ vector and the $relation$ matrix. +The steps above also works by the ~id~ of the subjects themselves.\ +We provide *subset()*, which trims subjects from a Pedigree by their +$id$ or other argument. Below is an example of removing subject 110, as +done above, then we further trim the Pedigree by a vector of subject +ids. We check the trimming by looking at the $id$ vector and the +$relation$ matrix. ```{r, subset_more} ped2_trim210 <- subset(ped2, "2_210", keep = FALSE) @@ -492,23 +495,20 @@ id(ped(ped2_trim_more)) rel(ped2_trim_more) ``` -Shrinking -============== +# Shrinking -An additional function in Pedixplorer is *shrink()*, which shrinks a Pedigree -to a specified bit size while maintaining the maximal amount of -information for genetic linkage and association studies. Using an indicator -for availability and affected status, it removes subjects in this order: - + unavailable with no available descendants - + available and are not parents - + available who have missing affected status - + available who are unaffected - + available who are affected +An additional function in Pedixplorer is *shrink()*, which shrinks a +Pedigree to a specified bit size while maintaining the maximal amount of +information for genetic linkage and association studies. Using an +indicator for availability and affected status, it removes subjects in +this order: + unavailable with no available descendants + available and +are not parents + available who have missing affected status + available +who are unaffected + available who are affected -We show how to shrink Pedigree 1 to bit size $30$, which happens -to be the bit size after removing only the unavailable subjects. We show how -to extract the shrunken Pedigree object from the $shrink$ result, -and plot it. +We show how to shrink Pedigree 1 to bit size $30$, which happens to be +the bit size after removing only the unavailable subjects. We show how +to extract the shrunken Pedigree object from the $shrink$ result, and +plot it. ```{r, shrink1} set.seed(200) @@ -517,10 +517,10 @@ print(shrink1_b30) plot(shrink1_b30$pedObj) ``` -Now shrink Pedigree 1 to bit size $25$, which requires removing -subjects who are informative. If there is a tie between multiple subjects -about who to remove, the method randomly chooses one of them. With this -seed setting, the method removes subjects $140$ then $141$. +Now shrink Pedigree 1 to bit size $25$, which requires removing subjects +who are informative. If there is a tie between multiple subjects about +who to remove, the method randomly chooses one of them. With this seed +setting, the method removes subjects $140$ then $141$. ```{r, shrink2} set.seed(10) @@ -529,16 +529,15 @@ shrink1_b25 plot(shrink1_b25$pedObj) ``` -Select Unrelateds -======================= +# Select Unrelateds -In this section we briefly show how to use $unrelated$ to find -a set of the maximum number of unrelated available subjects from a Pedigree. -The input required is a Pedigree object and a vector indicating availability. -In some Pedigrees there are numerous sets of subjects that satisfy the maximum -number of unrelateds, so the method randomly chooses from the set. We -show two sets of subject ids that are selected by the routine and discuss -below. +In this section we briefly show how to use $unrelated$ to find a set of +the maximum number of unrelated available subjects from a Pedigree. The +input required is a Pedigree object and a vector indicating +availability. In some Pedigrees there are numerous sets of subjects that +satisfy the maximum number of unrelateds, so the method randomly chooses +from the set. We show two sets of subject ids that are selected by the +routine and discuss below. ```{r, unrelateds} ped2 <- Pedigree(df2) @@ -549,14 +548,14 @@ set2 <- unrelated(ped2) set2 ``` -We can easily verify the sets selected by $unrelated$ by -referring to Figure~\ref{fixped} and see that subjects $203$ and $206$ are -unrelated to everyone else in the Pedigree except their children. Furthermore, -we see in df2 that of these two, only subject 203 is available. Therefore, -any set of unrelateds who are available must include subject -203 and one of the these subjects: 201, 204, 206, 207, 212, -and 214, as indicated by the kinship matrix for Pedigree 2 subset to those -with availability status of 1. +We can easily verify the sets selected by $unrelated$ by referring to +Figure\~\ref{fixped} and see that subjects $203$ and $206$ are unrelated +to everyone else in the Pedigree except their children. Furthermore, we +see in df2 that of these two, only subject 203 is available. Therefore, +any set of unrelateds who are available must include subject 203 and one +of the these subjects: 201, 204, 206, 207, 212, and 214, as indicated by +the kinship matrix for Pedigree 2 subset to those with availability +status of 1. ```{r, unrelkin} df2 @@ -564,8 +563,7 @@ is_avail <- df2$id[df2$avail == 1] kin2[is_avail, is_avail] ``` -Session information -=================== +# Session information ```{r} sessionInfo() diff --git a/vignettes/pedigree_object.Rmd b/vignettes/pedigree_object.Rmd index 33c1f61e..db5dcb48 100644 --- a/vignettes/pedigree_object.Rmd +++ b/vignettes/pedigree_object.Rmd @@ -3,8 +3,8 @@ title: Pedigree object author: Terry Therneau, Elizabeth Atkinson, Louis Le Nézet date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes + BiocStyle::html_document: + toc: true toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | @@ -212,6 +212,7 @@ The minimal slots needed are : - $spouse$ a matrix of the spouses For more information on each object: + - `help(Ped)` - `help(Rel)` - `help(Scales)` @@ -258,7 +259,7 @@ informations to your individuals. ```{r, mcols} ped <- Pedigree(sampleped) -mcols(ped) +mcols(ped)[8:12] ## Add new columns as a threshold if identifiers of individuals superior ## to a given threshold for example mcols(ped)$idth <- ifelse(as.numeric(mcols(ped)$indId) < 200, "A", "B") @@ -302,18 +303,18 @@ plot(pedA, cex = 0.5) summary(pedA) ## Coerce it to a list -as.list(pedA) +as.list(pedA)[[1]][1:3] ## Shrink it to keep only the necessary information lst1_s <- shrink(pedA, max_bits = 10) plot(lst1_s$pedObj, cex = 0.5) ## Compute the kinship individuals matrix -kinship(pedA) +kinship(pedA)[1:10, 1:10] ## Get the useful individuals pedA <- useful_inds(pedA, informative = "AvAf") -as.data.frame(ped(pedA))["useful"] +as.data.frame(ped(pedA))["useful"][1:10,] ``` Session information diff --git a/vignettes/pedigree_plot_details.Rmd b/vignettes/pedigree_plot_details.Rmd index 6e0a8835..bb5293af 100644 --- a/vignettes/pedigree_plot_details.Rmd +++ b/vignettes/pedigree_plot_details.Rmd @@ -1,12 +1,11 @@ - --- title: Pedigree plotting details -author: TM Therneau, JP Sinnwell +author: TM Therneau, JP Sinnwell, Louis Le Nézet date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes - toc_depth: 3 + BiocStyle::html_document: + toc: true + toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | %\VignetteIndexEntry{Pedigree plotting details} @@ -19,14 +18,14 @@ Introduction The plotting function for Pedigrees has 5 tasks - 1. Gather information and check the data. An important step is the call - to align. - 2. Set up the plot region and size the symbols. The program wants to plot - circles and squares, so needs to understand the geometry of the paper, - Pedigree size, and text size to get the right shape and size symbols. - 3. Set up the plot and add the symbols for each subject - 4. Add connecting lines between spouses, and children with parents - 5. Create an invisible return value containing the locations. +1. Gather information and check the data. An important step is the call + to align. +2. Set up the plot region and size the symbols. The program wants to plot + circles and squares, so needs to understand the geometry of the paper, + Pedigree size, and text size to get the right shape and size symbols. +3. Set up the plot and add the symbols for each subject +4. Add connecting lines between spouses, and children with parents +5. Create an invisible return value containing the locations. Another task, not yet completely understood, and certainly not implemented, is how we might break a plot across multiple pages. @@ -36,10 +35,10 @@ Setup The new version of the plotting Pedigree function works in two step. - - **ped_to_plotdf()** create a dataframe from a Pedigree given containing - all the necessary information to plot all the elements of the Pedigree: - "polygons", "text", "segments", "arcs" - - **plot_from_df()** use a given dataframe and plot all the element given +- **ped_to_plotdf()** create a dataframe from a Pedigree given containing +all the necessary information to plot all the elements of the Pedigree: +"polygons", "text", "segments", "arcs" +- **plot_from_df()** use a given dataframe and plot all the element given The advantage of this two step method, is that all the plotting can be parralelised, each element can be customised by the user if necessary and @@ -50,10 +49,8 @@ family will be produced and the first one will be plotted. For more informations about those two functions, see the help page. -```{r, help} -help(ped_to_plotdf) -help(plot_fromdf) -``` +- `help(ped_to_plotdf)` +- `help(plot_fromdf)` Sizing =============== @@ -78,16 +75,16 @@ We should have at least 1/2 of `stemp2` space above and `stemp2` space below. The `stemp3` variable is the height of labels: users may use multi-line ones. Our constraints then are - 1. $(box height + label height) \times maxlev \le height$ : the boxes and - labels have to fit vertically - 2. $(box height) \times (maxlev + (maxlev-1)/2) \le height$ : at least 1/2 - a box of space between each row of boxes - 3. $(box width) \le stemp1$ in inches - 4. $(box width) \le 0.8$ unit in user coordinates, otherwise they appear - to touch - 5. User coordinates go from $min(xrange)- 1/2 box width$ to - $max(xrange) + 1/2 box width$. - 6. the box is square (in inches) +1. $(box height + label height) \times maxlev \le height$ : the boxes and + labels have to fit vertically +2. $(box height) \times (maxlev + (maxlev-1)/2) \le height$ : at least 1/2 + a box of space between each row of boxes +3. $(box width) \le stemp1$ in inches +4. $(box width) \le 0.8$ unit in user coordinates, otherwise they appear + to touch +5. User coordinates go from $min(xrange)- 1/2 box width$ to + $max(xrange) + 1/2 box width$. +6. the box is square (in inches) The first 3 of these are easy. The fourth comes into play only for very packed pedigrees. Assume that the box were the maximum size of .8 units, i.e., minimal @@ -141,7 +138,8 @@ Each polygon is named based on its shape ("square", "circle","diamond", "triangle"), the total number of division of the whole shape, and the position of the division to plot. -```{r, polygons, eval = FALSE} +```{r, polygons} +library(Pedixplorer) types <- c( "square_1_1", # Whole square "circle_2_1", # Semi circle first division From 1c3071ac1e3174e5481a758cefe559ebe6bbd954 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 19:34:40 +0100 Subject: [PATCH 100/111] Reduce printing in vignette --- vignettes/pedigree.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index ba0425c2..ae822f6f 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -513,7 +513,7 @@ plot it. ```{r, shrink1} set.seed(200) shrink1_b30 <- shrink(ped1, max_bits = 30) -print(shrink1_b30) +print(shrink1_b30[c(2:8)]) plot(shrink1_b30$pedObj) ``` @@ -525,7 +525,7 @@ setting, the method removes subjects $140$ then $141$. ```{r, shrink2} set.seed(10) shrink1_b25 <- shrink(ped1, max_bits = 25) -shrink1_b25 +print(shrink1_b25[c(2:8)]) plot(shrink1_b25$pedObj) ``` From 1fa2a6375281302305a4be103fda29372350e521 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 19:37:30 +0100 Subject: [PATCH 101/111] Improve vignettes --- DESCRIPTION | 2 +- vignettes/alignment_details.Rmd | 4 +- vignettes/kinship_details.Rmd | 8 +- vignettes/pedigree.Rmd | 490 ++++++++++++++-------------- vignettes/pedigree_object.Rmd | 13 +- vignettes/pedigree_plot_details.Rmd | 62 ++-- 6 files changed, 288 insertions(+), 291 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8e52b112..dec0f024 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 0.99.3 +Version: 0.99.4 Date: 2023-11-15 Title: Pedigree Functions Authors@R: c( diff --git a/vignettes/alignment_details.Rmd b/vignettes/alignment_details.Rmd index 32a14326..49ee0739 100644 --- a/vignettes/alignment_details.Rmd +++ b/vignettes/alignment_details.Rmd @@ -3,8 +3,8 @@ title: Pedigree alignment details author: TM Therneau date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes + BiocStyle::html_document: + toc: true toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | diff --git a/vignettes/kinship_details.Rmd b/vignettes/kinship_details.Rmd index 943427af..921242c3 100644 --- a/vignettes/kinship_details.Rmd +++ b/vignettes/kinship_details.Rmd @@ -3,8 +3,8 @@ title: Pedigree kinship() details author: TM Therneau date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes + BiocStyle::html_document: + toc: true toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | @@ -133,7 +133,7 @@ for backwards compatability with an older version of the routine. We give founders a fake parent of subject $n+1$ who is not related to anybody (even themself); it avoids some if-then-else constructions. -## Pedigree Object +## With a Pedigree object The method for a Pedigree object is an almost trivial modification. Since the mother and father are already indexed into the id list it has @@ -183,7 +183,7 @@ family/subject. library(Pedixplorer) data(sampleped) ped <- Pedigree(sampleped) -kinship(ped) +kinship(ped)[35:48, 35:48] ``` ## MakeKinship diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index b370d76d..ae822f6f 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -12,45 +12,48 @@ vignette: | %\VignetteIndexEntry{Pedixplorer Pedigree} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} +editor_options: + markdown: + wrap: 72 --- ```{r width_control, echo = FALSE} options(width = 100) ``` -Introduction -=============== +# Introduction -This document is a tutorial for the `Pedixplorer` package, with examples of -creating Pedigree objects and kinship matrices and other Pedigree utilities. +This document is a tutorial for the `Pedixplorer` package, with examples +of creating Pedigree objects and kinship matrices and other Pedigree +utilities. -The `Pedixplorer` package is an updated version of the [`Kinship2`](https://github.com/mayoverse/kinship2) package, -featuring a change in maintainer and repository from CRAN to Bioconductor -for continued development and support. +The `Pedixplorer` package is an updated version of the +[`Kinship2`](https://github.com/mayoverse/kinship2) package, featuring a +change in maintainer and repository from CRAN to Bioconductor for +continued development and support. -It contains the outines to handle family data with a Pedigree object. -The initial purpose was to create correlation structures that describe family -relationships such as kinship and identity-by-descent, which can be used to -model family data in mixed effects models, such as in the coxme function. -It also includes tools for Pedigree drawing and filtering which is focused -on producing compact layouts without intervention. -Recent additions include utilities to trim the Pedigree object with -various criteria, and kinship for the X chromosome. +It contains the routines to handle family data with a Pedigree object. +The initial purpose was to create correlation structures that describe +family relationships such as kinship and identity-by-descent, which can +be used to model family data in mixed effects models, such as in the +coxme function. It also includes tools for Pedigree drawing and +filtering which is focused on producing compact layouts without +intervention. Recent additions include utilities to trim the Pedigree +object with various criteria, and kinship for the X chromosome. -Suplementary vignettes are available to explain: +Supplementary vignettes are available to explain: -- The [Pedigree object]("pedigree_object.html") `vignette("Pedigree object", package = "Pedixplorer")` -- The [alignment algorithm]("alignment_details.html") used create the Pedigree -structure `vignette("Pedigree alignment details", package = "Pedixplorer")` -- The [kinship() algorithm]("kinship_details.html") -`vignette("Pedigree kinship() details", package = "Pedixplorer")` -- The [plotting algorithm]("pedigree_plot_details.html") used to plot the -Pedigree `vignette("Pedigree plotting details", package = "Pedixplorer")` +- The **$Pedigree$ object** `vignette("pedigree_object", package = "Pedixplorer")` +- The **alignment algorithm** used create the Pedigree structure + `vignette("alignment_details", package = "Pedixplorer")` +- The **kinship algorithm** `vignette("kinship_details", package = "Pedixplorer")` +- The **plotting algorithm** used to plot the Pedigree + `vignette("pedigree_plot_details", package = "Pedixplorer")` -Installation -=============== -The `Pedixplorer` package is available on Bioconductor and can be installed -with the following command: +# Installation + +The $Pedixplorer$ package is available on Bioconductor and can be +installed with the following command: ```{r BiocManager_install, eval = FALSE} if (!requireNamespace("BiocManager", quietly = TRUE)) { @@ -65,43 +68,41 @@ The package can then be loaded with the following command: library(Pedixplorer) ``` -The Pedigree S4 object -=================== +# The Pedigree S4 object -The Pedigree object is a list of dataframes that describe the family structure. -It contains the following components: +The $Pedigree$ object is a list of dataframes that describe the family +structure. It contains the following components: -- ped: a Ped object with the Pedigree information `help(Ped)`. -- rel: a Rel object with the relationship information `help(Rel)`. -- scales: a Scales object of 2 dataframe with the filling and borders -informations for the plot `help(Scales)`. -- hints: a Hints objects with 2 slots indicating the horder and the spouse to -organise the Pedigree structure `help(Hints)`. +- ped: a $Ped$ object with the Pedigree information `help(Ped)`. +- rel: a $Rel$ object with the relationship information `help(Rel)`. +- scales: a $Scales$ object of 2 dataframe with the filling and borders + informations for the plot `help(Scales)`. +- hints: a $Hints$ objects with 2 slots indicating the horder and the + spouse to organise the Pedigree structure `help(Hints)`. -Basic Usage -============= +# Basic Usage ## Example Data -Two datasets are provided within the Pedixplorer package: -+ minnbreast: 17 families from a breast cancer study -+ sampleped: two samplepedigrees, with 41 and 14 subjects +Two datasets are provided within the $Pedixplorer$ package: + minnbreast: +17 families from a breast cancer study + sampleped: two sample pedigrees, +with 41 and 14 subjects -This vignette uses the two pedigrees in ~sampleped~. -For more information on these datasets, see -`help(minnbreast)` and `help(sampleped)`. +This vignette uses the two pedigrees in $sampleped$. For more +information on these datasets, see `help(minnbreast)` and +`help(sampleped)`. ## Pedigree -First, we load $samplepe$ and look at some of the values -in the dataset, and create a *Pedigree* object using the -*Pedigree()* function. -This function automaticaly detect the necessary columns in the dataframe. -If necessary you can modify the columns names with *cols_ren*. -To create a Pedigree object, with multiple families, the dataframe just need -a family column in the *ped_df* dataframe. When this is the case, the famid -column will be pasted to the id of each individuals separated by an -underscore to create a unique id for each individual in the Pedigree object. +First, we load $sampleped$ and look at some of the values in the dataset, +and create a $Pedigree$ object using the `Pedigree()` function. This +function automaticaly detect the necessary columns in the dataframe. If +necessary you can modify the columns names with *cols_ren*. To create a +$Pedigree$ object, with multiple families, the dataframe just need a +family column in the *ped_df* dataframe. When this is the case, the +famid column will be pasted to the id of each individuals separated by +an underscore to create a unique id for each individual in the $Pedigree$ +object. ```{r, Pedigree_creation} data("sampleped") @@ -110,14 +111,13 @@ ped <- Pedigree(sampleped[c(3, 4, 10, 35, 36), ]) print(ped) ``` -For more information on the *Pedigree()* function, see `help(Pedigree)`. +For more information on the `Pedigree()` function, see `help(Pedigree)`. -The Pedigree object can be subset to individual pedigrees -by their family id. The Pedigree object has a print, summary and plot method, -which we show below. -The print method prints the Ped and Rel object of the Pedigree. -The summary method prints a short summary of the Pedigree. -Finally the plot method displays the Pedigree. +The $Pedigree$ object can be subset to individual pedigrees by their +family id. The $Pedigree$ object has a print, summary and plot method, +which we show below. The print method prints the $Ped$ and $Rel$ object of +the pedigree. The summary method prints a short summary of the pedigree. +Finally the plot method displays the pedigree. ```{r, ped1} ped <- Pedigree(sampleped) @@ -133,23 +133,22 @@ You can add a title and a legend to the plot with the following command: plot(ped1, title = "Pedigree 1", legend = TRUE, leg_loc = c(5, 15, 4.5, 5)) ``` -Fixing Pedigree Issues -======================= +# Fixing Pedigree Issues -To "break" the Pedigree, we can manipulate the sex value to not match the -parent value (in this example, we change $203$ from a male to a female, -even though $203$ is a father). To do this, we first subset ~datped2~, -locate the *id* column, and match it to a specific id (in this case, $203$). -Within id $203$, then locate in the *sex* column. +To "break" the pedigree, we can manipulate the sex value to not match +the parent value (in this example, we change $203$ from a male to a +female, even though $203$ is a father). To do this, we first subset +$datped2$, locate the *id* column, and match it to a specific id (in +this case, $203$). Within id $203$, then locate in the *sex* column. Assign this subset to the incorrect value of *2* (female) to change the original/correct value of *1* (male). -To further break the Pedigree, we can delete subjects who seem irrelevant to -the Pedigree (in this example, we delete $209$ because he is a married-in -father). -To do this, we subset ~datped2~ and use the *-which()* function to locate and -delete the specified subject (in this case, $209$). Reassign this code to -~datped22~ to drop the specified subject entirely. +To further break the pedigree, we can delete subjects who seem +irrelevant to the pedigree (in this example, we delete $209$ because he +is a married-in father). To do this, we subset $datped2$ and use the +*-which()* function to locate and delete the specified subject (in this +case, $209$). Reassign this code to $datped22$ to drop the specified +subject entirely. ```{r, datped2} datped2 <- sampleped[sampleped$famid == 2, ] @@ -157,11 +156,11 @@ datped2[datped2$id %in% 203, "sex"] <- 2 datped2 <- datped2[-which(datped2$id %in% 209), ] ``` -An error occurs when the *Pedigree()* function notices that id $203$ is not -coded to be male (*1*) but is a father. To correct this, we simply employ the -*fix_parents()* function to adjust the *sex* value to match either *momid* -or *dadid*. *fix_parents()* will also add back in any deleted subjects, -further fixing the Pedigree. +An error occurs when the `Pedigree()` function notices that id $203$ is +not coded to be male (*1*) but is a father. To correct this, we simply +employ the `fix_parents()` function to adjust the *sex* value to match +either *momid* or *dadid*. `fix_parents()` will also add back in any +deleted subjects, further fixing the Pedigree. ```{r, fixped2} tryout <- try({ @@ -173,47 +172,46 @@ ped2 <- Pedigree(fixped2) plot(ped2) ``` -If the fix is straightforward (changing one sex value based on either being -a mother or father), *fix_parents()* will resolve the issue. If the issue is -more complicated, say if $203$ is coded to be both a father *and* a mother, -*fix_parents()* will not know which one is correct and therefore the issue -will not be resolved. +If the fix is straightforward (changing one sex value based on either +being a mother or father), `fix_parents()` will resolve the issue. If +the issue is more complicated, say if $203$ is coded to be both a father +and a mother, `fix_parents()` will not know which one is correct and +therefore the issue will not be resolved. -Kinship -============== +# Kinship -A common use for pedigrees is to make a matrix of kinship coefficients that -can be used in mixed effect models. A kinship coefficient is the probability -that a randomly selected allele from two people at a given locus will be -identical by descent (IBD), assuming all founder alleles are independent. -For example, we each have two alleles per autosomal marker, so sampling two -alleles with replacement from our own DNA has only $p=0.50$ probability of -getting the same allele twice. +A common use for pedigrees is to make a matrix of kinship coefficients +that can be used in mixed effect models. A kinship coefficient is the +probability that a randomly selected allele from two people at a given +locus will be identical by descent (IBD), assuming all founder alleles +are independent. For example, we each have two alleles per autosomal +marker, so sampling two alleles with replacement from our own DNA has +only $p=0.50$ probability of getting the same allele twice. ## Kinship for Pedigree object -We use `kinship()` to calculate the kinship matrix for $ped2$. The -result is a special symmetrix matrix class from the -[Matrix R package](https://CRAN.R-project.org/package=Matrix/), -which is stored efficiently to avoid repeating elements. +We use `kinship()` to calculate the kinship matrix for $ped2$. The +result is a special symmetrix matrix class from the [Matrix R +package](https://CRAN.R-project.org/package=Matrix/), which is stored +efficiently to avoid repeating elements. ```{r, calc_kinship} kin2 <- kinship(ped2) kin2[1:9, 1:9] ``` -For family 2, see that the row and column names match the id in -the figure below, and see that each kinship coefficient with -themselves is $0.50$, siblings are $0.25$ (e.g. $204-205$), and Pedigree -marry-ins only share alleles IBD with their children with coefficient $0.25$ -(e.g. $203-210$). The plot can be used to verify other kinship coefficients. +For family 2, see that the row and column names match the id in the +figure below, and see that each kinship coefficient with themselves is +$0.50$, siblings are $0.25$ (e.g. $204-205$), and pedigree marry-ins +only share alleles IBD with their children with coefficient $0.25$ (e.g. +$203-210$). The plot can be used to verify other kinship coefficients. ## Kinship for Pedigree with multiple families -The kinship function also works on a *Pedigree* object with multiple families. -We show how to create the kinship matrix, then -show a snapshot of them for the two families, where the row and columns names -are the ids of the subject. +The `kinship()` function also works on a $Pedigree$ object with multiple +families. We show how to create the kinship matrix, then show a snapshot +of them for the two families, where the row and columns names are the +ids of the subject. ```{r, kin_all} ped <- Pedigree(sampleped) @@ -227,14 +225,13 @@ kin_all[42:46, 42:46] Specifying twin relationships in a Pedigree with multiple families object is complicated by the fact that the user must specify the family -id to which the ~id1~ and ~id2~ belong. -We show below the relation matrix requires the family id to be in the last -column, with the column names as done below, to make the plotting and -kinship matrices to show up with the monozygotic twins correctly. -We show how to specify monozygosity for subjects 206 and 207 in -samplePedigree 2, and subjects 125 and 126 in Pedigree 1. -We check it by looking at the kinship matrix for these pairs, -which are correctly at $0.5$. +id to which the *id1* and *id2* belong. We show below the relation +matrix requires the family id to be in the last column, with the column +names as done below, to make the plotting and kinship matrices to show +up with the monozygotic twins correctly. We show how to specify +monozygosity for subjects $206$ and $207$ in $ped2$, and subjects +$125$ and $126$ in $ped1$. We check it by looking at the kinship matrix +for these pairs, which are correctly at $0.5$. ```{r, kin_twins} reltwins <- as.data.frame(rbind(c(206, 207, 1, 2), c(125, 126, 1, 1))) @@ -246,23 +243,23 @@ kin_all[24:27, 24:27] kin_all[46:50, 46:50] ``` -Note that subject $113$ is not in Pedigree 1 because they -are a marry-in without children in the Pedigree. Subject $113$ is in their own -Pedigree of size 1 in the $kin_all$ matrix at index $41$. We later show how -to handle such marry-ins for plotting. +Note that subject $113$ is not in $ped1$ because they are a marry-in +without children in the $Pedigree$. Subject $113$ is in their own $Pedigree$ +of size 1 in the $kin_all$ matrix at index $41$. We later show how to +handle such marry-ins for plotting. -Optional Pedigree Informations -=============================== +# Optional Pedigree Informations -We use Pedigree 2 from $sampleped$ to sequentially -add optional information to the Pedigree object. +We use $ped2$ from $sampleped$ to sequentially add optional +information to the $Pedigree$ object. ## Status -The example below shows how to specify a $status$ indicator, such as -vital status. The $sampleped$ data does not include such an -indicator, so we create one to indicate that the first generation of -Pedigree 2, subjects 1 and 2, are deceased. The $status$ indicator -is used to cross out the individuals in the Pedigree plot. + +The example below shows how to specify a $status$ indicator, such as +vital status. The $sampleped$ data does not include such an\ +indicator, so we create one to indicate that the first generation of +$ped2$, subjects $1$ and $2$, are deceased. The $status$ indicator is +used to cross out the individuals in the Pedigree plot. ```{r, status} df2 <- sampleped[sampleped$famid == 2, ] @@ -275,11 +272,13 @@ plot(ped2) ## Labels -Here we show how to use the $label$ argument in the plot method to add -additional information under each subject. In the example below, we add -names to the existing plot by adding a new column to the *ped* dataframe. -As space permits, more lines and characters per line can be made using the -a {/em \n} character to indicate a new line. +Here we show how to use the $label$ argument in the plot method to add +additional information under each subject. In the example below, we add +names to the existing plot by adding a new column to the $elementMetadata$ +of the $Ped$ object of the $Pedigree$. + +As space permits, more lines and characters per line can be +made using the a {/em \n} character to indicate a new line. ```{r, labels} mcols(ped2)$Names <- c( @@ -290,17 +289,16 @@ mcols(ped2)$Names <- c( plot(ped2, label = "Names") ``` - ## Affected Indicators -We show how to specify affected status with a single indicator and -multiple indicators. First, we use the affected indicator from -$sampleped$, which contains 0/1 indicators and NA as missing, and let it -it indicate blue eyes. Next, we create a vector as an indicator for baldness. -And add it as a second filling scale for the plot with -*generate_colors(add_to_scale = TRUE)*. -The plot shapes for each subject is therefore divided into two equal parts and -shaded differently to indicate the two affected indicators. +We show how to specify affected status with a single indicator and +multiple indicators. First, we use the affected indicator from +$sampleped$, which contains $0$/$1$ indicators and $NA$ as missing, and let it +it indicate blue eyes. Next, we create a vector as an indicator for +baldness. And add it as a second filling scale for the plot with +`generate_colors(add_to_scale = TRUE)`. The plot shapes for each subject +is therefore divided into two equal parts and shaded differently to +indicate the two affected indicators. ```{r, two_affection} mcols(ped2)$bald <- as.factor(c(0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1)) @@ -310,20 +308,26 @@ plot(ped2, legend = TRUE) ## Special Relationships -Special Pedigree relationships can be specified in a matrix -as the $relation$ argument. There are 4 relationships that can -be specified by numeric codes: 1=Monozygotic twins, 2=Dizygotic twins, -3=twins of unknown zygosity, and 4=Spouse. The spouse relationship can -indicate a marry-in when a couple does not have children together. +Special pedigree relationships can be specified in a matrix as the +$relation$ argument. There are 4 relationships that can be specified by +numeric codes: + +- 1 = Monozygotic twins +- 2 = Dizygotic twins +- 3 = twins of unknown zygosity +- 4 = Spouse + +The spouse relationship can indicate a +marry-in when a couple does not have children together. ### Twins -Below, we create a matrix of relationships for monozygotic and -unknown-zygosity twins in the most recent generation of Pedigree 2. -The twin relationships are both represented with -diverging lines from a single point. The monozygotic twins have an -additional line connecting the diverging lines, while the other twins have -a question mark to indicate unknown zygosity. +Below, we create a matrix of relationships for monozygotic and +unknown-zygosity twins in the most recent generation of $ped2$. The +twin relationships are both represented with diverging lines from a +single point. The monozygotic twins have an additional line connecting +the diverging lines, while the other twins have a question mark to +indicate unknown zygosity. ```{r, twins} ## create twin relationships @@ -339,19 +343,18 @@ plot(ped2) ### Inbreeding -Another special relationship is inbreeding. Inbreeding of founders implies -the founders' parents are related (the maternal and paternal genes descended -from a single ancestral gene). -One thing we can do is add more people to the Pedigree to show this inbreeding. +Another special relationship is inbreeding. Inbreeding of founders +implies the founders' parents are related (the maternal and paternal +genes descended from a single ancestral gene). One thing we can do is +add more people to the pedigree to show this inbreeding. -To show that a pair of founders (subjects $201$ and $202$) are inbred, we -must show that their parents are siblings. -To do this, we create subjects $197$ and $198$ to be the parents of $201$ -and also create subjects $199$ and $200$ to be the parents of $202$. -To make subjects $198$ and $199$ siblings, we give *them* the same parents, -creating subjects $195$ and $196$. -This results in subjects $201$ and $202$ being first cousins, and therefore -inbred. +To show that a pair of founders (subjects $201$ and $202$) are inbred, +we must show that their parents are siblings. To do this, we create +subjects $197$ and $198$ to be the parents of $201$ and also create +subjects $199$ and $200$ to be the parents of $202$. To make subjects +$198$ and $199$ siblings, we give them the same parents, creating +subjects $195$ and $196$. This results in subjects $201$ and $202$ being +first cousins, and therefore inbred. ```{r, inbreeding} indid <- 195:202 @@ -371,9 +374,9 @@ plot(ped4) ### Marry-ins Spouse with no child can also be specified with the $rel_df$ argument by -setting the code value to "Spouse" or "4". -If we use the Pedigree 2 from earlier and add a new spouse relationship -between the individuals $212$ and $211$ we get the following plot. +setting the code value to $Spouse$ or $4$. If we use the $ped2$ from +earlier and add a new spouse relationship between the individuals $212$ +and $211$ we get the following plot. ```{r, spouse} ## create twin relationships @@ -388,20 +391,19 @@ rel(ped2) <- upd_famid_id(new_rel) plot(ped2) ``` -Pedigree Plot Details -=========================== +# Pedigree Plot Details -The plot method attempts to adhere to many standards -in Pedigree plotting, as presented by -[Bennet et al. 2008](https://pubmed.ncbi.nlm.nih.gov/18792771/). +The plot method attempts to adhere to many standards in pedigree +plotting, as presented by [Bennet et al. +2008](https://pubmed.ncbi.nlm.nih.gov/18792771/). -To show some other tricks with Pedigree plotting, we use Pedigree 1 -from ~sampleped~, which has 41 subjects in 4 generations, including a -generation with double first cousins. After the first marriage of $114$, they -remarried subject $113$ without children between them. If we do not -specify the marriage with the $relation$ argument, the plot method excludes -subject $113$ from the plot. The basic plot of Pedigree 1 is shown -in the figure below. +To show some other tricks with pedigree plotting, we use $ped1$ from +$sampleped$, which has 41 subjects in 4 generations, including a +generation with double first cousins. After the first marriage of $114$, +they remarried subject $113$ without children between them. If we do not +specify the marriage with the $relation$ argument, the plot method +excludes subject $113$ from the plot. The basic plot of $ped1$ is +shown in the figure below. ```{r, plotped1} df1 <- sampleped[sampleped$famid == 1, ] @@ -417,11 +419,12 @@ plot(ped1) ## Align by Input Order -The plot method does a decent job aligning subjects given the order of the -subjects when the Pedigree object is made, and sometimes has to make two -copies of a subject. If we change the order of the subjects when creating -the Pedigree, we can help the plot method reduce the need to duplicate -subjects, as Figure~\ref{reordPed1} no longer has subject $110$ duplicated. +The plot method does a decent job aligning subjects given the order of +the subjects when the Pedigree object is made, and sometimes has to make +two copies of a subject. If we change the order of the subjects when +creating the Pedigree, we can help the plot method reduce the need to +duplicate subjects, as Figure\~\ref{reordPed1} no longer has subject +$110$ duplicated. ```{r, ordering} df1reord <- df1[c(35:41, 1:34), ] @@ -431,8 +434,8 @@ plot(ped1reord) ## Modify the scales -You can modify the colors of each modality used for the filling as well as -for the bordering by modifying the Scales data.frame. +You can modify the colors of each modality used for the filling as well +as for the bordering by modifying the $Scales$ data.frame. To do so you can do as follow: @@ -445,16 +448,15 @@ border(ped1)$border <- c("red", "black", "orange") plot(ped1, legend = TRUE) ``` -Pedigree Utility Functions -================================= +# Pedigree Utility Functions -## Pedigree as a data.frame +## Ped as a data.frame -A main features of a Pedigree object are vectors with an element -for each subject. It is sometimes useful to extract these vectors from -the Pedigree object into a $data.frame$ with basic information that can -be used to construct a new Pedigree object. This is possible with the -$as.data.frame()$ method, as shown below. +A main features of a Pedigree object are vectors with an element for +each subject. It is sometimes useful to extract these vectors from the +Pedigree object into a $data.frame$ with basic information that can be +used to construct a new $Pedigree$ object. This is possible with the +`as.data.frame()` method, as shown below. ```{r, ped2df, eval = FALSE} dfped2 <- as.data.frame(ped(ped2)) @@ -463,13 +465,13 @@ dfped2 ## Subsetting and Trimming -Pedigrees with large size can be a bottleneck for programs that run -calculations on them. The Pedixplorer package contains some routines to -identify which subjects to remove. We show how a subject -(e.g. subject 210) can be removed from -~ped2~, and how the Pedigree object is changed by verifying that the -~relation~ dataframe no longer has the twin relationship between subjects -210 and 211, as indicated by $id1$ and ~id2~. +Pedigrees with large size can be a bottleneck for programs that run +calculations on them. The Pedixplorer package contains some routines to +identify which subjects to remove. We show how a subject (e.g. subject +210) can be removed from ~ped2~, and how the Pedigree object is changed +by verifying that the ~relation~ dataframe no longer has the twin +relationship between subjects 210 and 211, as indicated by $id1$ and +~id2~. ```{r, subset} ped2_rm210 <- ped2[-10] @@ -477,11 +479,12 @@ rel(ped2_rm210) rel(ped2) ``` -The steps above also works by the ~id~ of the subjects themselves. -We provide *subset()*, which trims subjects from a Pedigree by -their $id$ or other argument. Below is an example of removing subject 110, as done above, -then we further trim the Pedigree by a vector of subject ids. We check the -trimming by looking at the $id$ vector and the $relation$ matrix. +The steps above also works by the ~id~ of the subjects themselves.\ +We provide *subset()*, which trims subjects from a Pedigree by their +$id$ or other argument. Below is an example of removing subject 110, as +done above, then we further trim the Pedigree by a vector of subject +ids. We check the trimming by looking at the $id$ vector and the +$relation$ matrix. ```{r, subset_more} ped2_trim210 <- subset(ped2, "2_210", keep = FALSE) @@ -492,53 +495,49 @@ id(ped(ped2_trim_more)) rel(ped2_trim_more) ``` -Shrinking -============== +# Shrinking -An additional function in Pedixplorer is *shrink()*, which shrinks a Pedigree -to a specified bit size while maintaining the maximal amount of -information for genetic linkage and association studies. Using an indicator -for availability and affected status, it removes subjects in this order: - + unavailable with no available descendants - + available and are not parents - + available who have missing affected status - + available who are unaffected - + available who are affected +An additional function in Pedixplorer is *shrink()*, which shrinks a +Pedigree to a specified bit size while maintaining the maximal amount of +information for genetic linkage and association studies. Using an +indicator for availability and affected status, it removes subjects in +this order: + unavailable with no available descendants + available and +are not parents + available who have missing affected status + available +who are unaffected + available who are affected -We show how to shrink Pedigree 1 to bit size $30$, which happens -to be the bit size after removing only the unavailable subjects. We show how -to extract the shrunken Pedigree object from the $shrink$ result, -and plot it. +We show how to shrink Pedigree 1 to bit size $30$, which happens to be +the bit size after removing only the unavailable subjects. We show how +to extract the shrunken Pedigree object from the $shrink$ result, and +plot it. ```{r, shrink1} set.seed(200) shrink1_b30 <- shrink(ped1, max_bits = 30) -print(shrink1_b30) +print(shrink1_b30[c(2:8)]) plot(shrink1_b30$pedObj) ``` -Now shrink Pedigree 1 to bit size $25$, which requires removing -subjects who are informative. If there is a tie between multiple subjects -about who to remove, the method randomly chooses one of them. With this -seed setting, the method removes subjects $140$ then $141$. +Now shrink Pedigree 1 to bit size $25$, which requires removing subjects +who are informative. If there is a tie between multiple subjects about +who to remove, the method randomly chooses one of them. With this seed +setting, the method removes subjects $140$ then $141$. ```{r, shrink2} set.seed(10) shrink1_b25 <- shrink(ped1, max_bits = 25) -shrink1_b25 +print(shrink1_b25[c(2:8)]) plot(shrink1_b25$pedObj) ``` -Select Unrelateds -======================= +# Select Unrelateds -In this section we briefly show how to use $unrelated$ to find -a set of the maximum number of unrelated available subjects from a Pedigree. -The input required is a Pedigree object and a vector indicating availability. -In some Pedigrees there are numerous sets of subjects that satisfy the maximum -number of unrelateds, so the method randomly chooses from the set. We -show two sets of subject ids that are selected by the routine and discuss -below. +In this section we briefly show how to use $unrelated$ to find a set of +the maximum number of unrelated available subjects from a Pedigree. The +input required is a Pedigree object and a vector indicating +availability. In some Pedigrees there are numerous sets of subjects that +satisfy the maximum number of unrelateds, so the method randomly chooses +from the set. We show two sets of subject ids that are selected by the +routine and discuss below. ```{r, unrelateds} ped2 <- Pedigree(df2) @@ -549,14 +548,14 @@ set2 <- unrelated(ped2) set2 ``` -We can easily verify the sets selected by $unrelated$ by -referring to Figure~\ref{fixped} and see that subjects $203$ and $206$ are -unrelated to everyone else in the Pedigree except their children. Furthermore, -we see in df2 that of these two, only subject 203 is available. Therefore, -any set of unrelateds who are available must include subject -203 and one of the these subjects: 201, 204, 206, 207, 212, -and 214, as indicated by the kinship matrix for Pedigree 2 subset to those -with availability status of 1. +We can easily verify the sets selected by $unrelated$ by referring to +Figure\~\ref{fixped} and see that subjects $203$ and $206$ are unrelated +to everyone else in the Pedigree except their children. Furthermore, we +see in df2 that of these two, only subject 203 is available. Therefore, +any set of unrelateds who are available must include subject 203 and one +of the these subjects: 201, 204, 206, 207, 212, and 214, as indicated by +the kinship matrix for Pedigree 2 subset to those with availability +status of 1. ```{r, unrelkin} df2 @@ -564,8 +563,7 @@ is_avail <- df2$id[df2$avail == 1] kin2[is_avail, is_avail] ``` -Session information -=================== +# Session information ```{r} sessionInfo() diff --git a/vignettes/pedigree_object.Rmd b/vignettes/pedigree_object.Rmd index 33c1f61e..db5dcb48 100644 --- a/vignettes/pedigree_object.Rmd +++ b/vignettes/pedigree_object.Rmd @@ -3,8 +3,8 @@ title: Pedigree object author: Terry Therneau, Elizabeth Atkinson, Louis Le Nézet date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes + BiocStyle::html_document: + toc: true toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | @@ -212,6 +212,7 @@ The minimal slots needed are : - $spouse$ a matrix of the spouses For more information on each object: + - `help(Ped)` - `help(Rel)` - `help(Scales)` @@ -258,7 +259,7 @@ informations to your individuals. ```{r, mcols} ped <- Pedigree(sampleped) -mcols(ped) +mcols(ped)[8:12] ## Add new columns as a threshold if identifiers of individuals superior ## to a given threshold for example mcols(ped)$idth <- ifelse(as.numeric(mcols(ped)$indId) < 200, "A", "B") @@ -302,18 +303,18 @@ plot(pedA, cex = 0.5) summary(pedA) ## Coerce it to a list -as.list(pedA) +as.list(pedA)[[1]][1:3] ## Shrink it to keep only the necessary information lst1_s <- shrink(pedA, max_bits = 10) plot(lst1_s$pedObj, cex = 0.5) ## Compute the kinship individuals matrix -kinship(pedA) +kinship(pedA)[1:10, 1:10] ## Get the useful individuals pedA <- useful_inds(pedA, informative = "AvAf") -as.data.frame(ped(pedA))["useful"] +as.data.frame(ped(pedA))["useful"][1:10,] ``` Session information diff --git a/vignettes/pedigree_plot_details.Rmd b/vignettes/pedigree_plot_details.Rmd index 6e0a8835..bb5293af 100644 --- a/vignettes/pedigree_plot_details.Rmd +++ b/vignettes/pedigree_plot_details.Rmd @@ -1,12 +1,11 @@ - --- title: Pedigree plotting details -author: TM Therneau, JP Sinnwell +author: TM Therneau, JP Sinnwell, Louis Le Nézet date: '`r format(Sys.time(),"%d %B, %Y")`' output: - rmarkdown::html_vignette: - toc: yes - toc_depth: 3 + BiocStyle::html_document: + toc: true + toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | %\VignetteIndexEntry{Pedigree plotting details} @@ -19,14 +18,14 @@ Introduction The plotting function for Pedigrees has 5 tasks - 1. Gather information and check the data. An important step is the call - to align. - 2. Set up the plot region and size the symbols. The program wants to plot - circles and squares, so needs to understand the geometry of the paper, - Pedigree size, and text size to get the right shape and size symbols. - 3. Set up the plot and add the symbols for each subject - 4. Add connecting lines between spouses, and children with parents - 5. Create an invisible return value containing the locations. +1. Gather information and check the data. An important step is the call + to align. +2. Set up the plot region and size the symbols. The program wants to plot + circles and squares, so needs to understand the geometry of the paper, + Pedigree size, and text size to get the right shape and size symbols. +3. Set up the plot and add the symbols for each subject +4. Add connecting lines between spouses, and children with parents +5. Create an invisible return value containing the locations. Another task, not yet completely understood, and certainly not implemented, is how we might break a plot across multiple pages. @@ -36,10 +35,10 @@ Setup The new version of the plotting Pedigree function works in two step. - - **ped_to_plotdf()** create a dataframe from a Pedigree given containing - all the necessary information to plot all the elements of the Pedigree: - "polygons", "text", "segments", "arcs" - - **plot_from_df()** use a given dataframe and plot all the element given +- **ped_to_plotdf()** create a dataframe from a Pedigree given containing +all the necessary information to plot all the elements of the Pedigree: +"polygons", "text", "segments", "arcs" +- **plot_from_df()** use a given dataframe and plot all the element given The advantage of this two step method, is that all the plotting can be parralelised, each element can be customised by the user if necessary and @@ -50,10 +49,8 @@ family will be produced and the first one will be plotted. For more informations about those two functions, see the help page. -```{r, help} -help(ped_to_plotdf) -help(plot_fromdf) -``` +- `help(ped_to_plotdf)` +- `help(plot_fromdf)` Sizing =============== @@ -78,16 +75,16 @@ We should have at least 1/2 of `stemp2` space above and `stemp2` space below. The `stemp3` variable is the height of labels: users may use multi-line ones. Our constraints then are - 1. $(box height + label height) \times maxlev \le height$ : the boxes and - labels have to fit vertically - 2. $(box height) \times (maxlev + (maxlev-1)/2) \le height$ : at least 1/2 - a box of space between each row of boxes - 3. $(box width) \le stemp1$ in inches - 4. $(box width) \le 0.8$ unit in user coordinates, otherwise they appear - to touch - 5. User coordinates go from $min(xrange)- 1/2 box width$ to - $max(xrange) + 1/2 box width$. - 6. the box is square (in inches) +1. $(box height + label height) \times maxlev \le height$ : the boxes and + labels have to fit vertically +2. $(box height) \times (maxlev + (maxlev-1)/2) \le height$ : at least 1/2 + a box of space between each row of boxes +3. $(box width) \le stemp1$ in inches +4. $(box width) \le 0.8$ unit in user coordinates, otherwise they appear + to touch +5. User coordinates go from $min(xrange)- 1/2 box width$ to + $max(xrange) + 1/2 box width$. +6. the box is square (in inches) The first 3 of these are easy. The fourth comes into play only for very packed pedigrees. Assume that the box were the maximum size of .8 units, i.e., minimal @@ -141,7 +138,8 @@ Each polygon is named based on its shape ("square", "circle","diamond", "triangle"), the total number of division of the whole shape, and the position of the division to plot. -```{r, polygons, eval = FALSE} +```{r, polygons} +library(Pedixplorer) types <- c( "square_1_1", # Whole square "circle_2_1", # Semi circle first division From 709f2d1a3e53bd944ef6ff1d5c9ea4ffae692747 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 20:11:39 +0100 Subject: [PATCH 102/111] Add control to descendants idlist --- R/descendants.R | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/R/descendants.R b/R/descendants.R index 24a4fe57..8b362603 100644 --- a/R/descendants.R +++ b/R/descendants.R @@ -31,6 +31,14 @@ setMethod("descendants", function(idlist, obj, dadid, momid) { id <- as.character(obj) idlist <- as.character(idlist) + + if (any(!idlist %in% id)) { + stop( + "All individuals in idlist should be in id ", + idlist[!idlist %in% id] + ) + } + dadid <- as.character(dadid) momid <- as.character(momid) child <- id[!( From 4689f937fbacd8f6c6a2f285e4cdd8fd5730a695 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 20:12:15 +0100 Subject: [PATCH 103/111] Update id with famid when setting it --- R/AllAccessors.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/AllAccessors.R b/R/AllAccessors.R index 8663601e..3d43a638 100644 --- a/R/AllAccessors.R +++ b/R/AllAccessors.R @@ -193,6 +193,7 @@ setMethod("famid<-", ) } x@famid <- as.character(value) + x <- upd_famid_id(x) validObject(x) x } @@ -646,6 +647,7 @@ setMethod("famid<-", ) } x@famid <- as.character(value) + x <- upd_famid_id(x) validObject(x) x } From a3c80e34fd4d9c5e15947f2523fba449ce17820f Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 20:12:36 +0100 Subject: [PATCH 104/111] Increase version for push --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index dec0f024..e0d057a2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 0.99.4 +Version: 0.99.5 Date: 2023-11-15 Title: Pedigree Functions Authors@R: c( From 4e8a67f6791ff0894de91f2e6ec1118c28a8e2a1 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 16 Jan 2024 11:33:28 +0100 Subject: [PATCH 105/111] Rename vignette for ordering and add tutorial in title --- vignettes/pedigree.Rmd | 2 +- vignettes/{alignment_details.Rmd => pedigree_alignment.Rmd} | 0 vignettes/{kinship_details.Rmd => pedigree_kinship.Rmd} | 0 vignettes/{pedigree_plot_details.Rmd => pedigree_plot.Rmd} | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename vignettes/{alignment_details.Rmd => pedigree_alignment.Rmd} (100%) rename vignettes/{kinship_details.Rmd => pedigree_kinship.Rmd} (100%) rename vignettes/{pedigree_plot_details.Rmd => pedigree_plot.Rmd} (100%) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 0f75528f..8c1b0055 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -1,5 +1,5 @@ --- -title: "Pedixplorer Pedigree" +title: "Pedixplorer tutorial" author: "Louis Le Nézet" date: "31/08/2023" url: "https://github.com/LouisLeNezet/Pedixplorer" diff --git a/vignettes/alignment_details.Rmd b/vignettes/pedigree_alignment.Rmd similarity index 100% rename from vignettes/alignment_details.Rmd rename to vignettes/pedigree_alignment.Rmd diff --git a/vignettes/kinship_details.Rmd b/vignettes/pedigree_kinship.Rmd similarity index 100% rename from vignettes/kinship_details.Rmd rename to vignettes/pedigree_kinship.Rmd diff --git a/vignettes/pedigree_plot_details.Rmd b/vignettes/pedigree_plot.Rmd similarity index 100% rename from vignettes/pedigree_plot_details.Rmd rename to vignettes/pedigree_plot.Rmd From e71ceb0a6e9cb10bd731bbf5049b86c5d74328c9 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 16 Jan 2024 11:40:03 +0100 Subject: [PATCH 106/111] Change names vignettes --- R/align.R | 2 +- R/alignped3.R | 4 ++-- tests/testthat/test-align.R | 2 +- vignettes/pedigree.Rmd | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/R/align.R b/R/align.R index b4513e7c..88a1f8b5 100644 --- a/R/align.R +++ b/R/align.R @@ -56,7 +56,7 @@ ancestors <- function(idx, momx, dadx) { #' list returned. #' #' For more information you can read the associated vignette: -#' `vignette("alignment_details")`. +#' `vignette("pedigree_alignment")`. #' #' @param obj A Pedigree object #' @param packed Should the Pedigree be compressed. diff --git a/R/alignped3.R b/R/alignped3.R index 738907a5..31b0f0b4 100644 --- a/R/alignped3.R +++ b/R/alignped3.R @@ -26,8 +26,8 @@ #' #' Now merge the two trees. Start at the top level and work down. #' -#' @param alt1 Alignement of the first tree -#' @param alt2 Alignement of the second tree +#' @param alt1 Alignment of the first tree +#' @param alt2 Alignment of the second tree #' @param space Space between two subjects #' @inheritParams align #' diff --git a/tests/testthat/test-align.R b/tests/testthat/test-align.R index 0853e00a..fb724e52 100644 --- a/tests/testthat/test-align.R +++ b/tests/testthat/test-align.R @@ -97,7 +97,7 @@ test_that("besthint works", { expect_snapshot(plist) }) -test_that("Alignement with spouse", { +test_that("Alignment with spouse", { data(sampleped) df1 <- sampleped[sampleped$famid == 1, ] relate1 <- data.frame( diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 49e40e06..9e1163e4 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -45,10 +45,10 @@ Supplementary vignettes are available to explain: - The **$Pedigree$ object** `vignette("pedigree_object", package = "Pedixplorer")` - The **alignment algorithm** used create the Pedigree structure - `vignette("alignment_details", package = "Pedixplorer")` -- The **kinship algorithm** `vignette("kinship_details", package = "Pedixplorer")` + `vignette("pedigree_alignment", package = "Pedixplorer")` +- The **kinship algorithm** `vignette("pedigree_kinship", package = "Pedixplorer")` - The **plotting algorithm** used to plot the Pedigree - `vignette("pedigree_plot_details", package = "Pedixplorer")` + `vignette("pedigree_plot", package = "Pedixplorer")` # Installation From d40e20aaafcc7524261e8f903680fa1cdcba22a6 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 16 Jan 2024 12:04:29 +0100 Subject: [PATCH 107/111] Correct line size in vignettes, change number version and update documentation --- DESCRIPTION | 2 +- man/Pedixplorer_package.Rd | 1 + man/align.Rd | 2 +- man/alignped3.Rd | 4 ++-- vignettes/pedigree.Rmd | 6 ++++-- vignettes/pedigree_object.Rmd | 3 ++- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index e0d057a2..652f9ba5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 0.99.5 +Version: 0.99.6 Date: 2023-11-15 Title: Pedigree Functions Authors@R: c( diff --git a/man/Pedixplorer_package.Rd b/man/Pedixplorer_package.Rd index 75e928d1..4b3a607d 100644 --- a/man/Pedixplorer_package.Rd +++ b/man/Pedixplorer_package.Rd @@ -65,6 +65,7 @@ library(Pedixplorer) \seealso{ Useful links: \itemize{ + \item \url{https://github.com/LouisLeNezet/Pedixplorer} \item Report bugs at \url{https://github.com/LouisLeLezet/Pedixplorer/issues} } diff --git a/man/align.Rd b/man/align.Rd index e80b7f73..a5494a3c 100644 --- a/man/align.Rd +++ b/man/align.Rd @@ -89,7 +89,7 @@ is called once for each family, and the results are combined in the list returned. For more information you can read the associated vignette: -\code{vignette("alignment_details")}. +\code{vignette("pedigree_alignment")}. } \examples{ data(sampleped) diff --git a/man/alignped3.Rd b/man/alignped3.Rd index ca89b3f9..f1da616c 100644 --- a/man/alignped3.Rd +++ b/man/alignped3.Rd @@ -7,9 +7,9 @@ alignped3(alt1, alt2, packed, space = 1) } \arguments{ -\item{alt1}{Alignement of the first tree} +\item{alt1}{Alignment of the first tree} -\item{alt2}{Alignement of the second tree} +\item{alt2}{Alignment of the second tree} \item{packed}{Should the Pedigree be compressed. (i.e. allow diagonal lines connecting parents to children in order diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 9e1163e4..71522877 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -43,10 +43,12 @@ object with various criteria, and kinship for the X chromosome. Supplementary vignettes are available to explain: -- The **$Pedigree$ object** `vignette("pedigree_object", package = "Pedixplorer")` +- The **$Pedigree$ object** + `vignette("pedigree_object", package = "Pedixplorer")` - The **alignment algorithm** used create the Pedigree structure `vignette("pedigree_alignment", package = "Pedixplorer")` -- The **kinship algorithm** `vignette("pedigree_kinship", package = "Pedixplorer")` +- The **kinship algorithm** + `vignette("pedigree_kinship", package = "Pedixplorer")` - The **plotting algorithm** used to plot the Pedigree `vignette("pedigree_plot", package = "Pedixplorer")` diff --git a/vignettes/pedigree_object.Rmd b/vignettes/pedigree_object.Rmd index db5dcb48..e1510ab8 100644 --- a/vignettes/pedigree_object.Rmd +++ b/vignettes/pedigree_object.Rmd @@ -189,7 +189,8 @@ The $Pedigree$ object contains 4 slots, each of them contains a different $S4$ object containing a specific type of information used for the Pedigree construction. -- $ped$ a Ped object for the Pedigree information with at least the following slots: +- $ped$ a Ped object for the Pedigree information with at least the following + slots: - $id$ the identifiers of the individuals - $dadid$ the identifiers of the fathers - $momid$ the identifiers of the mothers From 541534a98cd27386560c6456e595a4da825f19d9 Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 30 Jan 2024 14:36:36 +0100 Subject: [PATCH 108/111] Update title --- vignettes/pedigree.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 71522877..45057f06 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -9,7 +9,7 @@ output: toc_depth: 2 header-includes: \usepackage{tabularx} vignette: | - %\VignetteIndexEntry{Pedixplorer Pedigree} + %\VignetteIndexEntry{Pedixplorer tutorial} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: From f6225502a70f7da1b9a04d73df32db77d43c0d7c Mon Sep 17 00:00:00 2001 From: LouisBzh Date: Tue, 30 Jan 2024 14:37:26 +0100 Subject: [PATCH 109/111] Increase version number --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 652f9ba5..42f7399b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 0.99.6 +Version: 0.99.7 Date: 2023-11-15 Title: Pedigree Functions Authors@R: c( From 20c3c273fe9e5b0cf4db85a4bf4e102a69d7de27 Mon Sep 17 00:00:00 2001 From: J Wokaty Date: Tue, 30 Apr 2024 11:54:20 -0400 Subject: [PATCH 110/111] bump x.y.z version to even y prior to creation of RELEASE_3_19 branch --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 42f7399b..7575ec13 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 0.99.7 +Version: 1.0.0 Date: 2023-11-15 Title: Pedigree Functions Authors@R: c( From 569e94fa112eaca27247d5daf9a8a39ca16df38e Mon Sep 17 00:00:00 2001 From: J Wokaty Date: Tue, 30 Apr 2024 11:54:20 -0400 Subject: [PATCH 111/111] bump x.y.z version to odd y following creation of RELEASE_3_19 branch --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7575ec13..a05ccba7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: Pedixplorer -Version: 1.0.0 +Version: 1.1.0 Date: 2023-11-15 Title: Pedigree Functions Authors@R: c(

8Nl~-bb`_ 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�h6{7=gpJ-3!TW9?+ggQ|B@@2 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%0D5O; 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 z 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 1) { @@ -136,6 +137,9 @@ setMethod("align", "Pedigree", } return(alignment) } + if (is.null(hints)) { + hints <- hints(obj) + } if (!is(hints, "Hints")) { if (!is.list(hints)) { stop("hints argument should be a Hints object or a list") diff --git a/R/find_avail_affected.R b/R/find_avail_affected.R index abe0d5ee..1b88972e 100644 --- a/R/find_avail_affected.R +++ b/R/find_avail_affected.R @@ -107,7 +107,7 @@ setMethod("find_avail_affected", "Ped", #' @rdname find_avail_affected #' @export setMethod("find_avail_affected", "Pedigree", - function(obj, ...) { - find_avail_affected(ped(obj), ...) + function(obj, avail = NULL, affected = NULL, affstatus = NA) { + find_avail_affected(ped(obj), avail, affected, affstatus) } ) diff --git a/R/find_avail_noninform.R b/R/find_avail_noninform.R index e09a2930..35d5907a 100644 --- a/R/find_avail_noninform.R +++ b/R/find_avail_noninform.R @@ -65,7 +65,7 @@ setMethod("find_avail_noninform", "Ped", #' @rdname find_avail_noninform #' @export setMethod("find_avail_noninform", "Pedigree", - function(obj, ...) { - find_avail_noninform(ped(obj), ...) + function(obj, avail = NULL, affected = NULL) { + find_avail_noninform(ped(obj), avail, affected) } ) diff --git a/R/find_unavailable.R b/R/find_unavailable.R index 0eac25e9..d2785259 100644 --- a/R/find_unavailable.R +++ b/R/find_unavailable.R @@ -45,14 +45,6 @@ setGeneric("find_unavailable", signature = "obj", function(obj, ...) standardGeneric("find_unavailable") ) -#' @rdname find_unavailable -#' @export -setMethod("find_unavailable", "Pedigree", - function(obj, ...) { - find_unavailable(ped(obj), ...) - } -) - #' @rdname find_unavailable #' @export setMethod("find_unavailable", "Ped", @@ -100,6 +92,14 @@ setMethod("find_unavailable", "Ped", } ) +#' @rdname find_unavailable +#' @export +setMethod("find_unavailable", "Pedigree", + function(obj, avail = NULL) { + find_unavailable(ped(obj), avail) + } +) + #' Exclude stray marry-ins #' #' @description diff --git a/R/generate_colors.R b/R/generate_colors.R index 2c8d529b..ae740034 100644 --- a/R/generate_colors.R +++ b/R/generate_colors.R @@ -223,6 +223,7 @@ generate_border <- function(values, colors_avail = c("green", "black")) { #' @inheritParams generate_fill #' @inheritParams generate_border #' @inheritParams generate_aff_inds +#' @inheritParams Ped #' #' @return #' ## When used with a vector @@ -318,8 +319,10 @@ setMethod("generate_colors", "numeric", #' existing scales or if they need to replace the existing scales. #' @param reset If `TRUE` the scale of the specified column will be reset if #' already present. -#' @param col_avail The name of the column containing the availability status. -#' @inheritParams Pedigree +#' @param col_avail A character vector with the name of the column to be used +#' for the availability status. +#' @param col_aff A character vector with the name of the column to be used +#' for the affection status. #' @examples #' data("sampleped") #' ped <- Pedigree(sampleped) diff --git a/R/is_informative.R b/R/is_informative.R index aa7e31f6..90891496 100644 --- a/R/is_informative.R +++ b/R/is_informative.R @@ -11,9 +11,7 @@ #' corresponding informative individuals based on the avail and affected #' columns. #' -#' @param ... Additional arguments #' @inheritParams Ped -#' @inheritParams Pedigree #' @param informative Informative individuals selection can take 5 values: #' - 'AvAf' (available and affected), #' - 'AvOrAf' (available or affected), @@ -22,8 +20,7 @@ #' - 'All' (all individuals) #' - A numeric/character vector of individuals id #' - A boolean -#' @inheritParams kinship -#' @inheritParams is_parent +#' @inheritParams generate_colors #' @return #' #' ## When obj is a vector diff --git a/R/kinship.R b/R/kinship.R index 4a710b9f..4bc4cd45 100644 --- a/R/kinship.R +++ b/R/kinship.R @@ -40,7 +40,6 @@ NULL #' @param obj A Pedigree or Ped object or a vector of subject identifiers. #' @param chrtype chromosome type. The currently supported types are #' 'autosome' and 'X' or 'x'. -#' @param ... Additional arguments #' @inheritParams Ped #' #' @return diff --git a/R/make_famid.R b/R/make_famid.R index 384d1588..e9e5ed70 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -9,7 +9,7 @@ #' tree 1, otherwise the tree numbers represent the disconnected subfamilies. #' Singleton subjects give a zero for family number. #' -#' @inheritParams kinship +#' @inheritParams Ped #' #' @return #' ## When used with a character vector diff --git a/R/min_dist_inf.R b/R/min_dist_inf.R index be8f36db..bdd6981b 100644 --- a/R/min_dist_inf.R +++ b/R/min_dist_inf.R @@ -51,9 +51,7 @@ setGeneric("min_dist_inf", signature = "obj", #' c("C", "D", "0", "0", "0"), #' c("E", "E", "0", "0", "0"), #' sex = c(1, 2, 1, 2, 1), -#' avail = c(1, 0, 0, 1, 1), -#' affected = c(0, 1, 0, 1, 1), -#' informative = "AvAf" +#' id_inf = c("D", "E") #' ) #' @export setMethod("min_dist_inf", "character", function(obj, diff --git a/R/num_child.R b/R/num_child.R index ad60b575..3ea91147 100644 --- a/R/num_child.R +++ b/R/num_child.R @@ -11,7 +11,6 @@ NULL #' If a relation ship dataframe is given, then even if no children is present #' between 2 spouses, the indirect childs will still be added. #' -#' @param ... Additional arguments #' @inheritParams Ped #' @inheritParams Pedigree #' diff --git a/R/ped_to_legdf.R b/R/ped_to_legdf.R index 563d4f0a..4631218a 100644 --- a/R/ped_to_legdf.R +++ b/R/ped_to_legdf.R @@ -18,10 +18,8 @@ #' - `adjy`: vertical text adjustment of the labels #' #' All those columns are used by [plot_fromdf()] to plot the graph. -#' #' @param obj A Pedigree object -#' @param ... Additional arguments -#' @inheritParams set_plot_area +#' @param cex Character expansion of the text #' @inheritParams plot_fromdf #' @param adjx default=0. Controls the horizontal text adjustment of #' the labels in the legend. diff --git a/R/plot_fct.R b/R/plot_fct.R index afc7102d..96729369 100644 --- a/R/plot_fct.R +++ b/R/plot_fct.R @@ -80,9 +80,11 @@ subregion <- function(plist, subreg) { #' @return A list of x and y coordinates per slice. #' @keywords internal, Pedigree-plot #' @examples +#' #' circfun(1) #' circfun(1, 10) #' circfun(4, 50) +#' @export circfun <- function(nslice, n = 50) { nseg <- ceiling(n / nslice) # segments of arc per slice @@ -114,8 +116,9 @@ circfun <- function(nslice, n = 50) { #' polyfun(2, list( #' x = c(-0.5, -0.5, 0.5, 0.5), #' y = c(-0.5, 0.5, 0.5, -0.5), -#' theta = -c(3, 5, 7, 9) * pi / 4) +#' theta = -c(3, 5, 7, 9) * pi / 4 #' )) +#' @export polyfun <- function(nslice, coor) { # make the indirect segments view zmat <- matrix(0, ncol = 4, nrow = length(coor$x)) @@ -173,6 +176,7 @@ polyfun <- function(nslice, coor) { #' @examples #' polygons() #' polygons(4) +#' @export polygons <- function(nslice = 1) { if (nslice == 1) { polylist <- list( diff --git a/R/shrink.R b/R/shrink.R index d556474e..432b4b29 100644 --- a/R/shrink.R +++ b/R/shrink.R @@ -22,7 +22,6 @@ #' 2. Subjects with unaffected affected status #' 3. Affected subjects. #' -#' @param ... Additional arguments #' @param obj A Pedigree or Ped object. #' @inheritParams Ped #' @inheritParams is_informative diff --git a/R/utils.R b/R/utils.R index b34bd878..9cb63e56 100644 --- a/R/utils.R +++ b/R/utils.R @@ -215,6 +215,7 @@ setMethod("is_parent", "Ped", #' @examples #' is_founder(c("3", "3", NA, NA), c("4", "4", NA, NA)) #' @keywords internal +#' @export is_founder <- function(momid, dadid, missid = NA_character_) { (dadid %in% missid) & (momid %in% missid) } @@ -240,6 +241,7 @@ is_founder <- function(momid, dadid, missid = NA_character_) { #' c("3", "3", NA, NA, NA), #' c("4", "4", NA, NA, NA) #' ) +#' @export is_disconnected <- function(id, dadid, momid) { # check to see if any subjects are disconnected in Pedigree by checking for # kinship = 0 for all subjects excluding self diff --git a/devel/documentation/todo.md b/devel/documentation/todo.md index 8f740807..22c6e4bd 100644 --- a/devel/documentation/todo.md +++ b/devel/documentation/todo.md @@ -2,11 +2,11 @@ ## Documentations of functions -- [ ] AllClass.R -- [ ] AllConstructor.R -- [ ] AllAccessors.R -- [ ] AllGeneric.R -- [ ] AllValidity.R +- [x] AllClass.R +- [x] AllConstructor.R +- [x] AllAccessors.R +- [x] AllGeneric.R +- [x] AllValidity.R - [x] Pedixplorer-package.R - [x] align.R - [x] alignped1.R @@ -45,14 +45,14 @@ ## For all class -- [ ] Ped object - - [ ] Class - - [ ] Constructor - - [ ] Getters - - [ ] Setters - - [ ] General methods - - [ ] See also +- [x] General + - [x] Class + - [x] Constructor + - [x] Getters + - [x] Setters + - [x] General methods + - [x] See also ## Other -- [ ] Take out addition of ind in ancestors compute Kindepth. +- [x] Take out addition of ind in ancestors compute Kindepth. diff --git a/devel/old/pedigreeClass.R b/devel/old/pedigreeClass.R index c28aed93..1addacc8 100644 --- a/devel/old/pedigreeClass.R +++ b/devel/old/pedigreeClass.R @@ -132,7 +132,8 @@ setMethod("$<-", c(x = "Pedigree"), ) #' @description Subset the hints list based on the index given -#' @param hints A list of hints +#' @param hints A Hints object or a named list containing `horder` and +#' `spouse`. #' @param index A vector of index #' @return A list of hints subsetted #' @rdname extract-methods diff --git a/man/Hints-class.Rd b/man/Hints-class.Rd index 4a35cab9..136d404a 100644 --- a/man/Hints-class.Rd +++ b/man/Hints-class.Rd @@ -9,7 +9,6 @@ \alias{Hints,list,missing_OR_NULL-method} \alias{Hints,numeric,data.frame-method} \alias{Hints,numeric,missing_OR_NULL-method} -\alias{Hints,missing_OR_NULL,data.frame-method} \alias{Hints,missing_OR_NULL,missing_OR_NULL-method} \alias{horder} \alias{horder,Hints-method} @@ -29,8 +28,6 @@ Hints(horder, spouse) \S4method{Hints}{numeric,data.frame}(horder, spouse) \S4method{Hints}{numeric,missing_OR_NULL}(horder, spouse) - -\S4method{Hints}{missing_OR_NULL,data.frame}(horder, spouse) } \arguments{ \item{horder}{A named numeric vector with one element per subject in the @@ -126,6 +123,7 @@ Hints( idl = c("1", "2"), idr = c("2", "3"), anchor = c(1, 2) + ) ) ) @@ -141,14 +139,6 @@ Hints( Hints( horder = c("1" = 1, "2" = 2, "3" = 3) ) - -Hints( - spouse = data.frame( - idl = c("1", "2"), - idr = c("2", "3"), - anchor = c(1, 2) - ) -) } \seealso{ \code{\link[=Pedigree]{Pedigree()}} diff --git a/man/Pedigree-class.Rd b/man/Pedigree-class.Rd index 9e83b60d..215b6b92 100644 --- a/man/Pedigree-class.Rd +++ b/man/Pedigree-class.Rd @@ -88,7 +88,11 @@ Pedigree(obj, ...) \item{obj}{A vector of the individuals identifiers or a data.frame with the individuals informations. See \code{\link[=Ped]{Ped()}} for more informations.} -\item{...}{Other arguments to pass to the function \code{generate_colors}.} +\item{...}{ + Arguments passed on to \code{\link[=generate_colors]{generate_colors}} + \describe{ + \item{\code{}}{} + }} \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} @@ -152,9 +156,7 @@ All the id, dadid and momid corresponding to those values will be set to \code{NA_character_}.} \item{col_aff}{A character vector with the name of the column to be used -for the affection status. -If \code{affected} is a data.frame, it will be overwritten by the column -names of the data.frame.} +for the affection status.} \item{normalize}{A logical to know if the data should be normalised.} @@ -230,6 +232,9 @@ will be transformed with the \code{\link[=vect_to_binary]{vect_to_binary()}} fun normalisation is selected. If you do not use the normalisation, the columns will be checked to be \code{0} or \code{1}. + +If \code{affected} is a data.frame, \strong{col_aff} will be overwritten by the column +names of the data.frame. } \section{Slots}{ diff --git a/man/align.Rd b/man/align.Rd index c4c81594..e80b7f73 100644 --- a/man/align.Rd +++ b/man/align.Rd @@ -11,15 +11,13 @@ packed = TRUE, width = 10, align = TRUE, - hints = obj@hints, + hints = NULL, missid = "NA_character_" ) } \arguments{ \item{obj}{A Pedigree object} -\item{...}{Other arguments to pass to the function} - \item{packed}{Should the Pedigree be compressed. (i.e. allow diagonal lines connecting parents to children in order to have a smaller overall width for the plot.)} @@ -36,7 +34,7 @@ If \code{TRUE}, the default is \code{c(1.5, 2)}, or if numeric the routine \code{alignped4()} will be called.} \item{hints}{A Hints object or a named list containing \code{horder} and -\code{spouse}.} +\code{spouse}. If \code{NULL} then the Hints stored in \strong{obj} will be used.} \item{missid}{A character vector with the missing values identifiers. All the id, dadid and momid corresponding to those values will be set diff --git a/man/auto_hint.Rd b/man/auto_hint.Rd index 3d6e7ecf..786c966c 100644 --- a/man/auto_hint.Rd +++ b/man/auto_hint.Rd @@ -10,10 +10,8 @@ \arguments{ \item{obj}{A Pedigree object} -\item{...}{Other arguments to pass to the function} - \item{hints}{A Hints object or a named list containing \code{horder} and -\code{spouse}.} +\code{spouse}. If \code{NULL} then the Hints stored in \strong{obj} will be used.} \item{packed}{Should the Pedigree be compressed. (i.e. allow diagonal lines connecting parents to children in order diff --git a/man/best_hint.Rd b/man/best_hint.Rd index 920039b5..eaf0ea81 100644 --- a/man/best_hint.Rd +++ b/man/best_hint.Rd @@ -10,8 +10,6 @@ \arguments{ \item{obj}{A Pedigree object} -\item{...}{Other arguments to pass to the function} - \item{wt}{A vector of three weights for the three error measures. Default is \code{c(1000, 10, 1)}. \enumerate{ diff --git a/man/circfun.Rd b/man/circfun.Rd index 06e90c6e..04885b73 100644 --- a/man/circfun.Rd +++ b/man/circfun.Rd @@ -19,6 +19,7 @@ Create a list of x and y coordinates for a circle with a given number of slices. } \examples{ + circfun(1) circfun(1, 10) circfun(4, 50) diff --git a/man/find_avail_affected.Rd b/man/find_avail_affected.Rd index 0a564ce1..f8071489 100644 --- a/man/find_avail_affected.Rd +++ b/man/find_avail_affected.Rd @@ -8,7 +8,7 @@ \usage{ \S4method{find_avail_affected}{Ped}(obj, avail = NULL, affected = NULL, affstatus = NA) -\S4method{find_avail_affected}{Pedigree}(obj, ...) +\S4method{find_avail_affected}{Pedigree}(obj, avail = NULL, affected = NULL, affstatus = NA) } \arguments{ \item{obj}{A Ped or Pedigree object.} diff --git a/man/find_avail_noninform.Rd b/man/find_avail_noninform.Rd index 5ddae37f..7570b9b7 100644 --- a/man/find_avail_noninform.Rd +++ b/man/find_avail_noninform.Rd @@ -8,7 +8,7 @@ \usage{ \S4method{find_avail_noninform}{Ped}(obj, avail = NULL, affected = NULL) -\S4method{find_avail_noninform}{Pedigree}(obj, ...) +\S4method{find_avail_noninform}{Pedigree}(obj, avail = NULL, affected = NULL) } \arguments{ \item{obj}{A Ped or Pedigree object.} diff --git a/man/find_unavailable.Rd b/man/find_unavailable.Rd index ab660c9e..c48630f2 100644 --- a/man/find_unavailable.Rd +++ b/man/find_unavailable.Rd @@ -2,13 +2,13 @@ % Please edit documentation in R/find_unavailable.R \name{find_unavailable} \alias{find_unavailable} -\alias{find_unavailable,Pedigree-method} \alias{find_unavailable,Ped-method} +\alias{find_unavailable,Pedigree-method} \title{Find unavailable subjects in a Pedigree} \usage{ -\S4method{find_unavailable}{Pedigree}(obj, ...) - \S4method{find_unavailable}{Ped}(obj, avail = NULL) + +\S4method{find_unavailable}{Pedigree}(obj, avail = NULL) } \arguments{ \item{obj}{A Ped or Pedigree object.} diff --git a/man/generate_colors.Rd b/man/generate_colors.Rd index d3e9ded9..a6452615 100644 --- a/man/generate_colors.Rd +++ b/man/generate_colors.Rd @@ -49,8 +49,6 @@ \item{obj}{A Pedigree object or a vector containing the affection status for each individuals. The affection status can be numeric or a character.} -\item{...}{Other arguments to pass to the function \code{generate_colors}.} - \item{avail}{A logical vector with the availability status of the individuals (i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} @@ -89,14 +87,13 @@ values. The same number of breaks will be done for values from affected individuals and unaffected individuals.} \item{col_aff}{A character vector with the name of the column to be used -for the affection status. -If \code{affected} is a data.frame, it will be overwritten by the column -names of the data.frame.} +for the affection status.} \item{add_to_scale}{Boolean defining if the scales need to be added to the existing scales or if they need to replace the existing scales.} -\item{col_avail}{The name of the column containing the availability status.} +\item{col_avail}{A character vector with the name of the column to be used +for the availability status.} \item{reset}{If \code{TRUE} the scale of the specified column will be reset if already present.} diff --git a/man/is_informative.Rd b/man/is_informative.Rd index 89fbf295..006968a4 100644 --- a/man/is_informative.Rd +++ b/man/is_informative.Rd @@ -15,8 +15,6 @@ \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{...}{Additional arguments} - \item{avail}{A logical vector with the availability status of the individuals (i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} @@ -37,9 +35,7 @@ individuals }} \item{col_aff}{A character vector with the name of the column to be used -for the affection status. -If \code{affected} is a data.frame, it will be overwritten by the column -names of the data.frame.} +for the affection status.} \item{reset}{If \code{TRUE}, the \code{isinf} slot is reset} } diff --git a/man/kinship.Rd b/man/kinship.Rd index 9b506c6c..3c8e8e93 100755 --- a/man/kinship.Rd +++ b/man/kinship.Rd @@ -16,8 +16,6 @@ \arguments{ \item{obj}{A Pedigree or Ped object or a vector of subject identifiers.} -\item{...}{Additional arguments} - \item{chrtype}{chromosome type. The currently supported types are 'autosome' and 'X' or 'x'.} diff --git a/man/make_famid.Rd b/man/make_famid.Rd index afb122d0..1f9805d5 100644 --- a/man/make_famid.Rd +++ b/man/make_famid.Rd @@ -11,9 +11,8 @@ \S4method{make_famid}{Pedigree}(obj) } \arguments{ -\item{obj}{A Pedigree or Ped object or a vector of subject identifiers.} - -\item{...}{Additional arguments} +\item{obj}{A character vector with the id of the individuals or a +\code{data.frame} with all the informations in corresponding columns.} \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} diff --git a/man/min_dist_inf.Rd b/man/min_dist_inf.Rd index 0e50ad3e..9dac04ed 100644 --- a/man/min_dist_inf.Rd +++ b/man/min_dist_inf.Rd @@ -38,9 +38,7 @@ The following values are recognized: \item{id_inf}{An identifiers vector of informative individuals.} \item{col_aff}{A character vector with the name of the column to be used -for the affection status. -If \code{affected} is a data.frame, it will be overwritten by the column -names of the data.frame.} +for the affection status.} \item{informative}{Informative individuals selection can take 5 values: \itemize{ @@ -92,9 +90,7 @@ min_dist_inf( c("C", "D", "0", "0", "0"), c("E", "E", "0", "0", "0"), sex = c(1, 2, 1, 2, 1), - avail = c(1, 0, 0, 1, 1), - affected = c(0, 1, 0, 1, 1), - informative = "AvAf" + id_inf = c("D", "E") ) data(sampleped) diff --git a/man/num_child.Rd b/man/num_child.Rd index 5c35c02c..2886d92a 100644 --- a/man/num_child.Rd +++ b/man/num_child.Rd @@ -14,8 +14,6 @@ \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{...}{Additional arguments} - \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} diff --git a/man/ped_to_legdf.Rd b/man/ped_to_legdf.Rd index 8b4c4a0f..abcb04e9 100644 --- a/man/ped_to_legdf.Rd +++ b/man/ped_to_legdf.Rd @@ -10,8 +10,6 @@ \arguments{ \item{obj}{A Pedigree object} -\item{...}{Additional arguments} - \item{boxh}{Height of the polygons elements} \item{boxw}{Width of the polygons elements} diff --git a/man/polyfun.Rd b/man/polyfun.Rd index ff32ce0b..51b3b169 100644 --- a/man/polyfun.Rd +++ b/man/polyfun.Rd @@ -24,7 +24,7 @@ for the polygon. polyfun(2, list( x = c(-0.5, -0.5, 0.5, 0.5), y = c(-0.5, 0.5, 0.5, -0.5), - theta = -c(3, 5, 7, 9) * pi / 4) + theta = -c(3, 5, 7, 9) * pi / 4 )) } \keyword{Pedigree-plot} diff --git a/man/shrink.Rd b/man/shrink.Rd index 415b55ea..001652e9 100644 --- a/man/shrink.Rd +++ b/man/shrink.Rd @@ -13,8 +13,6 @@ \arguments{ \item{obj}{A Pedigree or Ped object.} -\item{...}{Additional arguments} - \item{avail}{A logical vector with the availability status of the individuals (i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} diff --git a/man/unrelated.Rd b/man/unrelated.Rd index 2f62824d..f9173521 100644 --- a/man/unrelated.Rd +++ b/man/unrelated.Rd @@ -13,8 +13,6 @@ \arguments{ \item{obj}{A Pedigree or Ped object.} -\item{...}{Additional arguments} - \item{avail}{A logical vector with the availability status of the individuals (i.e. \code{FALSE} = not available, \code{TRUE} = available, \code{NA} = unknown).} diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index a9000f69..70c20862 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -26,8 +26,6 @@ \item{obj}{A character vector with the id of the individuals or a \code{data.frame} with all the informations in corresponding columns.} -\item{...}{Additional arguments} - \item{dadid}{A vector containing for each subject, the identifiers of the biologicals fathers.} diff --git a/vignettes/kinship_details.Rmd b/vignettes/kinship_details.Rmd index 2470dfa1..943427af 100644 --- a/vignettes/kinship_details.Rmd +++ b/vignettes/kinship_details.Rmd @@ -180,6 +180,7 @@ matrix is labeled with the subject id, otherwise it is labeled with family/subject. ```{r, kinship} +library(Pedixplorer) data(sampleped) ped <- Pedigree(sampleped) kinship(ped) From 71f908fcda3eac6fda658c88ff893a88b62ad334 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 14:17:17 +0100 Subject: [PATCH 095/111] Update documentation and examples --- NAMESPACE | 1 + R/AllConstructor.R | 8 ++++---- R/best_hint.R | 5 ----- R/make_famid.R | 2 ++ R/norm_data.R | 5 ++++- R/useful_inds.R | 1 - man/norm_ped.Rd | 5 ++++- man/permute.Rd | 5 ----- man/useful_inds.Rd | 1 - 9 files changed, 15 insertions(+), 18 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 1dfa4a48..d9c13ff7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -65,6 +65,7 @@ export(kinship) export(make_famid) export(min_dist_inf) export(momid) +export(na_to_length) export(norm_ped) export(norm_rel) export(num_child) diff --git a/R/AllConstructor.R b/R/AllConstructor.R index a9cf47fd..2f95ecb8 100644 --- a/R/AllConstructor.R +++ b/R/AllConstructor.R @@ -848,16 +848,16 @@ setMethod("Pedigree", "data.frame", function( ) } if (any(!is.na(ped_df$error))) { - warning("The Pedigree informations are not valid.", - "Here is the normalised Pedigree informations", + warning("The Pedigree informations are not valid. ", + "Here is the normalised Pedigree informations ", "with the identified problems" ) return(ped_df) } if (any(!is.na(rel_df$error))) { - warning("The relationship informations are not valid.", - "Here is the normalised relationship informations", + warning("The relationship informations are not valid. ", + "Here is the normalised relationship informations ", "with the identified problems" ) return(rel_df) diff --git a/R/best_hint.R b/R/best_hint.R index 15368c8c..a4632cc9 100644 --- a/R/best_hint.R +++ b/R/best_hint.R @@ -6,11 +6,6 @@ #' #' @param x A vector of length **n** #' @return A matrix with **n** cols and **n!** rows -#' -#' @examples -#' permute(1:3) -#' permute(1:4) -#' permute(1:5) #' @keywords internal, auto_hint permute <- function(x) { n <- length(x) diff --git a/R/make_famid.R b/R/make_famid.R index e9e5ed70..0832e671 100644 --- a/R/make_famid.R +++ b/R/make_famid.R @@ -181,6 +181,7 @@ setMethod("upd_famid_id", obj@id <- upd_famid_id(id(obj), famid) obj@dadid <- upd_famid_id(dadid(obj), famid) obj@momid <- upd_famid_id(momid(obj), famid) + obj@famid <- famid validObject(obj) obj } @@ -204,6 +205,7 @@ setMethod("upd_famid_id", function(obj, famid) { obj@id1 <- upd_famid_id(id1(obj), famid) obj@id2 <- upd_famid_id(id2(obj), famid) + obj@famid <- famid validObject(obj) obj } diff --git a/R/norm_data.R b/R/norm_data.R index ebd5cd0f..eb471269 100644 --- a/R/norm_data.R +++ b/R/norm_data.R @@ -77,7 +77,10 @@ NULL #' vitalStatus = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0), #' affection = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0) #' ) -#' norm_ped(df) +#' tryCatch( +#' norm_ped(df), +#' error = function(e) print(e) +#' ) #' #' @seealso [Ped()], [Ped-class], [Pedigree()] #' @export diff --git a/R/useful_inds.R b/R/useful_inds.R index c3c28e0a..948bcc25 100644 --- a/R/useful_inds.R +++ b/R/useful_inds.R @@ -79,7 +79,6 @@ setMethod("useful_inds", "character", #' #' data(sampleped) #' ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -#' ped1 <- num_child(ped1) #' ped(useful_inds(ped1, informative = "AvAf")) #' @export setMethod("useful_inds", "Pedigree", function(obj, diff --git a/man/norm_ped.Rd b/man/norm_ped.Rd index dd8347ff..c72f9d19 100644 --- a/man/norm_ped.Rd +++ b/man/norm_ped.Rd @@ -97,7 +97,10 @@ df <- data.frame( vitalStatus = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0), affection = c("TRUE", "FALSE", TRUE, FALSE, 1, 0, 1, 0, 1, 0) ) -norm_ped(df) +tryCatch( + norm_ped(df), + error = function(e) print(e) +) } \seealso{ diff --git a/man/permute.Rd b/man/permute.Rd index 3b4e00ff..3b345c62 100644 --- a/man/permute.Rd +++ b/man/permute.Rd @@ -17,10 +17,5 @@ Given a vector of length \strong{n}, generate all possible permutations of the numbers 1 to \strong{n}. This is a recursive routine, and is not very efficient. } -\examples{ -permute(1:3) -permute(1:4) -permute(1:5) -} \keyword{auto_hint} \keyword{internal,} diff --git a/man/useful_inds.Rd b/man/useful_inds.Rd index 70c20862..0e6a04b9 100644 --- a/man/useful_inds.Rd +++ b/man/useful_inds.Rd @@ -84,7 +84,6 @@ usefulness of the individual. This boolean is hereditary. data(sampleped) ped1 <- Pedigree(sampleped[sampleped$famid == "1",]) -ped1 <- num_child(ped1) ped(useful_inds(ped1, informative = "AvAf")) } \keyword{shrink} From 3893ef109522b7675c5967a55dfd847840fd5566 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 14:17:59 +0100 Subject: [PATCH 096/111] Improve vignettes --- vignettes/pedigree.Rmd | 20 ++-- vignettes/pedigree_constructor.Rmd | 147 ++++++++++++++++++++++++++--- 2 files changed, 142 insertions(+), 25 deletions(-) diff --git a/vignettes/pedigree.Rmd b/vignettes/pedigree.Rmd index 7091c33f..2d764e74 100644 --- a/vignettes/pedigree.Rmd +++ b/vignettes/pedigree.Rmd @@ -48,8 +48,6 @@ structure `vignette("Pedigree alignment details", package = "Pedixplorer")` - The [plotting algorithm]("pedigree_plot_details.html") used to plot the Pedigree `vignette("Pedigree plotting details", package = "Pedixplorer")` - - Installation =============== The `Pedixplorer` package is available on Bioconductor and can be installed @@ -74,12 +72,12 @@ The Pedigree S4 object The Pedigree object is a list of dataframes that describe the family structure. It contains the following components: -- ped: a Ped object with the Pedigree information -- rel: a Rel object with the relationship information +- ped: a Ped object with the Pedigree information `help(Ped)`. +- rel: a Rel object with the relationship information `help(Rel)`. - scales: a Scales object of 2 dataframe with the filling and borders -informations for the plot +informations for the plot `help(Scales)`. - hints: a Hints objects with 2 slots indicating the horder and the spouse to -organise the Pedigree structure +organise the Pedigree structure `help(Hints)`. Basic Usage ============= @@ -108,8 +106,8 @@ underscore to create a unique id for each individual in the Pedigree object. ```{r, Pedigree_creation} data("sampleped") -sampleped[1:10, ] -ped <- Pedigree(sampleped) +print(sampleped[1:10, ]) +ped <- Pedigree(sampleped[c(3, 4, 10, 35, 36), ]) print(ped) ``` @@ -118,14 +116,14 @@ For more information on the *Pedigree()* function, see `help(Pedigree)`. The Pedigree object can be subset to individual pedigrees by their family id. The Pedigree object has a print, summary and plot method, which we show below. -The print method prints a short summary of the Pedigree. -The summary method prints a more detailed summary of the Pedigree. +The print method prints the Ped and Rel object of the Pedigree. +The summary method prints a short summary of the Pedigree. Finally the plot method displays the Pedigree. ```{r, ped1} +ped <- Pedigree(sampleped) print(famid(ped)) ped1 <- ped[famid(ped) == "1"] -print(ped1) summary(ped1) plot(ped1) ``` diff --git a/vignettes/pedigree_constructor.Rmd b/vignettes/pedigree_constructor.Rmd index 56e148d1..26171594 100644 --- a/vignettes/pedigree_constructor.Rmd +++ b/vignettes/pedigree_constructor.Rmd @@ -1,6 +1,6 @@ --- title: Pedigree() constructor -author: Terry Therneau, Elizabeth Atkinson +author: Terry Therneau, Elizabeth Atkinson, Louis Le Nézet date: '`r format(Sys.time(),"%d %B, %Y")`' output: rmarkdown::html_vignette: @@ -72,8 +72,6 @@ It accepts the following input **ped_df** dataframe - **cols_ren_rel** Optional, a named list for the renaming of the **rel_df** dataframe -- **scales** Optional, a list of two dataframe with the scales to use for the - affection status and the other one for the border color (e.g availability). - **normalize** Optional, a logical to know if the data should be normalised. - **hints** Optional, a list containing the horder in which to plot the individuals and the matrix of the spouse. @@ -107,6 +105,29 @@ Status follows the pattern of the survival routines and remains an integer. Based on the dataframe given for **ped_df** and **rel_df** and their corresponding named list, the columns are renamed for them to be used correctly. +The renaming is done as follow + +```{r, column renaming} +rel_df <- data.frame( + indId1 = c("110", "204"), + indId2 = c("112", "205"), + code = c(1, 2), + family = c("1", "2") +) +cols_ren_rel <- list( + id1 = "indId1", + id2 = "indId2", + famid = "family" +) + +## Rename columns rel +old_cols <- as.vector(unlist(cols_ren_rel)) +new_cols <- names(cols_ren_rel) +cols_to_ren <- match(old_cols, names(rel_df)) +names(rel_df)[cols_to_ren[!is.na(cols_to_ren)]] <- + new_cols[!is.na(cols_to_ren)] +print(rel_df) +``` ## Normalisation @@ -117,12 +138,26 @@ right way. If a $famid$ column is present in the dataframe, then it will be aggregated to the id of each individual and separated by an ''_'' to ensure the uniqueness of the individuals identifiers. +```{r, normalisation} +data(sampleped) +cols <- c("sex", "id", "avail") +summary(sampleped[cols]) +ped <- Pedigree(sampleped, rel_df) +summary(as.data.frame(ped(ped))[cols]) +``` + ### Errors present after the normalisation process If any error is detected after the normalisation process, then the normalised dataframe is gave back to the user with errors column added describing the encountered problems. +```{r, rel_df errors} +rel_df$code[2] <- "A" +df <- Pedigree(sampleped, rel_df) +print(df) +``` + ## Validation Now that the data for the Pedigree object creation are ready, they are @@ -137,8 +172,10 @@ This validation step will check up for many errors such as: - $steril$, $status$, $available$, $affected$ only contains 0, 1 or NA values - Father are males and Mother are females - Twins have same parents and MZ twins have same sex +- Hints object is valid and ids contained is in the Ped object +- ... -Pedigree S4 slots +Pedigree Class ======================== After validation an $S4$ object is generated. @@ -146,31 +183,86 @@ This new concept make it possible to easily setup methods for this new type of object. The controls of the parameters is also more precise. -The $Pedigree$ object contains 4 slots: +The $Pedigree$ object contains 4 slots, each of them contains a different +$S4$ object containing a specific type of information used for the Pedigree +construction. -- $ped$ the Pedigree information as a dataframe with at least the -following columns: +- $ped$ a Ped object for the Pedigree information with at least the following slots: - $id$ the identifiers of the individuals - $dadid$ the identifiers of the fathers - $momid$ the identifiers of the mothers - $sex$ the gender of each individuals -- $rel$ the relationship dataframe describing all special relationship -beetween individuals that can't be descibed in the $ped$ slot. -The minimal columns needed are : +- $rel$ a Rel object describing all special relationship beetween individuals +that can't be descibed in the $ped$ slot. +The minimal slots needed are : - $id1$ the identifiers of the 1st individuals - $id2$ the identifiers of the 2nd individuals - $code$ factor describing the type of relationship ("MZ twin", "DZ twin", "UZ twin", "Spouse") -- $scales$ a list of two elements +- $scales$ a Scales object with two slots : - $fill$ a dataframe describing which modalities in which columns correspond to an affected individuals. Plotting information such as colour, angle and density are also provided - $border$ a dataframe describing which modalities in which columns to use to plot the border of the plot elements. -- $hints$ a list of two elements +- $hints$ a Hints object with two slots : - $horder$ numeric vector for the ordering of the individuals plotting - $spouse$ a matrix of the spouses +For more information on each object: +- `help(Ped)` +- `help(Rel)` +- `help(Scales)` +- `help(Hints)` + +Pedigree accessors +======================== + +As the Pedigree object is now an $S4$ class, we have made available a number +of accessors. +Most of them can be used as a getter or as a setter to modify a value in the +correponding slot of the object + +## For the Pedigree object + +- Get/Set slots : ped(), rel(), scales(), hints() +- Wrapper to the Ped object: famid(), mcols() +- Wrapper of the Scales object: fill(), border() +- Wrapper of the Hints object: horder(), spouse() + +## For the Ped object + +- Given in input: id(), dadid(), momid(), famid(), sex() +- Other infos used : affected(), avail(), status() +- Computed : isinf(), kin(), useful() +- Metadata : mcols() + +## For the Rel object + +- id1(), id2(), code(), famid() + +## For the Scales object + +- fill(), border() + +## For the Hints object + +- horder(), spouse() + +## Focus on mcols() + +The mcols() accessors is the one you should use to add more +informations to your individuals. + +```{r, mcols} +mcols(ped) +## Add new columns as a threshold if identifiers of individuals superior +## to a given threshold for example +mcols(ped)$idth <- ifelse(as.numeric(mcols(ped)$indId) < 200, "A", "B") +mcols(ped)$idth +``` + + Pedigree methods ======================== @@ -180,9 +272,7 @@ With this new S4 object comes multiple methods to ease the use of it: - summary() - print() - show() -- as.data.frame() - as.list() -- setAs() - `[` - shrink() - generate_colors() @@ -190,10 +280,39 @@ With this new S4 object comes multiple methods to ease the use of it: - kindepth() - kinship() - make_famid() +- upd_famid_id() - num_child() - unrelated() - useful_inds() +```{r, pedigree methods} +## We can change the family name based on an other column +ped <- upd_famid_id(ped, mcols(ped)$idth) + +## We can substract a given family +pedA <- ped[famid(ped) == "A"] + +## Plot it +plot(pedA, cex = 0.5) + +## Do a summary +summary(pedA) + +## Coerce it to a list +as.list(pedA) + +## Shrink it to keep only the necessary information +lst1_s <- shrink(pedA, max_bits = 10) +plot(lst1_s$pedObj, cex = 0.5) + +## Compute the kinship individuals matrix +kinship(pedA) + +## Get the useful individuals +pedA <- useful_inds(pedA, informative = "AvAf") +as.data.frame(ped(pedA))["useful"] +``` + Session information =================== From d4709098ce684dfef269877b592755aec7949862 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 15 Nov 2023 15:55:08 +0100 Subject: [PATCH 097/111] Update documentation, and vignette All test pass --- .gitignore | 2 +- DESCRIPTION | 8 ++-- NAMESPACE | 1 + Pedixplorer_0.99.2.tar.gz | Bin 1610898 -> 0 bytes R/plot.R | 4 +- devel/documentation/contribution.md | 5 +- man/plot-Pedigree-missing-method.Rd | 4 +- vignettes/pedigree.Rmd | 43 ++++++++++++------ ...ee_constructor.Rmd => pedigree_object.Rmd} | 15 +++--- 9 files changed, 53 insertions(+), 29 deletions(-) delete mode 100644 Pedixplorer_0.99.2.tar.gz rename vignettes/{pedigree_constructor.Rmd => pedigree_object.Rmd} (97%) diff --git a/.gitignore b/.gitignore index 13ac89e3..7a232118 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ *.so *.Rprofile *.lintr -Pedixplorer.Rcheck \ No newline at end of file +Pedixplorer* \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION index d3c494cf..8e52b112 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: Pedixplorer -Version: 0.99.2 -Date: 2023-09-19 +Version: 0.99.3 +Date: 2023-11-15 Title: Pedigree Functions Authors@R: c( person("Louis", "Le Nézet", email="louislenezet@gmail.com", @@ -50,7 +50,7 @@ Suggests: Config/testthat/edition: 3 biocViews: Software, DataRepresentation, Genetics, Alignment BugReports: https://github.com/LouisLeLezet/Pedixplorer/issues -url: https://github.com/LouisLeNezet/Pedixplorer +URL: https://github.com/LouisLeNezet/Pedixplorer BiocType: Software Collate: 'AllValidity.R' @@ -93,4 +93,4 @@ Collate: 'shrink.R' 'unrelated.R' 'useful_inds.R' -LazyData: true +LazyData: false diff --git a/NAMESPACE b/NAMESPACE index d9c13ff7..f1549711 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -238,3 +238,4 @@ importFrom(tidyr,pivot_longer) importFrom(tidyr,unite) importFrom(utils,setTxtProgressBar) importFrom(utils,txtProgressBar) +importFrom(testthat, test_that) diff --git a/Pedixplorer_0.99.2.tar.gz b/Pedixplorer_0.99.2.tar.gz deleted file mode 100644 index 1f2a89fcf86c0ee5696f0c20329a343d5c180413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1610898 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%0DO=t}_VQBKPlC87` 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 d6ZuJ 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

8Nl~-bb`_ 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�h6{7=gpJ-3!TW9?+ggQ|B@@2 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%0D5O; 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 z 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