在R中闪亮地向用户显示警告

时间:2015-12-22 18:35:19

标签: r shiny

如何在R中闪亮地向用户显示警告。用户输入正确,但输出不适合显示。目的是仅提醒用户由于太多而显示子集数据。 String message = intent.getStringExtra("Notification Key"); // Calling the notification createNotification(context, "title1", message, "event of today"); 仅在控制台中显示。谢谢。

这是一个假代码,用于解释由于原始版本很长的问题。 renderTable中有一个警告。它的目的是检查数据是否很大,只显示前几个项目。

ui.R

warning()

server.R

shinyUI(fluidPage(

titlePanel("Validation App"),

sidebarLayout(
    sidebarPanel(
        selectInput("data", label = "Data set",
                    choices = c("", "mtcars", "faithful", "iris"))
    ),

    # Show a plot of the generated distribution
    mainPanel(
        tableOutput("table"),
        plotOutput("plot")
    )
)
))

2 个答案:

答案 0 :(得分:4)

更新

我在这方面做了一些工作,并使警告小组成为条件。

但是,只有在每页上都包含textOutput("warnstat")时,它才有效。我假设是因为它没有设置javascript变量output.warnstat,除非我这样做。

您可以在UI中构建警告面板,并相应地进行设置。这是一个简单的例子,但它可能比仅仅是一个verabtim打印声明更精细。

ui.r

    shinyUI(fluidPage(

      titlePanel("Validation App"),

      sidebarLayout(
        sidebarPanel(
          selectInput("data", label = "Data set",
                      choices = c("", "mtcars", "faithful", "iris"))
        ),

        # Show a plot of the generated distribution

        mainPanel(
          conditionalPanel(condition = "output.warnstat == 'Error'",
                           verbatimTextOutput("warnmsg")),
          tableOutput("table"),
          plotOutput("plot")
        )
      )
    ))

server.r

shinyServer(function(input, output) {

  errstat <- reactive({
    ifelse (input$data=="mtcars",T,F)
  })

  data <- reactive({
    validate(
      need(input$data != "", "Please select a data set")
    )
    get(input$data, 'package:datasets')

  })


  output$plot <- renderPlot({
    hist(data()[, 1], col = 'forestgreen', border = 'white')
  })

  output$table <- renderTable({
    warning("Warning message.")
    head(data())
  })
  output$warnmsg <- renderPrint({
    if (errstat()){
      print("Warning message - blah blah blah")
      print(input$data)
      head(data())
    } else {
      print("No error")
    }
  })
  output$warnstat <- renderText({ifelse(errstat(),"Error","No error") })
  outputOptions(output, "warnstat", suspendWhenHidden=FALSE)
})

使用条件警告面板:

enter image description here

没有条件警告面板:

enter image description here

答案 1 :(得分:0)

我使用此包装功能捕获错误,警告和消息,并以可忽略的通知形式显示给用户。

quietly <- function(.f) {
  fun <- .f %>% purrr::quietly() %>% purrr::safely()
  function(...) {
    res <- fun(...)

    if(!is.null(res$error)) {  # safely output
      showNotification(res$error$message, duration = 10, type="error")
      return(res$result)
    }
    res <- res$result # quietly output
    if(!is.null(res$warnings) && length(res$warnings) > 0) {
      lapply(unique(res$warnings), showNotification, duration = 10, type="warning")
    }
    return(res$result)
  }
}