2016-09-28 137 views
4

我正在使用闪亮,情节和shinyBS如下生成一个模式弹出一个新的情节,当plotly_click事件发生在情节。当我在本地运行时,以及在本地浏览器中运行时,它都能很好地发现。闪亮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现在有一些内置的模式功能。很高兴知道并感谢您指出。事实证明,一旦我将Shiny升级到0.14版本,即使我原来的代码工作得很好。所以,它一定是一个问题,我使用0.13.xyz的闪亮的开发版本....我在这个上敲了一下我的头,你的回答很有帮助。尽管在Shiny中使用内置模式看起来更清晰,但我的代码很好。 – Gopala

+0

当连续两次点击相同标记时,模式不会重新打开(因为event_data没有更改)。我正在敲头寻找解决方法,任何想法? – shosaco