虽然我不认为有任何本地可用的东西shiny
,你可以尝试添加jQueryUI
到您的应用程序并使用对话框小部件。看http://jqueryui.com/dialog/ http://jqueryui.com/dialog/.
(嗯?)幸运的是,您将被迫编写一些 JavaScript 来使其工作。
根据 @GSee 的建议,这是一个非常简单的示例,说明如何使其发挥作用。
你需要下载jQueryUI http://jqueryui.com/并建立一个闪亮的项目,其结构如下:
.
├── 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.R
and 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)
})
})
and
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
box.
现在的问题是,我们如何才能最小化它,或者仅在产生错误代码时才显示它?我必须离开去找你,因为我觉得这会很棘手。一些选项:
弄清楚如何让我们的 R 代码发送或触发一些 JavaScript 来显示或隐藏元素。使用此功能暂时禁用按钮的示例(不是我的)是here https://gist.github.com/xiaodaigh/6810928.
将 (JavaScript) 观察器或触发器附加到生成的输出,如果您看到错误(或输出以某种方式符合要求),则显示该框;否则隐藏它。
生成一个实际的 Shiny 输入/输出对来根据需要处理行为。 (简短教程位于http://rstudio.github.io/shiny/tutorial/#building-inputs http://rstudio.github.io/shiny/tutorial/#building-inputs)
如果您想从 jQuery UI 对话框中获得更多功能,您还可以尝试扩展 jQuery-dialog Extendhere https://github.com/ROMB/jquery-dialogextend.
并且,免责声明:此处的控制台仅用于演示目的;请不要将任何运行用户未经净化的代码的闪亮应用程序投入使用!