R语言计算多组样本均值向量的总均值 解决代码输出NA问题
错误原因
- 核心报错原因:代码里的
name对象存的是"V1"、"V2"这类字符串,不是你通过assign()创建的实际二项分布样本,直接对字符串求均值会返回NA。 - 逻辑错误:循环内每次执行
avgs = c(mean(name[i]))都会覆盖上一轮的avgs值,最终avgs只会保留最后一轮循环的结果,根本存不下8820个样本的均值。 - 冗余操作:逐一生成
V1到V8820的独立变量完全没必要,会额外占用大量内存,还会增加取值的复杂度。
修正代码
直接预分配存储均值的数组,循环内生成样本后直接计算均值存入数组,不需要创建多余的全局变量,运行效率更高:
set.seed(1865) # 预分配长度为8820的数值型向量,存储所有样本的均值 all_means <- numeric(8820) for(i in 1:8820){ # 直接生成单组样本,临时存储即可 current_sample <- rbinom(n = 139, size = 46, prob = 0.83) # 计算当前样本的均值,存入向量对应位置 all_means[i] <- mean(current_sample) } # 计算所有样本均值的总平均值 total_avg <- mean(all_means) print(total_avg)
如果你一定要保留逐一生成
Vx命名变量的写法,需要用get()函数根据字符串取出对应的实际样本对象,同时逐次追加均值到avgs向量(非常不推荐这种写法,内存占用远高于上面的实现):set.seed(1865) avgs <- c() for(i in 1:8820){ var_name <- paste0("V", i) assign(var_name, rbinom(139, 46, 0.83)) avgs <- c(avgs, mean(get(var_name))) } avg <- mean(avgs) print(avg)
内容的提问来源于stack exchange,提问作者A Burial At Ornans
相关产品推荐
相关产品推荐

