如何在R Shiny应用中触发函数时创建通知
如何在R Shiny应用中实现函数启动时弹出通知?
我来帮你搞定这个需求!在R Shiny里实现函数启动时弹出通知,有两种简单好用的方法,我结合你的代码片段给你详细说明:
方法一:用Shiny原生功能实现(无需额外包)
Shiny自带了showNotification()函数,不用装新包就能快速实现通知功能。假设你是通过按钮触发处理函数,我们可以在按钮的触发逻辑里加入通知:
library(shiny) library(shinydashboard) shinyApp( ui = dashboardPage( dashboardHeader( title = "Tweetminer", titleWidth = 350 ), dashboardSidebar( width = 350, sidebarMenu( menuItem("Menu Item") ) ), dashboardBody( fluidRow( tabBox( tabPanel("Select tweets", numericInput("tweet_amount", "Amount of tweets:", 10, min = 1, max = 100), div(style="display:inline-block",numericInput("tweet_long", "Longitude:", 10, min = 1, max = 100)), # 新增一个触发按钮,用来启动你的处理函数 actionButton("start_process", "开始处理推文") ) ) ) ) ), server = function(input, output) { # 监听按钮点击事件 observeEvent(input$start_process, { # 函数启动时弹出通知 showNotification("正在处理推文,请稍候...", type = "message", duration = NULL) # -------------------------- # 这里替换成你实际的处理函数逻辑 # 比如调用获取推文的代码,下面用Sys.sleep模拟运行时间 Sys.sleep(2) # -------------------------- # 处理完成后可以再弹出成功通知 showNotification("推文处理完成!", type = "success", duration = 3) }) } )
小提示:
type参数可以选"message"、"success"、"warning"、"error",对应不同的通知样式duration设为NULL时,通知会一直显示到用户手动关闭;设为数字则是显示的秒数
方法二:用shinyjs包实现更美观的通知
如果你想要更简洁的代码和更美观的通知样式,可以用shinyjs包的notify()函数:
首先先安装并加载包:
install.packages("shinyjs")
然后修改你的代码:
library(shiny) library(shinydashboard) library(shinyjs) shinyApp( ui = dashboardPage( dashboardHeader( title = "Tweetminer", titleWidth = 350 ), dashboardSidebar( width = 350, sidebarMenu( menuItem("Menu Item") ) ), dashboardBody( useShinyjs(), # 必须添加这一行,启用shinyjs的功能 fluidRow( tabBox( tabPanel("Select tweets", numericInput("tweet_amount", "Amount of tweets:", 10, min = 1, max = 100), div(style="display:inline-block",numericInput("tweet_long", "Longitude:", 10, min = 1, max = 100)), actionButton("start_process", "开始处理推文") ) ) ) ) ), server = function(input, output) { observeEvent(input$start_process, { # 启动时弹出通知 notify("正在处理推文,请稍候...", type = "info") # -------------------------- # 你的核心处理函数逻辑 Sys.sleep(2) # -------------------------- # 完成通知 notify("推文处理完成!", type = "success") }) } )
额外场景:应用启动时自动弹出通知
如果你的函数是在应用启动时就自动运行,而不是通过按钮触发,可以把通知放在session$onFlushed()里:
server = function(input, output, session) { session$onFlushed(function() { showNotification("应用启动中,正在初始化数据...", type = "message") # 这里写你的初始化函数逻辑 }) }
你可以根据自己的需求选择其中一种方法,直接把代码替换到你的项目里就能用啦!
内容的提问来源于stack exchange,提问作者Henk Straten
相关产品推荐
相关产品推荐

