【问题标题】:Convert a printed message into a character vector将打印的消息转换为字符向量
【发布时间】:2014-06-24 21:40:12
【问题描述】:

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

【问题讨论】:

  • 之后使用length有什么问题?
  • 我的错,我编辑了问题。我想大致了解如何将消息转换为字符向量
  • @RichardScriven 您可能知道,capture.outputsink 通常可以解决问题。我不太明白他们为什么不在这里工作。
  • 接收器不起作用,因为消息对 cat 的自定义调用指定了 file=stderr()

标签: r


【解决方案1】:

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"

【讨论】:

    【解决方案2】:

    sinkutils::capture.output() 中有一个方便的包装器

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

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2019-06-18
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2016-01-15
      • 2015-03-23
      • 1970-01-01
      相关资源
      最近更新 更多