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

R语言代码调用返回NULL值求助:无法获取死亡统计数据

排查R代码返回NULL的问题及解决方案

核心排查方向

返回NULL的根源几乎都是筛选后的子数据集yr_data为空,或者目标列不存在,按以下步骤逐一验证:

  1. 检查原始数据集mcod_df的基本信息
    运行以下代码确认数据结构和关键列是否存在:

    # 查看数据集列名和类型
    str(mcod_df)
    # 检查year列的取值范围
    unique(mcod_df$year)
    # 确认关键列是否存在
    c("year", "deaths", "state", "multiple_cause_of_death", "five_year_age_groups") %in% colnames(mcod_df)
    
    • 如果输出的布尔向量里有FALSE,说明对应列名拼写错误或不存在,这是最常见的原因。
    • 如果year列的取值是字符型(比如"2020"),而循环里的year是数值型(2020),==匹配会失败,导致yr_data为空。
  2. 验证循环内的筛选结果
    在循环中加入代码,每次筛选后检查子数据集的行数:

    for (year in years) {
        yr_data <- mcod_df[mcod_df$year == year, ]
        # 打印当前年份的子数据行数
        cat("Year", year, "has", nrow(yr_data), "rows\n")
        
        # 后续代码不变...
    }
    

    如果输出显示某年份的行数为0,说明该年份在原始数据中没有匹配记录,或者筛选条件不匹配。

  3. 检查deaths列的有效性
    如果yr_data有数据但sum(yr_data$deaths)返回NULL,大概率是deaths列不存在,或者列名拼写错误(比如death、Deaths)。


优化后的代码示例

针对你的需求,用dplyr链式操作更简洁,同时加入数据校验:

library(dplyr)
library(tidyr)

years <- c(2018, 2019, 2020, 2021)

# 统一年份类型(根据原始数据调整,这里假设转为数值型)
mcod_df <- mcod_df %>% mutate(year = as.numeric(year))

# 计算年度总死亡数,转为列表格式
yearly_totals <- mcod_df %>%
    filter(year %in% years) %>%
    group_by(year) %>%
    summarise(total_deaths = sum(deaths, na.rm = TRUE)) %>%
    tibble::column_to_rownames("year") %>%
    as.list()

# 计算分州年度死亡数,按年份嵌套为列表
state_totals <- mcod_df %>%
    filter(year %in% years) %>%
    group_by(year, state) %>%
    summarise(total_deaths = sum(deaths, na.rm = TRUE)) %>%
    nest(data = -year) %>%
    tibble::column_to_rownames("year") %>%
    pull(data) %>%
    setNames(years)

# 调用示例
yearly_totals[["2020"]]
print(state_totals[["2020"]], row.names = FALSE)

关键注意事项

  • 用na.rm = TRUE处理缺失值,避免sum返回NA而非预期结果。
  • 确保筛选条件的类型一致(比如字符型年份和数值型年份要统一转换)。
  • 嵌套式操作替代循环,代码更简洁且易维护。

内容的提问来源于stack exchange,提问作者SWeatherby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:07:36