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

{golem}包应用启动时自动执行脚本导入动态数据集的问题咨询

Golem 应用启动自动执行数据拉取脚本的解决方案

首先明确默认设计逻辑:/data-raw目录下的脚本是Golem约定用于包构建阶段生成静态内置数据的工具脚本,不会在应用运行阶段自动触发,/data目录下的.rda文件是包构建时就固化的静态文件,因此不会自动更新。

你需要根据使用场景选择以下调整方案:

方案1:将数据逻辑迁移到启动执行流程(推荐,适配动态数据场景)

动态拉取的实时数据本身不适合用usethis::use_data存为静态内置数据,直接调整逻辑即可:

  • 把原data_prep.R中的数据拉取、清洗逻辑封装为独立函数,比如命名为get_latest_df(),存放在/R目录下(例如/R/utils_data.R)
  • 删除原脚本末尾的usethis::use_data(df, overwrite = T)语句,函数直接返回处理完成的数据框
  • 在应用启动入口注入数据加载逻辑:
    • 若需要应用启动时才拉取数据,将调用逻辑放到/R/run_app.R的run_app()函数最开头,示例代码:
    run_app <- function(...) {
      # 启动时先拉取最新数据
      df <- get_latest_df()
      # 将数据赋值到应用全局环境
      shiny::shinyOptions(app_data = df)
      golem::with_golem_options(
        app = shiny::shinyApp(ui = app_ui, server = app_server),
        golem_opts = list(...)
      )
    }
    
    • 若需要包加载时就提前拉取数据,将调用逻辑写到/R/zzz.R的.onLoad()钩子中:
    .onLoad <- function(libname, pkgname) {
      df <<- get_latest_df()
    }
    

方案2:保留原data_prep.R脚本的临时方案

如果只是本地自用不需要打包发布,可以直接在启动逻辑中加脚本调用,但注意该方案在打包为安装包时会失效(因为/data-raw默认不会被打包进安装包):

# 加入run_app()开头
source(here::here("data-raw", "data_prep.R"))

注意事项

  • 不要硬编码数据库账号密码,推荐用config包或者系统环境变量存储敏感连接信息
  • 若数据拉取耗时较长,可搭配waiter包添加启动加载页提升用户体验,也可根据业务需求增加缓存逻辑,避免每次启动都重复拉取数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:36:03