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

如何解决Shiny自定义容器函数中的Error in FUN递归结构错误?

问题解决:Shiny组件兼容错误修复

错误根源

你遇到的Error in FUN: Expected a recursive structure built of NULLs, lists and dependencies错误,核心原因是shiny.fluent的Stack组件无法直接识别原生Shiny的selectInput——Stack要求子元素是shiny.fluent框架的组件,或经过转换的兼容结构,直接放入原生Shiny输入组件会破坏结构要求。

修复方案

以下是针对性的修复步骤及完整代码:

1. 用as.Fluent()包装原生组件

通过shiny.fluent::as.Fluent()将原生Shiny的selectInput转换为Stack可识别的结构。

2. 修正choices参数

原代码中c(bg_waarde, NULL)的写法无效(NULL会被自动忽略),如果需要空选项,改用键值对形式定义占位符。

3. 清理多余语法符号

去掉selectInput末尾的多余逗号,避免潜在解析问题。


修复后的完整代码

library(shiny)
library(shiny.fluent)
library(glue)

simSettingCard <- function(title, id, size = 12, style = "style.css") {
  div(
    class = glue("card ms-depth-8 ms-sm{size} ms-xl{size}"),
    style = style,
    Stack(
      tokens = list(childrenGap = 5),
      Text(variant = "xLarge", title, block = TRUE, class = "card-title"),
      # 转换原生selectInput为兼容结构
      as.Fluent(
        selectInput(
          id,
          label = "mg/dl",
          # 定义带空选项的选择列表
          choices = c("" = "请选择", bg_waarde),
          selected = ""
        )
      )
    )
  )
}

# 示例:假设bg_waarde是有效数值向量
bg_waarde <- c(80, 100, 120, 140)

# 调用函数
simSettingCard(
   "T-60",
   "bgvalue-60"
)

关键修复点说明

  • as.Fluent()转换:这是shiny.fluent框架提供的适配工具,能将原生Shiny组件转换为符合fluent组件结构要求的对象,解决跨框架组件嵌套的兼容性问题。
  • choices优化:用"" = "请选择"定义空选项,既符合ShinyselectInput的参数要求,也能让用户明确选择逻辑,后端处理空值时更清晰。

内容的提问来源于stack exchange,提问作者Elias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:00:51