我正在尝试在R中使用Shiny创建仪表板,但是我遇到了一些小问题
我有:
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 $ date汇总的db $ value的总和。我尝试过类似的事情:
output$table2 <- rendertable ({aggregate(db_4()["value"], by=list(db_4()["date"]), sum) })
但是我总是得到一个空表。
有人可以帮助我解决这个小问题吗?
非常感谢
答案 0 :(得分:0)
我强烈建议您阅读this article有关调试的信息。
在Shiny中,您可以在browser()
和reactive
函数中使用render
函数。它应该可以帮助您找到问题所在(即:数据具有预期的结构)
似乎问题出在aggregate
函数上:db_4()["date"]
返回一个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)
我也强烈建议您共享您的最小示例代码,其中包括一些虚拟数据,以便可以立即将其复制粘贴。这样会增加有人回答的机会。