R/write_z_scores.R

Defines functions write_z_scores

Documented in write_z_scores

#' Generate SEG file from a table of Z-scores
#'
#' For a quick visualization using a genome browser like IGV, generates
#' a [SEG](https://bit.ly/2J2WZdZ) file scores reporting Z-scores for tumor and
#' normal samples generated by [compute_z_scores].
#'
#' NOTE: SEG files have 1-based coordinates.
#'
#' @param z_scores_data A list generated by [compute_z_scores].
#' @param path A string including absolute or relative path which a prefix is added to
#' ("_z_scores.set")
#' @return Nothing. Only saves output tables.
#' @importFrom utils write.table
#' @export
write_z_scores <- function(z_scores_data, path){
    # check parameters
    assertthat::assert_that(is.list(z_scores_data))

    genomic_coordinates <- strsplit(rownames(z_scores_data[[1]]), "[:-]")
    genomic_coordinates <- do.call(genomic_coordinates, what = "rbind")
    genomic_coordinates <- as.data.frame(genomic_coordinates)
    genomic_coordinates <- setNames(genomic_coordinates, c("chr", "start", "end"))

    z_scores_table <- cbind(genomic_coordinates, as.data.frame(z_scores_data[[1]]))
    z_scores_table <- tidyr::pivot_longer(z_scores_table, cols = -c(chr, start, end), names_to="ID", values_to="z_score", values_drop_na = TRUE)
    z_scores_table <- z_scores_table[c("ID", "chr", "start", "end", "z_score")]

    tumor_dmr_beta_table <- cbind(genomic_coordinates, as.data.frame(z_scores_data[[2]]))
    tumor_dmr_beta_table <- tidyr::pivot_longer(tumor_dmr_beta_table, cols = -c(chr, start, end), names_to="ID", values_to="median_beta", values_drop_na = TRUE)
    tumor_dmr_beta_table <- tumor_dmr_beta_table[c("ID", "chr", "start", "end", "median_beta")]

    control_dmr_beta_table <- cbind(genomic_coordinates, as.data.frame(z_scores_data[[3]]))
    control_dmr_beta_table <- tidyr::pivot_longer(control_dmr_beta_table, cols = -c(chr, start, end), names_to="ID", values_to="median_beta", values_drop_na = TRUE)
    control_dmr_beta_table <- control_dmr_beta_table[c("ID", "chr", "start", "end", "median_beta")]

    write.table(z_scores_table,
                file=paste0(path.expand(path), "_z_scores.seg"),
                sep = "\t", quote = FALSE, row.names = FALSE)
    write.table(z_scores_table,
                file=paste0(path.expand(path), "_tumor_dmr.seg"),
                sep = "\t", quote = FALSE, row.names = FALSE)
    write.table(z_scores_table,
                file=paste0(path.expand(path), "_control_dmr.seg"),
                sep = "\t", quote = FALSE, row.names = FALSE)
}
cgplab/ROCkerMeth documentation built on March 27, 2022, 9:57 p.m.