将Shiny集成到Flexdashboard中以使用最少的光泽代码实现动态textInput

时间:2019-10-25 22:11:26

标签: r shiny flexdashboard

我构建了一个静态Flexdashboard,其中包含10多个选项卡,每个选项卡中都有多个图。

我为每个评估过的人设置了一个变量作为搜索键,以编织整个仪表板。

例如

library(flexdashboard)
library(tidyverse)
library(plotly)
library(DT)
library(cowplot)
library(lubridate)

df <- read_csv("Database.csv")
name <- regex(pattern="Smith") 

如果我要为一个名为Virk的人进行评估,而不必完整整个名字,只需将名称“ Smith”更改为“ Virk”。它还从其他可能没有全名的csv中提取信息,因此,姓氏(首字母大写)是目前的最佳解决方案。谢谢,我暂时没有两个相同的唯一名称。

我的其他标签/图都有使用

的通用过滤器
df_radar <- cccdb %>%
  filter(str_detect(Name,name))

使用此过滤器系统,我有超过50多个图和数据表。每个html文件(每个经过评估的人)的大小约为6mb。

我想知道是否有一种更简便的方法可以使用Shiny的textInput在我的绘图和数据表上动态更改变量“名称”和renderPlot {},而不必更改我的整个仪表板代码。例如:

library(flexdashboard)
library(tidyverse)
library(plotly)
library(DT)
library(cowplot)
library(lubridate)
library(shiny)

df <- read_csv("Database.csv")
#Replacement of "name" variable
textInput("Name", "name:")
#one of the plot
renderPlot({
name <- regex(pattern = input$Name)
df_radar <- cccdb %>%
  filter(str_detect(Name,name) %>%
ggplot(.,
aes(x=Productivity)) +
geom_bar()

df_radar

})

我能够做到这一点。但是,问题是,我必须重复一遍:

name <- regex(pattern = input$Name)

用于所有50多个renderPlots和renderDataTable。我想知道是否有更简单的方法。谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

对不起,我刚刚学习了闪亮的反应功能。我能够回答自己的问题。我想出的解决方案是

/usr/share/vim/vimrc
# Replacement of name variable
textInput("name", "Name:")

# using shiny reactive
name <- reactive({
namer <- regex(pattern = input$name)
namer
})

对于其余的name变量,我只需要将它们替换为name()