1

使用非集群输入数据帧 (fci),从 apcluster() 创建一个 APResult,如下所示:

> 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 

在线文档说 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 对象作为输入可能做错了什么的任何建议?

4

1 回答 1

0

如果您想在作为“ ”或“ ”对象aggExCluster()给出的先前聚类结果之上使用,则需要将这些对象作为参数“ ”传递,此外,相似性矩阵需要可用。这是基于您的示例的自包含代码片段(请注意,从返回的对象 ' '包含相似度矩阵):ExClustAPResultxapresapcluster()

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)

如果您从相似度矩阵开始,您可以将其包含在“APResult”对象中,即

sim <- negDistMat(r=2, x)
apres <- apcluster(sim, q=0.7, includeSim=TRUE)
aggExCluster(x=apres)

(如果apcluster()在相似度矩阵上调用,默认情况下该矩阵不包含在结果对象中,可以用' includeSim=TRUE'覆盖)

或者,您也可以通过参数 ' s' 指定相似度矩阵:

sim <- negDistMat(r=2, x)
apres <- apcluster(sim, q=0.7)
aggExCluster(x=apres, s=sim)

aggExCluster()使用相似度函数和 ' ' 对象调用APResult将不起作用,因为 ' APResult' 不包含原始数据,因此aggExCluster()无法计算聚类所需的相似度矩阵。相反,如果aggExCluster() 使用参数“ s”作为相似函数调用,它期望参数“ x”包含原始数据,因此会尝试将其转换为子集对象。这就是您收到此错误消息的原因。

于 2017-06-13T07:38:22.790 回答