1

アプリで非常に奇妙な問題が発生しています。UI は 5 つのタブで構成されています。最初の 2 つには、ユーザーが編集でき、計算の入力として使用される RHandsontables が含まれています。最後の 3 つには、[実行] ボタンをクリックした後に生成される DataTable 出力が含まれています。

アプリを開いて、どのタブもクリックせずに (つまり、既定のタブのままにして) [実行] をクリックすると、次のメッセージが表示されてアプリがクラッシュします。

Listening on http://127.0.0.1:5554
Warning: Error in do.call: second argument must be a list
Stack trace (innermost first):
    67: do.call
    66: hot_to_r
    65: observeEventHandler [path/to/serverfile]

ただし、アプリを開いて他のタブのいずれかをクリックし、最初のタブに戻って [実行] をクリックすると、アプリは問題なく実行されます。別のタブをクリックしてから元のタブに戻っても、入力などに関して実際には何も変更されていないため、これは意味がありません。

do.call("rbind", list)サーバー ファイルにはいくつかの機能があり、問題の原因となっている機能を特定するのは非常に困難です。それらのいずれにおいても、リスト以外のものが 2 番目の引数として渡されていることは明らかではありません。

私のサーバーとuiファイルは以下です。計算の大部分を省略しました。ここで問題を完全に再現できないことをお詫びします。誰かが気付くかもしれないアプリの構造に明らかなエラーがあることを願っています. どんな提案も歓迎

サーバー.R

library(tidyverse)
library(shiny)
library(DT)
library(rhandsontable)

# Server file for World Cup Outright App
shinyServer(function(input,output,session){
  values <- reactiveValues()


  output$Results <- renderRHandsontable({
    if (input$currentStage=="Group Stage"){
      rhandsontable(read.csv("path/to/file", colClasses = c('character','character','numeric','numeric')))
    }
    else if (input$currentStage=="Last 16"){
      rhandsontable(read.csv("path/to/file", colClasses = c('character','character','numeric','numeric')))
    }
    else{ 
      rhandsontable(read.csv("path/to/file", colClasses = c('character','character','numeric','numeric')))
    }
  })


  observeEvent(input$runButton,{
    values$results_table <- hot_to_r(input$Results)
  })



  output$Ratings <- renderRHandsontable({
    rhandsontable(read.csv("path/to/file", colClasses=c('character','numeric','numeric','numeric','numeric')))

  })


  observeEvent(input$runButton,{
    values$ratings_table <- hot_to_r(input$Ratings)
  })


  price_markets <- eventReactive(input$runButton, {
    withProgress(message="Loading...",{

      t1 <- Sys.time()

      # Choose the number of simulations required
      sims <- as.numeric(input$simsInput)
      if(is.null(sims)){return()}

      Games <- read.csv("path/to/file",header = TRUE,colClasses = c('character','character','numeric','numeric'))
      ratingvratingfile <- read.csv("path/to/file", colClasses=c('numeric','numeric'),header=F,col.names=c('diff','prob1','prob2'))
      Last16Games <- read.csv("path/to/file",header = TRUE,colClasses = c('character','character','character','numeric','numeric'))
      QuarterFinalGames <- read.csv("path/to/file",header = TRUE,colClasses = c('character','character','character','numeric','numeric'))
      groupLookup <- read.csv("path/to/file", colClasses = c('character','character'))
      continentLookup <- read.csv("path/to/file", colClasses = c('character','character'))

      liveresults <- values$results_table
      liveLast16results <- values$results_table
      liveQFresults <- values$results_table
      ratingsfile <- values$ratings_table


      CurrentStage <- input$currentStage


      if(CurrentStage=="Group Stage"){

        # CALCULATIONS
      }



      if (CurrentStage=="Last 16"){

        # CALCULATIONS
     }

      if(CurrentStage=="Quarter Finals"){

        # CALCULATIONS

      }

      t2 <- as.numeric(difftime(Sys.time(), t1),units="mins")
      t2 <- round(t2,2)
      t2 <- paste0(as.character(t2)," minutes to run sims")


      # Put outputs in a list to be accessed by renderDataTable functions later
      list(groupApositions,groupAforecasts,groupAtricasts,
           groupBpositions,groupBforecasts,groupBtricasts,
           groupCpositions,groupCforecasts,groupCtricasts,
           groupDpositions,groupDforecasts,groupDtricasts,
           groupEpositions,groupEforecasts,groupEtricasts,
           groupFpositions,groupFforecasts,groupFtricasts,
           groupGpositions,groupGforecasts,groupGtricasts,
           groupHpositions,groupHforecasts,groupHtricasts,
           to_reach,stage_of_elim,name_the_finalists,t2,
           winners1,winners2)
    })
  })



  output$groupStagePositionTable <- DT::renderDataTable(DT::datatable({
    if(input$groupMarkets=="Group A"){
      table <- price_markets()[[1]]
    }
    if(input$groupMarkets=="Group B"){
      table <- price_markets()[[4]]
    }
    if(input$groupMarkets=="Group C"){
      table <- price_markets()[[7]]
    }
    if(input$groupMarkets=="Group D"){
      table <- price_markets()[[10]]
    }
    if(input$groupMarkets=="Group E"){
      table <- price_markets()[[13]]
    }
    if(input$groupMarkets=="Group F"){
      table <- price_markets()[[16]]
    }
    if(input$groupMarkets=="Group G"){
      table <- price_markets()[[19]]
    }
    if(input$groupMarkets=="Group H"){
      table <- price_markets()[[22]]
    }
    return(table)}),rownames=FALSE,options=list(pageLength=100,info=FALSE,paging=FALSE,searching=FALSE))


  output$groupStageForecastTable <- DT::renderDataTable(DT::datatable({
    if(input$groupMarkets=="Group A"){
      table <- price_markets()[[2]]
    }
    if(input$groupMarkets=="Group B"){
      table <- price_markets()[[5]]
    }
    if(input$groupMarkets=="Group C"){
      table <- price_markets()[[8]]
    }
    if(input$groupMarkets=="Group D"){
      table <- price_markets()[[11]]
    }
    if(input$groupMarkets=="Group E"){
      table <- price_markets()[[14]]
    }
    if(input$groupMarkets=="Group F"){
      table <- price_markets()[[17]]
    }
    if(input$groupMarkets=="Group G"){
      table <- price_markets()[[20]]
    }
    if(input$groupMarkets=="Group H"){
      table <- price_markets()[[23]]
    }
    return(table)}),rownames=FALSE,options=list(pageLength=100,info=FALSE,paging=FALSE,searching=FALSE))



  output$groupStageTricastTable <- DT::renderDataTable(DT::datatable({
    if(input$groupMarkets=="Group A"){
      table <- price_markets()[[3]]
    }
    if(input$groupMarkets=="Group B"){
      table <- price_markets()[[6]]
    }
    if(input$groupMarkets=="Group C"){
      table <- price_markets()[[9]]
    }
    if(input$groupMarkets=="Group D"){
      table <- price_markets()[[12]]
    }
    if(input$groupMarkets=="Group E"){
      table <- price_markets()[[15]]
    }
    if(input$groupMarkets=="Group F"){
      table <- price_markets()[[18]]
    }
    if(input$groupMarkets=="Group G"){
      table <- price_markets()[[21]]
    }
    if(input$groupMarkets=="Group H"){
      table <- price_markets()[[24]]
    }
    return(table)}),rownames=FALSE,options=list(pageLength=50,info=FALSE,paging=FALSE,searching=FALSE))


  output$outrightMarketTable <- DT::renderDataTable(datatable({
    if(input$outrightMarkets=="To Reach"){
      table1 <- price_markets()[[25]]
    }
    if(input$outrightMarkets=="Stage of Elimination"){
      table1 <- price_markets()[[26]]
    }
    if(input$outrightMarkets=="Name the Finalists"){
      table1 <- price_markets()[[27]]
    }
    return(table1)}),rownames=FALSE,options=list(paging=FALSE))


  output$winningGroupTable <- DT::renderDataTable(datatable({
    table <- price_markets()[[29]]
    return(table)
  }),rownames=FALSE,options=list(searching=FALSE,info=FALSE,paging=FALSE))


  output$winningContinent <- DT::renderDataTable(datatable({
    table <- price_markets()[[30]]
    return(table)
  }),rownames=FALSE,options=list(searching=FALSE,info=FALSE,paging=FALSE))



  output$timeElapsed <- renderText({price_markets()[[28]]})


})

