server <- function(input, output,session) { options(shiny.maxRequestSize=150*1024^2) originaldir <- reactiveValues(datapath = getwd()) # directry of shiny R script global <- reactiveValues(datapath = getwd()) # directory of file path in lipidomics tab col = reactiveValues(col = col) svg_path <- paste(getwd(),"/svg",sep = "") observeEvent(input$filetype,{ if(input$filetype =="Sample in rows"){ shinyjs::show("ontfile") }else{ shinyjs::hide("ontfile") } if(input$ClassorMol =="TRUE"){ shinyjs::show("X1") shinyjs::show("X2") }else{ shinyjs::hide("X1") shinyjs::hide("X2") } }) observeEvent(input$ClassorMol,{ if(input$ClassorMol =="TRUE"){ shinyjs::show("X1") shinyjs::show("X2") }else{ shinyjs::hide("X1") shinyjs::hide("X2") } }) observeEvent(input$file1, { tryCatch({ originaldata <- read.csv(input$file1$datapath, header = F, check.names = F, fileEncoding = "UTF-8-BOM") }, error = function(e) { showNotification(paste("Failed to load the file", e$message), type = "error") }) observeEvent(input$submit,{ tryCatch({ if(input$filetype == "Sample in rows"){ Lipidomedata <- processSampleInRows(originaldata, session, input)[[1]] lipidont <- read.csv(input$ontfile$datapath, sep = ",", check.names = FALSE) metadata <- processSampleInRows(originaldata, session, input)[[2]] alitable <- read.csv(input$ontfile$datapath, check.names = FALSE, fileEncoding = "UTF-8-BOM") colnames(alitable) <- c("Metabolite name","Ontology") letchoice <- c(colnames(Lipidomedata)[!colnames(Lipidomedata) %in% colnames(metadata)],"Others") moldata <- processSampleInRowstomoldata(originaldata, session, input)[[1]] }else if(input$filetype == "MS-DIAL export"){ Lipidomedata <- processMSDIALExport(originaldata, session, input)[[1]] metadata <- processMSDIALExport(originaldata, session, input)[[2]] alitable <- process_alignment_file(originaldata)[[1]] %>% select(c(1,2)) moldata <- processMSDIALExporttomoldata(originaldata, session, input)[[1]] } if(length(input$transcriptomefile) !=0){ transcriptome <- read.csv(input$transcriptomefile$datapath,check.names = F,fileEncoding ="UTF-8-BOM") %>% t() colnames(transcriptome) <- transcriptome[1,] transcriptome <- transcriptome[-1,] %>% data.frame() transcriptome[,-c(1)] <- apply(transcriptome[,-c(1)],2,as.numeric) %>% data.frame() transcriptome <- rownames_to_column(transcriptome,"name") transcriptome[,2] <- as.character(transcriptome[,2]) } if(length(input$file1) !=0 & length(input$transcriptomefile) != 0){ Ensembl <- gconvert(query = colnames(transcriptome)[-c(1:2)] , organism = "mmusculus",#sapiens target="ENSG", mthreshold = Inf, filter_na = TRUE) %>% select(input,target) transcriptome <- transcriptome %>% select(-2) data <- inner_join(Lipidomedata,transcriptome,by =c("name")) moldata <- inner_join(moldata,transcriptome,by =c("name")) } else{ data <- Lipidomedata } }, error = function(e) { showNotification(paste("Error:Invalid CSV file format. Please ensure your file is a properly formatted CSV.", e$message), type = "error") }) metainfocol <- ncol(metadata) lipidclassproperties <- read_csv("./pathwaymap/lipidclassproperties.csv") processAndUpdateInputs(data, session, metadata, metainfocol) processAndUpdateInputs2(moldata, session, metadata, metainfocol) observeEvent(input$y,{ targetclass <- filter(alitable,Ontology %in% input$y) shiny::updateSelectInput(session, "mol", selected = targetclass$`Metabolite name`[1], choices = targetclass$`Metabolite name`) }) shinyjs::onclick(id = "Colorpicker",{ ShowtestModaldialog(data,input,col$col) } ) shinyjs::onclick(id = "exportgraph",{ ShowtestModaldialog2(data,input,col$col) } ) observeEvent(input$w,{ updateOrderInput(session, "levels", items = c(unique(as.matrix(select(data,input$w)))), item_class = "success") shiny::updateSelectInput(session, "q", selected = c(unique(as.matrix(select(data,input$w))))[1], choices = c(unique(as.matrix(select(data,input$w))))) col$col <<- rainbow_hcl(length(unique(as.matrix(select(data,input$w))))) col$col <<- setNames(col$col,unique(as.matrix(select(data,input$w)))) }) observeEvent(input$levels,{ if (!is.null(input$levels) && any(input$levels != "")) { dataa <<- mutate(data, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) moldataa <<- mutate(moldata, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) } }) observe({ if (length(grep("selectcolor", names(input), value = TRUE)) != 0) { col$col <<- process_select_color_input(input,data) } }) observeEvent(input$levels,{ observe({ if (!is.null(input$mol) && input$mol != "") { if(!is.null(input$levels) && any(input$levels != "")){ output$plottest <- renderPlotly({ if(input$mydrop == "box"){ process_boxplot(input,input$y,dataa,col$col) } else if(input$mydrop == "bar"){ process_barplot(input,input$y,dataa,col$col) } else if(input$mydrop == "violin"){ process_violinplot(input,input$y,dataa,col$col) } else if(input$mydrop == "polar"){ process_polarplot(input,input$y,dataa,col$col) } else if(input$mydrop == "coding"){ process_dotplot(input,input$y,dataa,col$col) } } ) output$mappingraph <- renderPlot({ if(input$mydrop == "box"){ process_boxplot_diagram(input,input$y,dataa,col$col) } else if(input$mydrop == "bar"){ process_barplot_diagram(input,input$y,dataa,col$col) } else if(input$mydrop == "violin"){ process_violinplot_diagram(input,input$y,dataa,col$col) } else if(input$mydrop == "polar"){ process_polar_diagram(input,input$y,dataa,col$col) } else if(input$mydrop == "coding"){ process_dotplot_diagram(input,input$y,dataa,col$col) } } ) observeEvent(input$mol,{ output$plottest2 <- renderPlotly({ if(input$mydrop == "box"){ process_boxplot(input, paste("`",input$mol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "bar"){ process_barplot(input, paste("`",input$mol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "violin"){ process_violinplot(input,paste("`",input$mol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "polar"){ process_polarplot(input,paste("`",input$mol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "coding"){ process_dotplot(input,paste("`",input$mol,"`",sep =""),moldataa,col$col) } }) }) } } }) }) graph_json <- reactive({ if (input$pathwaytype == "Global pathway") { read_graph_json("./pathwaymap/globalpathway.cyjs") } else if (input$pathwaytype == "Ceramide pathway") { read_graph_json("./pathwaymap/ceramidepathway.cyjs") } else if (input$pathwaytype == "Remodeling pathway") { read_graph_json("./pathwaymap/remodeling.cyjs") } }) style_file_path <- "./pathwaymap/nodestyle1.js" styles_xml_path <- "./pathwaymap/styles.xml" # CYJSファイルのダウンロード output$exportCYJS <- downloadHandler( filename = function() { paste0(input$pathwaytype, "_", format(Sys.Date(), "%Y%m%d"), ".cyjs") }, content = function(file) { writeLines(graph_json, file) }, contentType = "application/json" ) # styles.xmlファイルのダウンロード output$exportStyles <- downloadHandler( filename = function() { "styles.xml" }, content = function(file) { file.copy(styles_xml_path, file) }, contentType = "application/xml" ) #observeEvent(input$sidebarCollapse, { # toggleClass(id = "content", class = "active") #}) observeEvent(input$toggle_sidebar, { shinyjs::runjs("toggleSidebar()") }) observeEvent(input$pathway, { output$graphContainer <- renderUI({ cyjShinyOutput("cyjShinytest", height = "90%", width = "90%") }) }) output$cyjShinytest <- renderCyjShiny({ #p <- input$pathway #if (p != 0) { if (input$pathwaytype == "Global pathway") { graph_json <<- paste(readLines("./pathwaymap/globalpathway.cyjs"), collapse = "") } else if (input$pathwaytype == "Ceramide pathway") { graph_json <<- paste(readLines("./pathwaymap/ceramidepathway.cyjs"), collapse = "") } else if (input$pathwaytype == "Remodeling pathway") { graph_json <<- paste(readLines("./pathwaymap/remodeling.cyjs"), collapse = "") } test <- fromJSON(graph_json) test <- as.data.frame(test$elements$nodes) if (input$viewacyllevel == TRUE) { cyjShiny(graph_json, layoutName = "preset", styleFile = "./pathwaymap/nodestyle1.js") } else { cyjShiny(graph_json, layoutName = "preset", styleFile = "./pathwaymap/nodestyle2.js") } # } else { #} }) observeEvent(input$getSelectedNodes, ignoreInit=TRUE, { output$selectedNodesDisplay <- renderText({" "}) getSelectedNodes(session) }) output$corselect <- renderPlotly({ if(input$pathwaytype == "Global pathway"){ graph_json <<- paste(readLines("./pathwaymap/globalpathway.cyjs"), collapse="") }else if(input$pathwaytype == "Ceramide pathway"){ graph_json <<- paste(readLines("./pathwaymap/ceramidepathway.cyjs"), collapse="") }else if(input$pathwaytype == "Remodeling pathway"){ graph_json <<- paste(readLines("./pathwaymap/remodeling.cyjs"), collapse="") } test <- fromJSON(graph_json) test <- as.data.frame(test$elements$nodes) test1 <- test[test$data$id %in% unlist(input$selectedNodes),] dataa <- mutate(data, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) if(length(test1$data$shared_name) == 2){ moldataa <- mutate(moldata, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) targetclass <- filter(alitable,Ontology %in% test1$data$shared_name) if(! test1$data$shared_name[1] %in% colnames(data)) { a <- Ensembl[Ensembl$target %in% test1$data$Ensembl_ID[1],] test1$data$shared_name[1] <- a$input } if(! test1$data$shared_name[2] %in% colnames(data)) { b <- Ensembl[Ensembl$target %in% test1$data$Ensembl_ID[2],] test1$data$shared_name[2] <- b$input } if(input$ClassorMol == FALSE){ cor_value <- cor(dataa[,test1$data$shared_name[1]], dataa[,test1$data$shared_name[2]],method = "spearman") g <- ggplot(dataa,aes_string(test1$data$shared_name[1],test1$data$shared_name[2],fill = input$w,size = input$size))+geom_point(shape =21,color = "black")+ scale_fill_manual(values = unlist(col$col)) + ggtitle(paste("r = ",round(cor_value, 2))) }else{ moldataa <- mutate(moldata, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) cor_value <- cor(moldataa[,input$X1], moldataa[,input$X2],method = "spearman") g <- ggplot(moldataa,aes_string(paste("`",input$X1,"`",sep =""),paste("`",input$X2,"`",sep =""),fill = input$w,size = input$size))+geom_point(shape =21,color = "black")+ scale_fill_manual(values = unlist(col$col))+ ggtitle(paste("r = ",round(cor_value, 2))) } plotly::ggplotly(g) } }) output$textOutput <- renderText({ if(input$ClassorMol == FALSE){ "Select two nodes from the network to analyze their correlation."} else{ "Select two features to analyze their correlation." } }) observeEvent(input$selectedNodes, { if(input$pathwaytype == "Global pathway"){ graph_json <<- paste(readLines("./pathwaymap/globalpathway.cyjs"), collapse="") }else if(input$pathwaytype == "Ceramide pathway"){ graph_json <<- paste(readLines("./pathwaymap/ceramidepathway.cyjs"), collapse="") }else if(input$pathwaytype == "Remodeling pathway"){ graph_json <<- paste(readLines("./pathwaymap/remodeling.cyjs"), collapse="") } test <- fromJSON(graph_json) test <- as.data.frame(test$elements$nodes) test1 <- test[test$data$id %in% unlist(input$selectedNodes),] moldataa <- mutate(moldata, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) targetclass <- filter(alitable,Ontology %in% test1$data$shared_name) shiny::updateSelectInput(session, "selectmol", selected = targetclass$`Metabolite name`[1], choices = targetclass$`Metabolite name`) },ignoreNULL = TRUE) output$corselect2 <- renderPlot({ if(input$pathwaytype == "Global pathway"){ graph_json <<- paste(readLines("./pathwaymap/globalpathway.cyjs"), collapse="") }else if(input$pathwaytype == "Ceramide pathway"){ graph_json <<- paste(readLines("./pathwaymap/ceramidepathway.cyjs"), collapse="") }else if(input$pathwaytype == "Remodeling pathway"){ graph_json <<- paste(readLines("./pathwaymap/remodeling.cyjs"), collapse="") } test <- fromJSON(graph_json) test <- as.data.frame(test$elements$nodes) test1 <- test[test$data$id %in% unlist(input$selectedNodes),] moldataa <- mutate(moldata, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) targetclass <- filter(alitable,Ontology %in% test1$data$shared_name) if(length(test1$data$shared_name) > 0 && input$selectmol != " "){ if(test1$data$shared_name[1] %in% colnames(data)) { if(input$mydrop == "box"){ g <- process_boxplot_diagram(input,paste("`",input$selectmol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "bar"){ g <- process_barplot_diagram(input,paste("`",input$selectmol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "violin"){ g <- process_violinplot_diagram(input,paste("`",input$selectmol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "polar"){ g <- process_polar_diagram(input,paste("`",input$selectmol,"`",sep =""),moldataa,col$col) } else if(input$mydrop == "coding"){ g <- process_dotplot_diagram(input,paste("`",input$selectmol,"`",sep =""),moldataa,col$col) }} plot(g) } }) observeEvent(input$save_pdf,{ shinyscreenshot::screenshot(selector="#cyjShinytest") }) #Creating heatmap observeEvent(input$actionplottest, { waiter::waiter_show( id = NULL, html = tagList(waiter::spin_loader(), "Loading ..."), color = "#333e48", logo = "", image = "" ) file_list <- list.files(svg_path) if (length(unlist(file_list)) > 0) { file.remove(file.path(svg_path, file_list)) } else { } if(is.null(input$transcriptomefile) == FALSE){ Ensembl <- gconvert(query = colnames(transcriptome)[-c(1:2)] , organism = "mmusculus",#sapiens target="ENSG", mthreshold = Inf, filter_na = TRUE) %>% select(input,target) graph_json1 <- paste(readLines("./pathwaymap/ceramidepathway.cyjs"), collapse="") %>% fromJSON() graph_json2 <- paste(readLines("./pathwaymap/remodeling.cyjs"), collapse="") %>% fromJSON() Ensemblinmap <- c(graph_json1$elements$nodes$data$Ensembl_ID,graph_json2$elements$nodes$data$Ensembl_ID) Ensemblinmap <- Ensemblinmap[-which(Ensemblinmap %in% "")] geneinmap <- Ensembl[Ensembl[,2] %in% Ensemblinmap,] transcriptome2 <- colnames(transcriptome)[colnames(transcriptome) %in% geneinmap$input] data <- data[,colnames(data) %in% c(colnames(data)[1:metainfocol],colnames(Lipidomedata),transcriptome2)] dataa <- mutate(data, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) names(dataa)[match(geneinmap$input, names(dataa))] <- geneinmap$target } else { dataa <- mutate(data, !!as.symbol(input$w) := !!as.symbol(input$w) %>% factor(levels = input$levels)) } # if (length(grep("selectcolor", names(input), value = TRUE)) != 0) { # col <<- process_select_color_input(input,data) # } if(input$mydrop == "box"){ process_action_boxplot(input,dataa,metainfocol,svg_path,col$col,output) } else if(input$mydrop == "bar"){ process_action_barplot(input,dataa,metainfocol,svg_path,col$col,output) } else if(input$mydrop == "violin"){ process_action_violinplot(input,dataa,metainfocol,svg_path,col$col,output) } else if(input$mydrop == "polar"){ process_action_polarplot(input,dataa,metainfocol,svg_path,col$col,output) } else if(input$mydrop == "coding"){ process_action_dotplot(input,dataa,metainfocol,svg_path,col$col,output) } # if(input$filetype == "MS-DIAL export"){ # exportgroupnodeheatmap(originaldata,metadata,paste(global$datapath,"",sep =""),input$w,input$levels,originaldir,input)} Sys.sleep(3) waiter::waiter_hide() } ) observeEvent(input$w,{ output$heatmap <- renderPlot({ if(length(unlist(input$selectedNodes)) > 0 ) { test <- fromJSON(graph_json) test <- as.data.frame(test$elements$nodes) test1 <- test[test$data$id %in% unlist(input$selectedNodes),] groupnodeheatmap(lipidclassproperties,originaldata,metadata,input$w,input$levels,test1$data$shared_name[1],input) } }) }) } )})}