【问题标题】:Connect mutually dependent shiny input values连接相互依赖的闪亮输入值
【发布时间】:2026-02-11 03:50:01
【问题描述】:

我有一个问题。我想要一个闪亮的应用程序,它可以有两个用于数值的输入小部件。我们称它们为 X 和 P。 一个让用户介绍一个数字,另一个是百分比变化。两个数字都可以用另一个来计算。

P*C+C=X,例如 C 为 1000。

我想做的是当用户更改 P 然后 X 更改并且以其他方式相同(用户更改 X 和 P 更改) 我知道如何以一种方式做到这一点,但不是两种方式。 有人知道如何解决这种情况吗?

【问题讨论】:

    标签: r input interactive shiny


    【解决方案1】:

    有几种方法可以做到这一点,这里是一种方法:

    library(shiny)
    u <- shinyUI(fluidPage(
      titlePanel("Mutually Dependent Input Values"),
      sidebarLayout(
        sidebarPanel(
          numericInput("X", "X",2000),
          numericInput("P", "P",1),
          numericInput("C", "C",1000)
        ),
        mainPanel(
          verbatimTextOutput("result")
        )
      )
    )) 
    s <- shinyServer(function(input, output,session) {
    
      observeEvent(input$P,{
        newX <- input$P*input$C + input$C
        updateNumericInput(session, "X", value = newX) 
        })
      observeEvent(input$X,{ 
        newP <- (input$X - input$C)/input$C
        updateNumericInput(session, "P", value = newP) 
        })
      output$result<-renderPrint({
        val <- input$P*input$C + input$C
        print(sprintf("X:%.0f P:%.0f C:%.0f  -   P*C + C:%.0f",input$X,input$P,input$C,val))
      })
    })
    shinyApp(u,s)
    

    产量:

    不确定这是不是最好的方法,如果您一开始处于不一致的状态,它就会波动 - 需要考虑如何抑制这种情况。

    【讨论】:

    • 您好!我已经看到,当我尝试在 X 上设置一个值时,应用程序会快速尝试更改该值并且不允许我设置我想要的值...是否有任何延迟选项可以等待几秒钟或按钮我可以让依赖这个相互更新?