在执行 do_one(nmeth) 时发生错误:外部函数调用中的 NA/NaN/Inf(参数1)。

28
我有一个数据表(“norm”),其中包含以下形式的数字 - 至少在我所看到的范围内 - 归一化值:

表格截图

当我执行时

k <- kmeans(norm,center=3)

我收到了以下错误:

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

你能帮帮我吗?谢谢!


1
你是否检查过数据中是否存在 NaN/NA/Inf?你可以使用 is.na()is.finite() 函数进行检查。 - Ujjwal Kumar
是的,我的文件表中有很多“NAs”,但我认为这不应该是一个问题?! is.finite() 返回了很多 TRUEs,但也有一些 FALSEs。 我该如何解决这个问题? - Jonathan Rhein
1
您需要从数据中删除 NA/Inf/NaN 值。有关详细信息,请参阅“缺失值插补”方法。一种简单的方法是将它们替换为行/列平均值。 - Ujjwal Kumar
@UjjwalKumar 谢谢! - Jonathan Rhein
5个回答

30

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

由于均值和方差不再被定义,因此您不再知道哪个中心点最近。


Kmeans 无法处理具有 NA、INF 和常量的数据。 - Nip

17

在执行 do_one(nmeth) 函数时出错:外部函数调用中 arg 1 存在 NA/NaN/Inf。

此错误也可能由表格中存在非数字值所致。


4
你们中有人遇到了“在执行do_one(nmeth)时出现错误: 外部函数调用中的NA/NaN/Inf (参数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(第1个参数)

您上面发布的数据集包含缩放条目,原因可能是您的数据集中存在NA值,因此请使用以下代码将其省略。

km_cluster <- kmeans(na.omit(MyData), 3)
km_cluster
km_cluster$withinss
km_cluster$tot.withinss/km_cluster$betweenss

1

如果你将一个分组的数据框传递给kmeans函数,你也会得到这个错误。我使用dplyr准备了我的数据,并在使用kmeans之后关闭了ungroup()。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接