无法在闪亮的仪表板中指定输入数据集

Cannot specify input dataset in shiny dashboard

我正在尝试制作闪亮的仪表板。我有两个数据集,基于数据集的 selection,将在选项卡面板中生成数字。但是,默认情况下只有 loaded/read 的最后一个数据集被 select 编辑,我不能 select 第一个数据集。尽管我已将其设为默认 selection.

下面是我的代码。

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)

我肯定是漏了一个小窍门,有没有哪位闪亮的高手帮帮我。

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

非常感谢

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

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)