全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
20552 4
2008-06-23
访问作者主页 查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

聚类函数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
二维码

扫码加我 拉你入群

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

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

全部回复
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编辑过]

二维码

扫码加我 拉你入群

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

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

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返回的结果跟从文件中读出来的对称方阵都能够搞定顺利搞定

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

二维码

扫码加我 拉你入群

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

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

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编辑过]

二维码

扫码加我 拉你入群

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

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

2018-6-10 10:33:19
非常清晰的对话。谢谢
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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