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

R语言掷骰函数replicate报错:non-conformable arrays原因及修复

错误原因及修复方法

错误原因

这个错误的核心是维度不匹配:你用来比较的两个对象一个是数组/矩阵,另一个是单个数值,&运算符要求两边对象的维度完全一致才能逐元素比较,维度不兼容时就会抛出这个错误。

大概率是你封装的函数里生成骰子结果的逻辑出了问题:比如误用replicate()生成多组骰子值,或者调用sample()时没指定生成单个值,导致die1或die2变成了向量/数组,和目标值a/b(单个数值)比较后,返回的结果维度不一致,无法用&合并判断。

修复方法

正确的函数实现

以下是修正后的单轮掷骰子逻辑函数,确保每次操作都是标量级别的比较:

# 定义函数:传入目标结果(比如c(5,3)),返回掷骰次数
roll_until <- function(target) {
  count <- 0
  target_die1 <- target[1]
  target_die2 <- target[2]
  
  repeat {
    # 每次仅生成单个骰子的结果(标量)
    current_die1 <- sample(1:6, 1)
    current_die2 <- sample(1:6, 1)
    count <- count + 1
    
    # 标量之间的比较,维度完全匹配
    if (current_die1 == target_die1 & current_die2 == target_die2) {
      break
    }
  }
  
  return(count)
}

用replicate重复执行

调用replicate()重复100次,不会再出现维度错误:

# 重复执行100次,得到每次的掷骰次数
run_results <- replicate(100, roll_until(c(5,3)))

# 可以查看结果的统计信息,比如均值
mean(run_results)

关键修复点

  • 确保每次生成的骰子结果是标量:调用sample(1:6, 1)明确指定生成单个值,避免默认生成向量。
  • 函数内部是单轮循环逻辑:每次循环只掷一次两个骰子,直到命中目标,所有比较操作都是单个数值之间的判断,不会出现维度不兼容的问题。

内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:25:21