R语言使用二元正态分布模拟时触发while循环参数长度为零错误
错误原因
- 核心问题是你没有正确维护计数变量
i:原单变量实现中你每次外层循环都会单独初始化i <- 1,但修改后的二元版本中,你将计数存在了e_i$i中,没有声明单独的全局i变量。当你在while循环内执行e_i$i <- i + 1时,i本身未定义,直接导致赋值失败,e_i的生成逻辑中断,因此while判断条件中的e_i$X1、e_i$X2变为长度为0的空值,触发报错。 - 额外冗余问题:你不需要把计数变量存到生成随机数的data.frame里,单独维护
i变量和原有逻辑对齐即可,能避免很多不必要的错误。
修复后的代码
library(MASS) # 定义二元正态协方差矩阵 Sigma <- matrix( c(1, 0.5, 0.5, 1), nrow = 2, ncol = 2, byrow = TRUE ) res <- matrix(0, nrow = 0, ncol = 3) for (j in 1:100){ # 初始化计数变量 i <- 1 # 第一次生成二元正态随机数,直接取向量元素无需转数据框 e_i <- mvrnorm(n = 1, mu = c(10, 10), Sigma = Sigma) a <- e_i[1] b <- e_i[2] # 循环直到两个值都大于12 while(a < 12 | b < 12) { e_i <- mvrnorm(n = 1, mu = c(10, 10), Sigma = Sigma) a <- e_i[1] b <- e_i[2] i <- i + 1 } x <- c(a, b, i) res <- rbind(res, x) } res <- data.frame(res) colnames(res) <- c("a", "b", "try_times") head(res)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

