Shiny App-showModal не появляется с renderSankeyNetwork

Я разрабатываю приложение Shiny, которое имеет два компонента Sankey Diagram и одну кнопку действия, которая вызывает диалоговое окно «SaveMsg» при нажатии кнопки.

Я вижу неожиданное поведение, когда, если я использую кнопку действия и Sankeyvisualization на одной панели инструментов, при нажатии кнопки действия экран панели становится серым.

однако, если я прокомментирую код Sankey и оставлю только кнопку «Действие» в пользовательском интерфейсе, кнопка «Действие» будет работать, как и ожидалось, показывая всплывающее сообщение «сохранить успешно». Если я прокомментирую код кнопки действия и оставлю в пользовательском интерфейсе только код Sankey, я смогу увидеть вывод sankey на панели инструментов.

Код Sankey и кнопка действия работают, как и ожидалось, по отдельности, однако, если я помещу их в одну кнопку действия на панели инструментов, она станет серой за пределами экрана панели инструментов.

Я также прикрепил пример кода-

library(shiny)
library(networkD3)
library(shinydashboard)
value <-  c(12,21,41,12,81)
source <- c(4,1,5,2,1)
target <- c(0,0,1,3,3)
edges2 <- data.frame(cbind(value,source,target))

names(edges2) <- c("value","source","target")
indx  <- c(0,1,2,3,4,5)
ID    <- c('CITY_1','CITY_2','CITY_3','CITY_4','CITY_5','CITY_6')
nodes <-data.frame(cbind(ID,indx))

ui <- dashboardPage(
  dashboardHeader(
  ),
  dashboardSidebar(disable = TRUE),
  dashboardBody(
    fluidPage(
      actionLink("savebtn", "Save button")
      ,sankeyNetworkOutput("simple")
    )
  )
)

server <- function(input, output,session) {

  # Show modal when button is clicked.
  observeEvent(input$savebtn, {
    showModal(modalDialog(
      title = "Save successful"))
  })

  output$simple <- renderSankeyNetwork({
    sankeyNetwork(Links = edges2, Nodes = nodes,
                  Source = "source", Target = "target",
                  Value = "value",  NodeID = "ID" 
                  ,units = "SSN" )
  })
}

shinyApp(ui = ui, server = server)

person Sourabh Kumar    schedule 16.09.2017    source источник
comment
Можете ли вы привести воспроизводимый пример?   -  person Samuel    schedule 16.09.2017
comment
Привет, Самуэль, я обновил полностью воспроизводимый код, при нажатии кнопки «Сохранить» панель инструментов становится серой, однако и кнопка действия, и выход sankeyNetworkoutput отображают выходные данные отдельно, когда другие комментируются в пользовательском интерфейсе.   -  person Sourabh Kumar    schedule 16.09.2017
comment
ошибка не зависит от вашей конкретной сети sankey, поэтому вы можете просто использовать простую сеть со страниц справки sankeyNetwork...   -  person shosaco    schedule 16.09.2017
comment
Привет, shosaco, спасибо за быстрый ответ, я обновил код в разделе описания с помощью простейшего кода sankeyNetwork, скопированного со страниц справки. Однако по-прежнему при нажатии кнопки действия панель инструментов становится серой.   -  person Sourabh Kumar    schedule 16.09.2017
comment
Может кто-нибудь, пожалуйста, проверьте и поделитесь информацией, почему кнопка действия не работает с SankeyNetwork и какой обходной путь появляется при нажатии кнопки   -  person Sourabh Kumar    schedule 17.09.2017


Ответы (2)


Я не копался в проблеме, поэтому я не уверен, почему это происходит. Но если модальное окно, которое вы хотите показать, представляет собой просто текст (не содержит блестящих элементов), вы можете использовать shinyalert который также делает модальные окна (еще не в CRAN, еще не опубликован). Вот ваш код с использованиемshinialert. надеюсь, это поможет

library(shiny)
library(networkD3)
library(shinyalert)
value <-  c(12,21,41,12,81)
source <- c(4,1,5,2,1)
target <- c(0,0,1,3,3)
edges2 <- data.frame(cbind(value,source,target))

names(edges2) <- c("value","source","target")
indx  <- c(0,1,2,3,4,5)
ID    <- c('CITY_1','CITY_2','CITY_3','CITY_4','CITY_5','CITY_6')
nodes <-data.frame(cbind(ID,indx))

ui <- dashboardPage(
  dashboardHeader(
  ),
  dashboardSidebar(disable = TRUE),
  dashboardBody(
    fluidPage(
      useShinyalert()
      ,actionLink("savebtn", "Save button")
      ,sankeyNetworkOutput("simple")
    )
  )
)

server <- function(input, output,session) {

  # Show modal when button is clicked.
  observeEvent(input$savebtn, {
    shinyalert("Save successful")
  })

  output$simple <- renderSankeyNetwork({
    sankeyNetwork(Links = edges2, Nodes = nodes,
                  Source = "source", Target = "target",
                  Value = "value",  NodeID = "ID" 
                  ,units = "SSN" )
  })
}

shinyApp(ui = ui, server = server)
person DeanAttali    schedule 18.09.2017
comment
Shinyalert не решит мою проблему. На самом деле здесь я разместил урезанную версию кода для воссоздания проблемы. В реальном коде у меня есть textInput в modalDialog, при нажатии кнопки я хочу, чтобы пользователь вводил текст в текстовое поле. Любые предложения о том, как открыть modeldialog, будут полезны. - person Sourabh Kumar; 18.09.2017
comment
На самом деле, если вам нужен ввод текста, то это тоже можно решить с помощьюshinialert. Пример: shinyalert("hello", type = "input", callbackR = function(value) { cat(value) }). У меня нет времени на отладку блестящего и networkD3, но я просто предлагаю эту альтернативу, поскольку она может сработать для вас. - person DeanAttali; 19.09.2017

ОБНОВЛЕНИЕ (20.05.2019)

Эта проблема была решена в версии для разработчиков shiny и должна быть выпущена в CRAN в ближайшее время shiny v1.3.3.


Об этой проблеме уже сообщалось здесь, и я считаю, что она похожа на то, о чем сообщалось здесь. JavaScript, используемый sankeyNetwork(), добавляет <foreignObject><xhtml:body>... для переноса заголовков SVG, чтобы упростить многострочные заголовки в более старых версиях IE. Эта структура явно противоречит тому, что делает bootstrap-datepicker, и после небольшого тестирования я могу убедиться, что это, по-видимому, лежит в основе того, что здесь происходит. Уже есть запрос на вытягивание, который должен исправить это на networkD3 конце, но он еще не проверены и не объединены. Как только это произойдет, установка и использование версии networkD3 для разработчиков должны решить эту проблему. Я думаю, что это также должно быть исправлено вверх по течению, поскольку структура <foreignObject><xhtml:body>... кажется допустимой HTML/SVG.

person CJ Yetman    schedule 18.09.2017