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

Coursera作业:R语言complete函数nobs值恒定问题求助

问题排查与修正方案

问题分析

你的代码存在两个核心错误,导致nobs值始终恒定:

  • 未读取目标文件内容:原代码中mdata是目录下所有文件的路径列表(字符串向量),直接对mdata调用complete.cases(),实际是判断文件名是否为缺失值,而非读取文件内的观测数据。因为所有文件名都有效,所以sum(complete.cases(mdata))会返回固定的文件总数(即你看到的333),和每个文件的实际观测数完全无关。
  • 循环赋值逻辑错误:循环内每次直接覆盖nobs为单个值,而非为每个id对应的文件计算结果并追加到向量中。最终返回时,单个nobs值会被自动重复成与id长度一致的向量,导致所有行的nobs都相同。

修正后的代码

complete <- function(directory, id = 1:332) {
  # 获取目录下所有文件的完整路径
  file_paths <- list.files(directory, full.names = TRUE)
  # 初始化与id长度匹配的结果向量
  nobs <- numeric(length(id))
  
  for (idx in seq_along(id)) {
    # 取出当前循环对应的id
    current_id <- id[idx]
    # 读取对应id的文件数据
    data <- read.csv(file_paths[current_id])
    # 计算当前文件的完全观测案例数并赋值
    nobs[idx] <- sum(complete.cases(data))
  }
  
  # 返回包含id和对应nobs的数据框
  data.frame(id = id, nobs = nobs)
}

修正说明

  1. 读取文件内容:循环中通过read.csv(file_paths[current_id])读取对应id的文件数据,真正针对观测数据计算完全案例数。
  2. 结果存储逻辑:初始化nobs为与id长度一致的向量,循环中按索引为每个id对应的位置赋值,确保每个id匹配正确的观测数。
  3. 文件索引匹配:Coursera的specdata目录下文件命名为001.csv到332.csv,list.files返回的路径顺序正好对应id从1到332,因此直接用file_paths[current_id]即可正确匹配目标文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:32:38