【问题标题】:R switch between writing to a text file and the console (stdout)R 在写入文本文件和控制台(标准输出)之间切换
【发布时间】:2021-06-11 12:02:43
【问题描述】:

我有一个 R 程序,它使用 writeLines、cat 和 print 生成大量文本,我希望能够在文本文件和控制台之间来回切换输出。一个最小的例子如下:

WRITE_TO_TEXT_FILE <- TRUE
TEXT_FN <- "C:/temp/test.text"

if (WRITE_TO_TEXT_FILE) {
  fileConnection <- file(TEXT_FN )
  writeLines("My text string", fileConnection)
  close(fileConnection)

} else {
  writeLines("My text string")

}

但这很笨拙,而且我有很多地方需要编辑我的写语句。有没有办法给标准输出一个文件名,然后在文件之间切换,例如像

if (WRITE_TO_TEXT_FILE  ) {
  fileConnection <- file(TEXT_FN )

} else {
  fileConnection <- file(stdout)

}

writeLines("My text string", fileConnection)
close(fileConnection)

提前致谢

托马斯·飞利浦

【问题讨论】:

    标签: r file-io


    【解决方案1】:

    您也可以使用stdout() 作为默认输出的连接。你可以做类似的事情

    WRITE_TO_TEXT_FILE <- TRUE
    TEXT_FN <- "C:/temp/test.text"
    
    # at the start
    fcon <- stdout()
    if (WRITE_TO_TEXT_FILE) {
      fcon  <- file(TEXT_FN)
    }
    
    
    # use fcon anytime you need to write output
    writeLines("My text string", fcon)
    
    
    # at the very end
    if (WRITE_TO_TEXT_FILE) {
      # you usually don't close stdout
      close(fcon)
    }
    

    【讨论】:

    • 美丽 - 谢谢。我看到我犯的一个错误是未能在 stdout 之后包含括号,即我尝试了 stdout、“stdout”等的变体,但没有输入 stdout()。
    • 是的,在 R 中,它是一个返回连接的函数,而不是像其他语言中的对象。
    • 一个微妙的转折:由于我必须从程序中的多个位置写入文件,我必须以附加模式打开它,即fcon &lt;- file(TEXT_FN, "a),此外,为了防止它写入在屏幕上,我必须在定义fcon 后立即添加sink(fcon)。在程序结束时,我不得不在close(fcon)之前添加sink()
    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2012-02-01
    • 2014-05-07
    相关资源
    最近更新 更多