Включение Shiny в Flexdashboard для динамического ввода текста с наименее блестящим кодом - PullRequest
0 голосов
/ 26 октября 2019

Я построил статическую панель 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-файл (каждый оцениваемый отдельный) имеет размер около 6 МБ.

Мне интересно, есть ли более простой способ использовать textInput Shiny для динамического изменения переменных "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. Мне было интересно, если есть более простой способ. Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 02 ноября 2019

Извините, я только что узнал реактивную функцию блеска. Я смог ответить на свой вопрос. Решение, которое я придумал:

# 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 ()

...