使用非聚集输入数据框(fci),从apcluster()创建一个APResult作为epxected:
> apclr2q02 <- apcluster(negDistMat(r=2), fci)
> show(apclr2q02)
APResult object
Number of samples = 1045
Number of iterations = 826
Input preference = -22.6498
Sum of similarities = -1603.52
Sum of preferences = -1336.338
Net similarity = -2939.858
Number of clusters = 59
在线documentation表示aggExCluster()可以接受要作为输入聚类的数据,也可以接受先前的聚类结果(ExClust或APResult)。在非聚簇数据(fci)上运行aggExCluster,代码按预期工作:
> aglomr2 <- aggExCluster(negDistMat(r=2), fci)
> aglomr2
AggExResult object
Number of samples = 1045
Maximum number of clusters = 1045
结果可以用树状图格式绘制,一切都很好;但是,使用上面获得的APResult(apclr2q02)作为输入,将返回以下错误:
> aglomr2 <- aggExCluster(negDistMat(r=2), apclr2q02)
Error in as.vector(data) :
no method for coercing this S4 class to a vector
有关APResult对象作为输入可能出错的建议吗?
答案 0 :(得分:0)
如果您希望在之前的群集结果之上使用aggExCluster()
作为&#39; ExClust
&#39;或者&#39; APResult
&#39;对象,这些对象需要作为参数传递&#39; x
&#39;此外,需要提供相似性矩阵。以下是基于您的示例的自包含代码段(请注意,从apres
返回的对象&#39; apcluster()
&#39;包含相似度矩阵):
cl1 <- cbind(rnorm(50,0.2,0.05),rnorm(50,0.8,0.06))
cl2 <- cbind(rnorm(50,0.7,0.08),rnorm(50,0.3,0.05))
x <- rbind(cl1,cl2)
apres <- apcluster(negDistMat(r=2), x, q=0.7)
aggExCluster(x=apres)
如果您从相似性矩阵开始,您可以将其包含在&#39; APResult&#39;对象,即
sim <- negDistMat(r=2, x)
apres <- apcluster(sim, q=0.7, includeSim=TRUE)
aggExCluster(x=apres)
(如果在相似度矩阵上调用apcluster()
,默认情况下矩阵不会包含在结果对象中,可以使用&#39; includeSim=TRUE
&#39;)覆盖矩阵
或者,您也可以通过参数&#39; s
&#39;指定相似性矩阵:
sim <- negDistMat(r=2, x)
apres <- apcluster(sim, q=0.7)
aggExCluster(x=apres, s=sim)
使用相似性功能调用aggExCluster()
并使用&{39; APResult
&#39;对象无效,因为APResult
&#39;不包括原始数据,因此aggExCluster()
无法计算群集所需的相似性矩阵。相反,如果aggExCluster()
用参数调用&#39; s
&#39;作为一个相似函数,它期望论证&#39; x
&#39;包含原始数据,因此会尝试将其转换为子表对象。这就是您收到此错误消息的原因。