2013-07-16 7 views
8

でグローバルオブジェクトを設定しますのは、私はピカピカで、次のserver.Rファイルを持っているとしましょう:はシャイニー

shinyServer(function(input, output) { 
    output$plot <- renderPlot({ 
    data2 <- data[data$x == input$z, ] # subsetting large dataframe 
    plot(data2$x, data2$y) 
    }) 
    output$table <- renderTable({ 
    data2 <- data[data$x == input$z, ] # same subset. Oh, boy... 
    summary(data2$x) 
    }) 
}) 

私は何をすることができ、すべての描画コール内でdata2 <- data[data$x == input$z, ]を実行する必要がないようにするためには?私は、次の操作を行う場合、私は取得エラー「型のオブジェクトを 『閉鎖』はsubsettableではありません」:

shinyServer(function(input, output) { 
    data2 <- reactive(data[data$x == input$z, ]) 
    output$plot <- renderPlot({ 
    plot(data2$x, data2$y) 
    }) 
    output$table <- renderTable({ 
    data2 <- data[data$x == input$z, ] 
    summary(data2$x) 
    }) 
}) 

私が間違って何をしたのですか?

答えて

17

data2は、探しているサブセットを返す関数です。あなたはまだいないので、もしあなたがさまざまな列

## data should be defined somewhere up here or in global.R 

shinyServer(function(input, output) { 
    data2 <- reactive(data[data$x == input$z, ]) 

    output$plot <- renderPlot({ 
    newData <- data2() 
    plot(newData$x, newData$y) 
    }) 

    output$table <- renderTable({ 
    newData <- data2() 
    summary(newData$x) 
    }) 
}) 

、あなたはプロットすることができます/要約data2を呼び出し、いくつかの変数に出力を保存する必要があり、私はhttp://rstudio.github.io/shiny/tutorial/#welcome通読をお勧めします。反応性に関するページは、この問題をかなりうまく解決しています。

+0

助けてくれてありがとう、私は光沢がとても新しいです(それは私の2日目の作業です)。あなたのソリューションは動作しますが、私のサブセットルーチンの中に 'ifelse()'を挿入していないときは、実際にはこのようになります: 'data2 < - reactive(ifelse(input $ z == ''、data、data [data $ x ==入力$ z、])) '。これを行うと、次のエラーが表示されます。 'plot.windowのエラー(xlim、ylim、log = log、...):有限のxlim値が必要です。 –

+0

ところで、私はRStudioチュートリアル(少なくとも基本的な部分)を終えて、それを深く掘り下げ、パッケージドキュメントを時間をかけて掘り下げようと考えています。 –

+2

@wleoncioでは、空の 'data.frame'をプロットするため、エラーはほぼ確実です。ですから、 'data2'が期待しているものを返すかどうか調べるためにデバッグを行うことをお勧めします。 'if(nrow(newData)== 0)return()'のようなプロット出力関数でチェックを追加して、データがない場合にプロットしようとしないようにすることもできます。私は光沢のあるアプリケーションに取り組んでいますが、後でコメントアウトするためにテーブルを追加するのが好きです。異なるデバッグ値(現在のデータの行数、特定の変数のレベルなど)だけを出力します。 –

関連する問題