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") 

如果我想为一个叫维尔克的人做一个评估,而不必完整地说出整个名字,我只需要把名字"史密斯"改成"维尔克"。它还从其他一些可能没有完整名称的csv中提取,因此第一个字母大写的姓氏是目前最好的解决方案。谢天谢地,我现在没有两个唯一的名字了。

我的其他选项卡/绘图有一个使用的通用过滤器

df_radar <- cccdb %>%
filter(str_detect(Name,name))

我有超过50个使用这个过滤系统的绘图和数据表。每个html文件(每个被评估的个人(的大小约为6mb。

我想知道是否有一种更简单的方法可以使用Shiny的textInput在我的绘图和数据表上动态更改变量"name"和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。我想知道是否有更简单的方法。谢谢你的帮助!

对不起,我刚刚学会了shine的反应函数。我能够回答我自己的问题。我想出的解决方案是

# Replacement of name variable
textInput("name", "Name:")
# using shiny reactive
name <- reactive({
namer <- regex(pattern = input$name)
namer
})
#one of the plot
plotOutput("plot")
output$plot <- renderPlot({
df_radar <- cccdb %>%
filter(str_detect(Name,name())) %>%
ggplot(.,
aes(x=Productivity)) +
geom_bar()
df_radar
})

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

最新更新