我在R中有一个关于k-means聚类的问题。实际上我按照这个article做了一切。一切都基于tm包中的示例,因此不需要数据导入。 acq包含50个文档和20个原始文档。
library(tm)
data("acq")
data("crude")
ws <- c(acq, crude)
wsTDM <- Data(TermDocumentMatrix(ws)) #First problem here
wsKMeans <- kmeans(wsTDM, 2)
wsReutersCluster <- c(rep("acq", 50), rep("crude", 20))
cl_agreement(wsKMeans, as.cl_partition(wsReutersCluster), "diag")
Error in lapply(X, FUN, ...) :
(list) object cannot be coerced to type 'integer'
我实际上想要创建交叉协议矩阵。但是这篇文章是在2008年写的,从那以后发生了很多变化。数据功能仅在RSurvey包中提供,但我有点怀疑它是否相同。我认为主要的问题是TermDocumentMatrix是S4类,现在它是S3。我知道可能只有文字才能这样做。但我想这样做,因为在TDM中可以删除停用词,删除等等以获得更好的结果。因此,如果有人有任何解决方案,那将是非常好的。
答案 0 :(得分:3)
TDM存储为稀疏矩阵,如?TermDocumentMatrix
中所述。这也可以通过检查像str(wsTDM)
这样的对象来看出。旧的Data()
函数只是一种以常规矩阵形式访问内容的方法。它不再需要了。只需执行kmeans(wsTDM, 2)
,您就会看到输出符合预期,并在70个要素(文档)上识别出2775个观察值(术语)。祝你好运!