4

当我将 inspect() 对象保存在 R 的 tm 包中时,它会打印到屏幕上。它确实将我想要的数据保存在 data.frame 中,但是我有数千个文档要分析,并且打印到屏幕上占用了我的内存。

library(tm)
data("crude")
matrix <- TermDocumentMatrix(corpus,control=list(removePunctuation = TRUE,
                                             stopwords=TRUE))
out= data.frame(inspect(matrix))

我已经尝试了所有我能想到的技巧。capture.output() 改变对象(不是想要的效果),sink() 也是如此。dev.off() 不起作用。invisible() 什么都不做。suppressWarnings()、suppressMessages() 和 try() 不出所料地什么都不做。检查命令中没有静默或静默选项。

我能得到的最接近的是

out= capture.output(inspect(matrix))
out= data.frame(out)

值得注意的是,它没有给出相同的data.frame,但如果我需要沿着这条路线走,很容易。任何其他(不那么老套)的建议都会有所帮助。谢谢。

Windows 7 64 位 R-3.0.1 tm 软件包是最新版本 (0.5-9.1)。

4

2 回答 2

7

然后在捕获中分配:

capture.output(out <- data.frame(inspect(matrix))) -> .null # discarding this

但实际上,inspect是为了目视检查,所以也许试试

as.data.frame(as.matrix(matrix))

相反(顺便说一句matrix,对于变量来说,这是一个非常不幸的名称,因为这是一个基本函数)。

于 2013-09-11T19:43:34.763 回答
0

使用此输入(变量名称从您的问题更改为使用名为“矩阵”的变量可能会令人困惑:

library(tm)
data("crude")

tdm <- TermDocumentMatrix(crude,control=list(removePunctuation = TRUE,
                                                 stopwords=TRUE))

那么这将避免打印到屏幕上

m <- as.matrix(tdm)

然后我会亲自做类似的事情

require(data.table)
data.table(m, keep.rownames=TRUE)

#               rn 127 144 191 194 211 236 237 242 246 248 273 349 352 353 368 489 502 543 704 708
#    1:     100000   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0
#    2:        108   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
#    3:        111   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
#    4:        115   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
#    5:      12217   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0
# ---                                                                                           
#  996:  yesterday   0   0   0   0   0   0   0   3   0   0   1   0   0   0   0   0   0   0   0   0
#  997: yesterdays   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
#  998:       york   0   1   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   1   0
#  999:       zero   0   0   0   0   0   0   1   0   0   0   1   0   0   0   0   0   0   0   0   0
# 1000:       zone   0   0   0   0   0   0   0   0   0   0   2   0   0   0   0   0   0   0   0   0 
于 2013-09-30T09:42:00.847 回答