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