将R Shiny应用封装为R包后调用失败的问题求助
解决R包函数未导出的问题
问题原因
你遇到的报错核心是:cohortpull函数没有被添加到包的NAMESPACE导出列表中。R包安装后,只有明确导出的函数才能通过rwdexpull::cohortpull()或加载包后直接调用;而直接在控制台运行函数代码是在全局环境执行,不受包的命名空间限制,所以能正常工作。
解决方案
方法1:用roxygen2自动导出(推荐,符合现代R包开发流程)
在你的函数文档注释中添加@export标签,修改后的代码如下:
#' Pull data from RWDEx data base #' #' @export cohortpull <- function(){ appDir <- system.file("pullapp", package = "rwdexpull") if (appDir == "") { stop("Could not find pullapp. Try re-installing `rwdexpull`.", call. = FALSE) } shiny::runApp(appDir, display.mode = "normal") }
执行以下命令更新包的命名空间和文档:
# 如果使用devtools devtools::document() # 或者直接用roxygen2 roxygen2::roxygenize()
这会自动在包根目录的NAMESPACE文件中添加export(cohortpull)语句。
方法2:手动修改NAMESPACE文件
找到包根目录下的NAMESPACE文件,手动添加一行导出声明:
export(cohortpull)
保存文件后重新安装包。
验证步骤
- 重新安装包:
devtools::install()(或用RStudio的"Install and Restart"按钮) - 重启R会话
- 加载包:
library(rwdexpull) - 调用函数:
cohortpull()
此时函数应该能正常启动Shiny应用,不再出现导出错误。
内容的提问来源于stack exchange,提问作者ponyhd
相关产品推荐
相关产品推荐

