将打印的消息转换为字符向量



假设我有一个文件"data.txt",它可以用以下代码创建

m <- matrix(c(13, 14, 4950, 20, 50, 4949, 22, 98, 4948, 
              30, 58, 4947, 43, 48, 4946), 5, byrow = TRUE)
write.table(m, "data.txt", row.names = FALSE, col.names = FALSE)

scan将文件读入R,一条消息与数据一起传递。

( s <- scan("data.txt") )
# Read 15 items
#  [1]   13   14 4950   20   50 4949   22   98 4948
# [10]   30   58 4947   43   48 4946

我想检索消息Read 15 items作为字符向量。我知道我可以通过输入last.warning获得最后记录的警告,并且可以将其转换为具有names(last.warning)的字符向量,但是没有last.message这样的对象。

是否有一种方法将输出的消息转换为字符向量?期望的结果是

[1] "Read 15 items" 

message()的默认处理程序通过cat()将结果发送给stderr。你可以用

tc <- textConnection("messages","w")
sink(tc, type="message")
s <- scan("data.txt")
sink(NULL, type="message")
close(tc)
messages
# [1] "Read 5 items"

utils::capture.output()中有一个方便的sink包装

z<-capture.output(s<-scan("data.txt"), type="message")
z
#> [1] "Read 15 items"

最新更新