Как использовать Crosstalk в Shiny для фильтрации таблицы реактивных данных? - PullRequest
0 голосов
/ 24 января 2019

Я не могу использовать функции из пакета Crosstalk в приложении Shiny. При работе я получаю сообщение об ошибке, в котором говорится, что мой объект SharedData не найден.

Я хотел бы создать приложение Shiny, в котором пользователи могут выполнять фильтрацию различными способами (selectInput, выбор строк в таблице данных и т. Д.), Но все таблицы, диаграммы и карты обновляются одновременно, независимо от метода фильтрации. Я слышал, что перекрестные помехи хороши для этого, и я использовал пример вулкана здесь в качестве шаблона.

Моя проблема заключается в том, что при попытке запустить приложение я получаю предупреждение о том, что объект SharedData не может быть найден. Я попытался поместить это в серверную часть, и попытался разместить в реактивном, eventReactive, наблюдаем, наблюдаем, и т. Д., Но это не имеет никакого значения. Я также пытался разместить код вне пользовательского и серверного компонентов, но единственное отличие состоит в том, что моя ошибка теперь в том, что «объект типа« среда »не может быть поднабором».

Ниже не мой оригинальный код; Я упростил проблему и сделал ее воспроизводимой, поделившись следующим: * Создано новое приложение Shiny от Rstudio (шаблон использует достоверный набор данных) * Изменен набор данных с верного на ирис * Добавлен вызов в библиотеку перекрестных помех * Включены filter_select, вызовы SharedData * Изменена строка 48 для ссылки на shared_df, а не на ирис

library(shiny)
library(crosstalk)

# Define UI for application that draws a histogram

ui <- fluidPage(

   # Application title
   titlePanel("Crosstalk test"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 1,
                     max = 50,
                     value = 30),
         filter_select("rows", "Select rows:",
                       shared_df,
                       ~Species,
                       multiple = TRUE)
      ),

      # Show a plot of the generated distribution
      mainPanel(
         plotOutput("distPlot")
      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

  # Shared data available for use by the crosstalk package
  shared_df <- SharedData$new(iris)

   output$distPlot <- renderPlot({
      # generate bins based on input$bins from ui.R
      x    <- shared_df[, 2] 
      bins <- seq(min(x), max(x), length.out = input$bins + 1)

      # draw the histogram with the specified number of bins
      hist(x, breaks = bins, col = 'darkgray', border = 'white')
   })
}

# Run the application 
shinyApp(ui = ui, server = server)

Мои ожидаемые результаты должны включать диаграмму гистограммы с интерактивным ползунком для динамической настройки ширины бина (согласно «старому верному» шаблону). Кроме того, я должен иметь возможность выбирать Виды растений, и гистограмма должна динамически обновляться, чтобы отображать результаты только для выбранных Видов.

* редактировать * Мне удалось воссоздать пример вулкана, связанный с выше, для блестящего приложения. Код ниже работает:

library(shiny)
library(crosstalk)
library(leaflet)
library(DT)

# Wrap data frame in SharedData
# Use SharedData like a dataframe with Crosstalk-enabled widgets

sd <- SharedData$new(quakes[sample(nrow(quakes), 100),])

ui <- fluidPage(
# Create a filter input
filter_slider("mag", "Magnitude", sd, column=~mag, step=0.1, width=250),
bscols(leafletOutput("map"), DTOutput("table"))
)


server <- function(input,output) {

  output$map <- renderLeaflet({ leaflet(sd) %>% addTiles() %>% addMarkers()})

  output$table <- renderDT({
    datatable(sd, extensions="Scroller", style="bootstrap", class="compact", width="100%",
            options=list(deferRender=TRUE, scrollY=300, scroller=TRUE))
  }, server = FALSE)
}

shinyApp(ui = ui, server = server)

Единственная разница между этим примером вулкана и моим примером радужной оболочки глаза (кроме перемещения shared_df вне пользовательского интерфейса и сервера) в использовании filter_select. Когда я перемещаю shared_df, возвращается другая ошибка: «Предупреждение: Ошибка в [: объект типа« среда »не может быть подмножеством»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...