R通过ID闪亮选择HTML文件的一部分

时间:2019-05-16 00:47:30

标签: html r shiny

我有一个显示指标数据的应用程序。每个指标(30+)都有一个定义。我们在单个html文件中拥有所有指标的定义(便于维护30个以上的指标)。

在我的ShinyApp中,我只想显示与所选指标相关的部分,而不是整个文档。

我想知道如何做到。...

这里是一个仅显示完整“文档”而不是在侧栏中选择的部分的示例:

documentation <- structure("<div> <div id=\"part1\"> <h1>Part 1</h1> <p>This is part 1 out of 2</p> <p>&nbsp;</p> </div> <div id=\"part2\"> <p>&nbsp;</p> <h1>Part 2</h1> <p>This is part 2 out of 2.</p> </div> </div>", html = TRUE, class = c("html", "character"))
documentation


library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(

    selectInput(inputId = "part",label = "Select the part you want to see", choices = c("part1", "part2"))

  ),
  dashboardBody(

    uiOutput("section")

  )
)

server <- function(input, output) {

  output$section <- renderUI({

    HTML(documentation) # This needs subsetting based on input$part

  })



}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:0)

我通过将HTML当作字符串来提出了一个快速而肮脏的解决方案。 我想知道是否还有更优雅的方法...

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(

    selectInput(inputId = "part",label = "Select the part you want to see", choices = c("part1", "part2"))

  ),
  dashboardBody(

    uiOutput("section")

  )
)

server <- function(input, output) {

  output$section <- renderUI({

    # HTML(documentation)

    t1 <- strsplit(documentation, "<div")[[1]][grepl(input$part, strsplit(documentation, "<div")[[1]])]
    t2 <- paste0("<div", t1)
    t2 <- gsub("</div> </div>", "</div>", t2)
    HTML(t2)

  })



}

shinyApp(ui, server)