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

如何在Golem Shiny应用中正确使用其他包的内部数据?

你的当前方法存在问题,更稳健的方案如下

当前做法的问题

把data.rda放在Shiny包的R/文件夹并通过相对路径加载,不符合R包的结构规范,而且在包安装后会出现路径失效的问题:开发阶段的R/文件夹在包安装后会被编译处理,原始的data.rda不会保留在该路径下,导致应用运行时找不到数据文件。

推荐的解决方案

方案1:直接依赖数据准备包(最推荐)

如果数据准备包是你维护的,直接让它把预处理后的数据集作为内部数据导出,Shiny包通过依赖关系直接调用:

  • 在数据准备包中运行:
    usethis::use_data(your_preprocessed_data, internal = TRUE)
    
  • 在Shiny包的DESCRIPTION文件中添加对数据准备包的依赖:
    Imports:
      数据准备包名
    
  • 在Shiny应用的代码中直接调用数据:
    数据准备包名::your_preprocessed_data
    

这种方式完全符合R包的设计规范,无需手动复制或加载数据,还能保证数据版本和预处理逻辑的一致性。

方案2:将外部数据放入inst/extdata目录(无依赖场景)

如果不想让Shiny包依赖数据准备包,可将data.rda放到Shiny包的inst/extdata/目录下(如果没有这个目录就新建),然后通过system.file()获取正确路径加载:

  1. 把data.rda移动到inst/extdata/
  2. 在R/Load_data.R中修改加载代码:
    load_data <- function() {
      data_path <- system.file("extdata", "data.rda", package = "你的Shiny包名")
      load(data_path, envir = parent.frame())
    }
    load_data()
    

system.file()会自动适配开发和安装后的路径,确保数据文件能被正确找到。

关于Shiny包自身的内部数据

你原本用usethis::use_data(internal_obj, internal = TRUE)管理的包内内部数据,继续保持即可——它会被打包到R/sysdata.rda中,和外部导入的data.rda互不干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:46:05