R4.3.1读取.gz文件及Shiny应用部署问题求助
解决Shiny应用部署的两个问题:读取.rds.gz文件与大RData文件部署
一、正确读取.rds.gz文件
你遇到的readRDS(con) : unknown input format错误,大概率是因为你的.rds.gz不是通过R的gz连接生成的,而是手动把.rds文件压缩成gz包导致的。以下两种方法可以解决:
方法1:适配正确生成的.gz文件
如果你的.rds.gz是用下面的代码保存的,那你原来的读取代码是有效的:
# 正确的保存方式 con <- gzfile("tri_naiveBayes.rds.gz", "wb") saveRDS(tri_naiveBayes, con) close(con)
方法2:处理手动压缩的.gz文件
如果是手动压缩的文件,不用生成25M的实体文件,直接用流读取:
# 无需解压,直接读取压缩包内的.rds tri_naiveBayes <- readRDS(gzcon(file("tri_naiveBayes.rds.gz", "rb")))
或者用R.utils包生成临时文件读取,避免占用磁盘空间:
library(R.utils) # 生成临时解压文件,读取后自动删除 temp_file <- gunzip("tri_naiveBayes.rds.gz", temporary=TRUE) tri_naiveBayes <- readRDS(temp_file)
二、部署25M RData文件到Shiny Server的解决方案
部署后立即断开连接,通常是Shiny Server的内存限制或加载超时导致的,试试这些办法:
延迟加载模型:不要在全局环境加载RData,放到server函数内部用reactive延迟加载,降低启动时的内存占用:
server <- function(input, output, session) { # 只有用到模型时才加载 model <- reactive({ load("your_model.RData") tri_naiveBayes # 返回RData里的模型对象 }) # 预测逻辑中调用model() output$pred_result <- renderPrint({ predict(model(), newdata = input$data) }) }调整Shiny Server配置:修改
/etc/shiny-server/shiny-server.conf,增加应用的资源限制:server { listen 3838; location /your_app { app_dir /srv/shiny-server/your_app/; app_init_timeout 60; # 延长启动超时到60秒 max_request_size 100M; # 允许更大的请求/文件 # 可选:设置单个应用的内存上限 # app_memory_limit 100M; } }
修改后重启服务:sudo systemctl restart shiny-server
- 压缩RData后部署:把原RData压缩成.gz包,加载时通过gz连接读取,减少磁盘占用同时不影响加载:
# 压缩保存原RData con <- gzfile("tri_naiveBayes.RData.gz", "wb") save(tri_naiveBayes, file = con) close(con) # Shiny应用中加载压缩后的文件 con <- gzfile("tri_naiveBayes.RData.gz", "rb") load(con) close(con)
内容的提问来源于stack exchange,提问作者Audrey
相关产品推荐
相关产品推荐

