K表示R中的聚类 - 无效运算符

时间:2015-01-18 00:51:55

标签: r cluster-analysis k-means

我在运行以下R代码时收到错误Error in x$j : $ operator is invalid for atomic vector,表示k意味着群集。

有一些可以忽略的早期步骤仅仅是出于其他原因,但我已将它们包含在内以便完整。

findFreqTerms(dtm[cl$cluster==1], 50)引发的错误。其他一切都很好。

library(tm)
data(crude)


# create mycorpus first using this line
mycorpus<-Corpus(VectorSource(crude))

#create document term matrix using tdidf for further processing
dtm <- DocumentTermMatrix(mycorpus)
dtm_tfxidf <- weightTfIdf(dtm)


## do document clustering
### k-means (this uses euclidean distance)
m <- as.matrix(dtm_tfxidf)
rownames(m) <- 1:nrow(m)

### don't forget to normalize the vectors so Euclidean makes sense
norm_eucl <- function(m) m/apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5)
m_norm <- norm_eucl(m)


### cluster into 10 clusters
cl <- kmeans(m_norm, 10)
cl

table(cl$cluster)

### show clusters using the first 2 principal components
plot(prcomp(m_norm)$x, col=cl$cl)

findFreqTerms(dtm[cl$cluster==1], 50) #this is not working
inspect(mycorpus[which(cl$cluster==1)])

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您的问题是文档术语矩阵dtm应该被索引为带有行和列的2D矩阵。它应该是

findFreqTerms(dtm[cl$cluster==1,], 50)

(注意额外的逗号,我们将第二个参数留空,以便返回所有列)