You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:15:02