当我将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()毫不奇怪地什么都不做。 inspect命令中没有静音或静音选项。
我能得到的最接近的是
out= capture.output(inspect(matrix))
out= data.frame(out)
显然不会提供相同的data.frame,但如果我需要沿着这条路走下去很容易。任何其他(不那么hacky)的建议都会有所帮助。感谢。
Windows 7 64位R-3.0.1 tm包是最新版本(0.5-9.1)。
答案 0 :(得分:7)
然后在捕获内部分配:
capture.output(out <- data.frame(inspect(matrix))) -> .null # discarding this
但实际上,inspect
用于视觉检查,所以可以尝试
as.data.frame(as.matrix(matrix))
相反(btw matrix
是变量的一个非常不幸的名称,因为它是一个基本函数。)
答案 1 :(得分:0)
使用此输入(使用名为“matrix”的变量从您的问题更改的可变名称可能会造成混淆:
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