【问题标题】:Using text input to calculate value for another text input in shiny app使用文本输入计算闪亮应用程序中另一个文本输入的值
【发布时间】:2021-10-25 23:08:02
【问题描述】:

我想提供输入百分比或数值的选项。当用户输入两者之一时,我希望另一个自动填充。

所以对于代码:

textInput(DownDollars, "Downpayment (Dollars)", value = "", width = NULL, placeholder = NULL),

textInput(DownPercent, "Downpayment (Percent)", value = "", width = NULL, placeholder = NULL)

有没有办法使用这些输入的输出来替换value = 选项?

更新:以下代码不适用于使用另一个输入作为参考值:

ui <- fluidPage(
  numericInput("HomePrice", "Home Price", value = ""),
  
  numericInput("DownPaymentDollars", "Down Payment (Dollars)", value = "", width = NULL),
  
  numericInput("DownPaymentPercent", "Down Payment (Percent)", value = "", width = NULL)
)

server = function(input, output, session){
  
  #referenceValue <- 254
  
  observeEvent(input$DownDollars, {
    updateNumericInput(session, "DownPaymentPercent", value = input$DownDollars * 100 / input$HomePrice)
  })
  
  observeEvent(input$DownPercent, {
    updateNumericInput(session, "DownPaymentDollars", value = input$DownPercent * input$HomePrice / 100)
  })
  
}

shinyApp(ui, server)

【问题讨论】:

标签: r shiny autofill textinput


【解决方案1】:

首先,使用numericInput 获取数值更容易。 以下代码可以满足您的需要:

library(shiny)


ui <- fluidPage(
  numericInput("DownDollars", "Downpayment (Dollars)", value = "", width = NULL),
  
  numericInput("DownPercent", "Downpayment (Percent)", value = "", width = NULL)
)

server = function(input, output, session){
  
  referenceValue <- 254
  
  observeEvent(input$DownDollars, {
    updateNumericInput(session, "DownPercent", value = input$DownDollars * 100 / referenceValue)
  })
  
  observeEvent(input$DownPercent, {
    updateNumericInput(session, "DownDollars", value = input$DownPercent * referenceValue / 100)
  })
  
}

shinyApp(ui, server)

我定义了一个参考值来计算百分比,你可以根据需要定义这个值,例如取自另一个用户输入。

小心使用引号定义输入 ID。

编辑

当使用另一个numericInput 来获取参考值时,您需要观察这个新的numericInput 来更新计算。两个updateNumericInput之一必须同时被两个observeEvent触发(见this post explaining the syntax):

library(shiny)


ui <- fluidPage(
  numericInput("HomePrice", "Home Price", value = ""),
  numericInput("DownDollars", "Downpayment (Dollars)", value = "", width = NULL),
  
  numericInput("DownPercent", "Downpayment (Percent)", value = "", width = NULL)
)

server = function(input, output, session){
  
  
  observeEvent({
    input$HomePrice
    input$DownDollars
    }, {
    updateNumericInput(session, "DownPercent", value = input$DownDollars * 100 / input$HomePrice)
  })
  
  observeEvent(input$DownPercent, {
    updateNumericInput(session, "DownDollars", value = input$DownPercent * input$HomePrice / 100)
  })
  
}

shinyApp(ui, server)

【讨论】:

  • 这太好了,谢谢!如果参考号也来自用户输入,这将如何改变:numericInput("HomePrice", "Home Price", value = "") 简单地更改为value = input$DownDollars * 100 / input$HomePrice 似乎不起作用。
  • 我更新了问题以显示我尝试使用另一个输入作为参考值。没有错误消息,它只是停止更新您正确工作的其他两个输入。
  • 好的,这在启动应用程序时工作一次,但随后您必须观察参考值输入以更新 首付 输入。请参阅我的更新答案以进行尝试。
  • 谢谢@julien.leroux5!这很好用!如果你能看一下,我已经发布了关于这个应用程序的另一个问题 (stackoverflow.com/q/68957949/12886572)。
猜你喜欢
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多