带情节的闪亮仪表板

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) syminput$variable 评估为带有引号的实际值。 2) !! 删除引用。一开始这绝对不是一个容易掌握的话题。

以上是关于带情节的闪亮仪表板的主要内容,如果未能解决你的问题,请参考以下文章

当 menuItem 中的更多功能使用闪亮和闪亮的仪表板时,tabItem 无法显示内容

闪亮的仪表板 rpivotTable 布局

Tarantool 闪亮的仪表板

如何让 Leaflet for R 使用 100% 的闪亮仪表板高度

如何更新此闪亮仪表板上的滑块输入?

R闪亮仪表板:如何将垂直滚动条添加到仪表板侧栏?