Coursera R编程作业报错:Error in file(file, "rt") : cannot open the connection
问题分析与修正代码
你的代码存在几个核心问题,直接导致了文件无法打开的报错,同时还遗漏了作业要求的关键逻辑,以下是具体修正方案:
核心错误点
list.files参数误用
第二个参数"/"是文件名匹配规则,你需要的是筛选CSV文件,应该写成pattern = "\\.csv$",否则会匹配到目录里的无效内容,甚至找不到目标文件。sapply调用完全错误
当前写法sapply(file = directory,"/", read.csv)不符合语法,sapply的第一个参数应该是要遍历的文件路径列表(也就是你定义的files变量),而不是目录路径。- 均值计算索引错误
dat["pollutant"]返回的是数据框类型,mean()需要的是向量,应该用dat[[pollutant]]或dat[, pollutant]提取列。 - 遗漏
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
相关产品推荐
相关产品推荐

