Длина 'x' и 'y' различается в Shiny Reactive Plot - PullRequest
0 голосов
/ 04 апреля 2020

Я новичок в Shiny. Я работаю над блестящим приложением с реактивным сюжетом. Кажется, все идет хорошо, за исключением случаев, когда я пытался изменить количество дней (t) на что-то меньшее 365. Я не уверен, что это как-то связано с фреймом данных или способом кодирования графика

Это постоянное хобби, но я застрял на этом. Обратите внимание, обновлено это после комментариев Бена, чтобы включить пользовательский интерфейс

ui <- pageWithSidebar(
  headerPanel("Simulation"),
  sidebarPanel(


    sliderInput(inputId = "cr", label = "Contact Rate", value = 10, min = 0, max = 100),
    sliderInput(inputId = "tp", label = "Tramsmission Probability", value = 0.2, min = 0, max = 1),
    sliderInput(inputId = "ipd", label = "Infectious Period", value = 5, min = 0, max = 50),
    sliderInput(inputId = "lpd", label = "Latent Period", value = 2, min = 0, max = 50),
    sliderInput(inputId = "W", label = "Susceptible Population", value = 100, min = 0, max = 10917089),
    sliderInput(inputId = "X", label = "Intial Number of Infected", value = 100, min = 0, max = 10917089),
    sliderInput(inputId = "Y", label = "Intial Number of Exposed", value = 50, min = 0, max = 10000),

  mainPanel(
    plotOutput("plot"))
)

server <- function(input, output) {
  seir_ode<-function(time,Y,par){
    S<-Y[1]
    E<-Y[2]
    I<-Y[3]
    R<-Y[4]

    beta<-par[1]
    sigma<-par[2]
    gamma<-par[3]

    dYdt<-vector(length=3)
    dYdt[1]=(-beta * S * I)
    dYdt[2]=(beta * S * I) - (sigma * E)
    dYdt[3]=(sigma * E) - (gamma * I)

    return(list(dYdt))
  }


  sol<-reactive({ 
    req(input$cr, input$tp, input$ipd,input$lpd, input$W ,input$X ,input$Y )
    beta<-input$cr * input$tp
    sigma<-1/input$lpd
    gamma<-1/input$ipd
    N <- input$W + input$X + input$Y
    init <- c(input$W/N,input$X/N,input$Y/N)
    par = c(beta,sigma,gamma)
    t = seq(0,100) #problem

    lsoda(init,t,seir_ode,par)

  }) 

  output$plot <- renderPlot({
    sols <- as.data.frame(sol())
    with(sols, {
      plot(t,sols[,2],type="l",col="blue",ylim=c(0,1),ylab="Proportion")
      lines(t,sols[,3],col="orange")
      lines(t,sols[,4],col="red")  
      lines(t,1-rowSums(sols[,2:4]),col="green")
    })
    legend(300,0.7,legend=c("S","E","I","R"),col=c("blue","orange","red","green"), lty=1,cex=0.8)

  })


}

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