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

R语言pollutantmean函数计算均值报错:参数非数值/逻辑值返回NA

问题原因

你用lapply(filepath, read.csv)得到的df是一个列表,每个列表元素对应一个CSV文件的数据框,不是单个统一的数据框。所以df[[pollutant]]是在列表里找名为sulfate或nitrate的元素,这根本不存在,自然会报错说参数不是数值型。

修正方案

有两种简单的修正方式:

方式一:合并列表为单个数据框

把读取后的列表合并成一个大的数据框,再计算对应污染物的均值:

pollutantmean <- function (directory, pollutant, id = 1:332) { 
  # 读取文件
  filenames <- sprintf("%03d.csv",id)
  filepath <- paste(directory, filenames, sep="/")
  
  # 读取所有文件并合并为单个数据框
  df_list <- lapply(filepath, read.csv)
  combined_df <- do.call(rbind, df_list)
  
  # 计算均值
  mean(combined_df[[pollutant]], na.rm = TRUE)
}

方式二:直接提取目标列并计算

不需要合并整个数据框,直接在读取时提取目标列,再合并成向量计算均值:

pollutantmean <- function (directory, pollutant, id = 1:332) { 
  # 读取文件
  filenames <- sprintf("%03d.csv",id)
  filepath <- paste(directory, filenames, sep="/")
  
  # 读取每个文件的目标列,合并为向量
  pollutant_values <- unlist(lapply(filepath, function(file) {
    read.csv(file)[[pollutant]]
  }))
  
  # 计算均值
  mean(pollutant_values, na.rm = TRUE)
}
验证

运行pollutantmean("specdata", "sulfate", 1:10)就能得到正确的均值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:32:19