2017-04-03 1 views
0

Je voudrais afficher un dygraph brillant de base dans mon Rmarkdown qui permute entre les réseaux. Voici un échantillon des données:Filtrage des objets xts dans les applications Shiny

> head(df) 
      nightTrips dayTrips network 
2014-05-03   0  16  1 
2014-05-04   0  5  1 
2014-05-05   0  8  1 
2014-05-06   0  3  1 
2014-05-07   0  0  1 
2014-05-08   0  3  1 
> nrow(df) 
[1] 2239 

Si je sous-ensemble de la trame de données dfnetwork=1, je peux rendre avec succès un dygraph pour un seul réseau avec:

> head(test) 
      nightTrips dayTrips 
2014-05-03   0  16 
2014-05-04   0  5 
2014-05-05   0  8 
2014-05-06   0  3 
2014-05-07   0  0 
2014-05-08   0  3 

dygraph(test, main = "Network1") %>% 
    dySeries("nightTrips", label = "Night Trips") %>% 
    dySeries("dayTrips", label = "dayTrips") %>% 
    dyOptions(stackedGraph = FALSE) %>% 
    dyRangeSelector(height = 20) 

Mais quand je lie mes données dans un dataframe, ajouter une colonne supplémentaire netowrk qui spécifie le réseau, le convertir en un objet xts, et essayer de démarrer un serveur brillant - J'obtiens une erreur qu'un filtre ne peut pas être appliqué à l'objet xts:

enter image description here

Existe-t-il une solution de contournement connue pour ce problème? Voici le code de la ligne app Shiny:

```{r, echo = FALSE} 
shinyApp(

    ui = fluidPage(
    titlePanel("Sample Timeseries"), 

    sidebarLayout(
    sidebarPanel(
     uiOutput("networknames") 
    ), 
    mainPanel(
     dygraphOutput("networksgraph")) 
) 
), 

    server = function(input, output) { 

    data <- df 
    data <- as_xts(data, date_col = day) 


    output$networksgraph <- renderDygraph({ 
     if (is.null(input$networkname)) return (NULL) 
     filtered <- filter(data, 
          network == intput$networkname) %>% 
     dygraph() 

    }) 

    output$networknames <- renderUI({ 
    selectInput("networkname", "Select your Network", 
       choices = c(1,2,3)) 
    }) 
} 
) 

``` 
+0

Pourquoi convertir l'intégralité de la trame de données en xts? Il semble que 'data $ network' devrait continuer à être numérique. –

Répondre

0

Le problème de l'application dplyr fonctions à xts objets a été identifié mais n'a peut-être pas été résolu. Si votre fonction dygraph() n'a rien à voir avec l'index horaire, vous pouvez simplement utiliser le coredata() comme dans filtered <- filter(coredata(data), network == intput$networkname). Dans l'autre cas, vous devez convertir entre xts et data.frame.