/R/helper_normalize_by_feature.R

https://github.com/ShixiangWang/sigminer · R · 43 lines · 34 code · 7 blank · 2 comment · 1 complexity · 474823aec370774c42f5acc3504377d1 MD5 · raw file

  1. helper_normalize_by_feature <- function(w, feature_setting = sigminer::CN.features) {
  2. mat <- as.data.frame(w)
  3. mat$context <- rownames(mat)
  4. # Method "W"
  5. mat$base <- sub("\\[.*\\]$", "", mat$context)
  6. mat <- tidyr::gather(mat, class, signature, -c("context", "base"))
  7. if (!inherits(feature_setting, "sigminer.features")) {
  8. feature_setting <- get_feature_components(feature_setting)
  9. }
  10. avail_features <- unique(feature_setting$feature)
  11. # Make sure
  12. f_orders <- avail_features[avail_features %in% mat$base]
  13. comp_orders <- feature_setting$component[feature_setting$feature %in% f_orders]
  14. mat <- dplyr::mutate(mat,
  15. context = factor(.data$context,
  16. levels = comp_orders
  17. ),
  18. base = factor(.data$base, levels = f_orders),
  19. class = factor(class)
  20. )
  21. mat <- mat %>%
  22. dplyr::group_by(.data$base, .data$class) %>%
  23. tidyr::nest() %>%
  24. dplyr::mutate(
  25. context = purrr::map(.data$data, ~ .$context),
  26. signature = purrr::map(.data$data, ~ .$signature / sum(.$signature))
  27. ) %>%
  28. dplyr::select(-"data") %>%
  29. tidyr::unnest(cols = c("context", "signature")) %>%
  30. dplyr::ungroup() %>%
  31. tidyr::pivot_wider(names_from = "class", values_from = "signature") %>%
  32. dplyr::select(-"base") %>%
  33. tibble::column_to_rownames(var = "context")
  34. w <- as.matrix(mat)
  35. return(w)
  36. }