gpt4 book ai didi

r - 如何从 Rmarkdown 部分重构 Shiny 代码的服务器部分

转载 作者:行者123 更新时间:2023-12-04 12:16:35 27 4
gpt4 key购买 nike

我有以下完全运行的 Shiny-dashboard 应用程序:

---
title: "Test"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: rows
theme: bootstrap
vertical_layout: scroll
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```

Basic
=====================================

Inputs_basic {.sidebar}
-------------------------------------

```{r io_processes}
selectInput("mpg_thres", label = "MPG threshold",
choices = c(10,20,30,40), selected = 10)
selectInput("cyl_thres", label = "CYL threshold",
choices = c(4,5,6,7,8), selected = 4)
```

Rows {data-height=500}
-------------------------------------


### Scatter Plot

```{r show_scattr}
mainPanel(

renderPlot( {
dat <- as.tibble(mtcars) %>%
select(mpg, cyl) %>%
filter(mpg > input$mpg_thres & cyl > input$cyl_thres)
ggplot(dat, aes(mpg, cyl)) +
geom_point()

})

)
```


Rows {data-height=500}
-------------------------------------

### Show verbatim
```{r show_verbatim}
mainPanel(

renderPrint( {
dat <- as.tibble(mtcars) %>%
select(mpg, cyl) %>%
filter(mpg > input$mpg_thres & cyl > input$cyl_thres)
dat
})

)
```

注意以下部分代码是多余的在两个不同的 Rmarkdown 部分散点图逐字显示之间。

 dat <- as.tibble(mtcars) %>%
select(mpg, cyl) %>%
filter(mpg > input$mpg_thres & cyl > input$cyl_thres)

我怎样才能分解它?


为了完整起见,应用程序的屏幕截图是这样的:

enter image description here

最佳答案

使用响应式(Reactive)数据表达式,将输出 block 更改为:

### Scatter Plot

```{r show_scattr}
dat <- reactive( {
as.tibble(mtcars) %>%
select(mpg, cyl) %>%
filter(mpg > input$mpg_thres & cyl > input$cyl_thres)
} )

mainPanel(
renderPlot( {
ggplot(dat(), aes(mpg, cyl)) +
geom_point()
})
)
```

### Show verbatim
```{r show_verbatim}
mainPanel(
renderPrint( {
dat()
})
)
```

请注意 reactive 的使用以及将 dat 作为函数调用 (dat())。

reactive 确保每次输入更改时,都会重新计算 dat

关于r - 如何从 Rmarkdown 部分重构 Shiny 代码的服务器部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44236465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com