【问题标题】:After browse data it not displayed in shiny dashboard浏览数据后,它不会显示在闪亮的仪表板中
【发布时间】:2019-07-08 02:46:07
【问题描述】:

之后我想使用“浏览选项”上传文件,我想使用“WorklistNo”自动填充表格(意思是:选择一个输入应该自动填充剩余字段)值和剩余列应该自动填充。但是我遇到了一些错误。 基于 Worklist,我的其他数据不应填充到闪亮仪表板的不同输入框中。

[![enter image description here][1]][1]library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      fileInput("file_upload","Uplaod Data",buttonLabel = "Browse..",placeholder = "No file Selected")
    ),
    fluidRow(
      column(3,
             uiOutput("p1_ui")
      ),
      column(3,
             uiOutput("p2_ui")
      ),
      column(3,
             uiOutput("p3_ui")
      )
    ),
    fluidRow(
      column(6,
             h3("Uploaded DATA"),
             DTOutput("uploaded_data_table")
      ),
      column(6,
             h3("Selected DATA"),
             DTOutput("selected_data_table")
      )
    )
  )
)

server <- function(input, output,session) {
  values <- reactiveValues(
    upload_state = NULL
  )
  data_upload_fun<-eventReactive(input$file_upload,{
    req(input$file_upload)
    if(values$upload_state=='reset'||is.null(values$upload_state))
    {
      data_in<-read_xlsx(input$file_upload$datapath
                    )
      values$upload_state <- 'uploaded'
      data_in
    }  
  })
  output$uploaded_data_table <- renderDT({
    DT::datatable(data_upload_fun())
  })
  output$p1_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p1", choices = NULL, label = 'WorklistNo')
   } 
    else
    {
      data_upload_fun()
      selectInput("p1", choices = uploade_data$WorklistNo, label = 'WorklistNo')
    }
  })

  output$p2_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p2", choices = NULL, label = 'Status')
    }
    else
    {
      data_upload_fun()
      status<-data_in[data_in$WorklistNo==input$p1,2]
      selectInput("p2", choices = as.list(status), label = 'Status')
    }
  })
  output$p3_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p3", choices = NULL, label = 'Plant')
    }
    else
    {
      data_upload_fun()
      plant<-data_in[data_in$WorklistNo==input$p1 & data_in$Status==input$p2,3]
      selectInput("p3", choices = as.list(plant), label = 'Plant')
    }
  })

  output$selected_data_table<-renderDT({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      returnValue()
    }
    else
    {
      data_upload_fun()
      data_to_show<-data_in[data_in$WorklistNo==input$p1 & data_in$Status==input$p2 & data_in$Plant== input$p3, ]
      DT::datatable(data_to_show)
    }
  })

}

shinyApp(ui, server) 

【问题讨论】:

  • @Subhasish1315 请评论...!

标签: r shinydashboard


【解决方案1】:

previous question 看来,您想被动地执行此操作。您需要了解 Shiny Reactive 组件行为的概念。

但是,有几点需要强调。

  • 将 'data_in
  • 在 output$pi_ui 中,您使用了“uploade_data$WorklistNo”,这将是“data_in$WorklistNo”
  • 我认为您正在上传静态 excel 文件。所以你需要根据你的excel修改代码。我的代码是基于我的 excel 运行的。因此,要使其正常工作,您需要进行相应的更改。

    但是,即使您想处理数据,您也需要提供最少的可重现代码,然后请提供最少的数据集。

具有相同数据集的修订代码(.xlsx 文件)

library(shinydashboard)
library(DT)
library(xlsx)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      fileInput("file_upload","Uplaod Data",buttonLabel = "Browse..",placeholder = "No file Selected")
    ),
    fluidRow(
      column(3,
             uiOutput("p1_ui")
      ),
      column(3,
             uiOutput("p2_ui")
      ),
      column(3,
             uiOutput("p3_ui")
      )
    ),
    fluidRow(
      column(6,
             h3("Uploaded DATA"),
             DTOutput("uploaded_data_table")
      ),
      column(6,
             h3("Selected DATA"),
             DTOutput("selected_data_table")
      )
    )
  )
)

server <- function(input, output,session) {
  values <- reactiveValues(
    upload_state = NULL
  )
  data_upload_fun<-eventReactive(input$file_upload,{
    req(input$file_upload)
    if(values$upload_state=='reset'||is.null(values$upload_state))
    {
      data_in<<-read.xlsx(input$file_upload$datapath,1)
      values$upload_state <- 'uploaded'
      data_in
    }  
  })


  output$uploaded_data_table <- renderDT({
    DT::datatable(data_upload_fun())
  })
  output$p1_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p1", choices = NULL, label = 'WorklistNo')
    } 
    else
    {
      data_upload_fun()
      selectInput("p1", choices = data_in$WLID, label = 'WorklistNo')
    }
  })

  output$p2_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p2", choices = NULL, label = 'Status')
    }
    else
    {
      data_upload_fun()
      status<-data_in[data_in$WLID==input$p1,3]
      selectInput("p2", choices = as.list(status), label = 'Status')
    }
  })
  output$p3_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p3", choices = NULL, label = 'Plant')
    }
    else
    {
      data_upload_fun()
      plant<-data_in[data_in$WLID==input$p1 & data_in$STATUS==input$p2,2]
      selectInput("p3", choices = as.list(plant), label = 'Plant')
    }
  })

  output$selected_data_table<-renderDT({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      returnValue()
    }
    else
    {
      data_upload_fun()
      data_to_show<-data_in[data_in$WLID==input$p1 & data_in$STATUS==input$p2 & data_in$PLANT== input$p3, ]
      DT::datatable(data_to_show)
    }
  })

}

shinyApp(ui, server) 

希望这会有所帮助...

【讨论】:

  • 感谢您的代码和帮助。我有一个小问题,假设如果我的数据集不完整意味着少数列没有数据但同一行中的其他列有数据,那么这段代码是否能够运行。我试过了,但如果任何一列没有值,它就会不起作用,它将为同一行中的其他值提供 NA 。任何建议..!
【解决方案2】:

当您调用响应式时,您不能引用在其中创建的内容 - 您引用的是响应式。所以在你引用data_in 的地方,你应该使用data_upload_fun()

另一个问题是uploade_data 似乎不是您的代码中的数据集,因此您可能在那里打错字或不小心没有包含数据集。

我无法运行您的代码,所以我不确定这是否能解决所有问题,但它可以解决一些问题。

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 2021-12-14
    • 2019-05-11
    • 2015-04-22
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多