如何为Shiny应用实现自动化数据上传与定时更新?
自动化Excel处理与Shiny Flexdashboard更新方案
1. 编写核心自动化R脚本
创建位于Folder B的automation_script.R,包含数据读取、转换、导出及应用同步逻辑:
# 加载所需包(未安装则先执行:install.packages(c("readxl"))) library(readxl) # 定义路径(替换为实际文件夹路径) folder_a <- "/path/to/Folder_A" # 原始Excel文件存放目录 folder_c <- "/path/to/Folder_C" # Shiny应用的数据目录 dashboard_dir <- "/path/to/your_flexdashboard" # 本地flexdashboard文件目录 shiny_server_dir <- "/srv/shiny-server/your_dashboard" # Shiny服务器应用目录 # 1. 读取并处理Folder A中的所有Excel文件 excel_files <- list.files(folder_a, pattern = "\\.xlsx$|\\.xls$", full.names = TRUE) processed_data <- list() for (file in excel_files) { # 读取Excel(根据实际需求调整sheet、列名等) raw_df <- read_excel(file, sheet = 1) # --- 这里添加你的数据转换逻辑 --- # 示例:去除空行、重命名列 processed_df <- raw_df[!apply(raw_df, 1, function(x) all(is.na(x))), ] names(processed_df) <- gsub(" ", "_", names(processed_df)) processed_data[[tools::file_path_sans_ext(basename(file))]] <- processed_df } # 2. 导出处理后的数据到Folder C save(processed_data, file = file.path(folder_c, "dashboard_data.RData")) # 3. 同步flexdashboard文件到Shiny服务器(根据系统选择对应命令) # Linux/macOS 使用rsync system(paste0("rsync -avz ", dashboard_dir, "/ ", shiny_server_dir, "/")) # Windows 使用robocopy(假设服务器目录已映射为Z盘) # system(paste0('robocopy "', dashboard_dir, '" "Z:/srv/shiny-server/your_dashboard" /E /XO'))
2. 设置定时任务
Windows:任务计划程序
- 打开「任务计划程序」,点击「创建基本任务」
- 命名为
Shiny Dashboard Data Update,触发器选择「每2小时」,设置起始时间 - 操作选择「启动程序」,程序路径选
Rscript.exe(通常在C:\Program Files\R\R-x.x.x\bin\x64\Rscript.exe) - 添加参数:
"C:/path/to/Folder_B/automation_script.R",起始于设为Folder B的路径
Linux/macOS:Cron
- 终端输入
crontab -e,添加以下规则(每2小时运行一次,同时记录日志):
0 */2 * * * /usr/bin/Rscript /path/to/Folder_B/automation_script.R >> /path/to/update_log.log 2>&1
- 保存退出后,cron会自动生效
3. Flexdashboard数据加载配置
在你的flexdashboard脚本中,确保加载Folder C的.RData文件:
--- title: "My Dashboard" output: flexdashboard::flex_dashboard: runtime: shiny --- ```{r setup, include=FALSE} # 加载处理后的数据 load(file.path("data", "dashboard_data.RData")) # 假设Folder C是应用内的data子目录
## 4. 额外注意事项 - 确保R环境已安装所有依赖包(`readxl`、`flexdashboard`等) - Shiny Server需配置正确的应用目录权限,确保服务器能读取同步后的文件 - 日志文件(`update_log.log`)可用于排查定时任务执行失败的问题 内容的提问来源于stack exchange,提问作者Abdu Kikhia
相关产品推荐
相关产品推荐

