2014-09-13 2 views
1

반응 형 SelectInput이 필요한 Shinyapp를 테스트 중이며 사용자가 전송을 선택하고 State 필드를 새로 고침해야합니다. 선택한 전송이있는 상태 만 나타납니다. Transport, International_Long (8 States), International_Short (2 States), National_Short (9 States), National_Long (All 23 States)의 4 가지 종류가 있습니다."observe"가 포함 된 대화 형 메뉴

내 코드는 DataTable에서 작동하지만 플롯에서는 작동하지 않습니다!

"Plot"탭을 선택하면 메뉴의 반응이 멈추고 모든 전송에 대해 모든 상태가 나타납니다.

미리 감사드립니다.

내 애플 : https://luisotavio.shinyapps.io/rcharts2/

내 데이터가 여기에 있습니다 : https://drive.google.com/file/d/0B1jMuJ4_u7e-elB4QV9WRkRKdEU/edit?usp=sharing

데이터를 읽는

mydata<-read.delim("mydata.txt",sep="\t",dec=",",header=TRUE) 

ui.R

require(rCharts) 
options(RCHART_LIB = 'polycharts') 

shinyUI(
    navbarPage("TEST", 

         tabPanel("Transport Survey", 
           pageWithSidebar(
            headerPanel('Transport Survey'), 
            sidebarPanel(

            selectInput('Transport2', 'Select a Transport:',levels(droplevels(mydata$Transport)),selected=levels(droplevels(mydata$Transport))[1] 
            ), 
            selectInput('State2', 'Select a State:', levels(droplevels(mydata$State)),selected=levels(droplevels(mydata$State))[1] 
            ), 

            width = 3 

           ), 
            mainPanel(
            tabsetPanel(tabPanel("Table",dataTableOutput("mytable")), 
            tabPanel("Plot",showOutput('myplot', 'polycharts'))) 
           ) 
           )   
         ))  

) 

server.R

당신의 관찰자가 이미 input$Transport2에 필요한 의존성을 소개하고있다

selectedData <- reactive({ 
    TRANSPORT = isolate(input$Transport2) 
    STATE = input$State2 
    mydata[mydata$Transport %in% TRANSPORT & mydata$State %in% STATE,] 

    }) 

:3210

library(shiny) 
library(rjson) 
library(rCharts) 



options(RCHART_WIDTH = 800) 

shinyServer(function(input, output,session) { 

    observe({ 
    TRANSPORT = input$Transport2 
    updateSelectInput(session, "State2", choices = levels(droplevels(mydata$State[mydata$Transport %in% TRANSPORT])),selected = levels(droplevels(mydata$State[mydata$Transport %in% TRANSPORT]))[1] 
    ) 
    }) 



    selectedData <- reactive({ 
    TRANSPORT = input$Transport2 
    STATE = input$State2 
    mydata[mydata$Transport %in% TRANSPORT & mydata$State %in% STATE,] 

    }) 

    output$mytable = renderDataTable({ 
    selectedData() 
    }) 

    output$myplot<- renderChart2({ 
    mydata2<-selectedData() 

    p1<-rPlot(Value ~ Company, color = 'Company', data = mydata2, type = 'bar') 
    p1$guides(
     color = list(
     numticks = length(levels(droplevels(mydata2$Company))) 
    ), 
     y = list(
     min = 0, 
     max = 10 
    ) 
    ) 
    return(p1) 
    }) 
}) 
+0

(여러 패키지를 설치하는 언급하지 않기 위하여). 먼저 코드에서 섹션을 제거하고 (대신 작은 데이터 세트를 시뮬레이트하고 그래프를 간단히 바꾸기) 문제가 남아 있는지 확인할 수 있습니다. 그렇다면 여기 호기심 많은 문제가있는 것 같습니다 –

답변

1
input$Transport2를 분리하여 반응을 변경

observe({ 
    TRANSPORT = input$Transport2 
    updateSelectInput(session, "State2", choices = levels(droplevels(mydata$State[mydata$Transport %in% TRANSPORT])),selected = levels(droplevels(mydata$State[mydata$Transport %in% TRANSPORT]))[1] 
    ) 
    }) 

문제는 reactive가 느리게 평가하고 observer 간절히입니다 평가.

더 나은 솔루션이 데이터를 사용할 수있는에 확인하는 것입니다 : 당신이 다운로드가 필요하지 않은 재현 예를 만든 경우 정말 도움이 될

selectedData <- reactive({ 
    TRANSPORT = input$Transport2 
    STATE = input$State2 
    out <- mydata[mydata$Transport %in% TRANSPORT & mydata$State %in% STATE,] 
    validate(
     need(nrow(out) > 0, 'no data') 
    ) 
    out 
    }) 
+0

고맙습니다. 한 달 넘게이 문제를 해결하려고 노력했습니다! –

+0

Bahia가 첫 번째 선택으로 선택되고 변경 사항이 전파되지 않으므로 National : Bahia에서 International로 변경할 때와 같은 약간의 문제가 여전히 있습니다. – jdharrison

+0

사용 가능한 데이터의 유효성을 검사하는 더 나은 솔루션으로 업데이트했습니다. – jdharrison