R 浏览数据后,它不会显示在闪亮的仪表板中

R 浏览数据后,它不会显示在闪亮的仪表板中,r,shinydashboard,R,Shinydashboard,我想使用“浏览选项”上传一个文件,然后,我想使用“WorklistNo”(意思是:选择一个输入应该自动填充rest字段)值自动填充表,rest列应该是自动填充的。但是我有一些错误。 根据WorklistNo,我的其他数据应填充在闪亮仪表板的不同输入框中 [![enter image description here][1]][1]library(shiny) library(shinydashboard) ui <- dashboardPage( dashboardHeader(ti

我想使用“浏览选项”上传一个文件,然后,我想使用“WorklistNo”(意思是:选择一个输入应该自动填充rest字段)值自动填充表,rest列应该是自动填充的。但是我有一些错误。 根据WorklistNo,我的其他数据应填充在闪亮仪表板的不同输入框中

[![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) 
[![在此处输入图像描述][1][1]库(闪亮)
图书馆(shinydashboard)

ui当你调用一个反应时,你不能引用在它里面创建的东西——你引用的是反应。因此,在
中引用
数据的地方,应该使用
数据上传乐趣()

另一个问题是,
uploade\u data
似乎不是代码中的数据集,因此您可能在那里输入了错误,或者意外地没有包含数据集

我不能运行你的代码,所以我不能完全确定这是否能解决所有问题,但它解决了一些问题

从上一步来看,您似乎希望以反应的方式执行此操作。您需要了解反应性组件行为的概念

然而,有几点需要强调


  • 制造数据_in@Subhasish1315请评论。。。!感谢您的代码和帮助。我有一个小问题,假设我的数据集不完整,意味着有几列没有数据,但同一行中的其他列有数据,那么这段代码能够运行吗。我试过了,但如果列中的任何一个没有值,它将为同一行中的其他值提供NA,那么它就不起作用了。有什么建议吗。。!
    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)