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

时间:2014-06-24 21:40:13

标签: r

假设我有一个文件"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" 

2 个答案:

答案 0 :(得分:6)

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

捕获它
tc <- textConnection("messages","w")
sink(tc, type="message")
s <- scan("data.txt")
sink(NULL, type="message")
close(tc)

messages
# [1] "Read 5 items"

答案 1 :(得分:1)

sink

中的utils::capture.output()是一个方便的包装器
z<-capture.output(s<-scan("data.txt"), type="message")
z
#> [1] "Read 15 items"