更新numericInput R中的值

时间:2018-02-19 22:31:14

标签: r shiny

我有一个应用程序,其中用户可以输入某些字段的数值(使用numericInput())。或者,他们可以选择从参考表中选择值(通过checkboxInput()字段)。

我能够在脚本中正确编码此行为。但我也希望如果选择checkboxInput字段,numericInput()中显示的值会更新,即默认值或先前写入的值将被覆盖。

enter image description here

在屏幕截图中,numericInput字段以黄色突出显示。顶部字段的默认值为14,而其他字段为空。我想要的是"复制参考值?"选中checkboxInput后,复制的值将显示在相应的字段中(对于&#34,流量为CoP,对于dP和#34,为k1 = 72.49;等等)

我的代码如下:

fluidRow(
    column(4,
           numericInput(inputId = "Area", 
                        label = tags$div(HTML(paste("rea (m", tags$sup(2), ")", sep = ""))),
                        min = 1, max = 100, step = 0.1, value = 14),
           numericInput(inputId = "k1", label = "Flow coef. for dP", min = 1.0, max = 600.0, value = ""),
           numericInput(inputId = "k2", label = "Flow exponent for dP" , min = 1.0, max = 20.0, value = "")
           checkboxInput("copyVals", "Copy Reference Values?", value = FALSE)
)

1 个答案:

答案 0 :(得分:2)

您需要使用observeEventupdateNumericInput。由于您没有提供可重现的示例,因此这是一个模型:

library("shiny")
library("DT")

data <- data.frame(area = 18.61, k1 = 74.29, k2 = 1.44)

server <- function(input, output, session) {
  # assuming your data is reactive, not static
  data_reac <- reactive({
    data
  })

  output$parm_tab <- renderDataTable({
    datatable(data_reac())
  })

  # set the values if checked
  observeEvent(input$copyVals == TRUE, {
    c_data <- data_reac()

    updateNumericInput(session, "area", value = c_data$area)
    updateNumericInput(session, "k1", value = c_data$k1)
    updateNumericInput(session, "k2", value = c_data$k2)
  }, ignoreInit = TRUE)

}

ui <- fluidPage(
  sidebarLayout(
  sidebarPanel(
      numericInput(inputId = "area", label = "Area", min = 1, max = 100, step = 0.1, value = 14),
      numericInput(inputId = "k1", label = "Flow coef. for dP", min = 1.0, max = 600.0, value = ""),
      numericInput(inputId = "k2", label = "Flow exponent for dP" , min = 1.0, max = 20.0, value = ""),
      checkboxInput("copyVals", "Copy Reference Values?", value = FALSE)
  )
  , mainPanel(
      dataTableOutput("parm_tab")
    )
  )
)

shinyApp(ui = ui, server = server)

<强>之前

enter image description here

<强>后

enter image description here