R/ms_innerscale.R

Defines functions ms_innerplotmedian ms_innerplotbox ms_innerscale

Documented in ms_innerplotbox ms_innerplotmedian ms_innerscale

#' ms_innerscale
#'
#' Internal function to generate median or sum of reading data, according to condition group
#'
#' @param data dataset to be calculated
#' @param nread number of reading channels or sample treatements, default value 10
#' @param sumf whether to calculate sum or not, default to FALSE, i.e., to calculate median
#'
#' @importFrom gtools mixedsort
#'
#' @keywords internal
#'
#' @return a dataframe
#' @examples \dontrun{
#' }
#'
#'

ms_innerscale <- function(data, nread, sumf=FALSE) {

  # create vector of unique ids and prepare to iterate
  uniqueCondition <- unique(data$condition)
  uniques <- which(!duplicated(data$condition))
  # create outdataset
  outdata <- data[uniques, c(1:(nread+3))]
  # calculate median
  for (i in seq_along(uniqueCondition)) {
    pattern <- grep(paste0("^",uniqueCondition[i],"$"), data$condition, value=FALSE)
    tmpdata <- data[pattern, ]
    for (j in seq_len(nread)) {
      if (sumf) {
        outdata[i,j+3] <- sum(tmpdata[[j+3]], na.rm=TRUE)
      } else {
        outdata[i,j+3] <- median(tmpdata[[j+3]], na.rm=TRUE)
      }
    }
  }
  return(outdata)
}


#' ms_innerplotbox
#'
#' Internal function to generate box plot on reading data, according to condition group
#'
#' @param data dataset to be calculated
#' @param filename filename to be specified
#' @param xlabel label on x axis to be specified
#' @param ylabel label on y axis to be specified
#' @param isratio whether the reading data are ratio or abundance
#' @param isothermalstyle whether the reading data are from Isothermal or CETSA melt curve data
#' @param outdir the subfolder name to save the plot
#'
#' @keywords internal
#'
#' @import tidyr
#' @import dplyr
#' @import ggplot2
#'
#' @return NULL
#' @examples \dontrun{
#' }
#'
#'

ms_innerplotbox <- function(data, filename, xlabel, ylabel, isratio, isothermalstyle, outdir=NULL) {

  data <- tidyr::gather(data, treatment, reading, -id, -condition)
  #d1 <- melt(data, id.vars=c("id", "condition"), variable.name="treatment", value.name="reading")
  if (isratio) {
    data$treatment <- factor(data$treatment, levels=gtools::mixedsort(unique(data$treatment)))
    q <- ggplot(data, aes(x = treatment, y = reading))
    if (isothermalstyle) {
      q <- q + coord_cartesian(ylim=c(0,2)) + scale_y_continuous(breaks=c(0,0.9,1,1.1,2)) +
        geom_hline(yintercept=c(0.9,1.1), color="blue", size=0.5, linetype=c(2,2))
    } else {
      q <- q + coord_cartesian(ylim=c(0,1.2)) + scale_y_continuous(breaks=c(0,0.5,1))
    }
    q <- q + labs(x=xlabel, y=ylabel) + geom_boxplot(aes(fill=condition)) +
      theme(text=element_text(size=20), axis.text.x = element_text(angle=45,hjust=1), aspect.ratio=1)
  } else {
    data$treatment <- factor(data$treatment, levels=gtools::mixedsort(unique(data$treatment)))
    q <- ggplot(data, aes(x=treatment, y = log10(reading)))
    q <- q + labs(x=xlabel, y=ylabel) + geom_boxplot(aes(fill=condition)) +
      theme(text=element_text(size=20), axis.text.x = element_text(angle=45,hjust=1), aspect.ratio=1)
  }
  if (length(outdir)) {
    ggsave(filename=paste0(outdir,"/",format(Sys.time(), "%y%m%d_%H%M_"),filename), q, height=12, width=12)
  } else {
    ggsave(filename=paste0(format(Sys.time(), "%y%m%d_%H%M_"),filename), q, height=12, width=12)
  }
}

#' ms_innerplotmedian
#'
#' Internal function to generate median line plot on reading data,
#' comparing pre-scaling and post-scaling median change, according to condition group
#'
#' @param mediandata pre-scaling and post-scaling median data, generated from
#' \code{ms_innerscale} and with a set category factor
#' @param filename filename to be specified
#' @param xlabel label on x axis to be specified
#' @param ylabel label on y axis to be specified
#' @param isothermalstyle whether the reading data are from Isothermal or CETSA melt curve data
#' @param outdir the subfolder name to save the plot
#'
#' @keywords internal
#'
#' @import dplyr
#' @import ggplot2
#'
#' @return NULL
#' @examples \dontrun{
#' }
#'
#'

ms_innerplotmedian <- function(mediandata, filename, xlabel, ylabel, isothermalstyle, outdir=NULL) {

  # mdata$set <- "Pre-normalization"
  # scalemdata$set <- "Post-normalization"
  # mdata <- tidyr::gather(mdata, treatment, reading, -id, -set, -condition)
  # scalemdata <- tidyr::gather(scalemdata, treatment, reading, -id, -set, -condition)
  #mdata <- melt(mdata, id.vars=c("id", "set", "condition"), variable.name="treatment", value.name="reading")
  #scalemdata <- melt(scalemdata, id.vars=c("id", "set", "condition"), variable.name="treatment", value.name="reading")
  # data <- rbind(mdata, scalemdata)
  # data$set <- factor(data$set, levels=c("Pre-normalization", "Post-normalization"))
  # mediandata$treatment <- factor(mediandata$treatment,
  #                                levels=sort(as.numeric(unique(mediandata$treatment)), decreasing=FALSE))
  q <- ggplot(mediandata, aes(x = treatment, y = reading))
  if (isothermalstyle) {
    if (max(mediandata$reading)>2.0) {
      ylim = max(mediandata$reading,na.rm=T)
      q <- q + coord_cartesian(ylim=c(0,ylim)) + scale_y_continuous(breaks=seq(0,ylim,0.5))
    } else {
      q <- q + coord_cartesian(ylim=c(0,2)) + scale_y_continuous(breaks=seq(0,2,0.5))
    }
  } else {
    if (max(mediandata$reading)>1.2) {
      ylim = max(mediandata$reading,na.rm=T)
      q <- q + coord_cartesian(ylim=c(0,ylim)) + scale_y_continuous(breaks=seq(0,ylim,0.5))
    } else {
      q <- q + coord_cartesian(ylim=c(0,1.2)) + scale_y_continuous(breaks=seq(0,1,0.5))
    }
  }
  q <- q + labs(x=xlabel, y=ylabel) + geom_point(aes(group = condition, colour = condition)) +
    geom_line(aes(group = condition, colour = condition)) + facet_grid( .~set) +
    theme(text=element_text(size=20), axis.text.x = element_text(angle=45,hjust=1),
          aspect.ratio=1, legend.position="bottom")
  if (length(outdir)) {
    ggsave(filename=paste0(outdir,"/",format(Sys.time(), "%y%m%d_%H%M_"),filename), q, height=6, width=12)
  } else {
    ggsave(filename=paste0(format(Sys.time(), "%y%m%d_%H%M_"),filename), q, height=6, width=12)
  }
}
nkdailingyun/mineCETSA documentation built on Feb. 27, 2021, 8:26 p.m.