K 表示 R 中的聚类 - 无效运算符
K means clustering in R - invalid operator
我收到一个错误 Error in x$j : $ operator is invalid for atomic vector
而 运行 下面的 k 的 R 代码表示聚类。
有几个早期步骤可以忽略,它们只是出于其他原因,但为了完整起见,我将它们包括在内。
第 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)])
非常感谢任何帮助。
您的问题是文档术语矩阵 dtm
应该作为具有行和列的二维矩阵进行索引。应该是
findFreqTerms(dtm[cl$cluster==1,], 50)
(注意多余的逗号,我们将第二个参数留空以便返回所有列)
我收到一个错误 Error in x$j : $ operator is invalid for atomic vector
而 运行 下面的 k 的 R 代码表示聚类。
有几个早期步骤可以忽略,它们只是出于其他原因,但为了完整起见,我将它们包括在内。
第 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)])
非常感谢任何帮助。
您的问题是文档术语矩阵 dtm
应该作为具有行和列的二维矩阵进行索引。应该是
findFreqTerms(dtm[cl$cluster==1,], 50)
(注意多余的逗号,我们将第二个参数留空以便返回所有列)