#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:
library(dplyr)
отсутствовала функцияtibble
была неизвестна- У вашей функции
interpol
нетdrop
аргумента - Объект «Сценарий» не найден
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)