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

在shinyapps.io上实现源文件自动重新读取的可行性咨询

在shinyapps.io上实现定期更新CSV数据的解决方案

首先得说清楚为什么你本地能用reactiveFileReader但部署到shinyapps.io不行——因为shinyapps.io的应用文件系统是只读且静态的。你部署时上传的CSV文件会被固定在应用的目录里,之后你本地更新了CSV,shinyapps.io上的副本不会自动同步,自然不会触发reactiveFileReader的更新检测。

不过别担心,有几种可行的方法能实现你要的定期更新功能:

方法1:将CSV放到远程存储,让应用定期读取

把你的CSV文件放到一个公共可访问的远程位置(比如Google Drive、Dropbox、AWS S3等),然后用reactiveTimer配合读取远程文件,替代本地的reactiveFileReader。

举个简单的例子,假设你的CSV有公开的直接下载链接:

library(shiny)

ui <- fluidPage(
  tableOutput("updated_data")
)

server <- function(input, output, session) {
  # 设置定时器,每24小时触发一次更新(单位是毫秒)
  daily_update <- reactiveTimer(24 * 60 * 60 * 1000)
  
  # 响应式读取远程CSV
  latest_data <- reactive({
    daily_update() # 触发定期更新
    # 替换成你的CSV公开下载链接
    read.csv("https://your-public-csv-url-here.csv")
  })
  
  output$updated_data <- renderTable({
    latest_data()
  })
}

shinyApp(ui, server)

如果用私有存储(比如S3),可以用对应的R包(如aws.s3)读取,记得在shinyapps.io的应用设置里配置好存储服务的凭证(比如环境变量)。

方法2:用shinyapps.io的计划任务定期重新部署

如果你的CSV还是存在本地项目目录,你可以把代码和CSV放到GitHub仓库,然后在shinyapps.io里连接这个仓库,设置计划任务(Scheduled Tasks)定期自动部署应用。这样每天部署时,最新的CSV会被同步到shinyapps.io,应用自然就能拿到新数据。

操作步骤大概是:

  • 把你的Shiny项目推送到GitHub仓库
  • 在shinyapps.io里关联这个仓库
  • 进入应用的「Settings」→「Scheduled Tasks」,添加一个每天执行一次的部署任务

这种方式适合不想改动代码的情况,但缺点是每次部署会短暂重启应用。

方法3:从API直接拉取数据(如果适用)

如果你的源数据本身是从某个API获取的,那直接让应用定期调用API获取最新数据就行,完全不用依赖本地CSV文件,这也是最灵活的方式。

总结一下,reactiveFileReader在shinyapps.io上没法直接用在本地项目的CSV上,因为文件系统是静态的,但上面几种方法都能帮你实现定期更新的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:19