将日期筛选器添加到Flexdashboard

将日期筛选器添加到Flexdashboard,r,shiny,flexdashboard,R,Shiny,Flexdashboard,我希望用户能够选择他们感兴趣的数据的日期范围。这是我第一次使用flexdashboard和Rshiny,如果这是一个简单的问题,请原谅。我理解用户输入要求您使用反应式表达式 我试图搜索stackoverflow一段时间,但仍然找不到帮助我的答案。这是我到目前为止写的代码 --- title: "title" output: flexdashboard::flex_dashboard: orientation: rows vertical_layout:

我希望用户能够选择他们感兴趣的数据的日期范围。这是我第一次使用flexdashboard和Rshiny,如果这是一个简单的问题,请原谅。我理解用户输入要求您使用反应式表达式

我试图搜索stackoverflow一段时间,但仍然找不到帮助我的答案。这是我到目前为止写的代码

---
title: "title"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: fill
    theme: lumen
    runtime: shiny
---
行{数据宽度=150}
-----------------------------------------------------------------------
###本月使用率
```{r}
数据过滤器=可渲染({
x=data[data$`Termination Date`>=input$dateRange[1]&data$`Termination Date`=input$dateRange[1]|
is.na(data$`Termination Date`)和data$`Termination Initiation Date(ESS)`>=输入$dateRange[1],]
})
renderGauge({
利用率=四舍五入(长度(!is.na(data_filter()$`终止起始日期(ESS)`))/length(data_filter()$`员工ID`)*100,1)
仪表(利用率,最小=0,最大=100,仪表系数(成功=c(80100),警告=c(30,79),危险=c(0,29)))
})
这将导致警告:$:$运算符中的错误对于原子向量无效。并且仪表不填充


我很难理解如何访问反应函数中的过滤数据。基于此stackoverflow响应,我尝试使用data_filter()$。感谢您的帮助。

正如@stefan在评论中指出的,您只能访问被动表达式中的被动数据

问题似乎是,
利用率
仍然是“反应性”的,但在调用
量表
时,在非反应性上下文中使用它

在没有看到整个仪表板和数据的情况下,我建议将
gauge
包装在
renderGauge
调用中

renderGauge({
  gauge(utilization, min = 0, max = 100, gaugeSectors(
    success = c(80, 100), warning = c(30, 79), danger = c(0, 29)))
})
另见:

要在闪亮的flexdashboard中包含仪表,您需要确保 在renderGauge中包装仪表输出(以便在 输入(取决于变化)


这行吗?

谢谢你的帮助。最后一个问题(有很多)是通过使用反应({})而不是可渲染({})来解决的。仪表被填满了

# Utilization Percentage for ESS since it started
data_filter = reactive({
    x = data[data$`Termination Date` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2] | 
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (HR)` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2] |
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (ESS)` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2], ]
  })

renderGauge({
  utilization = round(length(which(!is.na(data_filter()$`Termination Initiation Date (ESS)`))) / length(data_filter()$`Employee ID`), 3) * 100
  gauge(utilization, min = 0, max = 100, gaugeSectors(success = c(80, 100), warning = c(30, 79), danger = c(0, 29)))
  })
#ESS自启动以来的利用率百分比
数据过滤器=无功({

x=data[data$`Termination Date`>=input$dateRange[1]&data$`Termination Date`=input$dateRange[1]&data$`Termination Date`=input$dateRange[1]&data$`Termination Date`问题在于,您将数据集命名为
data
,然后使用名称
data
定义一个反应。当您运行应用程序时,
data
首先引用一个数据帧,但在反应内处理后,它的行为类似于一个函数。因此,在以
temp=…
开头的行中您试图对一个函数进行子集,这导致了著名的
错误:“closure”类型的对象不可子集。
好的,这是有意义的,所以我将其更改为data\u filter。我想我真正的问题是我不知道如何访问数据。如果我试图访问dataf\u filter()设置的新的被动过滤数据集它给了我一个错误:如果没有活动的被动上下文,则不允许操作。如何访问过滤后的数据?您只能在所谓的被动表达式中访问被动表达式,例如在一个渲染函数中,如
renderable({data_filter()})
。或者您必须使
temp
本身成为反应式。谢谢您,这很有帮助。它允许仪表板进行渲染,但由于$:$运算符中存在错误,因此未填充利用率计算。对于原子向量,$运算符无效。我用当前代码更新了问题描述。我将在可能的情况下对此进行更多搜索我不想在这里提供更新。
Row {data-width=150}
-----------------------------------------------------------------------

### ESS Utilization this month

```{r}
data_filter = renderTable({
    x = data[data$`Termination Date` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2] | 
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (HR)` >= input$dateRange[1] |
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (ESS)` >= input$dateRange[1], ]
  })

renderGauge({
  utilization = round(length(which(!is.na(data_filter()$`Termination Initiation Date (ESS)`))) / length(data_filter()$`Employee ID`) * 100, 1)
  gauge(utilization, min = 0, max = 100, gaugeSectors(success = c(80, 100), warning = c(30, 79), danger = c(0, 29)))
  })
renderGauge({
  gauge(utilization, min = 0, max = 100, gaugeSectors(
    success = c(80, 100), warning = c(30, 79), danger = c(0, 29)))
})
# Utilization Percentage for ESS since it started
data_filter = reactive({
    x = data[data$`Termination Date` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2] | 
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (HR)` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2] |
               is.na(data$`Termination Date`) & data$`Termination Initiation Date (ESS)` >= input$dateRange[1] & data$`Termination Date` <= input$dateRange[2], ]
  })

renderGauge({
  utilization = round(length(which(!is.na(data_filter()$`Termination Initiation Date (ESS)`))) / length(data_filter()$`Employee ID`), 3) * 100
  gauge(utilization, min = 0, max = 100, gaugeSectors(success = c(80, 100), warning = c(30, 79), danger = c(0, 29)))
  })