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

求助:在shinyapps.io使用bslib时含DT的Rmd文件渲染失败

解决shinyapps.io上bslib+DT+Rmd组合导致的pandoc内存不足错误(error 137)

问题复现场景

  • 部署在shinyapps.io的Shiny应用,支持用户基于Rmd模板生成HTML报告
  • 使用bslib::page_fluid作为页面容器,且Rmd中调用DT组件渲染交互式表格
  • 触发错误:pandoc document conversion failed with error 137(该错误通常表示内存不足)
  • 本地运行完全正常;改用shiny::fluidPage或Rmd中直接打印数据框而非DT时,shinyapps.io上也能正常运行

排查结论

该问题是shinyapps.io环境、bslib包、DT组件三者的组合兼容性问题,推测与shinyapps.io当前使用的pandoc版本对bslib样式+DT的处理逻辑有关,导致渲染时内存占用过高超出平台限制。

可行解决方案

  1. 临时替换页面容器
    将bslib::page_fluid替换为shiny::fluidPage,无需修改其他业务逻辑,可快速恢复应用功能。

  2. 调整Rmd中DT的渲染策略

    • 若无需交互式表格,改用knitr::kable()生成静态表格,大幅降低内存占用
    • 若必须保留DT,添加配置限制资源消耗:
      DT::datatable(
        your_data,
        options = list(
          pageLength = 10,  # 限制每页显示行数
          dom = 'ltipr',    # 简化DOM元素,去掉不必要的组件
          deferRender = TRUE # 延迟渲染,减少初始内存加载
        )
      )
      
  3. 指定一致的pandoc版本
    在项目中添加_pandoc.yml文件,指定与本地运行一致的pandoc版本,避免环境版本差异:

    pandoc_version: 2.19.2 # 替换为你本地的pandoc版本
    

    也可通过renv锁定环境依赖,确保shinyapps.io使用与本地相同的包版本。

  4. 拆分Rmd渲染流程
    将数据预处理与报告渲染分离:先在Shiny中完成数据计算,生成轻量的数据对象,再传入Rmd模板渲染,避免一次性加载过多资源到内存中。

Bug报告提交指引

若需向官方反馈问题,整理以下信息后提交:

  • 可复现问题的最小示例代码(包含Shiny应用代码、Rmd模板)
  • shinyapps.io上的完整错误日志
  • 本地正常运行的sessionInfo()输出
  • 明确说明触发条件:仅在shinyapps.io + bslib::page_fluid + DT组件的组合场景下出现

提交渠道:

  • 若怀疑是bslib或DT包的问题,提交到对应GitHub仓库的Issue板块
  • 若确认是shinyapps.io环境问题,通过平台的支持工单系统提交反馈

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:42:01