блестящая гибкая панель: эталонный объект в новой вкладке - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть flexdashboard с одним столбцом и двумя вкладками.Я хочу создать и построить dat2 в одном наборе вкладок, а затем показать данные для dat2 во втором наборе вкладок.Реальный вариант использования является более сложным, и у меня нет его настройки для запуска из глобального (возможно, мне нужно выяснить, как это сделать).

Следующее приводит к ошибке, которую dat2 не может бытьрасположен.

---
title: "test"
output: 
  flexdashboard::flex_dashboard:
    theme: bootstrap
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```

```{r global, include=FALSE}
  set.seed(1)
  dat <- data.frame(age = sample(15:99, 100, replace=TRUE),
                    y = runif(100))
```

Sidebar {.sidebar}
=====================================

```{r}
# age
  sliderInput("agerange", label = "Age", 
              min = 15, 
              max = 99, 
              value = c(15, 99),
              step=10)
```

Page 1
=====================================

Column {.tabset}
-----------------------------------------------------------------------

### Plot

```{r}
renderPlot({
  dat2 <- 
  dat %>%
    filter(age >= input$agerange[1] & age <= input$agerange[2]) %>%
    mutate(y2 = y*2)

  ggplot(dat2, aes(y2)) +
    geom_histogram()
})
```


Column {.tabset}
-----------------------------------------------------------------------

### Table

```{r}
  DT::renderDataTable({
    DT::datatable(dat2, options = list(bPaginate = FALSE))
  })
```

1 Ответ

0 голосов
/ 07 сентября 2018

Кажется, что это работает (на основе этого SO ответа ). Упрощенные исправления существуют, или это основной подход к созданию реактивов, назначить object внутри реактива, а затем переназначить этот объект в функции render (например, object <- object())?

---
title: "test"
output: 
  flexdashboard::flex_dashboard:
    theme: bootstrap
runtime: shiny
---

```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```

```{r global, include=FALSE}
  set.seed(1)
  dat <- data.frame(age = sample(15:99, 100, replace=TRUE),
                    y = runif(100))
```

Sidebar {.sidebar}
=====================================

```{r}
# age
  sliderInput("agerange", label = "Age", 
              min = 15, 
              max = 99, 
              value = c(15, 99),
              step=10)
```

Page 1
=====================================

Column {.tabset}
-----------------------------------------------------------------------

### Plot

```{r}
  dat2 <- reactive(
    dat %>%
    filter(age >= input$agerange[1] & age <= input$agerange[2]) %>%
    mutate(y2 = y*2)
  )

renderPlot({
  dat2 <- dat2()

  ggplot(dat2, aes(y2)) +
    geom_histogram()
})
```


Column {.tabset}
-----------------------------------------------------------------------

### Table

```{r}
  DT::renderDataTable({
    dat2 <- dat2()
    DT::datatable(dat2, options = list(bPaginate = FALSE))
  })
```
...