开发美国致命警察枪击案Shiny App的R代码部署失败求助
问题诊断与修复建议
针对你部署Shiny App至shinyApps平台失败的问题,结合代码分析出以下常见故障点及修复方案:
1. 数据文件依赖问题
代码中使用read.csv("fatal-police-shootings-data.csv")读取本地文件,但部署时必须确保该CSV文件与app代码在同一目录,且上传至shinyApps时未遗漏。若文件未同步上传,会直接触发"文件不存在"的致命错误。
修复建议:
- 将数据文件放在项目根目录,部署时勾选所有相关文件;
- 或替换为在线数据源(如GitHub Raw链接),避免本地文件依赖:
data <- read.csv("https://raw.githubusercontent.com/washingtonpost/data-police-shootings/master/fatal-police-shootings-data.csv")
2. 冗余依赖包问题
代码加载了highcharter但未实际使用,部署时平台会尝试安装该包,若遇到网络或版本兼容问题,会导致部署中断。
修复建议:
- 删除未使用的
library(highcharter)语句; - 若需保留,可提前在本地确认包版本,并用
renv锁定依赖版本,避免环境不一致。
3. 数据统计逻辑错误
"受害人数最多的十大城市"模块代码存在逻辑错误:直接取filtered()前10行并非按城市计数后的Top10,且代码中引用的n字段不存在,会导致绘图崩溃。
修复建议:
替换该模块代码为正确的统计逻辑:
output$city <- renderPlot({ # 统计每个城市的案件数 city_counts <- table(filtered()$city) city_df <- as.data.frame(city_counts) colnames(city_df) <- c("city", "n") # 取案件数前10的城市 top10_cities <- city_df[order(city_df$n, decreasing = TRUE), ][1:10, ] ggplot(top10_cities, aes(x = reorder(city, desc(n)), y = n)) + geom_bar(stat = "identity", fill = "grey") + theme_bw() + ggtitle("受害人数最多的十大城市") + xlab("城市") + ylab("受害人数") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 避免城市名重叠 })
4. 缺失值处理问题
原始数据中long、lat、age等字段存在缺失值,会导致leaflet地图绘图失败、geom_density年龄分布图异常。
修复建议:
在filtered()反应式函数中添加缺失值过滤:
filtered <- reactive({ data <- read.csv("fatal-police-shootings-data.csv") data <- data[data$year == input$year, ] # 过滤地图所需的经纬度缺失值 data <- data[!is.na(data$long) & !is.na(data$lat), ] # 过滤年龄缺失值(可选) data <- data[!is.na(data$age), ] data })
5. 提交按钮的反应式逻辑问题
使用submitButton会导致所有反应式输出仅在点击按钮后更新,初始加载时可能因数据未准备齐全报错。
修复建议:
改用actionButton配合eventReactive,确保初始化时也能加载数据:
# UI部分替换submitButton sidebarPanel( sliderInput("year","选择年份:", min = 2015,max = 2020,value = 2020), actionButton("filter_btn", "筛选数据") ) # Server部分修改filtered为eventReactive filtered <- eventReactive(input$filter_btn, { data <- read.csv("fatal-police-shootings-data.csv") data <- data[data$year == input$year, ] data <- data[!is.na(data$long) & !is.na(data$lat), ] data }, ignoreNULL = FALSE) # 初始化时自动执行一次
部署前必做测试
- 本地运行app,逐一检查所有选项卡,确认无报错;
- 使用
rsconnect::showLogs()查看shinyApps的部署日志,日志会明确标注错误原因(如文件缺失、包安装失败、代码逻辑错误等); - 确认本地所有依赖包均可正常加载,无版本冲突。
内容的提问来源于stack exchange,提问作者Alvin Samuel Jeyachander
相关产品推荐
相关产品推荐

