Rshiny中列名具有反应性的问题

问题描述 投票:0回答:1

我正在开发一个Rshiny仪表板,该仪表板允许上载csv文件以进行热图可视化。该文件的第一列名称为COL1,其他列为允许用户选择的ID名称。服务器部分中的某些代码使用R table()来汇总文件中的两列,如下所示:table(COL1,选择的列)通过cols(4)到达nrow(30)。然后,此矩阵由热图函数使用。我可以看到热图输出并选择了不同的ID,但是并没有更改热图模式以反映每个选定ID的不同数据。每次选择不同的ID,我都会得到相同的热图。我猜,ID选择未按预期更新。对这个问题的任何解决方案将不胜感激。

代码:

ui <- fluidPage(
  titlePanel("plot"),
  sidebarLayout(
    sidebarPanel("Sidebar panel",
                 # Input: Selector for choosing dataset ----
                 fileInput("file1", "Add File",
                           accept = c(
                             "text/csv",
                             "text/comma-separated-values,text/plain",
                              ".csv")
                 ),
                 tags$hr(),
                 checkboxInput("header", "Header", TRUE),
                 selectInput("IDs", "Add ID:", choices=c())
                 # actionButton('getHmap', 'get heatmap')
    ),
    mainPanel("Plot",
              #column(6, 
              plotOutput("themap"),
              #tableOutput("table.output")
    )
  )
)

server = function(input, output, session) {

  data1 <- reactive({
    validate(need(input$file1,""))
    inFile <- input$file1
    if (is.null(inFile))
      return(NULL)
    tbl <- read.csv(inFile$datapath)
    return(tbl)    
  })


  plotdata <- reactive({
   data2 <- data1()

     updateSelectInput(session,"IDs",choices=colnames(data2[,-1])) 

    data3 <- table(data2$COL1,data2[,input$sampleIDs])
    data3  <- as.data.frame.matrix(data3)
    data3  <- data3[c(2,1,4,3)]
    data4 <- data3
    data4$COL2 <- rownames(data3)
    data4 <- data4[, c(5,1:4)]
    data5 <- data4[,-1]
    data.df <- as.matrix(data5)

    return(data.df)    
  })

  output$themap = renderPlot({

    pheatmap(plotdata())
  })
}

shinyApp(ui, server)
r shiny shinydashboard shiny-server shinyapps
1个回答
0
投票

尝试以这种方式更改您的sertver函数:

server = function(input, output, session) {

  data1 <- reactive({
    validate(need(input$file1,""))
    inFile <- input$file1
    if (is.null(inFile))
      return(NULL)
    tbl <- read.csv(inFile$datapath)
    updateSelectInput(session,"IDs",choices=colnames(tbl[,-1])) 
    return(tbl)    
  })


  plotdata <- reactive({
    data2 <- data1()    
    data3 <- table(data2$COL1,data2[,input$sampleIDs])
    data3  <- as.data.frame.matrix(data3)
    data3  <- data3[c(2,1,4,3)]
    data4 <- data3
    data4$COL2 <- rownames(data3)
    data4 <- data4[, c(5,1:4)]
    data5 <- data4[,-1]
    data.df <- as.matrix(data5)

    return(data.df)    
  })

  output$themap = renderPlot({
    pheatmap(plotdata())
  })
}
© www.soinside.com 2019 - 2024. All rights reserved.