如何使用其他Shiny模块的响应式数据框更新柱状图模块
问题根因
- 主服务端调用柱状图模块时,传入的是
variable(),即reactive对象的一次性执行结果,后续选择器变量变更时不会同步更新传入值,导致柱状图始终停留在首次渲染结果 - 若直接传入reactive对象但在柱状图模块中未加
()取值,会直接对reactive函数本身执行mutate操作,触发类型报错
修正方案
步骤1:修改主服务端传参逻辑
不要对传入的variable加(),直接传reactive对象本身,修正后主服务端代码如下:
server <- function(input, output, session) { data <- dataServer("data") variable <- data$df # 去掉variable后的(),传入reactive对象而非单次执行结果 barplotServer("barplot", data = variable) }
步骤2:修改柱状图模块内的取值逻辑
在操作数据前加()获取reactive对象返回的当前数据集,修正后bardata部分代码如下:
bardata <- reactive({ # 对传入的reactive data加()取实际数据集 bar <- data() |> mutate( `> 50% People of Color` = if_else(`% people of color` >= 0.5, 1, 0), `> 50% Low Income` = if_else(`% low-income` >= 0.5, 1, 0) ) total_av <- mean(bar$value) poc <- bar |> filter(`> 50% People of Color` == 1) poc_av <- mean(poc$value) lowincome <- bar |> filter(`> 50% Low Income` == 1) lowincome_av <- mean(lowincome$value) bar_to_plotly <- data.frame( y = c(total_av, poc_av, lowincome_av), x = c("Austin Average", "> 50% People of Color", "> 50% Low Income") ) return(bar_to_plotly) })
修改完成后,选择器的变量变更会自动触发数据集更新,进而触发柱状图重渲染,实现动态更新效果。
内容的提问来源于stack exchange,提问作者ethan tenison
相关产品推荐
相关产品推荐

