我有一个数据表(“范数”),其中包含数字 - 至少我可以看到 - 以下形式的标准化值:
当我执行时
k <- kmeans(norm,center=3)
我收到以下错误:
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
你能帮我吗?谢谢!
kmeans 无法处理具有 NA 值的数据。
均值和方差不再明确定义,并且您不再知道哪个中心最接近。
do_one(nmeth) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 1)
此错误也是由于表中存在非数字值所致。
所有遇到“ do_one(nmeth) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 1)”问题的人 而不是
results <- kmeans(iris.features,3)
results
写下以下内容,请注意iris中的大小写,写出你一开始使用的任何内容
results <- kmeans(na.omit(irisa.features),3) # this helps in omitting NA
results
对于错误说明:
do_one(nmeth) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 1)
您上面发布的数据集包含缩放条目,原因一定是您的数据集中有 NA 值,因此通过以下代码省略它们。
km_cluster <- kmeans(na.omit(MyData), 3)
km_cluster
km_cluster$withinss
km_cluster$tot.withinss/km_cluster$betweenss
如果您将分组数据帧传递给 kmeans 函数,您也会收到此错误。 我使用 dplyr 准备了数据,并且必须使用 ungroup() 关闭才能在之后使用 kmeans。
NaN
值。下面的代码通过排除没有变化的列以编程方式修复了此问题。
# Data
df=copy(mtcars)
df$Constant=2
# Kmeans
fit=kmeans(scale(df),centers=2) # Error
# Identify columns with SD=0
tmp=sapply(df,sd)
tmp=names(tmp)[tmp==0]
# Kmeans
tmp1=setdiff(names(df),tmp)
fit=kmeans(scale(df[,tmp1]),centers=2) # Works