Вы можете использовать выражение reactive
для num_C
library(shiny)
# Define UI
ui <- fluidPage(
numericInput(inputId = "A", "Number A", value = 2),
numericInput(inputId = "B", "Number B", value = 3),
numericInput(inputId = "C", "Number C [A/B]", value = 1)
)
# Server logic
server <- function(input, output, session){
num_C <- reactive({
req(input$A, input$B)
input$A / input$B
})
observe(
updateNumericInput(
inputId = "C",
session = session,
value = format(num_C(), digits = 2))
)
}
# Complete app with UI and server components
shinyApp(ui, server)
num_C()
, чтобы затем вернуть значение «без округления», тогда как мы используем округленное значение format(num_C(), digits = 2)
в updateNumericInput
.
Частичное обновление
Для чего оно стоит, вот неполное обновление
library(shiny)
# Define UI
ui <- fluidPage(
numericInput(inputId = "A", "Number A", value = 2),
numericInput(inputId = "B", "Number B", value = 3),
numericInput(inputId = "C", "Number C [A/B]", value = 1),
textOutput("value"),
textOutput("rounded_value")
)
# Server logic
server <- function(input, output, session){
num_C <- reactiveValues(
value = NULL,
rounded_value = NULL
)
observeEvent(input$A | input$B, {
num_C$value <- input$A / input$B
num_C$rounded_value <- round(num_C$value, 1)
})
observeEvent(input$C, {
num_C$value <- input$C
num_C$rounded_value <- input$C
})
output$value <- renderText(
sprintf("Number C = %f", num_C$value)
)
output$rounded_value <- renderText(
sprintf("Number C (rounded) = %f", num_C$rounded_value)
)
}
# Complete app with UI and server components
shinyApp(ui, server)
Идея состоит в том, чтобы использовать reactiveValues
для отслеживания полной точности иокругленное значение числа C. Это работает, поскольку
- при изменении чисел от A, B до
numericInput
будет правильно рассчитывать (и отображать) полную точность и округленные числа для C в textOutput
s. - при изменении числа от C до
numericInput
также будет правильно отображаться полное значение точности (равное округленному) в textOutput
s.
Однако , мне не удалось использовать updateNumericInput
для обновления значения для C с округленным числом, когда были изменены числа A и B.
Продолжение следует ...