使用R语言Neuralnet库生成混淆矩阵时遇长度匹配错误求助
解决R中生成混淆矩阵时的"all arguments must have the same length"错误
问题根源
你的代码触发错误的核心原因有两个:
- 变量名拼写错误:生成预测标签的变量是
pred_label,但调用table()时误写为prediction_label,R无法找到该变量,实际传入的是长度为0的对象,与test$y长度不匹配。 - 列名引用语法错误:
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
相关产品推荐
相关产品推荐

