Ответ 1
Хотя я не думаю, что в shiny
есть что-то изначально доступное, вы можете попробовать добавить jQueryUI
в ваше приложение и использовать виджет Dialog. См. http://jqueryui.com/dialog/.
(Un?), к счастью, вы будете вынуждены написать JavaScript, чтобы заставить его работать.
Per @GПоказать, вот очень минимальный пример того, что нужно, чтобы заставить его работать.
Вам нужно скачать 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
.
Далее, и 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, чтобы показать или скрыть элемент. Пример (не мой), использующий это для временного отключения кнопки, здесь.
-
Прикрепите (JavaScript) наблюдателя или триггер к выходу, и если вы видите ошибку (или вывод в противном случае каким-либо образом), поставьте флажок; иначе скрыть его.
-
Сгенерируйте фактическую пару блестящих входов/выходов для обработки поведения по желанию. (Краткое руководство по http://rstudio.github.io/shiny/tutorial/#building-inputs)
Если вы хотите получить немного больше от вашего jQueryUI диалогового окна, вы также можете попробовать расширение jQuery-dialogextend здесь.
И, отказ от ответственности: консоль здесь предназначена только для демонстрационных целей; пожалуйста, не помещайте блестящие приложения, которые запускают unsanitized код от пользователя в дикую природу!