楼主: 瓜牛冻
516 5

[问答] R语言实战(第三版),16章聚类分析碰到的问题 [推广有奖]

  • 0关注
  • 0粉丝

小学生

92%

还不是VIP/贵宾

-

威望
0
论坛币
19 个
通用积分
0.1500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1947 点
帖子
5
精华
0
在线时间
15 小时
注册时间
2019-12-2
最后登录
2024-1-19

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
下面是书上代码,自己在运行过程中报错,也画不出书上的图示。本人纯小白一个,请大神不吝指导。

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
这是书上的代码和截图,实际操作的时候会报错,问题出在哪儿呢?
二维码

扫码加我 拉你入群

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

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

关键词:R语言实战 聚类分析 R语言 Library BRARY

沙发
sun_man 在职认证  发表于 2023-10-8 13:45:01 |只看作者 |坛友微信交流群
问题可能出在NbClust函数的参数设置上。具体来说,报错信息中提到了distance="euclidean",这表明在计算距离时使用的是欧氏距离。但是根据你之前的代码,已经对数据进行了标准化处理,因此可能需要使用标准化后的数据进行距离计算。

可以尝试将nutrient.scaled作为NbClust函数的输入,并将distance参数设置为"euclidean",看看是否仍然会报错。另外,还可以检查一下nutrient.scaled的数据类型和维度,确保数据格式正确。
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

藤椅
瓜牛冻 学生认证  发表于 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”

使用道具

报纸
sun_man 在职认证  发表于 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这两个包,并且已经加载了它们。
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

地板
瓜牛冻 学生认证  发表于 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改变其类型后,再运行,的确不报错了,但是结果也和书上预期不一致

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 21:52