R语言:用函数生成值列表绘制直方图时出现NA值问题求助
问题分析与解决
问题出在未预先初始化zscores向量的长度。在R中,直接对未定义的向量使用索引赋值时,R会动态扩展向量,但这个过程容易受已有环境变量影响(比如你之前可能定义过长度不符的zscores),导致循环中大部分位置无法正确赋值,最终出现大量NA。
修正方案1:预先初始化向量 + 循环
先创建一个长度为1000的空数值向量,再循环赋值:
zscores <- numeric(1000) for (i in 1:1000) { zscores[i] <- sum(runif(12)) - 6 # sum比Reduce("+", ...)更简洁高效 } hist(zscores)
修正方案2:用向量化操作替代循环(推荐)
R更适合向量化编程,用replicate可以直接生成目标向量,无需手动循环:
zscores <- replicate(1000, sum(runif(12)) - 6) hist(zscores)
解释:
numeric(1000)会生成一个长度为1000、初始值为0的向量,循环时直接覆盖对应位置,避免NA产生。sum(runif(12))和你原来的Reduce("+", runif(12))功能完全一致,但写法更直观。replicate函数会重复执行括号内的表达式指定次数(这里是1000次),直接返回结果向量,代码更简洁且效率更高。
内容的提问来源于stack exchange,提问作者user24121912
相关产品推荐
相关产品推荐

