人们!
如果我具有以下数据框:
observeEvent(input$pesquisa,{
query <- glue(
"select
cod_ordem_producao as ORDEM,
dim_ext_tubo as DIAMETRO,
esp_par_tubo as PAREDE,
cod_aqa as AQA,
tmo_ciclo_plan as CICLO,
dth_criacao_reg as DATA,
dsc_aco as GRAU,
val_lim_escoamento as LE,
val_tensao_residual as TR
from
QT_QTS.PLA_ORDEM_PRODUCAO
where DIM_EXT_TUBO = {as.numeric(input$diametro)}
and esp_par_tubo = {as.numeric(input$parede)}
and tmo_ciclo_plan = {as.numeric(input$ciclo)}
and dth_criacao_reg between DATE '{as.character(input$dates[1])}' and DATE '{as.character(input$dates[2])}'
and VAL_LIM_ESCOAMENTO != 0
order by DTH_CRIACAO_REG desc")
df <- dbGetQuery(
connection_reportUser,
query
)
df <-------------- HERE IS THE SAVED VALUES TO THE DATA FRAME---------------
valor_grau <- df$GRAU
})
接下来,我使用另一个observeEvent:
observeEvent(input$pesquisa, {
insertUI(
selector = "#pesquisa",
where = "afterEnd",
ui = selectInput(
"grau",
label = "Grau:",
choices = valor_grau
)
)
})
说明: 我在数据库中搜索这些值并将其保存到data.frame(称为“ df”)中。当我搜索时(使用输入的内容并单击“ pesquisa”按钮),将为用户显示一个名为“ Grau:”的新字段,其中包含新的可选值。
如何使用第二个输入中的值更新“ df”? (在这种情况下,来自“ insertUI”的输入称为“ Grau:”
----------------已编辑------------------------
在我的UI代码中,我有一个:DT::dataTableOutput("contents2")
在服务器端,我有:
output$contents2 = DT::renderDataTable({
tabela_saida})
我的第一个watchEvent是上面描述的事件,然后保存到我的 df 中,我有一个:
tabela_saida = df
第二个observeEvent应该更新我的 tabela_saida 中名为GRAU
的值。
第三次observEvent应该更新 AQA ...,依此类推。
最后,应该公开使用所有新值更新的datable,并在我的数据库中进行搜索。
答案 0 :(得分:0)
我认为您想根据条目(data.frame
)更新grau
。为此,您可以创建一个eventReactive
来执行查询。在eventReactive
中,您需要检查用户是否已经在input$grau
中选择了某些内容。
这是一种实现方法:
library(shiny)
library(DT)
ui <- fluidPage(
mainPanel(
actionButton(inputId = "pesquisa", label = "pesquisa"),
conditionalPanel(condition = "input.pesquisa > 0", uiOutput("grau")),
DT::DTOutput("contents2")
)
)
server <- function(input, output) {
create_df <- eventReactive(input$pesquisa,{
## Your query about here
## ...
##
df <- data.frame(x = round(rnorm(100), 2), grau = rpois(100, lambda = 10))
grau_values <- unique(df$grau)
if(!is.null(input$grau)){
grau_input <- input$grau
df <- subset(df, grau %in% grau_input)
}
return(list(df = df, grau_values = grau_values))
})
output$grau <- renderUI({
grau_values <- create_df()$grau_values
selectInput(inputId = "grau", label = "Grau:", multiple = TRUE, choices = grau_values, selected = NULL)
})
output$contents2 <- DT::renderDataTable({
df <- create_df()$df
datatable(df, rownames = FALSE)
})
}
shinyApp(ui = ui, server = server)
我希望它能起作用!