有什么方法可以在Shiny-我用来构建Web应用程序的R包中添加带有警告或其他消息的弹出窗口(可关闭的窗口)吗?
我一直在寻找一段时间,但没有任何结果。
最佳答案
尽管我认为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();
})
这将在ID为
jQueryUI
的元素上调用dialog
dialog
初始化程序。接下来,具有一个
server.R
和ui.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
中的任何代码进行评估的结果。现在的问题是,我们如何才能最小化它,或者仅在产生错误代码时才显示它?我必须离开你,因为我认为这很棘手。一些选项:
弄清楚如何使我们的R代码发送或触发一些JavaScript来显示或隐藏该元素。使用此示例来暂时禁用按钮的示例(不是我的示例)是here。
将(JavaScript)观察者或触发器附加到产生的输出上,如果您看到错误(或以其他方式符合要求的输出),请显示该框;否则将其隐藏。
生成实际的Shiny输入/输出对,以根据需要处理行为。 (位于http://rstudio.github.io/shiny/tutorial/#building-inputs的简要教程)
如果您想从jQueryUI对话框中获得更多收益,还可以尝试扩展jQuery-dialogextend here。
免责声明:此处的控制台仅用于演示目的;请不要将任何运行未经用户验证的代码的闪亮应用程序大肆宣传!
关于r - 添加带有错误的弹出窗口,警告发光,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19172904/