diff --git a/CHANGELOG.md b/CHANGELOG.md index 699ccfa..b1435c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Proximity score violin plots now show every cell for each plotted marker, with proximity scores that were filtered out shown as 0. + ### Changed - Colocalization heatmap text now explains that proteins are selected by mean abundance (up to 40 markers), globally across samples or within each cell type. diff --git a/R/components.R b/R/components.R index feb1d90..d48fe78 100644 --- a/R/components.R +++ b/R/components.R @@ -1628,7 +1628,8 @@ component_proximity_selected <- #' Create the component for proximity per marker #' #' This function creates plots visualizing the proximity scores for each marker -#' across different samples and conditions. +#' across different samples and conditions. Every component is shown for every +#' plotted marker, with proximity scores that were filtered out set to 0. #' #' @param es_data An `es_data` object containing proximity scores and sample aliases. #' @param sample_palette A color palette for the samples. @@ -1651,7 +1652,7 @@ component_proximity_per_marker <- function( plot_data <- proximity_scores %>% - filter(marker_1 == marker_2) %>% + complete_proximity_scores(only_self = TRUE) %>% { if (test_mode) { filter(., marker_1 %in% head(levels(marker_1), 10)) diff --git a/R/processing.R b/R/processing.R index 5bc173b..52966ca 100644 --- a/R/processing.R +++ b/R/processing.R @@ -139,7 +139,8 @@ filter_proximity_scores <- function( #' Complete Proximity Scores #' #' This function completes the proximity scores by ensuring that each marker pair has a score for each sample component, -#' filling missing values with 0. +#' filling missing values with 0. Components are collected before `only_self` is applied, so a component is +#' represented even when all of its scores for the kept marker pairs were filtered out. #' #' @param proximity_scores A data frame of proximity scores. #' @param only_self A boolean indicating whether to filter for self-comparisons only (default is TRUE). @@ -156,18 +157,33 @@ complete_proximity_scores <- pixelatorR:::assert_class(proximity_scores, "tbl_df") pixelatorR:::assert_single_value(only_self, "bool") + components <- + proximity_scores %>% + ungroup() %>% + distinct( + sample_component, sample_alias, condition, + seurat_clusters, celltype + ) + if (only_self) { proximity_scores <- proximity_scores %>% filter(marker_1 == marker_2) } - proximity_scores %>% + fill_values <- + list(log2_ratio = 0, join_count_z = 0) %>% + keep(names(.) %in% colnames(proximity_scores)) + + completed <- + proximity_scores %>% complete( - nesting(sample_component, sample_alias, condition, seurat_clusters, celltype), + components, nesting(marker_1, marker_2), - fill = list(log2_ratio = 0) + fill = fill_values ) + + return(completed) } #' Summarize proximity scores per sample and condition diff --git a/man/complete_proximity_scores.Rd b/man/complete_proximity_scores.Rd index bb254d2..284bac7 100644 --- a/man/complete_proximity_scores.Rd +++ b/man/complete_proximity_scores.Rd @@ -16,5 +16,6 @@ A data frame of completed proximity scores with missing values filled. } \description{ This function completes the proximity scores by ensuring that each marker pair has a score for each sample component, -filling missing values with 0. +filling missing values with 0. Components are collected before \code{only_self} is applied, so a component is +represented even when all of its scores for the kept marker pairs were filtered out. } diff --git a/man/component_proximity_per_marker.Rd b/man/component_proximity_per_marker.Rd index d9011f2..41c330a 100644 --- a/man/component_proximity_per_marker.Rd +++ b/man/component_proximity_per_marker.Rd @@ -25,5 +25,6 @@ A list containing plots for each marker. } \description{ This function creates plots visualizing the proximity scores for each marker -across different samples and conditions. +across different samples and conditions. Every component is shown for every +plotted marker, with proximity scores that were filtered out set to 0. } diff --git a/tests/testthat/test_components.R b/tests/testthat/test_components.R index 91abde1..10d65cf 100644 --- a/tests/testthat/test_components.R +++ b/tests/testthat/test_components.R @@ -294,163 +294,142 @@ for (data_type in data_types) { component[[1]]$data, switch(data_type, default = - structure(list( - sample_alias = structure(c( - 1L, 1L, 1L, 1L, 1L, - 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L - ), levels = c("S1", "S2"), class = "factor"), - celltype = c( - "B", "B", "Mono & DC", "NK", "Platelets", "T", - "T", "B", "B", "B", "Mono & DC", "NK", "Platelets", "T" - ), - marker_1 = structure(c( - 1L, 1L, NA, NA, NA, 1L, 1L, 1L, 1L, - 1L, NA, NA, NA, 1L - ), levels = c("CD11b", "B2M", "HLA-ABC"), class = "factor"), marker_2 = structure(c( - 1L, 1L, NA, - NA, NA, 1L, 1L, 1L, 1L, 1L, NA, NA, NA, 1L - ), levels = c( - "CD11b", - "B2M", "HLA-ABC" - ), class = "factor"), join_count = c( - 0, 0, - NA, NA, NA, 0, 0, 0, 0, 0, NA, NA, NA, 0 - ), join_count_expected_mean = c( - 0.2, - 0.12, NA, NA, NA, 0.04, 0, 0.2, 0, 0.12, NA, NA, NA, 0.04 - ), join_count_expected_sd = c( - 0.449466574975495, 0.32659863237109, - NA, NA, NA, 0.196946385566932, 0, 0.449466574975495, 0, 0.32659863237109, - NA, NA, NA, 0.196946385566932 - ), join_count_z = c( - -0.2, -0.12, - NA, NA, NA, -0.04, 0, -0.2, 0, -0.12, NA, NA, NA, -0.04 - ), - join_count_p = c( - 0.420740290560897, 0.452241573979416, NA, - NA, NA, 0.484046563147169, 0.5, 0.420740290560897, 0.5, 0.452241573979416, - NA, NA, NA, 0.484046563147169 - ), log2_ratio = c( - 0, 0, NA, - NA, NA, 0, 0, 0, 0, 0, NA, NA, NA, 0 - ), sample_component = c( - "S1_e2055911bf1693bd", - "S1_dc8d14e01732603e", NA, NA, NA, "S1_99aa508551f33cd3", - "S1_2ee5115016f6d3bf", "S2_e2055911bf1693bd", "S2_2ee5115016f6d3bf", - "S2_dc8d14e01732603e", NA, NA, NA, "S2_99aa508551f33cd3" - ), - count_1 = c( - 49L, 21L, NA, NA, NA, 19L, 12L, 49L, 12L, 21L, - NA, NA, NA, 19L - ), count_2 = c( - 49L, 21L, NA, NA, NA, 19L, - 12L, 49L, 12L, 21L, NA, NA, NA, 19L - ), p1 = c( - 0.016327890703099, - 0.010989010989011, NA, NA, NA, 0.00842945874001775, 0.0184331797235023, - 0.016327890703099, 0.0184331797235023, 0.010989010989011, - NA, NA, NA, 0.00842945874001775 - ), p2 = c( - 0.016327890703099, - 0.010989010989011, NA, NA, NA, 0.00842945874001775, 0.0184331797235023, - 0.016327890703099, 0.0184331797235023, 0.010989010989011, - NA, NA, NA, 0.00842945874001775 - ), condition = c( - "good", "good", - NA, NA, NA, "good", "good", "good", "good", "good", NA, NA, - NA, "good" - ), seurat_clusters = c( - "1", "1", NA, NA, NA, "1", - "1", "1", "1", "1", NA, NA, NA, "1" - ) - ), row.names = c( - NA, - -14L - ), class = c("tbl_df", "tbl", "data.frame")), + structure(list(sample_alias = structure(c(1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, + 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), levels = c("S1", + "S2"), class = "factor"), celltype = c("B", "B", "B", "B", "B", + "B", "B", "B", "B", "B", "B", "B", "Mono & DC", "NK", "Platelets", + "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "B", "B", + "B", "B", "B", "B", "B", "B", "B", "B", "B", "Mono & DC", "NK", + "Platelets", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", + "T", "T"), sample_component = c("S1_128b348aca07cb57", "S1_218e57362e5c1a3d", + "S1_6d7587035b64afd5", "S1_a0525046264c9183", "S1_a9fec42b5a90b80a", + "S1_c716219b3865936c", "S1_d375cd40d5330b42", "S1_dc8d14e01732603e", + "S1_e2055911bf1693bd", "S1_e5bd60fc7282a0f8", "S1_f0dceb55e0820e2d", + "S1_ff94b67d225a95b9", NA, NA, NA, "S1_2ee5115016f6d3bf", "S1_500dadc305f7fd2d", + "S1_7e9a3f5ef0362b6d", "S1_844fa3a723a26b8a", "S1_887179ebbb0ff0a2", + "S1_99aa508551f33cd3", "S1_9f31266d8f62d933", "S1_b720a4c4f4bfac3e", + "S1_c57ec812b0a4d6e9", "S1_c8d43c718f2181fc", "S1_d0f9201e37a9e091", + "S2_2ee5115016f6d3bf", "S2_a0525046264c9183", "S2_a9fec42b5a90b80a", + "S2_c57ec812b0a4d6e9", "S2_c716219b3865936c", "S2_c8d43c718f2181fc", + "S2_d0f9201e37a9e091", "S2_d375cd40d5330b42", "S2_dc8d14e01732603e", + "S2_e2055911bf1693bd", "S2_ff94b67d225a95b9", NA, NA, NA, "S2_128b348aca07cb57", + "S2_218e57362e5c1a3d", "S2_500dadc305f7fd2d", "S2_6d7587035b64afd5", + "S2_7e9a3f5ef0362b6d", "S2_844fa3a723a26b8a", "S2_887179ebbb0ff0a2", + "S2_99aa508551f33cd3", "S2_9f31266d8f62d933", "S2_b720a4c4f4bfac3e", + "S2_e5bd60fc7282a0f8", "S2_f0dceb55e0820e2d"), condition = c("good", + "good", "good", "good", "good", "good", "good", "good", "good", + "good", "good", "good", NA, NA, NA, "good", "good", "good", "good", + "good", "good", "good", "good", "good", "good", "good", "good", + "good", "good", "good", "good", "good", "good", "good", "good", + "good", "good", NA, NA, NA, "good", "good", "good", "good", "good", + "good", "good", "good", "good", "good", "good", "good"), seurat_clusters = c("1", + "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", NA, NA, + NA, "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", + "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", NA, NA, NA, + "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"), + marker_1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, NA, NA, NA, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, NA, NA, + NA, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), levels = c("CD11b", + "B2M", "HLA-ABC"), class = "factor"), marker_2 = structure(c(1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, NA, NA, NA, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, NA, NA, NA, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L), levels = c("CD11b", "B2M", "HLA-ABC" + ), class = "factor"), join_count = c(NA, NA, NA, NA, NA, + NA, NA, 0, 0, NA, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, + 0, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, NA, 0, + 0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, NA, NA, + NA, NA), join_count_expected_mean = c(NA, NA, NA, NA, NA, + NA, NA, 0.12, 0.2, NA, NA, NA, NA, NA, NA, 0, NA, NA, NA, + NA, 0.04, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, + NA, 0.12, 0.2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, + 0.04, NA, NA, NA, NA), join_count_expected_sd = c(NA, NA, + NA, NA, NA, NA, NA, 0.32659863237109, 0.449466574975495, + NA, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, 0.196946385566932, + NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, NA, 0.32659863237109, + 0.449466574975495, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, + NA, 0.196946385566932, NA, NA, NA, NA), join_count_z = c(0, + 0, 0, 0, 0, 0, 0, -0.12, -0.2, 0, 0, 0, NA, NA, NA, 0, 0, + 0, 0, 0, -0.04, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.12, + -0.2, 0, NA, NA, NA, 0, 0, 0, 0, 0, 0, 0, -0.04, 0, 0, 0, + 0), join_count_p = c(NA, NA, NA, NA, NA, NA, NA, 0.452241573979416, + 0.420740290560897, NA, NA, NA, NA, NA, NA, 0.5, NA, NA, NA, + NA, 0.484046563147169, NA, NA, NA, NA, NA, 0.5, NA, NA, NA, + NA, NA, NA, NA, 0.452241573979416, 0.420740290560897, NA, + NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.484046563147169, + NA, NA, NA, NA), log2_ratio = c(0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, NA, NA, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA, NA, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0), count_1 = c(NA, NA, NA, NA, NA, NA, + NA, 21L, 49L, NA, NA, NA, NA, NA, NA, 12L, NA, NA, NA, NA, + 19L, NA, NA, NA, NA, NA, 12L, NA, NA, NA, NA, NA, NA, NA, + 21L, 49L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 19L, + NA, NA, NA, NA), count_2 = c(NA, NA, NA, NA, NA, NA, NA, + 21L, 49L, NA, NA, NA, NA, NA, NA, 12L, NA, NA, NA, NA, 19L, + NA, NA, NA, NA, NA, 12L, NA, NA, NA, NA, NA, NA, NA, 21L, + 49L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 19L, NA, + NA, NA, NA), p1 = c(NA, NA, NA, NA, NA, NA, NA, 0.010989010989011, + 0.016327890703099, NA, NA, NA, NA, NA, NA, 0.0184331797235023, + NA, NA, NA, NA, 0.00842945874001775, NA, NA, NA, NA, NA, + 0.0184331797235023, NA, NA, NA, NA, NA, NA, NA, 0.010989010989011, + 0.016327890703099, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, + NA, 0.00842945874001775, NA, NA, NA, NA), p2 = c(NA, NA, + NA, NA, NA, NA, NA, 0.010989010989011, 0.016327890703099, + NA, NA, NA, NA, NA, NA, 0.0184331797235023, NA, NA, NA, NA, + 0.00842945874001775, NA, NA, NA, NA, NA, 0.0184331797235023, + NA, NA, NA, NA, NA, NA, NA, 0.010989010989011, 0.016327890703099, + NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.00842945874001775, + NA, NA, NA, NA)), row.names = c(NA, -52L), class = c("tbl_df", + "tbl", "data.frame")), hashing = - structure(list( - sample_alias = structure(c( - 1L, 1L, 1L, 1L, 1L, - 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L - ), levels = c("S1", "S2", "S11", "S12"), class = "factor"), celltype = c( - "B", - "Mono & DC", "NK", "Platelets", "T", "B", "B", "Mono & DC", "NK", - "Platelets", "T", "B", "Mono & DC", "NK", "Platelets", "T", "B", - "Mono & DC", "NK", "Platelets", "T" - ), marker_1 = structure(c( - 1L, - NA, NA, NA, 1L, 1L, 1L, NA, NA, NA, NA, 1L, NA, NA, NA, NA, 1L, - NA, NA, NA, 1L - ), levels = c("CD45", "B2M", "HLA-DR-DP-DQ"), class = "factor"), - marker_2 = structure(c( - 1L, NA, NA, NA, 1L, 1L, 1L, NA, NA, - NA, NA, 1L, NA, NA, NA, NA, 1L, NA, NA, NA, 1L - ), levels = c( - "CD45", - "B2M", "HLA-DR-DP-DQ" - ), class = "factor"), join_count = c( - 153, - NA, NA, NA, 345, 214, 258, NA, NA, NA, NA, 17, NA, NA, NA, - NA, 1, NA, NA, NA, 18 - ), join_count_expected_mean = c( - 143.82, - NA, NA, NA, 325.28, 162.28, 245.94, NA, NA, NA, NA, 15.12, - NA, NA, NA, NA, 1.08, NA, NA, NA, 19.49 - ), join_count_expected_sd = c( - 12.001161559944, - NA, NA, NA, 19.0899412934105, 13.1978571875678, 16.6192173052278, + structure(list(sample_alias = structure(c(1L, 1L, 1L, 1L, 1L, + 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L + ), levels = c("S1", "S2", "S11", "S12"), class = "factor"), celltype = c("B", + "Mono & DC", "NK", "Platelets", "T", "B", "B", "Mono & DC", "NK", + "Platelets", "T", "B", "Mono & DC", "NK", "Platelets", "T", "B", + "Mono & DC", "NK", "Platelets", "T"), sample_component = c("S1_d2146defe08567d3", + NA, NA, NA, "S1_68189b2c75de4098", "S11_19b04397ed7f04ba", "S11_fe556695f452a4bb", + NA, NA, NA, NA, "S12_63fab986007319b4", NA, NA, NA, "S12_3d23c6539cbead8d", + "S2_5bfdf506169806f2", NA, NA, NA, "S2_85f5bcdc05a7b286"), condition = c("good", + NA, NA, NA, "good", "good", "good", NA, NA, NA, NA, "good", NA, + NA, NA, "good", "good", NA, NA, NA, "good"), seurat_clusters = c("1", + NA, NA, NA, "1", "1", "1", NA, NA, NA, NA, "1", NA, NA, NA, "1", + "1", NA, NA, NA, "1"), marker_1 = structure(c(1L, NA, NA, NA, + 1L, 1L, 1L, NA, NA, NA, NA, 1L, NA, NA, NA, 1L, 1L, NA, NA, NA, + 1L), levels = c("CD45", "B2M", "HLA-DR-DP-DQ"), class = "factor"), + marker_2 = structure(c(1L, NA, NA, NA, 1L, 1L, 1L, NA, NA, + NA, NA, 1L, NA, NA, NA, 1L, 1L, NA, NA, NA, 1L), levels = c("CD45", + "B2M", "HLA-DR-DP-DQ"), class = "factor"), join_count = c(153, + NA, NA, NA, 345, 258, 214, NA, NA, NA, NA, 17, NA, NA, NA, + NA, 1, NA, NA, NA, 18), join_count_expected_mean = c(143.82, + NA, NA, NA, 325.28, 245.94, 162.28, NA, NA, NA, NA, 15.12, + NA, NA, NA, NA, 1.08, NA, NA, NA, 19.49), join_count_expected_sd = c(12.001161559944, + NA, NA, NA, 19.0899412934105, 16.6192173052278, 13.1978571875678, NA, NA, NA, NA, 3.47365263465745, NA, NA, NA, NA, 0.849004170076968, - NA, NA, NA, 4.54938113229357 - ), join_count_z = c( - 0.764925957720613, - NA, NA, NA, 1.03300474825489, 3.91881797665758, 0.725665943137187, - NA, NA, NA, NA, 0.541217040887393, NA, NA, NA, NA, -0.0800000000000001, - NA, NA, NA, -0.327517074668311 - ), join_count_p = c( - 0.222157817923894, - NA, NA, NA, 0.150800838294423, 4.44921405915763e-05, 0.234021792365565, + NA, NA, NA, 4.54938113229357), join_count_z = c(0.764925957720613, + NA, NA, NA, 1.03300474825489, 0.725665943137187, 3.91881797665758, + NA, NA, NA, NA, 0.541217040887393, NA, NA, NA, 0, -0.0800000000000001, + NA, NA, NA, -0.327517074668311), join_count_p = c(0.222157817923894, + NA, NA, NA, 0.150800838294423, 0.234021792365565, 4.44921405915763e-05, NA, NA, NA, NA, 0.294178996582506, NA, NA, NA, NA, 0.468118627986013, - NA, NA, NA, 0.371638415373185 - ), log2_ratio = c( - 0.0892673380970873, - NA, NA, NA, 0.0849142415955236, 0.399125588969599, 0.0690646698420441, - NA, NA, NA, NA, 0.169076606803992, NA, NA, NA, NA, -0.111031312388744, - NA, NA, NA, -0.114737184040853 - ), sample_component = c( - "S1_d2146defe08567d3", - NA, NA, NA, "S1_68189b2c75de4098", "S11_fe556695f452a4bb", - "S11_19b04397ed7f04ba", NA, NA, NA, NA, "S12_63fab986007319b4", - NA, NA, NA, NA, "S2_5bfdf506169806f2", NA, NA, NA, "S2_85f5bcdc05a7b286" - ), count_1 = c( - 934L, NA, NA, NA, 1274L, 906L, 1582L, NA, - NA, NA, NA, 345L, NA, NA, NA, NA, 77L, NA, NA, NA, 409L - ), - count_2 = c( - 934L, NA, NA, NA, 1274L, 906L, 1582L, NA, NA, - NA, NA, 345L, NA, NA, NA, NA, 77L, NA, NA, NA, 409L - ), p1 = c( - 0.365271802894016, - NA, NA, NA, 0.594493700419972, 0.46749226006192, 0.366373320981936, + NA, NA, NA, 0.371638415373185), log2_ratio = c(0.0892673380970873, + NA, NA, NA, 0.0849142415955236, 0.0690646698420441, 0.399125588969599, + NA, NA, NA, NA, 0.169076606803992, NA, NA, NA, 0, -0.111031312388744, + NA, NA, NA, -0.114737184040853), count_1 = c(934L, NA, NA, + NA, 1274L, 1582L, 906L, NA, NA, NA, NA, 345L, NA, NA, NA, + NA, 77L, NA, NA, NA, 409L), count_2 = c(934L, NA, NA, NA, + 1274L, 1582L, 906L, NA, NA, NA, NA, 345L, NA, NA, NA, NA, + 77L, NA, NA, NA, 409L), p1 = c(0.365271802894016, NA, NA, + NA, 0.594493700419972, 0.366373320981936, 0.46749226006192, NA, NA, NA, NA, 0.109211775878443, NA, NA, NA, NA, 0.0275985663082437, - NA, NA, NA, 0.116690442225392 - ), p2 = c( - 0.365271802894016, - NA, NA, NA, 0.594493700419972, 0.46749226006192, 0.366373320981936, + NA, NA, NA, 0.116690442225392), p2 = c(0.365271802894016, + NA, NA, NA, 0.594493700419972, 0.366373320981936, 0.46749226006192, NA, NA, NA, NA, 0.109211775878443, NA, NA, NA, NA, 0.0275985663082437, - NA, NA, NA, 0.116690442225392 - ), condition = c( - "good", NA, - NA, NA, "good", "good", "good", NA, NA, NA, NA, "good", NA, - NA, NA, NA, "good", NA, NA, NA, "good" - ), seurat_clusters = c( - "1", - NA, NA, NA, "1", "1", "1", NA, NA, NA, NA, "1", NA, NA, NA, - NA, "1", NA, NA, NA, "1" - ) - ), row.names = c(NA, -21L), class = c( - "tbl_df", - "tbl", "data.frame" - )) + NA, NA, NA, 0.116690442225392)), row.names = c(NA, -21L), class = c("tbl_df", + "tbl", "data.frame")) ) ) diff --git a/tests/testthat/test_processing.R b/tests/testthat/test_processing.R index 7006ac5..bdd9897 100644 --- a/tests/testthat/test_processing.R +++ b/tests/testthat/test_processing.R @@ -389,3 +389,75 @@ test_that("Proximity ANOVAs work as expected", { )) ) }) + +test_that("Proximity score completion works as expected", { + proximity_scores <- tibble( + sample_component = c("c1", "c1", "c2"), + sample_alias = factor(c("S1", "S1", "S2"), levels = c("S1", "S2")), + condition = "unstim", + seurat_clusters = "1", + celltype = "T", + marker_1 = factor(c("CD3", "CD3", "CD4"), levels = c("CD3", "CD4")), + marker_2 = factor(c("CD3", "CD4", "CD4"), levels = c("CD3", "CD4")), + log2_ratio = c(0.5, 0.2, 0.1), + join_count_z = c(1.2, 0.3, 0.8) + ) + + expect_equal( + complete_proximity_scores(proximity_scores), + structure(list(sample_component = c("c1", "c1", "c2", "c2"), sample_alias = structure(c( + 1L, + 1L, 2L, 2L + ), levels = c("S1", "S2"), class = "factor"), condition = c( + "unstim", + "unstim", "unstim", "unstim" + ), seurat_clusters = c( + "1", "1", + "1", "1" + ), celltype = c("T", "T", "T", "T"), marker_1 = structure(c( + 1L, + 2L, 1L, 2L + ), levels = c("CD3", "CD4"), class = "factor"), marker_2 = structure(c( + 1L, + 2L, 1L, 2L + ), levels = c("CD3", "CD4"), class = "factor"), log2_ratio = c( + 0.5, + 0, 0, 0.1 + ), join_count_z = c(1.2, 0, 0, 0.8)), row.names = c( + NA, + -4L + ), class = c("tbl_df", "tbl", "data.frame")) + ) + + expect_equal( + complete_proximity_scores(proximity_scores, only_self = FALSE), + structure(list(sample_component = c( + "c1", "c1", "c1", "c2", "c2", + "c2" + ), sample_alias = structure(c(1L, 1L, 1L, 2L, 2L, 2L), levels = c( + "S1", + "S2" + ), class = "factor"), condition = c( + "unstim", "unstim", "unstim", + "unstim", "unstim", "unstim" + ), seurat_clusters = c( + "1", "1", + "1", "1", "1", "1" + ), celltype = c( + "T", "T", "T", "T", "T", + "T" + ), marker_1 = structure(c(1L, 1L, 2L, 1L, 1L, 2L), levels = c( + "CD3", + "CD4" + ), class = "factor"), marker_2 = structure(c( + 1L, 2L, 2L, 1L, + 2L, 2L + ), levels = c("CD3", "CD4"), class = "factor"), log2_ratio = c( + 0.5, + 0.2, 0, 0, 0, 0.1 + ), join_count_z = c(1.2, 0.3, 0, 0, 0, 0.8)), row.names = c( + NA, + -6L + ), class = c("tbl_df", "tbl", "data.frame")) + ) +})