R语言for循环计算亲子身高均值返回全NA问题求助
问题分析与修正
你的代码出现全NA的原因有几个核心问题:
- 循环范围错误:
for (i in length(galton$parent))只会让i取到一个值(即数据集的总长度,比如928),不会遍历1到928的所有索引,导致只计算了最后一行的均值,前面的位置都是空值。 - 向量初始化位置错误:
g_mean<-c()放在循环内部,每次循环都会把之前的计算结果清空,最终只保留最后一次的计算(但因为范围错误,这一步也没起作用)。 - 不必要的重复赋值与提前终止:
g_mean<-c(g_mean,g_mean[i])会重复添加同一个值,而return(g_mean[i])会直接终止循环,导致循环只执行一次,且返回单个值,无法得到完整的均值向量。
修正后的代码
高效写法(推荐)
先初始化一个和目标长度一致的空数值向量,再逐个赋值:
# 初始化与parent长度相同的空向量 g_mean <- numeric(length(galton$parent)) # 遍历每个索引 for (i in seq_along(galton$parent)) { g_mean[i] <- (galton$parent[i] + galton$child[i]) / 2 }
逐步添加写法(符合你最初的思路)
如果习惯逐步构建向量,可以把初始化放在循环外,每次添加计算结果:
g_mean <- c() for (i in seq_along(galton$parent)) { current_mean <- (galton$parent[i] + galton$child[i]) / 2 g_mean <- c(g_mean, current_mean) }
两种写法都能得到正确的父母与孩子身高均值向量,其中第一种因为提前分配了内存,运行效率更高。
内容的提问来源于stack exchange,提问作者GuGuGu
相关产品推荐
相关产品推荐

