如何解决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
相关产品推荐
相关产品推荐

