我使用shiny 的GUI R软件包.我正在寻找一种方式来显示类似"加载…"这样的消息在按下操作按钮之后.该功能需要几分钟才能执行,因此我需要以某种方式通知用户,该按钮实际上触发了一些事件.现在是服务器.R代码如下所示:

DATA <- reactive({
  if(input$DownloadButton>0) {
    RunDownload()
  } else {
    NULL
  }
})

output$Download <- renderText({
  if(NROW(DATA())>0) {
    paste0(Sys.time(),": ",NROW(DATA()), " items downloaded")
  } else {
    ''
  }
})

actionButton()是一个从互联网下载数据的功能.input$DownloadButton是动作按钮.因此,按下按钮后,用户等待几分钟,然后才看到一条消息,说明下载成功.我想显示一条消息"正在加载…"就在按下actionButton之后,执行结束时会出现另一条类似paste0(Sys.time(),": ",NROW(DATA()), " items downloaded")的消息.

推荐答案

我已经在使用一种比我之前发布的更简单、更可靠的方法.

组合

tags$style(type="text/css", "
           #loadmessage {
             position: fixed;
             top: 0px;
             left: 0px;
             width: 100%;
             padding: 5px 0px 5px 0px;
             text-align: center;
             font-weight: bold;
             font-size: 100%;
             color: #000000;
             background-color: #CCFF66;
             z-index: 105;
           }
  ")

具有

conditionalPanel(condition="$('html').hasClass('shiny-busy')",
                 tags$div("Loading...",id="loadmessage")
)

例子:

runApp(list(
  ui = pageWithSidebar(
      headerPanel("Test"),
         sidebarPanel(
           tags$head(tags$style(type="text/css", "
             #loadmessage {
               position: fixed;
               top: 0px;
               left: 0px;
               width: 100%;
               padding: 5px 0px 5px 0px;
               text-align: center;
               font-weight: bold;
               font-size: 100%;
               color: #000000;
               background-color: #CCFF66;
               z-index: 105;
             }
          ")),
           numericInput('n', 'Number of obs', 100),
           conditionalPanel(condition="$('html').hasClass('shiny-busy')",
                            tags$div("Loading...",id="loadmessage"))
         ),
         mainPanel(plotOutput('plot'))
  ),
  server = function(input, output) {
    output$plot <- renderPlot({ Sys.sleep(2); hist(runif(input$n)) })
  }
))

tags$head()不是必需的,但最好将所有样式都保留在head标记中.

R相关问答推荐

for循环和if else在R中

如何按行和列组合多个格式?

将收件箱变量传递给ggplot 2函数

通过Plotly绘制线串几何形状的3D图

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

如何将dygraph调用到R Markdown作为一个shiny 的react 对象的参数?

在某些栏和某些条件下,替换dfs列表中的NA

计算时间段的ECDF(R)

Ggplot2中的重复注记

一小时满足条件的日期的 Select

使用列/行匹配将两个不同维度的矩阵相加

使用R中的dist()迭代ID匹配的欧几里德距离

更新R中的数据表(使用data.table)

将多个列值转换为二进制

为什么在BASE R中绘制线条时会看到线上的点?

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

如何计算增加10米(0.01公里)的行?

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

删除字符串R中的重复项

按组和连续id计算日期差