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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:16