diff --git a/scMonitor/app.R b/scMonitor/app.R index eb905b3..c0a776e 100644 --- a/scMonitor/app.R +++ b/scMonitor/app.R @@ -15,13 +15,19 @@ ui <- fluidPage( uiOutput('groupby'), uiOutput('facetby'), textInput('features', label = "Genes"), + textInput('mods', label = "Signatures"), actionButton("goButton", "Query"), - sliderInput("height", "Altura", min=1000, max=20000, step=1000, value=6000) + sliderInput("height", "Altura", min=1000, max=20000, step=1000, value=6000), + h3("Add Signature"), + textInput('mod_name', label = "Name"), + textInput('mod_feat', label = "Genes"), + actionButton("modButton", "Add Signature") ), mainPanel( plotOutput("umapPlot"), - uiOutput("featPlotUI") + uiOutput("featPlotUI"), + uiOutput("mod_featPlotUI"), ) ) ) @@ -30,6 +36,7 @@ ui <- fluidPage( server <- function(input, output) { dades<-reactiveValues() dades$seu<-NULL + dades$mods<-NULL volumes <- c(Home = fs::path_home(), "R Installation" = R.home(), getVolumes()()) shinyFileChoose(input, 'file', roots=volumes) @@ -52,10 +59,6 @@ server <- function(input, output) { } }) - query<-eventReactive(input$goButton,{ - dades$fet_query<-strsplit(input$features, " ")[[1]] - }) - output$umapPlot <- renderPlot({ observeEvent(dades$seu, {}) if (!is.null(dades$seu)){ @@ -68,6 +71,18 @@ server <- function(input, output) { } }) + query<-eventReactive(input$goButton,{ + dades$fet_query<-strsplit(input$features, " ")[[1]] + }) + + query_mod<-eventReactive(input$goButton,{ + if (length(strsplit(input$mods, " ")[[1]]) > 0){ + dades$mods<-paste(strsplit(input$mods, " ")[[1]], "1", sep="") + }else{ + dades$mods<-NULL + } + }) + output$featPlotUI<- renderUI({ observeEvent(dades$fet_query, {}) if (!is.null(dades$seu)){ @@ -77,15 +92,62 @@ server <- function(input, output) { }) output$featPlot<-renderPlot({ - observeEvent(dades$seu, {}) + observeEvent(input$goButton, {}) if (!is.null(dades$seu)){ query() - + plot<-list() + print(dades$fet_query) + if (length(dades$fet_query) > 0){ + plot[["Genes"]]<-FeaturePlot(dades$seu, + split.by=if(input$facetby != "None"){input$facetby}else{NULL}, + features = dades$fet_query)&theme(aspect.ratio = 1) + } + query_mod() + print(dades$mods) + if (length(dades$mods) > 0){ + plot[["Mods"]]<-FeaturePlot(dades$seu, + split.by=if(input$facetby != "None"){input$facetby}else{NULL}, + features = dades$mods)&theme(aspect.ratio = 1)&scale_color_viridis_c() + } + do.call(ggarrange, c(plot, ncol=1)) + } + }) + + observeEvent(input$modButton, { + if (input$modButton > 0){ + mod_list<-strsplit(input$mod_feat, " ")[[1]] + mod_list<-mod_list[mod_list %in% rownames(dades$seu)] + dades$seu<-AddModuleScore(dades$seu,list(mod_list), + name=input$mod_name) + } + }) + + # query_mod<-eventReactive(input$modButton,{ + # dades$seu<-AddModuleScore(dades$seu,strsplit(input$mod_feat, " ")[[1]], + # name=input$mod_name) + # dades$mods<-if(is.null(dades$mods)){input$mod_name}else{c(dades$mods, input$mod_name)} + # print(input$mod_name) + # }) + + output$modPlotUI<- renderUI({ + observeEvent(dades$mod_name, {}) + if (!is.null(dades$mod_name)){ + plotOutput("modPlot", + height = paste0(input$height/10,"px")) + } + }) + + output$modPlot<-renderPlot({ + # observeEvent(dades$seu, {}) + input$goButton + if (input$mods){ + print(dades$mods) FeaturePlot(dades$seu, split.by=if(input$facetby != "None"){input$facetby}else{NULL}, - features = dades$fet_query)&theme(aspect.ratio = 1) + features = dades$mods)&theme(aspect.ratio = 1) } }) + } # Run the application