首页 > 解决方案 > 在 Shiny 中从上传的 Seurat 对象中提取元数据以进行 selectInput 选择

问题描述

我正在尝试创建一个闪亮的应用程序,它允许我比较来自 Seurat 对象的集群,并输出差异表达基因的列表。到目前为止,我已经尝试过:

#here's the UI portion I need help with:

          
      selectInput(inputId = "clusters", 
                  label = "Choose cluster 1: ", 
                  choices = NULL)

#here's the server function

server <- function(input, output, session) {
  
#this is to load in the datasets reactively; i.e, they are not loaded until you select them
  
datasetInput <- reactive({
    if (input$dataset_selec == "NK AD Dataset") {
      dataset <- get(load("~/Desktop/Shiny App/Seuratapp/data/nk_integrated_object.Rdata"))
    }
    else if (input$dataset_selec == "APPPS1 Dataset") {
      dataset <- get(load("~/Desktop/ShinyApp/Seuratapp/data/appps1_lymphocytes_object.Rdata"))
    }
    else if (input$dataset_selec == "T Cell Infiltration Dataset") { 
      dataset <- get(load("~/Desktop/Shiny App/Seuratapp/data/tcell_infiltration.Rdata"))
    }
    return(dataset)
  })

#this is to transform the loaded dataset into something I can use as labels
  dataset <- datasetInput

  updateSelectInput(session, 
                    inputId = "metadata_split", 
                    label = "Choose category to split by: ",
                    choices = colnames(dataset@metadata))

这不起作用,我敢肯定有很多原因,但坦率地说,我什至无法理解从哪里开始解决这个问题。谁能帮我吗?

标签: rshinyseurat

解决方案


一些建议:

  1. 您的代码不完整。制作一个最小的可重现示例,以便人们可以重现您的错误。对于公共 Seurat 数据,您可以尝试Seurat 教程中的PBMC 数据集
  2. 如果dataset应该是反应式的,那么我认为您需要调用反应式表达式
dataset <- datasetInput()
  1. dataset <- get(load(...))是一种不寻常的策略。如果你有RData对象,那么你可以做dataset <- readRDS(...). 见这里

推荐阅读