2017-08-25 4 views
0

Je souhaite tracer un graphique dans flexdashboard sur la base d'un sous-ensemble de données. Voici un code:Tracer un graphique simple sur la base d'un sous-ensemble de données dans flexdashboard

--- 
title: "Test" 
output: 
    flexdashboard::flex_dashboard: 
    orientation: columns 
    social: menu 
    source_code: embed 
    runtime: shiny 
--- 

```{r global, include=FALSE} 
library(flexdashboard) 
library(ggplot2) 
library(shiny) 

A = c("A1", "A1", "A1", "A2", "A2", "A1", "A2", "A2") 
B = c("B1", "B2", "B1", "B2", "B1", "B2", "B1", "B2") 
x = c(1, 2, 3, 4, 5, 3, 3, 4) 
y = c(5, 4, 3, 2, 1, 5, 3, 4) 
df = data.frame(A, B, x, y, stringsAsFactors = FALSE) 
``` 

Column 
------------------------------- 

### Select options 
```{r} 
selectInput("selectInput1", "Select A:", 
      choices = unique(df$A)) 

selectInput("selectInput2", "Select B:", 
      choices = unique(df$B)) 
``` 

```{r} 
# Create a subset data frame 
selectedData = reactive({ 
    df[df$A == [email protected] & df$B == [email protected], c(3,4)] 
    }) 
``` 

Column 
------------------------------- 

###Chart 

```{r} 
renderPlot({ 
    ggplot(selectedData(), aes(x = x, y = y)) + 
     geom_line() + ggtitle(paste0("Selected ", [email protected], " and ", [email protected])) 
}) 
``` 

Mais je reçois une erreur: essayant d'obtenir la fente « selectInput1 » d'un objet (classe « reactivevalues ​​») qui n'est pas un objet S4

Toutes les idées ce qui a été fait d'une mauvaise manière? Et comment faire fonctionner le code?

Répondre

0

Voici la solution:

--- 
title: "Test" 
output: 
    flexdashboard::flex_dashboard: 
    orientation: columns 
    social: menu 
    source_code: embed 
    runtime: shiny 
--- 

```{r global, include=FALSE} 
library(flexdashboard) 
library(ggplot2) 
library(shiny) 

A = c("A1", "A1", "A1", "A2", "A2", "A1", "A2", "A2") 
B = c("B1", "B2", "B1", "B2", "B1", "B2", "B1", "B2") 
x = c(1, 2, 3, 4, 5, 3, 3, 4) 
y = c(5, 4, 3, 2, 1, 5, 3, 4) 
df = data.frame(A, B, x, y, stringsAsFactors = FALSE) 
``` 

Column 
------------------------------- 

### Select options 
```{r} 
selectInput("selectInput1", "Select A:", 
      choices = unique(df$A)) 

selectInput("selectInput2", "Select B:", 
      choices = unique(df$B)) 
``` 

```{r} 
# Create a subset data frame 
selectedData = reactive({ 
    df[df$A == input$selectInput1 && df$B == input$selectInput2, c(3,4)] 
    }) 
``` 

Column 
------------------------------- 

###Chart 

```{r} 
renderPlot({ 
    ggplot(selectedData(), aes(x = x, y = y)) + 
     geom_line() + ggtitle(paste0("Selected ", input$selectInput1, " and ", input$selectInput2)) 
}) 
``` 

Le seul problème que vous avez fait est d'utiliser @ signe au lieu de $, comme par exemple ici: [email protected]. Après avoir édité votre code -> changer les signes à $, flexdashboard a fonctionné parfaitement.

+0

Merci beaucoup! Erreur si bête ... Cependant, je préférerais toujours utiliser "&" au lieu de "&&" au stade de sous-ensemble. – Sergiy