首页 > 解决方案 > 我对 Shiny R 中的反应表有一些问题

问题描述

我正在尝试使用 R 中的闪亮创建仪表板,但我遇到了一些小问题

我有:

db是我data.frame的:

db$domain:chr, 
db$date:chr,
db$value:num.

所以我创建了:

db_4 <- reactive({ subset(db,db$domain %in% input$domain &
db$date<=input$daterange[2] & db$date>=input$daterange[1]})

输入是:

input$domain: selectinput with multiple choices,
input$date: daterangeinput.

我正在尝试创建一个表,它给我 db$value 的总和,由 db$date 聚合。我试过类似的东西:

output$table2 <- rendertable ({aggregate(db_4()["value"], by=list(db_4()["date"]), sum) })

但我总是得到一张空桌子。

有人可以帮我解决这个小问题吗?

多谢

标签: rshiny

解决方案


我强烈建议您阅读这篇关于调试的文章。

在 Shiny 中,您可以browser()reactive和函数中使用该render函数。它应该可以帮助您定位问题(即:数据具有预期的结构)

似乎问题出在aggregate函数上:db_4()["date"]返回 a data.frame,您需要一个向量。

解决方案:

library(shiny)

db <- data.frame(
  domain = letters[1:3],
  date = seq(
    from = as.Date("2019-01-01"),
    to = as.Date("2019-06-01"),
    by = "1 months"
  ),
  value = runif(12)
)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("domain", "Domain", choices = unique(db$domain)),
      dateRangeInput("daterange", "Date", 
                     min = min(db$date), max = max(db$date),
                     start = min(db$date), end = max(db$date))  
    ),
    mainPanel(
      tableOutput("table2")      
    )
  )
)

server <- function(input, output, session) {
  db_4 <- reactive( { 
    subset(db, 
      db$domain %in% input$domain &
      db$date<=input$daterange[2] & 
      db$date>=input$daterange[1]
    )
  })

  output$table2 <- renderTable( {
    req(db_4()) # Don't render table when db_4() is NULL

    # Uncomment next line to check if everything goes as expected
    #browser()
    aggregate(
      data.frame(value = db_4()$value), 
      by=list(date = as.factor(db_4()$date)), 
      sum
    )
  })
}

shinyApp(ui, server)

此外,我强烈建议您分享您的最小示例的代码,包括一些虚拟数据,以便可以立即复制粘贴。这将增加有人回答的机会。


推荐阅读