无法在 R 闪亮中显示 table

Unable to display table in R shiny

我和我的朋友是 shiny 的新手。

我们正在努力自学闪亮。一切都很好,除了一个大问题和一个小问题。

最大的问题是:为什么我们不能用 renderTable() 显示 table?我们只能显示年份范围。

小问题是:我们可以在相关图中显示边栏标签,而不是在 csv 中分配的标签吗?

非常感谢。

library(shiny)
library(shinydashboard)


ui <- fluidPage(sidebarLayout(
  sidebarPanel
  (
    checkboxGroupInput(
      "feature",
      "Feature",
      c(
        "No of case" = "no_case",
        "Minor Case" = "minor_case",
        "All Non Fatal Case" = "all_non_fatl",
        "Fatal Case" = "fatal_case"
      )
    ),
    sliderInput(
      "year",
      "Year",
      min = 2015,
      max = 2021,
      value = c(2015, 2021)
    )
  ),
  
  mainPanel(tabsetPanel(
    tabPanel("Plot", plotOutput("correlation_plot")),
    tabPanel("Table", tableOutput("ecd"))
  ))
))



server <- function(input, output) {
  yearrange <- reactive({
    input$year[1]:input$year[2]
  })
  output$correlation_plot <- renderPlot({
    validate(need(input$feature, 'Check one of these items.'))
    plot(ecd$year,
         ecd[[input$feature]],
         xlab = "Year",
         ylab = input$feature) #how not to show tab name but show the side bar name
  })
  output$ecd <- renderTable({
    yearrange()
  })
  
}

shinyApp(ui, server)

你还没有分享数据(ecd)所以我无法测试,但你可以试试这个。

求大题

Shiny 显示您告诉它显示的内容。在 reactive 函数中,您使用了 input$year[1]:input$year[2],因此它显示从起始滑块值到结束滑块值的序列。我猜是这样,但我认为 ecd 数据有一个名为 year (或其他名称)的列,它具有年份值。您可以使用 subset(或 dplyr 中的 filter)对数据中那些特定年份的数据进行子集化。

小问题

创建一个命名向量 (vec),以便您可以轻松地在 checkboxGroupInput 中使用它以及在 ylab 中使用它来命名 Y 轴。

library(shiny)
library(shinydashboard)

c(
  "No of case" = "no_case",
  "Minor Case" = "minor_case",
  "All Non Fatal Case" = "all_non_fatl",
  "Fatal Case" = "fatal_case"
) -> vec

ui <- fluidPage(sidebarLayout(
  sidebarPanel
  (
    checkboxGroupInput(
      "feature",
      "Feature",
      vec
    ),
    sliderInput(
      "year",
      "Year",
      min = 2015,
      max = 2021,
      value = c(2015, 2021)
    )
  ),
  
  mainPanel(tabsetPanel(
    tabPanel("Plot", plotOutput("correlation_plot")),
    tabPanel("Table", tableOutput("ecd"))
  ))
))



server <- function(input, output) {
  yearrange <- reactive({
    subset(ecd, year %in% input$year[1]:input$year[2])
  })
  
  output$correlation_plot <- renderPlot({
    validate(need(input$feature, 'Check one of these items.'))
    plot(ecd$year,
         ecd[[input$feature]],
         xlab = "Year",
         ylab = names(vec[vec == input$feature])) 
  })
  output$ecd <- renderTable({
    yearrange()
  })
  
}

shinyApp(ui, server)