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
相关产品推荐
相关产品推荐

