RShiny - Предупреждение: ошибка в: Эстетика должна быть либо длины 1, либо такой же, как данные (48): y - PullRequest
0 голосов
/ 26 февраля 2019

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

Я пытался разместить функцию ввода в моем скрипте (input$rating) во многих разных местах, но продолжаю получать похожие ошибки.Я посмотрел повсюду, но мне кажется, что я не могу найти общий ответ, чтобы решить эту проблему.

ui <- fluidPage("Retired Risks by Retired Date",
                checkboxGroupInput(inputId = "rating", label = "Risk Rating", 
                                   choices = c("Critical","Major","Moderate","Minor")),
                plotOutput("plot1"))

server <- function(input, output){
  Risk <- read.csv("C:/Users/ABakk1/Desktop/RShinyTest.csv")
  df <- data.frame(Risk$Risk_Retired_Date, Risk$Risk_Rating)
  dfsum <- df %>%
    group_by(Risk.Risk_Retired_Date, Risk.Risk_Rating) %>%
    tally()
  dfsum$Risk.Risk_Retired_Date <- factor(dfsum$Risk.Risk_Retired_Date, 
                                         levels=c("18-Jan","18-Feb","18-Mar","18-Apr",
                                                  "18-May","18-Jun","18-Jul","18-Aug",
                                                  "18-Sep","18-Oct","18-Nov","18-Dec",
                                                  "19-Jan","19-Feb"))

  output$plot1 <- renderPlot({
    print(ggplot(dfsum, aes(x = Risk.Risk_Retired_Date, 
                            y = n<input$rating, colour = Risk.Risk_Rating ))) + 
    geom_line(aes(group = Risk.Risk_Rating), size = 1.5) + 
    scale_color_manual(name = "Risk Rating", 
                       labels = c("Critical", "Major", "Minor", "Moderate"),
          values = c("Critical"="darkred", "Major"="orangered", 
                     "Moderate"="darkorange", "Minor"="darkgoldenrod1")) + 
    scale_y_continuous(limits = c(0,35)) +
    theme_bw() +
    theme(panel.grid.major = element_blank(), 
          legend.key=element_blank(), legend.justification = c(0,1),
          legend.position = c(0.05,0.95), 
          legend.box.background = element_rect(colour = "black"), 
          text=element_text(size=14,  family="Arial Narrow")) +
    labs(title = "Retired Risks by Date", 
         y = "Number Risks Closed", x = "Risk Retired Date") +
    guides(color=guide_legend(override.aes=list(fill=NA)))})
}

shinyApp(ui, server)

Вот как должна выглядеть моя фигура: Линейный график

Я просто хочу добавить опцию фильтра.

Судя по тому, что я могу сказать, я не помещаю input$rating в правильное место, но я видел много разных сценариев, помещающих его вразные места.Легко ли решить эту проблему?

1 Ответ

0 голосов
/ 26 февраля 2019

Значения, хранящиеся во входном $ rating, представляют собой вектор символов из одного или нескольких из следующих элементов: c("Critical","Major","Moderate","Minor").

В вызове ggplot в функции renderPlot вы оцениваете входной $ rating, как если бы онбыли числом:

print(ggplot(dfsum, aes(x = Risk.Risk_Retired_Date, 
                            y = n<input$rating, colour = Risk.Risk_Rating ))) + 

Вместо этого я бы создал реактивный объект для хранения нового фрейма данных до суммирования, отфильтрованный по вашему выбору:

dfsum <- reactive({
df %>%
   # New code below
   filter(Risk.Risk_Rating %in% input$rating) %>%

   # Your original code
   group_by(Risk.Risk_Retired_Date, Risk.Risk_Rating) %>%
   tally()
   dfsum$Risk.Risk_Retired_Date <- factor(dfsum$Risk.Risk_Retired_Date, 
                                         levels=c("18-Jan","18-Feb","18-Mar","18-Apr",
                                                  "18-May","18-Jun","18-Jul","18-Aug",
                                                  "18-Sep","18-Oct","18-Nov","18-Dec",
                                                  "19-Jan","19-Feb"))
})
``
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...