【问题标题】:Cannot specify input dataset in shiny dashboard无法在闪亮的仪表板中指定输入数据集
【发布时间】:2021-10-06 21:30:49
【问题描述】:

我正在尝试制作一个闪亮的仪表板。我有两个数据集,根据数据集的选择,将在选项卡面板中生成数字。但是,默认情况下,仅选择已加载/读取的最后一个数据集,而我无法选择第一个数据集。即使我已将其设为默认选择。

下面是我的代码。

library(shinydashboard)
library(uwot)
library(DESeq2)
library(gridExtra)
library(tidyverse)
library(RColorBrewer)
library(DESeq2)
library(pheatmap)
library(DEGreport)
library(vsn)
library(RColorBrewer)
library("genefilter")
library(org.Hs.eg.db)
library(dplyr)
library(tidyverse)
library(fgsea)
library(clusterProfiler)
library(ggplot2)


set_1<-load("C:/Users/abn/Documents/Shiny/DashBoardTutorial/TeData2.RData")
set_2<-load("C:/Users/abn/Documents/Shiny/DashBoardTutorial/TeData1.RData")
data_list = list(set_1=set_1,set_2=set_2)

ui <- dashboardPage(
    dashboardHeader(title = "Data Visualizer", titleWidth = 300),
    dashboardSidebar(
        width = 300,
        sidebarMenu(

            menuItem("Datasets",  icon = icon("cog"),
                     selectInput("Datasets", "Datasets:", choices = list("sample1" = "set_1", "sample2" = "set_2"),
                                 selected = "set_1")),
            menuItem("Quality Control", tabName = "widgets", icon = icon("th")),
            menuItem("Differential Genes", tabName = "widgets2", icon = icon("th")),
            menuItem("Downstream", tabName = "widgets3", icon = icon("th"))
            
         )
    ),
    ## Body content
    dashboardBody(
        tabItems(
            # First tab content
            # Second tab content
            tabItem(tabName="widgets",
                   h2("widgets"),
                   plotOutput("widgets"),
                    
            ),
            tabItem(tabName = "widgets2",
                    h2("Widgets2 tab content"),
                    
            ),
            tabItem(tabName = "widgets3",
                    h2("Widgets3 tab content"),
                    plotOutput("widgets3"),
                    
            )

        )
    )
)


server <- function(input, output) {

    
    datasetInput <- reactive({
        df <- data_list[[input$Datasets]]
        })
    
        output$widgets <- renderPlot({
            datasetInput()
            par(mfrow=c(1,2))
            
            boxplot(counts(dds, normalized=F), outline=F, col=dds$condition, medcol = "white", cex.axis=0.6, main="Without Normalization")
            boxplot(counts(dds, normalized=T), outline=F, col=dds$condition, medcol = "white", cex.axis=0.6, main="Normalized")
            
            })
        
        }

shinyApp(ui, server)

我确定我错过了一个小技巧,你们中的任何一位闪亮的大师都可以帮助我。

或者可能有更好的方法来完成上述过程。

在此先感谢

【问题讨论】:

  • 也许你应该在selectInput 中使用multiple=TRUE 选项来选择两个数据集。目前,它只选择一个数据集。
  • 什么是dds?你能分享你正在使用的数据吗?
  • @RonakShah 这是使用 DESeq2 运行 RNA seq 管道后获得的数据。我正在尝试以闪亮的方式上传它。函数 dds 来自相同的。您能否尝试使用 mt cars 和 iris 数据集来获得可重现的示例。
  • @YBS 还是不行 :(

标签: r shiny shinydashboard shinyapps shiny-reactivity


【解决方案1】:

假设您可以访问这两个数据集,您可以绘制它们并显示选择。试试这个

data_list = list(set_1=mtcars,set_2=iris)

ui <- dashboardPage(
  dashboardHeader(title = "Data Visualizer", titleWidth = 300),
  dashboardSidebar(
    width = 300,
    sidebarMenu(
      
      menuItem("Datasets",  icon = icon("cog"),
               selectInput("Datasets", "Datasets:", choices = list("sample1" = "set_1", "sample2" = "set_2"),
                           selected = "set_1")),
      menuItem("Quality Control", tabName = "widgets", icon = icon("th")),
      menuItem("Differential Genes", tabName = "widgets2", icon = icon("th")),
      menuItem("Downstream", tabName = "widgets3", icon = icon("th"))
      
    )
  ),
  ## Body content
  dashboardBody(
    tabItems(
      # First tab content
      # Second tab content
      tabItem(tabName="widgets",
              h2("widgets"),
              #plotOutput("widgets"),
              uiOutput("widgets")
      ),
      tabItem(tabName = "widgets2",
              h2("Widgets2 tab content"),
              
      ),
      tabItem(tabName = "widgets3",
              h2("Widgets3 tab content"),
              plotOutput("widgets3"),
              
      )
    )
  )
)


server <- function(input, output) {
  
  # datasetInput <- reactive({
  #   df <- data_list[[input$Datasets]]
  # })
  # 
  # output$widgets <- renderPlot({
  #   datasetInput()
  #   par(mfrow=c(1,2))
  #   
  #   boxplot(counts(dds, normalized=F), outline=F, col=dds$condition, medcol = "white", cex.axis=0.6, main="Without Normalization")
  #   boxplot(counts(dds, normalized=T), outline=F, col=dds$condition, medcol = "white", cex.axis=0.6, main="Normalized")
  #   
  # })
  
  output$plot1 <- renderPlot({
    boxplot(mpg ~ cyl , data=mtcars)
  })
  output$plot2 <- renderPlot({
    boxplot(Sepal.Length ~ Species , data=iris)
  })
  
  output$widgets <- renderUI({
    if (input$Datasets=="set_1") { plotOutput("plot1")
    }else plotOutput("plot2")
  })
  
}

shinyApp(ui, server)

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 2020-02-10
    • 2020-11-12
    • 2017-08-17
    • 2015-04-22
    • 2021-12-19
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多