此后,我想使用“浏览选项”上传文件,我想使用“ 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)
答案 0 :(得分:1)
看来您想被动地执行此操作。您需要了解“闪亮反应组件行为”的概念。
但是,很少需要突出显示点。
我认为您正在上传静态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)
希望这对您有帮助...
答案 1 :(得分:0)
调用反应式时,您无法引用其中已创建的内容-您引用了反应式。因此,在引用data_in
的地方,您应该使用data_upload_fun()
。
另一个问题是uploade_data
似乎不是代码中的数据集,因此您可能在那里打错了字,或者意外地没有包含数据集。
我无法运行您的代码,因此我不确定这是否可以解决所有问题,但可以解决一些问题。