14

有没有办法在Shiny中添加带有警告或其他消息的弹出窗口(可关闭的窗口) - 我用来构建 Web 应用程序的 R 包?

我一直在寻找一段时间,但没有任何结果。

4

3 回答 3

21

虽然我认为 中没有任何本机可用的内容shiny,但您可以尝试添加jQueryUI到您的应用程序并使用 Dialog 小部件。请参阅http://jqueryui.com/dialog/

(不?)幸运的是,您将被迫编写一些 JavaScript 来使其工作。


根据@GSee 的建议,这是一个非常简单的示例,说明了如何使其工作。

您需要下载jQueryUI并设置一个具有如下结构的闪亮项目:

.
├── server.R
├── ui.R
└── www
    ├── css
    │   └── jquery-ui.css
    ├── images
    │   ├── animated-overlay.gif
    │   ├── ui-bg_flat_0_aaaaaa_40x100.png
    │   ├── ui-bg_flat_75_ffffff_40x100.png
    │   ├── ui-bg_glass_55_fbf9ee_1x400.png
    │   ├── ui-bg_glass_65_ffffff_1x400.png
    │   ├── ui-bg_glass_75_dadada_1x400.png
    │   ├── ui-bg_glass_75_e6e6e6_1x400.png
    │   ├── ui-bg_glass_95_fef1ec_1x400.png
    │   ├── ui-bg_highlight-soft_75_cccccc_1x100.png
    │   ├── ui-icons_222222_256x240.png
    │   ├── ui-icons_2e83ff_256x240.png
    │   ├── ui-icons_454545_256x240.png
    │   ├── ui-icons_888888_256x240.png
    │   └── ui-icons_cd0a0a_256x240.png
    └── js
        └── jquery-ui.js

(所有图像图标都是 jQueryUI 的一部分)

接下来,在文件夹中添加一个名为scripts.js(或任何你喜欢的)的www/js文件,其中包含以下内容

$( function() {
  $("#dialog").dialog();
})

这将调用jQueryUI dialog具有 id 的元素的初始化程序dialog

接下来,有一个server.Rui.R如下:

server.R
--------
library(shiny)
shinyServer( function(input, output, session) {

  ## a very unsafe, basic access to the R console
  output$dialog <- renderPrint({

    code <- input$console
    output <- eval( parse( text=code ) )
    return(output)

  })

})

ui.R
----

library(shiny)

shinyUI(bootstrapPage(
  includeCSS("www/css/jquery-ui.css"),  

  includeScript("www/js/jquery-ui.js"),
  includeScript("www/js/scripts.js"),

  textInput("console", "Enter an R Command"),
  uiOutput("dialog")

))

现在,如果你这样做runApp()了,你应该会看到你写入文本输入的任何代码的评估结果console出现在dialog框中。

现在的问题是,我们如何才能最小化它,或者只在产生错误代码时才显示它?我必须为你离开,因为我认为这会很棘手。一些选项:

  1. 弄清楚如何让我们的 R 代码发送或触发一些 JavaScript 来显示或隐藏元素。使用它来临时禁用按钮的示例(不是我的)是here

  2. 将(JavaScript)观察者或触发器附加到产生的输出中,如果您看到错误(或以某种方式符合的输出),请显示该框;否则隐藏它。

  3. 生成一个实际的 Shiny 输入/输出对以根据需要处理行为。(简要教程在http://rstudio.github.io/shiny/tutorial/#building-inputs

如果你想从你的 jQueryUI 对话框中得到更多,你也可以在这里尝试扩展 jQuery-dialogextend 。

而且,免责声明:这里的控制台仅用于演示目的;请不要将任何运行未经清理的用户代码的闪亮应用程序放到野外!

于 2013-10-04T05:33:07.187 回答
13

那里有这个新的 R 包 - shinyBS,它将许多 twitter 引导功能带入闪亮,如警报、工具提示、弹出框、模式对话框、进度条等......

闪亮的BS

于 2014-12-18T08:10:38.637 回答
0

Bolaka 是对的,安装并加载shinyBS包,然后运行bsExample("Alerts")以查看包含可以复制和粘贴的代码的示例。

于 2017-05-01T19:10:00.567 回答