diff --git a/BDAccess/app.R b/BDAccess/app.R index 889af32..bbbc7e6 100644 --- a/BDAccess/app.R +++ b/BDAccess/app.R @@ -1,5 +1,9 @@ library(shiny) library(rhandsontable) +library(tidyverse) +library(reshape2) +library(Matrix) +library(CitFuns) library(BDCIT) print(getwd()) @@ -61,6 +65,23 @@ ui <- fluidPage( h3("Nitrogen"), tableOutput("nitrogen") ) + ), + tabPanel("scRNAseq", + sidebarPanel( + textInput("sqlquery", label = "sqlquery", value = ""), + uiOutput("PATID"), + checkboxInput("sct_sel", "Mostrar filtrados"), + checkboxInput("cd45_chk", "Purificación CD45"), + textInput("genes", label="genes", value = "") + ), + mainPanel( + tabsetPanel( + tabPanel("Table", tableOutput("sc_table")), + tabPanel("Plots", + plotOutput("sc_plot", height = "1000px"), + plotOutput("sc_expr"), height = "600px") + ) + ) ) ) ) @@ -767,6 +788,95 @@ server <- function(input, output) { ## scRNAseq + output$PATID = renderUI({ + observeEvent(input$goButton, {}) + sc_cod<-sqlFetch(dta, "CNAG") %>% pull(CODIGO) + selectizeInput("sc_cod", "CÓDIGO", sc_cod, multiple = T) + }) + + output$sc_table<-renderTable({ + if (input$sct_sel){ + if (input$sqlquery != ""){ + print(input$sqlquery) + sqlQuery(dta, input$sqlquery) + }else{ + if (!is.null(input$sc_cod)){ + sqlFetch(dta, "CNAG") %>% filter(CODIGO %in% input$sc_cod) + }else{ + sqlFetch(dta, "CNAG") + } + } + }else{ + sqlFetch(dta, "CNAG") + } + + }) + + output$sc_plot <-renderPlot({ + meta<<-readRDS(paste0(scRNAseqRoute,"metadata_full_object.rds")) + + if (input$sqlquery != ""){ + sc_codigos<-sqlQuery(dta, input$sqlquery) %>% pull(CNAG_NAME) + }else{ + if (!is.null(input$sc_cod)){ + sc_codigos<-sqlFetch(dta, "CNAG") %>% filter(CODIGO %in% input$sc_cod) %>% pull(CNAG_NAME) + }else{ + sc_codigos<-sqlFetch(dta, "CNAG") %>% pull(CNAG_NAME) + } + } + sc_codigos<-gsub(" _","_", sc_codigos ) + sc_codigos<-gsub("_ ","_", sc_codigos ) + sc_codigos<-gsub(" ","_", sc_codigos ) + + meta<-meta %>% mutate(sample2=gsub("_CD45", "", sample)) %>% filter(sample2 %in% sc_codigos) + if (isFALSE(input$cd45_chk)){ meta<-meta %>% filter(!grepl("_CD45", sample))} + + g1<-ggplot(meta, aes(coord_x, coord_y, color=predicted.id))+ + geom_point(size=0.2)+ + guides(colour = guide_legend(override.aes = list(size=2)))+ + theme_bw()+ + theme(aspect.ratio = 1) + + meta_perc<-meta %>% group_by(sample, predicted.id) %>% summarise(N=n()) %>% mutate(N=perc(N)) %>% + spread(predicted.id, N) %>% gather("predicted.id","N",-sample) %>% mutate(N=case_when(is.na(N)~0,TRUE~N)) + g2<-ggheatmap(meta_perc, "sample","predicted.id", "N", color = "grey50") + ggpubr::ggarrange(g1,g2, ncol=1, heights = c(0.3, 0.7)) + }) + + output$sc_expr <-renderPlot({ + if (input$genes != ""){ + expr<-readRDS(paste0(scRNAseqRoute,"expression_full_object.rds")) + genes<-strsplit(input$genes, ",")[[1]] + + if (length(genes) > 1){ + df.expr<-as.data.frame(as.matrix(expr[genes,])) + df.expr["Gene"]<-rownames(df.expr) + mdf.expr<-melt(df.expr) + }else{ + df.expr<-as.data.frame(t(as.matrix(expr[genes[1],]))) + df.expr["Gene"]<-genes[1] + mdf.expr<-melt(df.expr) + } + + alldata<-merge(meta, mdf.expr, by.x="barcode", by.y = "variable") + + } + + # order <- clustsort(alldata %>% spread(Gene, value) %>% select(predicted.id, all_of(genes)) %>% + # group_by(predicted.id) %>% summarise(across(all_of(genes), mean)) %>% as.data.frame) + # + # g1<-ggplot(alldata, aes(predicted.id, value, fill=predicted.id))+ + # geom_violin(scale = "width")+ + # geom_jitter(width=0.2, size=0.1, alpha=0.3)+ + # scale_x_discrete(limits=order$x)+ + # guides(fill=F)+ + # facet_wrap(.~Gene)+ + # theme_bw()+ + # theme(axis.text.x = element_text(angle=90, hjust=1, vjust = 0.5)) + g2<-ggheatmap(alldata, x="predicted.id",y="Gene",value="value", color="grey")+coord_equal() + # ggpubr::ggarrange(g1,g2, ncol=1) + g2 + }) } # Run the application