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

R语言e1071包cmeans运行NAs introduced by coercion报错排查

错误原因
  • 传入cmeans()的输入数据不符合要求:模糊C均值聚类仅支持全数值类型的输入,代码中仅删除了SNAMA.SMA列,但数据集中存储学校名称的文本列NAMA.SMA仍留在特征集中。该列为字符串类型,函数运行时会尝试将其强制转换为数值,转换失败就会生成NA值,对应提示中的NAs introduced by coercion警告;当NA值传入底层的C语言计算接口时,就会触发NA/NaN/Inf in foreign function call (arg 1)的报错。
  • 代码存在拼写笔误:定义的特征数据框名为data.features,但中间写了View(dataku.features),dataku.features是不存在的对象,这行本身也会触发运行错误。
  • 若删除所有非数值列后仍报错,需检查数值列中是否存在原生缺失值、无穷值,这类异常值同样会导致函数运行中断。
修正方案

按照以下逻辑调整代码即可正常运行:

  1. 剔除特征集中所有非数值的文本/因子列,不要把名称类标识列传入聚类函数
  2. 修正拼写笔误
  3. 聚类前检查并处理数值列中的缺失值
  4. 绘图时不要把非数值的名称列传入plot()的散点矩阵参数

修正后的可运行代码:

# 读取数据
data <- read.delim(file.choose(), header = T)
data.features <- data

# 修正:删除实际存在的名称列NAMA.SMA,而非拼写错误的SNAMA.SMA
data.features$NAMA.SMA <- NULL

# 检查列类型,确认所有剩余列均为数值型
str(data.features)
# 处理数值列中可能存在的缺失值,这里直接删除含缺失值的行,也可根据需求选择填充方式
data.features <- na.omit(data.features)

# 加载包运行模糊C均值聚类
library(e1071)
result <- cmeans(data.features, 3, 20, verbose = TRUE, method = "cmeans", m = 2)
print(result)

# 绘图时仅传入数值特征列,避免文本列干扰绘图
plot(data[c("SISWA","GURU","KARYAWAN","PEKERJA","PENGAWAS")], col = result$cluster)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:33:27