Shiny App部署至shinyapps.io时/data目录.rda数据加载失败求助
问题:Shiny App部署到shinyapps.io后无法加载/data目录的.rda数据
部署后日志报错:
Error : object 'mydata' not found
The application failed to start. Exit status 1
本地以包形式开发时可正常加载/data目录的.rda文件,但部署后出现上述错误。数据通过/data-raw目录预处理后,用以下代码保存到/data目录:
mydata = data.frame( label = c("NT","NT") , ess = c("02","04") , tot = c(580, 20) ) usethis::use_data(mydata, overwrite = T) # saves mydata.rda in /data
项目文件结构包含app.R,/R目录下有ui.R、server.R、global.R,代码如下:
ui.R
library(shiny) ui <- function(request) { tagList( shiny::textOutput("test") ) }
server.R
library(shiny) library(dplyr) library(magrittr) library(tidyr) # Define server logic required to draw a histogram server <- function(input, output) { output$test <- shiny::renderText({ print(mydata) # test to know if mydata is found df_filter = mydata %>% dplyr::filter(ess == "02") df_filter$label[1] # output renderText }) }
global.R
utils::globalVariables(names = c("ess","label","tot")) # to be able to call the columns of mydata in dplyr functions. Not even sure this is useful
app.R
library(shiny) myApp <- function() { shinyApp(ui, server) } myApp()
解决思路与方法
核心原因
本地包开发环境中,devtools::load_all()会自动将/data目录下的.rda文件加载到全局环境,但shinyapps.io部署时是直接执行app.R,不会触发包的自动加载流程,因此mydata对象不存在。
具体解决方案
1. 显式加载数据文件
在global.R中添加代码,手动加载/data目录下的.rda文件,确保mydata在全局环境中可用:
utils::globalVariables(names = c("ess","label","tot")) # 显式加载数据 load(file.path("data", "mydata.rda"))
部署时shinyapps.io的工作目录是项目根目录,file.path("data", "mydata.rda")能正确指向数据文件。
2. 确认部署时/data目录被包含
部署时确保/data目录及其中的mydata.rda文件被上传到shinyapps.io:
- 使用RStudio部署时,在部署窗口的「Files to deploy」中勾选/data目录;
- 若用命令行部署,指定
include参数:
rsconnect::deployApp(include = c("app.R", "R/", "data/"))
3. 验证数据加载路径(可选)
如果仍有问题,可在global.R中添加路径验证代码,排查路径是否正确:
# 打印当前工作目录 print(getwd()) # 检查data目录是否存在 print(dir.exists("data")) # 检查文件是否存在 print(file.exists(file.path("data", "mydata.rda")))
部署后查看日志输出,确认路径和文件存在性。
内容的提问来源于stack exchange,提问作者Oeilbrun
相关产品推荐
相关产品推荐

