Добавьте всплывающее окно с ошибкой, предупреждая о блестящей

Можно ли добавить всплывающее окно (закрывающееся окно) с предупреждением или другим сообщением в Shiny - пакете R, который я использую для создания моего веб-приложения?

Я искал какое-то время, но без каких-либо результатов.

Ответы

Ответ 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 код от пользователя в дикую природу!

Ответ 2

Здесь есть новый R-пакет - shinyBS, который привносит много функций бутстрапа twitter в блестящие, как предупреждения, всплывающие подсказки, всплывающие окна, модальные диалоги, индикаторы выполнения и т.д....

shinyBS

Ответ 3

Болака прав, установите и загрузите пакет shinyBS, затем запустите bsExample("Alerts"), чтобы увидеть пример с кодом, который вы можете скопировать и вставить.