R/regVarNetVis.R

Defines functions regVarNetVis

Documented in regVarNetVis

#' @title Variant 'switches' Network Visualization
#' @description Variant 'switches' network visualization
#'
#' @param regVar the standard out of the function regVarDetection.
#' @param regulationType a character representing the CREs type, it should be "miRNA-mRNA", "miRNA-mRNA-pathway", "lncRNA-miRNA-mRNA", "circRNA-miRNA-mRNA", "lncRNA-miRNA-mRNA-pathway" or "circRNA-miRNA-mRNA-pathway".
#' @param selectCREs a vector of elements or CREs.
#'
#' @examples
#' regVarNetVis(regVar = regVar, regulationType = "miRNA-mRNA-pathway", selectCREs = c("MIMAT0000717","6774", "hsa04550"))
#' @export
regVarNetVis = function(regVar = NULL, regulationType = NULL, selectCREs = NULL){

  if(is.null(regVar) | is.character(regVar)){
    return(NULL)
  }
  if(is.null(regulationType) | !regulationType %in% c("miRNA-mRNA", "miRNA-mRNA-pathway", "lncRNA-miRNA-mRNA", "circRNA-miRNA-mRNA", "lncRNA-miRNA-mRNA-pathway", "circRNA-miRNA-mRNA-pathway")){
    return("Please choose regulation type from miRNA-mRNA, miRNA-mRNA-pathway, lncRNA-miRNA-mRNA, circRNA-miRNA-mRNA, lncRNA-miRNA-mRNA-pathway or circRNA-miRNA-mRNA-pathway")
  }
  if(is.null(selectCREs)){
    return("selectCREs is empty!")
  }

  if(any(grepl("_", selectCREs))){
    elements_all = c()
    for(i in selectCREs){
      elements_all = c(unlist(strsplit(i, "_")), elements_all)
    }
    selectCREs = unique(elements_all)
  }


  miRNAID = c()
  lnc_cirRNAID = c()
  pathwayID = c()
  mRNAID = c()
  for(i in selectCREs){
    if(grepl("MIMAT", i)){
      miRNAID = append(miRNAID, i)
    }else if(grepl("ENSG", i) | grepl("hsa_circ", i)){
      lnc_cirRNAID = append(lnc_cirRNAID, i)
    }else if(grepl("R-HSA", i) | grepl("WP", i) | grepl("hsa", i)){
      pathwayID = append(pathwayID, i)
    }else{
      mRNAID = append(mRNAID, i)
    }
  }
  if(regulationType == "lncRNA-miRNA-mRNA" | regulationType == "circRNA-miRNA-mRNA"){
    if(length(lnc_cirRNAID) == 0 | length(miRNAID) == 0 | length(mRNAID) == 0){
      return(NULL)
    }
    regVar_filter = regVar[regVar$ceRNA %in% lnc_cirRNAID & regVar$miRNA %in% miRNAID & regVar$mRNA %in% mRNAID, ]
    if(nrow(regVar_filter) == 0){
      return(NULL)
    }
    lnc_mim = regVar_filter[,c(1,2)] %>% dplyr::rename(node1=ceRNA, node2=miRNA)
    lnc_mim$group = "lncRNA-miRNA"
    mim_m = regVar_filter[,c(2,3)] %>% dplyr::rename(node1=miRNA, node2=mRNA)
    mim_m$group = "miRNA-mRNA"
    lnc_var = regVar_filter[,c(1,4,6)] %>% dplyr::rename(node1=ceRNA, node2=Location, group=lncMutType)
    mi_var = regVar_filter[,c(2,11,12)] %>% dplyr::rename(node1=miRNA, node2=SNPID, group=mimMutType) %>% filter(group == "Seed_SNP")
    m_var = regVar_filter[,c(3,11,12)] %>% dplyr::rename(node1=mRNA, node2=SNPID, group=mimMutType) %>% filter(group == "UTR3_SNP")

    regVar_edgeInfo = rbind(lnc_mim, mim_m, lnc_var, mi_var, m_var) %>% distinct()
    regVar_edgeInfo$title = regVar_edgeInfo$group
    colnames(regVar_edgeInfo) = c("node1", "node2", "group", "title")
  }else if(regulationType == "lncRNA-miRNA-mRNA-pathway" | regulationType == "circRNA-miRNA-mRNA-pathway"){
    if(length(lnc_cirRNAID) == 0 | length(miRNAID) == 0 | length(mRNAID) == 0 | length(pathwayID) == 0){
      return(NULL)
    }
    regVar_filter = regVar[regVar$ceRNA %in% lnc_cirRNAID & regVar$miRNA %in% miRNAID & regVar$mRNA %in% mRNAID & regVar$pathway %in% pathwayID, ]
    if(nrow(regVar_filter) == 0){
      return(NULL)
    }
    lnc_mim = regVar_filter[,c(1,2)] %>% dplyr::rename(node1=ceRNA, node2=miRNA)
    lnc_mim$group = "lncRNA-miRNA"
    mim_m = regVar_filter[,c(2,3)] %>% dplyr::rename(node1=miRNA, node2=mRNA)
    mim_m$group = "miRNA-mRNA"
    m_path = regVar_filter[,c(3,14)] %>% dplyr::rename(node1=mRNA, node2=pathway)
    m_path$group = "mRNA-pathway"
    lnc_var = regVar_filter[,c(1,4,6)] %>% dplyr::rename(node1=ceRNA, node2=Location, group=lncMutType)
    mi_var = regVar_filter[,c(2,11,12)] %>% dplyr::rename(node1=miRNA, node2=SNPID, group=mimMutType) %>% filter(group == "Seed_SNP")
    m_var = regVar_filter[,c(3,11,12)] %>% dplyr::rename(node1=mRNA, node2=SNPID, group=mimMutType) %>% filter(group == "UTR3_SNP")

    regVar_edgeInfo = rbind(lnc_mim, mim_m, m_path, lnc_var, mi_var, m_var) %>% distinct()
    regVar_edgeInfo$title = regVar_edgeInfo$group
    colnames(regVar_edgeInfo) = c("node1", "node2", "group", "title")
  }else if(regulationType == "miRNA-mRNA-pathway"){
    if(length(miRNAID) == 0 | length(mRNAID) == 0 | length(pathwayID) == 0){
      return(NULL)
    }
    regVar_filter = regVar[regVar$miRNAID %in% miRNAID & regVar$geneID %in% mRNAID & regVar$pathway %in% pathwayID, ]
    if(nrow(regVar_filter) == 0){
      return(NULL)
    }
    mim_m = regVar_filter[,c(1,2)] %>% dplyr::rename(node1=miRNAID, node2=geneID)
    mim_m$group = "miRNA-mRNA"
    m_path = regVar_filter[,c(2,6)] %>% dplyr::rename(node1=geneID, node2=pathway)
    m_path$group = "mRNA-pathway"
    mi_var = regVar_filter[,c(1,3,4)] %>% dplyr::rename(node1=miRNAID, node2=SNPID, group=MutType) %>% filter(group == "Seed_SNP")
    m_var = regVar_filter[,c(2,3,4)] %>% dplyr::rename(node1=geneID, node2=SNPID, group=MutType) %>% filter(group == "UTR3_SNP")

    regVar_edgeInfo = rbind(mim_m, m_path, mi_var, m_var) %>% distinct()
    regVar_edgeInfo$title = regVar_edgeInfo$group
    colnames(regVar_edgeInfo) = c("node1", "node2", "group", "title")
  }else if(regulationType == "miRNA-mRNA"){
    if(length(miRNAID) == 0 | length(mRNAID) == 0){
      return(NULL)
    }
    regVar_filter = regVar[regVar$miRNAID %in% miRNAID & regVar$geneID %in% mRNAID, ]
    if(nrow(regVar_filter) == 0){
      return(NULL)
    }
    mim_m = regVar_filter[,c(1,2)] %>% dplyr::rename(node1=miRNAID, node2=geneID)
    mim_m$group = "miRNA-mRNA"
    mi_var = regVar_filter[,c(1,3,4)] %>% dplyr::rename(node1=miRNAID, node2=SNPID, group=MutType) %>% filter(group == "Seed_SNP")
    m_var = regVar_filter[,c(2,3,4)] %>% dplyr::rename(node1=geneID, node2=SNPID, group=MutType) %>% filter(group == "UTR3_SNP")
    regVar_edgeInfo = rbind(mim_m, mi_var, m_var) %>% distinct()
    regVar_edgeInfo$title = regVar_edgeInfo$group
    colnames(regVar_edgeInfo) = c("node1", "node2", "group", "title")
  }

  edgeInfo = regVar_edgeInfo %>% distinct()

  nodeInfo = data.frame(table(c(edgeInfo$node1, edgeInfo$node2)))
  colnames( nodeInfo) = c("label", "value")

  regVar_label = regVar_edgeInfo[,c(2, 3)] %>% distinct()
  colnames(regVar_label) = c("label", "group")
   nodeInfo =  nodeInfo %>% dplyr::left_join(regVar_label, by = "label")
   nodeInfo$group[is.na( nodeInfo$group)] = sapply( nodeInfo$label[is.na( nodeInfo$group)], function(x){
    if(grepl("MIMAT", x)){
      return("miRNA")
    }else if(grepl("ENSG", x)){
      return("lncRNA")
    }else if(grepl("hsa_circ", x)){
      return("circRNA")
    }else if(grepl("R-HSA", x)){
      return("Reactome")
    }else if(grepl("WP", x)){
      return("Wikipathway")
    }else if(grepl("hsa", x)){
      return("KEGG")
    }else{
      return("mRNA")
    }
  })
  nodeInfo =  nodeInfo %>% dplyr::distinct()
  nodeInfo$id = 1:nrow( nodeInfo)
  nodeInfo$title =  nodeInfo$group

  nodeInfo_1 = nodeInfo[,c(1, 4)] %>% dplyr::rename(node1=label,from=id)
  nodeInfo_2 = nodeInfo[,c(1, 4)] %>% dplyr::rename(node2=label,to=id)

  edgeInfo = dplyr::left_join(edgeInfo, nodeInfo_1, by = "node1")
  edgeInfo = dplyr::left_join(edgeInfo, nodeInfo_2, by = "node2")
  edgeInfo = edgeInfo[,-c(1,2)]
  return(visNetwork::visNetwork(nodes = nodeInfo, edges = edgeInfo) %>% visNetwork::visIgraphLayout(layout = "layout_nicely") %>% visNetwork::visOptions(manipulation = TRUE, highlightNearest = TRUE,selectedBy = list(variable = "group", highlight = TRUE), nodesIdSelection = TRUE))
}
mortyran/NetLCP documentation built on Feb. 26, 2023, 11:33 a.m.