R/extract_analysis_comparisons.R

Defines functions extract_analysis_comparisons .make_comparison_unit

Documented in extract_analysis_comparisons

# Helper function to assemble comparison units.
.make_comparison_unit <- function(data, type, comparison){
  cl_samps <- unlist(data$control_samples)
  bl_samps <- unlist(data$baseline_samples)
  tr_samps <- unlist(data$treatment_samples)
  pl_samps <- unlist(data$plasmid_samples)
  if(type == "samples"){
    samples <- c(cl_samps, bl_samps, tr_samps, pl_samps)
    samples <- samples[!is.null(samples)]
    if(length(samples) == 0)
      stop(paste("no samples found for analysis comparison:",comparison))
    return(samples)
  }else{
    return(c(rep("control",length(cl_samps)),
             rep("baseline",length(bl_samps)),
             rep("treatment",length(tr_samps)),
             rep("plasmid",length(pl_samps))))
  }
}


#' extract_analysis_comparisons
#'
#' Extracts analysis comparisons from output generated by `fgcQC::read_analysis_config_json`.
#'
#' @param json_list A list returned by `fgcQC::read_analysis_config_json`.
#'
#' @return A data frame containing sample comparisons.
#' @author Alex T. Kalinka, \email{alex.kalinka@@cancer.org.uk}
#' @importFrom dplyr rowwise ungroup do
#' @export
extract_analysis_comparisons <- function(json_list){
  if(!inherits(json_list, "list") || !"comparisons" %in% names(json_list) || !inherits(json_list$comparisons,"data.frame"))
    stop("'json_list' should be a list produced by the 'fgcQC::read_analysis_config_json' function")

  comp <- json_list$comparisons %>%
    dplyr::rowwise() %>%
    dplyr::do(data.frame(sample = .make_comparison_unit(., type = "samples", comparison = .$name),
                         class = .make_comparison_unit(., type = "type", comparison = .$name),
                         comparison = .$name, type = .$type[1], goal = .$goal[1],
                         stringsAsFactors = F)) %>%
    dplyr::ungroup()
  return(comp)
}
alex-kalinka-cruk/fgcQC documentation built on June 23, 2020, 9:05 p.m.