несовместимый вывод с Shiny и ggplot2, несмотря на непротиворечивый параметр - PullRequest
0 голосов
/ 29 июня 2019

Пример кода ниже для отображения гистограммы с Shiny и ggplot2 прекрасно работает.Это воспроизводимый пример гораздо большего кода, где функция renderPlot () точно такая же.Базовые данные для гистограммы (то есть simulatedDataForPlot ()) представляют собой фрейм данных (что подтверждается использованием команды browser () в исходном коде - см. Вывод на консоли ниже в режиме браузера), и я хочуПолагаю, что в обоих случаях это тоже самое.
К сожалению, я получаю сообщение об ошибке с исходным кодом, который создается в функции renderPlot ():

Warning: Error in .subset2(public_bind_env, "initialize"): is.numeric(c  (timetable, period, values)) is not TRUE

Может кто-нибудь понять, почемуrenderPlot () ведет себя таким противоречивым образом?Я не уверен, как еще больше упростить проблему, не разделяя весь мой оригинальный код.Моя лучшая оценка заключается в том, что ошибка генерируется в функции renderPlot ().Соответствующие строки в части пользовательского интерфейса кода Shiny также одинаковы в обоих случаях.Если приведенный выше вопрос не отвечает, учитывая показанные ограниченные данные, какие-нибудь полезные советы, как я могу найти строку с ошибками в моем исходном коде?

См. Вывод на консоли (RStudio), вызывающий функцию browser () в блоке renderPlot исходного кода (первая строка в блоке):

Called from: renderPlot(...)
Browse[1]> n
debug at C:\Users\Josef\Desktop\final project\final   deployment/app.R#1311: if (!(is.null(simulatedDataForPlot()))) {
return(ggplot(data = simulatedDataForPlot(), aes(x = activity, 
    y = meanDuration)) + geom_bar(width = 0.7, stat = "identity") + 
    theme(axis.text.x = element_text(angle = 60, hjust = 1, 
        vjust = 1, size = 12)) + ggtitle("simulated results") + 
    xlab("activities/queues") + ylab("minutes"))
}
Browse[2]> simulatedDataForPlot() %>% class()
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ... and 1 more problem
[1] "data.frame"
Browse[2]> simulatedDataForPlot()
               activity meanDuration
1       verifying queue    8.4754057
2    verifying activity    5.4447647
3      dispensing queue    0.1390553
4   dispensing activity    5.9895090
5    final check. queue   12.8071083
6 final check. activity    5.6514668
Browse[2]> n
debug at C:\Users\Josef\Desktop\final project\final deployment/app.R#1312: return(ggplot(data = simulatedDataForPlot(), aes(x = activity, 
y = meanDuration)) + geom_bar(width = 0.7, stat = "identity") + 
theme(axis.text.x = element_text(angle = 60, hjust = 1, vjust = 1, 
    size = 12)) + ggtitle("simulated results") + xlab("activities/queues") + 
ylab("minutes"))
Browse[2]> n
Called from: renderPlot(...)
Browse[1]> n
debug at C:\Users\Josef\Desktop\final project\final deployment/app.R#1311: if (!(is.null(simulatedDataForPlot()))) {
return(ggplot(data = simulatedDataForPlot(), aes(x = activity, 
    y = meanDuration)) + geom_bar(width = 0.7, stat = "identity") + 
    theme(axis.text.x = element_text(angle = 60, hjust = 1, 
        vjust = 1, size = 12)) + ggtitle("simulated results") + 
    xlab("activities/queues") + ylab("minutes"))
}
Browse[2]> n
Warning: Error in .subset2(public_bind_env, "initialize"): is.numeric(c  (timetable, period, values)) is not TRUE
191: <Anonymous>

Возможно, стоит упомянуть, чтоНа полпути, проходя код выше, строка за строкой, гистограмма появляется в браузере, а затем сразу же снова становится серой.

см. пример кода:

library(dplyr)

categoriesForPlot <- c("verifying queue", "verifying activity", 
                       "dispensing queue", "dispensing activity", 
                       "final check. queue", "final check. activity")

dataForPlot <- data.frame(
  activity = factor(categoriesForPlot, levels = categoriesForPlot, 
                    ordered = T),
  meanDuration = c(8.4754057,5.4447647,0.1390553,5.9895090,12.8071083,5.6514668)
)

#Defining the user interface:
ui <- fluidPage(
  flowLayout(
    plotOutput(outputId = "simulatedDurations")
  )
)

#Processing of inputs and preparing them for output on
#the user interface:
server <- function(input, output) {

  simulatedDataForPlot <- reactive({
    dataForPlot
  })

  #for simulation tab:
  #the following bar-chart is to display the durations (and later standard deviations)
  #of the various activities and queues of the process:
  output$simulatedDurations <- renderPlot({
    if (!(is.null(simulatedDataForPlot()))){
      return(
        ggplot(data = simulatedDataForPlot(), 
               aes(x = activity, y = meanDuration)) +
          geom_bar(width = 0.7, stat = "identity") +
          theme(axis.text.x = element_text(angle = 60, hjust = 1, vjust = 1, size = 12)) +
          ggtitle("simulated results") +
          xlab("activities/queues") +
          ylab("minutes")
      )
    }
  })

}

#Required to create the Shiny app:
shinyApp(ui = ui, server = server)

См. ошибкусообщение и что я бы ожидал выше.

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