我有一个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)
答案 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)