全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2096 5
2023-10-08
下面是书上代码,自己在运行过程中报错,也画不出书上的图示。本人纯小白一个,请大神不吝指导。

library(flexclust)
data(nutrient)
head(nutrient, 4)
d <- dist(nutrient) #dist(x, method=)计算各个观测之间的距离,默认欧氏距离
as.matrix(d)[1:4,1:4]
str(d)
class(d)
row.names(nutrient) <- tolower(row.names(nutrient))
nutrient.scaled <- scale(nutrient)
d <- dist(nutrient.scaled)
fit.average <- hclust(d, method="average")
library(ggplot2)
library(ggdendro)
ggdendrogram(fit.average) + labs(title="Average Linkage Clustering")

library(NbClust)
library(factoextra)
nc <- NbClust(nutrient.scaled, distance="euclidean",
                min.nc=2, max.nc=15, method="average")  [size=14.6667px]这一步运行后报错:I[size=14.6667px]n pf(beale, pp, df2) : 产生了NaNs
fviz_nbclust(nc)

[size=14.6667px]这一步运行后报错:[size=14.6667px]Error in if (class(best_nc) == "numeric") print(best_nc) else if (class(best_nc) ==  :
  the condition has length > 1
这是书上的代码和截图,实际操作的时候会报错,问题出在哪儿呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2023-10-8 13:45:01
问题可能出在NbClust函数的参数设置上。具体来说,报错信息中提到了distance="euclidean",这表明在计算距离时使用的是欧氏距离。但是根据你之前的代码,已经对数据进行了标准化处理,因此可能需要使用标准化后的数据进行距离计算。

可以尝试将nutrient.scaled作为NbClust函数的输入,并将distance参数设置为"euclidean",看看是否仍然会报错。另外,还可以检查一下nutrient.scaled的数据类型和维度,确保数据格式正确。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-10-9 10:16:52
sun_man 发表于 2023-10-8 13:45
问题可能出在NbClust函数的参数设置上。具体来说,报错信息中提到了distance="euclidean",这表明在计算距 ...
感谢大侠,nutrient.scaled数据查看了一下是矩阵;我自己加了一下“as.data.frame”后,又能跑通了;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-10-9 13:29:36
sun_man 发表于 2023-10-8 13:45
问题可能出在NbClust函数的参数设置上。具体来说,报错信息中提到了distance="euclidean",这表明在计算距 ...
又出问题了,不知道啥情况,今天新的例子

library(fMultivar)
library(ggplot2)
set.seed(1234)
df <- rnorm2d(1000, rho=.5)
df <- as.data.frame(df)
ggplot(df, aes(x=V1, y=V2)) +
  geom_point(alpha=.3) + theme_minimal() +
  labs(title="Bivariate Normal Distribution with rho=0.5")

library(NbClust)
library(factoextra)
nc <- NbClust(df, min.nc=2, max.nc=15, method="kmeans")
fviz_nbclust(nc)
最后一行又出问题了,大神帮忙再看看
“Error in if (class(best_nc) == "numeric") print(best_nc) else if (class(best_nc) ==  :
  the condition has length > 1”
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-10-9 13:48:12
瓜牛冻 发表于 2023-10-9 13:29
又出问题了,不知道啥情况,今天新的例子

library(fMultivar)
这个错误可能是因为你在使用fviz_nbclust()函数时传递了一个长度大于1的条件。根据错误信息,可能是在fviz_nbclust()函数的参数中存在问题。
请确保fviz_nbclust()函数的参数是正确的。这个函数需要指定一个聚类方法(method)和一个包含数据的数据框(data)作为参数。你可以检查一下fviz_nbclust()函数的调用,确保这两个参数都正确设置。
另外,请确保你已经正确安装了factoextra和NbClust这两个包,并且已经加载了它们。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2023-10-11 08:39:38
sun_man 发表于 2023-10-9 13:48
这个错误可能是因为你在使用fviz_nbclust()函数时传递了一个长度大于1的条件。根据错误信息,可能是在fvi ...
昨天晚上研究了一下(可能还是自己太菜了)……查看了一下nc <- NbClust(df, min.nc=2, max.nc=15, method="kmeans")运行后nc$best_nc的数据类型发现是“matrix”“array”;自己强制用as.numeric改变其类型后,再运行,的确不报错了,但是结果也和书上预期不一致
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群