R Shiny中如何使用表格指定单元格值渲染valueBox组件
问题原因
df1是Shiny的响应式对象,不能直接像普通数据框一样进行索引取值,必须先通过df1()调用获取其当前返回的数据集- 你定义
valor的代码在响应式上下文外,不会随着用户选择的Tipo变化动态更新,同时对非求值状态的reactive对象索引也无法得到正确结果 - 补充:原
selectInput的selected = TRUE参数错误,多选模式下需要传入默认选中的选项值,而非布尔值
修正后的Server代码
output$SelectTipo<-renderUI({ selectInput("SelectTipo", "Tipo", unique(data$Tipo), multiple = T, selected = unique(data$Tipo)) }) df<-reactive({ req(input$SelectTipo) # 防止空选时后续计算报错 data %>% filter(Tipo %in% input$SelectTipo) }) df1<-reactive({ df2<-df() df2 %>% count(Color)%>% mutate(percent=round(((n/sum(n))*100), digits=2))%>% arrange(desc(percent))->tmpx names(tmpx)<- c("Evento","N","Porcentaje") tmpx }) # 把valor定义为响应式表达式,放在响应式上下文内 valor<-reactive({ tmp_df <- df1() # 取第1行第2列,可根据需要调整空表时的默认返回值 if(nrow(tmp_df)>=1) tmp_df[1,2] else 0 }) output$Box1 <- renderUI({ valueBox(value = valor(), subtitle = "Valor", icon = icon("check-circle"), color = "green") })
关键改动说明
- 修正了
selectInput的选项值和默认选中规则,下拉框不再出现重复选项,默认选中所有Tipo - 增加
req(input$SelectTipo)防止用户清空选择时触发无效计算、页面抛红 - 将
valor改为响应式表达式,内部先调用df1()拿到当前计算完成的数据框,再进行索引取值 - 增加了空表判断逻辑,避免筛选结果为空时索引报错
内容的提问来源于stack exchange,提问作者ErikaC
相关产品推荐
相关产品推荐

