我在运行以下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)])
非常感谢任何帮助。
答案 0 :(得分:3)
您的问题是文档术语矩阵dtm
应该被索引为带有行和列的2D矩阵。它应该是
findFreqTerms(dtm[cl$cluster==1,], 50)
(注意额外的逗号,我们将第二个参数留空,以便返回所有列)