如何在Shiny中使用renderValueBox返回DataFrame选中名称的同行数值
修正方案
核心修改点
- 修复
f_1函数的匹配逻辑:将原硬编码取固定行的写法,替换为按传入的选中姓名筛选对应行的数值,同时增加合法性判断避免报错。 - 清理冗余代码:原代码中的
reac、pred两个响应式没有实际业务逻辑,既未用到不存在的input$value,也没有做额外计算,可以直接删除简化代码。 - 可选优化:给下拉选择框设置默认选中值,避免页面初始化时显示空值。
修正后完整代码
--- title: "Untitled" runtime: shiny output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill --- ```{r setup, include=FALSE} library(flexdashboard) library(shiny) library(tibble)
name = c('John', 'Louis', 'Marco') value = c(4321, 1234, 30) df <- data.frame(name, value) # 修正后的匹配函数 f_1 <- function(x) { if (is.character(x) && x %in% df$name) { # 按选中的姓名匹配对应行的value值 df[df$name == x, "value"] } else { NULL } }
side1{.sidebar}
Control panel
selectInput(inputId = "name", label="Names:", choices = unique(df$name), selected = unique(df$name)[1], # 设置默认选中第一个值 multiple=FALSE )
calc1{}
renderValueBox({ valueBox( value = f_1(x = input$name), caption = "Value", color = "#008bbb", icon = "fa-users" ) })
如果你需要保留原有的`pred`响应式结构,只需要把`pred`的返回值直接改为`input$name`,再按原逻辑调用即可,不需要额外的`reac`响应式做中转。 内容的提问来源于stack exchange,提问作者neves
相关产品推荐
相关产品推荐

