使用文本输入计算闪亮应用程序中另一个文本输入的值

Posted

技术标签:

【中文标题】使用文本输入计算闪亮应用程序中另一个文本输入的值【英文标题】: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)

【问题讨论】:

使用 updatetextInput 可能会有所帮助:shiny.rstudio.com/reference/shiny/0.14/updateTextInput.html 【参考方案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!这很好用!如果你能看一下,我已经发布了关于这个应用程序的另一个问题 (***.com/q/68957949/12886572)。

以上是关于使用文本输入计算闪亮应用程序中另一个文本输入的值的主要内容,如果未能解决你的问题,请参考以下文章

闪亮的多行文本输入

永久保存来自闪亮的文本输入?

为 DT 输出渲染文本输入时出现 R 闪亮错误

闪亮:如何输入用双引号(“)分隔的文本字符串列表

在 R 闪亮的模块中使用 actionButton + insertUI 创建多个输入

来自文本输入的表格中的R闪亮多行行