2017-03-21 16 views
1

data react()で作成した変数を使用しようとしています。以下は私のコードです。オブジェクトのDATA2 'が見つかりません:それは私がエラーを受け付けており、他のために1つのチャートを作成することができるだけだ R:Shinyデータの下で変数を使用するReactive

library(shiny) 
library(datasets) 
library(ggplot2) 
cars=mtcars 

shinyServer(function(input, output) { 

data_rec =reactive({  
d=cars[cars$cyl==input$var,] 
d1=d[d$am==0,] 
list(d=d,d1=d1) 
}) 

output$Plot1 <- renderPlot({ 
data2=data_rec() 
ggplot(data2$d,aes(x=gear,y=wt))+geom_boxplot() }) 

output$Plot2 <- renderPlot({ 
ggplot(data2$d1,aes(x=gear,y=wt))+geom_boxplot() }) 
}) 

UI

library(shiny) 
shinyUI(fluidPage(
titlePanel("Old Data"), 

# Sidebar with a slider input for number of bins 
sidebarLayout(
sidebarPanel(
    selectInput("var", 
       label = "Choose a Group to Display", 
       choices = c("4", "6","8"), 
       selected = "4") 
), 

# Show a plot of the generated distribution 
mainPanel(
    plotOutput("Plot1"), 
    plotOutput("Plot2") 
) 
) 
)) 

サーバに使用する準備ができています。データの中の変数を定義し、それをプロットするのに役立ちます。

+0

「データ」の名前を付けるために他の言葉が見つかった場合に役立ちますか?それはむしろ混乱します。 –

+0

リアクションはコンテキストを共有しません。 'Plot1' renderPlotブロックで定義した' data2'は 'Plot2'ブロックで定義されていません。 –

+0

私はその混乱を取り除きました。あなたの2番目のコメントで助けてください –

答えて

2

ここでは変数のスコープの範囲についていくつかの混乱があると思います。 data2output$plot2コードブロックで定義されておらず、output$plot1コードブロックで定義されたものと定義を共有しません。

data_recにはreactiveValuesを使用していましたが、これがあなたの望むことと思います。

library(shiny) 
library(datasets) 
library(ggplot2) 

u <- shinyUI(fluidPage(
    titlePanel("Old Data"), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(
     selectInput("var", 
        label = "Choose a Group to Display", 
        choices = c("4", "6","8"), 
        selected = "4") 
    ), 

    # Show a plot of the generated distribution 
    mainPanel(
     plotOutput("Plot1"), 
     plotOutput("Plot2") 
    ) 
) 
)) 


cars=mtcars 

s <- shinyServer(function(input, output) { 

    data_rec =reactive({  
    req(input$var) 
    d=cars[cars$cyl==input$var,] 
    d1=d[d$am==0,] 
    list(d=d,d1=d1) 
    }) 

    output$Plot1 <- renderPlot({ 
    data2=data_rec() 
    ggplot(data2$d,aes(x=gear,y=wt))+geom_boxplot() 
    }) 

    output$Plot2 <- renderPlot({ 
    data2=data_rec() 
    ggplot(data2$d1,aes(x=gear,y=wt))+geom_boxplot() 
    }) 
}) 
shinyApp(u,s) 

得:

enter image description here

+0

クイッククエストを1つ、リストに1または変数をリストし、その変数に依存することができますか?それは働くでしょうか? (例:a = 2^2、b = a^2リスト(b = b))の例では、プロットのためだけにbを使用します。 –

2

あなたはoutput$Plot2でデータを作成することを忘れていました。

それは次のようになります。

output$Plot2 <- renderPlot({ 
       data2 <- data1() 
       data2$d1 %>% 
        ggplot + 
        aes(x = gear,y = wt) + 
        geom_boxplot() 
}) 

ます。またrenderPlot機能に直接反応性部分を入れて、ggplotで動作するようにリストを避けることができ...

サーバ部分は次のようになりますこれは:

server <- shinyServer(function(input, output) { 
      output$Plot1 <- renderPlot({ 

      data %>% 
       filter(cyl == input$var) %>% 
       ggplot + 
       aes(x = gear, y = wt) + 
       geom_boxplot() 
      }) 

     output$Plot2 <- renderPlot({ 

      data %>% 
       filter(cyl == input$var & am == 0) %>% 
       ggplot + 
       aes(x = gear,y = wt) + 
       geom_boxplot() 
      }) 
}) 
+0

良い解決策。私は 'reactiveValues'はより柔軟な構造をもたらすと思います。 –

関連する問題