ui.R

library(tidyverse)
library(shiny)
library(DT)
library(rhandsontable)

# User Interface for World Cup Outright App
shinyUI(fluidPage(

  titlePanel("World Cup Outright Simulator"),


  sidebarLayout(



    sidebarPanel(
      selectInput('currentStage','Choose current stage',c("Group Stage","Last 16","Quarter Finals")),
      textInput("simsInput",label="Number of Simulations",value = 10000),
      actionButton("runButton","Run"),
      h2(textOutput("timeElapsed"))
    ),

    mainPanel(
      tabsetPanel(
        tabPanel("Results",
                 rHandsontableOutput("Results")),
        tabPanel("Ratings",
                 rHandsontableOutput("Ratings")),
        tabPanel("Group Stage",
                 selectInput('groupMarkets','Choose Group',c("Group A", "Group B","Group C","Group D","Group E","Group F","Group G","Group H")),
                 h3("Group Positions"),
                 DT::dataTableOutput("groupStagePositionTable"),
                 h3("Group Forecasts"),
                 DT::dataTableOutput("groupStageForecastTable"),
                 h3("Group Tricasts"),
                 DT::dataTableOutput("groupStageTricastTable")

                 ),
        tabPanel("Outright",
                 selectInput('outrightMarkets','Choose Market',c("To Reach","Stage of Elimination","Name the Finalists")),
                 DT::dataTableOutput("outrightMarketTable")),

        tabPanel("Special",
                 h3("Winning Group"),
                 DT::dataTableOutput("winningGroupTable"),
                 h3("Winning Continent"),
                 DT::dataTableOutput("winningContinent"))

        )
      )
    )
  )
)
4

1 に答える 1