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

R语言特征标准化后调用seq函数报错'from必须为有限值'问题求助

R二分类任务网格生成报错修复方案

错误根因

  • dplyr::select()操作未赋值回原数据框,导致后续使用的bes仍为原始全字段数据,列索引不符合预期,若对应索引列非数值型,scale()后会生成缺失值。
  • 数据集拆分时subset的筛选条件误用赋值符=而非逻辑判断符==:subset(bes, split=T)会在函数内部创建局部变量split赋值为TRUE,最终training取全量数据、testing取空数据集,取极值时会返回非有限值。
  • 测试集单独标准化不符合规范,会造成数据泄露。

修复后可运行代码

library(caTools)
library(dplyr)
# 字段筛选后赋值回原对象
bes <- dplyr::select(bes, age, lr_scale, euRefVoteAfter)
split <- sample.split(bes$euRefVoteAfter, SplitRatio = 0.75)
# 拆分时用逻辑判断符==匹配拆分标记
training <- subset(bes, split == TRUE)
testing <- subset(bes, split == FALSE)
# 统一用训练集的统计量做标准化,避免数据泄露
train_scale_res <- scale(training[-3])
training[-3] <- train_scale_res
testing[-3] <- scale(testing[-3],
                     center = attr(train_scale_res, "scaled:center"),
                     scale = attr(train_scale_res, "scaled:scale"))
library(class)
# 极值计算加na.rm=T兜底,过滤原始数据可能存在的缺失值
X1 <- seq(min(training[,1], na.rm = TRUE) - 1, max(training[,1], na.rm = TRUE) + 1, by = 0.01)
X2 <- seq(min(training[,2], na.rm = TRUE) - 1, max(training[,2], na.rm = TRUE) + 1, by = 0.01)

补充说明

如果原始数据的age或lr_scale字段本身存在大量缺失值,建议先做缺失值插补再执行后续建模操作,避免过滤缺失值后结果偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:09:03