as.vector中的APCluster错误(数据):没有用于将此S4类强制转换为向量的方法

时间:2017-06-11 19:35:55

标签: r s4 coerce

使用非聚集输入数据框(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对象作为输入可能出错的建议吗?

1 个答案:

答案 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;包含原始数据,因此会尝试将其转换为子表对象。这就是您收到此错误消息的原因。