楼主: drosophilia
20499 4

[求助]聚类函数hclust请教 [推广有奖]

  • 0关注
  • 0粉丝

大专生

16%

还不是VIP/贵宾

-

威望
0
论坛币
51 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
345 点
帖子
32
精华
0
在线时间
0 小时
注册时间
2008-6-14
最后登录
2014-5-5

楼主
drosophilia 发表于 2008-6-23 16:01:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
访问作者主页 查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

聚类函数hclust请教

我的代码:
> X <- read.table("data.txt")
> hc <- hclust(X, method = "single")

提示错误:

Error in if (n < 2) stop("must have n >= 2 objects to cluster") :
argument is of length zero

好像是说值为0的数目小于2而不能聚类,可是我的对象数目(即值为0的数目有5个,是大于2的呀)。



文件内容如下:(data.txt 为对象之间的距离矩阵)
            Alabama   Alaska   Arizona   Arkansas California
Alabama       0.000000 37.177009 63.008333 46.928137 55.524769
Alaska       37.177009   0.000000 46.592489 77.197409 45.102217
Arizona       63.008333 46.592489   0.000000 108.851918 23.194180
Arkansas     46.928137 77.197409 108.851918   0.000000 97.582017
California     55.524769 45.102217 23.194180 97.582017   0.000000

[楼 主] | Posted: 2008-06-23 11:05
二维码

扫码加我 拉你入群

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

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

关键词:hclust CLU 求助 请教 函数 hclust

回帖推荐

just31415 发表于2楼  查看完整内容

下面一段是R中hclust函数的部分代码,标出颜色的地方就是您运行程序出错的地方。在hclust函数中hclust(d, method = "complete", members=NULL),参数d指明要求a dissimilarity structure as produced by dist. 我想你的距离矩阵并不是dist()生成的吧?我想到的就这些,希望对你有帮助。关于为什么d必须用dist构成的距离结构 我不知道,希望有人能解答一下METHODS <- c("ward", "single", "complete", "average", "mcquitty ...

本帖被以下文库推荐

沙发
just31415 发表于 2008-6-23 18:26:00

下面一段是R中hclust函数的部分代码,标出颜色的地方就是您运行程序出错的地方。在hclust函数中hclust(d, method = "complete", members=NULL)
,参数d指明要求a dissimilarity structure as produced by dist.

我想你的距离矩阵并不是dist()生成的吧?

我想到的就这些,希望对你有帮助。关于为什么d必须用dist构成的距离结构 我不知道,希望有人能解答一下

METHODS <- c("ward", "single", "complete", "average", "mcquitty",
        "median", "centroid")
    method <- pmatch(method, METHODS)
    if (is.na(method))
        stop("invalid clustering method")
    if (method == -1)
        stop("ambiguous clustering method")
    n <- as.integer(attr(d, "Size"))
    if (is.null(n))
        stop("invalid dissimilarities")
    if (n < 2)
        stop("must have n >= 2 objects to cluster")

[此贴子已经被作者于2008-6-23 18:36:25编辑过]

已有 1 人评分经验 收起 理由
shanshantz + 20 精彩帖子

总评分: 经验 + 20   查看全部评分

https://app.yinxiang.com/referral/Registration.action?sig=2d

藤椅
drosophilia 发表于 2008-6-23 19:14:00

我也注意到了:参数d指明要求a dissimilarity structure as produced by dist.

但我总觉得dist本身就是一个距离矩阵, 而且是一个对称方阵,只是默认打印出来的结果是三角矩阵,并且也把对角线上的0元素给扔了,我想是节约内存的需要把,因此我认为它跟我从文件中读出来的数据结构应该是一样的,

我用过另外一个函数cmdscale ,里面参数d要求:a distance structure such as that returned by dist or a full symmetric matrix containing the dissimilarities.

跟这里确实有一点区别,对于cmdscale函数,我用dist返回的结果跟从文件中读出来的对称方阵都能够搞定顺利搞定

自己感觉是面向对象中一个问题,  有些糊涂,希望站内高手帮解答解答

板凳
drosophilia 发表于 2008-6-24 09:45:00
以下是引用just31415在2008-6-23 18:26:00的发言:

下面一段是R中hclust函数的部分代码,标出颜色的地方就是您运行程序出错的地方。在hclust函数中hclust(d, method = "complete", members=NULL)
,参数d指明要求a dissimilarity structure as produced by dist.

问题已经解决,

问题还是出现在:参数d指明要求a dissimilarity structure as produced by dist(hclust函数的一部分开关代码)

我文件中的距离矩阵虽然是一个对称的方阵,跟dist函数返回的数据结构也一样,但是电脑不一定能判断它本质上就是dist数据结构,所以我们可以把dist当成matrix,data.frame等另外的一种数据结构对象,因此这么处理以后就可以了

x=as.dist(read.table(data.txt))

hclust(x)

...........

感谢二楼的耐心说明,因为你确实仔细看了我提出的问题,谢谢各位

[此贴子已经被作者于2008-6-24 9:46:23编辑过]

报纸
ccs0531 发表于 2018-6-10 10:33:19
非常清晰的对话。谢谢

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 19:45