Взаимодействие между HTML-виджетами в R блестящий

Я разрабатываю блестящее приложение R, которое использует несколько HTML-виджетов, в частности, networkD3, d3heatmap и chorddiag.

Эти виджеты прекрасно работают отдельно. Однако, используя их на одной странице, оставьте пустое место, где они должны быть.

Вот воспроизводимый код, который показывает ошибку. Прокомментируйте строку графиков в пользовательском интерфейсе, и вы увидите, что графики появляются и исчезают.

Большое спасибо за вашу помощь!

# libraries
library(shiny)
library(d3heatmap)
library(chorddiag)
library(networkD3)

# Server
server <- function(input, output) {

  # create heatmap
  output$heatmap <- renderD3heatmap({
    d3heatmap(mtcars, scale = "column", colors = "Spectral")
  })

  # create chord diagram
  output$chord <- renderChorddiag({
    m <- matrix(c(11975,  5871, 8916, 2868,1951, 10048, 2060, 6171, 8010, 16145, 8090, 8045,1013,   990,  940, 6907),
    byrow = TRUE, nrow = 4, ncol = 4)
    haircolors <- c("black", "blonde", "brown", "red")
    dimnames(m) <- list(have = haircolors, prefer = haircolors)
    groupColors <- c("#000000", "#FFDD89", "#957244", "#F26223")
    chorddiag(m, groupColors = groupColors, groupnamePadding = 20)
  })

  # create sankey
  output$sankey <- renderSankeyNetwork({
    nodes=data.frame(ID=c("A","B","C","D","E"))
    links=data.frame(source=c(1,2,3), target=c(3,4,4), value=c(12,15,29))
    sankeyNetwork(Links = links, Nodes = nodes, Source = "source", Target = "target", Value = "value", NodeID = "ID")
  })

}



# Ui
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel("shiny shines"),
    mainPanel(
        # Comment these lines and you will see charts appear / disappear.
        d3heatmapOutput("heatmap"),
        chorddiagOutput("chord"),
        sankeyNetworkOutput("sankey")
    )
  )
)

shinyApp(ui = ui, server = server)

1 ответ

networkD3 был обновлен до D3v4 в версии 0.3 в феврале 2017 года, что несовместимо с версиями D3v3, что chorddiag а также d3heatmap Похоже, использовать. htmlwidgets, который является базовым пакетом, который управляет вышеупомянутыми пакетами, использует только самую последнюю версию зависимости, поэтому htmlwidgets, которые используют конфликтующие версии одной и той же библиотеки, не могут работать оба. Проверьте здесь для начала обсуждения этой проблемы.

У вас есть несколько возможных вариантов, хотя ни один из них не является отличным...

  1. возвращаться networkD3 до версии < 0.3, так что он также использует D3v3

  2. лобби для chorddiag разработчики и d3heatmap разработчики для обновления до D3v4

  3. лобби для htmlwidgets разработчикам придумать надежный способ борьбы с конфликтующими зависимостями JavaScript

@CJYetman дал 3 варианта решения этой проблемы. Вот еще один, который может потребовать меньше работы, хотя он все еще непривлекателен: переименуйте библиотеку, используемую вchorddiag а также d3heatmap от d3 к чему-то еще, так что как версия 3 D3 (используется этими двумя), так и версия 4 (используется networkD3) могут сосуществовать на одной странице.

Первый шаг в этом для chorddiagздесь: https://github.com/dmurdoch/chorddiag. Библиотека переименовывается вd3_3. Это же изменение также работает дляd3heatmap; см. https://github.com/dmurdoch/d3heatmap.

Другие вопросы по тегам