do_one(nmeth) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 1)

问题描述 投票:0回答:6

我有一个数据表(“范数”),其中包含数字 - 至少我可以看到 - 以下形式的标准化值:

A screenshot of the table

当我执行时

k <- kmeans(norm,center=3)

我收到以下错误:

Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)

你能帮我吗?谢谢!

r machine-learning cluster-analysis data-mining k-means
6个回答
31
投票

kmeans 无法处理具有 NA 值的数据。

均值和方差不再明确定义,并且您不再知道哪个中心最接近。


17
投票

do_one(nmeth) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 1)

此错误也是由于表中存在非数字值所致。


4
投票

所有遇到“ 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

3
投票

对于错误说明:

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

1
投票

如果您将分组数据帧传递给 kmeans 函数,您也会收到此错误。 我使用 dplyr 准备了数据,并且必须使用 ungroup() 关闭才能在之后使用 kmeans。


0
投票
此错误也可能是由于使用不变化(即恒定)的值列缩放数据而引起的。这是因为这些列的标准差为零,并且缩放会产生

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
    
© www.soinside.com 2019 - 2024. All rights reserved.