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

Shiny Server中r2d3调用本地JS渲染D3图表失败的解决咨询

解决Shiny部署后r2d3调用本地JS文件的问题

问题根源

本地运行Shiny时,工作目录默认是app根目录,相对路径能正确定位到www/barchart.js;但部署到Shiny Server后,工作目录可能不是app根目录,导致相对路径解析失败。而system.file是从包目录读取文件,不受工作目录影响,所以能正常运行。

解决方案

无需创建包或依赖system.file,通过绝对路径定位JS文件即可解决本地与部署环境的路径差异问题,具体有两种可行方法:

方法1:用Shiny内置函数获取app根目录

通过shiny::getAppDir()获取当前app的绝对根目录,再拼接JS文件路径,适配所有运行环境:

修改server.R代码如下:

function(input, output,session) {
    data=c(0.3, 0.6, 0.8, 0.95, 0.40, 0.20)
    
    # 获取app根目录的绝对路径
    app_root <- shiny::getAppDir()
    
    output$d31 <- renderD3({
      r2d3( data = data,
            script = file.path(app_root, "www", "barchart.js"), 
            d3_version = "5")
    }) 

    # 可选:将barchart.js移到app根目录(与server.R同级)时的写法
    # output$d32 <- renderD3({
    #   r2d3( data = data,
    #         script = file.path(app_root, "barchart.js"), 
    #         d3_version = "5")
    # }) 

    output$d33 <- renderD3({
      r2d3( data = data,
            script = system.file("examples/barchart.js", package = "r2d3"),
            d3_version = "5")
    }) 
}

方法2:直接指定绝对路径(适合固定部署场景)

如果明确Shiny Server上app的部署路径,可直接写死绝对路径(灵活性差,仅推荐固定环境使用):

script = "/srv/shiny-server/test/www/barchart.js"

关键注意事项

  • 不需要用tags$head手动引入JS脚本,r2d3会自动将脚本内容嵌入输出,手动引入易导致冲突。
  • 确保Shiny Server对JS文件有读取权限,可通过命令chmod o+r www/barchart.js开放读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:15:24