单细胞shiny

最后发布时间:2022-07-12 20:28:27 浏览量:
library(shiny)
library(Seurat)
library(tidyverse)
options(shiny.trace = F)

# rownames(macrophages)[rownames(macrophages) %in% c("CD206")]
macrophages <- readRDS("/home/wangyang/workspace/scRNA_MYC/data/Macrophages_new_empty.rds")
macrophages[["percent.mt"]] <- PercentageFeatureSet(macrophages, pattern = "^MT-")
summary(macrophages@meta.data$nFeature_RNA)
VlnPlot(macrophages, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)

# macrophages <- subset(macrophages, subset = nFeature_RNA > 200 & nFeature_RNA < 3000 & percent.mt < 30)


#### NormalizeData

macrophages <- NormalizeData(macrophages, 
                             normalization.method = "LogNormalize", 
                             scale.factor = 10000)

#### FindVariableFeatures
# top10 <- head(VariableFeatures(macrophages), 10)
# (plot1<- VariableFeaturePlot(macrophages))
# LabelPoints(plot = plot1,
#                      points = top10,
#                      xnudge = 0,
#                      ynudge = 0, 
#                      repel = TRUE)
#### ScaleData
all.genes <- rownames(macrophages)
macrophages <- ScaleData(macrophages, features = all.genes)


#### dimension

# DimPlot(macrophages, reduction = "pca",group.by = "orig.ident")
# FeaturePlot(macrophages, features = c("CD14","CD163","CCR7","IL7R"),label.size = 1,reduction = 'pca')


# MYC_marker <- read_csv("/home/wangyang/workspace/scRNA_MYC/data/MYC_marker.csv")

# all_genes <- MYC_marker$gene
all_genes <- rownames(macrophages)
features <- c("CD14","CD163","CD209","IL1B","CCR7","TLR7")


ui <- fluidPage(
  titlePanel("巨噬细胞(Macrophages)单细胞数据分析"),

    sidebarLayout(
      sidebarPanel(
        sliderInput("nfeatures", h3("nfeatures"),
                      min = 100, max = 5000, value = 3000),
        sliderInput("neighbor", h3("FindNeighbors"),
                      min = 1, max = 25, value = 18),
        sliderInput("resolution", h3("FindClusters"),
                      min = 0, max = 1, value = 0.15),
        sliderInput("perplexity", h3("tsne perplexity"),
                      min = 1, max = 100, value = 20),
        selectInput("reduction", h3("Select reduction"), 
                      choices = c("umap","tsne","pca"), selected = "tsne",multiple = F),
        # selectInput("pca_dims", h3("Select pca dims"), 
        #               choices = c(1,2,3,4), selected = 1,multiple = F),
        selectizeInput(inputId   = "genes",
                h3("Select gene from deg"),
                choices   = features,
                multiple = TRUE,
                selected = features
        ),
        submitButton("Update View", icon("sync")),
        p("M1 macrophage:CCR7, IL7R, [FCGR3A, FCGR3B], [FCGR2A, FCGR2B, FCGR2C], [SELE, SELP, SELL], FCGR1A, CD80, CD86, CXCL10, IL15RA, IL17RA, IL1R1, IL2RA, TLR2, TLR4"),             
        p("M2 macrophage:CD14, CD163"),
        p("M0 macrophage:"),
      ),
      mainPanel(
        textOutput("neighbor"),
        textOutput("resolution"),
        textOutput("nfeatures"),
        textOutput("genes"),
        textOutput("reduction"),
        textOutput("pca_dims"),
        textOutput("perplexity"),
        plotOutput(outputId = "DimPlot"),
        plotOutput(outputId = "FeaturePlot"),
        plotOutput(outputId = "VlnPlot"),
        plotOutput(outputId = "DimHeatmap1"),
        plotOutput(outputId = "DimHeatmap2"),

    )
  )
)

# Define server logic ----
server <- function(input, output,session) {
  updateSelectizeInput(
          session,
          inputId = 'genes',
          choices = unique(all_genes),
          selected=features,
          server = TRUE
  )
  output$resolution <- renderText(paste0("resolution: ",input$resolution))
  output$neighbor <- renderText(paste0("neighbor: ",input$neighbor))
  output$nfeatures <- renderText(paste0("nfeatures: ",input$nfeatures))
  output$genes <- renderText(paste0("genes: ",input$genes))
  output$reduction <- renderText(paste0("reduction: ",input$reduction))
  output$perplexity <- renderText(paste0("perplexity: ",input$perplexity))
  # output$pca_dims <- renderText(paste0("pca_dims: ",input$pca_dims))


  macrophagesFun <- reactive({
    macrophages <- FindVariableFeatures(macrophages, selection.method = "vst", nfeatures = input$nfeatures)
    macrophages <- RunPCA(macrophages, features = VariableFeatures(object = macrophages))

    # DimPlot(macrophages, reduction = "umap",label = T)
    macrophages <- FindNeighbors(macrophages, dims = 1:input$neighbor)
    macrophages <- FindClusters(macrophages, resolution = input$resolution)
    res <- NULL
    if(input$reduction=="umap"){
      res <- RunUMAP(macrophages, dims = 1:input$neighbor)
    }else if (input$reduction=="tsne") {
      res <- RunTSNE(macrophages,dims = 1:input$neighbor,perplexity=input$perplexity)
    }else {
      res <- macrophages
    }
    
    return(res)
  })

 

  output$DimHeatmap1 <- renderPlot({
    macrophages <- macrophagesFun()
    DimHeatmap(macrophages, dims = 1, cells = 500, balanced = TRUE)
  }) 
  output$DimHeatmap2 <- renderPlot({
    macrophages <- macrophagesFun()
    DimHeatmap(macrophages, dims = 2, cells = 500, balanced = TRUE)
  }) 


  output$DimPlot <- renderPlot({
    macrophages <- macrophagesFun()
    # plot(input$resolution)
    DimPlot(macrophages, reduction = input$reduction,label = T)
     
  })  
  output$FeaturePlot <- renderPlot({
    macrophages <- macrophagesFun()
    FeaturePlot(macrophages, 
              features = input$genes,
              label.size = 1,
              reduction = input$reduction)
  })
  output$VlnPlot <- renderPlot({
    macrophages <- macrophagesFun()
    VlnPlot(macrophages, features =input$genes, ncol = 3)
  })
  

}
shinyApp(ui = ui, server = server)