我正在努力使用TDM NA值来提交群集。最初我设置了:
titles.tdm <- as.matrix(TermDocumentMatrix(titles.cw, control = list(bounds = list(global = c(10,Inf)))))
titles.sc <- scale(na.omit(titles.tdm))
获得了418个术语和6955个文档的矩阵。此时执行:
titles.km <- kmeans(titles.sc, 2)
抛出
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
当我决定删除这些值时:
titles.sf <- titles.sc[,colSums(titles.sc) > 0]
我已经获得了4695个文档的矩阵,但应用kmeans
函数仍然会抛出此错误。当我查看titles.sf
变量时,仍然存在具有NA值的列(docs)。我搞砸了,不知道做错了什么。如何删除这些文件?
之前,我已应用titles.cw <- titles.cc[which(str_trim(titles.cc$content) != "")]
titles.cc
来自tm
库类的纯语料库对象,以删除黑色文档。它可能有效,但我的NA值是在文件中,当然不是空白。
答案 0 :(得分:2)
以下是一些示例数据:
set.seed(123)
titles.sc <- matrix(1:25,5,5)
titles.sc[sample(length(titles.sc),5)]<-NA
titles.sc
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 6 11 16 21
# [2,] 2 7 12 17 NA
# [3,] 3 NA 13 18 23
# [4,] 4 9 14 NA 24
# [5,] 5 NA 15 NA 25
kmeans
会引发您的错误
kmeans(titles.sc, 2)
# Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
因为您的列子集可能不是您所期望的那样:
colSums(titles.sc) > 0
# [1] TRUE NA TRUE NA NA
colSums
生成NA
,如果未删除缺失值(请查看?colSums
下的帮助文件)。除其他外,你可以做
colSums(is.na(titles.sc)) == 0
# [1] TRUE FALSE TRUE FALSE FALSE
或
!is.na(colSums(titles.sc) > 0)
# [1] TRUE FALSE TRUE FALSE FALSE
现在,它有效:
titles.sf <- titles.sc[,colSums(is.na(titles.sc)) == 0,drop=F]
kmeans(titles.sf,2)
# K-means clustering with 2 clusters of sizes 2, 3
# ...