r - Highcharter 和 Shiny 与服务器功能中的反应数据集/突变数据集不起作用
问题描述
当我尝试使用基于 selectInput 值进行分组和汇总的数据集在 Shiny 中生成 highcharter barplot 并且在 hcaes() 中引用这些相同的值时,我收到错误“找不到对象'输入'”
我也尝试过 hcaes_string(),然后我得到“找不到对象'My.Variable'”,但是当我输入 My.Variable 时,它会生成 hchart,以便它可以与在服务器函数中创建的数据集进行交互。显然我想使用下拉菜单在 My.Variable 和 My.Variable2 之间切换。我尝试将汇总数据集分配给反应性对象,但随后出现错误“hchart 不支持类/类型反应性/反应性/函数的对象(尚)”。
我已经在这几个小时了,这是我在 StackOverflow 上的第一个问题。我装配了一个示例数据集,以便代码可重现,并且我已将 R 和 RStudio 更新到最新版本。
library('highcharter')
library('plyr')
library('dplyr')
library('tidyr')
library('lubridate')
library('stringr')
library('tools')
library('shiny')
#demo <- read.csv("data/name-change-analysis.csv",stringsAsFactors = FALSE)
indiv <- rep(c('p1','p2','p3','p4','p5'),4)
Name.Change <- rep(c('yes','yes','no','yes','no'),4)
Overall.Category <- rep(c('against','support','support','neutral','against'),4)
Race <- rep(c('Black','White','White','Asian','White'),4)
Gender <- rep(c('Male','Male','Male','Female','Male'),4)
demo <- as.data.frame(cbind(indiv,Name.Change,Overall.Category,Race,Gender))
ui <-
navbarPage(
"Responses by demographics",
tabPanel(
"Manual labels",
fluidPage(
fluidRow(
column(
selectInput(
"category",
label = "Select a demographic category:",
choices = c("Race",
"Gender" = "gender")
),
width = 6
),
column(
selectInput(
"name_or_overall",
label = "Response Category",
choices = c(
"Name Change" = "Name.Change",
"Overall Category" = "Overall.Category"
),
width = "100%"
),
width = 6
)
),
highchartOutput("hcontainer")
)
),
collapsible = TRUE
)
server <- function(input, output, session) {
output$hcontainer <- renderHighchart({
demo %>%
group_by(input$category,input$name_or_overall) %>%
summarise(count = n()) %>%
hchart(type = "bar",
hcaes(y = "count",
x = as.name(input$category),
group = as.name(input$name_or_overall))) %>%
hc_plotOptions(bar = list(stacking = "percent")) %>%
hc_tooltip(shared = TRUE)
})
}
shinyApp(ui,server)
解决方案
尝试这个
output$hcontainer <- renderHighchart({
df1 <- demo %>% mutate(var1=demo[[as.name(input$category)]], var2=demo[[as.name(input$name_or_overall)]])
df <- df1 %>% group_by(var1,var2) %>% summarise(count = n())
highchart() %>%
hc_add_series(df, type = "bar",
hcaes(y = "count",
x = "var1",
group = "var2")) %>%
hc_plotOptions(bar = list(stacking = "percent")) %>%
hc_tooltip(shared = FALSE)
})
您将获得以下输出:
推荐阅读
- node.js - 节点服务器和 npm 未在 AWS 的 Windows 12 EC2 实例上运行
- java - Firebase 在多个节点中检索多个对象
- xslt - xslt 2.0 xsl:number 递归计数器 - 更有效的方法?
- javascript - 为什么在我的测试中使用 .then() 比 await 快 3 倍?
- android - 带有回收站视图的过滤视图
- javascript - 运行终端应用程序时意外的令牌导出
- r - 从R中的Delaunay三角剖分生成邻接矩阵
- c++ - 创建结构体向量,表达式:向量下标超出范围
- c# - .Net 3.5 VS 2008 无效令牌“出”错误
- ajax - 通过托管域名对 aws api 网关的 ajax 调用不起作用