Почему этот простой R-вывод не строится с помощью ggplot?

#r #ggplot2 #shiny

Вопрос:

При запуске приведенного ниже кода я не уверен, почему он не строится. В других, более сложных версиях этого кода он строится; Я проводил построчные сравнения и не могу понять, почему в этом случае он не строится. Я играл с req() if(isTruthy()...)) заявлениями, но безуспешно. Я протестировал interpol() пользовательскую функцию в консоли, и она отлично работает, как показано на рисунке внизу этого поста.

 library(ggplot2) library(shiny) library(shinyMatrix)  interpol lt;- function(a, b) { # a = periods, b = matrix inputs  c lt;- rep(NA, a)  c[1] lt;- b[1]  c[a] lt;- b[2]  c lt;- approx(seq_along(c)[!is.na(c)], c[!is.na(c)], seq_along(c))$y # lt;lt; interpolates  return(c) }  ui lt;- fluidPage(    sidebarLayout(  sidebarPanel(  sliderInput('periods', 'Modeled periods (X variable):', min=1, max=10, value=10),  matrixInput("matrix1",   label = "Matrix 1:",  value = matrix(c(5), ncol = 1, dimnames = list("Base rate",NULL)),  cols = list(names = FALSE),  class = "numeric"),  matrixInput("matrix2",  label = "Matrix 2 (will link to Matrix 1):",  value = matrix(c(10,5), ncol = 2, dimnames = list(NULL,c("X","Y"))),  rows = list(extend = TRUE, delete = TRUE),  class = "numeric"),  ),  mainPanel(  plotOutput("plot")  )   )  )  server lt;- function(input, output, session){    plotData lt;- reactive({  req(input$periods,input$matrix2) # lt;lt; this doesn't help  tryCatch(  tibble(  X = seq_len(input$periods),  Y = interpol(input$periods,input$matrix2, drop = FALSE)  ),  error = function(e) NULL  )  })    output$plot lt;- renderPlot({  req(plotData())  plotData() %gt;% ggplot()     geom_line(aes(x = X, y = Y, colour = as.factor(Scenario)))    theme(legend.title=element_blank())  }) }  shinyApp(ui, server)  

введите описание изображения здесь

Ответ №1:

  1. library(dplyr) отсутствовала функция tibble была неизвестна
  2. У вашей функции interpol нет drop аргумента
  3. Объект «Сценарий» не найден

 library(ggplot2) library(shiny) library(shinyMatrix) library(dplyr)  interpol lt;- function(a, b) { # a = periods, b = matrix inputs  c lt;- rep(NA, a)  c[1] lt;- b[1]  c[a] lt;- b[2]  c lt;- approx(seq_along(c)[!is.na(c)], c[!is.na(c)], seq_along(c))$y # lt;lt; interpolates  return(c) }  ui lt;- fluidPage(    sidebarLayout(  sidebarPanel(  sliderInput('periods', 'Modeled periods (X variable):', min=1, max=10, value=10),  matrixInput("matrix1",   label = "Matrix 1:",  value = matrix(c(5), ncol = 1, dimnames = list("Base rate",NULL)),  cols = list(names = FALSE),  class = "numeric"),  matrixInput("matrix2",  label = "Matrix 2 (will link to Matrix 1):",  value = matrix(c(10,5), ncol = 2, dimnames = list(NULL,c("X","Y"))),  rows = list(extend = TRUE, delete = TRUE),  class = "numeric"),  ),  mainPanel(  plotOutput("plot")  )   )  )  server lt;- function(input, output, session){    plotData lt;- reactive({  # browser()  req(input$periods, input$matrix2) # lt;lt; this doesn't help  tryCatch(  # drop = FALSE  tibble(  X = seq_len(input$periods),  Y = interpol(input$periods,input$matrix2)  ),  error = function(e) NULL  )  })    output$plot lt;- renderPlot({  req(plotData())    # Error in is.factor: object 'Scenario' not found  # , colour = as.factor(Scenario)  plotData() %gt;% ggplot()     geom_line(aes(x = X, y = Y))    theme(legend.title=element_blank())  }) }  shinyApp(ui, server)