Я пытаюсь создать блестящее приложение, которое имеет несколько графиков из разных фреймов данных. Я хочу, чтобы у каждого графика был вход выбора для выбора, при котором выбор пользователя изменяет построенный график данных, а некоторые другие пользовательские данные зависят от графика. Когда я делаю это, только один график будет отображаться, в то время как другим графикам нужно изменить значение, прежде чем они будут отображаться. У меня есть следующий пример, чтобы помочь объяснить, что я имею в виду.
library(shiny)
library(shinyBS)
library (dplyr)
library(wordcloud)
library(wordcloud2)
library(ggplot2)
library(plotly)
Survey1_Together <- read.csv(text = '"Answer", "Score"
"A", 20
"B", 10
"C", 14')
Survey1_user1 <- read.csv(text = '"Answer", "Score"
"A", 10
"B", 5
"C", 4')
Survey1_user2 <- read.csv(text = '"Answer", "Score"
"A", 10
"B", 5
"C", 4')
Survey2_Together <- read.csv(text = '"Answer", "Score"
"A", 200
"B", 120
"C", 140')
Survey2_user1 <- read.csv(text = '"Answer", "Score"
"A", 150
"B", 50
"C", 40')
Survey2_user2 <- read.csv(text = '"Answer", "Score"
"A", 150
"B", 70
"C", 100')
ui <- fluidPage(
fluidRow(column(width =4),titlePanel(h2("Wordcloud Survey 1", align = "center"))),
fluidRow(HTML("<br>")),
fluidRow(HTML("<br>")),
fluidRow(flowLayout((tags$div(selectizeInput("which", "Choose a user", choices = c("Together", "User 1", "User 2")), align = "center")),
(tags$div(sliderInput(inputId = "num", label = "Range of word usage", value = c(0,10000), min = 1, max = 10000), align = "center")), align = "center")),
fluidRow(HTML("<br style = 'line-height: 100px'>")),
fluidRow(column = 12, (tags$div(wordcloud2Output("wordcloud1", height = "600px"), align = "center")))
,
fluidRow(column(width =4),titlePanel(h2("Wordcloud survey 2", align = "center"))),
fluidRow(HTML("<br>")),
fluidRow(HTML("<br>")),
fluidRow(flowLayout((tags$div(selectizeInput("which2", "Choose a user", choices = c("Together", "User 1", "User 2")), align = "center")),
(tags$div(sliderInput(inputId = "num2", label = "Range of word usage", value = c(0,1000), min = 1, max = 1000), align = "center")), align = "center")),
fluidRow(HTML("<br style = 'line-height: 100px'>")),
fluidRow(column = 12, (tags$div(wordcloud2Output("wordcloud2"), align = "center"))),
fluidRow(HTML("<br style = 'line-height: 200px'>")),
)
server <- function(input, output, session) {
datasetInput1 <- reactive({
switch(input$which,
"Together" = Survey1_Together,
"User 1" = Survey1_user1,
"User 2" = Survey1_user2)})
wc1 <- reactive(
datasetInput1() %>%
filter(Score %in% (input$num[1]:input$num[2])))
output$wordcloud1 <- renderWordcloud2({wordcloud2(wc1(), color = "random-light", widgetsize = 10, size = 2)
})
datasetInput2 <- reactive({
switch(input$which2,
"Together" = Survey2_Together,
"User 1" = Survey2_user1,
"User 2" = Survey2_user2)})
wc2 <- reactive(datasetInput2() %>%
filter(Score %in% (input$num2[1]:input$num2[2])))
output$wordcloud2 <- renderWordcloud2({wordcloud2(wc2(), size = 1, fontFamily = "Arial", fontWeight = "bold", color = brewer.pal(8, "Set1"), minSize = .5, gridSize = 15, minRotation = 0.01, maxRotation = 180, rotateRatio = 1 )})
}
shinyApp(ui = ui, server = server)
Здесь первое облако слов будет отображаться, в то время как второму необходимо изменить значение, прежде чем оно сможет отобразиться. Кто-нибудь знает, что я могу сделать, чтобы оба графика отображались со значением по умолчанию?
До сих пор я пытался: использовать уникальные значения, использовать функции req (что я видел на аналогичных форумах, но это не сработало) здесь), и перестановка блоков кода. Я прошу прощения за любые ненужные библиотеки или, если диапазон ползунка не имеет смысла, я взял этот код из гораздо большего проекта, над которым я работаю, и я использую здесь фиктивные переменные. Та же проблема возникает в более крупном проекте с рендерингом первого графика, а всем остальным необходимо изменить переменную перед рендерингом. Я что-то упустил, как заставить их все сделать? Спасибо