golem开发的ShinyApp跨设备安装后读取文件时报DESCRIPTION缺失错误
报错原因
该错误由运行时查找R包DESCRIPTION文件失败触发:
本地开发阶段你的工作目录为golem项目根目录,自带符合^Package开头规则的DESCRIPTION文件,因此路径查找逻辑可以正常运行。当你将R包编译安装到其他设备后,用户启动ShinyApp时的默认工作目录为系统文档目录(即报错中提到的C:\Users\Della Rocca\Documents),该目录下不存在对应DESCRIPTION文件,因此触发报错。
报错的触发点为你调用的read_advise_lipidomics函数内部:你已确认传入的datapath路径正确,说明该函数内部使用了here::here()、rprojroot::find_package_root()、golem::get_golem_root()这类依赖DESCRIPTION定位项目根目录的路径函数,和用户侧的运行环境不兼容。
你看到的devtools::check文档警告和本次运行报错无关联,属于R包规范类问题。
解决方法
- 优先修改
read_advise_lipidomics函数的内部路径逻辑,移除所有依赖DESCRIPTION查找根目录的函数,所有路径拼接全部基于传入的datapath参数完成,读取文件统一使用file.path(datapath, "目标文件名")的格式。 - 如果需要访问R包内置的静态文件(比如模板文件、参考数据等),不要使用相对项目根的路径,统一用
system.file()函数调用,示例格式为system.file("extdata", "目标文件名", package = "你的R包名称"),该函数会自动匹配R包的安装位置生成正确的绝对路径,无需依赖运行时的工作目录。 - 检查App全局代码中是否存在
setwd(golem::get_golem_root())这类强制设置工作目录到项目根的逻辑,这类逻辑仅在开发环境生效,安装后运行时会触发错误,需要全部删除。 - 可选修复文档警告:给对应函数的Rd文档补充缺失的参数说明,即可消除devtools::check的警告,符合R包开发规范。
内容的提问来源于stack exchange,提问作者Fabio DR
相关产品推荐
相关产品推荐

