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

使用R语言Neuralnet库生成混淆矩阵时遇长度匹配错误求助

解决R中生成混淆矩阵时的"all arguments must have the same length"错误

问题根源

你的代码触发错误的核心原因有两个:

  1. 变量名拼写错误:生成预测标签的变量是pred_label,但调用table()时误写为prediction_label,R无法找到该变量,实际传入的是长度为0的对象,与test$y长度不匹配。
  2. 列名引用语法错误:data.frame(max.col(pred))生成的列名是max.col.pred.,包含特殊字符,直接在mutate中引用会导致语法错误,进而生成异常的pred_label。

修正后的完整代码

library(neuralnet)
library(tidyverse)
library(caret) # 补充加载createDataPartition所属的caret包

# 构造模拟数据
x1 = rep(1:3, times = 40)
x2 = rep(1:3, times = 40)
x3 = rep(1:3, times = 40)
x4 = rep(1:3, times = 40)
x5 = rep(1:3, times = 40)

y = rep(0:1, times = 60)
y <- as.factor(y)

dat <- data.frame(y, x1, x2, x3, x4, x5)

# 划分训练集和测试集
set.seed(123)
indexes = createDataPartition(dat$y, p = .85, list = F)
train = dat[indexes, ]
test = dat[-indexes, ] 

# 训练神经网络模型
NN1 <- neuralnet(y ~ ., train,
                 linear.output = FALSE,
                 stepmax = 1e7)

# 生成预测标签并构建混淆矩阵
pred <- predict(NN1, test)
labels <- c("0", "1")
# 简化预测标签生成逻辑,直接通过max.col匹配标签
pred_label <- labels[max.col(pred)]
# 统一数据类型为因子,与test$y保持一致
pred_label <- as.factor(pred_label)

# 生成混淆矩阵
table(test$y, pred_label)

关键修正说明

  • 补充加载caret包:原代码使用createDataPartition()但未加载对应包,会导致前置报错,需补上。
  • 简化预测标签生成:直接用labels[max.col(pred)]获取标签,避免冗余的数据框操作,降低出错风险。
  • 统一变量类型:将pred_label转为因子,与test$y类型匹配,确保table()能正确生成混淆矩阵。
  • 修正变量名:调用table()时使用正确的pred_label变量,解决因变量不存在导致的长度不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:27:30