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

Coursera R编程作业报错:Error in file(file, "rt") : cannot open the connection

问题分析与修正代码

你的代码存在几个核心问题,直接导致了文件无法打开的报错,同时还遗漏了作业要求的关键逻辑,以下是具体修正方案:

核心错误点

  1. list.files参数误用
    第二个参数"/"是文件名匹配规则,你需要的是筛选CSV文件,应该写成pattern = "\\.csv$",否则会匹配到目录里的无效内容,甚至找不到目标文件。
  2. sapply调用完全错误
    当前写法sapply(file = directory,"/", read.csv)不符合语法,sapply的第一个参数应该是要遍历的文件路径列表(也就是你定义的files变量),而不是目录路径。
  3. 均值计算索引错误
    dat["pollutant"]返回的是数据框类型,mean()需要的是向量,应该用dat[[pollutant]]或dat[, pollutant]提取列。
  4. 遗漏id参数的处理
    作业要求针对指定id范围的文件计算均值,你的代码完全没用到id参数,这是逻辑遗漏。

修正后的完整代码

pollutantmean <- function(directory, pollutant, id) {
  # 列出目标目录下所有CSV文件的完整路径
  files <- list.files(path = directory, pattern = "\\.csv$", full.names = TRUE)
  # 根据id筛选需要处理的文件
  target_files <- files[id]
  # 遍历读取文件并合并为一个数据框
  merged_data <- do.call(rbind, lapply(target_files, read.csv))
  # 计算指定污染物的均值,忽略NA值
  mean(merged_data[[pollutant]], na.rm = TRUE)
}

关键修改说明

  • 用pattern = "\\.csv$"精准匹配CSV文件,避免读取无关内容;
  • 新增target_files <- files[id],实现作业要求的按id筛选文件逻辑;
  • 用lapply+do.call(rbind)合并数据,比sapply更稳定,能保持数据框结构;
  • 用merged_data[[pollutant]]提取列向量,确保mean()可以正确计算。

调用示例

如果你的specdata文件夹在当前工作目录下,调用方式如下:

# 计算id为1到10的文件中sulfate的均值
pollutantmean("specdata", "sulfate", 1:10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:10:49