>

shinydashboard에서 동적 플롯 기반 selectorInput을 생성하고 싶지만 플롯을 생성하려고하면 오류가 발생합니다 :

First argument, data , 데이터 프레임 또는 공유 데이터 여야합니다.

내 코드의 일부는 데이터를 부분 집합 화하고 플롯 입력으로 사용하려고 할 때 서버 부분입니다.

data_sub = reactive({
data_sub_temp = df[df$market == input$market_selector,]
return(data_sub_temp)
  })

  output$market_plot <- renderPlotly({
  plot_ly(
  data = data_sub,
  x = ~ created,
  y = ~ pax,
  group_by = ~ type,
  color = ~ type,
  type = "scatter",
  mode = "lines+markers",
  hoverinfo = 'text',
  text = ~ paste('Year:', created,
                 '</br> </br> Clients: ', pax)
  )  
  })

UI 및 서버 코드 부분 전에 데이터 집합이로드되고 사전 처리됩니다. 이 코드가 작동하기 전에 UI 및 서버 부분 전에 하위 집합 데이터 세트를 사용하면 data_sub 부분이 추가되면 작동하지 않습니다. 어떠한 제안? 감사합니다


  • 답변 # 1

    문제는 dataframe  부분은 reactive 입니다 플롯은 아닙니다. 당신은 eventHandler 를 사용해보십시오  대신에. 이 경우 actionButton 를 추가해야합니다  UI에서 (아마도 sidebarPanel 에서) ) 및 eventHandler 추가   reactive 없이 서버에서  부품. 아래 코드입니다.

    ui

    actionButton(
          inputId = "submit_loc",
          label = "Submit")
    
    

    서버

    observeEvent(
        eventExpr = input[["submit_loc"]],
        handlerExpr = {
    data_sub <- df[df$market == input$market_selector,]
    output$market_plot <- renderPlotly({
      plot_ly(
      data = data_sub,
      x = ~ created,
      y = ~ pax,
      group_by = ~ type,
      color = ~ type,
      type = "scatter",
      mode = "lines+markers",
      hoverinfo = 'text',
      text = ~ paste('Year:', created,
                     '</br> </br> Clients: ', pax)
      )  
      })
    })
    
    

    이것이 효과가 있는지 알려주십시오.

  • 답변 # 2

    반응은 반응 중에 재실행되는 것을 제한하는 데 사용됩니다. 와이즈 비즈  식이 reactive({}) 와 유사한 반응을 일으킴  표현.

    즉, input$... 를 당기는 예제에서   data_sub 에서   renderPlotly() 일 때 expression이 renderPlotly를 실행하지 못하게합니다.  또는 df$market  그 input$market_selector 를 반짝이지 않으면 변경  위에서 한 것처럼 반응해야합니다. data_sub 를 분리하는 데 약간의 포인트가 있습니다  당신의 data_sub 에서  다른 renderPlotly() 가 아닌 한 표현  식이 input$... 의 원인이었습니다  다시 그리기 위해. 더 잘 이해하려면 반응성 튜토리얼을 참조하십시오.

    당신이 renderPlotly() 를 유지하려는 경우

     반응 형은 플롯의 대괄호 표기법을 사용하여 호출해야합니다. 즉, data_sub

    data = data_sub() 를 사용할 때 R의 대입 연산자를 파악하는 것이 유용 할 수도 있습니다.  연산자가 잘못되었습니다. 코드는 계속 실행되지만 = 를 사용하는 것이 좋습니다   <- 를위한 연산자 . R에서 대입 연산자의 차이점을 참조하십시오.

    최종 코드는 다음과 같아야합니다.

    서버

    data_sub
    
    

  • 답변 # 3

    data_sub <- reactive({df[df$market == input$market_selector,]}) output$market_plot <- renderPlotly({ plot_ly( data = data_sub(), x = ~ created, y = ~ pax, group_by = ~ type, color = ~ type, type = "scatter", mode = "lines+markers", hoverinfo = 'text', text = ~ paste('Year:', created, '</br> </br> Clients: ', pax) ) }) 를 사용해보십시오   data = data_sub() 대신

    data = data_sub
    
    
    output$market_plot <- renderPlotly({ plot_ly( data = data_sub(), x = ~ created, y = ~ pax, group_by = ~ type, color = ~ type, type = "scatter", mode = "lines+markers", hoverinfo = 'text', text = ~ paste('Year:', created, '</br> </br> Clients: ', pax) ) })

관련 자료

  • 이전 SQL Server 2016 데이터 형식 변환 오류
  • 다음 mongodb - 스티치 기능 업데이트 하나의 오류"업데이트가 허용되지 않습니다"