带情节的闪亮仪表板
Posted
技术标签:
【中文标题】带情节的闪亮仪表板【英文标题】:Shiny Dashboard with plot 【发布时间】:2019-05-20 05:25:26 【问题描述】:为了做一个仪表板,我正在学习一些闪亮的东西。我有个主意。我想创建一个仪表板,从 selectinput 中选择一个变量,按此类变量分组并绘制该变量总数的条形图或直方图。
我已经生成了一个示例数据集来生成我需要的东西,但是我无法得到我需要的东西。
UI代码是下一个:
library(shiny)
shinyUI(fluidPage(
titlePanel("Demo dashboard"),
sidebarLayout(
sidebarPanel(
selectInput("variable",
"group by",
choices = c("City","Country")
)
),
mainPanel(
plotOutput("distPlot")
)
)
))
服务器代码是下一个,这里我按输入变量聚合并绘制总数
library(shiny)
library(dplyr)
shinyServer(function(input, output)
output$distPlot <- renderPlot(
sample<-tbl_df(data.frame(c("City1","City2","City3","City1","City2","City3","City2","City3"),
c("A","B","C","D","D","A","A","B"),
c(12,14,15,12,12,14,8,10)))
colnames(sample)<-c("City","Country","Amount")
df1<-sample%>%group_by(input$variable)%>%
summarise(total=sum(Amount))
sample%>%group_by(input$variable)%>%summarise(total=sum(Amount))
x<- df1$total
hist(x)
)
)
我的结果的屏幕截图是下一个:
但这不是预期的结果。我无法获得所需的直方图
【问题讨论】:
嗨!你的问题现在有点模糊:“我无法得到我需要的东西。”不是很多信息。例如,您可以截屏并注释问题吗? 【参考方案1】:问题是你对dplyr
的使用:
您的原始代码不会评估 input$variable
以按城市分组,而是尝试按名为 `input$variable` 的不存在的列进行分组:
sample %>%
group_by(input$variable) %>%
summarise(total=sum(Amount))
结果:
# # A tibble: 1 x 2
# `input$variable` total
# <chr> <dbl>
# 1 City 97
您可以通过在语句之后添加打印语句(例如:print(df1)
)或在语句之前添加browser()
来轻松地自行检查。
这种行为是因为dplyr
默认使用非标准评估。你可以阅读更多关于here的信息。
要使用标准(可编程)评估,您需要取消引用 input$variable
,以便将值传递给 dplyr。在当前版本中,您可以结合使用!!
和sym
。
例子:
sample %>%
group_by(!!sym(input$variable)) %>%
summarise(total=sum(Amount))
结果:
# # A tibble: 3 x 2
# City total
# <fct> <dbl>
# 1 City1 24
# 2 City2 34
# 3 City3 39
直方图:
编辑:更多解释:group_by
不评估其输入,而是引用它:这就是你得到 `input$variable` 的原因作为列名。
另一方面:sym
函数将input$variable
的实际值转换为符号,然后!!
可用于删除引号:
在 dplyr 中起作用的是,如果您在输入周围没有引号,那么:group_by(City)
让我们一步一步来看看会发生什么:
sym(input$variable)
返回“城市”。 group_by("City")
仍然无法正常工作,因为输入已经引用了它!
这就是我们需要使用!!
的原因:!! sym(input$variable)
返回不带引号的 City。因此,表达式的计算结果为 group_by(City)
,因此将按预期工作。
【讨论】:
你能解释一下!!和符号?? 查看编辑:1)sym
将 input$variable
评估为带有引号的实际值。 2) !!
删除引用。一开始这绝对不是一个容易掌握的话题。以上是关于带情节的闪亮仪表板的主要内容,如果未能解决你的问题,请参考以下文章
当 menuItem 中的更多功能使用闪亮和闪亮的仪表板时,tabItem 无法显示内容