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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:36:00