Я не могу использовать функции из пакета 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, возвращается другая ошибка: «Предупреждение: Ошибка в [: объект типа« среда »не может быть подмножеством»