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

在shinyapps.io部署含自定义R包的Shiny应用失败求助

解决Shiny Apps部署时自定义R包NxT的安装问题

看起来你在把依赖自定义包NxT的Shiny应用部署到shinyapps.io时踩了两个坑,我来帮你一步步梳理解决思路:

先分析两个报错的原因

报错1:无法获取NxT的包记录,提示尝试使用CRAN版本

当你同时写了devtools::install_github("zertupo/NxT")和library(NxT)时,shinyapps.io的包检测机制会优先尝试从CRAN查找这个包——但你的NxT是自定义包,根本不在CRAN上,所以它找不到包记录就报错了。而且部署过程中,shinyapps.io会先扫描代码里的library()调用提前处理依赖,这时候它还没执行devtools::install_github,自然找不到这个包。

报错2:提示不是R包,找不到next_word函数

你只保留devtools::install_github时,报错说没有DESCRIPTION,大概率是你的GitHub仓库结构有问题——本地的包有DESCRIPTION,但可能你推送到GitHub时,DESCRIPTION文件不在仓库根目录,或者仓库里缺少R包必需的其他文件(比如NAMESPACE、R/目录等),导致devtools拉取后识别不了这是个标准R包。另外,就算install_github执行成功,部署时如果没有显式的library(NxT)或者NxT::next_word()调用,shinyapps.io可能不会正确加载包,也会出现找不到函数的问题。

具体解决步骤

步骤1:确认GitHub仓库的R包结构正确

先检查你的GitHub仓库zertupo/NxT,确保根目录下有这些必需文件:

  • DESCRIPTION(必填,包含包的元信息)
  • NAMESPACE(必填,负责导出next_word这类需要外部调用的函数)
  • R/目录(里面存放你的R代码文件)
    如果本地包结构是对的,重新推送整个包目录到GitHub,别漏掉任何关键文件。

步骤2:修改Shiny应用代码,正确处理包安装与加载

在你的app.R(或ui/server文件)最开头,按以下顺序编写代码:

# 先检查NxT是否已安装,未安装则从GitHub拉取
if (!require("NxT")) {
  devtools::install_github("zertupo/NxT", dependencies = TRUE)
  library(NxT)
}

这样做的好处是:部署时会先判断包是否存在,不存在再执行安装,而且安装后立刻加载,避免shinyapps.io的依赖检测提前报错。另外,建议你调用包内函数时尽量用NxT::next_word()这种显式方式,让shinyapps.io更清晰地识别到这个依赖。

步骤3:如果GitHub安装方式失效,尝试本地包打包上传

如果GitHub安装始终有问题,你可以把本地的NxT包打包成tar.gz文件,放到Shiny应用目录的子文件夹(比如新建packages/目录),然后在代码里这样安装:

if (!require("NxT")) {
  install.packages("./packages/NxT_1.0.0.tar.gz", repos = NULL, type = "source")
  library(NxT)
}

注意替换成你实际的包版本号,这样部署时shinyapps.io会直接从本地安装包,不用依赖GitHub。

步骤4:查看shinyapps.io的完整部署日志

部署失败后,去shinyapps.io控制台查看完整日志,里面会有更细节的错误信息——比如是不是网络问题导致拉取不到GitHub仓库,或者包的依赖包没有安装完全。如果有依赖的其他非CRAN包,也要正确指定它们的安装来源。

内容的提问来源于stack exchange,提问作者Aurélien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:46