2017-06-16 14 views
1

Shinyの反応性に問題があります。私のUIにおいて、IはR selectInput反応性の問題

library(tidyverse) 
library(shiny) 
library(forcats) 

ui <- fluidPage(

    titlePanel(h1("Percent Cover")), 

    selectInput("selectInput", "Select Site", choices = c("A", "B", "C", "D")), 


plotOutput("coverTypeBarChart", height = "600px") 

) 

これらは私がサーバーの上部で読み込んだデータフレームA、B、C、Dに対応しています。私のサーバーで

、私が持っている:

colors <- c("red", "blue", "green", "purple") 



reactive({ 

    if (input$selectInput == "A") 
    {data <- A} 
    else if (input$selectInput == "B") 
    {data <- B} 
    else if (input$selectInput == "C") 
    {data <- C} 
    else if (input$selectInput == "D") 
    {data <- D} 

}) 


    data() <- na.omit(as.data.frame(data()$cover_group)) 
    names(data()) <- c("tmp") 

    cover_group_factor <- as.factor(data()$tmp) 

cover_group_factor <- fct_recode(cover_group_factor, OTHER = "E", OTHER = "F", OTHER = "G", OTHER = "H", OTHER = "I", OTHER = "J", OTHER = "K") 

    bar <- ggplot(data = data()) + 
      geom_bar(mapping = aes(x = cover_group_factor, y = ..count../sum(..count..)), fill = colors) + xlab("Cover Group") + ylab("Percent") 




observe({ 
    output$coverTypeBarChart <- renderPlot(bar) 
     }) 

} 

私は手動での値のいずれかにデータを割り当て、手動でコードを実行したとき、私はプロットを生成することができます知っているので、私はそれが反応性の問題を知っています。

ありがとうございました。

+0

私はデータフレームの例がないのであまり言い表せません。しかし、私が見ていることから、あなたの反応機能に何かをつけていることはわかりません。あなたは次のことを言う必要がありますか? 'データ< - 反応({ (入力の$ selectInput == "A") {データ<場合 - そうA} (入力が$ selectInput == "B" であれば) {データ< - B} (入力$ selectInput == "C") {データ< - C} else if(入力$ selectInput == "D") {データ< - D} }) ' – p0bs

答えて

1

私は最近、同様の問題を解決しなければならなかった:

はここで働くかもしれない何か。次の例では、私はいくつかのデータを作っ:

library(shiny) 
library(ggplot2) 

set.seed(1) 
A <- sample_frac(mtcars,0.2) %>% select(cyl) 
B <- sample_frac(mtcars,0.2) %>% select(cyl) 
C <- sample_frac(mtcars,0.2) %>% select(cyl) 
D <- sample_frac(mtcars,0.2) %>% select(cyl) 

ここinputoutputを持っているあなたのuiの最も単純なバージョン、です:

ui <- fluidPage(
      selectInput("choice", "Select Site", choices = c("A", "B", "C", "D")), 
      plotOutput("barchart", height = "600px") 
    ) 

は、私が使用するトリックは、データを取得することです。あなたが望むフレームnameget。例えば:

serverの文脈では
get("A") 

       cyl 
Merc 230   4 
Merc 450SE   8 
Fiat 128   4 
Porsche 914-2  4 
Valiant   6 
Pontiac Firebird 8 

server <- function(input, output) { 
       output$barchart <- renderPlot(ggplot(data = get(input$choice), aes(cyl)) + geom_bar()) 
      } 

あなたは私がgetを使用してinput$choiceによって与えられたデータを取得しています、上記の私ggplot文の中で見ることができるように。

0

私はp0bsに同意します - reactive式の結果を変数に割り当てる必要があります。

また、ネストされたif...elseステートメントには特定の構文があります。 elseは、ifステートメントの閉じ括弧と同じ行になければなりません。

data <- reactive({ 
    if(input$selectInput == "A"){ 
     A 
    } else if(input$selectInput == "B") { 
     B 
    } else if(input$selectInput == "C") { 
     C 
    } else if(input$selectInput == "D") { 
     D 
    } 
}) 
関連する問題