Renderplot не будет отображать значение по умолчанию для selectinput для нескольких графиков в R блестящий - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь создать блестящее приложение, которое имеет несколько графиков из разных фреймов данных. Я хочу, чтобы у каждого графика был вход выбора для выбора, при котором выбор пользователя изменяет построенный график данных, а некоторые другие пользовательские данные зависят от графика. Когда я делаю это, только один график будет отображаться, в то время как другим графикам нужно изменить значение, прежде чем они будут отображаться. У меня есть следующий пример, чтобы помочь объяснить, что я имею в виду.

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 (что я видел на аналогичных форумах, но это не сработало) здесь), и перестановка блоков кода. Я прошу прощения за любые ненужные библиотеки или, если диапазон ползунка не имеет смысла, я взял этот код из гораздо большего проекта, над которым я работаю, и я использую здесь фиктивные переменные. Та же проблема возникает в более крупном проекте с рендерингом первого графика, а всем остальным необходимо изменить переменную перед рендерингом. Я что-то упустил, как заставить их все сделать? Спасибо

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