如果数字输入不满足条件,则显示即时通知

时间:2017-10-19 18:49:50

标签: r shiny

我有一个textInput,用户应在其中输入一个数字,我会检查它是否大于0(我使用textInput代替numInput的原因是我不喜欢后者的箭头)。该数字用于进一步计算。如果输入的数字小于或等于0,我的目标是向用户显示即时通知。" instant"我的意思是一旦用户点击输入字段外。我尝试了以下操作,但无论输入是什么都没有显示通知:

library(shiny)

ui <- fluidPage(textInput("num_ipt", "enter positive number"))

server <- function(input, output, session) {

  pos_num <- reactive({
    validate(need(as.numeric(input$num_ipt) > 0), "Enter positive number")
      as.numeric(input$num_ipt)})}

shinyApp(ui, server)

编辑:

@Imran Ali,你的意思是这个吗?

library(shiny)

ui <- fluidPage(textInput("num_ipt", "enter positive number"),
                verbatimTextOutput("numb"))

server <- function(input, output, session) {

  pos_num <- reactive({
    validate(need(as.numeric(input$num_ipt) > 0), "Enter positive number")
    as.numeric(input$num_ipt)})
  output$numb <- renderText(pos_num())

  }

shinyApp(ui, server)

这不起作用。输出面板中显示错误而不是数字:&#34;错误:参数&#39;标签&#39;缺少,没有默认&#34;。除此之外,根本不应该输出数字。在我的真实应用程序中,它只需要作为计算的输入。

2。编辑: @Stephane,你的第一个片段朝着正确的方向发展,但它并不是我所需要的,因为它只有在输出pos_num时才有效。如果我删除output$numb,则无效:

library(shiny)

ui <- fluidPage(textInput("num_ipt", "enter positive number"))

server <- function(input, output, session) {

  pos_num <- reactive({
    validate(need(as.numeric(input$num_ipt) > 0, "Enter positive number"))
    as.numeric(input$num_ipt)})}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:1)

这不起作用,因为消息必须是need的参数,而它是代码中validate的参数。

library(shiny)

ui <- fluidPage(textInput("num_ipt", "enter positive number"),
                verbatimTextOutput("numb"))

server <- function(input, output, session) {

  pos_num <- reactive({
    validate(need(as.numeric(input$num_ipt) > 0, "Enter positive number"))
    as.numeric(input$num_ipt)
  })

  output$numb <- renderText(pos_num())

}

shinyApp(ui, server)

仅供参考,以下是使用shinyFeedback打印此类邮件的方法:

library(shiny)
library(shinyFeedback)

ui <- fluidPage(
  useShinyFeedback(),
  textInput("num_ipt", "enter positive number", value="1"),
  verbatimTextOutput("numb")
)

server <- function(input, output, session) {

  observeEvent(input$num_ipt, {
    feedbackWarning(
      inputId = "num_ipt",
      condition = is.na(as.numeric(input$num_ipt)) || !(as.numeric(input$num_ipt) > 0),
      text = "Enter a positive number !"
    )
  })

  pos_num <- reactive({
    validate(need(as.numeric(input$num_ipt) > 0, message=FALSE))
    as.numeric(input$num_ipt)
  })

  output$numb <- renderText(pos_num())

}

shinyApp(ui, server)