R语言gRain包querygrain报错length of 'dimnames'[1] not equal to array extent
错误触发原因与解决方案
核心原因
Error in array(values, dimnames = dn) : length of 'dimnames' [1] not equal to array extent
该错误的触发根源是你代码中所有cptable()调用使用的levels=tf参数对应的tf变量未提前定义:
- 你所有节点均为二分类变量,每个节点的CPT值个数均对应2的幂次(根节点2个值、单父节点4个值、双父节点8个值),双节点查询时gRain内部的数组构造逻辑刚好可以匹配概率数量,因此不会触发报错
- 当查询节点数≥3时,需要拼接多个节点的level名称构造多维数组的维度名,此时未定义的
tf要么被识别为长度不符合要求的对象,要么调用了你环境中遗留的其他长度≠2的tf变量,最终出现维度名长度和数组维度不匹配的报错。
修复方案
- 清理环境中可能遗留的错误
tf变量,运行代码:rm(tf) - 在定义所有CPT之前,新增二分类水平定义代码:
tf <- c("TRUE", "FALSE") - 重新运行CPT编译、grain对象构建流程,再执行多节点的联合/条件概率查询即可正常返回结果。
内容的提问来源于stack exchange,提问作者glockm15
相关产品推荐
相关产品推荐

