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

开发美国致命警察枪击案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) # 初始化时自动执行一次

部署前必做测试

  1. 本地运行app,逐一检查所有选项卡,确认无报错;
  2. 使用rsconnect::showLogs()查看shinyApps的部署日志,日志会明确标注错误原因(如文件缺失、包安装失败、代码逻辑错误等);
  3. 确认本地所有依赖包均可正常加载,无版本冲突。

内容的提问来源于stack exchange,提问作者Alvin Samuel Jeyachander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:54:24