2016-11-28 1 views
0

タブでデータフレームを取り、ユーザーがフィルタリングできるようにしてから、フィルタに基づいてヒストグラムを作成します。このアプリは私のローカルマシンで実行すると素晴らしい動作します。データフレームは、反応性にする必要があるか、反応性であることが必要があるかもしれないことに、私は他の記事から理解Shiny Hostではローカルではなくエラーが発生するのはなぜですか

ERROR: object of type 'closure' is not subsettable 

:しかし、私はそれを公開すると、私は次のエラーを取得するshinyapps.ioするには?しかし、データフレームを次のように反応的に囲むと、

dat <- reactive(df) 

同じエラーが発生します。

library(shiny) 
library(DT) 
#server.R 

shinyServer(function(input, output) { 

    df <- read.csv('orioles.csv') 
    output$table <- DT::renderDataTable(DT::datatable({ 
    dat <- df 
    if (input$opp != "All") { 
     dat <- dat[dat$Opponent == input$opp,] 
    } 
    if (input$prk != "All") { 
     dat <- dat[dat$parkId == input$prk,] 
    } 
    if (input$strt != "All") { 
     dat <- dat[dat$Day.or.Night == input$strt,] 
    } 
    dat 
    })) 
    output$plot1 <- renderPlot({ 
    dat <- df 
    if (input$opp != "All") { 
     dat <- dat[dat$Opponent == input$opp,] 
    } 
    if (input$prk != "All") { 
     dat <- dat[dat$parkId == input$prk,] 
    } 
    if (input$strt != "All") { 
     dat <- dat[dat$Day.or.Night == input$strt,] 
    } 
    hist(dat$BAL_SCORE, main = "Based on Filters", xlab = "Runs", ylab = "Frequency of runs scored", breaks = 20, col = "orange") 

    }) 
}) 

UI:

library(shiny) 
library(DT) 


navbarPage(
    title = 'Navigation', 
    tabPanel('Data Table', fluidPage(
    titlePanel("Baltimore Orioles Game Results from 2010-2015"), 

    # Create a new Row in the UI for selectInputs 
    fluidRow(
    column(4, 
      selectInput("opp", 
         "Opponent:", 
         c("All", 
         unique(as.character(df$Opponent)))) 
    ), 
    column(4, 
      selectInput("prk", 
         "Ball Park:", 
         c("All", 
         unique(as.character(df$parkId)))) 
    ), 
    column(4, 
      selectInput("strt", 
         "Day or Night Game:", 
         c("All", 
         unique(as.character(df$Day.or.Night)))) 
    ) 
), 
    # Create a new row for the table. 
    fluidRow(
    DT::dataTableOutput("table") 
) 
)), 
    tabPanel('Runs', fluidPage(
    titlePanel("Runs Scored in filtered games"), 
    fluidRow(
      column(6, 
      plotOutput("plot1", width = 800, height = 600) 
    ) 
    ) 
)) 
) 
+1

通常、クロージャーエラーは、dfというdata.frameの代わりにdf-functionを使用しようとしたときに発生します。私の推測では、dfを正しくロードしていることを確認することです。ロードした後にprint(df)のようなものを呼び出すことでこれを試すことができます。それはanythin有用な戻りますか? – David

+0

データセットを自分の環境にロードしたため、ローカルで実行されていることに気付きました。データセットを環境にロードせずにアプリケーションを実行すると、動作しません。私は光沢のあるアプリで実行するためにcsvファイルを読み込む方法が不明だと思います。 –

答えて

0

あなたのサブセット条件をreactiveを使用して組み合わせるより簡潔なコードを取得します:

ファイルはここにgithub

かに位置しています

shinyServer(function(input, output) { 
    df <- read.csv('orioles.csv') 
    dat <- reactive(
    df[(input$opp == "All" | df$Opponent == input$opp) & 
     (input$prk != "All" | df$parkId == input$prk) & 
     (input$strt != "All"| df$Day.or.Night == input$strt),]) 

    output$table <- DT::renderDataTable(DT::datatable(dat())) 
    output$plot1 <- renderPlot({ 
    hist(dat()$BAL_SCORE, main = "Based on Filters", xlab = "Runs", 
     ylab = "Frequency of runs scored", breaks = 20, col = "orange") 
    }) 
}) 
+0

私はこれを試してみましたが、 "sat"内の "dat"呼び出しを "sat"に更新しようとしました。どちらもうまくいきませんでした。 –

+0

申し訳ありませんが、 'sat'に' dat'を書きました – HubertL

0

私は自分のアプリケーションを動作させることができました。データフレームが設定した方法でロードされていないため、エラーが発生していました。ソリューションは上記のgithubのリンクに掲載されています。

関連する問題