2016-09-28 1 views
4

다음과 같이 shiny, plotly 및 shinyBS를 사용하여 플롯에서 plotly_click 이벤트가 발생하면 새 플롯과 함께 모달 팝업을 생성합니다. 로컬에서 실행할 때나 로컬 브라우저에서도 완벽하게 작동합니다.Shiny Plotly event_data 반짝이는 서버에서만 오류가 발생했습니다.

그러나 Shiny 서버에 배포하면이 오류가 발생하고 이것이 의미하는 바가 전혀 없습니다. 이견있는 사람?

library(shiny) 
library(plotly) 
library(shinyBS) 

df1 <- data.frame(x = 1:10, y = 1:10) 
df2 <- data.frame(x = c(rep('a', 10), rep('b', 10)), 
        y = c(rnorm(10), rnorm(10, 3, 1))) 

ui <- fluidPage(
    column(6, plotlyOutput('scatter')), 
    bsModal('boxPopUp', '', '', plotlyOutput('box')) 
) 

server <- function(input, output, session) { 
    output$scatter <- renderPlotly({ 
    plot_ly(df1, x = ~x, y = ~y, mode = 'markers', 
      type = 'scatter', source = 'scatter') 
    }) 
    observeEvent(event_data("plotly_click", source = "scatter"), { 
    toggleModal(session, "boxPopUp", toggle = "toggle") 
    }) 
    output$box <- renderPlotly({ 
    eventdata <- event_data('plotly_click', source = 'scatter') 
    validate(need(!is.null(eventdata), 
        'Hover over the scatter plot to populate this boxplot')) 
    plot_ly(df2, x = ~x, y = ~y, type = 'box') 
    }) 
} 

shinyApp(ui = ui, server = server) 

오류 메시지 (응용 프로그램에 대한 반짝 서버 로그에 표시)은 다음과 같다 :

Warning: Error in event_data: attempt to apply non-function 
Stack trace (innermost first): 
    59: event_data 
    58: observeEventExpr 
    1: runApp 

답변

2

이 반짝 0.14에서 사용할 수있는 모달 대화 상자를 사용하여 수정 된 버전입니다. RStudio, 로컬 브라우저, shinyapps에서 테스트되었고 내 로컬 서버에 오픈 소스 버전이 있습니다.

library(shiny) 
    library(plotly) 
    library(shinyBS) 

    df1 <- data.frame(x = 1:10, y = 1:10) 
    df2 <- data.frame(x = c(rep('a', 10), rep('b', 10)), 
         y = c(rnorm(10), rnorm(10, 3, 1))) 

    ui <- fluidPage(
      column(6, plotlyOutput('scatter')) 
    ) 

    server <- function(input, output, session) { 
      output$scatter <- renderPlotly({ 
        plot_ly(df1, x = x, y = y, mode = 'markers', 
          type = 'scatter', source = 'scatter') 
      }) 

      observeEvent(event_data("plotly_click", source = "scatter"), { 
        showModal(modalDialog(
          renderPlotly({ 
            plot_ly(df2, x = x, y = y, type = 'box') 
          }), 
          easyClose = TRUE 
        )) 
      }) 

    } 

    shinyApp(ui = ui, server = server) 
+0

아주 재미 있고 아주 이상한 :

는 코드입니다. 샤이니가 모달 기능을 내장하고 있다는 것을 나는 몰랐다. 잘 알고 있고 지적 해 주셔서 감사합니다. Shiny를 0.14 버전으로 업그레이드하면 원래 코드도 제대로 작동합니다. 그래서, 그것은 반짝 이는의 dev 버전에 문제가 있어야합니다. 나는 0.13.xyz를 사용하고 있었다 .... 나는 내 머리를 꽤 많이 쳤다. 그리고 당신의 대답은 도왔다. 샤이니에서 내장 된 모달을 사용하는 것이 더 깨끗해 보일지라도 내 코드는 괜찮습니다. – Gopala

+0

동일한 마커를 두 번 연속 클릭하면 모달이 다시 열리지 않습니다 (event_data가 변경되지 않았기 때문에). 나는 어떤 해결책을 찾기 위해 머리를 치고있다? – shosaco